metanorma-iec 2.0.7 → 2.1.1

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.
@@ -114,7 +114,13 @@
114
114
  <xsl:call-template name="namespaceCheck"/>
115
115
  <!-- https://stackoverflow.com/questions/25261949/xsl-fo-letter-spacing-with-text-align -->
116
116
  <!-- https://xmlgraphics.apache.org/fop/knownissues.html -->
117
- <fo:root xsl:use-attribute-sets="root-style" xml:lang="{$lang}">
117
+ <fo:root xml:lang="{$lang}">
118
+ <xsl:variable name="root-style">
119
+ <root-style xsl:use-attribute-sets="root-style"/>
120
+ </xsl:variable>
121
+ <xsl:call-template name="insertRootStyle">
122
+ <xsl:with-param name="root-style" select="$root-style"/>
123
+ </xsl:call-template>
118
124
  <fo:layout-master-set>
119
125
  <!-- cover pages -->
120
126
  <fo:simple-page-master master-name="cover" page-width="{$pageWidth}mm" page-height="{$pageHeight}mm">
@@ -930,14 +936,16 @@
930
936
  <fo:inline keep-together.within-line="always" font-size="25pt" font-weight="bold" color="{$color_gray}" border-bottom="0.5pt solid {$color_gray}" padding-bottom="3.5mm" baseline-shift="5.5mm"><fo:leader leader-pattern="space"/><xsl:value-of select="//iec:iec-standard/iec:bibdata/iec:docidentifier[@type = 'iso' or @type = 'ISO']"/></fo:inline>
931
937
  </fo:block>
932
938
  <fo:block font-size="10.5pt" text-align="right" margin-top="0.5mm">
933
- <xsl:variable name="title-edition">
934
- <xsl:call-template name="getTitle">
935
- <xsl:with-param name="name" select="'title-edition'"/>
936
- </xsl:call-template>
937
- </xsl:variable>
938
- <xsl:value-of select="$title-edition"/>
939
+ <xsl:call-template name="capitalize">
940
+ <xsl:with-param name="str">
941
+ <xsl:call-template name="getLocalizedString">
942
+ <xsl:with-param name="key">edition</xsl:with-param>
943
+ </xsl:call-template>
944
+ </xsl:with-param>
945
+ </xsl:call-template>
946
+ <xsl:text> </xsl:text>
939
947
  <fo:inline>
940
- <xsl:variable name="edition" select="//iec:iec-standard/iec:bibdata/iec:edition"/>
948
+ <xsl:variable name="edition" select="//iec:iec-standard/iec:bibdata/iec:edition[normalize-space(@language) = '']"/>
941
949
  <xsl:value-of select="$edition"/>
942
950
  <xsl:if test="not(contains($edition, '.'))">.0</xsl:if>
943
951
  </fo:inline>
@@ -1633,6 +1641,7 @@
1633
1641
 
1634
1642
  <xsl:template match="iec:p" name="paragraph">
1635
1643
  <xsl:param name="inline" select="'false'"/>
1644
+ <xsl:param name="split_keep-within-line"/>
1636
1645
  <xsl:variable name="previous-element" select="local-name(preceding-sibling::*[1])"/>
1637
1646
  <xsl:variable name="element-name">
1638
1647
  <xsl:choose>
@@ -1675,11 +1684,15 @@
1675
1684
  </xsl:if>
1676
1685
 
1677
1686
  <xsl:apply-templates select="@language"/>
1678
- <xsl:apply-templates/>
1687
+ <xsl:apply-templates>
1688
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
1689
+ </xsl:apply-templates>
1679
1690
  </xsl:element>
1680
1691
  </xsl:when>
1681
1692
  <xsl:otherwise>
1682
- <xsl:apply-templates/>
1693
+ <xsl:apply-templates>
1694
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
1695
+ </xsl:apply-templates>
1683
1696
  </xsl:otherwise>
1684
1697
  </xsl:choose>
1685
1698
 
@@ -1922,7 +1935,9 @@
1922
1935
  </xsl:copy>
1923
1936
  </xsl:template> -->
1924
1937
 
1925
- <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:variable name="lang">
1938
+ <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:param name="table_if_debug">false</xsl:param><xsl:variable name="isGenerateTableIF_">
1939
+ false
1940
+ </xsl:variable><xsl:variable name="isGenerateTableIF" select="normalize-space($isGenerateTableIF_)"/><xsl:variable name="lang">
1926
1941
  <xsl:call-template name="getLang"/>
1927
1942
  </xsl:variable><xsl:variable name="pageWidth_">
1928
1943
  210
@@ -1937,20 +1952,7 @@
1937
1952
  </xsl:variable><xsl:variable name="marginTop" select="normalize-space($marginTop_)"/><xsl:variable name="marginBottom_">
1938
1953
  15
1939
1954
  </xsl:variable><xsl:variable name="marginBottom" select="normalize-space($marginBottom_)"/><xsl:variable name="titles_">
1940
-
1941
- <title-edition lang="en">
1942
-
1943
- <xsl:text>Edition </xsl:text>
1944
-
1945
- </title-edition>
1946
-
1947
- <title-edition lang="fr">
1948
- <xsl:text>Édition </xsl:text>
1949
- </title-edition>
1950
1955
 
1951
- <title-edition lang="ru">
1952
- <xsl:text>Издание </xsl:text>
1953
- </title-edition>
1954
1956
 
1955
1957
  <!-- These titles of Table of contents renders different than determined in localized-strings -->
1956
1958
  <title-toc lang="en">
@@ -2035,7 +2037,7 @@
2035
2037
  </xsl:variable><xsl:variable name="bibdata">
2036
2038
  <xsl:copy-of select="//*[contains(local-name(), '-standard')]/*[local-name() = 'bibdata']"/>
2037
2039
  <xsl:copy-of select="//*[contains(local-name(), '-standard')]/*[local-name() = 'localized-strings']"/>
2038
- </xsl:variable><xsl:variable name="linebreak">&#8232;</xsl:variable><xsl:variable name="tab_zh"> </xsl:variable><xsl:variable name="non_breaking_hyphen">‑</xsl:variable><xsl:variable name="thin_space"> </xsl:variable><xsl:variable name="zero_width_space">​</xsl:variable><xsl:variable name="en_dash">–</xsl:variable><xsl:template name="getTitle">
2040
+ </xsl:variable><xsl:variable name="linebreak">&#8232;</xsl:variable><xsl:variable name="tab_zh"> </xsl:variable><xsl:variable name="non_breaking_hyphen">‑</xsl:variable><xsl:variable name="thin_space"> </xsl:variable><xsl:variable name="zero_width_space">​</xsl:variable><xsl:variable name="hair_space"> </xsl:variable><xsl:variable name="en_dash">–</xsl:variable><xsl:template name="getTitle">
2039
2041
  <xsl:param name="name"/>
2040
2042
  <xsl:param name="lang"/>
2041
2043
  <xsl:variable name="lang_">
@@ -2078,7 +2080,30 @@
2078
2080
 
2079
2081
 
2080
2082
 
2081
- </xsl:attribute-set><xsl:attribute-set name="copyright-statement-style">
2083
+ </xsl:attribute-set><xsl:template name="insertRootStyle">
2084
+ <xsl:param name="root-style"/>
2085
+ <xsl:variable name="root-style_" select="xalan:nodeset($root-style)"/>
2086
+
2087
+ <xsl:variable name="additional_fonts_">
2088
+ <xsl:for-each select="//*[contains(local-name(), '-standard')][1]/*[local-name() = 'misc-container']/*[local-name() = 'presentation-metadata'][*[local-name() = 'name'] = 'fonts']/*[local-name() = 'value'] | //*[contains(local-name(), '-standard')][1]/*[local-name() = 'presentation-metadata'][*[local-name() = 'name'] = 'fonts']/*[local-name() = 'value']">
2089
+ <xsl:value-of select="."/><xsl:if test="position() != last()">, </xsl:if>
2090
+ </xsl:for-each>
2091
+ </xsl:variable>
2092
+ <xsl:variable name="additional_fonts" select="normalize-space($additional_fonts_)"/>
2093
+
2094
+ <xsl:for-each select="$root-style_/root-style/@*">
2095
+ <xsl:choose>
2096
+ <xsl:when test="local-name() = 'font-family' and $additional_fonts != ''">
2097
+ <xsl:attribute name="{local-name()}">
2098
+ <xsl:value-of select="."/>, <xsl:value-of select="$additional_fonts"/>
2099
+ </xsl:attribute>
2100
+ </xsl:when>
2101
+ <xsl:otherwise>
2102
+ <xsl:copy-of select="."/>
2103
+ </xsl:otherwise>
2104
+ </xsl:choose>
2105
+ </xsl:for-each>
2106
+ </xsl:template><xsl:attribute-set name="copyright-statement-style">
2082
2107
 
2083
2108
  </xsl:attribute-set><xsl:attribute-set name="copyright-statement-title-style">
2084
2109
 
@@ -2136,7 +2161,6 @@
2136
2161
 
2137
2162
 
2138
2163
  </xsl:attribute-set><xsl:attribute-set name="sourcecode-container-style">
2139
- <xsl:attribute name="margin-left">0mm</xsl:attribute>
2140
2164
 
2141
2165
  </xsl:attribute-set><xsl:attribute-set name="sourcecode-style">
2142
2166
  <xsl:attribute name="white-space">pre</xsl:attribute>
@@ -2224,6 +2248,7 @@
2224
2248
  <xsl:attribute name="margin-left">10mm</xsl:attribute>
2225
2249
 
2226
2250
 
2251
+
2227
2252
  </xsl:attribute-set><xsl:attribute-set name="example-name-style">
2228
2253
 
2229
2254
 
@@ -2382,6 +2407,7 @@
2382
2407
  <xsl:attribute name="font-weight">bold</xsl:attribute>
2383
2408
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
2384
2409
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
2410
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
2385
2411
  <xsl:attribute name="display-align">center</xsl:attribute>
2386
2412
 
2387
2413
 
@@ -2404,6 +2430,7 @@
2404
2430
  <xsl:attribute name="display-align">center</xsl:attribute>
2405
2431
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
2406
2432
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
2433
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
2407
2434
 
2408
2435
 
2409
2436
 
@@ -2507,7 +2534,8 @@
2507
2534
  </xsl:attribute-set><xsl:attribute-set name="dt-row-style">
2508
2535
 
2509
2536
 
2510
- </xsl:attribute-set><xsl:attribute-set name="dt-style">
2537
+ </xsl:attribute-set><xsl:attribute-set name="dt-cell-style">
2538
+ </xsl:attribute-set><xsl:attribute-set name="dt-block-style">
2511
2539
  <xsl:attribute name="margin-top">6pt</xsl:attribute>
2512
2540
 
2513
2541
 
@@ -2521,6 +2549,8 @@
2521
2549
 
2522
2550
 
2523
2551
 
2552
+ </xsl:attribute-set><xsl:attribute-set name="dd-cell-style">
2553
+ <xsl:attribute name="padding-left">2mm</xsl:attribute>
2524
2554
  </xsl:attribute-set><xsl:attribute-set name="appendix-style">
2525
2555
 
2526
2556
 
@@ -2620,7 +2650,7 @@
2620
2650
 
2621
2651
 
2622
2652
 
2623
- </xsl:attribute-set><xsl:attribute-set name="termnote-name-style">
2653
+ </xsl:attribute-set><xsl:attribute-set name="termnote-name-style">
2624
2654
 
2625
2655
 
2626
2656
 
@@ -3343,22 +3373,32 @@
3343
3373
  <xsl:sort select="@displayorder" data-type="number"/>
3344
3374
  <xsl:apply-templates select="."/>
3345
3375
  </xsl:for-each>
3346
- </xsl:template><xsl:variable name="tag_open">###fo:inline###</xsl:variable><xsl:variable name="tag_close">###/fo:inline###</xsl:variable><xsl:template match="text()" name="text">
3347
- <xsl:variable name="regex_standard_reference">([A-Z]{2,}(/[A-Z]{2,})* \d+(-\d+)*(:\d{4})?)</xsl:variable>
3348
- <xsl:variable name="text" select="java:replaceAll(java:java.lang.String.new(.),$regex_standard_reference,concat($tag_open,'$1',$tag_close))"/>
3349
- <xsl:call-template name="replace_fo_inline">
3350
- <xsl:with-param name="text" select="$text"/>
3351
- </xsl:call-template>
3352
- </xsl:template><xsl:template name="replace_fo_inline">
3376
+ </xsl:template><xsl:variable name="tag_fo_inline_keep-together_within-line_open">###fo:inline keep-together_within-line###</xsl:variable><xsl:variable name="tag_fo_inline_keep-together_within-line_close">###/fo:inline keep-together_within-line###</xsl:variable><xsl:template match="text()" name="text">
3377
+
3378
+ <xsl:variable name="regex_standard_reference">([A-Z]{2,}(/[A-Z]{2,})* \d+(-\d+)*(:\d{4})?)</xsl:variable>
3379
+ <xsl:variable name="text" select="java:replaceAll(java:java.lang.String.new(.),$regex_standard_reference,concat($tag_fo_inline_keep-together_within-line_open,'$1',$tag_fo_inline_keep-together_within-line_close))"/>
3380
+ <xsl:call-template name="replace_fo_inline_tags">
3381
+ <xsl:with-param name="tag_open" select="$tag_fo_inline_keep-together_within-line_open"/>
3382
+ <xsl:with-param name="tag_close" select="$tag_fo_inline_keep-together_within-line_close"/>
3383
+ <xsl:with-param name="text" select="$text"/>
3384
+ </xsl:call-template>
3385
+
3386
+ </xsl:template><xsl:template name="replace_fo_inline_tags">
3387
+ <xsl:param name="tag_open"/>
3388
+ <xsl:param name="tag_close"/>
3353
3389
  <xsl:param name="text"/>
3354
3390
  <xsl:choose>
3355
3391
  <xsl:when test="contains($text, $tag_open)">
3356
3392
  <xsl:value-of select="substring-before($text, $tag_open)"/>
3357
- <xsl:text disable-output-escaping="yes">&lt;fo:inline keep-together.within-line="always"&gt;</xsl:text>
3393
+ <!-- <xsl:text disable-output-escaping="yes">&lt;fo:inline keep-together.within-line="always"&gt;</xsl:text> -->
3358
3394
  <xsl:variable name="text_after" select="substring-after($text, $tag_open)"/>
3359
- <xsl:value-of select="substring-before($text_after, $tag_close)"/>
3360
- <xsl:text disable-output-escaping="yes">&lt;/fo:inline&gt;</xsl:text>
3361
- <xsl:call-template name="replace_fo_inline">
3395
+ <fo:inline keep-together.within-line="always">
3396
+ <xsl:value-of select="substring-before($text_after, $tag_close)"/>
3397
+ </fo:inline>
3398
+ <!-- <xsl:text disable-output-escaping="yes">&lt;/fo:inline&gt;</xsl:text> -->
3399
+ <xsl:call-template name="replace_fo_inline_tags">
3400
+ <xsl:with-param name="tag_open" select="$tag_open"/>
3401
+ <xsl:with-param name="tag_close" select="$tag_close"/>
3362
3402
  <xsl:with-param name="text" select="substring-after($text_after, $tag_close)"/>
3363
3403
  </xsl:call-template>
3364
3404
  </xsl:when>
@@ -3366,6 +3406,39 @@
3366
3406
  </xsl:choose>
3367
3407
  </xsl:template><xsl:template match="*[local-name()='br']">
3368
3408
  <xsl:value-of select="$linebreak"/>
3409
+ </xsl:template><xsl:template match="*[local-name() = 'keep-together_within-line']">
3410
+ <xsl:param name="split_keep-within-line"/>
3411
+
3412
+ <!-- <fo:inline>split_keep-within-line='<xsl:value-of select="$split_keep-within-line"/>'</fo:inline> -->
3413
+ <xsl:choose>
3414
+
3415
+ <xsl:when test="normalize-space($split_keep-within-line) = 'true'">
3416
+ <xsl:variable name="sep">_</xsl:variable>
3417
+ <xsl:variable name="items">
3418
+ <xsl:call-template name="split">
3419
+ <xsl:with-param name="pText" select="."/>
3420
+ <xsl:with-param name="sep" select="$sep"/>
3421
+ <xsl:with-param name="normalize-space">false</xsl:with-param>
3422
+ <xsl:with-param name="keep_sep">true</xsl:with-param>
3423
+ </xsl:call-template>
3424
+ </xsl:variable>
3425
+ <xsl:for-each select="xalan:nodeset($items)/item">
3426
+ <xsl:choose>
3427
+ <xsl:when test=". = $sep">
3428
+ <xsl:value-of select="$sep"/><xsl:value-of select="$zero_width_space"/>
3429
+ </xsl:when>
3430
+ <xsl:otherwise>
3431
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3432
+ </xsl:otherwise>
3433
+ </xsl:choose>
3434
+ </xsl:for-each>
3435
+ </xsl:when>
3436
+
3437
+ <xsl:otherwise>
3438
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3439
+ </xsl:otherwise>
3440
+
3441
+ </xsl:choose>
3369
3442
  </xsl:template><xsl:template match="*[local-name()='copyright-statement']">
3370
3443
  <fo:block xsl:use-attribute-sets="copyright-statement-style">
3371
3444
  <xsl:apply-templates/>
@@ -3434,8 +3507,23 @@
3434
3507
  </fo:block>
3435
3508
 
3436
3509
  </xsl:template><xsl:template match="*[local-name()='td']//text() | *[local-name()='th']//text() | *[local-name()='dt']//text() | *[local-name()='dd']//text()" priority="1">
3437
- <!-- <xsl:call-template name="add-zero-spaces"/> -->
3438
- <xsl:call-template name="add-zero-spaces-java"/>
3510
+ <xsl:choose>
3511
+ <xsl:when test="parent::*[local-name() = 'keep-together_within-line']">
3512
+ <xsl:value-of select="."/>
3513
+ </xsl:when>
3514
+ <xsl:otherwise>
3515
+ <xsl:call-template name="addZeroWidthSpacesToTextNodes"/>
3516
+ </xsl:otherwise>
3517
+ </xsl:choose>
3518
+ </xsl:template><xsl:template name="addZeroWidthSpacesToTextNodes">
3519
+ <xsl:variable name="text"><text><xsl:call-template name="text"/></text></xsl:variable>
3520
+ <!-- <xsl:copy-of select="$text"/> -->
3521
+ <xsl:for-each select="xalan:nodeset($text)/text/node()">
3522
+ <xsl:choose>
3523
+ <xsl:when test="self::text()"><xsl:call-template name="add-zero-spaces-java"/></xsl:when>
3524
+ <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise> <!-- copy 'as-is' for <fo:inline keep-together.within-line="always" ... -->
3525
+ </xsl:choose>
3526
+ </xsl:for-each>
3439
3527
  </xsl:template><xsl:template match="*[local-name()='table']" name="table">
3440
3528
 
3441
3529
  <xsl:variable name="table-preamble">
@@ -3445,9 +3533,14 @@
3445
3533
 
3446
3534
  <xsl:variable name="table">
3447
3535
 
3448
- <xsl:variable name="simple-table">
3449
- <xsl:call-template name="getSimpleTable"/>
3536
+ <xsl:variable name="simple-table">
3537
+ <xsl:call-template name="getSimpleTable">
3538
+ <xsl:with-param name="id" select="@id"/>
3539
+ </xsl:call-template>
3450
3540
  </xsl:variable>
3541
+ <!-- <xsl:variable name="simple-table" select="xalan:nodeset($simple-table_)"/> -->
3542
+
3543
+ <!-- simple-table=<xsl:copy-of select="$simple-table"/> -->
3451
3544
 
3452
3545
 
3453
3546
  <!-- Display table's name before table as standalone block -->
@@ -3470,7 +3563,23 @@
3470
3563
  </xsl:call-template>
3471
3564
  </xsl:if>
3472
3565
  </xsl:variable>
3473
- <!-- DEBUG colwidths=<xsl:copy-of select="$colwidths"/> -->
3566
+ <!-- <xsl:variable name="colwidths" select="xalan:nodeset($colwidths_)"/> -->
3567
+
3568
+ <!-- DEBUG -->
3569
+ <xsl:if test="$table_if_debug = 'true'">
3570
+ <fo:block font-size="60%">
3571
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
3572
+ </fo:block>
3573
+ </xsl:if>
3574
+
3575
+
3576
+ <!-- <xsl:copy-of select="$colwidths"/> -->
3577
+
3578
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
3579
+ DEBUG
3580
+ colwidths=<xsl:copy-of select="$colwidths"/>
3581
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
3582
+
3474
3583
 
3475
3584
 
3476
3585
  <xsl:variable name="margin-side">
@@ -3541,9 +3650,17 @@
3541
3650
  </xsl:element>
3542
3651
  </xsl:variable>
3543
3652
 
3653
+ <xsl:if test="$isGenerateTableIF = 'true'">
3654
+ <!-- to determine start of table -->
3655
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
3656
+ </xsl:if>
3544
3657
 
3545
3658
  <fo:table id="{@id}">
3546
3659
 
3660
+ <xsl:if test="$isGenerateTableIF = 'true'">
3661
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
3662
+ </xsl:if>
3663
+
3547
3664
  <xsl:for-each select="xalan:nodeset($table_attributes)/table_attributes/@*">
3548
3665
  <xsl:attribute name="{local-name()}">
3549
3666
  <xsl:value-of select="."/>
@@ -3557,31 +3674,47 @@
3557
3674
 
3558
3675
 
3559
3676
  <xsl:choose>
3560
- <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
3561
- <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
3562
- <fo:table-column column-width="{@width}"/>
3563
- </xsl:for-each>
3677
+ <xsl:when test="$isGenerateTableIF = 'true'">
3678
+ <!-- generate IF for table widths -->
3679
+ <!-- example:
3680
+ <tr>
3681
+ <td valign="top" align="left" id="tab-symdu_1_1">
3682
+ <p>Symbol</p>
3683
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
3684
+ </td>
3685
+ <td valign="top" align="left" id="tab-symdu_1_2">
3686
+ <p>Description</p>
3687
+ <word id="tab-symdu_1_2_word_1">Description</word>
3688
+ </td>
3689
+ </tr>
3690
+ -->
3691
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if"/>
3692
+
3564
3693
  </xsl:when>
3565
3694
  <xsl:otherwise>
3566
- <xsl:for-each select="xalan:nodeset($colwidths)//column">
3567
- <xsl:choose>
3568
- <xsl:when test=". = 1 or . = 0">
3569
- <fo:table-column column-width="proportional-column-width(2)"/>
3570
- </xsl:when>
3571
- <xsl:otherwise>
3572
- <fo:table-column column-width="proportional-column-width({.})"/>
3573
- </xsl:otherwise>
3574
- </xsl:choose>
3575
- </xsl:for-each>
3576
- </xsl:otherwise>
3577
- </xsl:choose>
3578
3695
 
3579
- <xsl:choose>
3580
- <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
3581
- <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
3582
- </xsl:when>
3583
- <xsl:otherwise>
3584
- <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 -->
3696
+ <xsl:choose>
3697
+ <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
3698
+ <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
3699
+ <fo:table-column column-width="{@width}"/>
3700
+ </xsl:for-each>
3701
+ </xsl:when>
3702
+ <xsl:otherwise>
3703
+ <xsl:call-template name="insertTableColumnWidth">
3704
+ <xsl:with-param name="colwidths" select="$colwidths"/>
3705
+ </xsl:call-template>
3706
+ </xsl:otherwise>
3707
+ </xsl:choose>
3708
+
3709
+ <xsl:choose>
3710
+ <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
3711
+ <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
3712
+ </xsl:when>
3713
+ <xsl:otherwise>
3714
+ <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 -->
3715
+ </xsl:otherwise>
3716
+ </xsl:choose>
3717
+
3585
3718
  </xsl:otherwise>
3586
3719
  </xsl:choose>
3587
3720
 
@@ -3684,11 +3817,22 @@
3684
3817
  <xsl:variable name="columns-with-colspan" select="count($table-row/*[@colspan])"/>
3685
3818
  <xsl:value-of select="$columns-count + $sum-colspans - $columns-with-colspan"/>
3686
3819
  </xsl:template><xsl:template name="calculate-column-widths">
3820
+ <xsl:param name="table"/>
3821
+ <xsl:param name="cols-count"/>
3822
+
3823
+ <xsl:call-template name="calculate-column-widths-proportional">
3824
+ <xsl:with-param name="cols-count" select="$cols-count"/>
3825
+ <xsl:with-param name="table" select="$table"/>
3826
+ </xsl:call-template>
3827
+
3828
+ </xsl:template><xsl:template name="calculate-column-widths-proportional">
3687
3829
  <xsl:param name="table"/>
3688
3830
  <xsl:param name="cols-count"/>
3689
3831
  <xsl:param name="curr-col" select="1"/>
3690
3832
  <xsl:param name="width" select="0"/>
3691
3833
 
3834
+ <!-- table=<xsl:copy-of select="$table"/> -->
3835
+
3692
3836
  <xsl:if test="$curr-col &lt;= $cols-count">
3693
3837
  <xsl:variable name="widths">
3694
3838
  <xsl:choose>
@@ -3726,16 +3870,22 @@
3726
3870
  </xsl:for-each>
3727
3871
  </xsl:when>
3728
3872
  <xsl:otherwise>
3729
- <xsl:for-each select="xalan:nodeset($table)/*/tr">
3873
+ <!-- <curr_col><xsl:value-of select="$curr-col"/></curr_col> -->
3874
+
3875
+ <!-- <table><xsl:copy-of select="$table"/></table>
3876
+ -->
3877
+ <xsl:for-each select="xalan:nodeset($table)/*/*[local-name()='tr']">
3730
3878
  <xsl:variable name="td_text">
3731
3879
  <xsl:apply-templates select="td[$curr-col]" mode="td_text"/>
3732
3880
  </xsl:variable>
3881
+ <!-- <td_text><xsl:value-of select="$td_text"/></td_text> -->
3733
3882
  <xsl:variable name="words">
3734
3883
  <xsl:variable name="string_with_added_zerospaces">
3735
3884
  <xsl:call-template name="add-zero-spaces-java">
3736
3885
  <xsl:with-param name="text" select="$td_text"/>
3737
3886
  </xsl:call-template>
3738
3887
  </xsl:variable>
3888
+ <!-- <xsl:message>string_with_added_zerospaces=<xsl:value-of select="$string_with_added_zerospaces"/></xsl:message> -->
3739
3889
  <xsl:call-template name="tokenize">
3740
3890
  <!-- <xsl:with-param name="text" select="translate(td[$curr-col],'- —:', ' ')"/> -->
3741
3891
  <!-- 2009 thinspace -->
@@ -3743,11 +3893,13 @@
3743
3893
  <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
3744
3894
  </xsl:call-template>
3745
3895
  </xsl:variable>
3896
+ <!-- words=<xsl:copy-of select="$words"/> -->
3746
3897
  <xsl:variable name="max_length">
3747
3898
  <xsl:call-template name="max_length">
3748
3899
  <xsl:with-param name="words" select="xalan:nodeset($words)"/>
3749
3900
  </xsl:call-template>
3750
3901
  </xsl:variable>
3902
+ <!-- <xsl:message>max_length=<xsl:value-of select="$max_length"/></xsl:message> -->
3751
3903
  <width>
3752
3904
  <xsl:variable name="divider">
3753
3905
  <xsl:choose>
@@ -3766,6 +3918,8 @@
3766
3918
  </xsl:choose>
3767
3919
  </xsl:variable>
3768
3920
 
3921
+ <!-- widths=<xsl:copy-of select="$widths"/> -->
3922
+
3769
3923
  <column>
3770
3924
  <xsl:for-each select="xalan:nodeset($widths)//width">
3771
3925
  <xsl:sort select="." data-type="number" order="descending"/>
@@ -3774,29 +3928,327 @@
3774
3928
  </xsl:if>
3775
3929
  </xsl:for-each>
3776
3930
  </column>
3777
- <xsl:call-template name="calculate-column-widths">
3931
+ <xsl:call-template name="calculate-column-widths-proportional">
3778
3932
  <xsl:with-param name="cols-count" select="$cols-count"/>
3779
3933
  <xsl:with-param name="curr-col" select="$curr-col +1"/>
3780
3934
  <xsl:with-param name="table" select="$table"/>
3781
3935
  </xsl:call-template>
3782
3936
  </xsl:if>
3937
+ </xsl:template><xsl:template match="*[@keep-together.within-line or local-name() = 'keep-together_within-line']/text()" priority="2" mode="td_text">
3938
+ <!-- <xsl:message>DEBUG t1=<xsl:value-of select="."/></xsl:message>
3939
+ <xsl:message>DEBUG t2=<xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/></xsl:message> -->
3940
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/>
3941
+
3942
+ <!-- if all capitals english letters or digits -->
3943
+ <xsl:if test="normalize-space(translate(., concat($upper,'0123456789'), '')) = ''">
3944
+ <xsl:call-template name="repeat">
3945
+ <xsl:with-param name="char" select="'X'"/>
3946
+ <xsl:with-param name="count" select="string-length(normalize-space(.)) * 0.5"/>
3947
+ </xsl:call-template>
3948
+ </xsl:if>
3783
3949
  </xsl:template><xsl:template match="text()" mode="td_text">
3784
3950
  <xsl:value-of select="translate(., $zero_width_space, ' ')"/><xsl:text> </xsl:text>
3785
3951
  </xsl:template><xsl:template match="*[local-name()='termsource']" mode="td_text">
3786
3952
  <xsl:value-of select="*[local-name()='origin']/@citeas"/>
3787
3953
  </xsl:template><xsl:template match="*[local-name()='link']" mode="td_text">
3788
3954
  <xsl:value-of select="@target"/>
3789
- </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text">
3790
- <xsl:variable name="mathml">
3791
- <xsl:for-each select="*">
3792
- <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
3793
- <xsl:copy-of select="."/>
3955
+ </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text" name="math_length">
3956
+ <xsl:if test="$isGenerateTableIF = 'false'">
3957
+ <xsl:variable name="mathml_">
3958
+ <xsl:for-each select="*">
3959
+ <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
3960
+ <xsl:copy-of select="."/>
3961
+ </xsl:if>
3962
+ </xsl:for-each>
3963
+ </xsl:variable>
3964
+ <xsl:variable name="mathml" select="xalan:nodeset($mathml_)"/>
3965
+
3966
+ <xsl:variable name="math_text">
3967
+ <xsl:value-of select="normalize-space($mathml)"/>
3968
+ <xsl:for-each select="$mathml//@open"><xsl:value-of select="."/></xsl:for-each>
3969
+ <xsl:for-each select="$mathml//@close"><xsl:value-of select="."/></xsl:for-each>
3970
+ </xsl:variable>
3971
+ <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
3972
+ </xsl:if>
3973
+ </xsl:template><xsl:template name="calculate-column-widths-autolayout-algorithm">
3974
+ <xsl:param name="table"/>
3975
+ <xsl:param name="if">false</xsl:param> <!-- via intermediate format -->
3976
+
3977
+ <!-- The algorithm uses two passes through the table data and scales linearly with the size of the table -->
3978
+
3979
+ <!-- In the first pass, line wrapping is disabled, and the user agent keeps track of the minimum and maximum width of each cell. -->
3980
+
3981
+ <!-- Since line wrap has been disabled, paragraphs are treated as long lines unless broken by BR elements. -->
3982
+
3983
+ <!-- get current table id -->
3984
+ <xsl:variable name="table_id" select="@id"/>
3985
+ <!-- find table by id in the file 'table_widths' -->
3986
+ <xsl:variable name="table-if_" select="$table_widths_from_if//table[@id = $table_id]"/>
3987
+ <xsl:variable name="table-if" select="xalan:nodeset($table-if_)"/>
3988
+
3989
+
3990
+ <!-- table='<xsl:copy-of select="$table"/>' -->
3991
+ <!-- table_id='<xsl:value-of select="$table_id"/>\ -->
3992
+ <!-- table-if='<xsl:copy-of select="$table-if"/>' -->
3993
+ <!-- table_widths_from_if='<xsl:copy-of select="$table_widths_from_if"/>' -->
3994
+
3995
+ <xsl:variable name="table_with_cell_widths_">
3996
+ <xsl:choose>
3997
+ <xsl:when test="$if = 'true' and normalize-space($table-if) != ''"> <!-- if we read column's width from IF and there is table in IF -->
3998
+
3999
+ <!-- Example: <column>10</column>
4000
+ <column>11</column>
4001
+ -->
4002
+ <xsl:apply-templates select="$table-if" mode="determine_cell_widths-if"/>
4003
+ </xsl:when>
4004
+ <xsl:otherwise>
4005
+ <xsl:apply-templates select="xalan:nodeset($table)" mode="determine_cell_widths"/>
4006
+ </xsl:otherwise>
4007
+ </xsl:choose>
4008
+ </xsl:variable>
4009
+ <xsl:variable name="table_with_cell_widths" select="xalan:nodeset($table_with_cell_widths_)"/>
4010
+
4011
+ <xsl:if test="$table_if_debug = 'true'">
4012
+ <xsl:copy-of select="$table_with_cell_widths"/>
4013
+ </xsl:if>
4014
+
4015
+
4016
+ <!-- The minimum and maximum cell widths are then used to determine the corresponding minimum and maximum widths for the columns. -->
4017
+
4018
+ <xsl:variable name="column_widths_">
4019
+ <!-- iteration of columns -->
4020
+ <xsl:for-each select="$table_with_cell_widths//tr[1]/td">
4021
+ <xsl:variable name="pos" select="position()"/>
4022
+ <column>
4023
+ <xsl:attribute name="width_max">
4024
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_max">
4025
+ <xsl:sort select="." data-type="number" order="descending"/>
4026
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4027
+ </xsl:for-each>
4028
+ </xsl:attribute>
4029
+ <xsl:attribute name="width_min">
4030
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_min">
4031
+ <xsl:sort select="." data-type="number" order="descending"/>
4032
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4033
+ </xsl:for-each>
4034
+ </xsl:attribute>
4035
+ </column>
4036
+ </xsl:for-each>
4037
+ </xsl:variable>
4038
+ <xsl:variable name="column_widths" select="xalan:nodeset($column_widths_)"/>
4039
+
4040
+ <!-- <column_widths>
4041
+ <xsl:copy-of select="$column_widths"/>
4042
+ </column_widths> -->
4043
+
4044
+ <!-- These in turn, are used to find the minimum and maximum width for the table. -->
4045
+ <xsl:variable name="table_widths_">
4046
+ <table>
4047
+ <xsl:attribute name="width_max">
4048
+ <xsl:value-of select="sum($column_widths/column/@width_max)"/>
4049
+ </xsl:attribute>
4050
+ <xsl:attribute name="width_min">
4051
+ <xsl:value-of select="sum($column_widths/column/@width_min)"/>
4052
+ </xsl:attribute>
4053
+ </table>
4054
+ </xsl:variable>
4055
+ <xsl:variable name="table_widths" select="xalan:nodeset($table_widths_)"/>
4056
+
4057
+ <xsl:variable name="page_width">
4058
+ <xsl:choose>
4059
+ <xsl:when test="$if = 'true'"><xsl:value-of select="$table-if/@page-width"/></xsl:when>
4060
+ <xsl:otherwise>75</xsl:otherwise>
4061
+ </xsl:choose>
4062
+ </xsl:variable>
4063
+
4064
+ <xsl:if test="$table_if_debug = 'true'">
4065
+ <table_width>
4066
+ <xsl:copy-of select="$table_widths"/>
4067
+ </table_width>
4068
+ <!-- <debug>$table_widths/@width_min=<xsl:value-of select="$table_widths/table/@width_min"/></debug>
4069
+ <debug>$table_widths/@width_max=<xsl:value-of select="$table_widths/table/@width_max"/></debug>
4070
+ -->
4071
+ <debug>$page_width=<xsl:value-of select="$page_width"/></debug>
4072
+ </xsl:if>
4073
+
4074
+
4075
+ <!-- There are three cases: -->
4076
+ <xsl:choose>
4077
+ <!-- 1. The minimum table width is equal to or wider than the available space -->
4078
+ <xsl:when test="$table_widths/table/@width_min &gt;= $page_width and 1 = 2"> <!-- this condition isn't working see case 3 below -->
4079
+ <!-- call old algorithm -->
4080
+ <case1/>
4081
+ <xsl:variable name="cols-count" select="count(xalan:nodeset($table)/*/tr[1]/td)"/>
4082
+ <xsl:call-template name="calculate-column-widths-proportional">
4083
+ <xsl:with-param name="cols-count" select="$cols-count"/>
4084
+ <xsl:with-param name="table" select="$table"/>
4085
+ </xsl:call-template>
4086
+ </xsl:when>
4087
+ <!-- 2. The maximum table width fits within the available space. In this case, set the columns to their maximum widths. -->
4088
+ <xsl:when test="$table_widths/table/@width_max &lt;= $page_width">
4089
+ <case2/>
4090
+ <autolayout/>
4091
+ <xsl:for-each select="$column_widths/column/@width_max">
4092
+ <column divider="100"><xsl:value-of select="."/></column>
4093
+ </xsl:for-each>
4094
+ </xsl:when>
4095
+ <!-- 3. The maximum width of the table is greater than the available space, but the minimum table width is smaller.
4096
+ In this case, find the difference between the available space and the minimum table width, lets call it W.
4097
+ Lets also call D the difference between maximum and minimum width of the table.
4098
+ For each column, let d be the difference between maximum and minimum width of that column.
4099
+ Now set the column's width to the minimum width plus d times W over D.
4100
+ This makes columns with large differences between minimum and maximum widths wider than columns with smaller differences. -->
4101
+ <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)">
4102
+ <!-- difference between the available space and the minimum table width -->
4103
+ <xsl:variable name="W" select="$page_width - $table_widths/table/@width_min"/>
4104
+ <W><xsl:value-of select="$W"/></W>
4105
+ <!-- difference between maximum and minimum width of the table -->
4106
+ <xsl:variable name="D" select="$table_widths/table/@width_max - $table_widths/table/@width_min"/>
4107
+ <D><xsl:value-of select="$D"/></D>
4108
+ <case3/>
4109
+ <autolayout/>
4110
+ <xsl:if test="$table_widths/table/@width_min &gt;= $page_width">
4111
+ <split_keep-within-line>true</split_keep-within-line>
4112
+ </xsl:if>
4113
+ <xsl:for-each select="$column_widths/column">
4114
+ <!-- difference between maximum and minimum width of that column. -->
4115
+ <xsl:variable name="d" select="@width_max - @width_min"/>
4116
+ <d><xsl:value-of select="$d"/></d>
4117
+ <width_min><xsl:value-of select="@width_min"/></width_min>
4118
+ <e><xsl:value-of select="$d * $W div $D"/></e>
4119
+ <!-- set the column's width to the minimum width plus d times W over D. -->
4120
+ <column divider="100">
4121
+ <xsl:value-of select="round(@width_min + $d * $W div $D)"/> <!-- * 10 -->
4122
+ </column>
4123
+ </xsl:for-each>
4124
+
4125
+ </xsl:when>
4126
+ <xsl:otherwise><unknown_case/></xsl:otherwise>
4127
+ </xsl:choose>
4128
+
4129
+
4130
+ </xsl:template><xsl:template match="@*|node()" mode="determine_cell_widths">
4131
+ <xsl:copy>
4132
+ <xsl:apply-templates select="@*|node()" mode="determine_cell_widths"/>
4133
+ </xsl:copy>
4134
+ </xsl:template><xsl:template match="td | th" mode="determine_cell_widths">
4135
+ <xsl:copy>
4136
+ <xsl:copy-of select="@*"/>
4137
+
4138
+ <!-- The maximum width is given by the widest line. -->
4139
+ <xsl:variable name="widths_max">
4140
+ <xsl:for-each select=".//*[local-name() = 'p']">
4141
+ <xsl:call-template name="add_width"/>
4142
+ </xsl:for-each>
4143
+ <xsl:if test="not(*[local-name() = 'p'])">
4144
+ <xsl:call-template name="add_width"/>
3794
4145
  </xsl:if>
4146
+ </xsl:variable>
4147
+ <xsl:variable name="width_max">
4148
+ <xsl:for-each select="xalan:nodeset($widths_max)//width">
4149
+ <xsl:sort select="." data-type="number" order="descending"/>
4150
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4151
+ </xsl:for-each>
4152
+ </xsl:variable>
4153
+ <xsl:attribute name="width_max">
4154
+ <xsl:value-of select="$width_max"/>
4155
+ </xsl:attribute>
4156
+
4157
+ <!-- The minimum width is given by the widest text element (word, image, etc.) -->
4158
+ <!-- To do: image width -->
4159
+ <xsl:variable name="td_text">
4160
+ <xsl:apply-templates select="." mode="td_text"/>
4161
+ </xsl:variable>
4162
+ <xsl:variable name="words">
4163
+ <xsl:variable name="string_with_added_zerospaces">
4164
+ <xsl:call-template name="add-zero-spaces-java">
4165
+ <xsl:with-param name="text" select="$td_text"/>
4166
+ </xsl:call-template>
4167
+ </xsl:variable>
4168
+ <xsl:call-template name="tokenize">
4169
+ <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
4170
+ </xsl:call-template>
4171
+ </xsl:variable>
4172
+
4173
+ <xsl:variable name="max_word_length">
4174
+ <xsl:call-template name="max_length">
4175
+ <xsl:with-param name="words" select="xalan:nodeset($words)"/>
4176
+ </xsl:call-template>
4177
+ </xsl:variable>
4178
+ <xsl:variable name="width_min">
4179
+ <xsl:value-of select="$max_word_length"/>
4180
+ </xsl:variable>
4181
+ <xsl:attribute name="width_min">
4182
+ <xsl:value-of select="$width_min"/>
4183
+ </xsl:attribute>
4184
+ <!-- width_max="1" width_min="1.5"> --> <!-- see 'tokenize' template, multiply 1.5 for all latin capitals -->
4185
+ <xsl:if test="$width_min &gt; $width_max">
4186
+ <xsl:attribute name="width_max">
4187
+ <xsl:value-of select="$width_min"/>
4188
+ </xsl:attribute>
4189
+ </xsl:if>
4190
+ <xsl:if test="$width_min = 0">
4191
+ <xsl:attribute name="width_min">1</xsl:attribute>
4192
+ </xsl:if>
4193
+
4194
+ <xsl:apply-templates select="node()" mode="determine_cell_widths"/>
4195
+
4196
+ </xsl:copy>
4197
+ </xsl:template><xsl:template name="add_width">
4198
+ <xsl:variable name="p_text"><xsl:apply-templates select="." mode="td_text"/></xsl:variable>
4199
+ <xsl:variable name="p_text_len_" select="string-length(normalize-space($p_text))"/>
4200
+
4201
+ <xsl:variable name="p_text_len">
4202
+ <xsl:choose>
4203
+ <xsl:when test="normalize-space(translate($p_text, concat($upper,'0123456789'), '')) = ''"> <!-- english word in CAPITAL letters -->
4204
+ <xsl:value-of select="$p_text_len_ * 1.5"/>
4205
+ </xsl:when>
4206
+ <xsl:otherwise><xsl:value-of select="$p_text_len_"/></xsl:otherwise>
4207
+ </xsl:choose>
4208
+ </xsl:variable>
4209
+
4210
+ <xsl:variable name="math_addon_text">
4211
+ <xsl:for-each select=".//*[local-name() = 'math']">
4212
+ <xsl:apply-templates mode="td_text"/>
3795
4213
  </xsl:for-each>
3796
4214
  </xsl:variable>
4215
+ <xsl:variable name="math_addon_length" select="string-length(normalize-space($math_addon_text)) * 0.2"/> <!-- plus 20% -->
3797
4216
 
3798
- <xsl:variable name="math_text" select="normalize-space(xalan:nodeset($mathml))"/>
3799
- <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
4217
+ <width><xsl:value-of select="$p_text_len + $math_addon_length"/></width>
4218
+ </xsl:template><xsl:template match="@*|node()" mode="determine_cell_widths-if">
4219
+ <xsl:copy>
4220
+ <xsl:apply-templates select="@*|node()" mode="determine_cell_widths-if"/>
4221
+ </xsl:copy>
4222
+ </xsl:template><xsl:template match="td | th" mode="determine_cell_widths-if">
4223
+ <xsl:copy>
4224
+ <xsl:copy-of select="@*"/>
4225
+
4226
+ <!-- The maximum width is given by the widest line. -->
4227
+ <xsl:attribute name="width_max">
4228
+ <xsl:for-each select="p_len">
4229
+ <xsl:sort select="." data-type="number" order="descending"/>
4230
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4231
+ </xsl:for-each>
4232
+ </xsl:attribute>
4233
+
4234
+ <!-- The minimum width is given by the widest text element (word, image, etc.) -->
4235
+ <xsl:variable name="width_min">
4236
+ <xsl:for-each select="word_len">
4237
+ <xsl:sort select="." data-type="number" order="descending"/>
4238
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4239
+ </xsl:for-each>
4240
+ </xsl:variable>
4241
+ <xsl:attribute name="width_min">
4242
+ <xsl:value-of select="$width_min"/>
4243
+ </xsl:attribute>
4244
+
4245
+ <xsl:if test="$width_min = 0">
4246
+ <xsl:attribute name="width_min">1</xsl:attribute>
4247
+ </xsl:if>
4248
+
4249
+ <xsl:apply-templates select="node()" mode="determine_cell_widths-if"/>
4250
+
4251
+ </xsl:copy>
3800
4252
  </xsl:template><xsl:template match="*[local-name()='thead']">
3801
4253
  <xsl:param name="cols-count"/>
3802
4254
  <fo:table-header>
@@ -3881,16 +4333,10 @@
3881
4333
  </xsl:for-each>
3882
4334
  </xsl:when>
3883
4335
  <xsl:otherwise>
3884
- <xsl:for-each select="xalan:nodeset($colwidths)//column">
3885
- <xsl:choose>
3886
- <xsl:when test=". = 1 or . = 0">
3887
- <fo:table-column column-width="proportional-column-width(2)"/>
3888
- </xsl:when>
3889
- <xsl:otherwise>
3890
- <fo:table-column column-width="proportional-column-width({.})"/>
3891
- </xsl:otherwise>
3892
- </xsl:choose>
3893
- </xsl:for-each>
4336
+ <!-- $colwidths=<xsl:copy-of select="$colwidths"/> -->
4337
+ <xsl:call-template name="insertTableColumnWidth">
4338
+ <xsl:with-param name="colwidths" select="$colwidths"/>
4339
+ </xsl:call-template>
3894
4340
  </xsl:otherwise>
3895
4341
  </xsl:choose>
3896
4342
 
@@ -3977,29 +4423,75 @@
3977
4423
 
3978
4424
  </fo:table-body>
3979
4425
 
3980
- </xsl:template><xsl:template match="*[local-name()='thead']/*[local-name()='tr']" priority="2">
3981
- <fo:table-row xsl:use-attribute-sets="table-header-row-style">
4426
+ </xsl:template><xsl:template match="/" mode="process_table-if">
4427
+ <xsl:param name="table_or_dl">table</xsl:param>
4428
+ <xsl:apply-templates mode="process_table-if">
4429
+ <xsl:with-param name="table_or_dl" select="$table_or_dl"/>
4430
+ </xsl:apply-templates>
4431
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="process_table-if">
4432
+ <xsl:param name="table_or_dl">table</xsl:param>
3982
4433
 
3983
-
3984
-
3985
-
4434
+ <fo:table-body>
4435
+ <xsl:for-each select="*[local-name() = 'tr']">
4436
+ <xsl:variable name="col_count" select="count(*)"/>
3986
4437
 
4438
+ <!-- iteration for each tr/td -->
4439
+
4440
+ <xsl:choose>
4441
+ <xsl:when test="$table_or_dl = 'table'">
4442
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']/*">
4443
+ <fo:table-row number-columns-spanned="{$col_count}">
4444
+ <!-- <test_table><xsl:copy-of select="."/></test_table> -->
4445
+ <xsl:call-template name="td"/>
4446
+ </fo:table-row>
4447
+ </xsl:for-each>
4448
+ </xsl:when>
4449
+ <xsl:otherwise> <!-- $table_or_dl = 'dl' -->
4450
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']">
4451
+ <xsl:variable name="is_dt" select="position() = 1"/>
4452
+
4453
+ <xsl:for-each select="*">
4454
+ <!-- <test><xsl:copy-of select="."/></test> -->
4455
+ <fo:table-row number-columns-spanned="{$col_count}">
4456
+ <xsl:choose>
4457
+ <xsl:when test="$is_dt">
4458
+ <xsl:call-template name="insert_dt_cell"/>
4459
+ </xsl:when>
4460
+ <xsl:otherwise>
4461
+ <xsl:call-template name="insert_dd_cell"/>
4462
+ </xsl:otherwise>
4463
+ </xsl:choose>
4464
+ </fo:table-row>
4465
+ </xsl:for-each>
4466
+ </xsl:for-each>
4467
+ </xsl:otherwise>
4468
+ </xsl:choose>
4469
+
4470
+ </xsl:for-each>
4471
+ </fo:table-body>
4472
+ </xsl:template><xsl:template match="*[local-name()='thead']/*[local-name()='tr']" priority="2">
4473
+ <fo:table-row xsl:use-attribute-sets="table-header-row-style">
4474
+
4475
+
4476
+
4477
+
4478
+
4479
+
4480
+
4481
+ <xsl:call-template name="setTableRowAttributes"/>
4482
+
4483
+ <xsl:apply-templates/>
4484
+ </fo:table-row>
4485
+ </xsl:template><xsl:template match="*[local-name()='tfoot']/*[local-name()='tr']" priority="2">
4486
+ <fo:table-row xsl:use-attribute-sets="table-footer-row-style">
4487
+
4488
+ <xsl:call-template name="setTableRowAttributes"/>
4489
+ <xsl:apply-templates/>
4490
+ </fo:table-row>
4491
+ </xsl:template><xsl:template match="*[local-name()='tr']">
4492
+ <fo:table-row xsl:use-attribute-sets="table-body-row-style">
4493
+
3987
4494
 
3988
-
3989
- <xsl:call-template name="setTableRowAttributes"/>
3990
-
3991
- <xsl:apply-templates/>
3992
- </fo:table-row>
3993
- </xsl:template><xsl:template match="*[local-name()='tfoot']/*[local-name()='tr']" priority="2">
3994
- <fo:table-row xsl:use-attribute-sets="table-footer-row-style">
3995
-
3996
- <xsl:call-template name="setTableRowAttributes"/>
3997
- <xsl:apply-templates/>
3998
- </fo:table-row>
3999
- </xsl:template><xsl:template match="*[local-name()='tr']">
4000
- <fo:table-row xsl:use-attribute-sets="table-body-row-style">
4001
-
4002
-
4003
4495
 
4004
4496
 
4005
4497
 
@@ -4068,7 +4560,7 @@
4068
4560
  </xsl:choose>
4069
4561
  </xsl:attribute>
4070
4562
  </xsl:if>
4071
- </xsl:template><xsl:template match="*[local-name()='td']">
4563
+ </xsl:template><xsl:template match="*[local-name()='td']" name="td">
4072
4564
  <fo:table-cell xsl:use-attribute-sets="table-cell-style"> <!-- text-align="{@align}" -->
4073
4565
  <xsl:call-template name="setTextAlignment">
4074
4566
  <xsl:with-param name="default">left</xsl:with-param>
@@ -4106,11 +4598,24 @@
4106
4598
 
4107
4599
  <xsl:call-template name="setTableCellAttributes"/>
4108
4600
 
4601
+ <xsl:if test="$isGenerateTableIF = 'true'">
4602
+ <xsl:attribute name="border">1pt solid black</xsl:attribute> <!-- border is mandatory, to determine page width -->
4603
+ <xsl:attribute name="text-align">left</xsl:attribute>
4604
+ </xsl:if>
4605
+
4109
4606
  <fo:block>
4110
4607
 
4608
+ <xsl:if test="$isGenerateTableIF = 'true'">
4609
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
4610
+ </xsl:if>
4611
+
4612
+
4111
4613
 
4112
4614
 
4113
4615
  <xsl:apply-templates/>
4616
+
4617
+ <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"/> -->
4618
+
4114
4619
  </fo:block>
4115
4620
  </fo:table-cell>
4116
4621
  </xsl:template><xsl:template match="*[local-name()='table']/*[local-name()='note']" priority="2">
@@ -4307,9 +4812,9 @@
4307
4812
  <!-- current hierarchy is 'figure' element -->
4308
4813
  <xsl:variable name="following_dl_colwidths">
4309
4814
  <xsl:if test="*[local-name() = 'dl']"><!-- if there is a 'dl', then set the same columns width as for 'dl' -->
4310
- <xsl:variable name="html-table">
4311
- <xsl:variable name="doc_ns">
4312
-
4815
+ <xsl:variable name="simple-table">
4816
+ <!-- <xsl:variable name="doc_ns">
4817
+ <xsl:if test="$namespace = 'bipm'">bipm</xsl:if>
4313
4818
  </xsl:variable>
4314
4819
  <xsl:variable name="ns">
4315
4820
  <xsl:choose>
@@ -4320,7 +4825,7 @@
4320
4825
  <xsl:value-of select="substring-before(name(/*), '-')"/>
4321
4826
  </xsl:otherwise>
4322
4827
  </xsl:choose>
4323
- </xsl:variable>
4828
+ </xsl:variable> -->
4324
4829
 
4325
4830
  <xsl:for-each select="*[local-name() = 'dl'][1]">
4326
4831
  <tbody>
@@ -4331,7 +4836,7 @@
4331
4836
 
4332
4837
  <xsl:call-template name="calculate-column-widths">
4333
4838
  <xsl:with-param name="cols-count" select="2"/>
4334
- <xsl:with-param name="table" select="$html-table"/>
4839
+ <xsl:with-param name="table" select="$simple-table"/>
4335
4840
  </xsl:call-template>
4336
4841
 
4337
4842
  </xsl:if>
@@ -4457,8 +4962,10 @@
4457
4962
  <!-- and (not(../@class) or ../@class !='pseudocode') -->
4458
4963
  </xsl:variable>
4459
4964
 
4965
+ <xsl:variable name="onlyOneComponent" select="normalize-space($parent = 'formula' and count(*[local-name()='dt']) = 1)"/>
4966
+
4460
4967
  <xsl:choose>
4461
- <xsl:when test="$parent = 'formula' and count(*[local-name()='dt']) = 1"> <!-- only one component -->
4968
+ <xsl:when test="$onlyOneComponent = 'true'"> <!-- only one component -->
4462
4969
 
4463
4970
  <fo:block text-align="left">
4464
4971
 
@@ -4480,7 +4987,7 @@
4480
4987
  <xsl:apply-templates select="*[local-name()='dd']/*" mode="inline"/>
4481
4988
  </fo:block>
4482
4989
 
4483
- </xsl:when>
4990
+ </xsl:when> <!-- END: only one component -->
4484
4991
  <xsl:when test="$parent = 'formula'"> <!-- a few components -->
4485
4992
  <fo:block margin-bottom="12pt" text-align="left">
4486
4993
 
@@ -4496,8 +5003,8 @@
4496
5003
  </xsl:variable>
4497
5004
  <xsl:value-of select="$title-where"/>
4498
5005
  </fo:block>
4499
- </xsl:when>
4500
- <xsl:when test="$parent = 'figure' and (not(../@class) or ../@class !='pseudocode')">
5006
+ </xsl:when> <!-- END: a few components -->
5007
+ <xsl:when test="$parent = 'figure' and (not(../@class) or ../@class !='pseudocode')"> <!-- definition list in a figure -->
4501
5008
  <fo:block font-weight="bold" text-align="left" margin-bottom="12pt" keep-with-next="always">
4502
5009
 
4503
5010
 
@@ -4513,11 +5020,11 @@
4513
5020
  </xsl:variable>
4514
5021
  <xsl:value-of select="$title-key"/>
4515
5022
  </fo:block>
4516
- </xsl:when>
5023
+ </xsl:when> <!-- END: definition list in a figure -->
4517
5024
  </xsl:choose>
4518
5025
 
4519
5026
  <!-- a few components -->
4520
- <xsl:if test="not($parent = 'formula' and count(*[local-name()='dt']) = 1)">
5027
+ <xsl:if test="$onlyOneComponent = 'false'">
4521
5028
  <fo:block>
4522
5029
 
4523
5030
 
@@ -4528,7 +5035,18 @@
4528
5035
 
4529
5036
 
4530
5037
 
5038
+
5039
+ <xsl:if test="$isGenerateTableIF = 'true'">
5040
+ <!-- to determine start of table -->
5041
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
5042
+ </xsl:if>
5043
+
4531
5044
  <fo:table width="95%" table-layout="fixed">
5045
+
5046
+ <xsl:if test="$isGenerateTableIF = 'true'">
5047
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
5048
+ </xsl:if>
5049
+
4532
5050
 
4533
5051
  <xsl:choose>
4534
5052
  <xsl:when test="normalize-space($key_iso) = 'true' and $parent = 'formula'"/>
@@ -4539,54 +5057,143 @@
4539
5057
 
4540
5058
  </xsl:when>
4541
5059
  </xsl:choose>
4542
- <!-- create virtual html table for dl/[dt and dd] -->
4543
- <xsl:variable name="html-table">
4544
- <xsl:variable name="doc_ns">
5060
+
5061
+
5062
+ <xsl:choose>
5063
+ <xsl:when test="$isGenerateTableIF = 'true'">
5064
+ <!-- generate IF for table widths -->
5065
+ <!-- example:
5066
+ <tr>
5067
+ <td valign="top" align="left" id="tab-symdu_1_1">
5068
+ <p>Symbol</p>
5069
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
5070
+ </td>
5071
+ <td valign="top" align="left" id="tab-symdu_1_2">
5072
+ <p>Description</p>
5073
+ <word id="tab-symdu_1_2_word_1">Description</word>
5074
+ </td>
5075
+ </tr>
5076
+ -->
4545
5077
 
4546
- </xsl:variable>
4547
- <xsl:variable name="ns">
4548
- <xsl:choose>
4549
- <xsl:when test="normalize-space($doc_ns) != ''">
4550
- <xsl:value-of select="normalize-space($doc_ns)"/>
4551
- </xsl:when>
4552
- <xsl:otherwise>
4553
- <xsl:value-of select="substring-before(name(/*), '-')"/>
4554
- </xsl:otherwise>
4555
- </xsl:choose>
4556
- </xsl:variable>
4557
- <tbody>
4558
- <xsl:apply-templates mode="dl"/>
4559
- </tbody>
4560
- </xsl:variable>
4561
- <!-- html-table<xsl:copy-of select="$html-table"/> -->
4562
- <xsl:variable name="colwidths">
4563
- <xsl:call-template name="calculate-column-widths">
4564
- <xsl:with-param name="cols-count" select="2"/>
4565
- <xsl:with-param name="table" select="$html-table"/>
4566
- </xsl:call-template>
4567
- </xsl:variable>
4568
- <!-- colwidths=<xsl:copy-of select="$colwidths"/> -->
4569
- <xsl:variable name="maxlength_dt">
4570
- <xsl:call-template name="getMaxLength_dt"/>
4571
- </xsl:variable>
4572
- <xsl:call-template name="setColumnWidth_dl">
4573
- <xsl:with-param name="colwidths" select="$colwidths"/>
4574
- <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
4575
- </xsl:call-template>
4576
- <fo:table-body>
4577
- <xsl:apply-templates>
4578
- <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
4579
- </xsl:apply-templates>
4580
- </fo:table-body>
5078
+ <!-- create virtual html table for dl/[dt and dd] -->
5079
+ <xsl:variable name="simple-table">
5080
+
5081
+ <xsl:variable name="dl_table">
5082
+ <tbody>
5083
+ <xsl:apply-templates mode="dl_if">
5084
+ <xsl:with-param name="id" select="@id"/>
5085
+ </xsl:apply-templates>
5086
+ </tbody>
5087
+ </xsl:variable>
5088
+
5089
+ <!-- dl_table='<xsl:copy-of select="$dl_table"/>' -->
5090
+
5091
+ <!-- Step: replace <br/> to <p>...</p> -->
5092
+ <xsl:variable name="table_without_br">
5093
+ <xsl:apply-templates select="xalan:nodeset($dl_table)" mode="table-without-br"/>
5094
+ </xsl:variable>
5095
+
5096
+ <!-- table_without_br='<xsl:copy-of select="$table_without_br"/>' -->
5097
+
5098
+ <!-- Step: add id to each cell -->
5099
+ <!-- add <word>...</word> for each word, image, math -->
5100
+ <xsl:variable name="simple-table-id">
5101
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-id">
5102
+ <xsl:with-param name="id" select="@id"/>
5103
+ </xsl:apply-templates>
5104
+ </xsl:variable>
5105
+
5106
+ <!-- simple-table-id='<xsl:copy-of select="$simple-table-id"/>' -->
5107
+
5108
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
5109
+
5110
+ </xsl:variable>
5111
+
5112
+ <!-- DEBUG: simple-table<xsl:copy-of select="$simple-table"/> -->
5113
+
5114
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if">
5115
+ <xsl:with-param name="table_or_dl">dl</xsl:with-param>
5116
+ </xsl:apply-templates>
5117
+
5118
+ </xsl:when>
5119
+ <xsl:otherwise>
5120
+
5121
+ <xsl:variable name="simple-table">
5122
+
5123
+ <xsl:variable name="dl_table">
5124
+ <tbody>
5125
+ <xsl:apply-templates mode="dl">
5126
+ <xsl:with-param name="id" select="@id"/>
5127
+ </xsl:apply-templates>
5128
+ </tbody>
5129
+ </xsl:variable>
5130
+
5131
+ <xsl:copy-of select="$dl_table"/>
5132
+ </xsl:variable>
5133
+
5134
+ <xsl:variable name="colwidths">
5135
+ <xsl:call-template name="calculate-column-widths">
5136
+ <xsl:with-param name="cols-count" select="2"/>
5137
+ <xsl:with-param name="table" select="$simple-table"/>
5138
+ </xsl:call-template>
5139
+ </xsl:variable>
5140
+
5141
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
5142
+ DEBUG
5143
+ colwidths=<xsl:copy-of select="$colwidths"/>
5144
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
5145
+
5146
+ <!-- colwidths=<xsl:copy-of select="$colwidths"/> -->
5147
+
5148
+ <xsl:variable name="maxlength_dt">
5149
+ <xsl:call-template name="getMaxLength_dt"/>
5150
+ </xsl:variable>
5151
+
5152
+ <xsl:variable name="isContainsKeepTogetherTag_">
5153
+ false
5154
+ </xsl:variable>
5155
+ <xsl:variable name="isContainsKeepTogetherTag" select="normalize-space($isContainsKeepTogetherTag_)"/>
5156
+ <!-- isContainsExpressReference=<xsl:value-of select="$isContainsExpressReference"/> -->
5157
+
5158
+
5159
+ <xsl:call-template name="setColumnWidth_dl">
5160
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5161
+ <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
5162
+ <xsl:with-param name="isContainsKeepTogetherTag" select="$isContainsKeepTogetherTag"/>
5163
+ </xsl:call-template>
5164
+
5165
+ <fo:table-body>
5166
+
5167
+ <!-- DEBUG -->
5168
+ <xsl:if test="$table_if_debug = 'true'">
5169
+ <fo:table-row>
5170
+ <fo:table-cell number-columns-spanned="2" font-size="60%">
5171
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
5172
+ </fo:table-cell>
5173
+ </fo:table-row>
5174
+ </xsl:if>
5175
+
5176
+ <xsl:apply-templates>
5177
+ <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
5178
+ <xsl:with-param name="split_keep-within-line" select="xalan:nodeset($colwidths)/split_keep-within-line"/>
5179
+ </xsl:apply-templates>
5180
+
5181
+ </fo:table-body>
5182
+ </xsl:otherwise>
5183
+ </xsl:choose>
4581
5184
  </fo:table>
4582
5185
  </fo:block>
4583
5186
  </fo:block>
4584
- </xsl:if>
5187
+ </xsl:if> <!-- END: a few components -->
4585
5188
  </fo:block-container>
4586
5189
  </fo:block-container>
4587
5190
  </xsl:template><xsl:template name="setColumnWidth_dl">
4588
5191
  <xsl:param name="colwidths"/>
4589
5192
  <xsl:param name="maxlength_dt"/>
5193
+ <xsl:param name="isContainsKeepTogetherTag"/>
5194
+
5195
+ <!-- <colwidths><xsl:copy-of select="$colwidths"/></colwidths> -->
5196
+
4590
5197
  <xsl:choose>
4591
5198
  <xsl:when test="ancestor::*[local-name()='dl']"><!-- second level, i.e. inlined table -->
4592
5199
  <fo:table-column column-width="50%"/>
@@ -4594,6 +5201,16 @@
4594
5201
  </xsl:when>
4595
5202
  <xsl:otherwise>
4596
5203
  <xsl:choose>
5204
+ <xsl:when test="xalan:nodeset($colwidths)/autolayout">
5205
+ <xsl:call-template name="insertTableColumnWidth">
5206
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5207
+ </xsl:call-template>
5208
+ </xsl:when>
5209
+ <xsl:when test="$isContainsKeepTogetherTag">
5210
+ <xsl:call-template name="insertTableColumnWidth">
5211
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5212
+ </xsl:call-template>
5213
+ </xsl:when>
4597
5214
  <!-- to set width check most wide chars like `W` -->
4598
5215
  <xsl:when test="normalize-space($maxlength_dt) != '' and number($maxlength_dt) &lt;= 2"> <!-- if dt contains short text like t90, a, etc -->
4599
5216
  <fo:table-column column-width="7%"/>
@@ -4624,20 +5241,31 @@
4624
5241
  <fo:table-column column-width="60%"/>
4625
5242
  </xsl:when>
4626
5243
  <xsl:otherwise>
4627
- <xsl:for-each select="xalan:nodeset($colwidths)//column">
4628
- <xsl:choose>
4629
- <xsl:when test=". = 1 or . = 0">
4630
- <fo:table-column column-width="proportional-column-width(2)"/>
4631
- </xsl:when>
4632
- <xsl:otherwise>
4633
- <fo:table-column column-width="proportional-column-width({.})"/>
4634
- </xsl:otherwise>
4635
- </xsl:choose>
4636
- </xsl:for-each>
5244
+ <xsl:call-template name="insertTableColumnWidth">
5245
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5246
+ </xsl:call-template>
4637
5247
  </xsl:otherwise>
4638
5248
  </xsl:choose>
4639
5249
  </xsl:otherwise>
4640
5250
  </xsl:choose>
5251
+ </xsl:template><xsl:template name="insertTableColumnWidth">
5252
+ <xsl:param name="colwidths"/>
5253
+
5254
+ <xsl:for-each select="xalan:nodeset($colwidths)//column">
5255
+ <xsl:choose>
5256
+ <xsl:when test=". = 1 or . = 0">
5257
+ <fo:table-column column-width="proportional-column-width(2)"/>
5258
+ </xsl:when>
5259
+ <xsl:otherwise>
5260
+ <!-- <fo:table-column column-width="proportional-column-width({.})"/> -->
5261
+ <xsl:variable name="divider">
5262
+ <xsl:value-of select="@divider"/>
5263
+ <xsl:if test="not(@divider)">1</xsl:if>
5264
+ </xsl:variable>
5265
+ <fo:table-column column-width="proportional-column-width({round(. div $divider)})"/>
5266
+ </xsl:otherwise>
5267
+ </xsl:choose>
5268
+ </xsl:for-each>
4641
5269
  </xsl:template><xsl:template name="getMaxLength_dt">
4642
5270
  <xsl:variable name="lengths">
4643
5271
  <xsl:for-each select="*[local-name()='dt']">
@@ -4661,7 +5289,6 @@
4661
5289
  <xsl:value-of select="$maxLength"/>
4662
5290
  </xsl:template><xsl:template match="*[local-name()='dl']/*[local-name()='note']" priority="2">
4663
5291
  <xsl:param name="key_iso"/>
4664
-
4665
5292
  <!-- <tr>
4666
5293
  <td>NOTE</td>
4667
5294
  <td>
@@ -4669,27 +5296,47 @@
4669
5296
  </td>
4670
5297
  </tr>
4671
5298
  -->
4672
- <fo:table-row>
5299
+ <!-- OLD Variant -->
5300
+ <!-- <fo:table-row>
4673
5301
  <fo:table-cell>
4674
5302
  <fo:block margin-top="6pt">
4675
5303
  <xsl:if test="normalize-space($key_iso) = 'true'">
4676
5304
  <xsl:attribute name="margin-top">0</xsl:attribute>
4677
5305
  </xsl:if>
4678
- <xsl:apply-templates select="*[local-name() = 'name']"/>
5306
+ <xsl:apply-templates select="*[local-name() = 'name']" />
4679
5307
  </fo:block>
4680
5308
  </fo:table-cell>
4681
5309
  <fo:table-cell>
4682
5310
  <fo:block>
4683
- <xsl:apply-templates select="node()[not(local-name() = 'name')]"/>
5311
+ <xsl:apply-templates select="node()[not(local-name() = 'name')]" />
5312
+ </fo:block>
5313
+ </fo:table-cell>
5314
+ </fo:table-row> -->
5315
+ <!-- <tr>
5316
+ <td number-columns-spanned="2">NOTE <xsl:apply-templates /> </td>
5317
+ </tr>
5318
+ -->
5319
+ <fo:table-row>
5320
+ <fo:table-cell number-columns-spanned="2">
5321
+ <fo:block>
5322
+ <xsl:call-template name="note"/>
4684
5323
  </fo:block>
4685
5324
  </fo:table-cell>
4686
5325
  </fo:table-row>
4687
5326
  </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl">
5327
+ <xsl:param name="id"/>
5328
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
4688
5329
  <tr>
4689
5330
  <td>
5331
+ <xsl:attribute name="id">
5332
+ <xsl:value-of select="concat($id,'_',$row_number,'_1')"/>
5333
+ </xsl:attribute>
4690
5334
  <xsl:apply-templates/>
4691
5335
  </td>
4692
5336
  <td>
5337
+ <xsl:attribute name="id">
5338
+ <xsl:value-of select="concat($id,'_',$row_number,'_2')"/>
5339
+ </xsl:attribute>
4693
5340
 
4694
5341
  <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
4695
5342
  <xsl:with-param name="process">true</xsl:with-param>
@@ -4700,50 +5347,122 @@
4700
5347
 
4701
5348
  </xsl:template><xsl:template match="*[local-name()='dt']">
4702
5349
  <xsl:param name="key_iso"/>
5350
+ <xsl:param name="split_keep-within-line"/>
4703
5351
 
4704
5352
  <fo:table-row xsl:use-attribute-sets="dt-row-style">
4705
- <fo:table-cell>
5353
+ <xsl:call-template name="insert_dt_cell">
5354
+ <xsl:with-param name="key_iso" select="$key_iso"/>
5355
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5356
+ </xsl:call-template>
5357
+ <xsl:for-each select="following-sibling::*[local-name()='dd'][1]">
5358
+ <xsl:call-template name="insert_dd_cell">
5359
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5360
+ </xsl:call-template>
5361
+ </xsl:for-each>
5362
+ </fo:table-row>
5363
+ </xsl:template><xsl:template name="insert_dt_cell">
5364
+ <xsl:param name="key_iso"/>
5365
+ <xsl:param name="split_keep-within-line"/>
5366
+ <fo:table-cell xsl:use-attribute-sets="dt-cell-style">
5367
+
5368
+ <xsl:if test="$isGenerateTableIF = 'true'">
5369
+ <!-- border is mandatory, to calculate real width -->
5370
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
5371
+ <xsl:attribute name="text-align">left</xsl:attribute>
5372
+ </xsl:if>
5373
+
5374
+
5375
+ <fo:block xsl:use-attribute-sets="dt-block-style">
5376
+ <xsl:copy-of select="@id"/>
5377
+
5378
+ <xsl:if test="normalize-space($key_iso) = 'true'">
5379
+ <xsl:attribute name="margin-top">0</xsl:attribute>
5380
+ </xsl:if>
5381
+
5382
+
5383
+
5384
+ <xsl:apply-templates>
5385
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5386
+ </xsl:apply-templates>
5387
+
5388
+ <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"/> -->
5389
+
5390
+ </fo:block>
5391
+ </fo:table-cell>
5392
+ </xsl:template><xsl:template name="insert_dd_cell">
5393
+ <xsl:param name="split_keep-within-line"/>
5394
+ <fo:table-cell xsl:use-attribute-sets="dd-cell-style">
5395
+
5396
+ <xsl:if test="$isGenerateTableIF = 'true'">
5397
+ <!-- border is mandatory, to calculate real width -->
5398
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
5399
+ </xsl:if>
5400
+
5401
+ <fo:block>
5402
+
5403
+ <xsl:if test="$isGenerateTableIF = 'true'">
5404
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
5405
+ </xsl:if>
5406
+
4706
5407
 
4707
- <fo:block xsl:use-attribute-sets="dt-style">
4708
- <xsl:copy-of select="@id"/>
4709
-
4710
- <xsl:if test="normalize-space($key_iso) = 'true'">
4711
- <xsl:attribute name="margin-top">0</xsl:attribute>
4712
- </xsl:if>
4713
-
4714
-
4715
-
4716
- <xsl:apply-templates/>
4717
- </fo:block>
4718
- </fo:table-cell>
4719
- <fo:table-cell>
4720
- <fo:block>
4721
-
4722
5408
 
4723
- <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
4724
- <xsl:with-param name="process">true</xsl:with-param>
4725
- </xsl:apply-templates>
4726
- </fo:block>
4727
- </fo:table-cell>
4728
- </fo:table-row>
5409
+ <xsl:choose>
5410
+ <xsl:when test="$isGenerateTableIF = 'true'">
5411
+ <xsl:apply-templates> <!-- following-sibling::*[local-name()='dd'][1] -->
5412
+ <xsl:with-param name="process">true</xsl:with-param>
5413
+ </xsl:apply-templates>
5414
+ </xsl:when>
5415
+ <xsl:otherwise>
5416
+ <xsl:apply-templates select="."> <!-- following-sibling::*[local-name()='dd'][1] -->
5417
+ <xsl:with-param name="process">true</xsl:with-param>
5418
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5419
+ </xsl:apply-templates>
5420
+ </xsl:otherwise>
5421
+
5422
+ </xsl:choose>
5423
+
5424
+ <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"/> -->
5425
+
5426
+ </fo:block>
5427
+ </fo:table-cell>
4729
5428
  </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl"/><xsl:template match="*[local-name()='dd']" mode="dl_process">
4730
5429
  <xsl:apply-templates/>
4731
5430
  </xsl:template><xsl:template match="*[local-name()='dd']">
4732
5431
  <xsl:param name="process">false</xsl:param>
5432
+ <xsl:param name="split_keep-within-line"/>
4733
5433
  <xsl:if test="$process = 'true'">
4734
5434
  <xsl:apply-templates select="@language"/>
4735
- <xsl:apply-templates/>
5435
+ <xsl:apply-templates>
5436
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5437
+ </xsl:apply-templates>
4736
5438
  </xsl:if>
4737
5439
  </xsl:template><xsl:template match="*[local-name()='dd']/*[local-name()='p']" mode="inline">
4738
5440
  <fo:inline><xsl:text> </xsl:text><xsl:apply-templates/></fo:inline>
4739
- </xsl:template><xsl:template match="*[local-name()='em']">
5441
+ </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl_if">
5442
+ <xsl:param name="id"/>
5443
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
5444
+ <tr>
5445
+ <td>
5446
+ <xsl:copy-of select="node()"/>
5447
+ </td>
5448
+ <td>
5449
+
5450
+ <xsl:copy-of select="following-sibling::*[local-name()='dd'][1]/node()"/>
5451
+
5452
+ </td>
5453
+ </tr>
5454
+
5455
+ </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl_if"/><xsl:template match="*[local-name()='em']">
4740
5456
  <fo:inline font-style="italic">
4741
5457
  <xsl:apply-templates/>
4742
5458
  </fo:inline>
4743
5459
  </xsl:template><xsl:template match="*[local-name()='strong'] | *[local-name()='b']">
5460
+ <xsl:param name="split_keep-within-line"/>
4744
5461
  <fo:inline font-weight="bold">
4745
5462
 
4746
- <xsl:apply-templates/>
5463
+ <xsl:apply-templates>
5464
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5465
+ </xsl:apply-templates>
4747
5466
  </fo:inline>
4748
5467
  </xsl:template><xsl:template match="*[local-name()='padding']">
4749
5468
  <fo:inline padding-right="{@value}"> </fo:inline>
@@ -4782,13 +5501,15 @@
4782
5501
  <xsl:choose>
4783
5502
  <xsl:when test="$font-size = 'inherit'"><xsl:value-of select="$font-size"/></xsl:when>
4784
5503
  <xsl:when test="contains($font-size, '%')"><xsl:value-of select="$font-size"/></xsl:when>
4785
- <xsl:when test="ancestor::*[local-name()='note']"><xsl:value-of select="$font-size * 0.91"/>pt</xsl:when>
5504
+ <xsl:when test="ancestor::*[local-name()='note'] or ancestor::*[local-name()='example']"><xsl:value-of select="$font-size * 0.91"/>pt</xsl:when>
4786
5505
  <xsl:otherwise><xsl:value-of select="$font-size"/>pt</xsl:otherwise>
4787
5506
  </xsl:choose>
4788
5507
  </xsl:attribute>
4789
5508
  </xsl:if>
4790
5509
  <xsl:apply-templates/>
4791
5510
  </fo:inline>
5511
+ </xsl:template><xsl:template match="*[local-name()='tt']/text()" priority="2">
5512
+ <xsl:call-template name="add_spaces_to_sourcecode"/>
4792
5513
  </xsl:template><xsl:template match="*[local-name()='underline']">
4793
5514
  <fo:inline text-decoration="underline">
4794
5515
  <xsl:apply-templates/>
@@ -4936,54 +5657,120 @@
4936
5657
  <fo:block break-after="page"/>
4937
5658
  <fo:block> </fo:block>
4938
5659
  <fo:block break-after="page"/>
5660
+ </xsl:template><xsl:template match="*[local-name() = 'span']">
5661
+ <xsl:apply-templates/>
4939
5662
  </xsl:template><xsl:template name="tokenize">
4940
5663
  <xsl:param name="text"/>
4941
5664
  <xsl:param name="separator" select="' '"/>
4942
5665
  <xsl:choose>
5666
+
5667
+ <xsl:when test="$isGenerateTableIF = 'true' and not(contains($text, $separator))">
5668
+ <word><xsl:value-of select="normalize-space($text)"/></word>
5669
+ </xsl:when>
4943
5670
  <xsl:when test="not(contains($text, $separator))">
4944
5671
  <word>
4945
- <xsl:variable name="str_no_en_chars" select="normalize-space(translate($text, $en_chars, ''))"/>
4946
- <xsl:variable name="len_str_no_en_chars" select="string-length($str_no_en_chars)"/>
4947
5672
  <xsl:variable name="len_str_tmp" select="string-length(normalize-space($text))"/>
4948
- <xsl:variable name="len_str">
4949
- <xsl:choose>
4950
- <xsl:when test="normalize-space(translate($text, $upper, '')) = ''"> <!-- english word in CAPITAL letters -->
4951
- <xsl:value-of select="$len_str_tmp * 1.5"/>
4952
- </xsl:when>
4953
- <xsl:otherwise>
4954
- <xsl:value-of select="$len_str_tmp"/>
4955
- </xsl:otherwise>
4956
- </xsl:choose>
4957
- </xsl:variable>
4958
-
4959
- <!-- <xsl:if test="$len_str_no_en_chars div $len_str &gt; 0.8">
4960
- <xsl:message>
4961
- div=<xsl:value-of select="$len_str_no_en_chars div $len_str"/>
4962
- len_str=<xsl:value-of select="$len_str"/>
4963
- len_str_no_en_chars=<xsl:value-of select="$len_str_no_en_chars"/>
4964
- </xsl:message>
4965
- </xsl:if> -->
4966
- <!-- <len_str_no_en_chars><xsl:value-of select="$len_str_no_en_chars"/></len_str_no_en_chars>
4967
- <len_str><xsl:value-of select="$len_str"/></len_str> -->
4968
5673
  <xsl:choose>
4969
- <xsl:when test="$len_str_no_en_chars div $len_str &gt; 0.8"> <!-- means non-english string -->
4970
- <xsl:value-of select="$len_str - $len_str_no_en_chars"/>
5674
+ <xsl:when test="normalize-space(translate($text, 'X', '')) = ''"> <!-- special case for keep-together.within-line -->
5675
+ <xsl:value-of select="$len_str_tmp"/>
4971
5676
  </xsl:when>
4972
5677
  <xsl:otherwise>
4973
- <xsl:value-of select="$len_str"/>
5678
+ <xsl:variable name="str_no_en_chars" select="normalize-space(translate($text, $en_chars, ''))"/>
5679
+ <xsl:variable name="len_str_no_en_chars" select="string-length($str_no_en_chars)"/>
5680
+ <xsl:variable name="len_str">
5681
+ <xsl:choose>
5682
+ <xsl:when test="normalize-space(translate($text, $upper, '')) = ''"> <!-- english word in CAPITAL letters -->
5683
+ <xsl:value-of select="$len_str_tmp * 1.5"/>
5684
+ </xsl:when>
5685
+ <xsl:otherwise>
5686
+ <xsl:value-of select="$len_str_tmp"/>
5687
+ </xsl:otherwise>
5688
+ </xsl:choose>
5689
+ </xsl:variable>
5690
+
5691
+ <!-- <xsl:if test="$len_str_no_en_chars div $len_str &gt; 0.8">
5692
+ <xsl:message>
5693
+ div=<xsl:value-of select="$len_str_no_en_chars div $len_str"/>
5694
+ len_str=<xsl:value-of select="$len_str"/>
5695
+ len_str_no_en_chars=<xsl:value-of select="$len_str_no_en_chars"/>
5696
+ </xsl:message>
5697
+ </xsl:if> -->
5698
+ <!-- <len_str_no_en_chars><xsl:value-of select="$len_str_no_en_chars"/></len_str_no_en_chars>
5699
+ <len_str><xsl:value-of select="$len_str"/></len_str> -->
5700
+ <xsl:choose>
5701
+ <xsl:when test="$len_str_no_en_chars div $len_str &gt; 0.8"> <!-- means non-english string -->
5702
+ <xsl:value-of select="$len_str - $len_str_no_en_chars"/>
5703
+ </xsl:when>
5704
+ <xsl:otherwise>
5705
+ <xsl:value-of select="$len_str"/>
5706
+ </xsl:otherwise>
5707
+ </xsl:choose>
4974
5708
  </xsl:otherwise>
4975
5709
  </xsl:choose>
4976
5710
  </word>
4977
5711
  </xsl:when>
4978
5712
  <xsl:otherwise>
4979
5713
  <word>
4980
- <xsl:value-of select="string-length(normalize-space(substring-before($text, $separator)))"/>
5714
+ <xsl:variable name="word" select="normalize-space(substring-before($text, $separator))"/>
5715
+ <xsl:choose>
5716
+ <xsl:when test="$isGenerateTableIF = 'true'">
5717
+ <xsl:value-of select="$word"/>
5718
+ </xsl:when>
5719
+ <xsl:otherwise>
5720
+ <xsl:value-of select="string-length($word)"/>
5721
+ </xsl:otherwise>
5722
+ </xsl:choose>
4981
5723
  </word>
4982
5724
  <xsl:call-template name="tokenize">
4983
5725
  <xsl:with-param name="text" select="substring-after($text, $separator)"/>
4984
5726
  </xsl:call-template>
4985
5727
  </xsl:otherwise>
4986
5728
  </xsl:choose>
5729
+ </xsl:template><xsl:template name="tokenize_with_tags">
5730
+ <xsl:param name="tags"/>
5731
+ <xsl:param name="text"/>
5732
+ <xsl:param name="separator" select="' '"/>
5733
+ <xsl:choose>
5734
+
5735
+ <xsl:when test="not(contains($text, $separator))">
5736
+ <word>
5737
+ <xsl:call-template name="enclose_text_in_tags">
5738
+ <xsl:with-param name="text" select="normalize-space($text)"/>
5739
+ <xsl:with-param name="tags" select="$tags"/>
5740
+ </xsl:call-template>
5741
+ </word>
5742
+ </xsl:when>
5743
+ <xsl:otherwise>
5744
+ <word>
5745
+ <xsl:call-template name="enclose_text_in_tags">
5746
+ <xsl:with-param name="text" select="normalize-space(substring-before($text, $separator))"/>
5747
+ <xsl:with-param name="tags" select="$tags"/>
5748
+ </xsl:call-template>
5749
+ </word>
5750
+ <xsl:call-template name="tokenize_with_tags">
5751
+ <xsl:with-param name="text" select="substring-after($text, $separator)"/>
5752
+ </xsl:call-template>
5753
+ </xsl:otherwise>
5754
+ </xsl:choose>
5755
+ </xsl:template><xsl:template name="enclose_text_in_tags">
5756
+ <xsl:param name="text"/>
5757
+ <xsl:param name="tags"/>
5758
+ <xsl:param name="num">1</xsl:param> <!-- default (start) value -->
5759
+
5760
+ <xsl:variable name="tag_name" select="normalize-space(xalan:nodeset($tags)//tag[$num])"/>
5761
+
5762
+ <xsl:choose>
5763
+ <xsl:when test="$tag_name = ''"><xsl:value-of select="$text"/></xsl:when>
5764
+ <xsl:otherwise>
5765
+ <xsl:element name="{$tag_name}">
5766
+ <xsl:call-template name="enclose_text_in_tags">
5767
+ <xsl:with-param name="text" select="$text"/>
5768
+ <xsl:with-param name="tags" select="$tags"/>
5769
+ <xsl:with-param name="num" select="$num + 1"/>
5770
+ </xsl:call-template>
5771
+ </xsl:element>
5772
+ </xsl:otherwise>
5773
+ </xsl:choose>
4987
5774
  </xsl:template><xsl:template name="max_length">
4988
5775
  <xsl:param name="words"/>
4989
5776
  <xsl:for-each select="$words//word">
@@ -5056,36 +5843,47 @@
5056
5843
  </xsl:template><xsl:template name="add-zero-spaces-equal">
5057
5844
  <xsl:param name="text" select="."/>
5058
5845
  <xsl:variable name="zero-space-after-equals">==========</xsl:variable>
5846
+ <xsl:variable name="regex_zero-space-after-equals">(==========)</xsl:variable>
5059
5847
  <xsl:variable name="zero-space-after-equal">=</xsl:variable>
5848
+ <xsl:variable name="regex_zero-space-after-equal">(=)</xsl:variable>
5060
5849
  <xsl:variable name="zero-space">​</xsl:variable>
5061
5850
  <xsl:choose>
5062
5851
  <xsl:when test="contains($text, $zero-space-after-equals)">
5063
- <xsl:value-of select="substring-before($text, $zero-space-after-equals)"/>
5852
+ <!-- <xsl:value-of select="substring-before($text, $zero-space-after-equals)"/>
5064
5853
  <xsl:value-of select="$zero-space-after-equals"/>
5065
5854
  <xsl:value-of select="$zero-space"/>
5066
5855
  <xsl:call-template name="add-zero-spaces-equal">
5067
5856
  <xsl:with-param name="text" select="substring-after($text, $zero-space-after-equals)"/>
5068
- </xsl:call-template>
5857
+ </xsl:call-template> -->
5858
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),$regex_zero-space-after-equals,concat('$1',$zero_width_space))"/>
5069
5859
  </xsl:when>
5070
5860
  <xsl:when test="contains($text, $zero-space-after-equal)">
5071
- <xsl:value-of select="substring-before($text, $zero-space-after-equal)"/>
5861
+ <!-- <xsl:value-of select="substring-before($text, $zero-space-after-equal)"/>
5072
5862
  <xsl:value-of select="$zero-space-after-equal"/>
5073
5863
  <xsl:value-of select="$zero-space"/>
5074
5864
  <xsl:call-template name="add-zero-spaces-equal">
5075
5865
  <xsl:with-param name="text" select="substring-after($text, $zero-space-after-equal)"/>
5076
- </xsl:call-template>
5866
+ </xsl:call-template> -->
5867
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),$regex_zero-space-after-equal,concat('$1',$zero_width_space))"/>
5077
5868
  </xsl:when>
5078
5869
  <xsl:otherwise>
5079
5870
  <xsl:value-of select="$text"/>
5080
5871
  </xsl:otherwise>
5081
5872
  </xsl:choose>
5082
5873
  </xsl:template><xsl:template name="getSimpleTable">
5874
+ <xsl:param name="id"/>
5875
+
5083
5876
  <xsl:variable name="simple-table">
5084
5877
 
5878
+ <!-- Step 0. replace <br/> to <p>...</p> -->
5879
+ <xsl:variable name="table_without_br">
5880
+ <xsl:apply-templates mode="table-without-br"/>
5881
+ </xsl:variable>
5882
+
5085
5883
  <!-- Step 1. colspan processing -->
5086
5884
  <xsl:variable name="simple-table-colspan">
5087
5885
  <tbody>
5088
- <xsl:apply-templates mode="simple-table-colspan"/>
5886
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-colspan"/>
5089
5887
  </tbody>
5090
5888
  </xsl:variable>
5091
5889
 
@@ -5094,10 +5892,67 @@
5094
5892
  <xsl:apply-templates select="xalan:nodeset($simple-table-colspan)" mode="simple-table-rowspan"/>
5095
5893
  </xsl:variable>
5096
5894
 
5097
- <xsl:copy-of select="xalan:nodeset($simple-table-rowspan)"/>
5098
-
5895
+ <!-- Step 3: add id to each cell -->
5896
+ <!-- add <word>...</word> for each word, image, math -->
5897
+ <xsl:variable name="simple-table-id">
5898
+ <xsl:apply-templates select="xalan:nodeset($simple-table-rowspan)" mode="simple-table-id">
5899
+ <xsl:with-param name="id" select="$id"/>
5900
+ </xsl:apply-templates>
5901
+ </xsl:variable>
5902
+
5903
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
5904
+
5099
5905
  </xsl:variable>
5100
5906
  <xsl:copy-of select="$simple-table"/>
5907
+ </xsl:template><xsl:template match="@*|node()" mode="table-without-br">
5908
+ <xsl:copy>
5909
+ <xsl:apply-templates select="@*|node()" mode="table-without-br"/>
5910
+ </xsl:copy>
5911
+ </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">
5912
+ <xsl:copy>
5913
+ <xsl:copy-of select="@*"/>
5914
+ <p>
5915
+ <xsl:copy-of select="node()"/>
5916
+ </p>
5917
+ </xsl:copy>
5918
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td'][*[local-name()='br']]" mode="table-without-br">
5919
+ <xsl:copy>
5920
+ <xsl:copy-of select="@*"/>
5921
+ <xsl:for-each select="*[local-name()='br']">
5922
+ <xsl:variable name="current_id" select="generate-id()"/>
5923
+ <p>
5924
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
5925
+ <xsl:copy-of select="."/>
5926
+ </xsl:for-each>
5927
+ </p>
5928
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
5929
+ <p>
5930
+ <xsl:for-each select="following-sibling::node()">
5931
+ <xsl:copy-of select="."/>
5932
+ </xsl:for-each>
5933
+ </p>
5934
+ </xsl:if>
5935
+ </xsl:for-each>
5936
+ </xsl:copy>
5937
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']/*[local-name() = 'p'][*[local-name()='br']]" mode="table-without-br">
5938
+ <xsl:for-each select="*[local-name()='br']">
5939
+ <xsl:variable name="current_id" select="generate-id()"/>
5940
+ <p>
5941
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
5942
+ <xsl:copy-of select="."/>
5943
+ </xsl:for-each>
5944
+ </p>
5945
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
5946
+ <p>
5947
+ <xsl:for-each select="following-sibling::node()">
5948
+ <xsl:copy-of select="."/>
5949
+ </xsl:for-each>
5950
+ </p>
5951
+ </xsl:if>
5952
+ </xsl:for-each>
5953
+ </xsl:template><xsl:template match="text()[not(ancestor::*[local-name() = 'sourcecode'])]" mode="table-without-br">
5954
+ <xsl:variable name="text" select="translate(.,'&#9;&#10;&#13;','')"/>
5955
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new($text),' {2,}',' ')"/>
5101
5956
  </xsl:template><xsl:template match="*[local-name()='thead'] | *[local-name()='tbody']" mode="simple-table-colspan">
5102
5957
  <xsl:apply-templates mode="simple-table-colspan"/>
5103
5958
  </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">
@@ -5187,6 +6042,126 @@
5187
6042
  <xsl:apply-templates select="following-sibling::tr[1]" mode="simple-table-rowspan">
5188
6043
  <xsl:with-param name="previousRow" select="$newRow"/>
5189
6044
  </xsl:apply-templates>
6045
+ </xsl:template><xsl:template match="/" mode="simple-table-id">
6046
+ <xsl:param name="id"/>
6047
+ <xsl:variable name="id_prefixed" select="concat('table_if_',$id)"/> <!-- table id prefixed by 'table_if_' to simple search in IF -->
6048
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
6049
+ <xsl:with-param name="id" select="$id_prefixed"/>
6050
+ </xsl:apply-templates>
6051
+ </xsl:template><xsl:template match="@*|node()" mode="simple-table-id">
6052
+ <xsl:param name="id"/>
6053
+ <xsl:copy>
6054
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
6055
+ <xsl:with-param name="id" select="$id"/>
6056
+ </xsl:apply-templates>
6057
+ </xsl:copy>
6058
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="simple-table-id">
6059
+ <xsl:param name="id"/>
6060
+ <xsl:copy>
6061
+ <xsl:copy-of select="@*"/>
6062
+ <xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
6063
+ <xsl:apply-templates select="node()" mode="simple-table-id">
6064
+ <xsl:with-param name="id" select="$id"/>
6065
+ </xsl:apply-templates>
6066
+ </xsl:copy>
6067
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']" mode="simple-table-id">
6068
+ <xsl:param name="id"/>
6069
+ <xsl:copy>
6070
+ <xsl:copy-of select="@*"/>
6071
+ <xsl:variable name="row_number" select="count(../preceding-sibling::*) + 1"/>
6072
+ <xsl:variable name="col_number" select="count(preceding-sibling::*) + 1"/>
6073
+ <xsl:attribute name="id">
6074
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number)"/>
6075
+ </xsl:attribute>
6076
+
6077
+ <xsl:for-each select="*[local-name() = 'p']">
6078
+ <xsl:copy>
6079
+ <xsl:copy-of select="@*"/>
6080
+ <xsl:variable name="p_num" select="count(preceding-sibling::*[local-name() = 'p']) + 1"/>
6081
+ <xsl:attribute name="id">
6082
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_p_',$p_num)"/>
6083
+ </xsl:attribute>
6084
+
6085
+ <xsl:copy-of select="node()"/>
6086
+ </xsl:copy>
6087
+ </xsl:for-each>
6088
+
6089
+
6090
+ <xsl:if test="$isGenerateTableIF = 'true'"> <!-- split each paragraph to words, image, math -->
6091
+
6092
+ <xsl:variable name="td_text">
6093
+ <xsl:apply-templates select="." mode="td_text_with_formatting"/>
6094
+ </xsl:variable>
6095
+
6096
+ <!-- td_text='<xsl:copy-of select="$td_text"/>' -->
6097
+
6098
+ <xsl:variable name="words">
6099
+ <xsl:for-each select=".//*[local-name() = 'image' or local-name() = 'stem']">
6100
+ <word>
6101
+ <xsl:copy-of select="."/>
6102
+ </word>
6103
+ </xsl:for-each>
6104
+
6105
+ <xsl:for-each select="xalan:nodeset($td_text)//*[local-name() = 'word'][normalize-space() != '']">
6106
+ <xsl:copy-of select="."/>
6107
+ </xsl:for-each>
6108
+
6109
+ </xsl:variable>
6110
+
6111
+ <xsl:for-each select="xalan:nodeset($words)/word">
6112
+ <xsl:variable name="num" select="count(preceding-sibling::word) + 1"/>
6113
+ <xsl:copy>
6114
+ <xsl:attribute name="id">
6115
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_word_',$num)"/>
6116
+ </xsl:attribute>
6117
+ <xsl:copy-of select="node()"/>
6118
+ </xsl:copy>
6119
+ </xsl:for-each>
6120
+ </xsl:if>
6121
+ </xsl:copy>
6122
+
6123
+ </xsl:template><xsl:template match="@*|node()" mode="td_text_with_formatting">
6124
+ <xsl:copy>
6125
+ <xsl:apply-templates select="@*|node()" mode="td_text_with_formatting"/>
6126
+ </xsl:copy>
6127
+ </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">
6128
+ <xsl:variable name="formatting_tags">
6129
+ <xsl:call-template name="getFormattingTags"/>
6130
+ </xsl:variable>
6131
+ <word>
6132
+ <xsl:call-template name="enclose_text_in_tags">
6133
+ <xsl:with-param name="text" select="normalize-space(.)"/>
6134
+ <xsl:with-param name="tags" select="$formatting_tags"/>
6135
+ </xsl:call-template>
6136
+ </word>
6137
+ </xsl:template><xsl:template match="*[local-name() != 'keep-together_within-line']/text()" mode="td_text_with_formatting">
6138
+
6139
+ <xsl:variable name="td_text" select="."/>
6140
+
6141
+ <xsl:variable name="string_with_added_zerospaces">
6142
+ <xsl:call-template name="add-zero-spaces-java">
6143
+ <xsl:with-param name="text" select="$td_text"/>
6144
+ </xsl:call-template>
6145
+ </xsl:variable>
6146
+
6147
+ <xsl:variable name="formatting_tags">
6148
+ <xsl:call-template name="getFormattingTags"/>
6149
+ </xsl:variable>
6150
+
6151
+ <!-- <word>text</word> -->
6152
+ <xsl:call-template name="tokenize_with_tags">
6153
+ <xsl:with-param name="tags" select="$formatting_tags"/>
6154
+ <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
6155
+ </xsl:call-template>
6156
+ </xsl:template><xsl:template name="getFormattingTags">
6157
+ <tags>
6158
+ <xsl:if test="ancestor::*[local-name() = 'strong']"><tag>strong</tag></xsl:if>
6159
+ <xsl:if test="ancestor::*[local-name() = 'em']"><tag>em</tag></xsl:if>
6160
+ <xsl:if test="ancestor::*[local-name() = 'sub']"><tag>sub</tag></xsl:if>
6161
+ <xsl:if test="ancestor::*[local-name() = 'sup']"><tag>sup</tag></xsl:if>
6162
+ <xsl:if test="ancestor::*[local-name() = 'tt']"><tag>tt</tag></xsl:if>
6163
+ <xsl:if test="ancestor::*[local-name() = 'keep-together_within-line']"><tag>keep-together_within-line</tag></xsl:if>
6164
+ </tags>
5190
6165
  </xsl:template><xsl:template name="getLang">
5191
6166
  <xsl:variable name="language_current" select="normalize-space(//*[local-name()='bibdata']//*[local-name()='language'][@current = 'true'])"/>
5192
6167
  <xsl:variable name="language">
@@ -5241,6 +6216,9 @@
5241
6216
  <xsl:variable name="isDeleted" select="@deleted"/>
5242
6217
 
5243
6218
  <fo:inline xsl:use-attribute-sets="mathml-style">
6219
+
6220
+
6221
+
5244
6222
 
5245
6223
 
5246
6224
  <xsl:call-template name="setTrackChangesStyles">
@@ -5248,48 +6226,80 @@
5248
6226
  <xsl:with-param name="isDeleted" select="$isDeleted"/>
5249
6227
  </xsl:call-template>
5250
6228
 
6229
+ <xsl:if test="$add_math_as_text = 'true'">
6230
+ <!-- insert helper tag -->
6231
+ <!-- set unique font-size (fiction) -->
6232
+ <xsl:variable name="font-size_sfx"><xsl:number level="any"/></xsl:variable>
6233
+ <fo:inline color="white" font-size="1.{$font-size_sfx}pt" font-style="normal" font-weight="normal"><xsl:value-of select="$zero_width_space"/></fo:inline> <!-- zero width space -->
6234
+ </xsl:if>
5251
6235
 
5252
-
5253
- <xsl:variable name="mathml">
5254
- <xsl:apply-templates select="." mode="mathml"/>
6236
+ <xsl:variable name="mathml_content">
6237
+ <xsl:apply-templates select="." mode="mathml_actual_text"/>
5255
6238
  </xsl:variable>
5256
- <fo:instream-foreign-object fox:alt-text="Math">
5257
6239
 
6240
+
6241
+ <xsl:call-template name="mathml_instream_object">
6242
+ <xsl:with-param name="mathml_content" select="$mathml_content"/>
6243
+ </xsl:call-template>
5258
6244
 
5259
-
5260
- <xsl:variable name="comment_text_following" select="following-sibling::node()[1][self::comment()]"/>
5261
- <xsl:variable name="comment_text_">
5262
- <xsl:choose>
5263
- <xsl:when test="normalize-space($comment_text_following) != ''">
5264
- <xsl:value-of select="$comment_text_following"/>
5265
- </xsl:when>
5266
- <xsl:otherwise>
5267
- <xsl:value-of select="normalize-space(translate(.,' ⁢',' '))"/>
5268
- </xsl:otherwise>
5269
- </xsl:choose>
5270
- </xsl:variable>
5271
- <xsl:variable name="comment_text" select="java:org.metanorma.fop.Util.unescape($comment_text_)"/>
5272
-
5273
- <xsl:if test="normalize-space($comment_text) != ''">
5274
- <!-- put Mathin Alternate Text -->
5275
- <xsl:attribute name="fox:alt-text">
5276
- <xsl:value-of select="java:org.metanorma.fop.Util.unescape($comment_text)"/>
5277
- </xsl:attribute>
5278
- </xsl:if>
5279
-
5280
- <xsl:variable name="mathml_content">
5281
- <xsl:apply-templates select="." mode="mathml_actual_text"/>
5282
- </xsl:variable>
5283
- <!-- put MathML in Actual Text -->
5284
- <xsl:attribute name="fox:actual-text">
5285
- <xsl:value-of select="$mathml_content"/>
5286
- </xsl:attribute>
5287
-
5288
-
5289
-
5290
- <xsl:copy-of select="xalan:nodeset($mathml)"/>
5291
- </fo:instream-foreign-object>
6245
+
5292
6246
  </fo:inline>
6247
+ </xsl:template><xsl:template name="getMathml_comment_text">
6248
+ <xsl:variable name="comment_text_following" select="following-sibling::node()[1][self::comment()]"/>
6249
+ <xsl:variable name="comment_text_">
6250
+ <xsl:choose>
6251
+ <xsl:when test="normalize-space($comment_text_following) != ''">
6252
+ <xsl:value-of select="$comment_text_following"/>
6253
+ </xsl:when>
6254
+ <xsl:otherwise>
6255
+ <xsl:value-of select="normalize-space(translate(.,' ⁢',' '))"/>
6256
+ </xsl:otherwise>
6257
+ </xsl:choose>
6258
+ </xsl:variable>
6259
+ <xsl:variable name="comment_text_2" select="java:org.metanorma.fop.Util.unescape($comment_text_)"/>
6260
+ <xsl:variable name="comment_text" select="java:trim(java:java.lang.String.new($comment_text_2))"/>
6261
+ <xsl:value-of select="$comment_text"/>
6262
+ </xsl:template><xsl:template name="mathml_instream_object">
6263
+ <xsl:param name="comment_text"/>
6264
+ <xsl:param name="mathml_content"/>
6265
+
6266
+ <xsl:variable name="comment_text_">
6267
+ <xsl:choose>
6268
+ <xsl:when test="normalize-space($comment_text) != ''"><xsl:value-of select="$comment_text"/></xsl:when>
6269
+ <xsl:otherwise><xsl:call-template name="getMathml_comment_text"/></xsl:otherwise>
6270
+ </xsl:choose>
6271
+ </xsl:variable>
6272
+
6273
+ <xsl:variable name="mathml">
6274
+ <xsl:apply-templates select="." mode="mathml"/>
6275
+ </xsl:variable>
6276
+
6277
+ <fo:instream-foreign-object fox:alt-text="Math">
6278
+
6279
+
6280
+
6281
+
6282
+
6283
+
6284
+
6285
+ <!-- put MathML in Actual Text -->
6286
+ <!-- DEBUG: mathml_content=<xsl:value-of select="$mathml_content"/> -->
6287
+ <xsl:attribute name="fox:actual-text">
6288
+ <xsl:value-of select="$mathml_content"/>
6289
+ </xsl:attribute>
6290
+
6291
+ <!-- <xsl:if test="$add_math_as_text = 'true'"> -->
6292
+ <xsl:if test="normalize-space($comment_text_) != ''">
6293
+ <!-- put Mathin Alternate Text -->
6294
+ <xsl:attribute name="fox:alt-text">
6295
+ <xsl:value-of select="$comment_text_"/>
6296
+ </xsl:attribute>
6297
+ </xsl:if>
6298
+ <!-- </xsl:if> -->
6299
+
6300
+ <xsl:copy-of select="xalan:nodeset($mathml)"/>
6301
+
6302
+ </fo:instream-foreign-object>
5293
6303
  </xsl:template><xsl:template match="mathml:*" mode="mathml_actual_text">
5294
6304
  <!-- <xsl:text>a+b</xsl:text> -->
5295
6305
  <xsl:text>&lt;</xsl:text>
@@ -5320,7 +6330,9 @@
5320
6330
  <!-- replace start and end spaces to non-break space -->
5321
6331
  <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'(^ )|( $)',' ')"/>
5322
6332
  </xsl:copy>
5323
- </xsl:template><xsl:template match="mathml:math/*[local-name()='unit']" mode="mathml"/><xsl:template match="mathml:math/*[local-name()='prefix']" mode="mathml"/><xsl:template match="mathml:math/*[local-name()='dimension']" mode="mathml"/><xsl:template match="mathml:math/*[local-name()='quantity']" mode="mathml"/><xsl:template match="*[local-name()='localityStack']"/><xsl:template match="*[local-name()='link']" name="link">
6333
+ </xsl:template><xsl:template match="mathml:math/*[local-name()='unit']" mode="mathml"/><xsl:template match="mathml:math/*[local-name()='prefix']" mode="mathml"/><xsl:template match="mathml:math/*[local-name()='dimension']" mode="mathml"/><xsl:template match="mathml:math/*[local-name()='quantity']" mode="mathml"/><xsl:template match="mathml:mtd/mathml:mo/text()[. = '/']" mode="mathml">
6334
+ <xsl:value-of select="."/><xsl:value-of select="$zero_width_space"/>
6335
+ </xsl:template><xsl:template match="*[local-name()='localityStack']"/><xsl:template match="*[local-name()='link']" name="link">
5324
6336
  <xsl:variable name="target">
5325
6337
  <xsl:choose>
5326
6338
  <xsl:when test="@updatetype = 'true'">
@@ -5553,7 +6565,12 @@
5553
6565
 
5554
6566
  <fo:inline xsl:use-attribute-sets="termnote-name-style">
5555
6567
 
6568
+ <xsl:if test="not(*[local-name() = 'name']/following-sibling::node()[1][self::text()][normalize-space()=''])">
6569
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
6570
+ </xsl:if>
6571
+
5556
6572
 
6573
+
5557
6574
 
5558
6575
  <!-- if 'p' contains all text in 'add' first and last elements in first p are 'add' -->
5559
6576
  <!-- <xsl:if test="*[not(local-name()='name')][1][node()[normalize-space() != ''][1][local-name() = 'add'] and node()[normalize-space() != ''][last()][local-name() = 'add']]"> -->
@@ -5912,18 +6929,33 @@
5912
6929
  </xsl:template><xsl:template match="*[local-name() = 'svg'][not(@width and @height)]" mode="svg_update">
5913
6930
  <xsl:copy>
5914
6931
  <xsl:apply-templates select="@*" mode="svg_update"/>
5915
- <xsl:variable name="viewbox">
6932
+ <xsl:variable name="viewbox_">
5916
6933
  <xsl:call-template name="split">
5917
6934
  <xsl:with-param name="pText" select="@viewBox"/>
5918
6935
  <xsl:with-param name="sep" select="' '"/>
5919
6936
  </xsl:call-template>
5920
6937
  </xsl:variable>
6938
+ <xsl:variable name="viewbox" select="xalan:nodeset($viewbox_)"/>
6939
+ <xsl:variable name="width" select="normalize-space($viewbox//item[3])"/>
6940
+ <xsl:variable name="height" select="normalize-space($viewbox//item[4])"/>
6941
+
5921
6942
  <xsl:attribute name="width">
5922
- <xsl:value-of select="round(xalan:nodeset($viewbox)//item[3])"/>
6943
+ <xsl:choose>
6944
+ <xsl:when test="$width != ''">
6945
+ <xsl:value-of select="round($width)"/>
6946
+ </xsl:when>
6947
+ <xsl:otherwise>400</xsl:otherwise> <!-- default width -->
6948
+ </xsl:choose>
5923
6949
  </xsl:attribute>
5924
6950
  <xsl:attribute name="height">
5925
- <xsl:value-of select="round(xalan:nodeset($viewbox)//item[4])"/>
6951
+ <xsl:choose>
6952
+ <xsl:when test="$height != ''">
6953
+ <xsl:value-of select="round($height)"/>
6954
+ </xsl:when>
6955
+ <xsl:otherwise>400</xsl:otherwise> <!-- default height -->
6956
+ </xsl:choose>
5926
6957
  </xsl:attribute>
6958
+
5927
6959
  <xsl:apply-templates mode="svg_update"/>
5928
6960
  </xsl:copy>
5929
6961
  </xsl:template><xsl:template match="*[local-name() = 'figure']/*[local-name() = 'image'][*[local-name() = 'svg']]" priority="3">
@@ -6118,7 +7150,11 @@
6118
7150
  <xsl:apply-templates mode="bookmarks"/>
6119
7151
  </xsl:template><xsl:template match="*[local-name() = 'title' or local-name() = 'name']//*[local-name() = 'stem']" mode="contents">
6120
7152
  <xsl:apply-templates select="."/>
6121
- </xsl:template><xsl:template match="*[local-name() = 'references'][@hidden='true']" mode="contents" priority="3"/><xsl:template match="*[local-name() = 'references']/*[local-name() = 'bibitem']" mode="contents"/><xsl:template match="*[local-name() = 'stem']" mode="bookmarks">
7153
+ </xsl:template><xsl:template match="*[local-name() = 'references'][@hidden='true']" mode="contents" priority="3"/><xsl:template match="*[local-name() = 'references']/*[local-name() = 'bibitem']" mode="contents"/><xsl:template match="*[local-name() = 'span']" mode="contents">
7154
+ <xsl:apply-templates mode="contents"/>
7155
+ </xsl:template><xsl:template match="*[local-name() = 'stem']" mode="bookmarks">
7156
+ <xsl:apply-templates mode="bookmarks"/>
7157
+ </xsl:template><xsl:template match="*[local-name() = 'span']" mode="bookmarks">
6122
7158
  <xsl:apply-templates mode="bookmarks"/>
6123
7159
  </xsl:template><xsl:template name="addBookmarks">
6124
7160
  <xsl:param name="contents"/>
@@ -6409,7 +7445,9 @@
6409
7445
  <xsl:apply-templates/>
6410
7446
  </xsl:otherwise>
6411
7447
  </xsl:choose>
6412
- </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() = 'tab']" mode="contents_item">
7448
+ </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">
7449
+ <xsl:value-of select="."/>
7450
+ </xsl:template><xsl:template match="*[local-name() = 'tab']" mode="contents_item">
6413
7451
  <xsl:text> </xsl:text>
6414
7452
  </xsl:template><xsl:template match="*[local-name() = 'strong']" mode="contents_item">
6415
7453
  <xsl:copy>
@@ -6440,9 +7478,22 @@
6440
7478
  </xsl:when>
6441
7479
  <xsl:otherwise><xsl:apply-templates mode="contents_item"/></xsl:otherwise>
6442
7480
  </xsl:choose>
7481
+ </xsl:template><xsl:template match="text()" mode="contents_item">
7482
+ <xsl:call-template name="keep_together_standard_number"/>
7483
+ </xsl:template><xsl:template match="*[local-name() = 'span']" mode="contents_item">
7484
+ <xsl:apply-templates mode="contents_item"/>
6443
7485
  </xsl:template><xsl:template match="*[local-name()='sourcecode']" name="sourcecode">
6444
7486
 
6445
7487
  <fo:block-container xsl:use-attribute-sets="sourcecode-container-style">
7488
+
7489
+ <xsl:if test="not(ancestor::*[local-name() = 'li']) or ancestor::*[local-name() = 'example']">
7490
+ <xsl:attribute name="margin-left">0mm</xsl:attribute>
7491
+ </xsl:if>
7492
+
7493
+ <xsl:if test="ancestor::*[local-name() = 'example']">
7494
+ <xsl:attribute name="margin-right">0mm</xsl:attribute>
7495
+ </xsl:if>
7496
+
6446
7497
  <xsl:copy-of select="@id"/>
6447
7498
 
6448
7499
  <xsl:if test="parent::*[local-name() = 'note']">
@@ -6542,17 +7593,15 @@
6542
7593
 
6543
7594
  <!-- split text by zero-width space -->
6544
7595
  <xsl:variable name="text_step4">
6545
- <xsl:call-template name="split">
7596
+ <xsl:call-template name="split_for_interspers">
6546
7597
  <xsl:with-param name="pText" select="$text_step3"/>
6547
7598
  <xsl:with-param name="sep" select="$zero_width_space"/>
6548
- <xsl:with-param name="normalize-space">false</xsl:with-param>
6549
- <xsl:with-param name="keep_sep">true</xsl:with-param>
6550
7599
  </xsl:call-template>
6551
7600
  </xsl:variable>
6552
7601
 
6553
- <xsl:for-each select="xalan:nodeset($text_step4)/item">
7602
+ <xsl:for-each select="xalan:nodeset($text_step4)/node()">
6554
7603
  <xsl:choose>
6555
- <xsl:when test="string-length() &gt; 30"> <!-- word with length more than 30 will be interspersed with zero-width space -->
7604
+ <xsl:when test="local-name() = 'interspers'"> <!-- word with length more than 30 will be interspersed with zero-width space -->
6556
7605
  <xsl:call-template name="interspers">
6557
7606
  <xsl:with-param name="str" select="."/>
6558
7607
  </xsl:call-template>
@@ -6563,6 +7612,30 @@
6563
7612
  </xsl:choose>
6564
7613
  </xsl:for-each>
6565
7614
 
7615
+ </xsl:template><xsl:variable name="interspers_tag_open">###interspers123###</xsl:variable><xsl:variable name="interspers_tag_close">###/interspers123###</xsl:variable><xsl:template name="split_for_interspers">
7616
+ <xsl:param name="pText" select="."/>
7617
+ <xsl:param name="sep" select="','"/>
7618
+ <!-- word with length more than 30 will be interspersed with zero-width space -->
7619
+ <xsl:variable name="regex" select="concat('([^', $zero_width_space, ']{31,})')"/> <!-- sequence of characters (more 31), that doesn't contains zero-width space -->
7620
+ <xsl:variable name="text" select="java:replaceAll(java:java.lang.String.new($pText),$regex,concat($interspers_tag_open,'$1',$interspers_tag_close))"/>
7621
+ <xsl:call-template name="replace_tag_interspers">
7622
+ <xsl:with-param name="text" select="$text"/>
7623
+ </xsl:call-template>
7624
+ </xsl:template><xsl:template name="replace_tag_interspers">
7625
+ <xsl:param name="text"/>
7626
+ <xsl:choose>
7627
+ <xsl:when test="contains($text, $interspers_tag_open)">
7628
+ <xsl:value-of select="substring-before($text, $interspers_tag_open)"/>
7629
+ <xsl:variable name="text_after" select="substring-after($text, $interspers_tag_open)"/>
7630
+ <interspers>
7631
+ <xsl:value-of select="substring-before($text_after, $interspers_tag_close)"/>
7632
+ </interspers>
7633
+ <xsl:call-template name="replace_tag_interspers">
7634
+ <xsl:with-param name="text" select="substring-after($text_after, $interspers_tag_close)"/>
7635
+ </xsl:call-template>
7636
+ </xsl:when>
7637
+ <xsl:otherwise><xsl:value-of select="$text"/></xsl:otherwise>
7638
+ </xsl:choose>
6566
7639
  </xsl:template><xsl:template name="interspers">
6567
7640
  <xsl:param name="str"/>
6568
7641
  <xsl:param name="char" select="$zero_width_space"/>
@@ -6791,7 +7864,9 @@
6791
7864
  <!-- <xsl:attribute name="border">0.5pt solid black</xsl:attribute> -->
6792
7865
  </xsl:if>
6793
7866
  <xsl:variable name="simple-table">
6794
- <xsl:call-template name="getSimpleTable"/>
7867
+ <xsl:call-template name="getSimpleTable">
7868
+ <xsl:with-param name="id" select="@id"/>
7869
+ </xsl:call-template>
6795
7870
  </xsl:variable>
6796
7871
  <xsl:variable name="cols-count" select="count(xalan:nodeset($simple-table)//tr[1]/td)"/>
6797
7872
  <xsl:if test="$cols-count = 2 and not(ancestor::*[local-name()='table'])">
@@ -6898,11 +7973,13 @@
6898
7973
  </xsl:otherwise>
6899
7974
  </xsl:choose>
6900
7975
  </xsl:template><xsl:template match="*[local-name() = 'example']">
6901
- <fo:block id="{@id}" xsl:use-attribute-sets="example-style">
6902
-
7976
+
7977
+ <fo:block-container id="{@id}" xsl:use-attribute-sets="example-style">
7978
+
6903
7979
 
7980
+
6904
7981
  <xsl:variable name="fo_element">
6905
- <xsl:if test=".//*[local-name() = 'table'] or .//*[local-name() = 'dl']">block</xsl:if>
7982
+ <xsl:if test=".//*[local-name() = 'table'] or .//*[local-name() = 'dl'] or *[not(local-name() = 'name')][1][local-name() = 'sourcecode']">block</xsl:if>
6906
7983
 
6907
7984
  <xsl:choose>
6908
7985
  <!-- if example contains only one (except 'name') element (paragraph for example), then display it on the same line as EXAMPLE title -->
@@ -6912,31 +7989,57 @@
6912
7989
 
6913
7990
  </xsl:variable>
6914
7991
 
6915
- <!-- display 'EXAMPLE' -->
6916
- <xsl:apply-templates select="*[local-name()='name']">
6917
- <xsl:with-param name="fo_element" select="$fo_element"/>
6918
- </xsl:apply-templates>
7992
+ <fo:block-container margin-left="0mm">
6919
7993
 
6920
- <xsl:choose>
6921
- <xsl:when test="contains(normalize-space($fo_element), 'block')">
6922
- <fo:block-container xsl:use-attribute-sets="example-body-style">
6923
- <fo:block-container margin-left="0mm" margin-right="0mm">
6924
- <xsl:apply-templates select="node()[not(local-name() = 'name')]">
7994
+ <xsl:choose>
7995
+
7996
+ <xsl:when test="contains(normalize-space($fo_element), 'block')">
7997
+
7998
+ <!-- display name 'EXAMPLE' in a separate block -->
7999
+ <fo:block>
8000
+ <xsl:apply-templates select="*[local-name()='name']">
6925
8001
  <xsl:with-param name="fo_element" select="$fo_element"/>
6926
8002
  </xsl:apply-templates>
8003
+ </fo:block>
8004
+
8005
+ <fo:block-container xsl:use-attribute-sets="example-body-style">
8006
+ <fo:block-container margin-left="0mm" margin-right="0mm">
8007
+ <xsl:apply-templates select="node()[not(local-name() = 'name')]">
8008
+ <xsl:with-param name="fo_element" select="$fo_element"/>
8009
+ </xsl:apply-templates>
8010
+ </fo:block-container>
6927
8011
  </fo:block-container>
6928
- </fo:block-container>
6929
- </xsl:when>
6930
- <xsl:otherwise>
6931
- <fo:inline>
6932
- <xsl:apply-templates select="node()[not(local-name() = 'name')]">
6933
- <xsl:with-param name="fo_element" select="$fo_element"/>
6934
- </xsl:apply-templates>
6935
- </fo:inline>
6936
- </xsl:otherwise>
6937
- </xsl:choose>
6938
-
6939
- </fo:block>
8012
+ </xsl:when> <!-- end block -->
8013
+
8014
+ <xsl:otherwise> <!-- inline -->
8015
+
8016
+ <!-- display 'EXAMPLE' and first element in the same line -->
8017
+ <fo:block>
8018
+ <xsl:apply-templates select="*[local-name()='name']">
8019
+ <xsl:with-param name="fo_element" select="$fo_element"/>
8020
+ </xsl:apply-templates>
8021
+ <fo:inline>
8022
+ <xsl:apply-templates select="*[not(local-name() = 'name')][1]">
8023
+ <xsl:with-param name="fo_element" select="$fo_element"/>
8024
+ </xsl:apply-templates>
8025
+ </fo:inline>
8026
+ </fo:block>
8027
+
8028
+ <xsl:if test="*[not(local-name() = 'name')][position() &gt; 1]">
8029
+ <!-- display further elements in blocks -->
8030
+ <fo:block-container xsl:use-attribute-sets="example-body-style">
8031
+ <fo:block-container margin-left="0mm" margin-right="0mm">
8032
+ <xsl:apply-templates select="*[not(local-name() = 'name')][position() &gt; 1]">
8033
+ <xsl:with-param name="fo_element" select="'block'"/>
8034
+ </xsl:apply-templates>
8035
+ </fo:block-container>
8036
+ </fo:block-container>
8037
+ </xsl:if>
8038
+ </xsl:otherwise> <!-- end inline -->
8039
+
8040
+ </xsl:choose>
8041
+ </fo:block-container>
8042
+ </fo:block-container>
6940
8043
  </xsl:template><xsl:template match="*[local-name() = 'example']/*[local-name() = 'name']">
6941
8044
  <xsl:param name="fo_element">block</xsl:param>
6942
8045
 
@@ -6968,10 +8071,16 @@
6968
8071
  </xsl:variable>
6969
8072
  <xsl:choose>
6970
8073
  <xsl:when test="starts-with(normalize-space($element), 'block')">
6971
- <fo:block xsl:use-attribute-sets="example-p-style">
6972
-
6973
- <xsl:apply-templates/>
6974
- </fo:block>
8074
+ <fo:block-container>
8075
+ <xsl:if test="ancestor::*[local-name() = 'li'] and contains(normalize-space($fo_element), 'block')">
8076
+ <xsl:attribute name="margin-left">0mm</xsl:attribute>
8077
+ <xsl:attribute name="margin-right">0mm</xsl:attribute>
8078
+ </xsl:if>
8079
+ <fo:block xsl:use-attribute-sets="example-p-style">
8080
+
8081
+ <xsl:apply-templates/>
8082
+ </fo:block>
8083
+ </fo:block-container>
6975
8084
  </xsl:when>
6976
8085
  <xsl:otherwise>
6977
8086
  <fo:inline xsl:use-attribute-sets="example-p-style">
@@ -7016,7 +8125,7 @@
7016
8125
  </xsl:otherwise>
7017
8126
  </xsl:choose> -->
7018
8127
  </fo:block>
7019
- </xsl:template><xsl:template match="*[local-name() = 'termsource']/text()[starts-with(., '[SOURCE: Adapted from: ')]" priority="2">
8128
+ </xsl:template><xsl:template match="*[local-name() = 'termsource']/text()[starts-with(., '[SOURCE: Adapted from: ') or starts-with(., '[SOURCE: Quoted from: ') or starts-with(., '[SOURCE: Modified from: ')]" priority="2">
7020
8129
  <xsl:text>[</xsl:text><xsl:value-of select="substring-after(., '[SOURCE: ')"/>
7021
8130
  </xsl:template><xsl:template match="*[local-name() = 'termsource']/text()">
7022
8131
  <xsl:if test="normalize-space() != ''">
@@ -7150,7 +8259,16 @@
7150
8259
  </fo:inline>
7151
8260
  </xsl:when>
7152
8261
  <xsl:otherwise> <!-- if there is key('bibitems_hidden', $current_bibitemid) -->
7153
- <fo:inline><xsl:apply-templates/></fo:inline>
8262
+
8263
+ <!-- if in bibitem[@hidden='true'] there is url[@type='src'], then create hyperlink -->
8264
+ <xsl:variable name="uri_src" select="normalize-space($bibitems_hidden/*[local-name() ='bibitem'][@id = $current_bibitemid]/*[local-name() = 'uri'][@type = 'src'])"/>
8265
+ <xsl:choose>
8266
+ <xsl:when test="$uri_src != ''">
8267
+ <fo:basic-link external-destination="{$uri_src}" fox:alt-text="{$uri_src}"><xsl:apply-templates/></fo:basic-link>
8268
+ </xsl:when>
8269
+ <xsl:otherwise><fo:inline><xsl:apply-templates/></fo:inline></xsl:otherwise>
8270
+ </xsl:choose>
8271
+
7154
8272
  </xsl:otherwise>
7155
8273
  </xsl:choose>
7156
8274
  </xsl:template><xsl:template match="*[local-name() = 'tab']">
@@ -7327,10 +8445,24 @@
7327
8445
 
7328
8446
  </fo:block>
7329
8447
  <xsl:apply-templates/>
7330
- </xsl:template><xsl:template match="*[local-name() = 'review']">
8448
+ </xsl:template><xsl:template match="*[local-name() = 'review']"> <!-- 'review' will be processed in mn2pdf/review.xsl -->
7331
8449
  <!-- comment 2019-11-29 -->
7332
8450
  <!-- <fo:block font-weight="bold">Review:</fo:block>
7333
8451
  <xsl:apply-templates /> -->
8452
+
8453
+ <xsl:variable name="id_from" select="normalize-space(current()/@from)"/>
8454
+
8455
+ <xsl:choose>
8456
+ <!-- if there isn't the attribute '@from', then -->
8457
+ <xsl:when test="$id_from = ''">
8458
+ <fo:block id="{@id}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
8459
+ </xsl:when>
8460
+ <!-- if there isn't element with id 'from', then create 'bookmark' here -->
8461
+ <xsl:when test="not(ancestor::*[contains(local-name(), '-standard')]//*[@id = $id_from])">
8462
+ <fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
8463
+ </xsl:when>
8464
+ </xsl:choose>
8465
+
7334
8466
  </xsl:template><xsl:template match="*[local-name() = 'name']/text()">
7335
8467
  <!-- 0xA0 to space replacement -->
7336
8468
  <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),' ',' ')"/>
@@ -7696,7 +8828,10 @@
7696
8828
  <!-- to split by '_' and other chars -->
7697
8829
  <xsl:call-template name="add-zero-spaces-java"/>
7698
8830
  </xsl:template><xsl:template match="*[local-name() = 'bookmark']" name="bookmark">
7699
- <fo:inline id="{@id}" font-size="1pt"/>
8831
+ <!-- <fo:inline id="{@id}" font-size="1pt"/> -->
8832
+ <fo:inline id="{@id}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:inline>
8833
+ <!-- we need to add zero-width space, otherwise this fo:inline is missing in IF xml -->
8834
+ <xsl:if test="not(following-sibling::node()[normalize-space() != ''])"><fo:inline font-size="1pt"> </fo:inline></xsl:if>
7700
8835
  </xsl:template><xsl:template match="*[local-name() = 'errata']">
7701
8836
  <!-- <row>
7702
8837
  <date>05-07-2013</date>
@@ -8242,6 +9377,120 @@
8242
9377
  <xsl:apply-templates select="." mode="update_xml_step1"/>
8243
9378
  </xsl:for-each>
8244
9379
  </xsl:copy>
9380
+ </xsl:template><xsl:template match="*[local-name() = 'span']" mode="update_xml_step1">
9381
+ <xsl:apply-templates mode="update_xml_step1"/>
9382
+ </xsl:template><xsl:template match="@*|node()" mode="update_xml_enclose_keep-together_within-line">
9383
+ <xsl:copy>
9384
+ <xsl:apply-templates select="@*|node()" mode="update_xml_enclose_keep-together_within-line"/>
9385
+ </xsl:copy>
9386
+ </xsl:template><xsl:variable name="express_reference_separators">_.\</xsl:variable><xsl:variable name="express_reference_characters" select="concat($upper,$lower,'1234567890',$express_reference_separators)"/><xsl:variable name="element_name_keep-together_within-line">keep-together_within-line</xsl:variable><xsl:template match="text()[not(ancestor::*[local-name() = 'bibdata'] or ancestor::*[local-name() = 'sourcecode'] or ancestor::*[local-name() = 'math'])]" name="keep_together_standard_number" mode="update_xml_enclose_keep-together_within-line">
9387
+
9388
+ <!-- enclose standard's number into tag 'keep-together_within-line' -->
9389
+ <xsl:variable name="regex_standard_reference">([A-Z]{2,}(/[A-Z]{2,})* \d+(-\d+)*(:\d{4})?)</xsl:variable>
9390
+ <xsl:variable name="tag_keep-together_within-line_open">###<xsl:value-of select="$element_name_keep-together_within-line"/>###</xsl:variable>
9391
+ <xsl:variable name="tag_keep-together_within-line_close">###/<xsl:value-of select="$element_name_keep-together_within-line"/>###</xsl:variable>
9392
+ <xsl:variable name="text_" select="java:replaceAll(java:java.lang.String.new(.),$regex_standard_reference,concat($tag_keep-together_within-line_open,'$1',$tag_keep-together_within-line_close))"/>
9393
+ <xsl:variable name="text"><text><xsl:call-template name="replace_text_tags">
9394
+ <xsl:with-param name="tag_open" select="$tag_keep-together_within-line_open"/>
9395
+ <xsl:with-param name="tag_close" select="$tag_keep-together_within-line_close"/>
9396
+ <xsl:with-param name="text" select="$text_"/>
9397
+ </xsl:call-template></text></xsl:variable>
9398
+
9399
+ <xsl:variable name="parent" select="local-name(..)"/>
9400
+
9401
+ <xsl:variable name="text2">
9402
+ <text><xsl:for-each select="xalan:nodeset($text)/text/node()">
9403
+ <xsl:copy-of select="."/>
9404
+ </xsl:for-each></text>
9405
+ </xsl:variable>
9406
+
9407
+ <!-- keep-together_within-line for: a/b, aaa/b, a/bbb, /b -->
9408
+ <xsl:variable name="regex_solidus_units">((\b((\S{1,3}\/\S+)|(\S+\/\S{1,3}))\b)|(\/\S{1,3})\b)</xsl:variable>
9409
+ <xsl:variable name="text3">
9410
+ <text><xsl:for-each select="xalan:nodeset($text2)/text/node()">
9411
+ <xsl:choose>
9412
+ <xsl:when test="self::text()">
9413
+ <xsl:variable name="text_units_" select="java:replaceAll(java:java.lang.String.new(.),$regex_solidus_units,concat($tag_keep-together_within-line_open,'$1',$tag_keep-together_within-line_close))"/>
9414
+ <xsl:variable name="text_units"><text><xsl:call-template name="replace_text_tags">
9415
+ <xsl:with-param name="tag_open" select="$tag_keep-together_within-line_open"/>
9416
+ <xsl:with-param name="tag_close" select="$tag_keep-together_within-line_close"/>
9417
+ <xsl:with-param name="text" select="$text_units_"/>
9418
+ </xsl:call-template></text></xsl:variable>
9419
+ <xsl:copy-of select="xalan:nodeset($text_units)/text/node()"/>
9420
+ </xsl:when>
9421
+ <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise> <!-- copy 'as-is' for <fo:inline keep-together.within-line="always" ... -->
9422
+ </xsl:choose>
9423
+ </xsl:for-each></text>
9424
+ </xsl:variable>
9425
+
9426
+ <xsl:choose>
9427
+ <xsl:when test="ancestor::*[local-name() = 'td' or local-name() = 'th']">
9428
+ <!-- keep-together_within-line for: a.b, aaa.b, a.bbb, .b in table's cell ONLY -->
9429
+ <xsl:variable name="regex_dots_units">((\b((\S{1,3}\.\S+)|(\S+\.\S{1,3}))\b)|(\.\S{1,3})\b)</xsl:variable>
9430
+ <xsl:for-each select="xalan:nodeset($text3)/text/node()">
9431
+ <xsl:choose>
9432
+ <xsl:when test="self::text()">
9433
+ <xsl:variable name="text_dots_" select="java:replaceAll(java:java.lang.String.new(.),$regex_dots_units,concat($tag_keep-together_within-line_open,'$1',$tag_keep-together_within-line_close))"/>
9434
+ <xsl:variable name="text_dots"><text><xsl:call-template name="replace_text_tags">
9435
+ <xsl:with-param name="tag_open" select="$tag_keep-together_within-line_open"/>
9436
+ <xsl:with-param name="tag_close" select="$tag_keep-together_within-line_close"/>
9437
+ <xsl:with-param name="text" select="$text_dots_"/>
9438
+ </xsl:call-template></text></xsl:variable>
9439
+ <xsl:copy-of select="xalan:nodeset($text_dots)/text/node()"/>
9440
+ </xsl:when>
9441
+ <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise> <!-- copy 'as-is' for <fo:inline keep-together.within-line="always" ... -->
9442
+ </xsl:choose>
9443
+ </xsl:for-each>
9444
+ </xsl:when>
9445
+ <xsl:otherwise><xsl:copy-of select="xalan:nodeset($text3)/text/node()"/></xsl:otherwise>
9446
+ </xsl:choose>
9447
+
9448
+ </xsl:template><xsl:template name="replace_text_tags">
9449
+ <xsl:param name="tag_open"/>
9450
+ <xsl:param name="tag_close"/>
9451
+ <xsl:param name="text"/>
9452
+ <xsl:choose>
9453
+ <xsl:when test="contains($text, $tag_open)">
9454
+ <xsl:value-of select="substring-before($text, $tag_open)"/>
9455
+ <xsl:variable name="text_after" select="substring-after($text, $tag_open)"/>
9456
+
9457
+ <xsl:element name="{substring-before(substring-after($tag_open, '###'),'###')}">
9458
+ <xsl:value-of select="substring-before($text_after, $tag_close)"/>
9459
+ </xsl:element>
9460
+
9461
+ <xsl:call-template name="replace_text_tags">
9462
+ <xsl:with-param name="tag_open" select="$tag_open"/>
9463
+ <xsl:with-param name="tag_close" select="$tag_close"/>
9464
+ <xsl:with-param name="text" select="substring-after($text_after, $tag_close)"/>
9465
+ </xsl:call-template>
9466
+ </xsl:when>
9467
+ <xsl:otherwise><xsl:value-of select="$text"/></xsl:otherwise>
9468
+ </xsl:choose>
9469
+ </xsl:template><xsl:template name="printEdition">
9470
+ <xsl:variable name="edition_i18n" select="normalize-space((//*[contains(local-name(), '-standard')])[1]/*[local-name() = 'bibdata']/*[local-name() = 'edition'][normalize-space(@language) != ''])"/>
9471
+ <xsl:text> </xsl:text>
9472
+ <xsl:choose>
9473
+ <xsl:when test="$edition_i18n != ''">
9474
+ <!-- Example: <edition language="fr">deuxième édition</edition> -->
9475
+ <xsl:call-template name="capitalize">
9476
+ <xsl:with-param name="str" select="$edition_i18n"/>
9477
+ </xsl:call-template>
9478
+ </xsl:when>
9479
+ <xsl:otherwise>
9480
+ <xsl:variable name="edition" select="normalize-space((//*[contains(local-name(), '-standard')])[1]/*[local-name() = 'bibdata']/*[local-name() = 'edition'])"/>
9481
+ <xsl:if test="$edition != ''"> <!-- Example: 1.3 -->
9482
+ <xsl:call-template name="capitalize">
9483
+ <xsl:with-param name="str">
9484
+ <xsl:call-template name="getLocalizedString">
9485
+ <xsl:with-param name="key">edition</xsl:with-param>
9486
+ </xsl:call-template>
9487
+ </xsl:with-param>
9488
+ </xsl:call-template>
9489
+ <xsl:text> </xsl:text>
9490
+ <xsl:value-of select="$edition"/>
9491
+ </xsl:if>
9492
+ </xsl:otherwise>
9493
+ </xsl:choose>
8245
9494
  </xsl:template><xsl:template name="convertDate">
8246
9495
  <xsl:param name="date"/>
8247
9496
  <xsl:param name="format" select="'short'"/>
@@ -8929,4 +10178,40 @@
8929
10178
  <xsl:value-of select="$value"/>
8930
10179
  </xsl:otherwise>
8931
10180
  </xsl:choose>
10181
+ </xsl:template><xsl:template match="*" mode="print_as_xml">
10182
+ <xsl:param name="level">0</xsl:param>
10183
+
10184
+ <fo:block margin-left="{2*$level}mm">
10185
+ <xsl:text>
10186
+ &lt;</xsl:text>
10187
+ <xsl:value-of select="local-name()"/>
10188
+ <xsl:for-each select="@*">
10189
+ <xsl:text> </xsl:text>
10190
+ <xsl:value-of select="local-name()"/>
10191
+ <xsl:text>="</xsl:text>
10192
+ <xsl:value-of select="."/>
10193
+ <xsl:text>"</xsl:text>
10194
+ </xsl:for-each>
10195
+ <xsl:text>&gt;</xsl:text>
10196
+
10197
+ <xsl:if test="not(*)">
10198
+ <fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline>
10199
+ <xsl:text>&lt;/</xsl:text>
10200
+ <xsl:value-of select="local-name()"/>
10201
+ <xsl:text>&gt;</xsl:text>
10202
+ </xsl:if>
10203
+ </fo:block>
10204
+
10205
+ <xsl:if test="*">
10206
+ <fo:block>
10207
+ <xsl:apply-templates mode="print_as_xml">
10208
+ <xsl:with-param name="level" select="$level + 1"/>
10209
+ </xsl:apply-templates>
10210
+ </fo:block>
10211
+ <fo:block margin-left="{2*$level}mm">
10212
+ <xsl:text>&lt;/</xsl:text>
10213
+ <xsl:value-of select="local-name()"/>
10214
+ <xsl:text>&gt;</xsl:text>
10215
+ </fo:block>
10216
+ </xsl:if>
8932
10217
  </xsl:template></xsl:stylesheet>