Skip to content

Commit

Permalink
Implement attribute sorting with 'name' first
Browse files Browse the repository at this point in the history
example input 1:
<write-data name="Force" mesh="Fluid-Mesh"/>
And example input 2:
<write-data mesh="Fluid-Mesh" name="Force"/>
should both return:
<write-data name="Force" mesh="Fluid-Mesh"/>
  • Loading branch information
Toddelismyname committed Feb 15, 2025
1 parent 27006bf commit 77e1e6f
Showing 1 changed file with 44 additions and 2 deletions.
46 changes: 44 additions & 2 deletions format.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,55 @@ def __init__(self,
def print(self, text=''):
self.stream.write(text + '\n')

def sort_attributes(self, element):
"""
Sort attributes with 'name' always first, then alphabetically.
Args:
element (etree._Element): XML element whose attributes to sort
Returns:
list of tuples: Sorted list of (key, value) attribute pairs
"""
# Separate 'name' attribute if it exists
name_attr = [('name', element.get('name'))] if element.get('name') is not None else []

# Get remaining attributes, sorted alphabetically
other_attrs = sorted(
[(k, v) for k, v in element.items() if k != 'name'],
key=lambda x: x[0]
)

# Combine name attribute (if exists) with sorted other attributes
return name_attr + other_attrs

def fmtAttrH(self, element):
return " ".join(['{}="{}"'.format(k, v) for k, v in element.items()])
"""
Format attributes horizontally with sorted order.
Args:
element (etree._Element): XML element to format
Returns:
str: Formatted attribute string
"""
return " ".join(['{}="{}"'.format(k, v) for k, v in self.sort_attributes(element)])

def fmtAttrV(self, element, level):
"""
Format attributes vertically with sorted order.
Args:
element (etree._Element): XML element to format
level (int): Indentation level
Returns:
str: Formatted attribute string
"""
prefix = self.indent * (level + 1)
return "\n".join(
['{}{}="{}"'.format(prefix, k, v) for k, v in element.items()])
['{}{}="{}"'.format(prefix, k, v) for k, v in self.sort_attributes(element)]
)

def printXMLDeclaration(self, root):
self.print('<?xml version="{}" encoding="{}" ?>'.format(
Expand Down

0 comments on commit 77e1e6f

Please sign in to comment.