@@ -48,7 +48,7 @@ org_grammar = {
48
48
49
49
// headline 'entry_token1' ':' • '<' …
50
50
[ $ . entry , $ . expr ] ,
51
-
51
+ [ $ . entry , $ . _markup ] ,
52
52
] ,
53
53
54
54
rules : {
@@ -77,6 +77,20 @@ org_grammar = {
77
77
) ,
78
78
) ,
79
79
80
+ link : $ => seq (
81
+ token ( '[[' ) ,
82
+ field ( 'url' , repeat ( alias ( $ . _expr_with_space , $ . expr ) ) ) ,
83
+ token ( ']]' )
84
+ ) ,
85
+
86
+ link_desc : $ => seq (
87
+ token ( '[[' ) ,
88
+ field ( 'url' , repeat ( alias ( $ . _expr_with_space , $ . expr ) ) ) ,
89
+ token ( '][' ) ,
90
+ field ( 'desc' , repeat ( alias ( $ . _expr_with_space , $ . expr ) ) ) ,
91
+ token ( ']]' )
92
+ ) ,
93
+
80
94
// Can't have multiple in a row
81
95
_multis : $ => choice (
82
96
$ . paragraph ,
@@ -114,7 +128,7 @@ org_grammar = {
114
128
$ . _eol ,
115
129
) ,
116
130
117
- item : $ => repeat1 ( $ . expr ) ,
131
+ item : $ => repeat1 ( $ . _markup ) ,
118
132
119
133
tag_list : $ => prec . dynamic ( 1 , seq (
120
134
$ . _tag_expr_start ,
@@ -327,8 +341,18 @@ org_grammar = {
327
341
_nl : _ => choice ( '\n' , '\r' ) ,
328
342
_eol : $ => choice ( '\n' , '\r' , $ . _eof ) ,
329
343
330
- _expr_line : $ => repeat1 ( $ . expr ) ,
331
- _multiline_text : $ => repeat1 ( seq ( repeat1 ( $ . expr ) , $ . _eol ) ) ,
344
+ _expr_line : $ => repeat1 ( $ . _markup ) ,
345
+ _multiline_text : $ => repeat1 ( seq (
346
+ repeat1 ( $ . _markup ) ,
347
+ $ . _eol
348
+ ) ) ,
349
+
350
+ _markup : $ => choice (
351
+ $ . expr ,
352
+ $ . link ,
353
+ $ . link_desc ,
354
+ $ . timestamp ,
355
+ ) ,
332
356
333
357
_immediate_expr : $ => repeat1 ( expr ( 'immediate' , token . immediate ) ) ,
334
358
_noc_expr : $ => repeat1 ( expr ( 'immediate' , token . immediate , ':' ) ) ,
@@ -345,13 +369,20 @@ org_grammar = {
345
369
repeat ( expr ( 'immediate' , token . immediate ) )
346
370
) ,
347
371
372
+ _expr_with_space : $ => seq (
373
+ expr ( 'non-immediate' , token , '' , ' ' ) ,
374
+ repeat ( expr ( 'immediate' , token . immediate , '' , ' ' ) )
375
+ ) ,
376
+
348
377
}
349
378
} ;
350
379
351
- function expr ( pr , tfunc , skip = '' ) {
380
+ function expr ( pr , tfunc , skip = '' , extra = '' ) {
352
381
skip = skip . split ( "" )
382
+ extra = extra . split ( "" )
353
383
return choice (
354
384
...asciiSymbols . filter ( c => ! skip . includes ( c ) ) . map ( c => tfunc ( prec ( pr , c ) ) ) ,
385
+ ...extra . map ( c => tfunc ( prec ( pr , c ) ) ) ,
355
386
alias ( tfunc ( prec ( pr , / \p{ L} + / ) ) , 'str' ) ,
356
387
alias ( tfunc ( prec ( pr , / \p{ N} + / ) ) , 'num' ) ,
357
388
alias ( tfunc ( prec ( pr , / [ ^ \p{ Z} \p{ L} \p{ N} \t \n \r ] / ) ) , 'sym' ) ,
0 commit comments