mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-05-04 15:59:08 -04:00
Update menu syntax
Sections and submenus can have IDs. Also, change the code to better reflect the documented grammar.
This commit is contained in:
parent
75055ac967
commit
dd3c75d2c7
6 changed files with 44 additions and 33 deletions
|
@ -24,6 +24,7 @@ from blueprintcompiler.language.values import StringValue
|
|||
from .attributes import BaseAttribute
|
||||
from .gobject_object import Object, ObjectContent
|
||||
from .common import *
|
||||
from .values import Translated, QuotedLiteral
|
||||
from .contexts import ValueTypeCtx
|
||||
|
||||
|
||||
|
@ -50,6 +51,14 @@ class Menu(AstNode):
|
|||
raise CompileError("Menu requires an ID")
|
||||
|
||||
|
||||
class MenuValue(AstNode):
|
||||
grammar = AnyOf(QuotedLiteral, Translated)
|
||||
|
||||
@property
|
||||
def child(self) -> T.Union[QuotedLiteral, Translated]:
|
||||
return self.children[0]
|
||||
|
||||
|
||||
class MenuAttribute(AstNode):
|
||||
tag_name = "attribute"
|
||||
|
||||
|
@ -63,22 +72,10 @@ class MenuAttribute(AstNode):
|
|||
|
||||
@context(ValueTypeCtx)
|
||||
def value_type(self) -> ValueTypeCtx:
|
||||
return ValueTypeCtx(
|
||||
None, binding_error=CompileError("Bindings are not permitted in menus")
|
||||
)
|
||||
return ValueTypeCtx(None)
|
||||
|
||||
|
||||
menu_contents = Sequence()
|
||||
|
||||
menu_section = Group(
|
||||
Menu,
|
||||
["section", UseLiteral("tag", "section"), Optional(UseIdent("id")), menu_contents],
|
||||
)
|
||||
|
||||
menu_submenu = Group(
|
||||
Menu,
|
||||
["submenu", UseLiteral("tag", "submenu"), Optional(UseIdent("id")), menu_contents],
|
||||
)
|
||||
menu_child = AnyOf()
|
||||
|
||||
menu_attribute = Group(
|
||||
MenuAttribute,
|
||||
|
@ -90,12 +87,33 @@ menu_attribute = Group(
|
|||
],
|
||||
)
|
||||
|
||||
menu_section = Group(
|
||||
Menu,
|
||||
[
|
||||
"section",
|
||||
UseLiteral("tag", "section"),
|
||||
Optional(UseIdent("id")),
|
||||
Match("{").expected(),
|
||||
Until(AnyOf(menu_child, menu_attribute), "}"),
|
||||
],
|
||||
)
|
||||
|
||||
menu_submenu = Group(
|
||||
Menu,
|
||||
[
|
||||
"submenu",
|
||||
UseLiteral("tag", "submenu"),
|
||||
Optional(UseIdent("id")),
|
||||
Match("{").expected(),
|
||||
Until(AnyOf(menu_child, menu_attribute), "}"),
|
||||
],
|
||||
)
|
||||
|
||||
menu_item = Group(
|
||||
Menu,
|
||||
[
|
||||
"item",
|
||||
UseLiteral("tag", "item"),
|
||||
Optional(UseIdent("id")),
|
||||
Match("{").expected(),
|
||||
Until(menu_attribute, "}"),
|
||||
],
|
||||
|
@ -137,18 +155,11 @@ menu_item_shorthand = Group(
|
|||
],
|
||||
)
|
||||
|
||||
menu_contents.children = [
|
||||
Match("{"),
|
||||
Until(
|
||||
AnyOf(
|
||||
menu_section,
|
||||
menu_submenu,
|
||||
menu_item_shorthand,
|
||||
menu_item,
|
||||
menu_attribute,
|
||||
),
|
||||
"}",
|
||||
),
|
||||
menu_child.children = [
|
||||
menu_section,
|
||||
menu_submenu,
|
||||
menu_item_shorthand,
|
||||
menu_item,
|
||||
]
|
||||
|
||||
menu: Group = Group(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue