A simple language with {open and close} braces. You can parse brace groups and evaluate them however you want.
Examples:
- "Hello {name}!"
- "{attr} of {name}: {name.{attr}.value}"
- "This is an open brace: \{"
- "Missing close brace will be automatically inserted: {name"
An example for formating string as suggested in above examples is given in format_string.py:
from brace_lang import BraceLang
def get_by_path(data,path,default_value): ...
class FormatString(BraceLang):
def evaluate_text(self, text, data):
return text
def evaluate_group(self, items, data):
s = "".join(items)
return get_by_path(data, s, s)
def evaluate_root(self, items, data):
return "".join(map(str,items))
def format_string(self, string, data):
return self.evaluate(self.parse(string), None, None, None, data)
fs = FormatString()
data = {"name": "John", "attr": "age", "John": {"age": {"value": 20}}}
print(fs.format_string("Hello {name}! {{name}}", data))
print(fs.format_string("The {attr} of {name}: {{name}.{attr}.value}", data))
# Outputs:
# Hello John! {'age': {'value': 20}}
# The age of John: 20
Clone the repo, cd into it and pip install .
it.
To use { or }, use \{ or \}. To use \, use \\. Other backslashes are ignored, i.e. \4 will be interpreted as the character '4'. Open braces are automatically closed when reaching end-of-text.