File Coverage

blib/lib/Swim/Grammar.pm
Criterion Covered Total %
statement 16 16 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod 1 1 100.0
total 23 23 100.0


line stmt bran cond sub pod time code
1 2     2   12 use strict; use warnings;
  2     2   3  
  2         48  
  2         8  
  2         3  
  2         52  
2             package Swim::Grammar;
3 2     2   7 use Pegex::Base;
  2         3  
  2         8  
4              
5             extends 'Pegex::Grammar';
6              
7 2     2   2521 use constant file => '../swim-pm/ext/swim-pgx/swim.pgx';
  2         3  
  2         130  
8              
9 2         2449 use constant start_rules => [
10             'document',
11             'text-markup',
12             'block-list-item',
13 2     2   11 ];
  2         8  
14              
15             sub make_tree { # Generated/Inlined by Pegex::Grammar (0.59)
16             {
17 2     2 1 409 '+grammar' => 'swim',
18             '+toprule' => 'document',
19             '+version' => '0.0.2',
20             'block_blank' => {
21             '.ref' => 'line_blank'
22             },
23             'block_code' => {
24             '.rgx' => qr/\G\\{3}\r?\n((?:.*(?:\r?\n|\z))*?)\\{3}(?:\r?\n|\z)(?:\ +(?:\r?\n|\z)|\r?\n)?/
25             },
26             'block_comment' => {
27             '.rgx' => qr/\G\#{3}\r?\n((?:.*(?:\r?\n|\z))*?)\#{3}(?:\r?\n|\z)(?:\ +(?:\r?\n|\z)|\r?\n)?/
28             },
29             'block_func' => {
30             '.rgx' => qr/\G<<<\ *([\w\-]+)\ *(?:(.*?)\ *|\r?\n((?:.*\r?\n)*?))\>\>\>\r?\n/
31             },
32             'block_head' => {
33             '.rgx' => qr/\G(={1,4})\ +(?:(.+?)\ +=+(?:\r?\n|\z)|(.+\r?\n(?:[^\s].*\r?\n)*[^\s].*?)\ +=+(?:\r?\n|\z)|(.+\r?\n(?:[^\s].*\r?\n)*)(?=[\ \*=\#]|(?:\r?\n|\z)))(?:\ +(?:\r?\n|\z)|\r?\n)?/
34             },
35             'block_list' => {
36             '.any' => [
37             {
38             '.ref' => 'block_list_bullet'
39             },
40             {
41             '.ref' => 'block_list_number'
42             },
43             {
44             '.ref' => 'block_list_data'
45             }
46             ]
47             },
48             'block_list_bullet' => {
49             '.rgx' => qr/\G(\*\ .*(?:\r?\n|\z)(?:\*\ .*(?:\r?\n|\z)|(?:\ +(?:\r?\n|\z)|\r?\n)|\ {2}.*(?:\r?\n|\z))*)/
50             },
51             'block_list_data' => {
52             '.rgx' => qr/\G(\-\ .*(?:\r?\n|\z)(?:\-\ .*(?:\r?\n|\z)|(?:\ +(?:\r?\n|\z)|\r?\n)|\ {2}.*(?:\r?\n|\z))*)/
53             },
54             'block_list_item' => {
55             '+min' => 0,
56             '.any' => [
57             {
58             '.ref' => 'block_blank'
59             },
60             {
61             '.ref' => 'block_comment'
62             },
63             {
64             '.ref' => 'line_comment'
65             },
66             {
67             '.ref' => 'block_head'
68             },
69             {
70             '.ref' => 'block_pref'
71             },
72             {
73             '.ref' => 'block_list'
74             },
75             {
76             '.ref' => 'block_title'
77             },
78             {
79             '.ref' => 'block_verse'
80             },
81             {
82             '.ref' => 'block_para'
83             }
84             ]
85             },
86             'block_list_number' => {
87             '.rgx' => qr/\G(\+\ .*(?:\r?\n|\z)(?:\+\ .*(?:\r?\n|\z)|(?:\ +(?:\r?\n|\z)|\r?\n)|\ {2}.*(?:\r?\n|\z))*)/
88             },
89             'block_meta' => {
90             '.rgx' => qr/\G\-{3}\r?\n([\s\S]*?\r?\n|)\.{3}(?:\r?\n|\z)(?:\ +(?:\r?\n|\z)|\r?\n)?/
91             },
92             'block_para' => {
93             '.rgx' => qr/\G((?:(?![\ \*=\#\n]\ ).*\S.*(?:\r?\n|\z))+)(?:\ +(?:\r?\n|\z)|\r?\n)?/
94             },
95             'block_pref' => {
96             '.rgx' => qr/\G((?:(?:\ +(?:\r?\n|\z)|\r?\n)*\ \ .*(?:\r?\n|\z))+)(?:\ +(?:\r?\n|\z)|\r?\n)?/
97             },
98             'block_rule' => {
99             '.rgx' => qr/\G\-{4}(?:\r?\n|\z)(?:\ +(?:\r?\n|\z)|\r?\n)?/
100             },
101             'block_title' => {
102             '.rgx' => qr/\G((?:(?![\ \*=\#\n]\ ).*\S.*(?:\r?\n|\z)))={3,}\r?\n(?:(?:\ +(?:\r?\n|\z)|\r?\n)((?:(?![\ \*=\#\n]\ ).*\S.*(?:\r?\n|\z)))(?=(?:\ +(?:\r?\n|\z)|\r?\n)))?(?:\ +(?:\r?\n|\z)|\r?\n)?/
103             },
104             'block_top' => {
105             '.any' => [
106             {
107             '.ref' => 'block_func'
108             },
109             {
110             '.ref' => 'block_blank'
111             },
112             {
113             '.ref' => 'block_comment'
114             },
115             {
116             '.ref' => 'line_comment'
117             },
118             {
119             '.ref' => 'block_rule'
120             },
121             {
122             '.ref' => 'block_meta'
123             },
124             {
125             '.ref' => 'block_head'
126             },
127             {
128             '.ref' => 'block_code'
129             },
130             {
131             '.ref' => 'block_pref'
132             },
133             {
134             '.ref' => 'block_list'
135             },
136             {
137             '.ref' => 'block_title'
138             },
139             {
140             '.ref' => 'block_verse'
141             },
142             {
143             '.ref' => 'block_para'
144             }
145             ]
146             },
147             'block_verse' => {
148             '.rgx' => qr/\G\.\r?\n((?:(?![\ \*=\#\n]\ ).*\S.*(?:\r?\n|\z))+)(?:\ +(?:\r?\n|\z)|\r?\n)?/
149             },
150             'document' => {
151             '+min' => 0,
152             '.ref' => 'block_top'
153             },
154             'line_blank' => {
155             '.rgx' => qr/\G(?:\ +(?:\r?\n|\z)|\r?\n)/
156             },
157             'line_comment' => {
158             '.rgx' => qr/\G\#\ ?(.*?)(?:\r?\n|\z)(?:\ +(?:\r?\n|\z)|\r?\n)?/
159             },
160             'marker_bold' => {
161             '.rgx' => qr/\G\*/
162             },
163             'marker_del' => {
164             '.rgx' => qr/\G\-\-/
165             },
166             'marker_emph' => {
167             '.rgx' => qr/\G\//
168             },
169             'marker_escape' => {
170             '.rgx' => qr/\G\\(.)/
171             },
172             'marker_next' => {
173             '.rgx' => qr/\G([\s\S])/
174             },
175             'marker_under' => {
176             '.rgx' => qr/\G_/
177             },
178             'phrase_bold' => {
179             '.all' => [
180             {
181             '.rgx' => qr/\G\*(?=\S)(?!\*)/
182             },
183             {
184             '+min' => 1,
185             '.all' => [
186             {
187             '+asr' => -1,
188             '.ref' => 'marker_bold'
189             },
190             {
191             '.ref' => 'phrase_markup'
192             }
193             ]
194             },
195             {
196             '.ref' => 'marker_bold'
197             }
198             ]
199             },
200             'phrase_code' => {
201             '.rgx' => qr/\G`([^`]*?)`/
202             },
203             'phrase_del' => {
204             '.all' => [
205             {
206             '.rgx' => qr/\G\-\-(?=\S)(?!\-\-)/
207             },
208             {
209             '+min' => 1,
210             '.all' => [
211             {
212             '+asr' => -1,
213             '.ref' => 'marker_del'
214             },
215             {
216             '.ref' => 'phrase_markup'
217             }
218             ]
219             },
220             {
221             '.ref' => 'marker_del'
222             }
223             ]
224             },
225             'phrase_emph' => {
226             '.all' => [
227             {
228             '.rgx' => qr/\G\/(?=\S)(?!\/)/
229             },
230             {
231             '+min' => 1,
232             '.all' => [
233             {
234             '+asr' => -1,
235             '.ref' => 'marker_emph'
236             },
237             {
238             '.ref' => 'phrase_markup'
239             }
240             ]
241             },
242             {
243             '.ref' => 'marker_emph'
244             }
245             ]
246             },
247             'phrase_func' => {
248             '.rgx' => qr/\G<([^\>]+)\>/
249             },
250             'phrase_hyper' => {
251             '.any' => [
252             {
253             '.ref' => 'phrase_hyper_named'
254             },
255             {
256             '.ref' => 'phrase_hyper_explicit'
257             },
258             {
259             '.ref' => 'phrase_hyper_implicit'
260             }
261             ]
262             },
263             'phrase_hyper_explicit' => {
264             '.rgx' => qr/\G\[(https?:\S*?)\]/
265             },
266             'phrase_hyper_implicit' => {
267             '.rgx' => qr/\G(https?:\S+)/
268             },
269             'phrase_hyper_named' => {
270             '.rgx' => qr/\G"([^"]+)"\[(https?:\S*?)\]/
271             },
272             'phrase_link' => {
273             '.any' => [
274             {
275             '.ref' => 'phrase_link_named'
276             },
277             {
278             '.ref' => 'phrase_link_plain'
279             }
280             ]
281             },
282             'phrase_link_named' => {
283             '.rgx' => qr/\G"([^"]+)"\[(\S*?)\]/
284             },
285             'phrase_link_plain' => {
286             '.rgx' => qr/\G\[(\S*?)\]/
287             },
288             'phrase_markup' => {
289             '.any' => [
290             {
291             '.ref' => 'phrase_text'
292             },
293             {
294             '.ref' => 'marker_escape'
295             },
296             {
297             '.ref' => 'phrase_meta'
298             },
299             {
300             '.ref' => 'phrase_func'
301             },
302             {
303             '.ref' => 'phrase_code'
304             },
305             {
306             '.ref' => 'phrase_bold'
307             },
308             {
309             '.ref' => 'phrase_emph'
310             },
311             {
312             '.ref' => 'phrase_del'
313             },
314             {
315             '.ref' => 'phrase_under'
316             },
317             {
318             '.ref' => 'phrase_hyper'
319             },
320             {
321             '.ref' => 'phrase_link'
322             },
323             {
324             '.ref' => 'marker_next'
325             }
326             ]
327             },
328             'phrase_meta' => {
329             '.rgx' => qr/\G<\$([^\>]+)\>/
330             },
331             'phrase_text' => {
332             '.rgx' => qr/\G((?:(?![<`\*\/\-\-_"\[\\]|https?:)[\s\S])+)/
333             },
334             'phrase_under' => {
335             '.all' => [
336             {
337             '.rgx' => qr/\G_(?=\S)(?!_)/
338             },
339             {
340             '+min' => 1,
341             '.all' => [
342             {
343             '+asr' => -1,
344             '.ref' => 'marker_under'
345             },
346             {
347             '.ref' => 'phrase_markup'
348             }
349             ]
350             },
351             {
352             '.ref' => 'marker_under'
353             }
354             ]
355             },
356             'text_markup' => {
357             '+min' => 1,
358             '.ref' => 'phrase_markup'
359             }
360             }
361             }
362              
363             1;