45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
import random
|
|
from dataclasses import dataclass
|
|
|
|
from Generator.Enums.RandomType import RandomType
|
|
from Generator.Models.Literal import Literal
|
|
from Generator.Models.RenderResult import RenderResult
|
|
from Generator.UniversalRandomizer import UniversalRandomizer
|
|
|
|
|
|
@dataclass
|
|
class VariableLiteral(Literal):
|
|
name: str
|
|
type: RandomType
|
|
prefix: str = ""
|
|
postfix: str = ""
|
|
last_value: str | None = None
|
|
|
|
def render(self, chanse: float = 1) -> RenderResult:
|
|
if self.last_value is None or random.random() <= chanse:
|
|
# Генерируем значение
|
|
val = str(UniversalRandomizer().get_random(self.type))
|
|
self.last_value = val
|
|
else:
|
|
val = self.last_value
|
|
|
|
# Формируем строку: префикс + значение + постфикс
|
|
full_text = f"{self.prefix}{val}{self.postfix}"
|
|
|
|
# Вычисляем координаты ЧИСТОГО значения (без префикса)
|
|
start = len(self.prefix)
|
|
end = start + len(val)
|
|
|
|
return RenderResult(full_text, [(start, end, self.type.name)])
|
|
|
|
def structure(self) -> RenderResult:
|
|
val = f"<{self.type.name}>"
|
|
|
|
# Формируем строку: префикс + значение + постфикс
|
|
full_text = f"{self.prefix}{val}{self.postfix}"
|
|
|
|
# Вычисляем координаты ЧИСТОГО значения (без префикса)
|
|
start = len(self.prefix)
|
|
end = start + len(val)
|
|
|
|
return RenderResult(full_text, [(start, end, self.type.name)]) |