language: a11y: Fix property names

Blueprint uses underscores in property/state/relation names, but
GtkBuilder expects dashes because it uses the glib names from the
GtkAccessible* enums.
This commit is contained in:
James Westman 2022-03-16 15:43:41 -05:00
parent 6576e02837
commit 31165b286a
5 changed files with 15 additions and 6 deletions

View file

@ -28,9 +28,13 @@ class BaseAttribute(AstNode):
tag_name: str = "" tag_name: str = ""
attr_name: str = "name" attr_name: str = "name"
@property
def name(self):
return self.tokens["name"]
def emit_xml(self, xml: XmlEmitter): def emit_xml(self, xml: XmlEmitter):
value = self.children[Value][0] value = self.children[Value][0]
attrs = { self.attr_name: self.tokens["name"] } attrs = { self.attr_name: self.name }
if isinstance(value, TranslatedStringValue): if isinstance(value, TranslatedStringValue):
attrs = { **attrs, **value.attrs } attrs = { **attrs, **value.attrs }

View file

@ -121,6 +121,10 @@ class A11yProperty(BaseTypedAttribute):
else: else:
raise CompilerBugError() raise CompilerBugError()
@property
def name(self):
return self.tokens["name"].replace("_", "-")
@property @property
def value_type(self) -> GirType: def value_type(self) -> GirType:
return get_types(self.root.gir).get(self.tokens["name"]) return get_types(self.root.gir).get(self.tokens["name"])
@ -181,12 +185,13 @@ def a11y_name_completer(ast_node, match_variables):
@decompiler("relation", cdata=True) @decompiler("relation", cdata=True)
def decompile_relation(ctx, gir, name, cdata): def decompile_relation(ctx, gir, name, cdata):
name = name.replace("-", "_")
ctx.print_attribute(name, cdata, get_types(ctx.gir).get(name)) ctx.print_attribute(name, cdata, get_types(ctx.gir).get(name))
@decompiler("state", cdata=True) @decompiler("state", cdata=True)
def decompile_state(ctx, gir, name, cdata, translatable="false"): def decompile_state(ctx, gir, name, cdata, translatable="false"):
if decompile.truthy(translatable): if decompile.truthy(translatable):
ctx.print(f"{name}: _(\"{_escape_quote(cdata)}\");") ctx.print(f"{name.replace('-', '_')}: _(\"{_escape_quote(cdata)}\");")
else: else:
ctx.print_attribute(name, cdata, get_types(ctx.gir).get(name)) ctx.print_attribute(name, cdata, get_types(ctx.gir).get(name))

View file

@ -1,6 +1,6 @@
using Gtk 4.0; using Gtk 4.0;
Gtk.Widget { Gtk.Box {
accessibility { accessibility {
label: _("Hello, world!"); label: _("Hello, world!");
labelled_by: my_label; labelled_by: my_label;

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<interface> <interface>
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<object class="GtkWidget"> <object class="GtkBox">
<accessibility> <accessibility>
<property name="label" translatable="true">Hello, world!</property> <property name="label" translatable="true">Hello, world!</property>
<relation name="labelled_by">my_label</relation> <relation name="labelled-by">my_label</relation>
<state name="checked">true</state> <state name="checked">true</state>
</accessibility> </accessibility>
</object> </object>

View file

@ -1,6 +1,6 @@
using Gtk 4.0; using Gtk 4.0;
Widget { Box {
accessibility { accessibility {
label: _("Hello, world!"); label: _("Hello, world!");
labelled_by: my_label; labelled_by: my_label;