Skip to content

Commit f78edf1

Browse files
committed
feat: add latex_env blocks with brackets (resolve #24)
1 parent 5a04a19 commit f78edf1

File tree

5 files changed

+31865
-23322
lines changed

5 files changed

+31865
-23322
lines changed

corpus/basic.tst

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1010,7 +1010,7 @@ Directive.7 - Directive unrelated to section
10101010
(expr)))))
10111011

10121012
================================================================================
1013-
LatexEnv.1 - Basic
1013+
LatexEnv.1a - Basic
10141014
================================================================================
10151015
\begin{a}
10161016
\end{a}
@@ -1023,6 +1023,30 @@ LatexEnv.1 - Basic
10231023
(name)
10241024
(name))))
10251025

1026+
================================================================================
1027+
LatexEnv.1b - Basic
1028+
================================================================================
1029+
\(
1030+
\)
1031+
1032+
--------------------------------------------------------------------------------
1033+
1034+
(document
1035+
(body
1036+
(latex_env)))
1037+
1038+
================================================================================
1039+
LatexEnv.1c - Basic
1040+
================================================================================
1041+
\[
1042+
\]
1043+
1044+
--------------------------------------------------------------------------------
1045+
1046+
(document
1047+
(body
1048+
(latex_env)))
1049+
10261050
================================================================================
10271051
LatexEnv.2 - Contents
10281052
================================================================================
@@ -1039,6 +1063,36 @@ a
10391063
(expr))
10401064
(name))))
10411065

1066+
================================================================================
1067+
LatexEnv.2b - Basic
1068+
================================================================================
1069+
\(
1070+
a
1071+
\)
1072+
1073+
--------------------------------------------------------------------------------
1074+
1075+
(document
1076+
(body
1077+
(latex_env
1078+
(contents
1079+
(expr)))))
1080+
1081+
================================================================================
1082+
LatexEnv.2c - Basic
1083+
================================================================================
1084+
\[
1085+
a
1086+
\]
1087+
1088+
--------------------------------------------------------------------------------
1089+
1090+
(document
1091+
(body
1092+
(latex_env
1093+
(contents
1094+
(expr)))))
1095+
10421096
================================================================================
10431097
LatexEnv.3 - Empty
10441098
================================================================================

grammar.js

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -279,14 +279,30 @@ org_grammar = {
279279

280280
latex_env: $ => seq(
281281
optional($._directive_list),
282-
caseInsensitive('\\begin{'),
283-
field('name', alias(/[\p{L}\p{N}]+/, $.name)),
284-
token.immediate('}'),
285-
$._eol,
286-
optional(field('contents', $.contents)),
287-
caseInsensitive('\\end{'),
288-
alias(/[\p{L}\p{N}]+/, $.name),
289-
token.immediate('}'),
282+
choice(
283+
seq(
284+
caseInsensitive('\\begin{'),
285+
field('name', alias(/[\p{L}\p{N}*]+/, $.name)),
286+
token.immediate('}'),
287+
$._nl,
288+
optional(field('contents', $.contents)),
289+
caseInsensitive('\\end{'),
290+
alias(/[\p{L}\p{N}*]+/, $.name),
291+
token.immediate('}'),
292+
),
293+
seq(
294+
caseInsensitive('\\['),
295+
$._nl,
296+
optional(field('contents', $.contents)),
297+
caseInsensitive('\\]'),
298+
),
299+
seq(
300+
caseInsensitive('\\('),
301+
$._nl,
302+
optional(field('contents', $.contents)),
303+
caseInsensitive('\\)'),
304+
),
305+
),
290306
$._eol,
291307
),
292308

src/grammar.json

Lines changed: 161 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1636,80 +1636,176 @@
16361636
}
16371637
]
16381638
},
1639-
{
1640-
"type": "ALIAS",
1641-
"content": {
1642-
"type": "PATTERN",
1643-
"value": "\\\\[Bb][Ee][Gg][Ii][Nn]\\{"
1644-
},
1645-
"named": false,
1646-
"value": "\\begin{"
1647-
},
1648-
{
1649-
"type": "FIELD",
1650-
"name": "name",
1651-
"content": {
1652-
"type": "ALIAS",
1653-
"content": {
1654-
"type": "PATTERN",
1655-
"value": "[\\p{L}\\p{N}]+"
1656-
},
1657-
"named": true,
1658-
"value": "name"
1659-
}
1660-
},
1661-
{
1662-
"type": "IMMEDIATE_TOKEN",
1663-
"content": {
1664-
"type": "STRING",
1665-
"value": "}"
1666-
}
1667-
},
1668-
{
1669-
"type": "SYMBOL",
1670-
"name": "_eol"
1671-
},
16721639
{
16731640
"type": "CHOICE",
16741641
"members": [
16751642
{
1676-
"type": "FIELD",
1677-
"name": "contents",
1678-
"content": {
1679-
"type": "SYMBOL",
1680-
"name": "contents"
1681-
}
1643+
"type": "SEQ",
1644+
"members": [
1645+
{
1646+
"type": "ALIAS",
1647+
"content": {
1648+
"type": "PATTERN",
1649+
"value": "\\\\[Bb][Ee][Gg][Ii][Nn]\\{"
1650+
},
1651+
"named": false,
1652+
"value": "\\begin{"
1653+
},
1654+
{
1655+
"type": "FIELD",
1656+
"name": "name",
1657+
"content": {
1658+
"type": "ALIAS",
1659+
"content": {
1660+
"type": "PATTERN",
1661+
"value": "[\\p{L}\\p{N}*]+"
1662+
},
1663+
"named": true,
1664+
"value": "name"
1665+
}
1666+
},
1667+
{
1668+
"type": "IMMEDIATE_TOKEN",
1669+
"content": {
1670+
"type": "STRING",
1671+
"value": "}"
1672+
}
1673+
},
1674+
{
1675+
"type": "SYMBOL",
1676+
"name": "_nl"
1677+
},
1678+
{
1679+
"type": "CHOICE",
1680+
"members": [
1681+
{
1682+
"type": "FIELD",
1683+
"name": "contents",
1684+
"content": {
1685+
"type": "SYMBOL",
1686+
"name": "contents"
1687+
}
1688+
},
1689+
{
1690+
"type": "BLANK"
1691+
}
1692+
]
1693+
},
1694+
{
1695+
"type": "ALIAS",
1696+
"content": {
1697+
"type": "PATTERN",
1698+
"value": "\\\\[Ee][Nn][Dd]\\{"
1699+
},
1700+
"named": false,
1701+
"value": "\\end{"
1702+
},
1703+
{
1704+
"type": "ALIAS",
1705+
"content": {
1706+
"type": "PATTERN",
1707+
"value": "[\\p{L}\\p{N}*]+"
1708+
},
1709+
"named": true,
1710+
"value": "name"
1711+
},
1712+
{
1713+
"type": "IMMEDIATE_TOKEN",
1714+
"content": {
1715+
"type": "STRING",
1716+
"value": "}"
1717+
}
1718+
}
1719+
]
16821720
},
16831721
{
1684-
"type": "BLANK"
1722+
"type": "SEQ",
1723+
"members": [
1724+
{
1725+
"type": "ALIAS",
1726+
"content": {
1727+
"type": "PATTERN",
1728+
"value": "\\\\\\["
1729+
},
1730+
"named": false,
1731+
"value": "\\["
1732+
},
1733+
{
1734+
"type": "SYMBOL",
1735+
"name": "_nl"
1736+
},
1737+
{
1738+
"type": "CHOICE",
1739+
"members": [
1740+
{
1741+
"type": "FIELD",
1742+
"name": "contents",
1743+
"content": {
1744+
"type": "SYMBOL",
1745+
"name": "contents"
1746+
}
1747+
},
1748+
{
1749+
"type": "BLANK"
1750+
}
1751+
]
1752+
},
1753+
{
1754+
"type": "ALIAS",
1755+
"content": {
1756+
"type": "PATTERN",
1757+
"value": "\\\\\\]"
1758+
},
1759+
"named": false,
1760+
"value": "\\]"
1761+
}
1762+
]
1763+
},
1764+
{
1765+
"type": "SEQ",
1766+
"members": [
1767+
{
1768+
"type": "ALIAS",
1769+
"content": {
1770+
"type": "PATTERN",
1771+
"value": "\\\\\\("
1772+
},
1773+
"named": false,
1774+
"value": "\\("
1775+
},
1776+
{
1777+
"type": "SYMBOL",
1778+
"name": "_nl"
1779+
},
1780+
{
1781+
"type": "CHOICE",
1782+
"members": [
1783+
{
1784+
"type": "FIELD",
1785+
"name": "contents",
1786+
"content": {
1787+
"type": "SYMBOL",
1788+
"name": "contents"
1789+
}
1790+
},
1791+
{
1792+
"type": "BLANK"
1793+
}
1794+
]
1795+
},
1796+
{
1797+
"type": "ALIAS",
1798+
"content": {
1799+
"type": "PATTERN",
1800+
"value": "\\\\\\)"
1801+
},
1802+
"named": false,
1803+
"value": "\\)"
1804+
}
1805+
]
16851806
}
16861807
]
16871808
},
1688-
{
1689-
"type": "ALIAS",
1690-
"content": {
1691-
"type": "PATTERN",
1692-
"value": "\\\\[Ee][Nn][Dd]\\{"
1693-
},
1694-
"named": false,
1695-
"value": "\\end{"
1696-
},
1697-
{
1698-
"type": "ALIAS",
1699-
"content": {
1700-
"type": "PATTERN",
1701-
"value": "[\\p{L}\\p{N}]+"
1702-
},
1703-
"named": true,
1704-
"value": "name"
1705-
},
1706-
{
1707-
"type": "IMMEDIATE_TOKEN",
1708-
"content": {
1709-
"type": "STRING",
1710-
"value": "}"
1711-
}
1712-
},
17131809
{
17141810
"type": "SYMBOL",
17151811
"name": "_eol"

src/node-types.json

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@
456456
},
457457
"name": {
458458
"multiple": false,
459-
"required": true,
459+
"required": false,
460460
"types": [
461461
{
462462
"type": "name",
@@ -467,7 +467,7 @@
467467
},
468468
"children": {
469469
"multiple": false,
470-
"required": true,
470+
"required": false,
471471
"types": [
472472
{
473473
"type": "name",
@@ -1057,6 +1057,22 @@
10571057
"type": "\\",
10581058
"named": false
10591059
},
1060+
{
1061+
"type": "\\(",
1062+
"named": false
1063+
},
1064+
{
1065+
"type": "\\)",
1066+
"named": false
1067+
},
1068+
{
1069+
"type": "\\[",
1070+
"named": false
1071+
},
1072+
{
1073+
"type": "\\]",
1074+
"named": false
1075+
},
10601076
{
10611077
"type": "\\begin{",
10621078
"named": false

0 commit comments

Comments
 (0)