Ejemplo n.º 1
0
def create_text_nodes(text, is_cdata=False, translatable=False):
    if not translatable:
        rv = Text(text)
        rv.is_cdata = is_cdata
        return rv

    prefix, this, suffix = partition_translatable_text(text)

    rv = []
    if prefix:
        rv.append(Text(prefix, is_cdata=is_cdata))

    if this:
        rv.append(TranslatableText(this, is_cdata=is_cdata))

    if suffix:
        rv.append(Text(suffix, is_cdata=is_cdata))

    if len(rv) == 1:
        return rv[0]

    node = ComplexExpression()
    for i in rv:
        node.add_child(i)

    return node
Ejemplo n.º 2
0
def handle_text_node(text, expr_parser=python.parse_expression, is_cdata=False, translatable=False, whole_translatable=False):
    try:
        text = _strip_dollars_fast(text)
        return create_text_nodes(text, is_cdata=is_cdata, translatable=translatable)

    except HasExprException:
        pass

    nodes = []
    stringrun = []
    max_index = len(text)
    pos = 0

    while pos < len(text):
        m = _expr_find_code.match(text, pos)
        pos = m.end()

        if m.group(1) != None: # any
            stringrun.append(m.group(1))

        elif m.group(2): # $$
            stringrun.append('$')

        elif m.group(3):
            if stringrun:
                nodes.append(create_text_nodes(''.join(stringrun), translatable=translatable))

            stringrun = []
            expr = expr_parser(text, m.start(3))
            pos = m.start(3) + len(expr.string)
            nodes.append(expr)

        elif m.group(4):
            stringrun.append('$')

    if stringrun:
        nodes.append(create_text_nodes(''.join(stringrun), translatable=translatable))

    if len(nodes) == 1:
        return nodes[0]

    node = ComplexExpression()
    for i in nodes:
        node.add_child(i)

    node.is_cdata = is_cdata
    for i in nodes:
        i.is_cdata = is_cdata
        i.translatable = translatable

    if whole_translatable:
        node.translatable = True

    return node