metanorma-un 0.9.0 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -615,6 +615,7 @@
615
615
  </xsl:template>
616
616
 
617
617
  <xsl:template match="un:p" name="paragraph">
618
+ <xsl:param name="split_keep-within-line"/>
618
619
  <fo:block>
619
620
  <xsl:if test="following-sibling::*">
620
621
  <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
@@ -625,7 +626,9 @@
625
626
  <xsl:otherwise>justify</xsl:otherwise>
626
627
  </xsl:choose>
627
628
  </xsl:attribute>
628
- <xsl:apply-templates/>
629
+ <xsl:apply-templates>
630
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
631
+ </xsl:apply-templates>
629
632
  </fo:block>
630
633
  </xsl:template>
631
634
 
@@ -775,85 +778,6 @@
775
778
  </fo:block-container>
776
779
  </xsl:template>
777
780
 
778
-
779
- <!-- Examples:
780
- [b-ASM] b-ASM, http://www.eecs.umich.edu/gasm/ (accessed 20 March 2018).
781
- [b-Börger & Stärk] b-Börger & Stärk, Börger, E., and Stärk, R. S. (2003), Abstract State Machines: A Method for High-Level System Design and Analysis, Springer-Verlag.
782
- -->
783
- <xsl:template match="un:annex//un:bibitem">
784
- <fo:block id="{@id}" margin-top="6pt" margin-left="12mm" text-indent="-12mm">
785
- <xsl:if test="un:formattedref">
786
- <xsl:choose>
787
- <xsl:when test="un:docidentifier[@type = 'metanorma']">
788
- <xsl:attribute name="margin-left">0</xsl:attribute>
789
- <xsl:attribute name="text-indent">0</xsl:attribute>
790
- <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
791
- <!-- create list -->
792
- <fo:list-block>
793
- <fo:list-item>
794
- <fo:list-item-label end-indent="label-end()">
795
- <fo:block>
796
- <xsl:apply-templates select="un:docidentifier[@type = 'metanorma']" mode="process"/>
797
- </fo:block>
798
- </fo:list-item-label>
799
- <fo:list-item-body start-indent="body-start()">
800
- <fo:block margin-left="3mm">
801
- <xsl:apply-templates select="un:formattedref"/>
802
- </fo:block>
803
- </fo:list-item-body>
804
- </fo:list-item>
805
- </fo:list-block>
806
- </xsl:when>
807
- <xsl:otherwise>
808
- <xsl:apply-templates select="un:formattedref"/>
809
- <xsl:apply-templates select="un:docidentifier[(@type != 'metanorma' and @type != 'metanorma-ordinal') or not(@type)]" mode="process"/>
810
- </xsl:otherwise>
811
- </xsl:choose>
812
- </xsl:if>
813
- <xsl:if test="un:title">
814
- <xsl:for-each select="un:contributor">
815
- <xsl:value-of select="un:organization/un:name"/>
816
- <xsl:if test="position() != last()">, </xsl:if>
817
- </xsl:for-each>
818
- <xsl:text> (</xsl:text>
819
- <xsl:variable name="date">
820
- <xsl:choose>
821
- <xsl:when test="un:date[@type='issued']">
822
- <xsl:value-of select="un:date[@type='issued']/un:on"/>
823
- </xsl:when>
824
- <xsl:otherwise>
825
- <xsl:value-of select="un:date/un:on"/>
826
- </xsl:otherwise>
827
- </xsl:choose>
828
- </xsl:variable>
829
- <xsl:value-of select="$date"/>
830
- <xsl:text>) </xsl:text>
831
- <fo:inline font-style="italic"><xsl:value-of select="un:title"/></fo:inline>
832
- <xsl:if test="un:contributor[un:role/@type='publisher']/un:organization/un:name">
833
- <xsl:text> (</xsl:text><xsl:value-of select="un:contributor[un:role/@type='publisher']/un:organization/un:name"/><xsl:text>)</xsl:text>
834
- </xsl:if>
835
- <xsl:text>, </xsl:text>
836
- <xsl:value-of select="$date"/>
837
- <xsl:text>. </xsl:text>
838
- <xsl:value-of select="un:docidentifier"/>
839
- <xsl:value-of select="$linebreak"/>
840
- <xsl:value-of select="un:uri"/>
841
- </xsl:if>
842
- </fo:block>
843
- </xsl:template>
844
-
845
- <xsl:template match="un:annex//un:bibitem//un:formattedref">
846
- <xsl:apply-templates/>
847
- </xsl:template>
848
-
849
- <xsl:template match="un:docidentifier[@type = 'metanorma' or @type = 'metanorma-ordinal']" mode="process">
850
- <xsl:apply-templates/>
851
- </xsl:template>
852
- <xsl:template match="un:docidentifier[(@type != 'metanorma' and @type != 'metanorma-ordinal') or not(@type)]" mode="process">
853
- <xsl:text> [</xsl:text><xsl:apply-templates/><xsl:text>]</xsl:text>
854
- </xsl:template>
855
- <xsl:template match="un:docidentifier"/>
856
-
857
781
 
858
782
 
859
783
  <!-- ============================ -->
@@ -902,12 +826,41 @@
902
826
  <xsl:text>iVBORw0KGgoAAAANSUhEUgAAAUgAAAEfCAYAAAAjn198AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA8BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4M0JCQjMxNzJBNjcxMUVBQjQ3MkM1NDNGQjcxMjlFQyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4M0JCQjMxNjJBNjcxMUVBQjQ3MkM1NDNGQjcxMjlFQyIgeG1wOkNyZWF0b3JUb29sPSJBY3JvYmF0IFBERk1ha2VyIDE4IGZvciBXb3JkIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InV1aWQ6OTM1MzU0ZmUtYzRmYS00Y2I4LTlkOGMtYjk0M2E4OTk2YzhiIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOjhlMzkwMGEzLTMwZWUtNGRlNy04NDc0LTlhZTA5ZTFjZjhmMiIvPiA8ZGM6Y3JlYXRvcj4gPHJkZjpTZXE+IDxyZGY6bGk+U3RlcGhl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</xsl:text>
903
827
  </xsl:variable>
904
828
 
905
- <xsl:param name="svg_images"/><xsl:variable name="images" select="document($svg_images)"/><xsl:param name="basepath"/><xsl:param name="external_index"/><xsl:param name="syntax-highlight">false</xsl:param><xsl:param name="add_math_as_text">true</xsl:param><xsl:variable name="lang">
829
+ <xsl:param name="svg_images"/><xsl:variable name="images" select="document($svg_images)"/><xsl:param name="basepath"/><xsl:param name="external_index"/><xsl:param name="syntax-highlight">false</xsl:param><xsl:param name="add_math_as_text">true</xsl:param><xsl:param name="table_if">false</xsl:param><xsl:param name="table_widths"/><xsl:variable name="table_widths_from_if" select="xalan:nodeset($table_widths)"/><xsl:variable name="table_widths_from_if_calculated_">
830
+ <xsl:for-each select="$table_widths_from_if//table">
831
+ <xsl:copy>
832
+ <xsl:copy-of select="@*"/>
833
+ <xsl:call-template name="calculate-column-widths-autolayout-algorithm"/>
834
+ </xsl:copy>
835
+ </xsl:for-each>
836
+ </xsl:variable><xsl:variable name="table_widths_from_if_calculated" select="xalan:nodeset($table_widths_from_if_calculated_)"/><xsl:param name="table_if_debug">false</xsl:param><xsl:variable name="isGenerateTableIF_">
837
+ false
838
+ </xsl:variable><xsl:variable name="isGenerateTableIF" select="normalize-space($isGenerateTableIF_)"/><xsl:variable name="lang">
906
839
  <xsl:call-template name="getLang"/>
907
- </xsl:variable><xsl:variable name="pageWidth_">
908
- 210
840
+ </xsl:variable><xsl:variable name="papersize" select="java:toLowerCase(java:java.lang.String.new(normalize-space(//*[contains(local-name(), '-standard')]/*[local-name() = 'misc-container']/*[local-name() = 'presentation-metadata']/*[local-name() = 'papersize'])))"/><xsl:variable name="papersize_width_">
841
+ <xsl:choose>
842
+ <xsl:when test="$papersize = 'letter'">215.9</xsl:when>
843
+ <xsl:when test="$papersize = 'a4'">210</xsl:when>
844
+ </xsl:choose>
845
+ </xsl:variable><xsl:variable name="papersize_width" select="normalize-space($papersize_width_)"/><xsl:variable name="papersize_height_">
846
+ <xsl:choose>
847
+ <xsl:when test="$papersize = 'letter'">279.4</xsl:when>
848
+ <xsl:when test="$papersize = 'a4'">297</xsl:when>
849
+ </xsl:choose>
850
+ </xsl:variable><xsl:variable name="papersize_height" select="normalize-space($papersize_height_)"/><xsl:variable name="pageWidth_">
851
+ <xsl:choose>
852
+ <xsl:when test="$papersize_width != ''"><xsl:value-of select="$papersize_width"/></xsl:when>
853
+ <xsl:otherwise>
854
+ 210
855
+ </xsl:otherwise>
856
+ </xsl:choose>
909
857
  </xsl:variable><xsl:variable name="pageWidth" select="normalize-space($pageWidth_)"/><xsl:variable name="pageHeight_">
910
- 297
858
+ <xsl:choose>
859
+ <xsl:when test="$papersize_height != ''"><xsl:value-of select="$papersize_height"/></xsl:when>
860
+ <xsl:otherwise>
861
+ 297
862
+ </xsl:otherwise>
863
+ </xsl:choose>
911
864
  </xsl:variable><xsl:variable name="pageHeight" select="normalize-space($pageHeight_)"/><xsl:variable name="marginLeftRight1_">
912
865
  40
913
866
  </xsl:variable><xsl:variable name="marginLeftRight1" select="normalize-space($marginLeftRight1_)"/><xsl:variable name="marginLeftRight2_">
@@ -1021,7 +974,8 @@
1021
974
  <xsl:value-of select="$titles/*[local-name() = $name][@lang = 'en']"/>
1022
975
  </xsl:otherwise>
1023
976
  </xsl:choose>
1024
- </xsl:template><xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable><xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable><xsl:variable name="en_chars" select="concat($lower,$upper,',.`1234567890-=~!@#$%^*()_+[]{}\|?/')"/><xsl:attribute-set name="root-style">
977
+ </xsl:template><xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable><xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable><xsl:variable name="en_chars" select="concat($lower,$upper,',.`1234567890-=~!@#$%^*()_+[]{}\|?/')"/><xsl:variable name="font_noto_sans">Noto Sans, Noto Sans HK, Noto Sans JP, Noto Sans KR, Noto Sans SC, Noto Sans TC</xsl:variable><xsl:variable name="font_noto_sans_mono">Noto Sans Mono, Noto Sans Mono CJK HK, Noto Sans Mono CJK JP, Noto Sans Mono CJK KR, Noto Sans Mono CJK SC, Noto Sans Mono CJK TC</xsl:variable><xsl:variable name="font_noto_serif">Noto Serif, Noto Serif HK, Noto Serif JP, Noto Serif KR, Noto Serif SC, Noto Serif TC</xsl:variable><xsl:attribute-set name="root-style">
978
+
1025
979
 
1026
980
 
1027
981
 
@@ -1038,7 +992,8 @@
1038
992
 
1039
993
 
1040
994
 
1041
- <xsl:attribute name="font-family">Times New Roman, STIX Two Math, Source Han Sans</xsl:attribute>
995
+ <xsl:attribute name="font-family">Times New Roman, STIX Two Math, <xsl:value-of select="$font_noto_serif"/></xsl:attribute>
996
+ <xsl:attribute name="font-family-generic">Serif</xsl:attribute>
1042
997
  <xsl:attribute name="font-size">10pt</xsl:attribute>
1043
998
 
1044
999
  </xsl:attribute-set><xsl:template name="insertRootStyle">
@@ -1052,17 +1007,60 @@
1052
1007
  </xsl:variable>
1053
1008
  <xsl:variable name="additional_fonts" select="normalize-space($additional_fonts_)"/>
1054
1009
 
1010
+ <xsl:variable name="font_family_generic" select="$root-style_/root-style/@font-family-generic"/>
1011
+
1055
1012
  <xsl:for-each select="$root-style_/root-style/@*">
1013
+
1056
1014
  <xsl:choose>
1057
- <xsl:when test="local-name() = 'font-family' and $additional_fonts != ''">
1015
+ <xsl:when test="local-name() = 'font-family-generic'"><!-- skip, it's using for determine 'sans' or 'serif' --></xsl:when>
1016
+ <xsl:when test="local-name() = 'font-family'">
1017
+
1018
+ <xsl:variable name="font_regional_prefix">
1019
+ <xsl:choose>
1020
+ <xsl:when test="$font_family_generic = 'Sans'">Noto Sans</xsl:when>
1021
+ <xsl:otherwise>Noto Serif</xsl:otherwise>
1022
+ </xsl:choose>
1023
+ </xsl:variable>
1024
+
1058
1025
  <xsl:attribute name="{local-name()}">
1059
- <xsl:value-of select="."/>, <xsl:value-of select="$additional_fonts"/>
1026
+
1027
+ <xsl:variable name="font_extended">
1028
+ <xsl:choose>
1029
+ <xsl:when test="$lang = 'zh'"><xsl:value-of select="$font_regional_prefix"/> SC</xsl:when>
1030
+ <xsl:when test="$lang = 'hk'"><xsl:value-of select="$font_regional_prefix"/> HK</xsl:when>
1031
+ <xsl:when test="$lang = 'jp'"><xsl:value-of select="$font_regional_prefix"/> JP</xsl:when>
1032
+ <xsl:when test="$lang = 'kr'"><xsl:value-of select="$font_regional_prefix"/> KR</xsl:when>
1033
+ <xsl:when test="$lang = 'sc'"><xsl:value-of select="$font_regional_prefix"/> SC</xsl:when>
1034
+ <xsl:when test="$lang = 'tc'"><xsl:value-of select="$font_regional_prefix"/> TC</xsl:when>
1035
+ </xsl:choose>
1036
+ </xsl:variable>
1037
+ <xsl:if test="normalize-space($font_extended) != ''">
1038
+ <xsl:value-of select="$font_regional_prefix"/><xsl:text>, </xsl:text>
1039
+ <xsl:value-of select="$font_extended"/><xsl:text>, </xsl:text>
1040
+ </xsl:if>
1041
+
1042
+ <xsl:value-of select="."/>
1043
+
1044
+ <xsl:if test="$additional_fonts != ''">
1045
+ <xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
1046
+ </xsl:if>
1060
1047
  </xsl:attribute>
1061
1048
  </xsl:when>
1062
1049
  <xsl:otherwise>
1063
1050
  <xsl:copy-of select="."/>
1064
1051
  </xsl:otherwise>
1065
1052
  </xsl:choose>
1053
+
1054
+ <!-- <xsl:choose>
1055
+ <xsl:when test="local-name() = 'font-family'">
1056
+ <xsl:attribute name="{local-name()}">
1057
+ <xsl:value-of select="."/>, <xsl:value-of select="$additional_fonts"/>
1058
+ </xsl:attribute>
1059
+ </xsl:when>
1060
+ <xsl:otherwise>
1061
+ <xsl:copy-of select="."/>
1062
+ </xsl:otherwise>
1063
+ </xsl:choose> -->
1066
1064
  </xsl:for-each>
1067
1065
  </xsl:template><xsl:attribute-set name="copyright-statement-style">
1068
1066
 
@@ -1133,13 +1131,14 @@
1133
1131
 
1134
1132
 
1135
1133
 
1134
+
1136
1135
 
1137
1136
 
1138
1137
 
1139
1138
 
1140
1139
 
1141
1140
 
1142
- <xsl:attribute name="font-family">Courier New</xsl:attribute>
1141
+ <xsl:attribute name="font-family">Courier New, <xsl:value-of select="$font_noto_sans_mono"/></xsl:attribute>
1143
1142
  <xsl:attribute name="margin-top">6pt</xsl:attribute>
1144
1143
  <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
1145
1144
 
@@ -1177,6 +1176,7 @@
1177
1176
 
1178
1177
 
1179
1178
 
1179
+
1180
1180
 
1181
1181
  </xsl:attribute-set><xsl:attribute-set name="example-style">
1182
1182
 
@@ -1192,6 +1192,7 @@
1192
1192
 
1193
1193
 
1194
1194
 
1195
+
1195
1196
  </xsl:attribute-set><xsl:attribute-set name="example-body-style">
1196
1197
 
1197
1198
 
@@ -1211,6 +1212,7 @@
1211
1212
 
1212
1213
 
1213
1214
 
1215
+
1214
1216
 
1215
1217
 
1216
1218
  <xsl:attribute name="keep-with-next">always</xsl:attribute>
@@ -1251,6 +1253,7 @@
1251
1253
 
1252
1254
  </xsl:attribute-set><xsl:variable name="table-border_">
1253
1255
 
1256
+
1254
1257
  </xsl:variable><xsl:variable name="table-border" select="normalize-space($table-border_)"/><xsl:attribute-set name="table-container-style">
1255
1258
  <xsl:attribute name="margin-left">0mm</xsl:attribute>
1256
1259
  <xsl:attribute name="margin-right">0mm</xsl:attribute>
@@ -1272,6 +1275,7 @@
1272
1275
 
1273
1276
 
1274
1277
 
1278
+
1275
1279
 
1276
1280
 
1277
1281
 
@@ -1301,6 +1305,7 @@
1301
1305
 
1302
1306
 
1303
1307
 
1308
+
1304
1309
 
1305
1310
 
1306
1311
 
@@ -1310,6 +1315,7 @@
1310
1315
 
1311
1316
 
1312
1317
 
1318
+
1313
1319
 
1314
1320
 
1315
1321
 
@@ -1354,6 +1360,7 @@
1354
1360
  <xsl:attribute name="font-weight">bold</xsl:attribute>
1355
1361
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
1356
1362
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
1363
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
1357
1364
  <xsl:attribute name="display-align">center</xsl:attribute>
1358
1365
 
1359
1366
 
@@ -1374,6 +1381,8 @@
1374
1381
  <xsl:attribute name="display-align">center</xsl:attribute>
1375
1382
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
1376
1383
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
1384
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
1385
+
1377
1386
 
1378
1387
 
1379
1388
 
@@ -1402,7 +1411,7 @@
1402
1411
 
1403
1412
 
1404
1413
 
1405
-
1414
+
1406
1415
 
1407
1416
 
1408
1417
 
@@ -1417,6 +1426,7 @@
1417
1426
 
1418
1427
 
1419
1428
 
1429
+
1420
1430
  </xsl:attribute-set><xsl:attribute-set name="table-fn-style">
1421
1431
  <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
1422
1432
 
@@ -1425,6 +1435,8 @@
1425
1435
 
1426
1436
 
1427
1437
 
1438
+
1439
+
1428
1440
  </xsl:attribute-set><xsl:attribute-set name="table-fn-number-style">
1429
1441
  <xsl:attribute name="font-size">80%</xsl:attribute>
1430
1442
  <xsl:attribute name="padding-right">5mm</xsl:attribute>
@@ -1440,6 +1452,7 @@
1440
1452
 
1441
1453
 
1442
1454
 
1455
+
1443
1456
  <xsl:attribute name="vertical-align">super</xsl:attribute>
1444
1457
 
1445
1458
  </xsl:attribute-set><xsl:attribute-set name="fn-container-body-style">
@@ -1461,7 +1474,8 @@
1461
1474
  </xsl:attribute-set><xsl:attribute-set name="dt-row-style">
1462
1475
 
1463
1476
 
1464
- </xsl:attribute-set><xsl:attribute-set name="dt-style">
1477
+ </xsl:attribute-set><xsl:attribute-set name="dt-cell-style">
1478
+ </xsl:attribute-set><xsl:attribute-set name="dt-block-style">
1465
1479
  <xsl:attribute name="margin-top">6pt</xsl:attribute>
1466
1480
 
1467
1481
 
@@ -1473,6 +1487,29 @@
1473
1487
 
1474
1488
 
1475
1489
 
1490
+
1491
+ </xsl:attribute-set><xsl:attribute-set name="dl-name-style">
1492
+ <xsl:attribute name="keep-with-next">always</xsl:attribute>
1493
+ <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
1507
+
1508
+
1509
+
1510
+
1511
+ </xsl:attribute-set><xsl:attribute-set name="dd-cell-style">
1512
+ <xsl:attribute name="padding-left">2mm</xsl:attribute>
1476
1513
  </xsl:attribute-set><xsl:attribute-set name="appendix-style">
1477
1514
 
1478
1515
 
@@ -1500,6 +1537,7 @@
1500
1537
 
1501
1538
 
1502
1539
 
1540
+
1503
1541
 
1504
1542
 
1505
1543
 
@@ -1570,6 +1608,8 @@
1570
1608
 
1571
1609
 
1572
1610
 
1611
+ </xsl:attribute-set><xsl:attribute-set name="termnote-p-style">
1612
+
1573
1613
  </xsl:attribute-set><xsl:attribute-set name="quote-style">
1574
1614
  <xsl:attribute name="margin-left">12mm</xsl:attribute>
1575
1615
  <xsl:attribute name="margin-right">12mm</xsl:attribute>
@@ -1610,6 +1650,7 @@
1610
1650
  </xsl:attribute-set><xsl:attribute-set name="figure-name-style">
1611
1651
 
1612
1652
 
1653
+
1613
1654
 
1614
1655
 
1615
1656
 
@@ -1656,6 +1697,7 @@
1656
1697
 
1657
1698
 
1658
1699
 
1700
+
1659
1701
  </xsl:attribute-set><xsl:attribute-set name="formula-stem-number-style">
1660
1702
  <xsl:attribute name="text-align">right</xsl:attribute>
1661
1703
 
@@ -1677,16 +1719,16 @@
1677
1719
  </xsl:attribute-set><xsl:attribute-set name="figure-pseudocode-p-style">
1678
1720
 
1679
1721
  </xsl:attribute-set><xsl:attribute-set name="image-graphic-style">
1722
+ <xsl:attribute name="width">100%</xsl:attribute>
1723
+ <xsl:attribute name="content-height">100%</xsl:attribute>
1724
+ <xsl:attribute name="scaling">uniform</xsl:attribute>
1680
1725
 
1681
1726
 
1682
- <xsl:attribute name="width">100%</xsl:attribute>
1683
1727
  <xsl:attribute name="content-height">scale-to-fit</xsl:attribute>
1684
- <xsl:attribute name="scaling">uniform</xsl:attribute>
1685
1728
 
1686
1729
 
1687
1730
 
1688
-
1689
-
1731
+
1690
1732
  </xsl:attribute-set><xsl:attribute-set name="tt-style">
1691
1733
 
1692
1734
 
@@ -1765,10 +1807,29 @@
1765
1807
 
1766
1808
 
1767
1809
 
1810
+
1768
1811
  <xsl:attribute name="provisional-distance-between-starts">3mm</xsl:attribute>
1769
1812
  <xsl:attribute name="margin-left">7mm</xsl:attribute>
1770
1813
  <xsl:attribute name="text-indent">0mm</xsl:attribute>
1771
1814
 
1815
+ </xsl:attribute-set><xsl:attribute-set name="list-name-style">
1816
+ <xsl:attribute name="keep-with-next">always</xsl:attribute>
1817
+
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
1829
+
1830
+
1831
+
1832
+
1772
1833
  </xsl:attribute-set><xsl:attribute-set name="list-item-style">
1773
1834
 
1774
1835
 
@@ -1813,6 +1874,7 @@
1813
1874
 
1814
1875
 
1815
1876
 
1877
+
1816
1878
  <xsl:attribute name="font-size">55%</xsl:attribute>
1817
1879
  <xsl:attribute name="vertical-align">super</xsl:attribute>
1818
1880
 
@@ -1839,6 +1901,7 @@
1839
1901
 
1840
1902
 
1841
1903
 
1904
+
1842
1905
  <xsl:attribute name="font-size">9pt</xsl:attribute>
1843
1906
  <xsl:attribute name="line-height">125%</xsl:attribute>
1844
1907
 
@@ -1861,6 +1924,7 @@
1861
1924
 
1862
1925
 
1863
1926
 
1927
+
1864
1928
  <xsl:attribute name="font-size">60%</xsl:attribute>
1865
1929
  <xsl:attribute name="padding-right">1mm</xsl:attribute>
1866
1930
  <xsl:attribute name="vertical-align">super</xsl:attribute>
@@ -1880,6 +1944,7 @@
1880
1944
 
1881
1945
 
1882
1946
 
1947
+
1883
1948
  <xsl:attribute name="border">0.25pt solid black</xsl:attribute>
1884
1949
  <xsl:attribute name="margin-top">7mm</xsl:attribute>
1885
1950
  <xsl:attribute name="margin-left">-9mm</xsl:attribute>
@@ -1888,6 +1953,9 @@
1888
1953
  <xsl:attribute name="margin-bottom">16pt</xsl:attribute>
1889
1954
 
1890
1955
  </xsl:attribute-set><xsl:attribute-set name="admonition-container-style">
1956
+ <xsl:attribute name="margin-left">0mm</xsl:attribute>
1957
+ <xsl:attribute name="margin-right">0mm</xsl:attribute>
1958
+
1891
1959
 
1892
1960
 
1893
1961
 
@@ -1937,6 +2005,7 @@
1937
2005
 
1938
2006
 
1939
2007
 
2008
+
1940
2009
  <xsl:attribute name="text-align">justify</xsl:attribute>
1941
2010
  <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
1942
2011
 
@@ -1977,6 +2046,7 @@
1977
2046
 
1978
2047
 
1979
2048
 
2049
+
1980
2050
  </xsl:attribute-set><xsl:attribute-set name="bibitem-non-normative-style">
1981
2051
 
1982
2052
 
@@ -1996,6 +2066,7 @@
1996
2066
 
1997
2067
 
1998
2068
 
2069
+
1999
2070
  </xsl:attribute-set><xsl:attribute-set name="bibitem-normative-list-body-style">
2000
2071
 
2001
2072
 
@@ -2022,6 +2093,7 @@
2022
2093
 
2023
2094
 
2024
2095
 
2096
+
2025
2097
  <xsl:attribute name="vertical-align">super</xsl:attribute>
2026
2098
 
2027
2099
  </xsl:attribute-set><xsl:attribute-set name="bibitem-note-fn-number-style">
@@ -2042,6 +2114,7 @@
2042
2114
 
2043
2115
 
2044
2116
 
2117
+
2045
2118
  <xsl:attribute name="font-size">60%</xsl:attribute>
2046
2119
  <xsl:attribute name="vertical-align">super</xsl:attribute>
2047
2120
 
@@ -2060,6 +2133,7 @@
2060
2133
 
2061
2134
 
2062
2135
 
2136
+
2063
2137
  </xsl:attribute-set><xsl:attribute-set name="references-non-normative-style">
2064
2138
 
2065
2139
 
@@ -2171,13 +2245,13 @@
2171
2245
 
2172
2246
  </xsl:attribute-set><xsl:variable name="border-block-added">2.5pt solid rgb(0, 176, 80)</xsl:variable><xsl:variable name="border-block-deleted">2.5pt solid rgb(255, 0, 0)</xsl:variable><xsl:variable name="ace_tag">ace-tag_</xsl:variable><xsl:template name="processPrefaceSectionsDefault_Contents">
2173
2247
  <xsl:variable name="nodes_preface_">
2174
- <xsl:for-each select="/*/*[local-name()='preface']/*">
2248
+ <xsl:for-each select="/*/*[local-name()='preface']/*[not(local-name() = 'note' or local-name() = 'admonition')]">
2175
2249
  <node id="{@id}"/>
2176
2250
  </xsl:for-each>
2177
2251
  </xsl:variable>
2178
2252
  <xsl:variable name="nodes_preface" select="xalan:nodeset($nodes_preface_)"/>
2179
2253
 
2180
- <xsl:for-each select="/*/*[local-name()='preface']/*">
2254
+ <xsl:for-each select="/*/*[local-name()='preface']/*[not(local-name() = 'note' or local-name() = 'admonition')]">
2181
2255
  <xsl:sort select="@displayorder" data-type="number"/>
2182
2256
 
2183
2257
  <!-- process Section's title -->
@@ -2243,7 +2317,7 @@
2243
2317
  </xsl:for-each>
2244
2318
  </figures>
2245
2319
  </xsl:template><xsl:template name="processPrefaceSectionsDefault">
2246
- <xsl:for-each select="/*/*[local-name()='preface']/*">
2320
+ <xsl:for-each select="/*/*[local-name()='preface']/*[not(local-name() = 'note' or local-name() = 'admonition')]">
2247
2321
  <xsl:sort select="@displayorder" data-type="number"/>
2248
2322
  <xsl:apply-templates select="."/>
2249
2323
  </xsl:for-each>
@@ -2297,7 +2371,38 @@
2297
2371
  </xsl:template><xsl:template match="*[local-name()='br']">
2298
2372
  <xsl:value-of select="$linebreak"/>
2299
2373
  </xsl:template><xsl:template match="*[local-name() = 'keep-together_within-line']">
2300
- <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
2374
+ <xsl:param name="split_keep-within-line"/>
2375
+
2376
+ <!-- <fo:inline>split_keep-within-line='<xsl:value-of select="$split_keep-within-line"/>'</fo:inline> -->
2377
+ <xsl:choose>
2378
+
2379
+ <xsl:when test="normalize-space($split_keep-within-line) = 'true'">
2380
+ <xsl:variable name="sep">_</xsl:variable>
2381
+ <xsl:variable name="items">
2382
+ <xsl:call-template name="split">
2383
+ <xsl:with-param name="pText" select="."/>
2384
+ <xsl:with-param name="sep" select="$sep"/>
2385
+ <xsl:with-param name="normalize-space">false</xsl:with-param>
2386
+ <xsl:with-param name="keep_sep">true</xsl:with-param>
2387
+ </xsl:call-template>
2388
+ </xsl:variable>
2389
+ <xsl:for-each select="xalan:nodeset($items)/item">
2390
+ <xsl:choose>
2391
+ <xsl:when test=". = $sep">
2392
+ <xsl:value-of select="$sep"/><xsl:value-of select="$zero_width_space"/>
2393
+ </xsl:when>
2394
+ <xsl:otherwise>
2395
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
2396
+ </xsl:otherwise>
2397
+ </xsl:choose>
2398
+ </xsl:for-each>
2399
+ </xsl:when>
2400
+
2401
+ <xsl:otherwise>
2402
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
2403
+ </xsl:otherwise>
2404
+
2405
+ </xsl:choose>
2301
2406
  </xsl:template><xsl:template match="*[local-name()='copyright-statement']">
2302
2407
  <fo:block xsl:use-attribute-sets="copyright-statement-style">
2303
2408
  <xsl:apply-templates/>
@@ -2389,9 +2494,14 @@
2389
2494
 
2390
2495
  <xsl:variable name="table">
2391
2496
 
2392
- <xsl:variable name="simple-table">
2393
- <xsl:call-template name="getSimpleTable"/>
2497
+ <xsl:variable name="simple-table">
2498
+ <xsl:call-template name="getSimpleTable">
2499
+ <xsl:with-param name="id" select="@id"/>
2500
+ </xsl:call-template>
2394
2501
  </xsl:variable>
2502
+ <!-- <xsl:variable name="simple-table" select="xalan:nodeset($simple-table_)"/> -->
2503
+
2504
+ <!-- simple-table=<xsl:copy-of select="$simple-table"/> -->
2395
2505
 
2396
2506
 
2397
2507
  <!-- Display table's name before table as standalone block -->
@@ -2414,7 +2524,23 @@
2414
2524
  </xsl:call-template>
2415
2525
  </xsl:if>
2416
2526
  </xsl:variable>
2417
- <!-- DEBUG colwidths=<xsl:copy-of select="$colwidths"/> -->
2527
+ <!-- <xsl:variable name="colwidths" select="xalan:nodeset($colwidths_)"/> -->
2528
+
2529
+ <!-- DEBUG -->
2530
+ <xsl:if test="$table_if_debug = 'true'">
2531
+ <fo:block font-size="60%">
2532
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
2533
+ </fo:block>
2534
+ </xsl:if>
2535
+
2536
+
2537
+ <!-- <xsl:copy-of select="$colwidths"/> -->
2538
+
2539
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
2540
+ DEBUG
2541
+ colwidths=<xsl:copy-of select="$colwidths"/>
2542
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
2543
+
2418
2544
 
2419
2545
 
2420
2546
  <xsl:variable name="margin-side">
@@ -2439,6 +2565,8 @@
2439
2565
 
2440
2566
 
2441
2567
 
2568
+
2569
+
2442
2570
 
2443
2571
 
2444
2572
 
@@ -2487,6 +2615,8 @@
2487
2615
 
2488
2616
 
2489
2617
 
2618
+
2619
+
2490
2620
  <xsl:if test="ancestor::*[local-name()='sections']">
2491
2621
  <xsl:attribute name="border-top">1.5pt solid black</xsl:attribute>
2492
2622
  <xsl:attribute name="border-bottom">1.5pt solid black</xsl:attribute>
@@ -2495,9 +2625,17 @@
2495
2625
  </xsl:element>
2496
2626
  </xsl:variable>
2497
2627
 
2628
+ <xsl:if test="$isGenerateTableIF = 'true'">
2629
+ <!-- to determine start of table -->
2630
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
2631
+ </xsl:if>
2498
2632
 
2499
2633
  <fo:table id="{@id}">
2500
2634
 
2635
+ <xsl:if test="$isGenerateTableIF = 'true'">
2636
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
2637
+ </xsl:if>
2638
+
2501
2639
  <xsl:for-each select="xalan:nodeset($table_attributes)/table_attributes/@*">
2502
2640
  <xsl:attribute name="{local-name()}">
2503
2641
  <xsl:value-of select="."/>
@@ -2511,24 +2649,47 @@
2511
2649
 
2512
2650
 
2513
2651
  <xsl:choose>
2514
- <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
2515
- <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
2516
- <fo:table-column column-width="{@width}"/>
2517
- </xsl:for-each>
2652
+ <xsl:when test="$isGenerateTableIF = 'true'">
2653
+ <!-- generate IF for table widths -->
2654
+ <!-- example:
2655
+ <tr>
2656
+ <td valign="top" align="left" id="tab-symdu_1_1">
2657
+ <p>Symbol</p>
2658
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
2659
+ </td>
2660
+ <td valign="top" align="left" id="tab-symdu_1_2">
2661
+ <p>Description</p>
2662
+ <word id="tab-symdu_1_2_word_1">Description</word>
2663
+ </td>
2664
+ </tr>
2665
+ -->
2666
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if"/>
2667
+
2518
2668
  </xsl:when>
2519
2669
  <xsl:otherwise>
2520
- <xsl:call-template name="insertTableColumnWidth">
2521
- <xsl:with-param name="colwidths" select="$colwidths"/>
2522
- </xsl:call-template>
2523
- </xsl:otherwise>
2524
- </xsl:choose>
2525
2670
 
2526
- <xsl:choose>
2527
- <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
2528
- <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
2529
- </xsl:when>
2530
- <xsl:otherwise>
2531
- <xsl:apply-templates select="node()[not(local-name() = 'name') and not(local-name() = 'note') and not(local-name() = 'thead') and not(local-name() = 'tfoot')]"/> <!-- process all table' elements, except name, header, footer and note that renders separaterely -->
2671
+ <xsl:choose>
2672
+ <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
2673
+ <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
2674
+ <fo:table-column column-width="{@width}"/>
2675
+ </xsl:for-each>
2676
+ </xsl:when>
2677
+ <xsl:otherwise>
2678
+ <xsl:call-template name="insertTableColumnWidth">
2679
+ <xsl:with-param name="colwidths" select="$colwidths"/>
2680
+ </xsl:call-template>
2681
+ </xsl:otherwise>
2682
+ </xsl:choose>
2683
+
2684
+ <xsl:choose>
2685
+ <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
2686
+ <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
2687
+ </xsl:when>
2688
+ <xsl:otherwise>
2689
+ <xsl:apply-templates select="node()[not(local-name() = 'name') and not(local-name() = 'note') and not(local-name() = 'thead') and not(local-name() = 'tfoot')]"/> <!-- process all table' elements, except name, header, footer and note that renders separaterely -->
2690
+ </xsl:otherwise>
2691
+ </xsl:choose>
2692
+
2532
2693
  </xsl:otherwise>
2533
2694
  </xsl:choose>
2534
2695
 
@@ -2603,23 +2764,29 @@
2603
2764
  </xsl:template><xsl:template match="*[local-name()='table']/*[local-name() = 'name']">
2604
2765
  <xsl:param name="continued"/>
2605
2766
  <xsl:if test="normalize-space() != ''">
2606
- <fo:block xsl:use-attribute-sets="table-name-style">
2607
-
2608
-
2609
-
2610
-
2767
+
2768
+
2611
2769
 
2612
- <xsl:choose>
2613
- <xsl:when test="$continued = 'true'">
2770
+ <fo:block xsl:use-attribute-sets="table-name-style">
2771
+
2614
2772
 
2615
- </xsl:when>
2616
- <xsl:otherwise>
2617
- <xsl:apply-templates/>
2618
- </xsl:otherwise>
2619
- </xsl:choose>
2620
-
2773
+
2774
+
2775
+
2776
+ <xsl:choose>
2777
+ <xsl:when test="$continued = 'true'">
2778
+
2779
+ </xsl:when>
2780
+ <xsl:otherwise>
2781
+ <xsl:apply-templates/>
2782
+ </xsl:otherwise>
2783
+ </xsl:choose>
2784
+
2785
+
2786
+ </fo:block>
2787
+
2621
2788
 
2622
- </fo:block>
2789
+
2623
2790
  </xsl:if>
2624
2791
  </xsl:template><xsl:template name="calculate-columns-numbers">
2625
2792
  <xsl:param name="table-row"/>
@@ -2628,11 +2795,22 @@
2628
2795
  <xsl:variable name="columns-with-colspan" select="count($table-row/*[@colspan])"/>
2629
2796
  <xsl:value-of select="$columns-count + $sum-colspans - $columns-with-colspan"/>
2630
2797
  </xsl:template><xsl:template name="calculate-column-widths">
2798
+ <xsl:param name="table"/>
2799
+ <xsl:param name="cols-count"/>
2800
+
2801
+ <xsl:call-template name="calculate-column-widths-proportional">
2802
+ <xsl:with-param name="cols-count" select="$cols-count"/>
2803
+ <xsl:with-param name="table" select="$table"/>
2804
+ </xsl:call-template>
2805
+
2806
+ </xsl:template><xsl:template name="calculate-column-widths-proportional">
2631
2807
  <xsl:param name="table"/>
2632
2808
  <xsl:param name="cols-count"/>
2633
2809
  <xsl:param name="curr-col" select="1"/>
2634
2810
  <xsl:param name="width" select="0"/>
2635
2811
 
2812
+ <!-- table=<xsl:copy-of select="$table"/> -->
2813
+
2636
2814
  <xsl:if test="$curr-col &lt;= $cols-count">
2637
2815
  <xsl:variable name="widths">
2638
2816
  <xsl:choose>
@@ -2670,10 +2848,15 @@
2670
2848
  </xsl:for-each>
2671
2849
  </xsl:when>
2672
2850
  <xsl:otherwise>
2673
- <xsl:for-each select="xalan:nodeset($table)/*/tr">
2851
+ <!-- <curr_col><xsl:value-of select="$curr-col"/></curr_col> -->
2852
+
2853
+ <!-- <table><xsl:copy-of select="$table"/></table>
2854
+ -->
2855
+ <xsl:for-each select="xalan:nodeset($table)/*/*[local-name()='tr']">
2674
2856
  <xsl:variable name="td_text">
2675
2857
  <xsl:apply-templates select="td[$curr-col]" mode="td_text"/>
2676
2858
  </xsl:variable>
2859
+ <!-- <td_text><xsl:value-of select="$td_text"/></td_text> -->
2677
2860
  <xsl:variable name="words">
2678
2861
  <xsl:variable name="string_with_added_zerospaces">
2679
2862
  <xsl:call-template name="add-zero-spaces-java">
@@ -2688,6 +2871,7 @@
2688
2871
  <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
2689
2872
  </xsl:call-template>
2690
2873
  </xsl:variable>
2874
+ <!-- words=<xsl:copy-of select="$words"/> -->
2691
2875
  <xsl:variable name="max_length">
2692
2876
  <xsl:call-template name="max_length">
2693
2877
  <xsl:with-param name="words" select="xalan:nodeset($words)"/>
@@ -2712,6 +2896,8 @@
2712
2896
  </xsl:choose>
2713
2897
  </xsl:variable>
2714
2898
 
2899
+ <!-- widths=<xsl:copy-of select="$widths"/> -->
2900
+
2715
2901
  <column>
2716
2902
  <xsl:for-each select="xalan:nodeset($widths)//width">
2717
2903
  <xsl:sort select="." data-type="number" order="descending"/>
@@ -2720,33 +2906,271 @@
2720
2906
  </xsl:if>
2721
2907
  </xsl:for-each>
2722
2908
  </column>
2723
- <xsl:call-template name="calculate-column-widths">
2909
+ <xsl:call-template name="calculate-column-widths-proportional">
2724
2910
  <xsl:with-param name="cols-count" select="$cols-count"/>
2725
2911
  <xsl:with-param name="curr-col" select="$curr-col +1"/>
2726
2912
  <xsl:with-param name="table" select="$table"/>
2727
2913
  </xsl:call-template>
2728
2914
  </xsl:if>
2729
- </xsl:template><xsl:template match="*[@keep-together.within-line]/text()" priority="2" mode="td_text">
2915
+ </xsl:template><xsl:template match="*[@keep-together.within-line or local-name() = 'keep-together_within-line']/text()" priority="2" mode="td_text">
2730
2916
  <!-- <xsl:message>DEBUG t1=<xsl:value-of select="."/></xsl:message>
2731
2917
  <xsl:message>DEBUG t2=<xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/></xsl:message> -->
2732
2918
  <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/>
2919
+
2920
+ <!-- if all capitals english letters or digits -->
2921
+ <xsl:if test="normalize-space(translate(., concat($upper,'0123456789'), '')) = ''">
2922
+ <xsl:call-template name="repeat">
2923
+ <xsl:with-param name="char" select="'X'"/>
2924
+ <xsl:with-param name="count" select="string-length(normalize-space(.)) * 0.5"/>
2925
+ </xsl:call-template>
2926
+ </xsl:if>
2733
2927
  </xsl:template><xsl:template match="text()" mode="td_text">
2734
2928
  <xsl:value-of select="translate(., $zero_width_space, ' ')"/><xsl:text> </xsl:text>
2735
2929
  </xsl:template><xsl:template match="*[local-name()='termsource']" mode="td_text">
2736
2930
  <xsl:value-of select="*[local-name()='origin']/@citeas"/>
2737
2931
  </xsl:template><xsl:template match="*[local-name()='link']" mode="td_text">
2738
2932
  <xsl:value-of select="@target"/>
2739
- </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text">
2740
- <xsl:variable name="mathml">
2741
- <xsl:for-each select="*">
2742
- <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
2743
- <xsl:copy-of select="."/>
2744
- </xsl:if>
2933
+ </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text" name="math_length">
2934
+ <xsl:if test="$isGenerateTableIF = 'false'">
2935
+ <xsl:variable name="mathml_">
2936
+ <xsl:for-each select="*">
2937
+ <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
2938
+ <xsl:copy-of select="."/>
2939
+ </xsl:if>
2940
+ </xsl:for-each>
2941
+ </xsl:variable>
2942
+ <xsl:variable name="mathml" select="xalan:nodeset($mathml_)"/>
2943
+
2944
+ <xsl:variable name="math_text">
2945
+ <xsl:value-of select="normalize-space($mathml)"/>
2946
+ <xsl:for-each select="$mathml//@open"><xsl:value-of select="."/></xsl:for-each>
2947
+ <xsl:for-each select="$mathml//@close"><xsl:value-of select="."/></xsl:for-each>
2948
+ </xsl:variable>
2949
+ <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
2950
+ </xsl:if>
2951
+ </xsl:template><xsl:template name="calculate-column-widths-autolayout-algorithm">
2952
+ <xsl:param name="parent_table_page-width"/> <!-- for nested tables, in re-calculate step -->
2953
+
2954
+ <!-- via intermediate format -->
2955
+
2956
+ <!-- The algorithm uses two passes through the table data and scales linearly with the size of the table -->
2957
+
2958
+ <!-- In the first pass, line wrapping is disabled, and the user agent keeps track of the minimum and maximum width of each cell. -->
2959
+
2960
+ <!-- Since line wrap has been disabled, paragraphs are treated as long lines unless broken by BR elements. -->
2961
+
2962
+ <!-- get current table id -->
2963
+ <xsl:variable name="table_id" select="@id"/>
2964
+ <!-- find table by id in the file 'table_widths' -->
2965
+ <!-- <xsl:variable name="table-if_" select="$table_widths_from_if//table[@id = $table_id]"/>
2966
+ <xsl:variable name="table-if" select="xalan:nodeset($table-if_)"/> -->
2967
+
2968
+ <!-- table='<xsl:copy-of select="$table"/>' -->
2969
+ <!-- table_id='<xsl:value-of select="$table_id"/>\ -->
2970
+ <!-- table-if='<xsl:copy-of select="$table-if"/>' -->
2971
+ <!-- table_widths_from_if='<xsl:copy-of select="$table_widths_from_if"/>' -->
2972
+
2973
+ <xsl:variable name="table_with_cell_widths_">
2974
+ <xsl:apply-templates select="." mode="determine_cell_widths-if"/> <!-- read column's width from IF -->
2975
+ </xsl:variable>
2976
+ <xsl:variable name="table_with_cell_widths" select="xalan:nodeset($table_with_cell_widths_)"/>
2977
+
2978
+ <!-- <xsl:if test="$table_if_debug = 'true'">
2979
+ <xsl:copy-of select="$table_with_cell_widths"/>
2980
+ </xsl:if> -->
2981
+
2982
+
2983
+ <!-- The minimum and maximum cell widths are then used to determine the corresponding minimum and maximum widths for the columns. -->
2984
+
2985
+ <xsl:variable name="column_widths_">
2986
+ <!-- iteration of columns -->
2987
+ <xsl:for-each select="$table_with_cell_widths//tr[1]/td">
2988
+ <xsl:variable name="pos" select="position()"/>
2989
+ <column>
2990
+ <xsl:attribute name="width_max">
2991
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_max">
2992
+ <xsl:sort select="." data-type="number" order="descending"/>
2993
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
2994
+ </xsl:for-each>
2995
+ </xsl:attribute>
2996
+ <xsl:attribute name="width_min">
2997
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_min">
2998
+ <xsl:sort select="." data-type="number" order="descending"/>
2999
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3000
+ </xsl:for-each>
3001
+ </xsl:attribute>
3002
+ </column>
2745
3003
  </xsl:for-each>
2746
3004
  </xsl:variable>
3005
+ <xsl:variable name="column_widths" select="xalan:nodeset($column_widths_)"/>
3006
+
3007
+ <!-- <column_widths>
3008
+ <xsl:copy-of select="$column_widths"/>
3009
+ </column_widths> -->
3010
+
3011
+ <!-- These in turn, are used to find the minimum and maximum width for the table. -->
3012
+ <xsl:variable name="table_widths_">
3013
+ <table>
3014
+ <xsl:attribute name="width_max">
3015
+ <xsl:value-of select="sum($column_widths/column/@width_max)"/>
3016
+ </xsl:attribute>
3017
+ <xsl:attribute name="width_min">
3018
+ <xsl:value-of select="sum($column_widths/column/@width_min)"/>
3019
+ </xsl:attribute>
3020
+ </table>
3021
+ </xsl:variable>
3022
+ <xsl:variable name="table_widths" select="xalan:nodeset($table_widths_)"/>
3023
+
3024
+ <xsl:variable name="page_width">
3025
+ <xsl:choose>
3026
+ <xsl:when test="$parent_table_page-width != ''">
3027
+ <xsl:value-of select="$parent_table_page-width"/>
3028
+ </xsl:when>
3029
+ <xsl:otherwise>
3030
+ <xsl:value-of select="@page-width"/>
3031
+ </xsl:otherwise>
3032
+ </xsl:choose>
3033
+ </xsl:variable>
3034
+
3035
+ <xsl:if test="$table_if_debug = 'true'">
3036
+ <table_width>
3037
+ <xsl:copy-of select="$table_widths"/>
3038
+ </table_width>
3039
+ <debug>$page_width=<xsl:value-of select="$page_width"/></debug>
3040
+ </xsl:if>
3041
+
2747
3042
 
2748
- <xsl:variable name="math_text" select="normalize-space(xalan:nodeset($mathml))"/>
2749
- <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
3043
+ <!-- There are three cases: -->
3044
+ <xsl:choose>
3045
+ <!-- 1. The minimum table width is equal to or wider than the available space -->
3046
+ <xsl:when test="$table_widths/table/@width_min &gt;= $page_width and 1 = 2"> <!-- this condition isn't working see case 3 below -->
3047
+ <!-- call old algorithm -->
3048
+ <case1/>
3049
+ <!-- <xsl:variable name="cols-count" select="count(xalan:nodeset($table)/*/tr[1]/td)"/>
3050
+ <xsl:call-template name="calculate-column-widths-proportional">
3051
+ <xsl:with-param name="cols-count" select="$cols-count"/>
3052
+ <xsl:with-param name="table" select="$table"/>
3053
+ </xsl:call-template> -->
3054
+ </xsl:when>
3055
+ <!-- 2. The maximum table width fits within the available space. In this case, set the columns to their maximum widths. -->
3056
+ <xsl:when test="$table_widths/table/@width_max &lt;= $page_width">
3057
+ <case2/>
3058
+ <autolayout/>
3059
+ <xsl:for-each select="$column_widths/column/@width_max">
3060
+ <column divider="100"><xsl:value-of select="."/></column>
3061
+ </xsl:for-each>
3062
+ </xsl:when>
3063
+ <!-- 3. The maximum width of the table is greater than the available space, but the minimum table width is smaller.
3064
+ In this case, find the difference between the available space and the minimum table width, lets call it W.
3065
+ Lets also call D the difference between maximum and minimum width of the table.
3066
+ For each column, let d be the difference between maximum and minimum width of that column.
3067
+ Now set the column's width to the minimum width plus d times W over D.
3068
+ This makes columns with large differences between minimum and maximum widths wider than columns with smaller differences. -->
3069
+ <xsl:when test="($table_widths/table/@width_max &gt; $page_width and $table_widths/table/@width_min &lt; $page_width) or ($table_widths/table/@width_min &gt;= $page_width)">
3070
+ <!-- difference between the available space and the minimum table width -->
3071
+ <xsl:variable name="W" select="$page_width - $table_widths/table/@width_min"/>
3072
+ <W><xsl:value-of select="$W"/></W>
3073
+ <!-- difference between maximum and minimum width of the table -->
3074
+ <xsl:variable name="D" select="$table_widths/table/@width_max - $table_widths/table/@width_min"/>
3075
+ <D><xsl:value-of select="$D"/></D>
3076
+ <case3/>
3077
+ <autolayout/>
3078
+ <xsl:if test="$table_widths/table/@width_min &gt;= $page_width">
3079
+ <split_keep-within-line>true</split_keep-within-line>
3080
+ </xsl:if>
3081
+ <xsl:for-each select="$column_widths/column">
3082
+ <!-- difference between maximum and minimum width of that column. -->
3083
+ <xsl:variable name="d" select="@width_max - @width_min"/>
3084
+ <d><xsl:value-of select="$d"/></d>
3085
+ <width_min><xsl:value-of select="@width_min"/></width_min>
3086
+ <e><xsl:value-of select="$d * $W div $D"/></e>
3087
+ <!-- set the column's width to the minimum width plus d times W over D. -->
3088
+ <column divider="100">
3089
+ <xsl:value-of select="round(@width_min + $d * $W div $D)"/> <!-- * 10 -->
3090
+ </column>
3091
+ </xsl:for-each>
3092
+
3093
+ </xsl:when>
3094
+ <xsl:otherwise><unknown_case/></xsl:otherwise>
3095
+ </xsl:choose>
3096
+
3097
+ </xsl:template><xsl:template name="get-calculated-column-widths-autolayout-algorithm">
3098
+
3099
+ <!-- if nested 'dl' or 'table' -->
3100
+ <xsl:variable name="parent_table_id" select="normalize-space(ancestor::*[local-name() = 'table' or local-name() = 'dl'][1]/@id)"/>
3101
+ <parent_table_id><xsl:value-of select="$parent_table_id"/></parent_table_id>
3102
+
3103
+ <parent_element><xsl:value-of select="local-name(..)"/></parent_element>
3104
+
3105
+ <xsl:variable name="parent_table_page-width_">
3106
+ <xsl:if test="$parent_table_id != ''">
3107
+ <!-- determine column number in the parent table -->
3108
+ <xsl:variable name="parent_table_column_number">
3109
+ <xsl:choose>
3110
+ <xsl:when test="parent::*[local-name() = 'dd']">2</xsl:when>
3111
+ <xsl:otherwise> <!-- parent is table -->
3112
+ <xsl:value-of select="count(ancestor::*[local-name() = 'td'][1]/preceding-sibling::*[local-name() = 'td']) + 1"/>
3113
+ </xsl:otherwise>
3114
+ </xsl:choose>
3115
+ </xsl:variable>
3116
+ <!-- find table by id in the file 'table_widths' and get all Nth `<column>...</column> -->
3117
+ <xsl:value-of select="$table_widths_from_if_calculated//table[@id = $parent_table_id]/column[number($parent_table_column_number)]"/>
3118
+ </xsl:if>
3119
+ </xsl:variable>
3120
+ <xsl:variable name="parent_table_page-width" select="normalize-space($parent_table_page-width_)"/>
3121
+
3122
+ <!-- get current table id -->
3123
+ <xsl:variable name="table_id" select="@id"/>
3124
+
3125
+ <xsl:choose>
3126
+ <xsl:when test="$parent_table_id = '' or $parent_table_page-width = ''">
3127
+ <!-- find table by id in the file 'table_widths' and get all `<column>...</column> -->
3128
+ <xsl:copy-of select="$table_widths_from_if_calculated//table[@id = $table_id]/node()"/>
3129
+ </xsl:when>
3130
+ <xsl:otherwise>
3131
+ <!-- recalculate columns width based on parent table width -->
3132
+ <xsl:for-each select="$table_widths_from_if//table[@id = $table_id]">
3133
+ <xsl:call-template name="calculate-column-widths-autolayout-algorithm">
3134
+ <xsl:with-param name="parent_table_page-width" select="$parent_table_page-width"/> <!-- padding-left = 2mm = 50000-->
3135
+ </xsl:call-template>
3136
+ </xsl:for-each>
3137
+ </xsl:otherwise>
3138
+ </xsl:choose>
3139
+
3140
+ </xsl:template><xsl:template match="@*|node()" mode="determine_cell_widths-if">
3141
+ <xsl:copy>
3142
+ <xsl:apply-templates select="@*|node()" mode="determine_cell_widths-if"/>
3143
+ </xsl:copy>
3144
+ </xsl:template><xsl:template match="td | th" mode="determine_cell_widths-if">
3145
+ <xsl:copy>
3146
+ <xsl:copy-of select="@*"/>
3147
+
3148
+ <!-- The maximum width is given by the widest line. -->
3149
+ <xsl:attribute name="width_max">
3150
+ <xsl:for-each select="p_len">
3151
+ <xsl:sort select="." data-type="number" order="descending"/>
3152
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3153
+ </xsl:for-each>
3154
+ </xsl:attribute>
3155
+
3156
+ <!-- The minimum width is given by the widest text element (word, image, etc.) -->
3157
+ <xsl:variable name="width_min">
3158
+ <xsl:for-each select="word_len">
3159
+ <xsl:sort select="." data-type="number" order="descending"/>
3160
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3161
+ </xsl:for-each>
3162
+ </xsl:variable>
3163
+ <xsl:attribute name="width_min">
3164
+ <xsl:value-of select="$width_min"/>
3165
+ </xsl:attribute>
3166
+
3167
+ <xsl:if test="$width_min = 0">
3168
+ <xsl:attribute name="width_min">1</xsl:attribute>
3169
+ </xsl:if>
3170
+
3171
+ <xsl:apply-templates select="node()" mode="determine_cell_widths-if"/>
3172
+
3173
+ </xsl:copy>
2750
3174
  </xsl:template><xsl:template match="*[local-name()='thead']">
2751
3175
  <xsl:param name="cols-count"/>
2752
3176
  <fo:table-header>
@@ -2760,12 +3184,18 @@
2760
3184
  <fo:table-row>
2761
3185
  <fo:table-cell number-columns-spanned="{$cols-count}" border-left="1.5pt solid white" border-right="1.5pt solid white" border-top="1.5pt solid white" border-bottom="1.5pt solid black">
2762
3186
 
2763
- <xsl:apply-templates select="ancestor::*[local-name()='table']/*[local-name()='name']">
2764
- <xsl:with-param name="continued">true</xsl:with-param>
2765
- </xsl:apply-templates>
2766
3187
 
2767
3188
 
2768
3189
 
3190
+ <xsl:apply-templates select="ancestor::*[local-name()='table']/*[local-name()='name']">
3191
+ <xsl:with-param name="continued">true</xsl:with-param>
3192
+ </xsl:apply-templates>
3193
+
3194
+
3195
+
3196
+
3197
+
3198
+
2769
3199
  </fo:table-cell>
2770
3200
  </fo:table-row>
2771
3201
  </xsl:template><xsl:template match="*[local-name()='thead']" mode="process_tbody">
@@ -2831,6 +3261,7 @@
2831
3261
  </xsl:for-each>
2832
3262
  </xsl:when>
2833
3263
  <xsl:otherwise>
3264
+ <!-- $colwidths=<xsl:copy-of select="$colwidths"/> -->
2834
3265
  <xsl:call-template name="insertTableColumnWidth">
2835
3266
  <xsl:with-param name="colwidths" select="$colwidths"/>
2836
3267
  </xsl:call-template>
@@ -2865,7 +3296,10 @@
2865
3296
 
2866
3297
 
2867
3298
  <!-- fn processing -->
2868
- <xsl:call-template name="table_fn_display"/>
3299
+
3300
+ <xsl:call-template name="table_fn_display"/>
3301
+
3302
+
2869
3303
 
2870
3304
  <!-- for PAS display Notes after footnotes -->
2871
3305
 
@@ -2875,6 +3309,9 @@
2875
3309
  </fo:table-body>
2876
3310
 
2877
3311
  </fo:table>
3312
+
3313
+
3314
+
2878
3315
  </xsl:if>
2879
3316
  </xsl:template><xsl:template match="*[local-name()='tbody']">
2880
3317
 
@@ -2910,6 +3347,52 @@
2910
3347
 
2911
3348
  </fo:table-body>
2912
3349
 
3350
+ </xsl:template><xsl:template match="/" mode="process_table-if">
3351
+ <xsl:param name="table_or_dl">table</xsl:param>
3352
+ <xsl:apply-templates mode="process_table-if">
3353
+ <xsl:with-param name="table_or_dl" select="$table_or_dl"/>
3354
+ </xsl:apply-templates>
3355
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="process_table-if">
3356
+ <xsl:param name="table_or_dl">table</xsl:param>
3357
+
3358
+ <fo:table-body>
3359
+ <xsl:for-each select="*[local-name() = 'tr']">
3360
+ <xsl:variable name="col_count" select="count(*)"/>
3361
+
3362
+ <!-- iteration for each tr/td -->
3363
+
3364
+ <xsl:choose>
3365
+ <xsl:when test="$table_or_dl = 'table'">
3366
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']/*">
3367
+ <fo:table-row number-columns-spanned="{$col_count}">
3368
+ <!-- <test_table><xsl:copy-of select="."/></test_table> -->
3369
+ <xsl:call-template name="td"/>
3370
+ </fo:table-row>
3371
+ </xsl:for-each>
3372
+ </xsl:when>
3373
+ <xsl:otherwise> <!-- $table_or_dl = 'dl' -->
3374
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']">
3375
+ <xsl:variable name="is_dt" select="position() = 1"/>
3376
+
3377
+ <xsl:for-each select="*">
3378
+ <!-- <test><xsl:copy-of select="."/></test> -->
3379
+ <fo:table-row number-columns-spanned="{$col_count}">
3380
+ <xsl:choose>
3381
+ <xsl:when test="$is_dt">
3382
+ <xsl:call-template name="insert_dt_cell"/>
3383
+ </xsl:when>
3384
+ <xsl:otherwise>
3385
+ <xsl:call-template name="insert_dd_cell"/>
3386
+ </xsl:otherwise>
3387
+ </xsl:choose>
3388
+ </fo:table-row>
3389
+ </xsl:for-each>
3390
+ </xsl:for-each>
3391
+ </xsl:otherwise>
3392
+ </xsl:choose>
3393
+
3394
+ </xsl:for-each>
3395
+ </fo:table-body>
2913
3396
  </xsl:template><xsl:template match="*[local-name()='thead']/*[local-name()='tr']" priority="2">
2914
3397
  <fo:table-row xsl:use-attribute-sets="table-header-row-style">
2915
3398
 
@@ -2917,6 +3400,9 @@
2917
3400
 
2918
3401
 
2919
3402
 
3403
+
3404
+
3405
+
2920
3406
 
2921
3407
 
2922
3408
  <xsl:call-template name="setTableRowAttributes"/>
@@ -2936,6 +3422,8 @@
2936
3422
 
2937
3423
 
2938
3424
 
3425
+
3426
+
2939
3427
  <xsl:call-template name="setTableRowAttributes"/>
2940
3428
  <xsl:apply-templates/>
2941
3429
  </fo:table-row>
@@ -3011,7 +3499,7 @@
3011
3499
  </xsl:choose>
3012
3500
  </xsl:attribute>
3013
3501
  </xsl:if>
3014
- </xsl:template><xsl:template match="*[local-name()='td']">
3502
+ </xsl:template><xsl:template match="*[local-name()='td']" name="td">
3015
3503
  <fo:table-cell xsl:use-attribute-sets="table-cell-style"> <!-- text-align="{@align}" -->
3016
3504
  <xsl:call-template name="setTextAlignment">
3017
3505
  <xsl:with-param name="default">left</xsl:with-param>
@@ -3032,6 +3520,8 @@
3032
3520
 
3033
3521
 
3034
3522
 
3523
+
3524
+
3035
3525
 
3036
3526
 
3037
3527
 
@@ -3050,11 +3540,24 @@
3050
3540
 
3051
3541
  <xsl:call-template name="setTableCellAttributes"/>
3052
3542
 
3543
+ <xsl:if test="$isGenerateTableIF = 'true'">
3544
+ <xsl:attribute name="border">1pt solid black</xsl:attribute> <!-- border is mandatory, to determine page width -->
3545
+ <xsl:attribute name="text-align">left</xsl:attribute>
3546
+ </xsl:if>
3547
+
3053
3548
  <fo:block>
3054
3549
 
3550
+ <xsl:if test="$isGenerateTableIF = 'true'">
3551
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
3552
+ </xsl:if>
3553
+
3554
+
3055
3555
 
3056
3556
 
3057
3557
  <xsl:apply-templates/>
3558
+
3559
+ <xsl:if test="$isGenerateTableIF = 'true'"><fo:inline id="{@id}_end">end</fo:inline></xsl:if> <!-- to determine width of text --> <!-- <xsl:value-of select="$hair_space"/> -->
3560
+
3058
3561
  </fo:block>
3059
3562
  </fo:table-cell>
3060
3563
  </xsl:template><xsl:template match="*[local-name()='table']/*[local-name()='note']" priority="2">
@@ -3099,7 +3602,11 @@
3099
3602
 
3100
3603
  <xsl:variable name="gen_id" select="generate-id(.)"/>
3101
3604
  <xsl:variable name="lang" select="ancestor::*[contains(local-name(), '-standard')]/*[local-name()='bibdata']//*[local-name()='language'][@current = 'true']"/>
3102
- <xsl:variable name="reference" select="@reference"/>
3605
+ <xsl:variable name="reference_">
3606
+ <xsl:value-of select="@reference"/>
3607
+ <xsl:if test="normalize-space(@reference) = ''"><xsl:value-of select="$gen_id"/></xsl:if>
3608
+ </xsl:variable>
3609
+ <xsl:variable name="reference" select="normalize-space($reference_)"/>
3103
3610
  <!-- fn sequence number in document -->
3104
3611
  <xsl:variable name="current_fn_number">
3105
3612
  <xsl:choose>
@@ -3174,7 +3681,7 @@
3174
3681
  <xsl:copy-of select="node()"/>
3175
3682
  </fn>
3176
3683
  </xsl:for-each>
3177
- <xsl:for-each select="ancestor::*[contains(local-name(), '-standard')]/*[local-name()='preface']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='sections']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='annex'] | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='bibliography']/*">
3684
+ <xsl:for-each select="ancestor::*[contains(local-name(), '-standard')]/*[local-name()='boilerplate']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='preface']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='sections']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='annex'] | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='bibliography']/*">
3178
3685
  <xsl:sort select="@displayorder" data-type="number"/>
3179
3686
  <xsl:for-each select=".//*[local-name() = 'bibitem'][ancestor::*[local-name() = 'references']]/*[local-name() = 'note'] | .//*[local-name() = 'fn'][not(ancestor::*[(local-name() = 'table' or local-name() = 'figure') and not(ancestor::*[local-name() = 'name'])])][generate-id(.)=generate-id(key('kfn',@reference)[1])]">
3180
3687
  <!-- copy unique fn -->
@@ -3255,9 +3762,9 @@
3255
3762
  <!-- current hierarchy is 'figure' element -->
3256
3763
  <xsl:variable name="following_dl_colwidths">
3257
3764
  <xsl:if test="*[local-name() = 'dl']"><!-- if there is a 'dl', then set the same columns width as for 'dl' -->
3258
- <xsl:variable name="html-table">
3259
- <xsl:variable name="doc_ns">
3260
-
3765
+ <xsl:variable name="simple-table">
3766
+ <!-- <xsl:variable name="doc_ns">
3767
+ <xsl:if test="$namespace = 'bipm'">bipm</xsl:if>
3261
3768
  </xsl:variable>
3262
3769
  <xsl:variable name="ns">
3263
3770
  <xsl:choose>
@@ -3268,7 +3775,7 @@
3268
3775
  <xsl:value-of select="substring-before(name(/*), '-')"/>
3269
3776
  </xsl:otherwise>
3270
3777
  </xsl:choose>
3271
- </xsl:variable>
3778
+ </xsl:variable> -->
3272
3779
 
3273
3780
  <xsl:for-each select="*[local-name() = 'dl'][1]">
3274
3781
  <tbody>
@@ -3279,7 +3786,7 @@
3279
3786
 
3280
3787
  <xsl:call-template name="calculate-column-widths">
3281
3788
  <xsl:with-param name="cols-count" select="2"/>
3282
- <xsl:with-param name="table" select="$html-table"/>
3789
+ <xsl:with-param name="table" select="$simple-table"/>
3283
3790
  </xsl:call-template>
3284
3791
 
3285
3792
  </xsl:if>
@@ -3454,12 +3961,31 @@
3454
3961
 
3455
3962
 
3456
3963
 
3964
+
3965
+ <xsl:if test="ancestor::*[local-name() = 'dd' or local-name() = 'td']">
3966
+ <xsl:attribute name="margin-top">0</xsl:attribute>
3967
+ </xsl:if>
3968
+
3457
3969
  <fo:block>
3458
3970
 
3459
3971
 
3460
3972
 
3461
3973
 
3974
+ <xsl:apply-templates select="*[local-name() = 'name']">
3975
+ <xsl:with-param name="process">true</xsl:with-param>
3976
+ </xsl:apply-templates>
3977
+
3978
+ <xsl:if test="$isGenerateTableIF = 'true'">
3979
+ <!-- to determine start of table -->
3980
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
3981
+ </xsl:if>
3982
+
3462
3983
  <fo:table width="95%" table-layout="fixed">
3984
+
3985
+ <xsl:if test="$isGenerateTableIF = 'true'">
3986
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
3987
+ </xsl:if>
3988
+
3463
3989
 
3464
3990
  <xsl:choose>
3465
3991
  <xsl:when test="normalize-space($key_iso) = 'true' and $parent = 'formula'"/>
@@ -3468,69 +3994,173 @@
3468
3994
 
3469
3995
  </xsl:when>
3470
3996
  </xsl:choose>
3471
- <!-- create virtual html table for dl/[dt and dd] -->
3472
- <xsl:variable name="html-table">
3473
- <xsl:variable name="doc_ns">
3997
+
3998
+
3999
+
4000
+ <xsl:choose>
4001
+ <xsl:when test="$isGenerateTableIF = 'true'">
4002
+ <!-- generate IF for table widths -->
4003
+ <!-- example:
4004
+ <tr>
4005
+ <td valign="top" align="left" id="tab-symdu_1_1">
4006
+ <p>Symbol</p>
4007
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
4008
+ </td>
4009
+ <td valign="top" align="left" id="tab-symdu_1_2">
4010
+ <p>Description</p>
4011
+ <word id="tab-symdu_1_2_word_1">Description</word>
4012
+ </td>
4013
+ </tr>
4014
+ -->
3474
4015
 
3475
- </xsl:variable>
3476
- <xsl:variable name="ns">
3477
- <xsl:choose>
3478
- <xsl:when test="normalize-space($doc_ns) != ''">
3479
- <xsl:value-of select="normalize-space($doc_ns)"/>
3480
- </xsl:when>
3481
- <xsl:otherwise>
3482
- <xsl:value-of select="substring-before(name(/*), '-')"/>
3483
- </xsl:otherwise>
3484
- </xsl:choose>
3485
- </xsl:variable>
3486
- <tbody>
3487
- <xsl:apply-templates mode="dl"/>
3488
- </tbody>
3489
- </xsl:variable>
3490
- <!-- DEBUG: html-table<xsl:copy-of select="$html-table"/> -->
3491
- <xsl:variable name="colwidths">
3492
- <xsl:call-template name="calculate-column-widths">
3493
- <xsl:with-param name="cols-count" select="2"/>
3494
- <xsl:with-param name="table" select="$html-table"/>
3495
- </xsl:call-template>
3496
- </xsl:variable>
3497
- <!-- DEBUG: colwidths=<xsl:copy-of select="$colwidths"/> -->
3498
- <xsl:variable name="maxlength_dt">
3499
- <xsl:call-template name="getMaxLength_dt"/>
3500
- </xsl:variable>
3501
- <xsl:variable name="isContainsKeepTogetherTag_">
3502
- false
3503
- </xsl:variable>
3504
- <xsl:variable name="isContainsKeepTogetherTag" select="normalize-space($isContainsKeepTogetherTag_)"/>
3505
- <!-- isContainsExpressReference=<xsl:value-of select="$isContainsExpressReference"/> -->
3506
- <xsl:call-template name="setColumnWidth_dl">
3507
- <xsl:with-param name="colwidths" select="$colwidths"/>
3508
- <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
3509
- <xsl:with-param name="isContainsKeepTogetherTag" select="$isContainsKeepTogetherTag"/>
3510
- </xsl:call-template>
4016
+ <!-- create virtual html table for dl/[dt and dd] -->
4017
+ <xsl:variable name="simple-table">
4018
+
4019
+ <xsl:variable name="dl_table">
4020
+ <tbody>
4021
+ <xsl:apply-templates mode="dl_if">
4022
+ <xsl:with-param name="id" select="@id"/>
4023
+ </xsl:apply-templates>
4024
+ </tbody>
4025
+ </xsl:variable>
4026
+
4027
+ <!-- dl_table='<xsl:copy-of select="$dl_table"/>' -->
4028
+
4029
+ <!-- Step: replace <br/> to <p>...</p> -->
4030
+ <xsl:variable name="table_without_br">
4031
+ <xsl:apply-templates select="xalan:nodeset($dl_table)" mode="table-without-br"/>
4032
+ </xsl:variable>
4033
+
4034
+ <!-- table_without_br='<xsl:copy-of select="$table_without_br"/>' -->
4035
+
4036
+ <!-- Step: add id to each cell -->
4037
+ <!-- add <word>...</word> for each word, image, math -->
4038
+ <xsl:variable name="simple-table-id">
4039
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-id">
4040
+ <xsl:with-param name="id" select="@id"/>
4041
+ </xsl:apply-templates>
4042
+ </xsl:variable>
4043
+
4044
+ <!-- simple-table-id='<xsl:copy-of select="$simple-table-id"/>' -->
4045
+
4046
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
4047
+
4048
+ </xsl:variable>
4049
+
4050
+ <!-- DEBUG: simple-table<xsl:copy-of select="$simple-table"/> -->
4051
+
4052
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if">
4053
+ <xsl:with-param name="table_or_dl">dl</xsl:with-param>
4054
+ </xsl:apply-templates>
4055
+
4056
+ </xsl:when>
4057
+ <xsl:otherwise>
3511
4058
 
3512
- <fo:table-body>
3513
- <xsl:apply-templates>
3514
- <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
3515
- </xsl:apply-templates>
3516
- </fo:table-body>
4059
+ <xsl:variable name="simple-table">
4060
+
4061
+ <xsl:variable name="dl_table">
4062
+ <tbody>
4063
+ <xsl:apply-templates mode="dl">
4064
+ <xsl:with-param name="id" select="@id"/>
4065
+ </xsl:apply-templates>
4066
+ </tbody>
4067
+ </xsl:variable>
4068
+
4069
+ <xsl:copy-of select="$dl_table"/>
4070
+ </xsl:variable>
4071
+
4072
+ <xsl:variable name="colwidths">
4073
+ <xsl:call-template name="calculate-column-widths">
4074
+ <xsl:with-param name="cols-count" select="2"/>
4075
+ <xsl:with-param name="table" select="$simple-table"/>
4076
+ </xsl:call-template>
4077
+ </xsl:variable>
4078
+
4079
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
4080
+ DEBUG
4081
+ colwidths=<xsl:copy-of select="$colwidths"/>
4082
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
4083
+
4084
+ <!-- colwidths=<xsl:copy-of select="$colwidths"/> -->
4085
+
4086
+ <xsl:variable name="maxlength_dt">
4087
+ <xsl:call-template name="getMaxLength_dt"/>
4088
+ </xsl:variable>
4089
+
4090
+ <xsl:variable name="isContainsKeepTogetherTag_">
4091
+ false
4092
+ </xsl:variable>
4093
+ <xsl:variable name="isContainsKeepTogetherTag" select="normalize-space($isContainsKeepTogetherTag_)"/>
4094
+ <!-- isContainsExpressReference=<xsl:value-of select="$isContainsExpressReference"/> -->
4095
+
4096
+
4097
+ <xsl:call-template name="setColumnWidth_dl">
4098
+ <xsl:with-param name="colwidths" select="$colwidths"/>
4099
+ <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
4100
+ <xsl:with-param name="isContainsKeepTogetherTag" select="$isContainsKeepTogetherTag"/>
4101
+ </xsl:call-template>
4102
+
4103
+ <fo:table-body>
4104
+
4105
+ <!-- DEBUG -->
4106
+ <xsl:if test="$table_if_debug = 'true'">
4107
+ <fo:table-row>
4108
+ <fo:table-cell number-columns-spanned="2" font-size="60%">
4109
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
4110
+ </fo:table-cell>
4111
+ </fo:table-row>
4112
+ </xsl:if>
4113
+
4114
+ <xsl:apply-templates>
4115
+ <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
4116
+ <xsl:with-param name="split_keep-within-line" select="xalan:nodeset($colwidths)/split_keep-within-line"/>
4117
+ </xsl:apply-templates>
4118
+
4119
+ </fo:table-body>
4120
+ </xsl:otherwise>
4121
+ </xsl:choose>
3517
4122
  </fo:table>
3518
4123
  </fo:block>
3519
4124
  </fo:block>
3520
4125
  </xsl:if> <!-- END: a few components -->
3521
4126
  </fo:block-container>
3522
4127
  </fo:block-container>
4128
+
4129
+ <xsl:if test="$isGenerateTableIF = 'true'"> <!-- process nested 'dl' -->
4130
+ <xsl:apply-templates select="*[local-name() = 'dd']/*[local-name() = 'dl']"/>
4131
+ </xsl:if>
4132
+
4133
+ </xsl:template><xsl:template match="*[local-name() = 'dl']/*[local-name() = 'name']">
4134
+ <xsl:param name="process">false</xsl:param>
4135
+ <xsl:if test="$process = 'true'">
4136
+ <fo:block xsl:use-attribute-sets="dl-name-style">
4137
+ <xsl:apply-templates/>
4138
+ </fo:block>
4139
+ </xsl:if>
3523
4140
  </xsl:template><xsl:template name="setColumnWidth_dl">
3524
4141
  <xsl:param name="colwidths"/>
3525
4142
  <xsl:param name="maxlength_dt"/>
3526
4143
  <xsl:param name="isContainsKeepTogetherTag"/>
4144
+
4145
+ <!-- <colwidths><xsl:copy-of select="$colwidths"/></colwidths> -->
4146
+
3527
4147
  <xsl:choose>
4148
+ <xsl:when test="xalan:nodeset($colwidths)/autolayout">
4149
+ <xsl:call-template name="insertTableColumnWidth">
4150
+ <xsl:with-param name="colwidths" select="$colwidths"/>
4151
+ </xsl:call-template>
4152
+ </xsl:when>
3528
4153
  <xsl:when test="ancestor::*[local-name()='dl']"><!-- second level, i.e. inlined table -->
3529
4154
  <fo:table-column column-width="50%"/>
3530
4155
  <fo:table-column column-width="50%"/>
3531
4156
  </xsl:when>
3532
4157
  <xsl:otherwise>
3533
4158
  <xsl:choose>
4159
+ <xsl:when test="xalan:nodeset($colwidths)/autolayout">
4160
+ <xsl:call-template name="insertTableColumnWidth">
4161
+ <xsl:with-param name="colwidths" select="$colwidths"/>
4162
+ </xsl:call-template>
4163
+ </xsl:when>
3534
4164
  <xsl:when test="$isContainsKeepTogetherTag">
3535
4165
  <xsl:call-template name="insertTableColumnWidth">
3536
4166
  <xsl:with-param name="colwidths" select="$colwidths"/>
@@ -3575,13 +4205,19 @@
3575
4205
  </xsl:choose>
3576
4206
  </xsl:template><xsl:template name="insertTableColumnWidth">
3577
4207
  <xsl:param name="colwidths"/>
4208
+
3578
4209
  <xsl:for-each select="xalan:nodeset($colwidths)//column">
3579
4210
  <xsl:choose>
3580
4211
  <xsl:when test=". = 1 or . = 0">
3581
4212
  <fo:table-column column-width="proportional-column-width(2)"/>
3582
4213
  </xsl:when>
3583
4214
  <xsl:otherwise>
3584
- <fo:table-column column-width="proportional-column-width({.})"/>
4215
+ <!-- <fo:table-column column-width="proportional-column-width({.})"/> -->
4216
+ <xsl:variable name="divider">
4217
+ <xsl:value-of select="@divider"/>
4218
+ <xsl:if test="not(@divider)">1</xsl:if>
4219
+ </xsl:variable>
4220
+ <fo:table-column column-width="proportional-column-width({round(. div $divider)})"/>
3585
4221
  </xsl:otherwise>
3586
4222
  </xsl:choose>
3587
4223
  </xsl:for-each>
@@ -3643,65 +4279,157 @@
3643
4279
  </fo:table-cell>
3644
4280
  </fo:table-row>
3645
4281
  </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl">
4282
+ <xsl:param name="id"/>
4283
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
3646
4284
  <tr>
3647
4285
  <td>
4286
+ <xsl:attribute name="id">
4287
+ <xsl:value-of select="concat($id,'_',$row_number,'_1')"/>
4288
+ </xsl:attribute>
3648
4289
  <xsl:apply-templates/>
3649
4290
  </td>
3650
4291
  <td>
4292
+ <xsl:attribute name="id">
4293
+ <xsl:value-of select="concat($id,'_',$row_number,'_2')"/>
4294
+ </xsl:attribute>
4295
+
4296
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
4297
+ <xsl:with-param name="process">true</xsl:with-param>
4298
+ </xsl:apply-templates>
4299
+
4300
+ </td>
4301
+ </tr>
4302
+
4303
+ </xsl:template><xsl:template match="*[local-name()='dt']">
4304
+ <xsl:param name="key_iso"/>
4305
+ <xsl:param name="split_keep-within-line"/>
4306
+
4307
+ <fo:table-row xsl:use-attribute-sets="dt-row-style">
4308
+ <xsl:call-template name="insert_dt_cell">
4309
+ <xsl:with-param name="key_iso" select="$key_iso"/>
4310
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
4311
+ </xsl:call-template>
4312
+ <xsl:for-each select="following-sibling::*[local-name()='dd'][1]">
4313
+ <xsl:call-template name="insert_dd_cell">
4314
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
4315
+ </xsl:call-template>
4316
+ </xsl:for-each>
4317
+ </fo:table-row>
4318
+ </xsl:template><xsl:template name="insert_dt_cell">
4319
+ <xsl:param name="key_iso"/>
4320
+ <xsl:param name="split_keep-within-line"/>
4321
+ <fo:table-cell xsl:use-attribute-sets="dt-cell-style">
4322
+
4323
+ <xsl:if test="$isGenerateTableIF = 'true'">
4324
+ <!-- border is mandatory, to calculate real width -->
4325
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
4326
+ <xsl:attribute name="text-align">left</xsl:attribute>
4327
+ </xsl:if>
4328
+
4329
+
4330
+ <fo:block xsl:use-attribute-sets="dt-block-style">
4331
+ <xsl:copy-of select="@id"/>
4332
+
4333
+ <xsl:if test="normalize-space($key_iso) = 'true'">
4334
+ <xsl:attribute name="margin-top">0</xsl:attribute>
4335
+ </xsl:if>
4336
+
4337
+
4338
+
4339
+ <xsl:apply-templates>
4340
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
4341
+ </xsl:apply-templates>
3651
4342
 
3652
- <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
3653
- <xsl:with-param name="process">true</xsl:with-param>
3654
- </xsl:apply-templates>
3655
-
3656
- </td>
3657
- </tr>
4343
+ <xsl:if test="$isGenerateTableIF = 'true'"><fo:inline id="{@id}_end">end</fo:inline></xsl:if> <!-- to determine width of text --> <!-- <xsl:value-of select="$hair_space"/> -->
4344
+
4345
+ </fo:block>
4346
+ </fo:table-cell>
4347
+ </xsl:template><xsl:template name="insert_dd_cell">
4348
+ <xsl:param name="split_keep-within-line"/>
4349
+ <fo:table-cell xsl:use-attribute-sets="dd-cell-style">
3658
4350
 
3659
- </xsl:template><xsl:template match="*[local-name()='dt']">
3660
- <xsl:param name="key_iso"/>
4351
+ <xsl:if test="$isGenerateTableIF = 'true'">
4352
+ <!-- border is mandatory, to calculate real width -->
4353
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
4354
+ </xsl:if>
3661
4355
 
3662
- <fo:table-row xsl:use-attribute-sets="dt-row-style">
3663
- <fo:table-cell>
4356
+ <fo:block>
4357
+
4358
+ <xsl:if test="$isGenerateTableIF = 'true'">
4359
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
4360
+ </xsl:if>
4361
+
3664
4362
 
3665
- <fo:block xsl:use-attribute-sets="dt-style">
3666
- <xsl:copy-of select="@id"/>
3667
-
3668
- <xsl:if test="normalize-space($key_iso) = 'true'">
3669
- <xsl:attribute name="margin-top">0</xsl:attribute>
3670
- </xsl:if>
3671
-
3672
-
3673
-
3674
- <xsl:apply-templates/>
3675
- </fo:block>
3676
- </fo:table-cell>
3677
- <fo:table-cell>
3678
- <fo:block>
3679
-
3680
4363
 
3681
- <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
3682
- <xsl:with-param name="process">true</xsl:with-param>
3683
- </xsl:apply-templates>
3684
- </fo:block>
3685
- </fo:table-cell>
3686
- </fo:table-row>
4364
+ <xsl:choose>
4365
+ <xsl:when test="$isGenerateTableIF = 'true'">
4366
+ <xsl:apply-templates> <!-- following-sibling::*[local-name()='dd'][1] -->
4367
+ <xsl:with-param name="process">true</xsl:with-param>
4368
+ </xsl:apply-templates>
4369
+ </xsl:when>
4370
+ <xsl:otherwise>
4371
+ <xsl:apply-templates select="."> <!-- following-sibling::*[local-name()='dd'][1] -->
4372
+ <xsl:with-param name="process">true</xsl:with-param>
4373
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
4374
+ </xsl:apply-templates>
4375
+ </xsl:otherwise>
4376
+
4377
+ </xsl:choose>
4378
+
4379
+ <xsl:if test="$isGenerateTableIF = 'true'"><fo:inline id="{@id}_end">end</fo:inline></xsl:if> <!-- to determine width of text --> <!-- <xsl:value-of select="$hair_space"/> -->
4380
+
4381
+ </fo:block>
4382
+ </fo:table-cell>
3687
4383
  </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl"/><xsl:template match="*[local-name()='dd']" mode="dl_process">
3688
4384
  <xsl:apply-templates/>
3689
4385
  </xsl:template><xsl:template match="*[local-name()='dd']">
3690
4386
  <xsl:param name="process">false</xsl:param>
4387
+ <xsl:param name="split_keep-within-line"/>
3691
4388
  <xsl:if test="$process = 'true'">
3692
4389
  <xsl:apply-templates select="@language"/>
3693
- <xsl:apply-templates/>
4390
+ <xsl:apply-templates>
4391
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
4392
+ </xsl:apply-templates>
3694
4393
  </xsl:if>
3695
4394
  </xsl:template><xsl:template match="*[local-name()='dd']/*[local-name()='p']" mode="inline">
3696
4395
  <fo:inline><xsl:text> </xsl:text><xsl:apply-templates/></fo:inline>
3697
- </xsl:template><xsl:template match="*[local-name()='em']">
4396
+ </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl_if">
4397
+ <xsl:param name="id"/>
4398
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
4399
+ <tr>
4400
+ <td>
4401
+ <xsl:copy-of select="node()"/>
4402
+ </td>
4403
+ <td>
4404
+
4405
+ <xsl:copy-of select="following-sibling::*[local-name()='dd'][1]/node()[not(local-name() = 'dl')]"/>
4406
+
4407
+ <!-- get paragraphs from nested 'dl' -->
4408
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]/*[local-name() = 'dl']" mode="dl_if_nested"/>
4409
+
4410
+
4411
+ </td>
4412
+ </tr>
4413
+
4414
+ </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl_if"/><xsl:template match="*[local-name()='dl']" mode="dl_if_nested">
4415
+ <xsl:for-each select="*[local-name() = 'dt']">
4416
+ <p>
4417
+ <xsl:copy-of select="node()"/>
4418
+ <xsl:text> </xsl:text>
4419
+ <xsl:copy-of select="following-sibling::*[local-name()='dd'][1]/*[local-name() = 'p']/node()"/>
4420
+ </p>
4421
+ </xsl:for-each>
4422
+ </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl_if_nested"/><xsl:template match="*[local-name()='em']">
3698
4423
  <fo:inline font-style="italic">
3699
4424
  <xsl:apply-templates/>
3700
4425
  </fo:inline>
3701
4426
  </xsl:template><xsl:template match="*[local-name()='strong'] | *[local-name()='b']">
4427
+ <xsl:param name="split_keep-within-line"/>
3702
4428
  <fo:inline font-weight="bold">
3703
4429
 
3704
- <xsl:apply-templates/>
4430
+ <xsl:apply-templates>
4431
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
4432
+ </xsl:apply-templates>
3705
4433
  </fo:inline>
3706
4434
  </xsl:template><xsl:template match="*[local-name()='padding']">
3707
4435
  <fo:inline padding-right="{@value}"> </fo:inline>
@@ -3722,7 +4450,7 @@
3722
4450
 
3723
4451
 
3724
4452
 
3725
-
4453
+ <!-- 10 -->
3726
4454
 
3727
4455
 
3728
4456
 
@@ -3902,6 +4630,10 @@
3902
4630
  <xsl:param name="text"/>
3903
4631
  <xsl:param name="separator" select="' '"/>
3904
4632
  <xsl:choose>
4633
+
4634
+ <xsl:when test="$isGenerateTableIF = 'true' and not(contains($text, $separator))">
4635
+ <word><xsl:value-of select="normalize-space($text)"/></word>
4636
+ </xsl:when>
3905
4637
  <xsl:when test="not(contains($text, $separator))">
3906
4638
  <word>
3907
4639
  <xsl:variable name="len_str_tmp" select="string-length(normalize-space($text))"/>
@@ -3946,13 +4678,66 @@
3946
4678
  </xsl:when>
3947
4679
  <xsl:otherwise>
3948
4680
  <word>
3949
- <xsl:value-of select="string-length(normalize-space(substring-before($text, $separator)))"/>
4681
+ <xsl:variable name="word" select="normalize-space(substring-before($text, $separator))"/>
4682
+ <xsl:choose>
4683
+ <xsl:when test="$isGenerateTableIF = 'true'">
4684
+ <xsl:value-of select="$word"/>
4685
+ </xsl:when>
4686
+ <xsl:otherwise>
4687
+ <xsl:value-of select="string-length($word)"/>
4688
+ </xsl:otherwise>
4689
+ </xsl:choose>
3950
4690
  </word>
3951
4691
  <xsl:call-template name="tokenize">
3952
4692
  <xsl:with-param name="text" select="substring-after($text, $separator)"/>
3953
4693
  </xsl:call-template>
3954
4694
  </xsl:otherwise>
3955
4695
  </xsl:choose>
4696
+ </xsl:template><xsl:template name="tokenize_with_tags">
4697
+ <xsl:param name="tags"/>
4698
+ <xsl:param name="text"/>
4699
+ <xsl:param name="separator" select="' '"/>
4700
+ <xsl:choose>
4701
+
4702
+ <xsl:when test="not(contains($text, $separator))">
4703
+ <word>
4704
+ <xsl:call-template name="enclose_text_in_tags">
4705
+ <xsl:with-param name="text" select="normalize-space($text)"/>
4706
+ <xsl:with-param name="tags" select="$tags"/>
4707
+ </xsl:call-template>
4708
+ </word>
4709
+ </xsl:when>
4710
+ <xsl:otherwise>
4711
+ <word>
4712
+ <xsl:call-template name="enclose_text_in_tags">
4713
+ <xsl:with-param name="text" select="normalize-space(substring-before($text, $separator))"/>
4714
+ <xsl:with-param name="tags" select="$tags"/>
4715
+ </xsl:call-template>
4716
+ </word>
4717
+ <xsl:call-template name="tokenize_with_tags">
4718
+ <xsl:with-param name="text" select="substring-after($text, $separator)"/>
4719
+ </xsl:call-template>
4720
+ </xsl:otherwise>
4721
+ </xsl:choose>
4722
+ </xsl:template><xsl:template name="enclose_text_in_tags">
4723
+ <xsl:param name="text"/>
4724
+ <xsl:param name="tags"/>
4725
+ <xsl:param name="num">1</xsl:param> <!-- default (start) value -->
4726
+
4727
+ <xsl:variable name="tag_name" select="normalize-space(xalan:nodeset($tags)//tag[$num])"/>
4728
+
4729
+ <xsl:choose>
4730
+ <xsl:when test="$tag_name = ''"><xsl:value-of select="$text"/></xsl:when>
4731
+ <xsl:otherwise>
4732
+ <xsl:element name="{$tag_name}">
4733
+ <xsl:call-template name="enclose_text_in_tags">
4734
+ <xsl:with-param name="text" select="$text"/>
4735
+ <xsl:with-param name="tags" select="$tags"/>
4736
+ <xsl:with-param name="num" select="$num + 1"/>
4737
+ </xsl:call-template>
4738
+ </xsl:element>
4739
+ </xsl:otherwise>
4740
+ </xsl:choose>
3956
4741
  </xsl:template><xsl:template name="max_length">
3957
4742
  <xsl:param name="words"/>
3958
4743
  <xsl:for-each select="$words//word">
@@ -4053,12 +4838,19 @@
4053
4838
  </xsl:otherwise>
4054
4839
  </xsl:choose>
4055
4840
  </xsl:template><xsl:template name="getSimpleTable">
4841
+ <xsl:param name="id"/>
4842
+
4056
4843
  <xsl:variable name="simple-table">
4057
4844
 
4845
+ <!-- Step 0. replace <br/> to <p>...</p> -->
4846
+ <xsl:variable name="table_without_br">
4847
+ <xsl:apply-templates mode="table-without-br"/>
4848
+ </xsl:variable>
4849
+
4058
4850
  <!-- Step 1. colspan processing -->
4059
4851
  <xsl:variable name="simple-table-colspan">
4060
4852
  <tbody>
4061
- <xsl:apply-templates mode="simple-table-colspan"/>
4853
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-colspan"/>
4062
4854
  </tbody>
4063
4855
  </xsl:variable>
4064
4856
 
@@ -4067,10 +4859,67 @@
4067
4859
  <xsl:apply-templates select="xalan:nodeset($simple-table-colspan)" mode="simple-table-rowspan"/>
4068
4860
  </xsl:variable>
4069
4861
 
4070
- <xsl:copy-of select="xalan:nodeset($simple-table-rowspan)"/>
4071
-
4862
+ <!-- Step 3: add id to each cell -->
4863
+ <!-- add <word>...</word> for each word, image, math -->
4864
+ <xsl:variable name="simple-table-id">
4865
+ <xsl:apply-templates select="xalan:nodeset($simple-table-rowspan)" mode="simple-table-id">
4866
+ <xsl:with-param name="id" select="$id"/>
4867
+ </xsl:apply-templates>
4868
+ </xsl:variable>
4869
+
4870
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
4871
+
4072
4872
  </xsl:variable>
4073
4873
  <xsl:copy-of select="$simple-table"/>
4874
+ </xsl:template><xsl:template match="@*|node()" mode="table-without-br">
4875
+ <xsl:copy>
4876
+ <xsl:apply-templates select="@*|node()" mode="table-without-br"/>
4877
+ </xsl:copy>
4878
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name() = 'td'][not(*[local-name()='br']) and not(*[local-name()='p'])]" mode="table-without-br">
4879
+ <xsl:copy>
4880
+ <xsl:copy-of select="@*"/>
4881
+ <p>
4882
+ <xsl:copy-of select="node()"/>
4883
+ </p>
4884
+ </xsl:copy>
4885
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td'][*[local-name()='br']]" mode="table-without-br">
4886
+ <xsl:copy>
4887
+ <xsl:copy-of select="@*"/>
4888
+ <xsl:for-each select="*[local-name()='br']">
4889
+ <xsl:variable name="current_id" select="generate-id()"/>
4890
+ <p>
4891
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
4892
+ <xsl:copy-of select="."/>
4893
+ </xsl:for-each>
4894
+ </p>
4895
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
4896
+ <p>
4897
+ <xsl:for-each select="following-sibling::node()">
4898
+ <xsl:copy-of select="."/>
4899
+ </xsl:for-each>
4900
+ </p>
4901
+ </xsl:if>
4902
+ </xsl:for-each>
4903
+ </xsl:copy>
4904
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']/*[local-name() = 'p'][*[local-name()='br']]" mode="table-without-br">
4905
+ <xsl:for-each select="*[local-name()='br']">
4906
+ <xsl:variable name="current_id" select="generate-id()"/>
4907
+ <p>
4908
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
4909
+ <xsl:copy-of select="."/>
4910
+ </xsl:for-each>
4911
+ </p>
4912
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
4913
+ <p>
4914
+ <xsl:for-each select="following-sibling::node()">
4915
+ <xsl:copy-of select="."/>
4916
+ </xsl:for-each>
4917
+ </p>
4918
+ </xsl:if>
4919
+ </xsl:for-each>
4920
+ </xsl:template><xsl:template match="text()[not(ancestor::*[local-name() = 'sourcecode'])]" mode="table-without-br">
4921
+ <xsl:variable name="text" select="translate(.,'&#9;&#10;&#13;','')"/>
4922
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new($text),' {2,}',' ')"/>
4074
4923
  </xsl:template><xsl:template match="*[local-name()='thead'] | *[local-name()='tbody']" mode="simple-table-colspan">
4075
4924
  <xsl:apply-templates mode="simple-table-colspan"/>
4076
4925
  </xsl:template><xsl:template match="*[local-name()='fn']" mode="simple-table-colspan"/><xsl:template match="*[local-name()='th'] | *[local-name()='td']" mode="simple-table-colspan">
@@ -4160,6 +5009,126 @@
4160
5009
  <xsl:apply-templates select="following-sibling::tr[1]" mode="simple-table-rowspan">
4161
5010
  <xsl:with-param name="previousRow" select="$newRow"/>
4162
5011
  </xsl:apply-templates>
5012
+ </xsl:template><xsl:template match="/" mode="simple-table-id">
5013
+ <xsl:param name="id"/>
5014
+ <xsl:variable name="id_prefixed" select="concat('table_if_',$id)"/> <!-- table id prefixed by 'table_if_' to simple search in IF -->
5015
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
5016
+ <xsl:with-param name="id" select="$id_prefixed"/>
5017
+ </xsl:apply-templates>
5018
+ </xsl:template><xsl:template match="@*|node()" mode="simple-table-id">
5019
+ <xsl:param name="id"/>
5020
+ <xsl:copy>
5021
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
5022
+ <xsl:with-param name="id" select="$id"/>
5023
+ </xsl:apply-templates>
5024
+ </xsl:copy>
5025
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="simple-table-id">
5026
+ <xsl:param name="id"/>
5027
+ <xsl:copy>
5028
+ <xsl:copy-of select="@*"/>
5029
+ <xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
5030
+ <xsl:apply-templates select="node()" mode="simple-table-id">
5031
+ <xsl:with-param name="id" select="$id"/>
5032
+ </xsl:apply-templates>
5033
+ </xsl:copy>
5034
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']" mode="simple-table-id">
5035
+ <xsl:param name="id"/>
5036
+ <xsl:copy>
5037
+ <xsl:copy-of select="@*"/>
5038
+ <xsl:variable name="row_number" select="count(../preceding-sibling::*) + 1"/>
5039
+ <xsl:variable name="col_number" select="count(preceding-sibling::*) + 1"/>
5040
+ <xsl:attribute name="id">
5041
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number)"/>
5042
+ </xsl:attribute>
5043
+
5044
+ <xsl:for-each select="*[local-name() = 'p']">
5045
+ <xsl:copy>
5046
+ <xsl:copy-of select="@*"/>
5047
+ <xsl:variable name="p_num" select="count(preceding-sibling::*[local-name() = 'p']) + 1"/>
5048
+ <xsl:attribute name="id">
5049
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_p_',$p_num)"/>
5050
+ </xsl:attribute>
5051
+
5052
+ <xsl:copy-of select="node()"/>
5053
+ </xsl:copy>
5054
+ </xsl:for-each>
5055
+
5056
+
5057
+ <xsl:if test="$isGenerateTableIF = 'true'"> <!-- split each paragraph to words, image, math -->
5058
+
5059
+ <xsl:variable name="td_text">
5060
+ <xsl:apply-templates select="." mode="td_text_with_formatting"/>
5061
+ </xsl:variable>
5062
+
5063
+ <!-- td_text='<xsl:copy-of select="$td_text"/>' -->
5064
+
5065
+ <xsl:variable name="words">
5066
+ <xsl:for-each select=".//*[local-name() = 'image' or local-name() = 'stem']">
5067
+ <word>
5068
+ <xsl:copy-of select="."/>
5069
+ </word>
5070
+ </xsl:for-each>
5071
+
5072
+ <xsl:for-each select="xalan:nodeset($td_text)//*[local-name() = 'word'][normalize-space() != '']">
5073
+ <xsl:copy-of select="."/>
5074
+ </xsl:for-each>
5075
+
5076
+ </xsl:variable>
5077
+
5078
+ <xsl:for-each select="xalan:nodeset($words)/word">
5079
+ <xsl:variable name="num" select="count(preceding-sibling::word) + 1"/>
5080
+ <xsl:copy>
5081
+ <xsl:attribute name="id">
5082
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_word_',$num)"/>
5083
+ </xsl:attribute>
5084
+ <xsl:copy-of select="node()"/>
5085
+ </xsl:copy>
5086
+ </xsl:for-each>
5087
+ </xsl:if>
5088
+ </xsl:copy>
5089
+
5090
+ </xsl:template><xsl:template match="@*|node()" mode="td_text_with_formatting">
5091
+ <xsl:copy>
5092
+ <xsl:apply-templates select="@*|node()" mode="td_text_with_formatting"/>
5093
+ </xsl:copy>
5094
+ </xsl:template><xsl:template match="*[local-name() = 'stem' or local-name() = 'image']" mode="td_text_with_formatting"/><xsl:template match="*[local-name() = 'keep-together_within-line']/text()" mode="td_text_with_formatting">
5095
+ <xsl:variable name="formatting_tags">
5096
+ <xsl:call-template name="getFormattingTags"/>
5097
+ </xsl:variable>
5098
+ <word>
5099
+ <xsl:call-template name="enclose_text_in_tags">
5100
+ <xsl:with-param name="text" select="normalize-space(.)"/>
5101
+ <xsl:with-param name="tags" select="$formatting_tags"/>
5102
+ </xsl:call-template>
5103
+ </word>
5104
+ </xsl:template><xsl:template match="*[local-name() != 'keep-together_within-line']/text()" mode="td_text_with_formatting">
5105
+
5106
+ <xsl:variable name="td_text" select="."/>
5107
+
5108
+ <xsl:variable name="string_with_added_zerospaces">
5109
+ <xsl:call-template name="add-zero-spaces-java">
5110
+ <xsl:with-param name="text" select="$td_text"/>
5111
+ </xsl:call-template>
5112
+ </xsl:variable>
5113
+
5114
+ <xsl:variable name="formatting_tags">
5115
+ <xsl:call-template name="getFormattingTags"/>
5116
+ </xsl:variable>
5117
+
5118
+ <!-- <word>text</word> -->
5119
+ <xsl:call-template name="tokenize_with_tags">
5120
+ <xsl:with-param name="tags" select="$formatting_tags"/>
5121
+ <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
5122
+ </xsl:call-template>
5123
+ </xsl:template><xsl:template name="getFormattingTags">
5124
+ <tags>
5125
+ <xsl:if test="ancestor::*[local-name() = 'strong']"><tag>strong</tag></xsl:if>
5126
+ <xsl:if test="ancestor::*[local-name() = 'em']"><tag>em</tag></xsl:if>
5127
+ <xsl:if test="ancestor::*[local-name() = 'sub']"><tag>sub</tag></xsl:if>
5128
+ <xsl:if test="ancestor::*[local-name() = 'sup']"><tag>sup</tag></xsl:if>
5129
+ <xsl:if test="ancestor::*[local-name() = 'tt']"><tag>tt</tag></xsl:if>
5130
+ <xsl:if test="ancestor::*[local-name() = 'keep-together_within-line']"><tag>keep-together_within-line</tag></xsl:if>
5131
+ </tags>
4163
5132
  </xsl:template><xsl:template name="getLang">
4164
5133
  <xsl:variable name="language_current" select="normalize-space(//*[local-name()='bibdata']//*[local-name()='language'][@current = 'true'])"/>
4165
5134
  <xsl:variable name="language">
@@ -4353,6 +5322,11 @@
4353
5322
  </xsl:variable>
4354
5323
  <fo:inline xsl:use-attribute-sets="link-style">
4355
5324
 
5325
+ <xsl:if test="starts-with(normalize-space(@target), 'mailto:')">
5326
+ <xsl:attribute name="keep-together.within-line">always</xsl:attribute>
5327
+ </xsl:if>
5328
+
5329
+
4356
5330
 
4357
5331
 
4358
5332
 
@@ -4635,7 +5609,19 @@
4635
5609
  <xsl:value-of select="$suffix"/>
4636
5610
  </xsl:if>
4637
5611
  </xsl:template><xsl:template match="*[local-name() = 'termnote']/*[local-name() = 'p']">
4638
- <fo:inline><xsl:apply-templates/></fo:inline>
5612
+ <xsl:variable name="num"><xsl:number/></xsl:variable>
5613
+ <xsl:choose>
5614
+ <xsl:when test="$num = 1"> <!-- first paragraph renders in the same line as titlenote name -->
5615
+ <fo:inline xsl:use-attribute-sets="termnote-p-style">
5616
+ <xsl:apply-templates/>
5617
+ </fo:inline>
5618
+ </xsl:when>
5619
+ <xsl:otherwise>
5620
+ <fo:block xsl:use-attribute-sets="termnote-p-style">
5621
+ <xsl:apply-templates/>
5622
+ </fo:block>
5623
+ </xsl:otherwise>
5624
+ </xsl:choose>
4639
5625
  </xsl:template><xsl:template match="*[local-name() = 'terms']">
4640
5626
  <!-- <xsl:message>'terms' <xsl:number/> processing...</xsl:message> -->
4641
5627
  <fo:block id="{@id}">
@@ -5457,7 +6443,7 @@
5457
6443
  </xsl:choose>
5458
6444
  </xsl:template><xsl:template match="*[local-name() = 'fn']" mode="contents"/><xsl:template match="*[local-name() = 'fn']" mode="bookmarks"/><xsl:template match="*[local-name() = 'fn']" mode="contents_item"/><xsl:template match="*[local-name() = 'xref']" mode="contents">
5459
6445
  <xsl:value-of select="."/>
5460
- </xsl:template><xsl:template match="*[local-name() = 'tab']" mode="contents_item">
6446
+ </xsl:template><xsl:template match="*[local-name() = 'review']" mode="contents_item"/><xsl:template match="*[local-name() = 'tab']" mode="contents_item">
5461
6447
  <xsl:text> </xsl:text>
5462
6448
  </xsl:template><xsl:template match="*[local-name() = 'strong']" mode="contents_item">
5463
6449
  <xsl:copy>
@@ -5528,7 +6514,7 @@
5528
6514
 
5529
6515
 
5530
6516
 
5531
-
6517
+ <!-- 9 -->
5532
6518
 
5533
6519
 
5534
6520
 
@@ -5612,7 +6598,7 @@
5612
6598
  <xsl:for-each select="xalan:nodeset($text_step4)/node()">
5613
6599
  <xsl:choose>
5614
6600
  <xsl:when test="local-name() = 'interspers'"> <!-- word with length more than 30 will be interspersed with zero-width space -->
5615
- <xsl:call-template name="interspers">
6601
+ <xsl:call-template name="interspers-java">
5616
6602
  <xsl:with-param name="str" select="."/>
5617
6603
  </xsl:call-template>
5618
6604
  </xsl:when>
@@ -5662,6 +6648,10 @@
5662
6648
  <xsl:with-param name="char" select="$char"/>
5663
6649
  </xsl:call-template>
5664
6650
  </xsl:if>
6651
+ </xsl:template><xsl:template name="interspers-java">
6652
+ <xsl:param name="str"/>
6653
+ <xsl:param name="char" select="$zero_width_space"/>
6654
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new($str),'([^ -.:=_—])',concat('$1', $char))"/> <!-- insert $char after each char excep space, - . : = _ etc. -->
5665
6655
  </xsl:template><xsl:template match="*" mode="syntax_highlight">
5666
6656
  <xsl:apply-templates mode="syntax_highlight"/>
5667
6657
  </xsl:template><xsl:variable name="syntax_highlight_styles_">
@@ -5874,7 +6864,9 @@
5874
6864
  <!-- <xsl:attribute name="border">0.5pt solid black</xsl:attribute> -->
5875
6865
  </xsl:if>
5876
6866
  <xsl:variable name="simple-table">
5877
- <xsl:call-template name="getSimpleTable"/>
6867
+ <xsl:call-template name="getSimpleTable">
6868
+ <xsl:with-param name="id" select="@id"/>
6869
+ </xsl:call-template>
5878
6870
  </xsl:variable>
5879
6871
  <xsl:variable name="cols-count" select="count(xalan:nodeset($simple-table)//tr[1]/td)"/>
5880
6872
  <xsl:if test="$cols-count = 2 and not(ancestor::*[local-name()='table'])">
@@ -6303,6 +7295,7 @@
6303
7295
 
6304
7296
 
6305
7297
 
7298
+
6306
7299
  <xsl:choose>
6307
7300
  <xsl:when test="ancestor::un:annex and $depth &gt;= 2">9.5</xsl:when>
6308
7301
  <xsl:when test="ancestor::un:sections">9.5</xsl:when>
@@ -6619,6 +7612,11 @@
6619
7612
  </xsl:otherwise>
6620
7613
  </xsl:choose>
6621
7614
  </xsl:template><xsl:template match="*[local-name()='ul'] | *[local-name()='ol']" mode="list" name="list">
7615
+
7616
+ <xsl:apply-templates select="*[local-name() = 'name']">
7617
+ <xsl:with-param name="process">true</xsl:with-param>
7618
+ </xsl:apply-templates>
7619
+
6622
7620
  <fo:list-block xsl:use-attribute-sets="list-style">
6623
7621
 
6624
7622
 
@@ -6629,12 +7627,23 @@
6629
7627
 
6630
7628
 
6631
7629
 
7630
+ <xsl:if test="*[local-name() = 'name']">
7631
+ <xsl:attribute name="margin-top">0pt</xsl:attribute>
7632
+ </xsl:if>
7633
+
6632
7634
  <xsl:apply-templates select="node()[not(local-name() = 'note')]"/>
6633
7635
  </fo:list-block>
6634
7636
  <!-- <xsl:for-each select="./iho:note">
6635
7637
  <xsl:call-template name="note"/>
6636
7638
  </xsl:for-each> -->
6637
7639
  <xsl:apply-templates select="./*[local-name() = 'note']"/>
7640
+ </xsl:template><xsl:template match="*[local-name() = 'ol' or local-name() = 'ul']/*[local-name() = 'name']">
7641
+ <xsl:param name="process">false</xsl:param>
7642
+ <xsl:if test="$process = 'true'">
7643
+ <fo:block xsl:use-attribute-sets="list-name-style">
7644
+ <xsl:apply-templates/>
7645
+ </fo:block>
7646
+ </xsl:if>
6638
7647
  </xsl:template><xsl:template match="*[local-name()='li']">
6639
7648
  <fo:list-item xsl:use-attribute-sets="list-item-style">
6640
7649
  <xsl:copy-of select="@id"/>
@@ -6834,7 +7843,7 @@
6834
7843
  <!-- <fo:inline id="{@id}" font-size="1pt"/> -->
6835
7844
  <fo:inline id="{@id}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:inline>
6836
7845
  <!-- we need to add zero-width space, otherwise this fo:inline is missing in IF xml -->
6837
- <xsl:if test="not(following-sibling::node()[normalize-space() != ''])"> </xsl:if>
7846
+ <xsl:if test="not(following-sibling::node()[normalize-space() != ''])"><fo:inline font-size="1pt"> </fo:inline></xsl:if>
6838
7847
  </xsl:template><xsl:template match="*[local-name() = 'errata']">
6839
7848
  <!-- <row>
6840
7849
  <date>05-07-2013</date>
@@ -6912,22 +7921,11 @@
6912
7921
  </xsl:template><xsl:template name="processBibitem">
6913
7922
 
6914
7923
 
7924
+ <!-- start UNECE bibitem processing -->
6915
7925
  <fo:inline padding-right="5mm">[<xsl:value-of select="un:docidentifier"/>]</fo:inline><xsl:value-of select="un:docidentifier"/>
6916
- <xsl:if test="un:title">
6917
- <fo:inline font-style="italic">
6918
- <xsl:text>, </xsl:text>
6919
- <xsl:choose>
6920
- <xsl:when test="un:title[@type = 'main' and @language = 'en']">
6921
- <xsl:apply-templates select="un:title[@type = 'main' and @language = 'en']"/>
6922
- </xsl:when>
6923
- <xsl:otherwise>
6924
- <xsl:apply-templates select="un:title"/>
6925
- </xsl:otherwise>
6926
- </xsl:choose>
6927
- </fo:inline>
6928
- </xsl:if>
7926
+ <xsl:text> </xsl:text>
6929
7927
  <xsl:apply-templates select="un:formattedref"/>
6930
-
7928
+ <!-- END UNECE bibitem processing -->
6931
7929
 
6932
7930
  </xsl:template><xsl:template name="processBibitemDocId">
6933
7931
  <xsl:variable name="_doc_ident" select="*[local-name() = 'docidentifier'][not(@type = 'DOI' or @type = 'metanorma' or @type = 'metanorma-ordinal' or @type = 'ISSN' or @type = 'ISBN' or @type = 'rfc-anchor')]"/>
@@ -7233,6 +8231,8 @@
7233
8231
  <fo:block-container id="{@id}" xsl:use-attribute-sets="admonition-style">
7234
8232
 
7235
8233
 
8234
+
8235
+
7236
8236
  <fo:block xsl:use-attribute-sets="admonition-name-style">
7237
8237
  <xsl:call-template name="displayAdmonitionName"/>
7238
8238
  </fo:block>
@@ -7243,6 +8243,8 @@
7243
8243
  <fo:block-container xsl:use-attribute-sets="admonition-container-style">
7244
8244
 
7245
8245
 
8246
+
8247
+
7246
8248
  <fo:block-container margin-left="0mm" margin-right="0mm">
7247
8249
  <fo:block>
7248
8250
  <xsl:apply-templates select="node()[not(local-name() = 'name')]"/>
@@ -7254,25 +8256,32 @@
7254
8256
  </fo:block-container>
7255
8257
 
7256
8258
  </xsl:template><xsl:template name="displayAdmonitionName">
7257
-
8259
+ <xsl:param name="sep"/> <!-- Example: ' - ' -->
8260
+ <!-- <xsl:choose>
8261
+ <xsl:when test="$namespace = 'nist-cswp' or $namespace = 'nist-sp'">
8262
+ <xsl:choose>
8263
+ <xsl:when test="@type='important'"><xsl:apply-templates select="@type"/></xsl:when>
8264
+ <xsl:otherwise>
8265
+ <xsl:apply-templates select="*[local-name() = 'name']"/>
8266
+ </xsl:otherwise>
8267
+ </xsl:choose>
8268
+ </xsl:when>
8269
+ <xsl:otherwise>
7258
8270
  <xsl:apply-templates select="*[local-name() = 'name']"/>
7259
8271
  <xsl:if test="not(*[local-name() = 'name'])">
7260
8272
  <xsl:apply-templates select="@type"/>
7261
8273
  </xsl:if>
7262
-
7263
- </xsl:template><xsl:template match="*[local-name() = 'admonition']/*[local-name() = 'name']">
7264
- <xsl:apply-templates/>
7265
- </xsl:template><xsl:template match="*[local-name() = 'admonition']/@type">
7266
- <xsl:variable name="admonition_type_">
7267
- <xsl:call-template name="getLocalizedString">
7268
- <xsl:with-param name="key">admonition.<xsl:value-of select="."/></xsl:with-param>
7269
- </xsl:call-template>
8274
+ </xsl:otherwise>
8275
+ </xsl:choose> -->
8276
+ <xsl:variable name="name">
8277
+ <xsl:apply-templates select="*[local-name() = 'name']"/>
7270
8278
  </xsl:variable>
7271
- <xsl:variable name="admonition_type" select="normalize-space(java:toUpperCase(java:java.lang.String.new($admonition_type_)))"/>
7272
- <xsl:value-of select="$admonition_type"/>
7273
- <xsl:if test="$admonition_type = ''">
7274
- <xsl:value-of select="java:toUpperCase(java:java.lang.String.new(.))"/>
8279
+ <xsl:copy-of select="$name"/>
8280
+ <xsl:if test="normalize-space($name) != ''">
8281
+ <xsl:value-of select="$sep"/>
7275
8282
  </xsl:if>
8283
+ </xsl:template><xsl:template match="*[local-name() = 'admonition']/*[local-name() = 'name']">
8284
+ <xsl:apply-templates/>
7276
8285
  </xsl:template><xsl:template match="*[local-name() = 'admonition']/*[local-name() = 'p']">
7277
8286
 
7278
8287
  <fo:block xsl:use-attribute-sets="admonition-p-style">
@@ -7443,6 +8452,8 @@
7443
8452
  </xsl:when>
7444
8453
  <xsl:otherwise><xsl:value-of select="$text"/></xsl:otherwise>
7445
8454
  </xsl:choose>
8455
+ </xsl:template><xsl:template match="*[local-name() = 'lang_none']">
8456
+ <fo:inline xml:lang="none"><xsl:value-of select="."/></fo:inline>
7446
8457
  </xsl:template><xsl:template name="printEdition">
7447
8458
  <xsl:variable name="edition_i18n" select="normalize-space((//*[contains(local-name(), '-standard')])[1]/*[local-name() = 'bibdata']/*[local-name() = 'edition'][normalize-space(@language) != ''])"/>
7448
8459
  <xsl:text> </xsl:text>
@@ -7549,6 +8560,27 @@
7549
8560
  </xsl:when>
7550
8561
  <xsl:otherwise><xsl:value-of select="$monthStr_"/></xsl:otherwise>
7551
8562
  </xsl:choose>
8563
+ </xsl:template><xsl:template name="getMonthLocalizedByNum">
8564
+ <xsl:param name="num"/>
8565
+ <xsl:variable name="monthStr">
8566
+ <xsl:choose>
8567
+ <xsl:when test="$num = '01'">january</xsl:when>
8568
+ <xsl:when test="$num = '02'">february</xsl:when>
8569
+ <xsl:when test="$num = '03'">march</xsl:when>
8570
+ <xsl:when test="$num = '04'">april</xsl:when>
8571
+ <xsl:when test="$num = '05'">may</xsl:when>
8572
+ <xsl:when test="$num = '06'">june</xsl:when>
8573
+ <xsl:when test="$num = '07'">july</xsl:when>
8574
+ <xsl:when test="$num = '08'">august</xsl:when>
8575
+ <xsl:when test="$num = '09'">september</xsl:when>
8576
+ <xsl:when test="$num = '10'">october</xsl:when>
8577
+ <xsl:when test="$num = '11'">november</xsl:when>
8578
+ <xsl:when test="$num = '12'">december</xsl:when>
8579
+ </xsl:choose>
8580
+ </xsl:variable>
8581
+ <xsl:call-template name="getLocalizedString">
8582
+ <xsl:with-param name="key">month_<xsl:value-of select="$monthStr"/></xsl:with-param>
8583
+ </xsl:call-template>
7552
8584
  </xsl:template><xsl:template name="insertKeywords">
7553
8585
  <xsl:param name="sorting" select="'true'"/>
7554
8586
  <xsl:param name="charAtEnd" select="'.'"/>
@@ -7742,6 +8774,7 @@
7742
8774
 
7743
8775
 
7744
8776
 
8777
+
7745
8778
  <xsl:value-of select="document('')//*/namespace::un"/>
7746
8779
 
7747
8780
 
@@ -8155,4 +9188,40 @@
8155
9188
  <xsl:value-of select="$value"/>
8156
9189
  </xsl:otherwise>
8157
9190
  </xsl:choose>
9191
+ </xsl:template><xsl:template match="*" mode="print_as_xml">
9192
+ <xsl:param name="level">0</xsl:param>
9193
+
9194
+ <fo:block margin-left="{2*$level}mm">
9195
+ <xsl:text>
9196
+ &lt;</xsl:text>
9197
+ <xsl:value-of select="local-name()"/>
9198
+ <xsl:for-each select="@*">
9199
+ <xsl:text> </xsl:text>
9200
+ <xsl:value-of select="local-name()"/>
9201
+ <xsl:text>="</xsl:text>
9202
+ <xsl:value-of select="."/>
9203
+ <xsl:text>"</xsl:text>
9204
+ </xsl:for-each>
9205
+ <xsl:text>&gt;</xsl:text>
9206
+
9207
+ <xsl:if test="not(*)">
9208
+ <fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline>
9209
+ <xsl:text>&lt;/</xsl:text>
9210
+ <xsl:value-of select="local-name()"/>
9211
+ <xsl:text>&gt;</xsl:text>
9212
+ </xsl:if>
9213
+ </fo:block>
9214
+
9215
+ <xsl:if test="*">
9216
+ <fo:block>
9217
+ <xsl:apply-templates mode="print_as_xml">
9218
+ <xsl:with-param name="level" select="$level + 1"/>
9219
+ </xsl:apply-templates>
9220
+ </fo:block>
9221
+ <fo:block margin-left="{2*$level}mm">
9222
+ <xsl:text>&lt;/</xsl:text>
9223
+ <xsl:value-of select="local-name()"/>
9224
+ <xsl:text>&gt;</xsl:text>
9225
+ </fo:block>
9226
+ </xsl:if>
8158
9227
  </xsl:template></xsl:stylesheet>