metanorma-iec 2.0.7 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>