feat: add fields to (section) and (plan)

This commit is contained in:
Emilia Simmons 2022-05-03 17:32:58 -04:00
parent aeacac6194
commit 5a04a1903b
4 changed files with 40924 additions and 38667 deletions

View file

@ -93,11 +93,11 @@ org_grammar = {
),
section: $ => seq(
$.headline,
optional($.plan),
optional($.property_drawer),
optional($.body),
repeat($.section),
field('headline', $.headline),
optional(field('plan', $.plan)),
optional(field('property_drawer', $.property_drawer)),
optional(field('body', $.body)),
repeat(field('subsection', $.section)),
$._sectionend,
),
@ -143,7 +143,7 @@ org_grammar = {
entry: $ => seq(
optional(seq(
alias(token(prec('non-immediate', /\p{L}+/)), $.entry_name),
field('name', alias(token(prec('non-immediate', /\p{L}+/)), $.entry_name)),
token.immediate(prec('immediate', ':'))
)),
field('timestamp', $.timestamp)
@ -162,18 +162,18 @@ org_grammar = {
_ts_contents: $ => seq(
repeat($._ts_element),
$.date,
field('date', $.date),
repeat($._ts_element),
),
date: $ => /\p{N}{1,4}-\p{N}{1,4}-\p{N}{1,4}/,
_ts_element: $ => choice(
alias(/\p{L}[^\]>\p{Z}\n\r]*/, $.day),
alias(/\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?/, $.time),
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),
alias(/[.+]?\+\p{N}+\p{L}/, $.repeat),
alias(/--?\p{N}+\p{L}/, $.delay),
field('day', alias(/\p{L}[^\]>\p{Z}\n\r]*/, $.day)),
field('time', alias(/\p{N}?\p{N}[:.]\p{N}\p{N}( ?\p{L}{1,2})?/, $.time)),
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)),
field('repeat', alias(/[.+]?\+\p{N}+\p{L}/, $.repeat)),
field('delay', alias(/--?\p{N}+\p{L}/, $.delay)),
alias(prec(-1, /[^\[<\]>\p{Z}\n\r]+/), $.expr),
),
@ -255,10 +255,16 @@ org_grammar = {
repeat($.formula),
)),
row: $ => prec(1, seq(repeat1($.cell), optional(token(prec(1, '|'))), $._eol)),
row: $ => prec(1, seq(
repeat1($.cell),
optional(token(prec(1, '|'))),
$._eol,
)),
cell: $ => seq(
token(prec(1, '|')), // Table > paragraph (expr)
optional(field('contents', alias($._expr_line, $.contents)))),
optional(field('contents', alias($._expr_line, $.contents))),
),
hr: $ => seq(
token(prec(1, '|')),
repeat1(seq(token.immediate(prec(1, /[-+]+/)), optional('|'))),

View file

@ -198,15 +198,23 @@
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "headline"
"type": "FIELD",
"name": "headline",
"content": {
"type": "SYMBOL",
"name": "headline"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "plan"
"type": "FIELD",
"name": "plan",
"content": {
"type": "SYMBOL",
"name": "plan"
}
},
{
"type": "BLANK"
@ -217,8 +225,12 @@
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "property_drawer"
"type": "FIELD",
"name": "property_drawer",
"content": {
"type": "SYMBOL",
"name": "property_drawer"
}
},
{
"type": "BLANK"
@ -229,8 +241,12 @@
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "body"
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "body"
}
},
{
"type": "BLANK"
@ -240,8 +256,12 @@
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "section"
"type": "FIELD",
"name": "subsection",
"content": {
"type": "SYMBOL",
"name": "section"
}
}
},
{
@ -516,20 +536,24 @@
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"type": "FIELD",
"name": "name",
"content": {
"type": "TOKEN",
"type": "ALIAS",
"content": {
"type": "PREC",
"value": "non-immediate",
"type": "TOKEN",
"content": {
"type": "PATTERN",
"value": "\\p{L}+"
"type": "PREC",
"value": "non-immediate",
"content": {
"type": "PATTERN",
"value": "\\p{L}+"
}
}
}
},
"named": true,
"value": "entry_name"
},
"named": true,
"value": "entry_name"
}
},
{
"type": "IMMEDIATE_TOKEN",
@ -771,8 +795,12 @@
}
},
{
"type": "SYMBOL",
"name": "date"
"type": "FIELD",
"name": "date",
"content": {
"type": "SYMBOL",
"name": "date"
}
},
{
"type": "REPEAT",
@ -791,49 +819,69 @@
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"type": "FIELD",
"name": "day",
"content": {
"type": "PATTERN",
"value": "\\p{L}[^\\]>\\p{Z}\\n\\r]*"
},
"named": true,
"value": "day"
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "\\p{L}[^\\]>\\p{Z}\\n\\r]*"
},
"named": true,
"value": "day"
}
},
{
"type": "ALIAS",
"type": "FIELD",
"name": "time",
"content": {
"type": "PATTERN",
"value": "\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?"
},
"named": true,
"value": "time"
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "\\p{N}?\\p{N}[:.]\\p{N}\\p{N}( ?\\p{L}{1,2})?"
},
"named": true,
"value": "time"
}
},
{
"type": "ALIAS",
"type": "FIELD",
"name": "duration",
"content": {
"type": "PATTERN",
"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})?"
},
"named": true,
"value": "duration"
"type": "ALIAS",
"content": {
"type": "PATTERN",
"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})?"
},
"named": true,
"value": "duration"
}
},
{
"type": "ALIAS",
"type": "FIELD",
"name": "repeat",
"content": {
"type": "PATTERN",
"value": "[.+]?\\+\\p{N}+\\p{L}"
},
"named": true,
"value": "repeat"
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[.+]?\\+\\p{N}+\\p{L}"
},
"named": true,
"value": "repeat"
}
},
{
"type": "ALIAS",
"type": "FIELD",
"name": "delay",
"content": {
"type": "PATTERN",
"value": "--?\\p{N}+\\p{L}"
},
"named": true,
"value": "delay"
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "--?\\p{N}+\\p{L}"
},
"named": true,
"value": "delay"
}
},
{
"type": "ALIAS",

View file

@ -295,6 +295,16 @@
"type": "entry",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": false,
"types": [
{
"type": "entry_name",
"named": true
}
]
},
"timestamp": {
"multiple": false,
"required": true,
@ -305,16 +315,6 @@
}
]
}
},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "entry_name",
"named": true
}
]
}
},
{
@ -682,32 +682,57 @@
{
"type": "section",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "body",
"named": true
},
{
"type": "headline",
"named": true
},
{
"type": "plan",
"named": true
},
{
"type": "property_drawer",
"named": true
},
{
"type": "section",
"named": true
}
]
"fields": {
"body": {
"multiple": false,
"required": false,
"types": [
{
"type": "body",
"named": true
}
]
},
"headline": {
"multiple": false,
"required": true,
"types": [
{
"type": "headline",
"named": true
}
]
},
"plan": {
"multiple": false,
"required": false,
"types": [
{
"type": "plan",
"named": true
}
]
},
"property_drawer": {
"multiple": false,
"required": false,
"types": [
{
"type": "property_drawer",
"named": true
}
]
},
"subsection": {
"multiple": true,
"required": false,
"types": [
{
"type": "section",
"named": true
}
]
}
}
},
{
@ -773,39 +798,76 @@
{
"type": "timestamp",
"named": true,
"fields": {},
"fields": {
"date": {
"multiple": true,
"required": false,
"types": [
{
"type": "date",
"named": true
}
]
},
"day": {
"multiple": true,
"required": false,
"types": [
{
"type": "day",
"named": true
}
]
},
"delay": {
"multiple": true,
"required": false,
"types": [
{
"type": "delay",
"named": true
}
]
},
"duration": {
"multiple": true,
"required": false,
"types": [
{
"type": "duration",
"named": true
}
]
},
"repeat": {
"multiple": true,
"required": false,
"types": [
{
"type": "repeat",
"named": true
}
]
},
"time": {
"multiple": true,
"required": false,
"types": [
{
"type": "time",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"required": false,
"types": [
{
"type": "date",
"named": true
},
{
"type": "day",
"named": true
},
{
"type": "delay",
"named": true
},
{
"type": "duration",
"named": true
},
{
"type": "expr",
"named": true
},
{
"type": "repeat",
"named": true
},
{
"type": "time",
"named": true
},
{
"type": "tsexp",
"named": true

79219
src/parser.c

File diff suppressed because it is too large Load diff