diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1ec071e..6d373cc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,7 +3,7 @@ stages:
- pages
build:
- image: registry.gitlab.gnome.org/jwestman/blueprint-compiler
+ image: registry.gitlab.gnome.org/gnome/blueprint-compiler
stage: build
script:
- black --check --diff ./ tests
@@ -33,7 +33,7 @@ build:
path: coverage.xml
fuzz:
- image: registry.gitlab.gnome.org/jwestman/blueprint-compiler
+ image: registry.gitlab.gnome.org/gnome/blueprint-compiler
stage: build
script:
- meson _build
diff --git a/blueprint-compiler.doap b/blueprint-compiler.doap
new file mode 100644
index 0000000..f3e4000
--- /dev/null
+++ b/blueprint-compiler.doap
@@ -0,0 +1,27 @@
+
+
+ Blueprint
+ A modern language for creating GTK interfaces
+ Blueprint is a language and associated tooling for building user interfaces for GTK.
+
+ Python
+
+
+
+
+
+
+
+ James Westman
+
+ jwestman
+
+
+
diff --git a/blueprintcompiler/decompiler.py b/blueprintcompiler/decompiler.py
index de6c06f..850b6d8 100644
--- a/blueprintcompiler/decompiler.py
+++ b/blueprintcompiler/decompiler.py
@@ -255,7 +255,11 @@ def decompile_element(
ctx._node_stack.append(xml)
ctx.start_block()
- gir = decompiler(*args, **kwargs)
+
+ try:
+ gir = decompiler(*args, **kwargs)
+ except TypeError as e:
+ raise UnsupportedError(tag=xml.tag)
if not decompiler._skip_children:
for child in xml.children:
@@ -266,8 +270,6 @@ def decompile_element(
except UnsupportedError as e:
raise e
- except TypeError as e:
- raise UnsupportedError(tag=xml.tag)
def decompile(data: str) -> str:
diff --git a/blueprintcompiler/errors.py b/blueprintcompiler/errors.py
index 1e7297c..df1c2e1 100644
--- a/blueprintcompiler/errors.py
+++ b/blueprintcompiler/errors.py
@@ -219,7 +219,7 @@ def report_bug(): # pragma: no cover
f"""{Colors.BOLD}{Colors.RED}***** COMPILER BUG *****
The blueprint-compiler program has crashed. Please report the above stacktrace,
along with the input file(s) if possible, on GitLab:
-{Colors.BOLD}{Colors.BLUE}{Colors.UNDERLINE}https://gitlab.gnome.org/jwestman/blueprint-compiler/-/issues/new?issue
+{Colors.BOLD}{Colors.BLUE}{Colors.UNDERLINE}https://gitlab.gnome.org/GNOME/blueprint-compiler/-/issues/new?issue
{Colors.CLEAR}"""
)
diff --git a/blueprintcompiler/interactive_port.py b/blueprintcompiler/interactive_port.py
index 0c37885..8005e9e 100644
--- a/blueprintcompiler/interactive_port.py
+++ b/blueprintcompiler/interactive_port.py
@@ -71,7 +71,7 @@ def decompile_file(in_file, out_file) -> T.Union[str, CouldNotPort]:
print(
f"""{Colors.FAINT}Either the original XML file had an error, or there is a bug in the
porting tool. If you think it's a bug (which is likely), please file an issue on GitLab:
-{Colors.BLUE}{Colors.UNDERLINE}https://gitlab.gnome.org/jwestman/blueprint-compiler/-/issues/new?issue{Colors.CLEAR}\n"""
+{Colors.BLUE}{Colors.UNDERLINE}https://gitlab.gnome.org/GNOME/blueprint-compiler/-/issues/new?issue{Colors.CLEAR}\n"""
)
return CouldNotPort("does not compile")
@@ -136,7 +136,7 @@ def step1():
wrap.write(
f"""[wrap-git]
directory = blueprint-compiler
-url = https://gitlab.gnome.org/jwestman/blueprint-compiler.git
+url = https://gitlab.gnome.org/GNOME/blueprint-compiler.git
revision = {VERSION}
depth = 1
@@ -266,6 +266,7 @@ blueprints = custom_target('blueprints',
arguments in {Colors.UNDERLINE}{meson_file}{Colors.NO_UNDERLINE}:{Colors.CLEAR}
dependencies: blueprints,
+source_dir: meson.current_build_dir(),
"""
)
enter()
diff --git a/blueprintcompiler/language/expression.py b/blueprintcompiler/language/expression.py
index e0b4246..de6fbf1 100644
--- a/blueprintcompiler/language/expression.py
+++ b/blueprintcompiler/language/expression.py
@@ -302,12 +302,18 @@ expr.children = [
@decompiler("lookup", skip_children=True, cdata=True)
def decompile_lookup(
- ctx: DecompileCtx, gir: gir.GirContext, cdata: str, name: str, type: str
+ ctx: DecompileCtx,
+ gir: gir.GirContext,
+ cdata: str,
+ name: str,
+ type: T.Optional[str] = None,
):
if ctx.parent_node is not None and ctx.parent_node.tag == "property":
ctx.print("expr ")
- if t := ctx.type_by_cname(type):
+ if type is None:
+ type = ""
+ elif t := ctx.type_by_cname(type):
type = decompile.full_name(t)
else:
type = "$" + type
@@ -327,7 +333,7 @@ def decompile_lookup(
if constant == ctx.template_class:
ctx.print("template." + name)
elif constant == "":
- ctx.print("item as <" + type + ">." + name)
+ ctx.print(f"item as <{type}>.{name}")
else:
ctx.print(constant + "." + name)
return
diff --git a/blueprintcompiler/parse_tree.py b/blueprintcompiler/parse_tree.py
index ae062fb..e590539 100644
--- a/blueprintcompiler/parse_tree.py
+++ b/blueprintcompiler/parse_tree.py
@@ -17,7 +17,7 @@
#
# SPDX-License-Identifier: LGPL-3.0-or-later
-""" Utilities for parsing an AST from a token stream. """
+"""Utilities for parsing an AST from a token stream."""
import typing as T
from enum import Enum
diff --git a/docs/collect-sections.py b/docs/collect-sections.py
index 07bc5f6..a2dd004 100755
--- a/docs/collect-sections.py
+++ b/docs/collect-sections.py
@@ -9,7 +9,7 @@ from pathlib import Path
__all__ = ["get_docs_section"]
-DOCS_ROOT = "https://jwestman.pages.gitlab.gnome.org/blueprint-compiler"
+DOCS_ROOT = "https://gnome.pages.gitlab.gnome.org/blueprint-compiler"
sections: dict[str, "Section"] = {}
diff --git a/docs/flatpak.rst b/docs/flatpak.rst
index 86112cf..8081c8d 100644
--- a/docs/flatpak.rst
+++ b/docs/flatpak.rst
@@ -16,7 +16,7 @@ a module in your flatpak manifest:
"sources": [
{
"type": "git",
- "url": "https://gitlab.gnome.org/jwestman/blueprint-compiler",
+ "url": "https://gitlab.gnome.org/GNOME/blueprint-compiler",
"tag": "v0.16.0"
}
]
diff --git a/docs/index.rst b/docs/index.rst
index a71b968..6cd130f 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -59,7 +59,7 @@ Features
Links
-----
-- `Source code `_
+- `Source code `_
- `Workbench `_ lets you try, preview and export Blueprint
- `GNOME Builder `_ provides builtin support
- `Vim syntax highlighting plugin by thetek42 `_
diff --git a/docs/reference/extensions.rst b/docs/reference/extensions.rst
index 0961d14..2fd5dbb 100644
--- a/docs/reference/extensions.rst
+++ b/docs/reference/extensions.rst
@@ -10,7 +10,7 @@ Properties are the main way to set values on objects, but they are limited by th
Extensions are a feature of ``Gtk.Buildable``--see `Gtk.Buildable.custom_tag_start() `_ for internal details.
- Because they aren't part of the type system, they aren't present in typelib files like properties and signals are. Therefore, if a library adds a new extension, syntax for it must be added to Blueprint manually. If there's a commonly used extension that isn't supported by Blueprint, please `file an issue `_.
+ Because they aren't part of the type system, they aren't present in typelib files like properties and signals are. Therefore, if a library adds a new extension, syntax for it must be added to Blueprint manually. If there's a commonly used extension that isn't supported by Blueprint, please `file an issue `_.
.. rst-class:: grammar-block
diff --git a/docs/setup.rst b/docs/setup.rst
index 839f8f6..914c753 100644
--- a/docs/setup.rst
+++ b/docs/setup.rst
@@ -8,7 +8,7 @@ Setting up Blueprint on a new or existing project
Using the porting tool
~~~~~~~~~~~~~~~~~~~~~~
-Clone `blueprint-compiler `_
+Clone `blueprint-compiler `_
from source. You can install it using ``meson _build`` and ``ninja -C _build install``,
or you can leave it uninstalled.
@@ -29,7 +29,7 @@ blueprint-compiler works as a meson subproject.
[wrap-git]
directory = blueprint-compiler
- url = https://gitlab.gnome.org/jwestman/blueprint-compiler.git
+ url = https://gitlab.gnome.org/GNOME/blueprint-compiler.git
revision = main
depth = 1
diff --git a/tests/samples/issue_187.ui b/tests/samples/issue_187.ui
new file mode 100644
index 0000000..941a00f
--- /dev/null
+++ b/tests/samples/issue_187.ui
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/samples/issue_187_dec.blp b/tests/samples/issue_187_dec.blp
new file mode 100644
index 0000000..30b997c
--- /dev/null
+++ b/tests/samples/issue_187_dec.blp
@@ -0,0 +1,7 @@
+using Gtk 4.0;
+
+template ListItem {
+ child: Label {
+ label: bind template.item as <$RecentObject>.filename;
+ };
+}
diff --git a/tests/test_samples.py b/tests/test_samples.py
index 1f56eb6..f96d0eb 100644
--- a/tests/test_samples.py
+++ b/tests/test_samples.py
@@ -181,11 +181,7 @@ class TestSamples(unittest.TestCase):
def test_samples(self):
# list the samples directory
- samples = [
- f.stem
- for f in Path(__file__).parent.glob("samples/*.blp")
- if not f.stem.endswith("_dec")
- ]
+ samples = [f.stem for f in Path(__file__).parent.glob("samples/*.blp")]
samples.sort()
for sample in samples:
REQUIRE_ADW_1_4 = ["adw_breakpoint"]
@@ -215,7 +211,7 @@ class TestSamples(unittest.TestCase):
]
# Decompiler-only tests
- SKIP_COMPILE = ["issue_177", "translator_comments"]
+ SKIP_COMPILE = ["issue_177", "issue_187", "translator_comments"]
SKIP_DECOMPILE = [
# Comments are not preserved in either direction
@@ -228,7 +224,7 @@ class TestSamples(unittest.TestCase):
continue
with self.subTest(sample):
- if sample not in SKIP_COMPILE:
+ if sample not in SKIP_COMPILE and not sample.endswith("_dec"):
self.assert_sample(sample, skip_run=sample in SKIP_RUN)
with self.subTest("decompile/" + sample):
diff --git a/tests/test_tokenizer.py b/tests/test_tokenizer.py
index 2bca595..ad5f828 100644
--- a/tests/test_tokenizer.py
+++ b/tests/test_tokenizer.py
@@ -25,7 +25,7 @@ from blueprintcompiler.tokenizer import Token, TokenType, tokenize
class TestTokenizer(unittest.TestCase):
- def assert_tokenize(self, string: str, expect: [Token]):
+ def assert_tokenize(self, string: str, expect: list[Token]):
try:
tokens = tokenize(string)
self.assertEqual(len(tokens), len(expect))