Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
runs-on: ${{ matrix.platform }}
strategy:
matrix:
python-version: ['3.9', '3.13']
python-version: ['3.10', '3.14']
platform: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v5
Expand Down
2 changes: 1 addition & 1 deletion mypy.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[mypy]
python_version = 3.9
python_version = 3.10

# Untyped definitions and calls
disallow_incomplete_defs = True
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ name = "vttLib"
authors = [{ name = "Dalton Maag Ltd", email = "info@daltonmaag.com" }]
description = "Compile Visual TrueType assembly with FontTools."
readme = "README.md"
requires-python = ">=3.9"
requires-python = ">=3.10"
license = {text = "MIT"}
dependencies = [
"fonttools[ufo]>=4.0.0",
Expand All @@ -23,7 +23,7 @@ Source = "https://github.com/daltonmaag/vttLib"
write_to = "src/vttLib/_version.py"

[tool.black]
target-version = ["py39"]
target-version = ["py310"]

[tool.isort]
profile = "black"
Expand Down
54 changes: 22 additions & 32 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,78 +1,68 @@
# This file was autogenerated by uv via the following command:
# uv pip compile requirements-dev.in --python 3.9 --universal
black==25.9.0
# uv pip compile --universal requirements-dev.in
black==26.3.1
# via -r requirements-dev.in
booleanoperations==0.9.0
booleanoperations==0.10.0
# via ufo2ft
cffsubr==0.3.0
cffsubr==0.4.0
# via ufo2ft
click==8.1.8 ; python_full_version < '3.10'
# via black
click==8.3.0 ; python_full_version >= '3.10'
click==8.3.1
# via black
colorama==0.4.6 ; sys_platform == 'win32'
# via
# click
# pytest
coverage==7.10.7
coverage==7.13.5
# via -r requirements-dev.in
exceptiongroup==1.3.0 ; python_full_version < '3.11'
# via pytest
flake8==7.3.0
# via -r requirements-dev.in
fontmath==0.9.4
fontmath==0.10.0
# via ufo2ft
fonttools==4.60.0
fonttools==4.62.1
# via
# booleanoperations
# cffsubr
# fontmath
# ufo2ft
iniconfig==2.1.0
iniconfig==2.3.0
# via pytest
isort==6.0.1
isort==8.0.1
# via -r requirements-dev.in
librt==0.8.1 ; platform_python_implementation != 'PyPy'
# via mypy
mccabe==0.7.0
# via flake8
mypy==1.18.2
mypy==1.19.1
# via -r requirements-dev.in
mypy-extensions==1.1.0
# via
# black
# mypy
packaging==25.0
packaging==26.0
# via
# black
# pytest
pathspec==0.12.1
pathspec==1.0.4
# via
# black
# mypy
platformdirs==4.4.0
platformdirs==4.9.4
# via black
pluggy==1.6.0
# via pytest
pyclipper==1.3.0.post6
pyclipper==1.4.0
# via booleanoperations
pycodestyle==2.14.0
# via flake8
pyflakes==3.4.0
# via flake8
pygments==2.19.2
pygments==2.20.0
# via pytest
pytest==8.4.2
pytest==9.0.2
# via -r requirements-dev.in
pytokens==0.1.10
pytokens==0.4.1
# via black
tomli==2.2.1 ; python_full_version < '3.11'
# via
# black
# mypy
# pytest
typing-extensions==4.15.0
# via
# black
# exceptiongroup
# mypy
ufo2ft==3.6.5
# via mypy
ufo2ft==3.7.1
# via -r requirements-dev.in
8 changes: 4 additions & 4 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# This file was autogenerated by uv via the following command:
# uv pip compile pyproject.toml --python 3.9 --universal
attrs==25.3.0
# uv pip compile --universal pyproject.toml
attrs==26.1.0
# via ufolib2
fonttools==4.60.0
fonttools==4.62.1
# via
# vttlib (pyproject.toml)
# ufolib2
pyparsing==3.2.5
pyparsing==3.3.2
# via vttlib (pyproject.toml)
ufolib2==0.18.1
# via vttlib (pyproject.toml)
75 changes: 20 additions & 55 deletions tests/vttLib_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@ def test_ignore_overlap(self):
assert not ft_assembly

def test_jump_back(self):
vtt_assembly = dedent(
"""
vtt_assembly = dedent("""
#PUSH, 1
DUP[]
#Label1:
Expand All @@ -58,29 +57,22 @@ def test_jump_back(self):
DUP[]
#PUSH, Var1
JMPR[], (Var1=#Label1)
"""
)
""")

ft_assembly = transform_assembly(vtt_assembly)

assert (
ft_assembly
== dedent(
"""
assert ft_assembly == dedent("""
PUSH[] 1
DUP[]
DUP[]
DUP[]
DUP[]
PUSHW[] -6
JMPR[]
"""
).strip()
)
""").strip()

def test_jump_forward(self):
vtt_assembly = dedent(
"""
vtt_assembly = dedent("""
#PUSH, Var1
JMPR[], (Var1=#Label1)
DUP[]
Expand All @@ -90,15 +82,11 @@ def test_jump_forward(self):
#Label1:
DUP[]
DUP[]
"""
)
""")

ft_assembly = transform_assembly(vtt_assembly)

assert (
ft_assembly
== dedent(
"""
assert ft_assembly == dedent("""
PUSHW[] 7
JMPR[]
DUP[]
Expand All @@ -107,44 +95,34 @@ def test_jump_forward(self):
DUP[]
DUP[]
DUP[]
"""
).strip()
)
""").strip()

def test_jump_mixed_args(self):
vtt_assembly = dedent(
"""
vtt_assembly = dedent("""
#PUSH, Var1, 1
JROT[], (Var1=#Label1)
DUP[]
DUP[]
DUP[]
#Label1:
DUP[]
"""
)
""")

ft_assembly = transform_assembly(vtt_assembly)

assert (
ft_assembly
== dedent(
"""
assert ft_assembly == dedent("""
PUSHW[] 4
PUSH[] 1
JROT[]
DUP[]
DUP[]
DUP[]
DUP[]
"""
).strip()
)
""").strip()

def test_jump_repeated_args(self):

vtt_assembly = dedent(
"""
vtt_assembly = dedent("""
#PUSH, 0, Var1, Var1, -1
POP[]
SWAP[]
Expand All @@ -153,15 +131,11 @@ def test_jump_repeated_args(self):
DUP[]
#Label1:
DUP[]
"""
)
""")

ft_assembly = transform_assembly(vtt_assembly)

assert (
ft_assembly
== dedent(
"""
assert ft_assembly == dedent("""
PUSH[] 0
PUSHW[] 3 3
PUSH[] -1
Expand All @@ -171,33 +145,24 @@ def test_jump_repeated_args(self):
DUP[]
DUP[]
DUP[]
"""
).strip()
)
""").strip()

def test_delta_args_sorting(self):

vtt_assembly = dedent(
"""
vtt_assembly = dedent("""
DLTC1[(4 @4 8) (4 @8 8) (4 @11 8) (4 @15 8) (5 @4 8) (5 @8 8) (5 @11 8) (5 @15 8) (12 @1 8) (12 @4 8) (12 @5 8) (12 @8 8) (12 @9 8) (12 @13 8) (12 @15 8) (12 @0 8) (13 @1 8) (13 @4 8) (13 @5 8) (13 @8 8) (13 @9 8) (13 @13 8) (13 @15 8) (13 @0 8) (14 @11 8) (14 @13 8) (14 @15 8) (15 @11 8) (15 @13 8) (15 @15 8)]
DLTC2[(4 @3 8) (4 @6 8) (4 @7 8) (4 @10 8) (4 @14 8) (5 @3 8) (5 @6 8) (5 @7 8) (5 @10 8) (5 @14 8) (12 @1 8) (12 @3 8) (12 @4 8) (12 @5 8) (12 @9 8) (12 @13 8) (13 @1 8) (13 @3 8) (13 @4 8) (13 @5 8) (13 @9 8) (13 @13 8) (14 @1 8) (14 @3 8) (14 @5 8) (14 @7 8) (14 @9 8) (14 @11 8) (14 @13 8) (15 @1 8) (15 @3 8) (15 @5 8) (15 @7 8) (15 @9 8) (15 @11 8) (15 @13 8)]
DLTC3[(4 @1 8) (4 @2 8) (4 @5 8) (5 @1 8) (5 @2 8) (5 @5 8) (12 @1 8) (12 @4 8) (13 @1 8) (13 @4 8) (14 @0 8) (14 @2 8) (14 @4 8) (15 @0 8) (15 @2 8) (15 @4 8)]
"""
)
""")

ft_assembly = transform_assembly(vtt_assembly)

assert (
ft_assembly
== dedent(
"""
assert ft_assembly == dedent("""
PUSH[] 15 14 15 15 31 4 31 5 31 12 31 13 47 4 47 5 47 14 47 15 79 12 79 13 79 14 79 15 95 4 95 5 16 31 12 31 13 31 14 31 15 63 4 63 5 63 12 63 13 63 14 63 15 79 12 79 13 95 12 95 13 95 14 95 15 111 4 111 5 127 4 127 5 127 14 127 15 159 12 159 13 159 14 159 15 175 4 175 5 191 14 191 15 223 12 223 13 223 14 223 15 239 4 239 5 36 15 12 15 13 31 12 31 13 79 4 79 5 79 12 79 13 95 12 95 13 143 4 143 5 143 12 143 13 159 12 159 13 191 4 191 5 191 14 191 15 223 12 223 13 223 14 223 15 255 4 255 5 255 12 255 13 255 14 255 15 30
DELTAC1[]
DELTAC2[]
DELTAC3[]
"""
).strip()
)
""").strip()

def test_end_to_end(self, input_and_expected):
vtt_assembly, expected = input_and_expected
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tox]
envlist = lint, py3{9,10,11,12,13}-cov, htmlcov
envlist = lint, py3{10,11,12,13,14}-cov, htmlcov
skip_missing_interpreters = true
isolated_build = true

Expand Down