From 8aac147e8e9f55ab4a78a91b23e47f21c3519b60 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 16 Jun 2023 06:37:19 +0300 Subject: [PATCH] grammar: add support of near attribute grammar: add more utils Closes #2 --- examples/chess.d2 | 7 +- grammar.js | 96 ++++++++++--------- src/grammar.json | 224 +++++++++++++++++++++++++++++++++----------- src/node-types.json | 4 + src/parser.c | Bin 257906 -> 268235 bytes tree-sitter-d2.wasm | Bin 71776 -> 73272 bytes 6 files changed, 233 insertions(+), 98 deletions(-) diff --git a/examples/chess.d2 b/examples/chess.d2 index 8c2cedd..a1f4e36 100644 --- a/examples/chess.d2 +++ b/examples/chess.d2 @@ -1,7 +1,12 @@ # Actors hans: Hans Niemann -defendants: { +defendants: |md + # Defendants + + hello world +| { + shape: text mc: Magnus Carlsen playmagnus: Play Magnus Group chesscom: Chess.com diff --git a/grammar.js b/grammar.js index a5aa1ee..dcd8209 100644 --- a/grammar.js +++ b/grammar.js @@ -1,15 +1,3 @@ -// mkWrapCont :: string -> string -> ($ -> Rule) -> $ -> Rule -const mkWrapCont = (start, end) => (getRule) => ($) => - seq( - start, - repeat(choice($._eol, seq(getRule($), $._end))), - optional(seq(getRule($), optional($._end))), - end - ); - -const mkBlock = mkWrapCont("{", "}"); -const mkList = mkWrapCont("[", "]"); - const PREC = { COMMENT: -2, EOL: -1, @@ -25,6 +13,28 @@ const PREC = { ATTRIBUTE_KEY: 0, }; +// mkWrapCont :: string -> string -> ($ -> Rule) -> $ -> Rule +const mkWrapCont = (start, end) => (onDefinition) => ($) => + seq( + start, + repeat(choice($._eol, seq(onDefinition($), $._end))), + optional(seq(onDefinition($), optional($._end))), + end + ); +const mkBlock = mkWrapCont("{", "}"); +const mkList = mkWrapCont("[", "]"); + +// mkAlias :: ($ -> Rule) -> ($ -> Rule) -> $ -> Rule +const mkAlias = (onAlias) => (onValue) => ($) => alias(onValue($), onAlias($)); +const attrKeyAlias = mkAlias(($) => $.attr_key); +const attrAlias = mkAlias(($) => $.attribute); + +// mkAttrCont :: ($ -> Rule) -> ($ -> Rule) -> $ -> Rule +const mkAttrCont = (onValue) => (onKey) => ($) => + seq(onKey($), $._colon, onValue($)); +const mkBaseAttr = (onKey) => + mkAttrCont(($) => $.attr_value)(attrKeyAlias(onKey)); + module.exports = grammar({ name: "d2", @@ -49,6 +59,7 @@ module.exports = grammar({ [$._classes_block], [$._classes_item_block], [$.class_list], + [$._text_block_attrs], ], rules: { @@ -126,11 +137,9 @@ module.exports = grammar({ _classes_item_block: mkBlock(($) => $._classes_item_attribute), - _classes_item_attribute: ($) => - choice( - alias($._base_shape_attribute, $.attribute), - alias($._style_attribute, $.attribute) - ), + _classes_item_attribute: attrAlias(($) => + choice($._base_shape_attribute, $._style_attribute) + ), // containers @@ -164,7 +173,16 @@ module.exports = grammar({ optional( choice( seq($.dot, $._shape_attribute), - seq($._colon, choice($.label, $.text_block)) + seq( + $._colon, + choice( + $.label, + seq( + $.text_block, + optional(alias($._text_block_attrs, $.block)) + ) + ) + ) ) ) ) @@ -194,12 +212,13 @@ module.exports = grammar({ alias($._text_block_end, "|") ), + _text_block_attrs: mkBlock(attrAlias(($) => $._text_shape_attribute)), + language: ($) => /\w+/, // attributes - _root_attribute: ($) => - seq(alias($._root_attr_key, $.attr_key), $._colon, $.attr_value), + _root_attribute: mkBaseAttr(($) => $._root_attr_key), _root_attr_key: ($) => choice( @@ -220,21 +239,19 @@ module.exports = grammar({ ) ), - _shape_attribute: ($) => - alias( - choice($._class_attribute, $._base_shape_attribute, $._style_attribute), - $.attribute - ), + _shape_attribute: attrAlias(($) => + choice($._class_attribute, $._base_shape_attribute, $._style_attribute) + ), - _class_attribute: ($) => - seq($.keyword_class, $._colon, choice($.class_list, $._class_name)), + _class_attribute: mkAttrCont(($) => choice($.class_list, $._class_name))( + ($) => $.keyword_class + ), class_list: mkList(($) => $._class_name), _class_name: ($) => alias($.shape_key, $.class_name), - _base_shape_attribute: ($) => - seq(alias($._shape_attr_key, $.attr_key), $._colon, $.attr_value), + _base_shape_attribute: mkBaseAttr(($) => $._shape_attr_key), _shape_attr_key: ($) => prec( @@ -251,6 +268,7 @@ module.exports = grammar({ "icon", "width", "height", + $._text_attr_key, $._grid_attr_key ) ), @@ -267,15 +285,9 @@ module.exports = grammar({ ) ), - _style_attribute_block: mkBlock(($) => - alias($._inner_style_attribute, $.attribute) - ), + _style_attribute_block: mkBlock(attrAlias(($) => $._inner_style_attribute)), - _inner_style_attribute: ($) => - prec( - PREC.ATTRIBUTE, - seq(alias($._style_attr_key, $.attr_key), $._colon, $.attr_value) - ), + _inner_style_attribute: mkBaseAttr(($) => $._style_attr_key), _grid_attr_key: ($) => choice( @@ -311,13 +323,13 @@ module.exports = grammar({ "text-transform" ), + _text_shape_attribute: mkBaseAttr(($) => $._text_attr_key), + _text_attr_key: ($) => "near", - _connection_attribute: ($) => - choice( - alias($._connection_arrowhead_attribute, $.attribute), - alias($._style_attribute, $.attribute) - ), + _connection_attribute: attrAlias(($) => + choice($._connection_arrowhead_attribute, $._style_attribute) + ), _connection_arrowhead_attribute: ($) => seq( diff --git a/src/grammar.json b/src/grammar.json index 9ba9a9e..d8f6a17 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -566,27 +566,22 @@ ] }, "_classes_item_attribute": { - "type": "CHOICE", - "members": [ - { - "type": "ALIAS", - "content": { + "type": "ALIAS", + "content": { + "type": "CHOICE", + "members": [ + { "type": "SYMBOL", "name": "_base_shape_attribute" }, - "named": true, - "value": "attribute" - }, - { - "type": "ALIAS", - "content": { + { "type": "SYMBOL", "name": "_style_attribute" - }, - "named": true, - "value": "attribute" - } - ] + } + ] + }, + "named": true, + "value": "attribute" }, "container": { "type": "PREC", @@ -816,8 +811,30 @@ "name": "label" }, { - "type": "SYMBOL", - "name": "text_block" + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "text_block" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_text_block_attrs" + }, + "named": true, + "value": "block" + }, + { + "type": "BLANK" + } + ] + } + ] } ] } @@ -959,6 +976,83 @@ } ] }, + "_text_block_attrs": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eol" + }, + { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_text_shape_attribute" + }, + "named": true, + "value": "attribute" + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_text_shape_attribute" + }, + "named": true, + "value": "attribute" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_end" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, "language": { "type": "PATTERN", "value": "\\w+" @@ -1224,6 +1318,10 @@ "type": "STRING", "value": "height" }, + { + "type": "SYMBOL", + "name": "_text_attr_key" + }, { "type": "SYMBOL", "name": "_grid_attr_key" @@ -1363,30 +1461,26 @@ ] }, "_inner_style_attribute": { - "type": "PREC", - "value": 0, - "content": { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_style_attr_key" - }, - "named": true, - "value": "attr_key" - }, - { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { "type": "SYMBOL", - "name": "_colon" + "name": "_style_attr_key" }, - { - "type": "SYMBOL", - "name": "attr_value" - } - ] - } + "named": true, + "value": "attr_key" + }, + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "attr_value" + } + ] }, "_grid_attr_key": { "type": "CHOICE", @@ -1507,33 +1601,50 @@ } ] }, - "_text_attr_key": { - "type": "STRING", - "value": "near" - }, - "_connection_attribute": { - "type": "CHOICE", + "_text_shape_attribute": { + "type": "SEQ", "members": [ { "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_connection_arrowhead_attribute" + "name": "_text_attr_key" }, "named": true, - "value": "attribute" + "value": "attr_key" }, { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_style_attribute" - }, - "named": true, - "value": "attribute" + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "attr_value" } ] }, + "_text_attr_key": { + "type": "STRING", + "value": "near" + }, + "_connection_attribute": { + "type": "ALIAS", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_connection_arrowhead_attribute" + }, + { + "type": "SYMBOL", + "name": "_style_attribute" + } + ] + }, + "named": true, + "value": "attribute" + }, "_connection_arrowhead_attribute": { "type": "SEQ", "members": [ @@ -2055,6 +2166,9 @@ ], [ "class_list" + ], + [ + "_text_block_attrs" ] ], "precedences": [], diff --git a/src/node-types.json b/src/node-types.json index 06bca32..ed28446 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -357,6 +357,10 @@ "type": "attribute", "named": true }, + { + "type": "block", + "named": true + }, { "type": "dot", "named": true diff --git a/src/parser.c b/src/parser.c index b58392a0954069e373e679f83dbae14051260e1b..be8e37c6f11c3e20833e82fc579c36135af779c2 100644 GIT binary patch delta 25817 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 delta 22410 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%0DG z--1SNs&KcW6>;taE?Izstt?QaJ)5yeaWVA`S)dshVcr(8op@;VW|`OE9I#kL3Yb72 z9?ADPhK}3&$~ihCc}O%I@#Cn3JxIe4C&GufK+q_oa<;;7@C)p%+7IPW;tD7#dJL?O zzK|__yenx}yeM-xEmxA^NuTm0+Y9rtuCm+1s!)mAl=M29v;PIdmIkr)?8h!-&$WN0>AO=d;q! zp2~+pKvRO;1A0NP?1cH@X34j}wRpeGz~$&_j`M}+x9a5pZXoDMD8+WkzE!(qyps=Dq@wuJ-MH_A>j4144&%)| z2&K#SB7sBrhX46erejemP23BV68EC`so5(H#Rl}qY!VQ*Gn@K3X8`pck_uY(B4dWC zaW`NbJtq?raFk)MMQRRicx@+vTze$HI?RDX=4dm18!+hbo~lw+_=Z9aX6MQI;6^?uk_8I`&LdL7IgX)vA3*F~&XFINq=dmpWZRWzSD%f>^?K5n; z@R5NdnYXFH2k2T6rR|di=m7z=iqv_iKlJXj=O5q@R7wT+Tx5(6A_Oog}d!VL>H7=dH*`;NfL z8MKlAgsVP)?K-J>FY)7oDGE}7>e6EfWw`cp-VcFCm51SObM$HO9DQ^8PW6Oc=R z7xk=OM^I~>KQ#GPxdW9S8h$nZ1X~+z+hHi`%}->R4`&}52Ckfb3m*;rOo4vFY9~?B zU!{-3Dv;`{f_);}ivxg)cY(lu$?gR5|3xM|zT3?mWX_I#ro&O4AXn`}W;p9409(}K zxW=XvJ@_?Fjd2l;4cKSkRL7>pwu3mIQ#0bk6-I0)7ieZo`%I;A9=@ye%4fDJ`FiFx zaD%HgCqTfg+1G14i^q#N0hN2`1XihNRDV<;3_2@S>4xM+<)^k00|5JNPWJCTi4?5* zD@b(wU(pFgM-8B_h<7HcV4!@D5+fo#_(`d_CB;i6sQ#ff3n-B6cPNfRg^FG zaM7WZf5bt=1m2X^f3FfEkQe4#dQY4ML=I^V_tDA(Z7NwRpsT-;9bga2Ho%5NN3Sr+ zfsG$Ke=G6tIF65l5;_$YC;?fIV|KHz?Lb#Vy`P1TCf|4PZPa%U?M3>b}JK3r&1Quc;W6sFMNv*Py^d&;McgFUHKXu2^R|q z2HNeK`M8a#bIUl|fR>WLk&i-LX{^I)eB<1j|K%Uf!!So-d=#l%gA>QEZ2rXNfN!X8 zHhk~!-9Z!4!q%yHIvwY3Nb-<)D*ki5;VPr&et_Wp9(OWlq^zXMzZ{Ks`@rV0=fGz6 zH|pJ@rFhr&=13;W!1~4Z1yk@NekP`1l` z8GY~}%GnX|$cL8#6ea-lV1+wOeWwdOG*&E>BH6;NJWf7PtPt)2l!Y{qwg`8`6|9o( zfixDSG+iOxxTV7Bt?eARr;QBE%Qugitq=v*#fD7_n9TN6!OCl=IOw6XAn5%>w^vya z->*FGcB32v+kKX^65Tlzk?5&7kae}-!-2lu3H2@u)GX#ZY(B{M wl4*2`J4;>KVb!QfarfXCmLRKcJ9xH6v~Emwx231N?g;;*3bp@}>dy82AF{RBA^-pY diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index b753ef35513c68e96d45eadb9d7c357c2cacbc74..675efd885ef7a996e3f48bda1f1f42c1755a9b8e 100755 GIT binary patch delta 16613 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 V1D#@Eb_Ha<1*###(a2a_{};79i~s-t delta 15305 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