Source code for svgen.color.numbers
"""
svgen - A module for working with number primitives.
"""
[docs]
def css_number_to_ratio(val: float | int | str) -> float:
"""
Given a few possible types of input, return a ratio between 0.0 and 1.0.
"""
float_val = 0.0
# Expect: a ratio between 0.0 and 1.0.
if isinstance(val, float):
float_val = val
# Expect: a string ending with '%' and starting with a number between 0
# and 100.
elif isinstance(val, str):
val = val.strip()
# Assume the value is a percentage.
if val.endswith("%"):
val = val.replace("%", "")
float_val = float(int(val)) / 100.0
# Assume the value is a float.
elif "." in val:
float_val = float(val)
# Assume the value is a hex String.
elif len(val) <= 2:
float_val = float(int(val, 16)) / 255.0
# Expect: an integer between 0 and 255.
elif isinstance(val, int):
float_val = float(val) / 255.0
# Normalize the result to a ratio between 0.0 and 1.0.
return min(max(float_val, 0.0), 1.0)
[docs]
def parse_ctor(
value: str, prefix: str, suffix: str = None, sep: str = ","
) -> list[str]:
"""Parse individual arguments out of some color constructor."""
value = value.strip()
if value.startswith(prefix):
value = value[len(prefix) :]
if suffix is not None and value.startswith(suffix):
value = value[len(suffix) :]
# Remove braces.
if value.startswith("("):
value = value[1:]
if value.endswith(")"):
value = value[:-1]
return [x.strip() for x in value.split(sep)]