|
|
@ -107,6 +107,12 @@ def all_children(node): |
|
|
|
yield br |
|
|
|
|
|
|
|
# Generátor následníků v "the-right-order" |
|
|
|
# Bez tohoto vrcholu |
|
|
|
def all_following(node): |
|
|
|
current = general_next(node) |
|
|
|
while current is not None: |
|
|
|
yield current |
|
|
|
current = general_next(current) |
|
|
|
|
|
|
|
## Filtrační hledání |
|
|
|
# Najdi dalšího bratra nějakého typu, nebo None. |
|
|
@ -115,15 +121,32 @@ def get_next_brother_of_type(node, type): |
|
|
|
for current in right_brothers(node): |
|
|
|
if isinstance(current, type): |
|
|
|
return current |
|
|
|
return None |
|
|
|
|
|
|
|
def get_prev_brother_of_type(node, type): |
|
|
|
pass |
|
|
|
# Na tohle není rozumný generátor, ani ho asi nechceme, prostě to implementujeme cyklem. |
|
|
|
current = node |
|
|
|
while safe_pred(current) is not None: |
|
|
|
current = safe_pred(current) |
|
|
|
if isinstance(current, type): |
|
|
|
return current |
|
|
|
return None |
|
|
|
|
|
|
|
# Totéž pro "the-right-order" pořadí |
|
|
|
def get_next_node_of_type(current, type): |
|
|
|
pass |
|
|
|
def get_next_node_of_type(current, type): |
|
|
|
pass |
|
|
|
def get_next_node_of_type(node, type): |
|
|
|
for cur in all_folowing(node): |
|
|
|
if isinstance(cur, type): |
|
|
|
return cur |
|
|
|
return None |
|
|
|
|
|
|
|
def get_prev_node_of_type(node, type): |
|
|
|
# Na tohle není rozumný generátor, ani ho asi nechceme, prostě to implementujeme cyklem. |
|
|
|
current = node |
|
|
|
while general_prev(current) is not None: |
|
|
|
current = general_prev(current) |
|
|
|
if isinstance(current, type): |
|
|
|
return current |
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|