From 41e2ce2e577ae8394944222a922b6e498f7adf0f Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Tue, 6 Dec 2022 11:57:59 +0300 Subject: [PATCH] add style attr block --- examples/test.txt | 5 +- grammar.js | 45 +++++-- src/grammar.json | 239 +++++++++++++++++++++++++++++-------- src/node-types.json | 31 +++++ src/parser.c | Bin 97040 -> 127484 bytes test/corpus/attributes.txt | 46 +++++++ 6 files changed, 301 insertions(+), 65 deletions(-) diff --git a/examples/test.txt b/examples/test.txt index 89752f0..0d505ef 100644 --- a/examples/test.txt +++ b/examples/test.txt @@ -1,5 +1,2 @@ -foo -- bar -biz -> baz -biz <-> baz -biz <- baz +foo.style: { opacity: 5; fill: red } diff --git a/grammar.js b/grammar.js index 6a8a7da..a5d273f 100644 --- a/grammar.js +++ b/grammar.js @@ -7,7 +7,12 @@ module.exports = grammar({ word: ($) => $._word, - conflicts: ($) => [[$.identifier], [$.arrow]], + conflicts: ($) => [ + [$.identifier], + [$.arrow], + [$._style_attr_block], + [$._inner_style_attribute], + ], rules: { source_file: ($) => repeat($._definition), @@ -37,28 +42,42 @@ module.exports = grammar({ label: ($) => choice($.string, $._unquoted_string), - attr_value: ($) => choice($.string, $._unquoted_string), + attr_value: ($) => seq(spaces, choice($.string, $._unquoted_string)), _root_attribute: ($) => seq(alias($._root_attr_key, $.attr_key), $._colon, $.attr_value, $._end), _root_attr_key: ($) => "direction", - _style_attribute: ($) => - seq( - alias("style", $.attr_key), - $.dot, - alias($._style_attr_key, $.attr_key), - $._colon, - $.attr_value - ), - _shape_attribute: ($) => choice( seq(alias($._shape_attr_key, $.attr_key), $._colon, $.attr_value), $._style_attribute ), + _style_attribute: ($) => + seq( + alias("style", $.attr_key), + choice( + seq($.dot, $._inner_style_attribute), + seq($._colon, alias($._style_attr_block, $.block)) + ) + ), + + _style_attr_block: ($) => + seq( + spaces, + "{", + spaces, + repeat(choice($._eof, seq($._inner_style_attribute, $._end))), + optional(seq($._inner_style_attribute, optional($._end))), + spaces, + "}" + ), + + _inner_style_attribute: ($) => + seq(spaces, alias($._style_attr_key, $.attr_key), $._colon, $.attr_value), + _connection_attribute: ($) => seq(alias($._connection_attr_key, $.attr_key), $._colon, $.attr_value), @@ -106,7 +125,7 @@ module.exports = grammar({ optional($._dash) ), - _colon: ($) => seq(spaces, ":", spaces), + _colon: ($) => seq(spaces, ":"), _arrow: ($) => seq(spaces, $.arrow), @@ -122,7 +141,7 @@ module.exports = grammar({ dot: ($) => token.immediate("."), - _unquoted_string: ($) => token.immediate(/[^'"`\n;{]+/), + _unquoted_string: ($) => token.immediate(/[^'"`\n;{}]+/), string: ($) => choice( diff --git a/src/grammar.json b/src/grammar.json index 7aaeacf..5da90b7 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -180,15 +180,27 @@ ] }, "attr_value": { - "type": "CHOICE", + "type": "SEQ", "members": [ { - "type": "SYMBOL", - "name": "string" + "type": "REPEAT", + "content": { + "type": "STRING", + "value": " " + } }, { - "type": "SYMBOL", - "name": "_unquoted_string" + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "_unquoted_string" + } + ] } ] }, @@ -222,41 +234,6 @@ "type": "STRING", "value": "direction" }, - "_style_attribute": { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "STRING", - "value": "style" - }, - "named": true, - "value": "attr_key" - }, - { - "type": "SYMBOL", - "name": "dot" - }, - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_style_attr_key" - }, - "named": true, - "value": "attr_key" - }, - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "SYMBOL", - "name": "attr_value" - } - ] - }, "_shape_attribute": { "type": "CHOICE", "members": [ @@ -288,6 +265,173 @@ } ] }, + "_style_attribute": { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "STRING", + "value": "style" + }, + "named": true, + "value": "attr_key" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "dot" + }, + { + "type": "SYMBOL", + "name": "_inner_style_attribute" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_style_attr_block" + }, + "named": true, + "value": "block" + } + ] + } + ] + } + ] + }, + "_style_attr_block": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": " " + } + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": " " + } + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eof" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_inner_style_attribute" + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_inner_style_attribute" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_end" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": " " + } + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_inner_style_attribute": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": " " + } + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_style_attr_key" + }, + "named": true, + "value": "attr_key" + }, + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "attr_value" + } + ] + }, "_connection_attribute": { "type": "SEQ", "members": [ @@ -508,13 +652,6 @@ { "type": "STRING", "value": ":" - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": " " - } } ] }, @@ -625,7 +762,7 @@ "type": "IMMEDIATE_TOKEN", "content": { "type": "PATTERN", - "value": "[^'\"`\\n;{]+" + "value": "[^'\"`\\n;{}]+" } }, "string": { @@ -752,6 +889,12 @@ ], [ "arrow" + ], + [ + "_style_attr_block" + ], + [ + "_inner_style_attribute" ] ], "precedences": [], diff --git a/src/node-types.json b/src/node-types.json index 384dc18..8b3cd04 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -24,6 +24,25 @@ ] } }, + { + "type": "block", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attr_key", + "named": true + }, + { + "type": "attr_value", + "named": true + } + ] + } + }, { "type": "connection", "named": true, @@ -95,6 +114,10 @@ "type": "attr_value", "named": true }, + { + "type": "block", + "named": true + }, { "type": "dot", "named": true @@ -273,5 +296,13 @@ { "type": "width", "named": false + }, + { + "type": "{", + "named": false + }, + { + "type": "}", + "named": false } ] \ No newline at end of file diff --git a/src/parser.c b/src/parser.c index e4c3729d15ecef9b1e65b2a4a91723df291f0e63..3674623d71175638d61dbc1a22509e141efb2546 100644 GIT binary patch literal 127484 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 e1zj{6U2cHh`RMm&fGNB?s(-)!c~*N1QX; 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