File Coverage

lib/OODoc/Text/Structure.pm
Criterion Covered Total %
statement 15 66 22.7
branch 0 22 0.0
condition 0 4 0.0
subroutine 5 22 22.7
pod 12 13 92.3
total 32 127 25.2


line stmt bran cond sub pod time code
1             # This code is part of Perl distribution OODoc version 3.05.
2             # The POD got stripped from this file by OODoc version 3.05.
3             # For contributors see file ChangeLog.
4              
5             # This software is copyright (c) 2003-2025 by Mark Overmeer.
6              
7             # This is free software; you can redistribute it and/or modify it under
8             # the same terms as the Perl 5 programming language system itself.
9             # SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later
10              
11              
12             package OODoc::Text::Structure;{
13             our $VERSION = '3.05';
14             }
15              
16 1     1   374 use parent 'OODoc::Text';
  1         1  
  1         10  
17              
18 1     1   59 use strict;
  1         1  
  1         18  
19 1     1   2 use warnings;
  1         10  
  1         92  
20              
21 1     1   23 use Log::Report 'oodoc';
  1         4  
  1         9  
22 1     1   403 use List::Util 'first';
  1         3  
  1         1283  
23              
24             #--------------------
25              
26             sub init($)
27 0     0 0   { my ($self, $args) = @_;
28 0 0         $self->SUPER::init($args) or return;
29 0           $self->{OTS_subs} = [];
30 0 0         $self->{OTS_level} = delete $args->{level} or panic;
31 0           $self;
32             }
33              
34              
35             sub emptyExtension($)
36 0     0 1   { my ($self, $container) = @_;
37              
38 0           my $new = (ref $self)->new(
39             name => $self->name,
40             linenr => -1,
41             level => $self->level,
42             container => $container,
43             );
44 0           $new->extends($self);
45 0           $new;
46             }
47              
48             #--------------------
49              
50 0     0 1   sub level() { $_[0]->{OTS_level} }
51              
52              
53             sub niceName()
54 0     0 1   { my $name = shift->name;
55 0 0         $name =~ m/[a-z]/ ? $name : ucfirst(lc $name);
56             }
57              
58             #--------------------
59              
60 0     0 1   sub path() { panic "Not implemented" }
61              
62              
63 0     0 1   sub findEntry($) { panic "Not implemented" }
64              
65             #--------------------
66              
67             sub all($@)
68 0     0 1   { my ($self, $method) = (shift, shift);
69 0           $self->$method(@_);
70             }
71              
72              
73             sub isEmpty()
74 0     0 1   { my $self = shift;
75              
76 0           my $manual = $self->manual;
77 0 0         return 0 if $self->description !~ m/^\s*$/;
78 0     0     return 0 if first { !$manual->inherited($_) }
79 0 0         $self->examples, $self->subroutines;
80              
81             my @nested
82 0 0         = $self->isa('OODoc::Text::Chapter') ? $self->sections
    0          
    0          
83             : $self->isa('OODoc::Text::Section') ? $self->subsections
84             : $self->isa('OODoc::Text::SubSection') ? $self->subsubsections
85             : return 1;
86              
87 0     0     not first { !$_->isEmpty } @nested;
  0            
88             }
89              
90             sub publish($$)
91 0     0 1   { my ($self, $args) = @_;
92 0           my $p = $self->SUPER::publish($args);
93 0           $p->{level} = $self->level;
94 0           $p->{path} = $self->path;
95              
96 0           my @n = map $_->publish($args)->{id}, $self->nest;
97 0 0         $p->{nest} = \@n if @n;
98              
99 0           my @s = map $_->publish($args)->{id}, $self->subroutines;
100 0 0         $p->{subroutines} = \@s if @s;
101 0           $p;
102             }
103              
104             #--------------------
105              
106             sub addSubroutine(@)
107 0     0 1   { my ($self, $fn, @objs) = @_;
108 0   0       my $subs = $self->{OTS_subs} ||= [];
109              
110 0           foreach my $sub (@objs)
111 0           { $sub->container($self);
112              
113 0           my $name = $sub->name;
114 0 0   0     if(my $has = first { $_->name eq $name } @$subs)
  0            
115 0           { warning __x"name '{name}' seen before, file {file} lines {nr1} and {nr2}", name => $name, file => $fn, nr1 => $has->linenr, nr2 => $sub->linenr;
116             }
117 0           push @{$self->{OTS_subs}}, $sub;
  0            
118             }
119              
120 0           $self;
121             }
122              
123              
124 0     0 1   sub subroutines() { @{ $_[0]->{OTS_subs}} }
  0            
125              
126              
127             sub subroutine($)
128 0     0 1   { my ($self, $name) = @_;
129 0     0     first {$_->name eq $name} $self->subroutines;
  0            
130             }
131              
132              
133             sub setSubroutines($)
134 0     0 1   { my $self = shift;
135 0   0       $self->{OTS_subs} = shift || [];
136             }
137              
138             1;