# File proofreader.rb, line 113 def order?(element, die=nil) die = @proofsheet.die(element.inherited_namespace, element.absolute_xpath) if not die validity = true # default unordered, so valid if die if die.order and element.has_elements? order_how = die.order[0] order_has = die.order[1] # load childern element tag names into an array children = [] element.elements.each do |child_element| children << child_element.name end # how do you want it? case order_how when 'tag' # remove adjacent duplicates packed_children = [] children.each do |c| packed_children << c if packed_children.last != c end # remove non-intersecting children items same_children = packed_children diff = children - order_has diff.each do |d| same_children.delete(d) end # remove non-intersecting ordered items same_has = order_has.dup diff = order_has - same_children diff.each do |d| same_has.delete(d) end # correct? if same_children != same_has validity = false error = "ORDER tag" @errors << [die.namespace, die.xpath, error] end when 'content-a..z' sorted_children = children.sort if not sorted_children == ordered_children validity = false error = "ORDER content-a..z" @errors << [die.namespace, die.xpath, error] end when 'content-z..a' sorted_children = children.sort.reverse if not sorted_children == ordered_children validity = false error = "ORDER content-z..a" @errors << [die.namespace, die.xpath, error] end end end end return validity end