From d1ace018aeec8e23447aa7e8dfb182204d35ce6f Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Wed, 14 Jun 2023 18:11:42 +0300 Subject: [PATCH] grammar: add vertical-gap, horizontal-gap Closes #14 --- grammar.js | 9 ++++++++- src/grammar.json | 8 ++++++++ src/node-types.json | 8 ++++++++ src/parser.c | Bin 205924 -> 209618 bytes test/corpus/attributes.txt | 4 +++- test/highlight/grid.d2 | 12 ++++++++++++ 6 files changed, 39 insertions(+), 2 deletions(-) diff --git a/grammar.js b/grammar.js index 2107c99..17d3374 100644 --- a/grammar.js +++ b/grammar.js @@ -237,7 +237,14 @@ module.exports = grammar({ seq(alias($._style_attr_key, $.attr_key), $._colon, $.attr_value) ), - _grid_attr_key: ($) => choice("grid-gap", "grid-columns", "grid-rows"), + _grid_attr_key: ($) => + choice( + "vertical-gap", + "horizontal-gap", + "grid-gap", + "grid-columns", + "grid-rows" + ), _style_attr_key: ($) => choice($._common_style_attr_key, "3d"), _common_style_attr_key: ($) => diff --git a/src/grammar.json b/src/grammar.json index b108d85..ff4dd7a 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -981,6 +981,14 @@ "_grid_attr_key": { "type": "CHOICE", "members": [ + { + "type": "STRING", + "value": "vertical-gap" + }, + { + "type": "STRING", + "value": "horizontal-gap" + }, { "type": "STRING", "value": "grid-gap" diff --git a/src/node-types.json b/src/node-types.json index c78856b..823463c 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -444,6 +444,10 @@ "type": "height", "named": false }, + { + "type": "horizontal-gap", + "named": false + }, { "type": "icon", "named": false @@ -528,6 +532,10 @@ "type": "underline", "named": false }, + { + "type": "vertical-gap", + "named": false + }, { "type": "width", "named": false diff --git a/src/parser.c b/src/parser.c index 39c1580b0753d7c590662b4b8375bdabec2673f9..6d3394e450d70900798096d1a14bdf6d0525009f 100644 GIT binary patch delta 20437 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 delta 19051 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