add container key
This commit is contained in:
parent
ec5fa08c7c
commit
6835da6d3c
11 changed files with 230 additions and 163 deletions
36
grammar.js
36
grammar.js
|
@ -11,7 +11,6 @@ module.exports = grammar({
|
|||
[$.shape_key],
|
||||
[$.arrow],
|
||||
[$._shape_path],
|
||||
[$._shape_key],
|
||||
[$._shape_block],
|
||||
[$._shape_block_definition],
|
||||
[$._style_attr_block],
|
||||
|
@ -47,7 +46,7 @@ module.exports = grammar({
|
|||
choice(
|
||||
seq($.dot, $._shape_attribute),
|
||||
seq(
|
||||
optional(seq($._colon, optional($.label))),
|
||||
optional(seq($._colon, optional(seq(spaces, $.label)))),
|
||||
optional(alias($._shape_block, $.block))
|
||||
)
|
||||
)
|
||||
|
@ -56,9 +55,23 @@ module.exports = grammar({
|
|||
),
|
||||
|
||||
_shape_path: ($) =>
|
||||
seq(
|
||||
spaces,
|
||||
repeat(seq(alias($.shape_key, $.container_key), spaces, $.dot, spaces)),
|
||||
$.shape_key
|
||||
),
|
||||
|
||||
shape_key: ($) =>
|
||||
choice(
|
||||
$._shape_key,
|
||||
seq($._shape_key, repeat1(seq($.dot, $._shape_key)))
|
||||
$.string,
|
||||
seq(
|
||||
optional($._dash),
|
||||
choice(
|
||||
$._word,
|
||||
repeat1(seq($._word, choice(repeat1(" "), $._dash), $._word))
|
||||
),
|
||||
optional($._dash)
|
||||
)
|
||||
),
|
||||
|
||||
label: ($) => choice($.string, $._unquoted_string),
|
||||
|
@ -157,21 +170,6 @@ module.exports = grammar({
|
|||
|
||||
_connection_attr_key: ($) => choice("source-arrowhead", "target-arrowhead"),
|
||||
|
||||
_shape_key: ($) => seq(spaces, $.shape_key),
|
||||
|
||||
shape_key: ($) =>
|
||||
choice(
|
||||
$.string,
|
||||
seq(
|
||||
optional($._dash),
|
||||
choice(
|
||||
$._word,
|
||||
repeat1(seq($._word, choice(repeat1(" "), $._dash), $._word))
|
||||
),
|
||||
optional($._dash)
|
||||
)
|
||||
),
|
||||
|
||||
_colon: ($) => seq(spaces, ":"),
|
||||
|
||||
_arrow: ($) => seq(spaces, $.arrow),
|
||||
|
|
|
@ -5,13 +5,15 @@
|
|||
(invalid (_) @error)
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
(container_key) @constant
|
||||
(shape_key) @variable
|
||||
(attr_key) @keyword
|
||||
(attr_key) @property
|
||||
|
||||
; Literals
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
(string) @string
|
||||
(container_key (string) @string.special)
|
||||
(shape_key (string) @string)
|
||||
(label) @string
|
||||
(attr_value) @string
|
||||
|
||||
|
@ -26,6 +28,7 @@
|
|||
(arrow) @operator
|
||||
|
||||
[
|
||||
(dot)
|
||||
":"
|
||||
";"
|
||||
] @punctuation.delimiter
|
||||
|
|
259
src/grammar.json
259
src/grammar.json
|
@ -140,9 +140,30 @@
|
|||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": " "
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "\t"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "label"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
|
@ -189,18 +210,111 @@
|
|||
]
|
||||
},
|
||||
"_shape_path": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": " "
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "\t"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "ALIAS",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "shape_key"
|
||||
},
|
||||
"named": true,
|
||||
"value": "container_key"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": " "
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "\t"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "dot"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": " "
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "\t"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "shape_key"
|
||||
}
|
||||
]
|
||||
},
|
||||
"shape_key": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_shape_key"
|
||||
"name": "string"
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_shape_key"
|
||||
"name": "_dash"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_word"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT1",
|
||||
|
@ -209,16 +323,46 @@
|
|||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "dot"
|
||||
"name": "_word"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "REPEAT1",
|
||||
"content": {
|
||||
"type": "STRING",
|
||||
"value": " "
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_shape_key"
|
||||
"name": "_dash"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_word"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_dash"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -809,110 +953,6 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"_shape_key": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": " "
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "\t"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "shape_key"
|
||||
}
|
||||
]
|
||||
},
|
||||
"shape_key": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "string"
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_dash"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_word"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT1",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_word"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "REPEAT1",
|
||||
"content": {
|
||||
"type": "STRING",
|
||||
"value": " "
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_dash"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_word"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_dash"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"_colon": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
|
@ -1240,9 +1280,6 @@
|
|||
[
|
||||
"_shape_path"
|
||||
],
|
||||
[
|
||||
"_shape_key"
|
||||
],
|
||||
[
|
||||
"_shape_block"
|
||||
],
|
||||
|
|
|
@ -48,6 +48,10 @@
|
|||
"type": "connection",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "container_key",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "dot",
|
||||
"named": true
|
||||
|
@ -83,6 +87,10 @@
|
|||
"type": "attr_value",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "container_key",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "dot",
|
||||
"named": true
|
||||
|
@ -98,6 +106,21 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "container_key",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "string",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "invalid",
|
||||
"named": true,
|
||||
|
@ -179,6 +202,10 @@
|
|||
"type": "connection",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "container_key",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "dot",
|
||||
"named": true
|
||||
|
|
BIN
src/parser.c
BIN
src/parser.c
Binary file not shown.
|
@ -26,7 +26,7 @@ foo: {
|
|||
(shape_key)
|
||||
(block
|
||||
(attr_key) (attr_value)
|
||||
(shape_key) (dot) (shape_key) (dot) (shape_key)
|
||||
(container_key) (dot) (container_key) (dot) (shape_key)
|
||||
(block
|
||||
(attr_key) (attr_value)
|
||||
)
|
||||
|
@ -44,7 +44,7 @@ foo.bar.baz.shape: oval
|
|||
|
||||
(source_file
|
||||
(shape_key) (dot) (attr_key) (attr_value)
|
||||
(shape_key) (dot) (shape_key) (dot) (shape_key) (dot) (attr_key) (attr_value)
|
||||
(container_key) (dot) (container_key) (dot) (shape_key) (dot) (attr_key) (attr_value)
|
||||
)
|
||||
|
||||
================================================================================
|
||||
|
|
|
@ -149,7 +149,7 @@ bar -> baz: Yes
|
|||
)
|
||||
|
||||
================================================================================
|
||||
Connection using shape path
|
||||
Connection of shapes inside a containers
|
||||
================================================================================
|
||||
foo.biz.baz -> bar.baz.biz: Label
|
||||
|
||||
|
@ -157,9 +157,9 @@ foo.biz.baz -> bar.baz.biz: Label
|
|||
|
||||
(source_file
|
||||
(connection
|
||||
(shape_key) (dot) (shape_key) (dot) (shape_key)
|
||||
(container_key) (dot) (container_key) (dot) (shape_key)
|
||||
(arrow)
|
||||
(shape_key) (dot) (shape_key) (dot) (shape_key)
|
||||
(container_key) (dot) (container_key) (dot) (shape_key)
|
||||
(label)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -6,7 +6,7 @@ foo.baz
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(shape_key) (dot) (shape_key)
|
||||
(container_key) (dot) (shape_key)
|
||||
)
|
||||
|
||||
================================================================================
|
||||
|
@ -17,7 +17,7 @@ Use quoted string as a shape key
|
|||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(shape_key (string)) (dot) (shape_key (string))
|
||||
(container_key (string)) (dot) (shape_key (string))
|
||||
)
|
||||
|
||||
================================================================================
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
direction: right;
|
||||
# <- keyword
|
||||
# <- property
|
||||
# ^ punctuation.delimiter
|
||||
# ^ string
|
||||
# ^ punctuation.delimiter
|
||||
|
@ -10,19 +10,19 @@ shape: oval
|
|||
|
||||
baaaz.style: {
|
||||
# <- variable
|
||||
# ^ keyword
|
||||
# ^ property
|
||||
fill: red
|
||||
# <- keyword
|
||||
# <- property
|
||||
# ^ string
|
||||
}
|
||||
|
||||
foo: Label {
|
||||
shape: oval
|
||||
# <- keyword
|
||||
# <- property
|
||||
# ^ string
|
||||
|
||||
style.fill: red;
|
||||
# <- keyword
|
||||
# ^ keyword
|
||||
# <- property
|
||||
# ^ property
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
foo.'baz'.biz
|
||||
# <- variable
|
||||
# ^ string
|
||||
# <- constant
|
||||
# ^ punctuation.delimiter
|
||||
# ^ string.special
|
||||
# ^ punctuation.delimiter
|
||||
# ^ variable
|
||||
|
||||
'biz': 'Baz'
|
||||
|
@ -18,7 +20,7 @@ foo: Foo Bar {
|
|||
# ^ punctuation.bracket
|
||||
|
||||
bar.baz
|
||||
# <- variable
|
||||
# <- constant
|
||||
# ^ variable
|
||||
}
|
||||
# <- punctuation.bracket
|
||||
|
|
Binary file not shown.
Loading…
Reference in a new issue