File Coverage

blib/lib/MarpaX/Languages/M4.pm
Criterion Covered Total %
statement 155 244 63.5
branch 2 90 2.2
condition n/a
subroutine 27 48 56.2
pod n/a
total 184 382 48.1


line stmt bran cond sub pod time code
1 1     1   121112 use Moops;
  1         32444  
  1         7  
2 1     1   44090 use MarpaX::Languages::M4::Impl::Default;
  1         5  
  1         13  
3              
4             # PODNAME: MarpaX::Languages::M4
5              
6             # ABSTRACT: M4 pre-processor
7              
8 1     1   1449 class MarpaX::Languages::M4 {
  1     1   31  
  1         7  
  1         2  
  1         63  
  1         6  
  1         2  
  1         9  
  1         347  
  1         2  
  1         6  
  1         60  
  1         3  
  1         46  
  1         5  
  1         2  
  1         80  
  1         43  
  1         6  
  1         1  
  1         6  
  1         4878  
  1         2  
  1         7  
  1         441  
  1         3  
  1         8  
  1         147  
  1         2  
  1         9  
  1         82  
  1         2  
  1         7  
  1         293  
  1         2  
  1         8  
  1         1000  
  1         2  
  1         7  
  1         2675  
  1         4  
  1         5  
  1         2  
  1         26  
  1         5  
  1         2  
  1         66  
  1         10  
  1         5  
  1         145  
  1         3802  
  0         0  
9 1         15 extends 'MarpaX::Languages::M4::Impl::Default';
10              
11 1         186 our $VERSION = '0.020'; # VERSION
12              
13 1         3 our $AUTHORITY = 'cpan:JDDPAUSE'; # AUTHORITY
14              
15             #
16             # We are lazy and just explicitely proxy all Impl methods
17             #
18 1 0   1   1843 method quote (@args) { $self->impl_quote(@args) }
  1 0   0   5  
  1         149  
  1         5  
  0         0  
  0         0  
  0         0  
  0         0  
19 1 0   1   1474 method unquote (@args) { $self->impl_unquote(@args) }
  1 0   0   2  
  1         104  
  1         228  
  0         0  
  0         0  
  0         0  
  0         0  
20 1 0   1   1643 method appendValue (@args) { $self->impl_appendValue(@args) }
  1 0   0   2  
  1         100  
  1         140  
  0         0  
  0         0  
  0         0  
  0         0  
21 1 0   1   1472 method value (@args) { $self->impl_value(@args) }
  1 0   0   2  
  1         99  
  1         163  
  0         0  
  0         0  
  0         0  
  0         0  
22 1 0   1   1744 method valueRef (@args) { $self->impl_valueRef(@args) }
  1 0   0   3  
  1         164  
  1         138  
  0         0  
  0         0  
  0         0  
  0         0  
23 1 0   1   1640 method parseIncremental (@args) { $self->impl_parseIncremental(@args) }
  1 0   0   2  
  1         103  
  1         134  
  0         0  
  0         0  
  0         0  
  0         0  
24 1 50   1   1438 method parse (@args) { $self->impl_parse(@args) }
  1 50   140   3  
  1         112  
  1         134  
  140         2818  
  140         1131  
  140         301  
  140         3067  
25 1 0   1   1501 method unparsed (@args) { $self->impl_unparsed(@args) }
  1 0   0   2  
  1         96  
  1         132  
  0            
  0            
  0            
  0            
26 1 0   1   1449 method setEoi (@args) { $self->impl_setEoi(@args) }
  1 0   0   4  
  1         124  
  1         132  
  0            
  0            
  0            
  0            
27 1 0   1   1636 method eoi (@args) { $self->impl_eoi(@args) }
  1 0   0   2  
  1         94  
  1         131  
  0            
  0            
  0            
  0            
28 1 0   1   1939 method raiseException (@args) { $self->impl_raiseException(@args) }
  1 0   0   5  
  1         159  
  1         132  
  0            
  0            
  0            
  0            
29 1 0   1   1613 method file (@args) { $self->impl_file(@args) }
  1 0   0   3  
  1         104  
  1         132  
  0            
  0            
  0            
  0            
30 1 0   1   1417 method line (@args) { $self->impl_line(@args) }
  1 0   0   3  
  1         124  
  1         130  
  0            
  0            
  0            
  0            
31 1 0   1   1464 method rc (@args) { $self->impl_rc(@args) }
  1 0   0   2  
  1         97  
  1         130  
  0            
  0            
  0            
  0            
32 1 0   1   1637 method isImplException (@args) { $self->impl_isImplException(@args) }
  1 0   0   2  
  1         96  
  1         130  
  0            
  0            
  0            
  0            
33 1 0   1   1459 method macroExecute (@args) { $self->impl_macroExecute(@args) }
  1 0   0   2  
  1         94  
  1         132  
  0            
  0            
  0            
  0            
34 1 0   1   1502 method macroCallId (@args) { $self->impl_macroCallId(@args) }
  1 0   0   2  
  1         110  
  1         130  
  0            
  0            
  0            
  0            
35 1 0   1   1489 method nbInputProcessed (@args) { $self->impl_nbInputProcessed(@args) }
  1 0   0   3  
  1         113  
  1         132  
  0            
  0            
  0            
  0            
36 1 0   1   1497 method readFromStdin (@args) { $self->impl_readFromStdin(@args) }
  1 0   0   2  
  1         92  
  1         132  
  0            
  0            
  0            
  0            
37 1 0   1   1451 method canLog (@args) { $self->impl_canLog(@args) }
  1 0   0   2  
  1         112  
  1         133  
  0            
  0            
  0            
  0            
38 1 0   1   1461 method debugFile (@args) { $self->impl_debugFile(@args) }
  1 0   0   4  
  1         151  
  1         171  
  0            
  0            
  0            
  0            
39 1 0   1   2484 method defaultWarnMacroSequence (ClassName $class: @args) { $class->impl_defaultWarnMacroSequence(@args) }
  1 0   0   2  
  1 0       99  
  1         5  
  1         2  
  1         139  
  1         206  
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
40             }
41              
42              
43             1;
44              
45             __END__
46              
47             =pod
48              
49             =encoding UTF-8
50              
51             =head1 NAME
52              
53             MarpaX::Languages::M4 - M4 pre-processor
54              
55             =head1 VERSION
56              
57             version 0.020
58              
59             =head1 SYNOPSIS
60              
61             use POSIX qw/EXIT_SUCCESS/;
62             use MarpaX::Languages::M4;
63             use Log::Any;
64             use Log::Any::Adapter;
65             use Log::Any::Adapter::Callback;
66              
67             Log::Any::Adapter->set('Callback', min_level => 'trace', logging_cb => \&_logging_cb);
68              
69             my $m4 = MarpaX::Languages::M4->new_with_options();
70             $m4->parse('debugmode(`V\')m4wrap(`test\')');
71             print "Value: " . $m4->value . "\n";
72             print "Rc: " . $m4->rc . "\n";
73              
74             sub _logging_cb {
75             my ($method, $self, $format, @params) = @_;
76             printf STDERR "$format\n", @args;
77             }
78              
79             =head1 DESCRIPTION
80              
81             This package is an implementation of M4.
82              
83             =head1 METHODS
84              
85             =head2 $class->new(%options --> ConsumerOf[M4Impl])
86              
87             Please do m4pp --help for a list of all options. Returns a new M4 object instance.
88              
89             =head2 $self->quote(Str $string --> Str)
90              
91             Returns $string enclosed by current quote start and quote end.
92              
93             =head2 $self->unquote(Str $string --> Str)
94              
95             Returns the unquoted $string.
96              
97             =head2 $self->appendValue(Str $result --> ConsumerOf[M4Impl])
98              
99             Append string $result to M4 preprocessing output.
100              
101             =head2 $self->value(--> Str)
102              
103             Return M4 preprocessing output.
104              
105             =head2 $self->valueRef(--> Ref['SCALAR'])
106              
107             Return a reference to the M4 preprocessing output.
108              
109             =head2 $self->parseIncremental(Str $input --> ConsumerOf[M4Impl])
110              
111             Parses $input. Can be called any number of times.
112              
113             =head2 $self->parse(Str $input --> Str)
114              
115             Wrapper on parseIncremental(). Calling this method parses a single input and disable any later call to parseIncremental().
116              
117             =head2 $self->unparsed(--> Str)
118              
119             Returns the input not yet parsed. For example, when input ends with a macro call that requires parameters, and the parameters list is not complete.
120              
121             =head2 $self->setEoi(--> ConsumerOf[M4Impl])
122              
123             Turns on end-of-input flag. Then no call to parseIncremental() or parse() will be possible.
124              
125             =head2 $self->eoi(--> Bool)
126              
127             Get current end-of-input flag.
128              
129             =head2 $self->raiseException(Str $message --> Undef)
130              
131             Log $message to error stream and throw an exception of class ImplException.
132              
133             =head2 $self->file(--> Str)
134              
135             Get current file name. See NOTES.
136              
137             =head2 $self->line(--> PositiveOrZeroInt)
138              
139             Get current line number. See NOTES.
140              
141             =head2 $self->rc(--> Int)
142              
143             Get current parse return code. Should be POSIX::EXIT_SUCCESS() or POSIX::EXIT_FAILURE().
144              
145             =head2 $self->isImplException(Any $obj --> Bool)
146              
147             Return a boolean saying if $obj argument is an ImplException consumer.
148              
149             =head2 $self->macroExecute(ConsumerOf[M4Macro] $macro, @args --> Str|M4Macro)
150              
151             Execute macro $macro with arguments @args. Output is dependent of current parsing context, and can return an internal token instead of a string.
152              
153             =head2 $self->macroCallId(--> PositiveOrZeroInt)
154              
155             Return current macro internal call identifier. This number increases every time a macro is called.
156              
157             =head2 $self->nbInputProcessed(--> PositiveOrZeroInt)
158              
159             Return number of input processed so far.
160              
161             =head2 $self->readFromStdin(--> ConsumerOf[M4Impl])
162              
163             Enters interactive mode.
164              
165             =head2 $self->debugFile(--> Undef|Str)
166              
167             Return debug file, undef if none.
168              
169             =head2 $class->defaultWarnMacroSequence(--> Str)
170              
171             Return default --warn-macro-sequence option value (used by m4pp to handle MooX::Option non support of optional value on the command-line)
172              
173             =head1 NOTES
174              
175             file() and line() methods, nor synchronisation output, are currently not supported. This is on the TODO list for this package.
176              
177             M4 is a MooX::Role::Logger consumer, using explicitely Log::Any's "f" functions in all its logging methods. This mean that the message, in case you would use something like e.g. Log::Any::Adapter::Callback, is always formatted, with no additional parameter.
178              
179             =head1 SEE ALSO
180              
181             L<Marpa::R2>, L<Moops>, L<MooX::Role::Logger>, L<Log::Any>, L<Log::Any::Adapter::Callback>, L<POSIX>, L<M4 POSIX|http://pubs.opengroup.org/onlinepubs/9699919799/utilities/m4.html>, L<M4 GNU|https://www.gnu.org/software/m4/manual/m4.html>
182              
183             =head1 AUTHOR
184              
185             Jean-Damien Durand <jeandamiendurand@free.fr>
186              
187             =head1 COPYRIGHT AND LICENSE
188              
189             This software is copyright (c) 2015 by Jean-Damien Durand.
190              
191             This is free software; you can redistribute it and/or modify it under
192             the same terms as the Perl 5 programming language system itself.
193              
194             =cut