xml: Use multiple passes in convert and merge script.

Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7a6f5de..17e79c3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,7 @@
 xsl_golden_test(NAME "composable-interconnect-pack_patterns")
 xsl_golden_test(NAME "composable-loc-implicit-parent")
 xsl_golden_test(NAME "explicit-port")
+xsl_golden_test(NAME "pack_pattern-copy-direct-ports")
 xsl_golden_test(NAME "pack_pattern-merge-type-into-name")
 xsl_golden_test(NAME "pack_pattern-strip-from-pb_type-ports")
 xsl_golden_test(NAME "preserve-interconnect")
diff --git a/attribute-cleanup.xml b/attribute-cleanup.xml
index ed9a595..96a33a5 100644
--- a/attribute-cleanup.xml
+++ b/attribute-cleanup.xml
@@ -5,9 +5,9 @@
    * Strip xml:base attribute
   -->
 <xml>
- <tag b="1"  c="123"  x="abc" />
- <tag c="1"  d="123"  x="abc" />
+ <tag b="1"  c="123"  x=' abc' />
+ <tag c="1"  d=" 123 "  x="abc" />
  <tag>
-  <innertag   a2="2"   b1="abc"    a1="2">Hello</innertag>
+  <innertag   a2=" 2 "   b1="abc   "    a1="2">Hello</innertag>
  </tag>
 </xml>
diff --git a/composable-interconnect-fasm-mux-levels.golden.xml b/composable-interconnect-fasm-mux-levels.golden.xml
index c103723..58b70bc 100644
--- a/composable-interconnect-fasm-mux-levels.golden.xml
+++ b/composable-interconnect-fasm-mux-levels.golden.xml
@@ -21,7 +21,7 @@
       <output name="o"/>
     </pb_type>
     <interconnect>
-      <mux input="blocka.a blockb.b blockc[0].c blockc[1].c" output="blocko.i" name="outmux">
+      <mux input="blocka.a blockb.b blockc[0].c blockc[1].c" name="outmux" output="blocko.i">
         <metadata>
           <meta name="fasm_mux">
                 blocka.a : a1
diff --git a/composable-interconnect-fasm-mux.golden.xml b/composable-interconnect-fasm-mux.golden.xml
index 21c5cb3..3e72333 100644
--- a/composable-interconnect-fasm-mux.golden.xml
+++ b/composable-interconnect-fasm-mux.golden.xml
@@ -9,8 +9,8 @@
       <output name="o"/>
     </pb_type>
     <interconnect>
-      <direct name="parent-o" output="parent.o" input="child.o"/>
-      <mux input="parent.i0 parent.i1" output="child.i" name="mux1">
+      <direct input="child.o" name="parent-o" output="parent.o"/>
+      <mux input="parent.i0 parent.i1" name="mux1" output="child.i">
         <metadata>
           <meta name="fasm_mux">
                 parent.i0 : a1
diff --git a/composable-interconnect-implicit-parent.golden.xml b/composable-interconnect-implicit-parent.golden.xml
index 12abd36..745ae0e 100644
--- a/composable-interconnect-implicit-parent.golden.xml
+++ b/composable-interconnect-implicit-parent.golden.xml
@@ -21,16 +21,16 @@
     </pb_type>
     <interconnect>
       <direct input="parent.ia1" name="childa-i1" output="childa.i1">
-        <pack_pattern name="A1" in_port="parent.ia1" out_port="childa.i1"/>
+        <pack_pattern in_port="parent.ia1" name="A1" out_port="childa.i1"/>
       </direct>
-      <mux input="parent.ia2 parent.ia3" output="childa.i2" name="childa-input-i2">
-        <pack_pattern name="A2" in_port="parent.ia2" out_port="childa.i2"/>
-        <pack_pattern name="A3" in_port="parent.ia3" out_port="childa.i2"/>
+      <mux input="parent.ia2 parent.ia3" name="childa-input-i2" output="childa.i2">
+        <pack_pattern in_port="parent.ia2" name="A2" out_port="childa.i2"/>
+        <pack_pattern in_port="parent.ia3" name="A3" out_port="childa.i2"/>
       </mux>
       <direct input="childa.o" name="parent-o0" output="parent.o0"/>
       <direct input="childa.o" name="childb-i" output="childb.i"/>
-      <mux input="childa.o childb.o" output="childc.i" name="childc-input"/>
-      <mux input="childa.o childb.o childc.o" output="parent.o1" name="output"/>
+      <mux input="childa.o childb.o" name="childc-input" output="childc.i"/>
+      <mux input="childa.o childb.o childc.o" name="output" output="parent.o1"/>
     </interconnect>
   </pb_type>
 </xml>
diff --git a/composable-interconnect-pack_patterns.golden.xml b/composable-interconnect-pack_patterns.golden.xml
index ae06303..7285175 100644
--- a/composable-interconnect-pack_patterns.golden.xml
+++ b/composable-interconnect-pack_patterns.golden.xml
@@ -21,11 +21,11 @@
     </pb_type>
     <interconnect>
       <direct input="parent.ia1" name="childa-i1" output="childa.i1"/>
-      <mux input="parent.ia2 parent.ia3" output="childa.i2" name="childa-input-i2"/>
+      <mux input="parent.ia2 parent.ia3" name="childa-input-i2" output="childa.i2"/>
       <direct input="childa.o" name="parent-o0" output="parent.o0"/>
       <direct input="childa.o" name="childb-i" output="childb.i"/>
-      <mux input="childa.o childb.o" output="childc.i" name="childc-input"/>
-      <mux input="childa.o childb.o childc.o" output="parent.o1" name="output"/>
+      <mux input="childa.o childb.o" name="childc-input" output="childc.i"/>
+      <mux input="childa.o childb.o childc.o" name="output" output="parent.o1"/>
     </interconnect>
   </pb_type>
 </xml>
diff --git a/full-test-inner.xml b/full-test-inner.xml
index 5b44106..1c5ea86 100644
--- a/full-test-inner.xml
+++ b/full-test-inner.xml
@@ -10,4 +10,6 @@
   <delay_constant max="300e-12" in_port="a" out_port="sum"/>
   <delay_constant max="300e-12" in_port="b" out_port="sum"/>
   <delay_constant max="300e-12" in_port="cin" out_port="sum"/>
+  <T_setup clock="clk" port="a" value="10e-12"/>
+  <T_clock_to_Q clock="clk" max="10e-12" port="cout"/>
 </pb_type>
diff --git a/full-test.golden.xml b/full-test.golden.xml
index c94d281..5190d3b 100644
--- a/full-test.golden.xml
+++ b/full-test.golden.xml
@@ -19,6 +19,8 @@
     <delay_constant in_port="comba.a" max="300e-12" out_port="comba.sum"/>
     <delay_constant in_port="comba.b" max="300e-12" out_port="comba.sum"/>
     <delay_constant in_port="comba.cin" max="300e-12" out_port="comba.sum"/>
+    <T_setup clock="clk" port="comba.a" value="10e-12"/>
+    <T_clock_to_Q clock="clk" max="10e-12" port="comba.cout"/>
   </pb_type>
   <pb_type blif_model=".subckt adder" name="combb" num_pb="4">
     <input name="a" num_pins="1"/>
@@ -32,6 +34,8 @@
     <delay_constant in_port="combb.a" max="300e-12" out_port="combb.sum"/>
     <delay_constant in_port="combb.b" max="300e-12" out_port="combb.sum"/>
     <delay_constant in_port="combb.cin" max="300e-12" out_port="combb.sum"/>
+    <T_setup clock="clk" port="combb.a" value="10e-12"/>
+    <T_clock_to_Q clock="clk" max="10e-12" port="combb.cout"/>
   </pb_type>
   <interconnect>
     <direct input="MULTIPLE_INSTANCE.a[3]" name="comba[3]-a" output="comba[3].a"/>
@@ -53,25 +57,25 @@
     <direct input="MULTIPLE_INSTANCE.c[0]" name="combb[0]-a" output="combb[0].a"/>
     <direct input="MULTIPLE_INSTANCE.d[0]" name="combb[0]-b" output="combb[0].b"/>
     <direct input="comba[0].cout" name="combb[0]-cin" output="combb[0].cin">
-      <pack_pattern name="carry-ADDER" in_port="comba[0].cout" out_port="combb[0].cin"/>
+      <pack_pattern in_port="comba[0].cout" name="carry-ADDER" out_port="combb[0].cin"/>
     </direct>
     <direct input="combb[0].sum" name="MULTIPLE_INSTANCE-sum[4]" output="MULTIPLE_INSTANCE.sum[4]"/>
     <direct input="MULTIPLE_INSTANCE.c[1]" name="combb[1]-a" output="combb[1].a"/>
     <direct input="MULTIPLE_INSTANCE.d[1]" name="combb[1]-b" output="combb[1].b"/>
     <direct input="comba[1].cout" name="combb[1]-cin" output="combb[1].cin">
-      <pack_pattern name="carry-ADDER" in_port="comba[1].cout" out_port="combb[1].cin"/>
+      <pack_pattern in_port="comba[1].cout" name="carry-ADDER" out_port="combb[1].cin"/>
     </direct>
     <direct input="combb[1].sum" name="MULTIPLE_INSTANCE-sum[5]" output="MULTIPLE_INSTANCE.sum[5]"/>
     <direct input="MULTIPLE_INSTANCE.c[2]" name="combb[2]-a" output="combb[2].a"/>
     <direct input="MULTIPLE_INSTANCE.d[2]" name="combb[2]-b" output="combb[2].b"/>
     <direct input="comba[2].cout" name="combb[2]-cin" output="combb[2].cin">
-      <pack_pattern name="carry-ADDER" in_port="comba[2].cout" out_port="combb[2].cin"/>
+      <pack_pattern in_port="comba[2].cout" name="carry-ADDER" out_port="combb[2].cin"/>
     </direct>
     <direct input="combb[2].sum" name="MULTIPLE_INSTANCE-sum[6]" output="MULTIPLE_INSTANCE.sum[6]"/>
     <direct input="MULTIPLE_INSTANCE.c[3]" name="combb[3]-a" output="combb[3].a"/>
     <direct input="MULTIPLE_INSTANCE.d[3]" name="combb[3]-b" output="combb[3].b"/>
     <direct input="comba[3].cout" name="combb[3]-cin" output="combb[3].cin">
-      <pack_pattern name="carry-ADDER" in_port="comba[3].cout" out_port="combb[3].cin"/>
+      <pack_pattern in_port="comba[3].cout" name="carry-ADDER" out_port="combb[3].cin"/>
     </direct>
     <direct input="combb[3].cout" name="MULTIPLE_INSTANCE-cout" output="MULTIPLE_INSTANCE.cout"/>
     <direct input="combb[3].sum" name="MULTIPLE_INSTANCE-sum[7]" output="MULTIPLE_INSTANCE.sum[7]"/>
diff --git a/pack_pattern-copy-direct-ports.golden.xml b/pack_pattern-copy-direct-ports.golden.xml
new file mode 100644
index 0000000..39b63f7
--- /dev/null
+++ b/pack_pattern-copy-direct-ports.golden.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<xml>
+  <interconnect>
+    <direct input="SB_FF.D" name="VPR_FF-D" output="VPR_FF.D">
+      <pack_pattern in_port="SB_FF.D" name="A" out_port="VPR_FF.D"/>
+    </direct>
+    <direct input="LUTFF.FCIN" name="SB_CARRY-CI" output="SB_CARRY.CI">
+      <pack_pattern in_port="LUTFF.FCIN" name="CARRYCHAIN" out_port="SB_CARRY.CI"/>
+    </direct>
+  </interconnect>
+</xml>
diff --git a/preserve-interconnect.golden.xml b/preserve-interconnect.golden.xml
index 8023868..24310f9 100644
--- a/preserve-interconnect.golden.xml
+++ b/preserve-interconnect.golden.xml
@@ -21,16 +21,16 @@
     </pb_type>
     <interconnect>
       <direct input="parent.ia1" name="childa-i1" output="childa.i1"/>
-      <mux input="parent.ia2 parent.ia3" output="childa.i2" name="childa-input-i2">
-        <pack_pattern in_port="parent.parent.ia2" name="MUX1" output="childa.i2"/>
-        <pack_pattern in_port="parent.parent.ia3" name="MUX2" output="childa.i2"/>
+      <mux input="parent.ia2 parent.ia3" name="childa-input-i2" output="childa.i2">
+        <pack_pattern in_port="parent.ia2" name="MUX1" output="childa.i2"/>
+        <pack_pattern in_port="parent.ia3" name="MUX2" output="childa.i2"/>
       </mux>
       <direct input="childa.o" name="parent-o0" output="parent.o0">
-        <pack_pattern in_port="parent.childa.o" name="CARRY" output="parent.o0"/>
+        <pack_pattern in_port="childa.o" name="CARRY" out_port="parent.o0" output="parent.o0"/>
       </direct>
       <direct input="childa.o" name="childb-i" output="childb.i"/>
-      <mux input="childa.o childb.o" output="childc.i" name="childc-input"/>
-      <mux input="childa.o childb.o childc.o" output="parent.o1" name="output"/>
+      <mux input="childa.o childb.o" name="childc-input" output="childc.i"/>
+      <mux input="childa.o childb.o childc.o" name="output" output="parent.o1"/>
     </interconnect>
   </pb_type>
 </xml>