From 02af3938f1d1187482ed91a5bcff84cc0fce45d9 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Thu, 16 Feb 2023 23:28:34 +0300 Subject: [PATCH] grammar: add new attributes --- grammar.js | 8 +++++++- src/grammar.json | 24 ++++++++++++++++++++++++ src/node-types.json | 20 ++++++++++++++++++++ src/parser.c | Bin 193736 -> 200573 bytes 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/grammar.js b/grammar.js index 2364a5a..8cf70ea 100644 --- a/grammar.js +++ b/grammar.js @@ -188,6 +188,7 @@ module.exports = grammar({ prec( PREC.ATTRIBUTE_KEY, choice( + "direction", "shape", "label", "link", @@ -244,11 +245,16 @@ module.exports = grammar({ "stroke-width", "stroke-dash", "border-radius", + "double-border", + "font-size", "font-color", "shadow", "multiple", "animated", - "link" + "link", + "italic", + "bold", + "underline" ), _text_attr_key: ($) => "near", diff --git a/src/grammar.json b/src/grammar.json index dc01220..224ae86 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -769,6 +769,10 @@ "content": { "type": "CHOICE", "members": [ + { + "type": "STRING", + "value": "direction" + }, { "type": "STRING", "value": "shape" @@ -1006,6 +1010,14 @@ "type": "STRING", "value": "border-radius" }, + { + "type": "STRING", + "value": "double-border" + }, + { + "type": "STRING", + "value": "font-size" + }, { "type": "STRING", "value": "font-color" @@ -1025,6 +1037,18 @@ { "type": "STRING", "value": "link" + }, + { + "type": "STRING", + "value": "italic" + }, + { + "type": "STRING", + "value": "bold" + }, + { + "type": "STRING", + "value": "underline" } ] }, diff --git a/src/node-types.json b/src/node-types.json index 92c1eec..11b65e0 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -376,6 +376,10 @@ "type": "block_comment", "named": true }, + { + "type": "bold", + "named": false + }, { "type": "border-radius", "named": false @@ -392,6 +396,10 @@ "type": "dot", "named": true }, + { + "type": "double-border", + "named": false + }, { "type": "escape_sequence", "named": true @@ -412,6 +420,10 @@ "type": "font-color", "named": false }, + { + "type": "font-size", + "named": false + }, { "type": "height", "named": false @@ -424,6 +436,10 @@ "type": "integer", "named": true }, + { + "type": "italic", + "named": false + }, { "type": "label", "named": false @@ -492,6 +508,10 @@ "type": "true", "named": false }, + { + "type": "underline", + "named": false + }, { "type": "width", "named": false diff --git a/src/parser.c b/src/parser.c index 334c028e887fca2be166dfc06fef910900f27149..e01284091f5593dec568649de3ba2475d9f8ea83 100644 GIT binary patch delta 21839 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

`gQ&Txu_Va-x(t^oQzz5DjM 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 WLR%;@>1U8^zQ_~3UZ(q};eP;=!i=E+