from bazbase.dependencies import Dependencies
# TODO(xavid): This is super-dumb. See fixing inheritance to not use this.
PARENT_DOT_THIS = '<>'
def is_parent_dot_this(s):
return PARENT_DOT_THIS == s
def nice_value(propval):
deps = Dependencies()
#with benchmarking("rendering nice value for %s" % propval):
if True:
e = propval.element
anc = e.get_ancestors()
pv = propval
propname = propval.propname
deps.addDep(pv)
deps.addParentDep(e)
while (anc and is_parent_dot_this(pv.value)):
e = anc.pop()
pv = e.get_propval(propname)
if pv is None:
deps.addNoPropvalDep(e.ename, propname)
return "%s has no default for %s" % (e.ename, propname), deps
deps.addDep(pv)
deps.addParentDep(e)
ret = unicode(pv.value, 'utf-8').strip()
ds = '<>'
de = '<>'
if ret.startswith(ds) and ret.endswith(de):
ret = ret[len(ds):-len(de)]
return ret, deps
def as_tree(elms):
"""Formats elms as a tree.
elms should be a list of elements ordered preorder, such that each element
is followed by a single region of its descendants, but with missing
elements allowed.
The return value is a list of roots. A node is either a leaf
or a subtree.
A leaf is [element]. A subtree is [element, [<>], [<>]]."""
ret = []
stack = [ret]
while len(elms) > 0:
e = elms.pop(0)
while len(stack) > 1 and not stack[-1][0].is_ancestor_of(e):
stack.pop()
bubble = [e]
stack[-1].append(bubble)
stack.append(bubble)
return ret