Пример #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 = DynamicText()
    for i in rv:
        node.add_child(i)

    return node
Пример #2
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 = DynamicText()
    for i in rv:
        node.add_child(i)

    return node
Пример #3
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)

        else:  # group 4, a sole $
            stringrun.append("$")

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

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

    node = DynamicText()
    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
Пример #4
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 = []
    string_run = []
    max_index = len(text)
    pos = 0

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

        if m.group(1) is not None:  # any
            string_run.append(m.group(1))

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

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

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

        else:  # group 4, a sole $
            string_run.append('$')

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

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

    node = DynamicText()
    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