mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Fix issue with css variables with multiple values
This commit is contained in:
@@ -11,7 +11,7 @@ $animation: offset $animation-speed in_out_cubic;
|
|||||||
|
|
||||||
App > View {
|
App > View {
|
||||||
docks: side=left/1;
|
docks: side=left/1;
|
||||||
text: on $foo;
|
text: $animation;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget:hover {
|
Widget:hover {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from itertools import dropwhile
|
|
||||||
from typing import Iterator, Iterable
|
from typing import Iterator, Iterable
|
||||||
|
|
||||||
from rich import print
|
from rich import print
|
||||||
@@ -259,8 +258,9 @@ def substitute_references(tokens: Iterator[Token]) -> Iterable[Token]:
|
|||||||
ref_name = token.value[1:]
|
ref_name = token.value[1:]
|
||||||
if ref_name in variables:
|
if ref_name in variables:
|
||||||
variable_tokens = variables[variable_name]
|
variable_tokens = variables[variable_name]
|
||||||
variable_tokens.extend(variables[ref_name])
|
reference_tokens = variables[ref_name]
|
||||||
yield from variable_tokens
|
variable_tokens.extend(reference_tokens)
|
||||||
|
yield from reference_tokens
|
||||||
else:
|
else:
|
||||||
raise _unresolved(
|
raise _unresolved(
|
||||||
variable_name=ref_name, location=token.location
|
variable_name=ref_name, location=token.location
|
||||||
|
|||||||
@@ -74,6 +74,42 @@ class TestVariableReferenceSubstitution:
|
|||||||
Token(name='declaration_set_end', value='}', path='', code=css, location=(2, 20))
|
Token(name='declaration_set_end', value='}', path='', code=css, location=(2, 20))
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def test_multi_value_variable(self):
|
||||||
|
css = "$x: 2 4\n$y: 6 $x 2\n.thing { border: $y }"
|
||||||
|
assert list(substitute_references(tokenize(css, ""))) == [
|
||||||
|
Token(name='variable_name', value='$x:', path='', code=css, location=(0, 0)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(0, 3)),
|
||||||
|
Token(name='number', value='2', path='', code=css, location=(0, 4)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(0, 5)),
|
||||||
|
Token(name='number', value='4', path='', code=css, location=(0, 6)),
|
||||||
|
Token(name='variable_value_end', value='\n', path='', code=css, location=(0, 7)),
|
||||||
|
Token(name='variable_name', value='$y:', path='', code=css, location=(1, 0)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(1, 3)),
|
||||||
|
Token(name='number', value='6', path='', code=css, location=(1, 4)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(1, 5)),
|
||||||
|
Token(name='number', value='2', path='', code=css, location=(0, 4)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(0, 5)),
|
||||||
|
Token(name='number', value='4', path='', code=css, location=(0, 6)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(1, 8)),
|
||||||
|
Token(name='number', value='2', path='', code=css, location=(1, 9)),
|
||||||
|
Token(name='variable_value_end', value='\n', path='', code=css, location=(1, 10)),
|
||||||
|
Token(name='selector_start_class', value='.thing', path='', code=css, location=(2, 0)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(2, 6)),
|
||||||
|
Token(name='declaration_set_start', value='{', path='', code=css, location=(2, 7)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(2, 8)),
|
||||||
|
Token(name='declaration_name', value='border:', path='', code=css, location=(2, 9)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(2, 16)),
|
||||||
|
Token(name='number', value='6', path='', code=css, location=(1, 4)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(1, 5)),
|
||||||
|
Token(name='number', value='2', path='', code=css, location=(0, 4)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(0, 5)),
|
||||||
|
Token(name='number', value='4', path='', code=css, location=(0, 6)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(1, 8)),
|
||||||
|
Token(name='number', value='2', path='', code=css, location=(1, 9)),
|
||||||
|
Token(name='whitespace', value=' ', path='', code=css, location=(2, 19)),
|
||||||
|
Token(name='declaration_set_end', value='}', path='', code=css, location=(2, 20))
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class TestParseLayout:
|
class TestParseLayout:
|
||||||
def test_valid_layout_name(self):
|
def test_valid_layout_name(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user