def evaluate(self, context): if self._op == '=': true = boolean.true false = boolean.false else: true = boolean.false false = boolean.true lrt = self._left.evaluate(context) rrt = self._right.evaluate(context) lType = type(lrt) rType = type(rrt) if lType == types.ListType == rType: #Node set to node set for right_curr in rrt: right_curr = Conversions.StringValue(right_curr) for left_curr in lrt: if right_curr == Conversions.StringValue(left_curr): return true return false elif lType == types.ListType or rType == types.ListType: func = None if lType == types.ListType: set = lrt val = rrt else: set = rrt val = lrt if type(val) in NumberTypes: func = Conversions.NumberValue elif boolean.IsBooleanType(val): func = Conversions.BooleanValue elif type(val) == types.StringType: func = Conversions.StringValue else: #Deal with e.g. RTFs val = Conversions.StringValue(val) func = Conversions.StringValue for n in set: if func(n) == val: return true return false if boolean.IsBooleanType(lrt) or boolean.IsBooleanType(rrt): rt = Conversions.BooleanValue(lrt) == Conversions.BooleanValue(rrt) elif lType in NumberTypes or rType in NumberTypes: rt = Conversions.NumberValue(lrt) == Conversions.NumberValue(rrt) else: rt = Conversions.StringValue(lrt) == Conversions.StringValue(rrt) if rt: # Due to the swapping of true/false, true might evaluate to 0 # We cannot compact this to 'rt and true or false' return true return false
def filter(self, nodeList, context, reverse): if self._length: state = context.copyNodePosSize() for pred in self._predicates: size = len(nodeList) ctr = 0 current = nodeList nodeList = [] for node in current: position = (reverse and size - ctr) or (ctr + 1) context.setNodePosSize((node, position, size)) res = pred.evaluate(context) if type(res) in NumberTypes: # This must be separate to prevent falling into # the boolean check. if res == position: nodeList.append(node) elif Conversions.BooleanValue(res): nodeList.append(node) ctr = ctr + 1 context.setNodePosSize(state) return nodeList
def Not(context, object): """Function: <boolean> not(<boolean>)""" return (not Conversions.BooleanValue(object) and boolean.true) or boolean.false
def _Boolean(context, object): """Function: <boolean> boolean(<object>)""" return Conversions.BooleanValue(object)
def if_function(context, cond, v1, v2): if Conversions.BooleanValue(cond): return v1 else: return v2