本文整理汇总了Python中translate.storage.placeables.StringElem.get_parent_elem方法的典型用法代码示例。如果您正苦于以下问题:Python StringElem.get_parent_elem方法的具体用法?Python StringElem.get_parent_elem怎么用?Python StringElem.get_parent_elem使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类translate.storage.placeables.StringElem
的用法示例。
在下文中一共展示了StringElem.get_parent_elem方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: parse
# 需要导入模块: from translate.storage.placeables import StringElem [as 别名]
# 或者: from translate.storage.placeables.StringElem import get_parent_elem [as 别名]
def parse(tree, parse_funcs):
"""Parse placeables from the given string or sub-tree by using the
parsing functions provided.
The output of this function is **heavily** dependent on the order of the
parsing functions. This is because of the algorithm used.
An over-simplification of the algorithm: the leaves in the ``StringElem``
tree are expanded to the output of the first parsing function in
``parse_funcs``. The next level of recursion is then started on the new
set of leaves with the used parsing function removed from
``parse_funcs``.
:type tree: unicode|StringElem
:param tree: The string or string element sub-tree to parse.
:type parse_funcs: A list of parsing functions. It must take exactly
one argument (a ``unicode`` string to parse) and
return a list of ``StringElem``s which, together,
form the original string. If nothing could be
parsed, it should return ``None``.
"""
if isinstance(tree, unicode):
tree = StringElem(tree)
if not parse_funcs:
return tree
parse_func = parse_funcs[0]
for leaf in tree.flatten():
# FIXME: we might rather want to test for editability, but for now this
# works better
if not leaf.istranslatable:
continue
unileaf = unicode(leaf)
if not unileaf:
continue
subleaves = parse_func(unileaf)
if subleaves is not None:
if len(subleaves) == 1 and isinstance(subleaves[0], type(leaf)) and leaf == subleaves[0]:
pass
elif isinstance(leaf, unicode):
parent = tree.get_parent_elem(leaf)
if parent is not None:
if len(parent.sub) == 1:
parent.sub = subleaves
leaf = parent
else:
leafindex = parent.sub.index(leaf)
parent.sub[leafindex] = StringElem(subleaves)
leaf = parent.sub[leafindex]
else:
leaf.sub = subleaves
parse(leaf, parse_funcs[1:])
if isinstance(leaf, StringElem):
leaf.prune()
return tree
示例2: TextBox
# 需要导入模块: from translate.storage.placeables import StringElem [as 别名]
# 或者: from translate.storage.placeables.StringElem import get_parent_elem [as 别名]
#.........这里部分代码省略.........
#
# @ It is unnecessary to handle these cases, as long as control drops
# through to a place where it is handled below.
# * Or "Placeable" depending on the value of the XXX flag in the
# placeable's GUI info object
# First we check if we fall in any of the situations represented by
# the table above.
has_start_widget = has_end_widget = False
if hasattr(start_elem, 'gui_info'):
has_start_widget = start_elem.gui_info.has_start_widget()
has_end_widget = start_elem.gui_info.has_end_widget()
if cursor_pos == start_elem_offset:
position = 'a'
elif has_start_widget and cursor_pos == start_elem_offset+1:
position = 'b'
elif has_end_widget and cursor_pos == start_elem_offset + start_elem_len - 1:
position = 'c'
elif cursor_pos == start_elem_offset + start_elem_len:
position = 'd'
# If the current state is in the table, handle it
if position:
#logging.debug('(a)<<(b)content(c)>>(d) pos=%s' % (position))
if (position == 'a' and not key_is_delete) or (position == 'd' and key_is_delete):
# "N/A" fields in table
pass
elif (position == 'a' and key_is_delete) or (position == 'd' and not key_is_delete):
# "Placeable" fields
if (position == 'a' and (has_start_widget or not start_elem.iseditable)) or \
(position == 'd' and (has_end_widget or not start_elem.iseditable)):
deleted = start_elem.copy()
parent = self.elem.get_parent_elem(start_elem)
index = parent.elem_offset(start_elem)
self.elem.delete_elem(start_elem)
self.refresh_cursor_pos = start_elem_offset
start_offset = start_elem_offset
end_offset = start_elem_offset + start_elem_len
done = True
elif not start_elem.iseditable and position in ('b', 'c'):
# "*Nothing" fields
if start_elem.isfragile:
deleted = start_elem.copy()
parent = self.elem.get_parent_elem(start_elem)
index = parent.elem_offset(start_elem)
self.elem.delete_elem(start_elem)
self.refresh_cursor_pos = start_elem_offset
start_offset = start_elem_offset
end_offset = start_elem_offset + start_elem_len
done = True
# At this point we have checked for all cases except where
# position in ('b', 'c') for editable elements.
elif (position == 'c' and not key_is_delete) or (position == 'b' and key_is_delete):
# '@Delete "t"' and '@Delete "c"' fields; handled normally below
pass
elif (position == 'b' and not key_is_delete) or (position == 'c' and key_is_delete):
done = True
else:
raise Exception('Unreachable code reached. Please close the black hole nearby.')
#logging.debug('%s[%d] >===> %s[%d]' % (repr(start_elem), start_offset, repr(end_elem), end_offset))
if not done: