21
21
task ,
22
22
orderedList ,
23
23
listItem ,
24
- unorderedList
24
+ unorderedList ,
25
25
} = require (' ./utils' );
26
26
}
27
27
@@ -41,47 +41,31 @@ Blocks
41
41
/ TaskList
42
42
/ OrderedList
43
43
/ UnorderedList
44
- // / Section
44
+
45
+ // / Section
45
46
46
47
Emphasis
47
48
= Bold
48
49
/ Italic
49
50
/ Strikethrough
50
51
51
-
52
- Paragraph
53
- = value :
54
- ( Whitespace
55
- / Emoji
56
- / References
57
- / InlineCode
58
- / AutolinkedPhone
59
- / AutolinkedURL
60
- / AutolinkedEmail
61
- / Emphasis
62
- / Color
63
- / UserMention
64
- / ChannelMention
65
- / Any
66
-
67
- )+
68
- EndOfLine ? { return paragraph (reducePlainTexts (value)); }
52
+ Paragraph = value :Inline { return paragraph (value); }
69
53
70
54
Inline
71
- = value :
72
- ( Whitespace
73
- / Emoji
74
- / References
75
- / InlineCode
76
- / AutolinkedPhone
77
- / AutolinkedURL
78
- / AutolinkedEmail
79
- / Emphasis
80
- / Color
81
- / UserMention
82
- / ChannelMention
83
- / Any
84
- )+
55
+ = value :(
56
+ Whitespace
57
+ / Emoji
58
+ / InlineCode
59
+ / References
60
+ / AutolinkedPhone
61
+ / AutolinkedURL
62
+ / AutolinkedEmail
63
+ / Emphasis
64
+ / Color
65
+ / UserMention
66
+ / ChannelMention
67
+ / Any
68
+ )+
85
69
EndOfLine ? { return reducePlainTexts (value); }
86
70
87
71
Whitespace = w :" " + { return plain (w .join (' ' )); }
@@ -164,11 +148,13 @@ SectionText
164
148
/ [\x 61-\x 7A]
165
149
/ nonascii
166
150
151
+ Not_enter = text :($:(! "\n " s :. { return s; })+ ) { return plain (text .join (' ' )); }
152
+
167
153
Heading
168
- = "# " + text :Line { return heading ([text], 1 ); }
169
- / "## " + text :Line { return heading ([text], 2 ); }
170
- / "### " + text :Line { return heading ([text], 3 ); }
171
- / "#### " + text :Line { return heading ([text], 4 ); }
154
+ = "# " + text :Not_enter { return heading ([text], 1 ); }
155
+ / "## " + text :Not_enter { return heading ([text], 2 ); }
156
+ / "### " + text :Not_enter { return heading ([text], 3 ); }
157
+ / "#### " + text :Not_enter { return heading ([text], 4 ); }
172
158
173
159
utf8_names_validation = text :[0-9a-zA-Z-_.]+ { return text .join (' ' ); }
174
160
@@ -264,84 +250,80 @@ Lists
264
250
};
265
251
}
266
252
267
- Blockquote = b :BlockquoteItem + {
268
- return quote (b)
269
- }
253
+ Blockquote = b :BlockquoteItem + { return quote (b); }
270
254
271
- BlockquoteItem = "> " p :Paragraph { return p }
255
+ BlockquoteItem = "> " p :Paragraph { return p; }
272
256
273
257
// - [ ] this is an incomplete item
274
258
// - [x] this is a complete item
275
- TaskList
276
- = t :TaskItem + {
277
- return tasks (t);
278
- }
259
+ TaskList = t :TaskItem + { return tasks (t); }
279
260
280
- TaskItem = "- [x] " text :Inline { return task (text, true ); }
281
- / "- [ ] " text :Inline { return task (text, false ); }
261
+ TaskItem
262
+ = "- [x] " text :Inline { return task (text, true ); }
263
+ / "- [ ] " text :Inline { return task (text, false ); }
282
264
265
+ UnorderedList
266
+ = UnorderedList_
267
+ / UnorderedList__
283
268
284
- UnorderedList = UnorderedList_ / UnorderedList__
269
+ UnorderedList_ = lists : UnorderedListItem_ + { return unorderedList (lists); }
285
270
271
+ UnorderedList__ = lists :UnorderedListItem__ + { return unorderedList (lists); }
286
272
287
- UnorderedList_ = lists :UnorderedListItem_ + {
288
- return unorderedList (lists)
289
- }
290
-
291
- UnorderedList__ = lists :UnorderedListItem__ + {
292
- return unorderedList (lists)
293
- }
294
-
295
- UnorderedListItem_
296
- = ("- " ) text :Inline { return listItem (text, true ); }
273
+ UnorderedListItem_ = "- " text :Inline { return listItem (text, true ); }
297
274
298
275
UnorderedListItem__
299
- = ( "* " ) text :UnorderedListItem__Inline { return listItem (text, true ); }
276
+ = "* " text :UnorderedListItem__Inline { return listItem (text, true ); }
300
277
301
278
UnorderedListItem__Inline
302
- = value :
303
- ( Whitespace
304
- / Emoji
305
- / References
306
- / InlineCode
307
- / AutolinkedPhone
308
- / AutolinkedURL
309
- / AutolinkedEmail
310
- / Emphasis
311
- / Color
312
- / UserMention
313
- / ChannelMention
314
- / ! '*' a :Any { return a }
315
- )+
316
- ! '*' EndOfLine ? { return reducePlainTexts (value); }
317
-
318
- OrderedList
319
- = lists :OrderedListItem + {
320
- return orderedList (lists)
321
- }
279
+ = value :(
280
+ Whitespace
281
+ / Emoji
282
+ / References
283
+ / InlineCode
284
+ / AutolinkedPhone
285
+ / AutolinkedURL
286
+ / AutolinkedEmail
287
+ / Emphasis
288
+ / Color
289
+ / UserMention
290
+ / ChannelMention
291
+ / ! "*" a :Any { return a; }
292
+ )+
293
+ ! "*"
294
+ EndOfLine ? { return reducePlainTexts (value); }
295
+
296
+ OrderedList = lists :OrderedListItem + { return orderedList (lists); }
297
+
322
298
OrderedListItem
323
- = (digit1_9 + "\x2E " ) text :Inline { return listItem (text, true ); }
299
+ = (digit1_9 + "\x2E " ) text :Inline { return listItem (text, true ); }
324
300
325
301
Codetype = t :[a-zA-Z0-9 \_\- .]+ { return t .join (' ' ); }
326
302
327
- InlineCode = "`" text :Line "`" { return inlineCode (text); }
303
+ InlineCode
304
+ = "`" text :InlineCode__ + "`" { return inlineCode (plain (text .join (' ' ))); }
305
+
306
+ InlineCode__ = $(! "`" ! "\n " $:. )
307
+
308
+ LineCode__any = $:(! "\n " ! "```" t :. { return t; })+
328
309
329
310
LineCode "LineCode"
330
- = text :[^" \n " \` ] + "`" ? { return codeLine (plain (text .join (' ' ))); }
331
- / "\n " + text :[^" \n " \` ] + "`" ? { return codeLine (plain (text .join (' ' ))); }
311
+ = text :LineCode__any { return codeLine (plain (text .join (' ' ))); }
312
+ / "\n " + text :LineCode__any { return codeLine (plain (text .join (' ' ))); }
332
313
333
314
MultiplelLineCode
334
- = "```" t :Codetype ? "\n " value :LineCode + "\n " + "```" {
335
- return code (value, t);
336
- }
315
+ = "```" t :Codetype ? "\n " value :LineCode + "\n ```" { return code (value, t); }
337
316
338
317
// [Visit GitHub!](www.github.com)
339
- LinkTitle = "[" text :(Emphasis / Line ) "]" { return text; }
318
+
319
+ LinkTitle = "[" text :(Emphasis / Line / Whitespace ) "]" { return text; }
340
320
341
321
LinkRef
342
322
= "(" text :(URL / p :Phone { return ' tel:' + p .number ; }) ")" { return text; }
343
323
344
- References = title :LinkTitle href :LinkRef { return link (href, title); }
324
+ References
325
+ = "[]" href :LinkRef { return link (href); }
326
+ / title :LinkTitle href :LinkRef { return link (href, title); }
345
327
346
328
/* Macros */
347
329
@@ -414,6 +396,10 @@ alpha = [a-zA-Z]
414
396
415
397
digit = [0-9]
416
398
399
+ alpha_digit
400
+ = alpha
401
+ / digit
402
+
417
403
digit1_9 = [1-9]
418
404
419
405
digits = d :digit + { return d .join (' ' ); }
@@ -454,7 +440,7 @@ domainName
454
440
455
441
domainNameLabel = $(domainChar domainChar + $("-" domainChar + )* )
456
442
457
- domainChar = ! safe ! extra ! EndOfLine ! Space .
443
+ domainChar = ! "/" ! safe ! extra ! EndOfLine ! Space .
458
444
459
445
/**
460
446
*
@@ -497,20 +483,7 @@ phonePrefix
497
483
*
498
484
*/
499
485
500
- URL
501
- = s :urlScheme a :urlAuthority p :urlPath ? q :urlQuery ? f :urlFragment ? {
502
- const href = [s, a, p, q, f].filter (Boolean ).join (' ' );
503
- // const url = {
504
- // href,
505
- // scheme: s,
506
- // authority: a,
507
- // path: p,
508
- // query: q,
509
- // fragment: f,
510
- // };
511
-
512
- return href;
513
- }
486
+ URL = $(s :urlScheme a :urlAuthority p :urlPath ? q :urlQuery ? f :urlFragment ? )
514
487
515
488
urlScheme
516
489
= $(
@@ -553,11 +526,11 @@ urlAuthority = $("//" urlAuthorityUserInfo? urlAuthorityHost)
553
526
554
527
urlAuthorityUserInfo = $(urlAuthorityUser (":" urlAuthorityPassword )? "@" )
555
528
556
- urlAuthorityUser = $(alpha / digit / "$" / "-" / "_" / "." / "&" / "=" )+
529
+ urlAuthorityUser = $(alpha_digit / ! "@" ! "/" safe )+
557
530
558
- urlAuthorityPassword = $(alpha / digit / "$" / "-" / "_" / "." / "&" / "=" )+
531
+ urlAuthorityPassword = $(alpha_digit / ! "@" ! "/" safe )+
559
532
560
- urlAuthorityHost = urlAuthorityHostName (":" urlAuthorityPort )?
533
+ urlAuthorityHost = t : urlAuthorityHostName (":" urlAuthorityPort )?
561
534
562
535
urlAuthorityHostName
563
536
= domainName
@@ -566,11 +539,11 @@ urlAuthorityHostName
566
539
urlAuthorityPort
567
540
= digits // TODO: from "0" to "65535"
568
541
569
- urlPath = $("/" $(alpha / digit / safe )+ urlPath * )
542
+ urlPath = $("/" $(alpha_digit / safe )+ urlPath * )
570
543
571
- urlQuery = $("?" $(alpha / digit / safe )+ )
544
+ urlQuery = $("?" $(alpha_digit / safe )* )
572
545
573
- urlFragment = $("#" $(alpha / digit / safe )+ )
546
+ urlFragment = $("#" $(alpha_digit / safe )* )
574
547
575
548
/**
576
549
*
0 commit comments