@@ -677,15 +677,18 @@ def _fmt_prop(self, k, v):
677677 else :
678678 return str (v )
679679
680- def __str__ (self , t = "" , sort_keys = False ):
680+ def __str__ (self , t = "" , sort_keys = False , sort_nodes = False ):
681681 props = self ._properties .items ()
682682 if sort_keys :
683683 props = sorted (props )
684+ children = self ._children
685+ if sort_nodes :
686+ children = sorted (children , key = lambda n : n .name )
684687 return "\n " .join ([
685688 t + f"{ self .name } {{" ,
686689 * (t + f" { repr (k )[1 :- 1 ]} = { self ._fmt_prop (k , v ).replace ('\n ' , '\n ' + t + ' ' )} " for k , v in props if k != "name" ),
687690 * (["" ] if self ._children else []),
688- * (i .__str__ (t + " " , sort_keys ) for i in self . _children ),
691+ * (i .__str__ (t + " " , sort_keys , sort_nodes ) for i in children ),
689692 t + "}"
690693 ])
691694
@@ -813,6 +816,7 @@ def load_adt(data):
813816 parser .add_argument ('input' , type = pathlib .Path )
814817 parser .add_argument ('output' , nargs = '?' , type = pathlib .Path )
815818 parser .add_argument ('--sort-keys' , help = 'sort property keys within a node (useful for diffs)' , action = 'store_true' )
819+ parser .add_argument ('--sort-nodes' , help = 'sort node children by name (useful for diffs)' , action = 'store_true' )
816820 parser .add_argument ('-r' , '--retrieve' , help = 'retrieve and store the adt from m1n1' , action = 'store_true' )
817821 parser .add_argument ('-a' , '--dump-addr' , help = 'dump address lookup table' , action = 'store_true' )
818822 args = parser .parse_args ()
@@ -829,7 +833,7 @@ def load_adt(data):
829833 adt_data = args .input .read_bytes ()
830834
831835 adt = load_adt (adt_data )
832- print (adt .__str__ (sort_keys = args .sort_keys ))
836+ print (adt .__str__ (sort_keys = args .sort_keys , sort_nodes = args . sort_nodes ))
833837 new_data = adt .build ()
834838 if args .output is not None :
835839 args .output .write_bytes (new_data )
0 commit comments