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 {
|
||||
docks: side=left/1;
|
||||
text: on $foo;
|
||||
text: $animation;
|
||||
}
|
||||
|
||||
Widget:hover {
|
||||
|
||||
@@ -2,7 +2,6 @@ from __future__ import annotations
|
||||
|
||||
from collections import defaultdict
|
||||
from functools import lru_cache
|
||||
from itertools import dropwhile
|
||||
from typing import Iterator, Iterable
|
||||
|
||||
from rich import print
|
||||
@@ -259,8 +258,9 @@ def substitute_references(tokens: Iterator[Token]) -> Iterable[Token]:
|
||||
ref_name = token.value[1:]
|
||||
if ref_name in variables:
|
||||
variable_tokens = variables[variable_name]
|
||||
variable_tokens.extend(variables[ref_name])
|
||||
yield from variable_tokens
|
||||
reference_tokens = variables[ref_name]
|
||||
variable_tokens.extend(reference_tokens)
|
||||
yield from reference_tokens
|
||||
else:
|
||||
raise _unresolved(
|
||||
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))
|
||||
]
|
||||
|
||||
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:
|
||||
def test_valid_layout_name(self):
|
||||
|
||||
Reference in New Issue
Block a user