File Coverage

blib/lib/Kwim/Grammar.pm
Criterion Covered Total %
statement 10 10 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod 1 1 100.0
total 15 15 100.0


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