1.1 --- a/XSLForms/Output.py Sun May 08 21:05:24 2005 +0000
1.2 +++ b/XSLForms/Output.py Sun May 08 22:06:45 2005 +0000
1.3 @@ -107,20 +107,30 @@
1.4 def new_field(context, name):
1.5 return path_to_context(context, 0) + "/" + name
1.6
1.7 -def other_field_name(context, nodes):
1.8 - node = libxml2.xmlNode(nodes[0])
1.9 - return path_to_node(node, 0, None, 0)
1.10 +def other_field_names(context, nodes):
1.11 + names = []
1.12 + for node in nodes:
1.13 + n = libxml2.xmlNode(node)
1.14 + name = path_to_node(n, 0, None, 0)
1.15 + if name not in names:
1.16 + names.append(name)
1.17 + return ",".join(names)
1.18
1.19 -def other_multi_field_name(context, multivalue_name, nodes):
1.20 - node = libxml2.xmlNode(nodes[0])
1.21 - return path_to_node(node, 1, multivalue_name, 1)
1.22 +def other_multi_field_names(context, multivalue_name, nodes):
1.23 + names = []
1.24 + for node in nodes:
1.25 + n = libxml2.xmlNode(node)
1.26 + name = path_to_node(n, 1, multivalue_name, 1)
1.27 + if name not in names:
1.28 + names.append(name)
1.29 + return ",".join(names)
1.30
1.31 libxslt.registerExtModuleFunction("this-position", "http://www.boddie.org.uk/ns/xmltools/template", this_position)
1.32 libxslt.registerExtModuleFunction("field-name", "http://www.boddie.org.uk/ns/xmltools/template", field_name)
1.33 libxslt.registerExtModuleFunction("multi-field-name", "http://www.boddie.org.uk/ns/xmltools/template", multi_field_name)
1.34 libxslt.registerExtModuleFunction("new-field", "http://www.boddie.org.uk/ns/xmltools/template", new_field)
1.35 -libxslt.registerExtModuleFunction("other-field-name", "http://www.boddie.org.uk/ns/xmltools/template", other_field_name)
1.36 -libxslt.registerExtModuleFunction("other-multi-field-name", "http://www.boddie.org.uk/ns/xmltools/template", other_multi_field_name)
1.37 +libxslt.registerExtModuleFunction("other-field-names", "http://www.boddie.org.uk/ns/xmltools/template", other_field_names)
1.38 +libxslt.registerExtModuleFunction("other-multi-field-names", "http://www.boddie.org.uk/ns/xmltools/template", other_multi_field_names)
1.39
1.40 def get_field_name(field_or_multi_name):
1.41 return field_or_multi_name.split(Constants.multi_separator)[0]
1.42 @@ -130,7 +140,7 @@
1.43 """
1.44 Convert the given 'field_or_multi_name' back to an XPath reference.
1.45 For example:
1.46 - /configuration#1/base-system##value -> /configuration[1]/base-system
1.47 + /configuration#1/details#1/base-system##value -> /*[position() = 1]/*[position() = 1]/base-system
1.48 """
1.49
1.50 field_name = get_field_name(field_or_multi_name)
1.51 @@ -139,7 +149,7 @@
1.52 for part in parts:
1.53 path_parts = part.split(Constants.pair_separator)
1.54 if len(path_parts) == 2:
1.55 - new_parts.append(path_parts[0] + "[" + path_parts[1] + "]")
1.56 + new_parts.append("*[position() = " + path_parts[1] + "]")
1.57 else:
1.58 new_parts.append(path_parts[0])
1.59 return "/".join(new_parts)