@@ -56,7 +56,7 @@ def __repr__(self):
5656
5757 def add_condition (self , condition ):
5858 if self .condition :
59- self .condition = '%s and (%s)' % (self .condition , condition )
59+ self .condition = '(%s) and (%s)' % (self .condition , condition )
6060 else :
6161 self .condition = condition
6262 return self
@@ -457,19 +457,19 @@ def xpath_nth_child_function(self, xpath, function, last=False,
457457 if a == 0 :
458458 return xpath .add_condition ('%s = %s' % (siblings_count , b_min_1 ))
459459
460- expr = []
460+ expressions = []
461461
462462 if a > 0 :
463463 # siblings count, an+b-1, is always >= 0,
464464 # so if a>0, and (b-1)<=0, an "n" exists to satisfy this,
465465 # therefore, the predicate is only interesting if (b-1)>0
466466 if b_min_1 > 0 :
467- expr .append ('%s >= %s' % (siblings_count , b_min_1 ))
467+ expressions .append ('%s >= %s' % (siblings_count , b_min_1 ))
468468 else :
469469 # if a<0, and (b-1)<0, no "n" satisfies this,
470470 # this is tested above as an early exist condition
471471 # otherwise,
472- expr .append ('%s <= %s' % (siblings_count , b_min_1 ))
472+ expressions .append ('%s <= %s' % (siblings_count , b_min_1 ))
473473
474474 # operations modulo 1 or -1 are simpler, one only needs to verify:
475475 #
@@ -495,9 +495,14 @@ def xpath_nth_child_function(self, xpath, function, last=False,
495495 b_neg = '+%s' % b_neg
496496 left = '(%s %s)' % (left , b_neg )
497497
498- expr .append ('%s mod %s = 0' % (left , a ))
498+ expressions .append ('%s mod %s = 0' % (left , a ))
499499
500- xpath .add_condition (' and ' .join (expr ))
500+ if len (expressions ) > 1 :
501+ template = '(%s)'
502+ else :
503+ template = '%s'
504+ xpath .add_condition (' and ' .join (template % expression
505+ for expression in expressions ))
501506 return xpath
502507
503508 def xpath_nth_last_child_function (self , xpath , function ):
0 commit comments