Skip to content

Commit 5a04a19

Browse files
committed
feat: add fields to (section) and (plan)
1 parent aeacac6 commit 5a04a19

File tree

4 files changed

+19246
-16989
lines changed

4 files changed

+19246
-16989
lines changed

grammar.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ org_grammar = {
9393
),
9494

9595
section: $ => seq(
96-
$.headline,
97-
optional($.plan),
98-
optional($.property_drawer),
99-
optional($.body),
100-
repeat($.section),
96+
field('headline', $.headline),
97+
optional(field('plan', $.plan)),
98+
optional(field('property_drawer', $.property_drawer)),
99+
optional(field('body', $.body)),
100+
repeat(field('subsection', $.section)),
101101
$._sectionend,
102102
),
103103

@@ -143,7 +143,7 @@ org_grammar = {
143143

144144
entry: $ => seq(
145145
optional(seq(
146-
alias(token(prec('non-immediate', /\p{L}+/)), $.entry_name),
146+
field('name', alias(token(prec('non-immediate', /\p{L}+/)), $.entry_name)),
147147
token.immediate(prec('immediate', ':'))
148148
)),
149149
field('timestamp', $.timestamp)
@@ -162,18 +162,18 @@ org_grammar = {
162162

163163
_ts_contents: $ => seq(
164164
repeat($._ts_element),
165-
$.date,
165+
field('date', $.date),
166166
repeat($._ts_element),
167167
),
168168

169169
date: $ => /\p{N}{1,4}-\p{N}{1,4}-\p{N}{1,4}/,
170170

171171
_ts_element: $ => choice(
172-
alias(/\p{L}[^\]>\p{Z}\n\r]*/, $.day),
173-
alias(/\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?/, $.time),
174-
alias(/\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?-\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?/, $.duration),
175-
alias(/[.+]?\+\p{N}+\p{L}/, $.repeat),
176-
alias(/--?\p{N}+\p{L}/, $.delay),
172+
field('day', alias(/\p{L}[^\]>\p{Z}\n\r]*/, $.day)),
173+
field('time', alias(/\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?/, $.time)),
174+
field('duration', alias(/\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?-\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?/, $.duration)),
175+
field('repeat', alias(/[.+]?\+\p{N}+\p{L}/, $.repeat)),
176+
field('delay', alias(/--?\p{N}+\p{L}/, $.delay)),
177177
alias(prec(-1, /[^\[<\]>\p{Z}\n\r]+/), $.expr),
178178
),
179179

@@ -255,10 +255,16 @@ org_grammar = {
255255
repeat($.formula),
256256
)),
257257

258-
row: $ => prec(1, seq(repeat1($.cell), optional(token(prec(1, '|'))), $._eol)),
258+
row: $ => prec(1, seq(
259+
repeat1($.cell),
260+
optional(token(prec(1, '|'))),
261+
$._eol,
262+
)),
263+
259264
cell: $ => seq(
260265
token(prec(1, '|')), // Table > paragraph (expr)
261-
optional(field('contents', alias($._expr_line, $.contents)))),
266+
optional(field('contents', alias($._expr_line, $.contents))),
267+
),
262268
hr: $ => seq(
263269
token(prec(1, '|')),
264270
repeat1(seq(token.immediate(prec(1, /[-+]+/)), optional('|'))),

src/grammar.json

Lines changed: 100 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,23 @@
198198
"type": "SEQ",
199199
"members": [
200200
{
201-
"type": "SYMBOL",
202-
"name": "headline"
201+
"type": "FIELD",
202+
"name": "headline",
203+
"content": {
204+
"type": "SYMBOL",
205+
"name": "headline"
206+
}
203207
},
204208
{
205209
"type": "CHOICE",
206210
"members": [
207211
{
208-
"type": "SYMBOL",
209-
"name": "plan"
212+
"type": "FIELD",
213+
"name": "plan",
214+
"content": {
215+
"type": "SYMBOL",
216+
"name": "plan"
217+
}
210218
},
211219
{
212220
"type": "BLANK"
@@ -217,8 +225,12 @@
217225
"type": "CHOICE",
218226
"members": [
219227
{
220-
"type": "SYMBOL",
221-
"name": "property_drawer"
228+
"type": "FIELD",
229+
"name": "property_drawer",
230+
"content": {
231+
"type": "SYMBOL",
232+
"name": "property_drawer"
233+
}
222234
},
223235
{
224236
"type": "BLANK"
@@ -229,8 +241,12 @@
229241
"type": "CHOICE",
230242
"members": [
231243
{
232-
"type": "SYMBOL",
233-
"name": "body"
244+
"type": "FIELD",
245+
"name": "body",
246+
"content": {
247+
"type": "SYMBOL",
248+
"name": "body"
249+
}
234250
},
235251
{
236252
"type": "BLANK"
@@ -240,8 +256,12 @@
240256
{
241257
"type": "REPEAT",
242258
"content": {
243-
"type": "SYMBOL",
244-
"name": "section"
259+
"type": "FIELD",
260+
"name": "subsection",
261+
"content": {
262+
"type": "SYMBOL",
263+
"name": "section"
264+
}
245265
}
246266
},
247267
{
@@ -516,20 +536,24 @@
516536
"type": "SEQ",
517537
"members": [
518538
{
519-
"type": "ALIAS",
539+
"type": "FIELD",
540+
"name": "name",
520541
"content": {
521-
"type": "TOKEN",
542+
"type": "ALIAS",
522543
"content": {
523-
"type": "PREC",
524-
"value": "non-immediate",
544+
"type": "TOKEN",
525545
"content": {
526-
"type": "PATTERN",
527-
"value": "\\p{L}+"
546+
"type": "PREC",
547+
"value": "non-immediate",
548+
"content": {
549+
"type": "PATTERN",
550+
"value": "\\p{L}+"
551+
}
528552
}
529-
}
530-
},
531-
"named": true,
532-
"value": "entry_name"
553+
},
554+
"named": true,
555+
"value": "entry_name"
556+
}
533557
},
534558
{
535559
"type": "IMMEDIATE_TOKEN",
@@ -771,8 +795,12 @@
771795
}
772796
},
773797
{
774-
"type": "SYMBOL",
775-
"name": "date"
798+
"type": "FIELD",
799+
"name": "date",
800+
"content": {
801+
"type": "SYMBOL",
802+
"name": "date"
803+
}
776804
},
777805
{
778806
"type": "REPEAT",
@@ -791,49 +819,69 @@
791819
"type": "CHOICE",
792820
"members": [
793821
{
794-
"type": "ALIAS",
822+
"type": "FIELD",
823+
"name": "day",
795824
"content": {
796-
"type": "PATTERN",
797-
"value": "\\p{L}[^\\]>\\p{Z}\\n\\r]*"
798-
},
799-
"named": true,
800-
"value": "day"
825+
"type": "ALIAS",
826+
"content": {
827+
"type": "PATTERN",
828+
"value": "\\p{L}[^\\]>\\p{Z}\\n\\r]*"
829+
},
830+
"named": true,
831+
"value": "day"
832+
}
801833
},
802834
{
803-
"type": "ALIAS",
835+
"type": "FIELD",
836+
"name": "time",
804837
"content": {
805-
"type": "PATTERN",
806-
"value": "\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?"
807-
},
808-
"named": true,
809-
"value": "time"
838+
"type": "ALIAS",
839+
"content": {
840+
"type": "PATTERN",
841+
"value": "\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?"
842+
},
843+
"named": true,
844+
"value": "time"
845+
}
810846
},
811847
{
812-
"type": "ALIAS",
848+
"type": "FIELD",
849+
"name": "duration",
813850
"content": {
814-
"type": "PATTERN",
815-
"value": "\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?-\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?"
816-
},
817-
"named": true,
818-
"value": "duration"
851+
"type": "ALIAS",
852+
"content": {
853+
"type": "PATTERN",
854+
"value": "\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?-\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?"
855+
},
856+
"named": true,
857+
"value": "duration"
858+
}
819859
},
820860
{
821-
"type": "ALIAS",
861+
"type": "FIELD",
862+
"name": "repeat",
822863
"content": {
823-
"type": "PATTERN",
824-
"value": "[.+]?\\+\\p{N}+\\p{L}"
825-
},
826-
"named": true,
827-
"value": "repeat"
864+
"type": "ALIAS",
865+
"content": {
866+
"type": "PATTERN",
867+
"value": "[.+]?\\+\\p{N}+\\p{L}"
868+
},
869+
"named": true,
870+
"value": "repeat"
871+
}
828872
},
829873
{
830-
"type": "ALIAS",
874+
"type": "FIELD",
875+
"name": "delay",
831876
"content": {
832-
"type": "PATTERN",
833-
"value": "--?\\p{N}+\\p{L}"
834-
},
835-
"named": true,
836-
"value": "delay"
877+
"type": "ALIAS",
878+
"content": {
879+
"type": "PATTERN",
880+
"value": "--?\\p{N}+\\p{L}"
881+
},
882+
"named": true,
883+
"value": "delay"
884+
}
837885
},
838886
{
839887
"type": "ALIAS",

0 commit comments

Comments
 (0)