def __init__(self, parts, variable=None): if not isinstance(parts, types.parts): parts = types.parts((parts,)) self.parts = parts self.variable = variable
def content(self): content = self._content if content is not None: if isinstance(content, types.escape): return types.escape((types.value(self.content_symbol), )) return types.parts((types.value(self.content_symbol), ))
def content(self): content = self._content if content is not None: if isinstance(content, types.escape): return types.escape((types.value(self.content_symbol),)) return types.parts((types.value(self.content_symbol),))
def tales(self, string, escape=None): """We need to implement the ``validate`` and ``translate``-methods. Let's define that an expression is valid if it contains an odd number of characters. >>> class MockExpressionTranslator(ExpressionTranslator): ... def translate(self, string, escape=None): ... if string: return types.value(string) >>> tales = MockExpressionTranslator().tales >>> tales('a') value('a') >>> tales('a|b') parts(value('a'), value('b')) """ string = string.replace('\n', '').strip() if not string: return types.parts() parts = [] # default translator is ``self`` translator = self i = j = 0 while i < len(string): match = self.re_pragma.match(string[i:]) if match is not None: pragma = match.group('pragma') new_translator = self.pragma(pragma) if new_translator is not None: translator = new_translator i += match.end() if translator.recursive: value = translator.tales(string[i:]) if parts: if isinstance(value, types.parts): parts.extend(value) else: parts.append(value) return types.parts(parts) return value continue j = string.find('|', j + 1) if j == -1: j = len(string) expr = string[i:j] try: value = translator.translate(expr, escape) except SyntaxError: if j < len(string): continue raise value.label = expr parts.append(value) translator = self i = j + 1 value = translator.translate("", escape) if value is not None: value.label = "" parts.append(value) if len(parts) == 1: return parts[0] return types.parts(parts)
def __init__(self, parts, variable=None): if not isinstance(parts, types.parts): parts = types.parts((parts, )) self.parts = parts self.variable = variable