metanorma-bipm 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -676,6 +676,7 @@
676
676
 
677
677
  <xsl:template match="*[local-name()='p']" name="paragraph">
678
678
  <xsl:param name="inline" select="'false'"/>
679
+ <xsl:param name="split_keep-within-line"/>
679
680
  <xsl:variable name="previous-element" select="local-name(preceding-sibling::*[1])"/>
680
681
  <xsl:variable name="element-name">
681
682
  <xsl:choose>
@@ -701,7 +702,9 @@
701
702
  <xsl:attribute name="widows">1</xsl:attribute>
702
703
  <xsl:attribute name="orphans">1</xsl:attribute>
703
704
  </xsl:if>
704
- <xsl:apply-templates/>
705
+ <xsl:apply-templates>
706
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
707
+ </xsl:apply-templates>
705
708
  </xsl:element>
706
709
  <xsl:if test="$element-name = 'fo:inline' and not($inline = 'true') and not(local-name(..) = 'admonition')">
707
710
  <fo:block margin-bottom="12pt">
@@ -1721,7 +1724,9 @@
1721
1724
  </fo:block-container>
1722
1725
  </xsl:template>
1723
1726
 
1724
- <xsl:param name="svg_images"/><xsl:variable name="images" select="document($svg_images)"/><xsl:param name="basepath"/><xsl:param name="external_index"/><xsl:param name="syntax-highlight">false</xsl:param><xsl:param name="add_math_as_text">true</xsl:param><xsl:variable name="lang">
1727
+ <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_">
1728
+ false
1729
+ </xsl:variable><xsl:variable name="isGenerateTableIF" select="normalize-space($isGenerateTableIF_)"/><xsl:variable name="lang">
1725
1730
  <xsl:call-template name="getLang"/>
1726
1731
  </xsl:variable><xsl:variable name="pageWidth_">
1727
1732
  210
@@ -2187,6 +2192,7 @@
2187
2192
  <xsl:attribute name="font-weight">bold</xsl:attribute>
2188
2193
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
2189
2194
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
2195
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
2190
2196
  <xsl:attribute name="display-align">center</xsl:attribute>
2191
2197
 
2192
2198
 
@@ -2207,6 +2213,7 @@
2207
2213
  <xsl:attribute name="display-align">center</xsl:attribute>
2208
2214
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
2209
2215
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
2216
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
2210
2217
 
2211
2218
 
2212
2219
 
@@ -2301,7 +2308,8 @@
2301
2308
  </xsl:attribute-set><xsl:attribute-set name="dt-row-style">
2302
2309
 
2303
2310
 
2304
- </xsl:attribute-set><xsl:attribute-set name="dt-style">
2311
+ </xsl:attribute-set><xsl:attribute-set name="dt-cell-style">
2312
+ </xsl:attribute-set><xsl:attribute-set name="dt-block-style">
2305
2313
  <xsl:attribute name="margin-top">6pt</xsl:attribute>
2306
2314
 
2307
2315
 
@@ -2315,6 +2323,8 @@
2315
2323
 
2316
2324
 
2317
2325
 
2326
+ </xsl:attribute-set><xsl:attribute-set name="dd-cell-style">
2327
+ <xsl:attribute name="padding-left">2mm</xsl:attribute>
2318
2328
  </xsl:attribute-set><xsl:attribute-set name="appendix-style">
2319
2329
 
2320
2330
  <xsl:attribute name="font-size">12pt</xsl:attribute>
@@ -3166,7 +3176,38 @@
3166
3176
  </xsl:template><xsl:template match="*[local-name()='br']">
3167
3177
  <xsl:value-of select="$linebreak"/>
3168
3178
  </xsl:template><xsl:template match="*[local-name() = 'keep-together_within-line']">
3169
- <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3179
+ <xsl:param name="split_keep-within-line"/>
3180
+
3181
+ <!-- <fo:inline>split_keep-within-line='<xsl:value-of select="$split_keep-within-line"/>'</fo:inline> -->
3182
+ <xsl:choose>
3183
+
3184
+ <xsl:when test="normalize-space($split_keep-within-line) = 'true'">
3185
+ <xsl:variable name="sep">_</xsl:variable>
3186
+ <xsl:variable name="items">
3187
+ <xsl:call-template name="split">
3188
+ <xsl:with-param name="pText" select="."/>
3189
+ <xsl:with-param name="sep" select="$sep"/>
3190
+ <xsl:with-param name="normalize-space">false</xsl:with-param>
3191
+ <xsl:with-param name="keep_sep">true</xsl:with-param>
3192
+ </xsl:call-template>
3193
+ </xsl:variable>
3194
+ <xsl:for-each select="xalan:nodeset($items)/item">
3195
+ <xsl:choose>
3196
+ <xsl:when test=". = $sep">
3197
+ <xsl:value-of select="$sep"/><xsl:value-of select="$zero_width_space"/>
3198
+ </xsl:when>
3199
+ <xsl:otherwise>
3200
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3201
+ </xsl:otherwise>
3202
+ </xsl:choose>
3203
+ </xsl:for-each>
3204
+ </xsl:when>
3205
+
3206
+ <xsl:otherwise>
3207
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3208
+ </xsl:otherwise>
3209
+
3210
+ </xsl:choose>
3170
3211
  </xsl:template><xsl:template match="*[local-name()='copyright-statement']">
3171
3212
  <fo:block xsl:use-attribute-sets="copyright-statement-style">
3172
3213
  <xsl:apply-templates/>
@@ -3258,9 +3299,14 @@
3258
3299
 
3259
3300
  <xsl:variable name="table">
3260
3301
 
3261
- <xsl:variable name="simple-table">
3262
- <xsl:call-template name="getSimpleTable"/>
3302
+ <xsl:variable name="simple-table">
3303
+ <xsl:call-template name="getSimpleTable">
3304
+ <xsl:with-param name="id" select="@id"/>
3305
+ </xsl:call-template>
3263
3306
  </xsl:variable>
3307
+ <!-- <xsl:variable name="simple-table" select="xalan:nodeset($simple-table_)"/> -->
3308
+
3309
+ <!-- simple-table=<xsl:copy-of select="$simple-table"/> -->
3264
3310
 
3265
3311
 
3266
3312
  <!-- Display table's name before table as standalone block -->
@@ -3279,7 +3325,23 @@
3279
3325
  </xsl:call-template>
3280
3326
  </xsl:if>
3281
3327
  </xsl:variable>
3282
- <!-- DEBUG colwidths=<xsl:copy-of select="$colwidths"/> -->
3328
+ <!-- <xsl:variable name="colwidths" select="xalan:nodeset($colwidths_)"/> -->
3329
+
3330
+ <!-- DEBUG -->
3331
+ <xsl:if test="$table_if_debug = 'true'">
3332
+ <fo:block font-size="60%">
3333
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
3334
+ </fo:block>
3335
+ </xsl:if>
3336
+
3337
+
3338
+ <!-- <xsl:copy-of select="$colwidths"/> -->
3339
+
3340
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
3341
+ DEBUG
3342
+ colwidths=<xsl:copy-of select="$colwidths"/>
3343
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
3344
+
3283
3345
 
3284
3346
 
3285
3347
  <xsl:variable name="margin-side">
@@ -3344,9 +3406,17 @@
3344
3406
  </xsl:element>
3345
3407
  </xsl:variable>
3346
3408
 
3409
+ <xsl:if test="$isGenerateTableIF = 'true'">
3410
+ <!-- to determine start of table -->
3411
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
3412
+ </xsl:if>
3347
3413
 
3348
3414
  <fo:table id="{@id}">
3349
3415
 
3416
+ <xsl:if test="$isGenerateTableIF = 'true'">
3417
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
3418
+ </xsl:if>
3419
+
3350
3420
  <xsl:for-each select="xalan:nodeset($table_attributes)/table_attributes/@*">
3351
3421
  <xsl:attribute name="{local-name()}">
3352
3422
  <xsl:value-of select="."/>
@@ -3360,24 +3430,47 @@
3360
3430
 
3361
3431
 
3362
3432
  <xsl:choose>
3363
- <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
3364
- <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
3365
- <fo:table-column column-width="{@width}"/>
3366
- </xsl:for-each>
3433
+ <xsl:when test="$isGenerateTableIF = 'true'">
3434
+ <!-- generate IF for table widths -->
3435
+ <!-- example:
3436
+ <tr>
3437
+ <td valign="top" align="left" id="tab-symdu_1_1">
3438
+ <p>Symbol</p>
3439
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
3440
+ </td>
3441
+ <td valign="top" align="left" id="tab-symdu_1_2">
3442
+ <p>Description</p>
3443
+ <word id="tab-symdu_1_2_word_1">Description</word>
3444
+ </td>
3445
+ </tr>
3446
+ -->
3447
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if"/>
3448
+
3367
3449
  </xsl:when>
3368
3450
  <xsl:otherwise>
3369
- <xsl:call-template name="insertTableColumnWidth">
3370
- <xsl:with-param name="colwidths" select="$colwidths"/>
3371
- </xsl:call-template>
3372
- </xsl:otherwise>
3373
- </xsl:choose>
3374
3451
 
3375
- <xsl:choose>
3376
- <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
3377
- <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
3378
- </xsl:when>
3379
- <xsl:otherwise>
3380
- <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 -->
3452
+ <xsl:choose>
3453
+ <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
3454
+ <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
3455
+ <fo:table-column column-width="{@width}"/>
3456
+ </xsl:for-each>
3457
+ </xsl:when>
3458
+ <xsl:otherwise>
3459
+ <xsl:call-template name="insertTableColumnWidth">
3460
+ <xsl:with-param name="colwidths" select="$colwidths"/>
3461
+ </xsl:call-template>
3462
+ </xsl:otherwise>
3463
+ </xsl:choose>
3464
+
3465
+ <xsl:choose>
3466
+ <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
3467
+ <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
3468
+ </xsl:when>
3469
+ <xsl:otherwise>
3470
+ <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 -->
3471
+ </xsl:otherwise>
3472
+ </xsl:choose>
3473
+
3381
3474
  </xsl:otherwise>
3382
3475
  </xsl:choose>
3383
3476
 
@@ -3482,11 +3575,22 @@
3482
3575
  <xsl:variable name="columns-with-colspan" select="count($table-row/*[@colspan])"/>
3483
3576
  <xsl:value-of select="$columns-count + $sum-colspans - $columns-with-colspan"/>
3484
3577
  </xsl:template><xsl:template name="calculate-column-widths">
3578
+ <xsl:param name="table"/>
3579
+ <xsl:param name="cols-count"/>
3580
+
3581
+ <xsl:call-template name="calculate-column-widths-proportional">
3582
+ <xsl:with-param name="cols-count" select="$cols-count"/>
3583
+ <xsl:with-param name="table" select="$table"/>
3584
+ </xsl:call-template>
3585
+
3586
+ </xsl:template><xsl:template name="calculate-column-widths-proportional">
3485
3587
  <xsl:param name="table"/>
3486
3588
  <xsl:param name="cols-count"/>
3487
3589
  <xsl:param name="curr-col" select="1"/>
3488
3590
  <xsl:param name="width" select="0"/>
3489
3591
 
3592
+ <!-- table=<xsl:copy-of select="$table"/> -->
3593
+
3490
3594
  <xsl:if test="$curr-col &lt;= $cols-count">
3491
3595
  <xsl:variable name="widths">
3492
3596
  <xsl:choose>
@@ -3524,10 +3628,15 @@
3524
3628
  </xsl:for-each>
3525
3629
  </xsl:when>
3526
3630
  <xsl:otherwise>
3527
- <xsl:for-each select="xalan:nodeset($table)/*/tr">
3631
+ <!-- <curr_col><xsl:value-of select="$curr-col"/></curr_col> -->
3632
+
3633
+ <!-- <table><xsl:copy-of select="$table"/></table>
3634
+ -->
3635
+ <xsl:for-each select="xalan:nodeset($table)/*/*[local-name()='tr']">
3528
3636
  <xsl:variable name="td_text">
3529
3637
  <xsl:apply-templates select="td[$curr-col]" mode="td_text"/>
3530
3638
  </xsl:variable>
3639
+ <!-- <td_text><xsl:value-of select="$td_text"/></td_text> -->
3531
3640
  <xsl:variable name="words">
3532
3641
  <xsl:variable name="string_with_added_zerospaces">
3533
3642
  <xsl:call-template name="add-zero-spaces-java">
@@ -3542,6 +3651,7 @@
3542
3651
  <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
3543
3652
  </xsl:call-template>
3544
3653
  </xsl:variable>
3654
+ <!-- words=<xsl:copy-of select="$words"/> -->
3545
3655
  <xsl:variable name="max_length">
3546
3656
  <xsl:call-template name="max_length">
3547
3657
  <xsl:with-param name="words" select="xalan:nodeset($words)"/>
@@ -3566,6 +3676,8 @@
3566
3676
  </xsl:choose>
3567
3677
  </xsl:variable>
3568
3678
 
3679
+ <!-- widths=<xsl:copy-of select="$widths"/> -->
3680
+
3569
3681
  <column>
3570
3682
  <xsl:for-each select="xalan:nodeset($widths)//width">
3571
3683
  <xsl:sort select="." data-type="number" order="descending"/>
@@ -3574,33 +3686,327 @@
3574
3686
  </xsl:if>
3575
3687
  </xsl:for-each>
3576
3688
  </column>
3577
- <xsl:call-template name="calculate-column-widths">
3689
+ <xsl:call-template name="calculate-column-widths-proportional">
3578
3690
  <xsl:with-param name="cols-count" select="$cols-count"/>
3579
3691
  <xsl:with-param name="curr-col" select="$curr-col +1"/>
3580
3692
  <xsl:with-param name="table" select="$table"/>
3581
3693
  </xsl:call-template>
3582
3694
  </xsl:if>
3583
- </xsl:template><xsl:template match="*[@keep-together.within-line]/text()" priority="2" mode="td_text">
3695
+ </xsl:template><xsl:template match="*[@keep-together.within-line or local-name() = 'keep-together_within-line']/text()" priority="2" mode="td_text">
3584
3696
  <!-- <xsl:message>DEBUG t1=<xsl:value-of select="."/></xsl:message>
3585
3697
  <xsl:message>DEBUG t2=<xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/></xsl:message> -->
3586
3698
  <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/>
3699
+
3700
+ <!-- if all capitals english letters or digits -->
3701
+ <xsl:if test="normalize-space(translate(., concat($upper,'0123456789'), '')) = ''">
3702
+ <xsl:call-template name="repeat">
3703
+ <xsl:with-param name="char" select="'X'"/>
3704
+ <xsl:with-param name="count" select="string-length(normalize-space(.)) * 0.5"/>
3705
+ </xsl:call-template>
3706
+ </xsl:if>
3587
3707
  </xsl:template><xsl:template match="text()" mode="td_text">
3588
3708
  <xsl:value-of select="translate(., $zero_width_space, ' ')"/><xsl:text> </xsl:text>
3589
3709
  </xsl:template><xsl:template match="*[local-name()='termsource']" mode="td_text">
3590
3710
  <xsl:value-of select="*[local-name()='origin']/@citeas"/>
3591
3711
  </xsl:template><xsl:template match="*[local-name()='link']" mode="td_text">
3592
3712
  <xsl:value-of select="@target"/>
3593
- </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text">
3594
- <xsl:variable name="mathml">
3595
- <xsl:for-each select="*">
3596
- <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
3597
- <xsl:copy-of select="."/>
3713
+ </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text" name="math_length">
3714
+ <xsl:if test="$isGenerateTableIF = 'false'">
3715
+ <xsl:variable name="mathml_">
3716
+ <xsl:for-each select="*">
3717
+ <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
3718
+ <xsl:copy-of select="."/>
3719
+ </xsl:if>
3720
+ </xsl:for-each>
3721
+ </xsl:variable>
3722
+ <xsl:variable name="mathml" select="xalan:nodeset($mathml_)"/>
3723
+
3724
+ <xsl:variable name="math_text">
3725
+ <xsl:value-of select="normalize-space($mathml)"/>
3726
+ <xsl:for-each select="$mathml//@open"><xsl:value-of select="."/></xsl:for-each>
3727
+ <xsl:for-each select="$mathml//@close"><xsl:value-of select="."/></xsl:for-each>
3728
+ </xsl:variable>
3729
+ <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
3730
+ </xsl:if>
3731
+ </xsl:template><xsl:template name="calculate-column-widths-autolayout-algorithm">
3732
+ <xsl:param name="table"/>
3733
+ <xsl:param name="if">false</xsl:param> <!-- via intermediate format -->
3734
+
3735
+ <!-- The algorithm uses two passes through the table data and scales linearly with the size of the table -->
3736
+
3737
+ <!-- In the first pass, line wrapping is disabled, and the user agent keeps track of the minimum and maximum width of each cell. -->
3738
+
3739
+ <!-- Since line wrap has been disabled, paragraphs are treated as long lines unless broken by BR elements. -->
3740
+
3741
+ <!-- get current table id -->
3742
+ <xsl:variable name="table_id" select="@id"/>
3743
+ <!-- find table by id in the file 'table_widths' -->
3744
+ <xsl:variable name="table-if_" select="$table_widths_from_if//table[@id = $table_id]"/>
3745
+ <xsl:variable name="table-if" select="xalan:nodeset($table-if_)"/>
3746
+
3747
+
3748
+ <!-- table='<xsl:copy-of select="$table"/>' -->
3749
+ <!-- table_id='<xsl:value-of select="$table_id"/>\ -->
3750
+ <!-- table-if='<xsl:copy-of select="$table-if"/>' -->
3751
+ <!-- table_widths_from_if='<xsl:copy-of select="$table_widths_from_if"/>' -->
3752
+
3753
+ <xsl:variable name="table_with_cell_widths_">
3754
+ <xsl:choose>
3755
+ <xsl:when test="$if = 'true' and normalize-space($table-if) != ''"> <!-- if we read column's width from IF and there is table in IF -->
3756
+
3757
+ <!-- Example: <column>10</column>
3758
+ <column>11</column>
3759
+ -->
3760
+ <xsl:apply-templates select="$table-if" mode="determine_cell_widths-if"/>
3761
+ </xsl:when>
3762
+ <xsl:otherwise>
3763
+ <xsl:apply-templates select="xalan:nodeset($table)" mode="determine_cell_widths"/>
3764
+ </xsl:otherwise>
3765
+ </xsl:choose>
3766
+ </xsl:variable>
3767
+ <xsl:variable name="table_with_cell_widths" select="xalan:nodeset($table_with_cell_widths_)"/>
3768
+
3769
+ <xsl:if test="$table_if_debug = 'true'">
3770
+ <xsl:copy-of select="$table_with_cell_widths"/>
3771
+ </xsl:if>
3772
+
3773
+
3774
+ <!-- The minimum and maximum cell widths are then used to determine the corresponding minimum and maximum widths for the columns. -->
3775
+
3776
+ <xsl:variable name="column_widths_">
3777
+ <!-- iteration of columns -->
3778
+ <xsl:for-each select="$table_with_cell_widths//tr[1]/td">
3779
+ <xsl:variable name="pos" select="position()"/>
3780
+ <column>
3781
+ <xsl:attribute name="width_max">
3782
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_max">
3783
+ <xsl:sort select="." data-type="number" order="descending"/>
3784
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3785
+ </xsl:for-each>
3786
+ </xsl:attribute>
3787
+ <xsl:attribute name="width_min">
3788
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_min">
3789
+ <xsl:sort select="." data-type="number" order="descending"/>
3790
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3791
+ </xsl:for-each>
3792
+ </xsl:attribute>
3793
+ </column>
3794
+ </xsl:for-each>
3795
+ </xsl:variable>
3796
+ <xsl:variable name="column_widths" select="xalan:nodeset($column_widths_)"/>
3797
+
3798
+ <!-- <column_widths>
3799
+ <xsl:copy-of select="$column_widths"/>
3800
+ </column_widths> -->
3801
+
3802
+ <!-- These in turn, are used to find the minimum and maximum width for the table. -->
3803
+ <xsl:variable name="table_widths_">
3804
+ <table>
3805
+ <xsl:attribute name="width_max">
3806
+ <xsl:value-of select="sum($column_widths/column/@width_max)"/>
3807
+ </xsl:attribute>
3808
+ <xsl:attribute name="width_min">
3809
+ <xsl:value-of select="sum($column_widths/column/@width_min)"/>
3810
+ </xsl:attribute>
3811
+ </table>
3812
+ </xsl:variable>
3813
+ <xsl:variable name="table_widths" select="xalan:nodeset($table_widths_)"/>
3814
+
3815
+ <xsl:variable name="page_width">
3816
+ <xsl:choose>
3817
+ <xsl:when test="$if = 'true'"><xsl:value-of select="$table-if/@page-width"/></xsl:when>
3818
+ <xsl:otherwise>75</xsl:otherwise>
3819
+ </xsl:choose>
3820
+ </xsl:variable>
3821
+
3822
+ <xsl:if test="$table_if_debug = 'true'">
3823
+ <table_width>
3824
+ <xsl:copy-of select="$table_widths"/>
3825
+ </table_width>
3826
+ <!-- <debug>$table_widths/@width_min=<xsl:value-of select="$table_widths/table/@width_min"/></debug>
3827
+ <debug>$table_widths/@width_max=<xsl:value-of select="$table_widths/table/@width_max"/></debug>
3828
+ -->
3829
+ <debug>$page_width=<xsl:value-of select="$page_width"/></debug>
3830
+ </xsl:if>
3831
+
3832
+
3833
+ <!-- There are three cases: -->
3834
+ <xsl:choose>
3835
+ <!-- 1. The minimum table width is equal to or wider than the available space -->
3836
+ <xsl:when test="$table_widths/table/@width_min &gt;= $page_width and 1 = 2"> <!-- this condition isn't working see case 3 below -->
3837
+ <!-- call old algorithm -->
3838
+ <case1/>
3839
+ <xsl:variable name="cols-count" select="count(xalan:nodeset($table)/*/tr[1]/td)"/>
3840
+ <xsl:call-template name="calculate-column-widths-proportional">
3841
+ <xsl:with-param name="cols-count" select="$cols-count"/>
3842
+ <xsl:with-param name="table" select="$table"/>
3843
+ </xsl:call-template>
3844
+ </xsl:when>
3845
+ <!-- 2. The maximum table width fits within the available space. In this case, set the columns to their maximum widths. -->
3846
+ <xsl:when test="$table_widths/table/@width_max &lt;= $page_width">
3847
+ <case2/>
3848
+ <autolayout/>
3849
+ <xsl:for-each select="$column_widths/column/@width_max">
3850
+ <column divider="100"><xsl:value-of select="."/></column>
3851
+ </xsl:for-each>
3852
+ </xsl:when>
3853
+ <!-- 3. The maximum width of the table is greater than the available space, but the minimum table width is smaller.
3854
+ In this case, find the difference between the available space and the minimum table width, lets call it W.
3855
+ Lets also call D the difference between maximum and minimum width of the table.
3856
+ For each column, let d be the difference between maximum and minimum width of that column.
3857
+ Now set the column's width to the minimum width plus d times W over D.
3858
+ This makes columns with large differences between minimum and maximum widths wider than columns with smaller differences. -->
3859
+ <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)">
3860
+ <!-- difference between the available space and the minimum table width -->
3861
+ <xsl:variable name="W" select="$page_width - $table_widths/table/@width_min"/>
3862
+ <W><xsl:value-of select="$W"/></W>
3863
+ <!-- difference between maximum and minimum width of the table -->
3864
+ <xsl:variable name="D" select="$table_widths/table/@width_max - $table_widths/table/@width_min"/>
3865
+ <D><xsl:value-of select="$D"/></D>
3866
+ <case3/>
3867
+ <autolayout/>
3868
+ <xsl:if test="$table_widths/table/@width_min &gt;= $page_width">
3869
+ <split_keep-within-line>true</split_keep-within-line>
3598
3870
  </xsl:if>
3871
+ <xsl:for-each select="$column_widths/column">
3872
+ <!-- difference between maximum and minimum width of that column. -->
3873
+ <xsl:variable name="d" select="@width_max - @width_min"/>
3874
+ <d><xsl:value-of select="$d"/></d>
3875
+ <width_min><xsl:value-of select="@width_min"/></width_min>
3876
+ <e><xsl:value-of select="$d * $W div $D"/></e>
3877
+ <!-- set the column's width to the minimum width plus d times W over D. -->
3878
+ <column divider="100">
3879
+ <xsl:value-of select="round(@width_min + $d * $W div $D)"/> <!-- * 10 -->
3880
+ </column>
3881
+ </xsl:for-each>
3882
+
3883
+ </xsl:when>
3884
+ <xsl:otherwise><unknown_case/></xsl:otherwise>
3885
+ </xsl:choose>
3886
+
3887
+
3888
+ </xsl:template><xsl:template match="@*|node()" mode="determine_cell_widths">
3889
+ <xsl:copy>
3890
+ <xsl:apply-templates select="@*|node()" mode="determine_cell_widths"/>
3891
+ </xsl:copy>
3892
+ </xsl:template><xsl:template match="td | th" mode="determine_cell_widths">
3893
+ <xsl:copy>
3894
+ <xsl:copy-of select="@*"/>
3895
+
3896
+ <!-- The maximum width is given by the widest line. -->
3897
+ <xsl:variable name="widths_max">
3898
+ <xsl:for-each select=".//*[local-name() = 'p']">
3899
+ <xsl:call-template name="add_width"/>
3900
+ </xsl:for-each>
3901
+ <xsl:if test="not(*[local-name() = 'p'])">
3902
+ <xsl:call-template name="add_width"/>
3903
+ </xsl:if>
3904
+ </xsl:variable>
3905
+ <xsl:variable name="width_max">
3906
+ <xsl:for-each select="xalan:nodeset($widths_max)//width">
3907
+ <xsl:sort select="." data-type="number" order="descending"/>
3908
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3909
+ </xsl:for-each>
3910
+ </xsl:variable>
3911
+ <xsl:attribute name="width_max">
3912
+ <xsl:value-of select="$width_max"/>
3913
+ </xsl:attribute>
3914
+
3915
+ <!-- The minimum width is given by the widest text element (word, image, etc.) -->
3916
+ <!-- To do: image width -->
3917
+ <xsl:variable name="td_text">
3918
+ <xsl:apply-templates select="." mode="td_text"/>
3919
+ </xsl:variable>
3920
+ <xsl:variable name="words">
3921
+ <xsl:variable name="string_with_added_zerospaces">
3922
+ <xsl:call-template name="add-zero-spaces-java">
3923
+ <xsl:with-param name="text" select="$td_text"/>
3924
+ </xsl:call-template>
3925
+ </xsl:variable>
3926
+ <xsl:call-template name="tokenize">
3927
+ <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
3928
+ </xsl:call-template>
3929
+ </xsl:variable>
3930
+
3931
+ <xsl:variable name="max_word_length">
3932
+ <xsl:call-template name="max_length">
3933
+ <xsl:with-param name="words" select="xalan:nodeset($words)"/>
3934
+ </xsl:call-template>
3935
+ </xsl:variable>
3936
+ <xsl:variable name="width_min">
3937
+ <xsl:value-of select="$max_word_length"/>
3938
+ </xsl:variable>
3939
+ <xsl:attribute name="width_min">
3940
+ <xsl:value-of select="$width_min"/>
3941
+ </xsl:attribute>
3942
+ <!-- width_max="1" width_min="1.5"> --> <!-- see 'tokenize' template, multiply 1.5 for all latin capitals -->
3943
+ <xsl:if test="$width_min &gt; $width_max">
3944
+ <xsl:attribute name="width_max">
3945
+ <xsl:value-of select="$width_min"/>
3946
+ </xsl:attribute>
3947
+ </xsl:if>
3948
+ <xsl:if test="$width_min = 0">
3949
+ <xsl:attribute name="width_min">1</xsl:attribute>
3950
+ </xsl:if>
3951
+
3952
+ <xsl:apply-templates select="node()" mode="determine_cell_widths"/>
3953
+
3954
+ </xsl:copy>
3955
+ </xsl:template><xsl:template name="add_width">
3956
+ <xsl:variable name="p_text"><xsl:apply-templates select="." mode="td_text"/></xsl:variable>
3957
+ <xsl:variable name="p_text_len_" select="string-length(normalize-space($p_text))"/>
3958
+
3959
+ <xsl:variable name="p_text_len">
3960
+ <xsl:choose>
3961
+ <xsl:when test="normalize-space(translate($p_text, concat($upper,'0123456789'), '')) = ''"> <!-- english word in CAPITAL letters -->
3962
+ <xsl:value-of select="$p_text_len_ * 1.5"/>
3963
+ </xsl:when>
3964
+ <xsl:otherwise><xsl:value-of select="$p_text_len_"/></xsl:otherwise>
3965
+ </xsl:choose>
3966
+ </xsl:variable>
3967
+
3968
+ <xsl:variable name="math_addon_text">
3969
+ <xsl:for-each select=".//*[local-name() = 'math']">
3970
+ <xsl:apply-templates mode="td_text"/>
3599
3971
  </xsl:for-each>
3600
3972
  </xsl:variable>
3973
+ <xsl:variable name="math_addon_length" select="string-length(normalize-space($math_addon_text)) * 0.2"/> <!-- plus 20% -->
3601
3974
 
3602
- <xsl:variable name="math_text" select="normalize-space(xalan:nodeset($mathml))"/>
3603
- <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
3975
+ <width><xsl:value-of select="$p_text_len + $math_addon_length"/></width>
3976
+ </xsl:template><xsl:template match="@*|node()" mode="determine_cell_widths-if">
3977
+ <xsl:copy>
3978
+ <xsl:apply-templates select="@*|node()" mode="determine_cell_widths-if"/>
3979
+ </xsl:copy>
3980
+ </xsl:template><xsl:template match="td | th" mode="determine_cell_widths-if">
3981
+ <xsl:copy>
3982
+ <xsl:copy-of select="@*"/>
3983
+
3984
+ <!-- The maximum width is given by the widest line. -->
3985
+ <xsl:attribute name="width_max">
3986
+ <xsl:for-each select="p_len">
3987
+ <xsl:sort select="." data-type="number" order="descending"/>
3988
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3989
+ </xsl:for-each>
3990
+ </xsl:attribute>
3991
+
3992
+ <!-- The minimum width is given by the widest text element (word, image, etc.) -->
3993
+ <xsl:variable name="width_min">
3994
+ <xsl:for-each select="word_len">
3995
+ <xsl:sort select="." data-type="number" order="descending"/>
3996
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
3997
+ </xsl:for-each>
3998
+ </xsl:variable>
3999
+ <xsl:attribute name="width_min">
4000
+ <xsl:value-of select="$width_min"/>
4001
+ </xsl:attribute>
4002
+
4003
+ <xsl:if test="$width_min = 0">
4004
+ <xsl:attribute name="width_min">1</xsl:attribute>
4005
+ </xsl:if>
4006
+
4007
+ <xsl:apply-templates select="node()" mode="determine_cell_widths-if"/>
4008
+
4009
+ </xsl:copy>
3604
4010
  </xsl:template><xsl:template match="*[local-name()='thead']">
3605
4011
  <xsl:param name="cols-count"/>
3606
4012
  <fo:table-header>
@@ -3698,6 +4104,7 @@
3698
4104
  </xsl:for-each>
3699
4105
  </xsl:when>
3700
4106
  <xsl:otherwise>
4107
+ <!-- $colwidths=<xsl:copy-of select="$colwidths"/> -->
3701
4108
  <xsl:call-template name="insertTableColumnWidth">
3702
4109
  <xsl:with-param name="colwidths" select="$colwidths"/>
3703
4110
  </xsl:call-template>
@@ -3822,6 +4229,52 @@
3822
4229
 
3823
4230
  </fo:table-body>
3824
4231
 
4232
+ </xsl:template><xsl:template match="/" mode="process_table-if">
4233
+ <xsl:param name="table_or_dl">table</xsl:param>
4234
+ <xsl:apply-templates mode="process_table-if">
4235
+ <xsl:with-param name="table_or_dl" select="$table_or_dl"/>
4236
+ </xsl:apply-templates>
4237
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="process_table-if">
4238
+ <xsl:param name="table_or_dl">table</xsl:param>
4239
+
4240
+ <fo:table-body>
4241
+ <xsl:for-each select="*[local-name() = 'tr']">
4242
+ <xsl:variable name="col_count" select="count(*)"/>
4243
+
4244
+ <!-- iteration for each tr/td -->
4245
+
4246
+ <xsl:choose>
4247
+ <xsl:when test="$table_or_dl = 'table'">
4248
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']/*">
4249
+ <fo:table-row number-columns-spanned="{$col_count}">
4250
+ <!-- <test_table><xsl:copy-of select="."/></test_table> -->
4251
+ <xsl:call-template name="td"/>
4252
+ </fo:table-row>
4253
+ </xsl:for-each>
4254
+ </xsl:when>
4255
+ <xsl:otherwise> <!-- $table_or_dl = 'dl' -->
4256
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']">
4257
+ <xsl:variable name="is_dt" select="position() = 1"/>
4258
+
4259
+ <xsl:for-each select="*">
4260
+ <!-- <test><xsl:copy-of select="."/></test> -->
4261
+ <fo:table-row number-columns-spanned="{$col_count}">
4262
+ <xsl:choose>
4263
+ <xsl:when test="$is_dt">
4264
+ <xsl:call-template name="insert_dt_cell"/>
4265
+ </xsl:when>
4266
+ <xsl:otherwise>
4267
+ <xsl:call-template name="insert_dd_cell"/>
4268
+ </xsl:otherwise>
4269
+ </xsl:choose>
4270
+ </fo:table-row>
4271
+ </xsl:for-each>
4272
+ </xsl:for-each>
4273
+ </xsl:otherwise>
4274
+ </xsl:choose>
4275
+
4276
+ </xsl:for-each>
4277
+ </fo:table-body>
3825
4278
  </xsl:template><xsl:template match="*[local-name()='thead']/*[local-name()='tr']" priority="2">
3826
4279
  <fo:table-row xsl:use-attribute-sets="table-header-row-style">
3827
4280
 
@@ -3919,7 +4372,7 @@
3919
4372
  </xsl:choose>
3920
4373
  </xsl:attribute>
3921
4374
  </xsl:if>
3922
- </xsl:template><xsl:template match="*[local-name()='td']">
4375
+ </xsl:template><xsl:template match="*[local-name()='td']" name="td">
3923
4376
  <fo:table-cell xsl:use-attribute-sets="table-cell-style"> <!-- text-align="{@align}" -->
3924
4377
  <xsl:call-template name="setTextAlignment">
3925
4378
  <xsl:with-param name="default">left</xsl:with-param>
@@ -3960,11 +4413,24 @@
3960
4413
 
3961
4414
  <xsl:call-template name="setTableCellAttributes"/>
3962
4415
 
4416
+ <xsl:if test="$isGenerateTableIF = 'true'">
4417
+ <xsl:attribute name="border">1pt solid black</xsl:attribute> <!-- border is mandatory, to determine page width -->
4418
+ <xsl:attribute name="text-align">left</xsl:attribute>
4419
+ </xsl:if>
4420
+
3963
4421
  <fo:block>
3964
4422
 
4423
+ <xsl:if test="$isGenerateTableIF = 'true'">
4424
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
4425
+ </xsl:if>
4426
+
4427
+
3965
4428
 
3966
4429
 
3967
4430
  <xsl:apply-templates/>
4431
+
4432
+ <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"/> -->
4433
+
3968
4434
  </fo:block>
3969
4435
  </fo:table-cell>
3970
4436
  </xsl:template><xsl:template match="*[local-name()='table']/*[local-name()='note']" priority="2">
@@ -4161,9 +4627,9 @@
4161
4627
  <!-- current hierarchy is 'figure' element -->
4162
4628
  <xsl:variable name="following_dl_colwidths">
4163
4629
  <xsl:if test="*[local-name() = 'dl']"><!-- if there is a 'dl', then set the same columns width as for 'dl' -->
4164
- <xsl:variable name="html-table">
4165
- <xsl:variable name="doc_ns">
4166
-
4630
+ <xsl:variable name="simple-table">
4631
+ <!-- <xsl:variable name="doc_ns">
4632
+ <xsl:if test="$namespace = 'bipm'">bipm</xsl:if>
4167
4633
  </xsl:variable>
4168
4634
  <xsl:variable name="ns">
4169
4635
  <xsl:choose>
@@ -4174,7 +4640,7 @@
4174
4640
  <xsl:value-of select="substring-before(name(/*), '-')"/>
4175
4641
  </xsl:otherwise>
4176
4642
  </xsl:choose>
4177
- </xsl:variable>
4643
+ </xsl:variable> -->
4178
4644
 
4179
4645
  <xsl:for-each select="*[local-name() = 'dl'][1]">
4180
4646
  <tbody>
@@ -4185,7 +4651,7 @@
4185
4651
 
4186
4652
  <xsl:call-template name="calculate-column-widths">
4187
4653
  <xsl:with-param name="cols-count" select="2"/>
4188
- <xsl:with-param name="table" select="$html-table"/>
4654
+ <xsl:with-param name="table" select="$simple-table"/>
4189
4655
  </xsl:call-template>
4190
4656
 
4191
4657
  </xsl:if>
@@ -4384,7 +4850,18 @@
4384
4850
 
4385
4851
 
4386
4852
 
4853
+
4854
+ <xsl:if test="$isGenerateTableIF = 'true'">
4855
+ <!-- to determine start of table -->
4856
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
4857
+ </xsl:if>
4858
+
4387
4859
  <fo:table width="95%" table-layout="fixed">
4860
+
4861
+ <xsl:if test="$isGenerateTableIF = 'true'">
4862
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
4863
+ </xsl:if>
4864
+
4388
4865
 
4389
4866
  <xsl:choose>
4390
4867
  <xsl:when test="normalize-space($key_iso) = 'true' and $parent = 'formula'"/>
@@ -4393,52 +4870,130 @@
4393
4870
 
4394
4871
  </xsl:when>
4395
4872
  </xsl:choose>
4396
- <!-- create virtual html table for dl/[dt and dd] -->
4397
- <xsl:variable name="html-table">
4398
- <xsl:variable name="doc_ns">
4873
+
4874
+
4875
+ <xsl:choose>
4876
+ <xsl:when test="$isGenerateTableIF = 'true'">
4877
+ <!-- generate IF for table widths -->
4878
+ <!-- example:
4879
+ <tr>
4880
+ <td valign="top" align="left" id="tab-symdu_1_1">
4881
+ <p>Symbol</p>
4882
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
4883
+ </td>
4884
+ <td valign="top" align="left" id="tab-symdu_1_2">
4885
+ <p>Description</p>
4886
+ <word id="tab-symdu_1_2_word_1">Description</word>
4887
+ </td>
4888
+ </tr>
4889
+ -->
4399
4890
 
4400
- </xsl:variable>
4401
- <xsl:variable name="ns">
4402
- <xsl:choose>
4403
- <xsl:when test="normalize-space($doc_ns) != ''">
4404
- <xsl:value-of select="normalize-space($doc_ns)"/>
4405
- </xsl:when>
4406
- <xsl:otherwise>
4407
- <xsl:value-of select="substring-before(name(/*), '-')"/>
4408
- </xsl:otherwise>
4409
- </xsl:choose>
4410
- </xsl:variable>
4411
- <tbody>
4412
- <xsl:apply-templates mode="dl"/>
4413
- </tbody>
4414
- </xsl:variable>
4415
- <!-- DEBUG: html-table<xsl:copy-of select="$html-table"/> -->
4416
- <xsl:variable name="colwidths">
4417
- <xsl:call-template name="calculate-column-widths">
4418
- <xsl:with-param name="cols-count" select="2"/>
4419
- <xsl:with-param name="table" select="$html-table"/>
4420
- </xsl:call-template>
4421
- </xsl:variable>
4422
- <!-- DEBUG: colwidths=<xsl:copy-of select="$colwidths"/> -->
4423
- <xsl:variable name="maxlength_dt">
4424
- <xsl:call-template name="getMaxLength_dt"/>
4425
- </xsl:variable>
4426
- <xsl:variable name="isContainsKeepTogetherTag_">
4427
- false
4428
- </xsl:variable>
4429
- <xsl:variable name="isContainsKeepTogetherTag" select="normalize-space($isContainsKeepTogetherTag_)"/>
4430
- <!-- isContainsExpressReference=<xsl:value-of select="$isContainsExpressReference"/> -->
4431
- <xsl:call-template name="setColumnWidth_dl">
4432
- <xsl:with-param name="colwidths" select="$colwidths"/>
4433
- <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
4434
- <xsl:with-param name="isContainsKeepTogetherTag" select="$isContainsKeepTogetherTag"/>
4435
- </xsl:call-template>
4891
+ <!-- create virtual html table for dl/[dt and dd] -->
4892
+ <xsl:variable name="simple-table">
4893
+
4894
+ <xsl:variable name="dl_table">
4895
+ <tbody>
4896
+ <xsl:apply-templates mode="dl_if">
4897
+ <xsl:with-param name="id" select="@id"/>
4898
+ </xsl:apply-templates>
4899
+ </tbody>
4900
+ </xsl:variable>
4901
+
4902
+ <!-- dl_table='<xsl:copy-of select="$dl_table"/>' -->
4903
+
4904
+ <!-- Step: replace <br/> to <p>...</p> -->
4905
+ <xsl:variable name="table_without_br">
4906
+ <xsl:apply-templates select="xalan:nodeset($dl_table)" mode="table-without-br"/>
4907
+ </xsl:variable>
4908
+
4909
+ <!-- table_without_br='<xsl:copy-of select="$table_without_br"/>' -->
4910
+
4911
+ <!-- Step: add id to each cell -->
4912
+ <!-- add <word>...</word> for each word, image, math -->
4913
+ <xsl:variable name="simple-table-id">
4914
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-id">
4915
+ <xsl:with-param name="id" select="@id"/>
4916
+ </xsl:apply-templates>
4917
+ </xsl:variable>
4918
+
4919
+ <!-- simple-table-id='<xsl:copy-of select="$simple-table-id"/>' -->
4920
+
4921
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
4922
+
4923
+ </xsl:variable>
4924
+
4925
+ <!-- DEBUG: simple-table<xsl:copy-of select="$simple-table"/> -->
4926
+
4927
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if">
4928
+ <xsl:with-param name="table_or_dl">dl</xsl:with-param>
4929
+ </xsl:apply-templates>
4930
+
4931
+ </xsl:when>
4932
+ <xsl:otherwise>
4436
4933
 
4437
- <fo:table-body>
4438
- <xsl:apply-templates>
4439
- <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
4440
- </xsl:apply-templates>
4441
- </fo:table-body>
4934
+ <xsl:variable name="simple-table">
4935
+
4936
+ <xsl:variable name="dl_table">
4937
+ <tbody>
4938
+ <xsl:apply-templates mode="dl">
4939
+ <xsl:with-param name="id" select="@id"/>
4940
+ </xsl:apply-templates>
4941
+ </tbody>
4942
+ </xsl:variable>
4943
+
4944
+ <xsl:copy-of select="$dl_table"/>
4945
+ </xsl:variable>
4946
+
4947
+ <xsl:variable name="colwidths">
4948
+ <xsl:call-template name="calculate-column-widths">
4949
+ <xsl:with-param name="cols-count" select="2"/>
4950
+ <xsl:with-param name="table" select="$simple-table"/>
4951
+ </xsl:call-template>
4952
+ </xsl:variable>
4953
+
4954
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
4955
+ DEBUG
4956
+ colwidths=<xsl:copy-of select="$colwidths"/>
4957
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
4958
+
4959
+ <!-- colwidths=<xsl:copy-of select="$colwidths"/> -->
4960
+
4961
+ <xsl:variable name="maxlength_dt">
4962
+ <xsl:call-template name="getMaxLength_dt"/>
4963
+ </xsl:variable>
4964
+
4965
+ <xsl:variable name="isContainsKeepTogetherTag_">
4966
+ false
4967
+ </xsl:variable>
4968
+ <xsl:variable name="isContainsKeepTogetherTag" select="normalize-space($isContainsKeepTogetherTag_)"/>
4969
+ <!-- isContainsExpressReference=<xsl:value-of select="$isContainsExpressReference"/> -->
4970
+
4971
+
4972
+ <xsl:call-template name="setColumnWidth_dl">
4973
+ <xsl:with-param name="colwidths" select="$colwidths"/>
4974
+ <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
4975
+ <xsl:with-param name="isContainsKeepTogetherTag" select="$isContainsKeepTogetherTag"/>
4976
+ </xsl:call-template>
4977
+
4978
+ <fo:table-body>
4979
+
4980
+ <!-- DEBUG -->
4981
+ <xsl:if test="$table_if_debug = 'true'">
4982
+ <fo:table-row>
4983
+ <fo:table-cell number-columns-spanned="2" font-size="60%">
4984
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
4985
+ </fo:table-cell>
4986
+ </fo:table-row>
4987
+ </xsl:if>
4988
+
4989
+ <xsl:apply-templates>
4990
+ <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
4991
+ <xsl:with-param name="split_keep-within-line" select="xalan:nodeset($colwidths)/split_keep-within-line"/>
4992
+ </xsl:apply-templates>
4993
+
4994
+ </fo:table-body>
4995
+ </xsl:otherwise>
4996
+ </xsl:choose>
4442
4997
  </fo:table>
4443
4998
  </fo:block>
4444
4999
  </fo:block>
@@ -4449,6 +5004,9 @@
4449
5004
  <xsl:param name="colwidths"/>
4450
5005
  <xsl:param name="maxlength_dt"/>
4451
5006
  <xsl:param name="isContainsKeepTogetherTag"/>
5007
+
5008
+ <!-- <colwidths><xsl:copy-of select="$colwidths"/></colwidths> -->
5009
+
4452
5010
  <xsl:choose>
4453
5011
  <xsl:when test="ancestor::*[local-name()='dl']"><!-- second level, i.e. inlined table -->
4454
5012
  <fo:table-column column-width="50%"/>
@@ -4456,6 +5014,11 @@
4456
5014
  </xsl:when>
4457
5015
  <xsl:otherwise>
4458
5016
  <xsl:choose>
5017
+ <xsl:when test="xalan:nodeset($colwidths)/autolayout">
5018
+ <xsl:call-template name="insertTableColumnWidth">
5019
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5020
+ </xsl:call-template>
5021
+ </xsl:when>
4459
5022
  <xsl:when test="$isContainsKeepTogetherTag">
4460
5023
  <xsl:call-template name="insertTableColumnWidth">
4461
5024
  <xsl:with-param name="colwidths" select="$colwidths"/>
@@ -4500,13 +5063,19 @@
4500
5063
  </xsl:choose>
4501
5064
  </xsl:template><xsl:template name="insertTableColumnWidth">
4502
5065
  <xsl:param name="colwidths"/>
5066
+
4503
5067
  <xsl:for-each select="xalan:nodeset($colwidths)//column">
4504
5068
  <xsl:choose>
4505
5069
  <xsl:when test=". = 1 or . = 0">
4506
5070
  <fo:table-column column-width="proportional-column-width(2)"/>
4507
5071
  </xsl:when>
4508
5072
  <xsl:otherwise>
4509
- <fo:table-column column-width="proportional-column-width({.})"/>
5073
+ <!-- <fo:table-column column-width="proportional-column-width({.})"/> -->
5074
+ <xsl:variable name="divider">
5075
+ <xsl:value-of select="@divider"/>
5076
+ <xsl:if test="not(@divider)">1</xsl:if>
5077
+ </xsl:variable>
5078
+ <fo:table-column column-width="proportional-column-width({round(. div $divider)})"/>
4510
5079
  </xsl:otherwise>
4511
5080
  </xsl:choose>
4512
5081
  </xsl:for-each>
@@ -4568,11 +5137,19 @@
4568
5137
  </fo:table-cell>
4569
5138
  </fo:table-row>
4570
5139
  </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl">
5140
+ <xsl:param name="id"/>
5141
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
4571
5142
  <tr>
4572
5143
  <td>
5144
+ <xsl:attribute name="id">
5145
+ <xsl:value-of select="concat($id,'_',$row_number,'_1')"/>
5146
+ </xsl:attribute>
4573
5147
  <xsl:apply-templates/>
4574
5148
  </td>
4575
5149
  <td>
5150
+ <xsl:attribute name="id">
5151
+ <xsl:value-of select="concat($id,'_',$row_number,'_2')"/>
5152
+ </xsl:attribute>
4576
5153
 
4577
5154
  <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
4578
5155
  <xsl:with-param name="process">true</xsl:with-param>
@@ -4583,50 +5160,122 @@
4583
5160
 
4584
5161
  </xsl:template><xsl:template match="*[local-name()='dt']">
4585
5162
  <xsl:param name="key_iso"/>
5163
+ <xsl:param name="split_keep-within-line"/>
4586
5164
 
4587
5165
  <fo:table-row xsl:use-attribute-sets="dt-row-style">
4588
- <fo:table-cell>
5166
+ <xsl:call-template name="insert_dt_cell">
5167
+ <xsl:with-param name="key_iso" select="$key_iso"/>
5168
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5169
+ </xsl:call-template>
5170
+ <xsl:for-each select="following-sibling::*[local-name()='dd'][1]">
5171
+ <xsl:call-template name="insert_dd_cell">
5172
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5173
+ </xsl:call-template>
5174
+ </xsl:for-each>
5175
+ </fo:table-row>
5176
+ </xsl:template><xsl:template name="insert_dt_cell">
5177
+ <xsl:param name="key_iso"/>
5178
+ <xsl:param name="split_keep-within-line"/>
5179
+ <fo:table-cell xsl:use-attribute-sets="dt-cell-style">
5180
+
5181
+ <xsl:if test="$isGenerateTableIF = 'true'">
5182
+ <!-- border is mandatory, to calculate real width -->
5183
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
5184
+ <xsl:attribute name="text-align">left</xsl:attribute>
5185
+ </xsl:if>
5186
+
5187
+
5188
+ <fo:block xsl:use-attribute-sets="dt-block-style">
5189
+ <xsl:copy-of select="@id"/>
5190
+
5191
+ <xsl:if test="normalize-space($key_iso) = 'true'">
5192
+ <xsl:attribute name="margin-top">0</xsl:attribute>
5193
+ </xsl:if>
5194
+
5195
+
5196
+
5197
+ <xsl:apply-templates>
5198
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5199
+ </xsl:apply-templates>
5200
+
5201
+ <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"/> -->
5202
+
5203
+ </fo:block>
5204
+ </fo:table-cell>
5205
+ </xsl:template><xsl:template name="insert_dd_cell">
5206
+ <xsl:param name="split_keep-within-line"/>
5207
+ <fo:table-cell xsl:use-attribute-sets="dd-cell-style">
5208
+
5209
+ <xsl:if test="$isGenerateTableIF = 'true'">
5210
+ <!-- border is mandatory, to calculate real width -->
5211
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
5212
+ </xsl:if>
5213
+
5214
+ <fo:block>
5215
+
5216
+ <xsl:if test="$isGenerateTableIF = 'true'">
5217
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
5218
+ </xsl:if>
5219
+
4589
5220
 
4590
- <fo:block xsl:use-attribute-sets="dt-style">
4591
- <xsl:copy-of select="@id"/>
4592
-
4593
- <xsl:if test="normalize-space($key_iso) = 'true'">
4594
- <xsl:attribute name="margin-top">0</xsl:attribute>
4595
- </xsl:if>
4596
-
4597
-
4598
-
4599
- <xsl:apply-templates/>
4600
- </fo:block>
4601
- </fo:table-cell>
4602
- <fo:table-cell>
4603
- <fo:block>
4604
-
4605
5221
 
4606
- <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
4607
- <xsl:with-param name="process">true</xsl:with-param>
4608
- </xsl:apply-templates>
4609
- </fo:block>
4610
- </fo:table-cell>
4611
- </fo:table-row>
5222
+ <xsl:choose>
5223
+ <xsl:when test="$isGenerateTableIF = 'true'">
5224
+ <xsl:apply-templates> <!-- following-sibling::*[local-name()='dd'][1] -->
5225
+ <xsl:with-param name="process">true</xsl:with-param>
5226
+ </xsl:apply-templates>
5227
+ </xsl:when>
5228
+ <xsl:otherwise>
5229
+ <xsl:apply-templates select="."> <!-- following-sibling::*[local-name()='dd'][1] -->
5230
+ <xsl:with-param name="process">true</xsl:with-param>
5231
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5232
+ </xsl:apply-templates>
5233
+ </xsl:otherwise>
5234
+
5235
+ </xsl:choose>
5236
+
5237
+ <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"/> -->
5238
+
5239
+ </fo:block>
5240
+ </fo:table-cell>
4612
5241
  </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl"/><xsl:template match="*[local-name()='dd']" mode="dl_process">
4613
5242
  <xsl:apply-templates/>
4614
5243
  </xsl:template><xsl:template match="*[local-name()='dd']">
4615
5244
  <xsl:param name="process">false</xsl:param>
5245
+ <xsl:param name="split_keep-within-line"/>
4616
5246
  <xsl:if test="$process = 'true'">
4617
5247
  <xsl:apply-templates select="@language"/>
4618
- <xsl:apply-templates/>
5248
+ <xsl:apply-templates>
5249
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5250
+ </xsl:apply-templates>
4619
5251
  </xsl:if>
4620
5252
  </xsl:template><xsl:template match="*[local-name()='dd']/*[local-name()='p']" mode="inline">
4621
5253
  <fo:inline><xsl:text> </xsl:text><xsl:apply-templates/></fo:inline>
4622
- </xsl:template><xsl:template match="*[local-name()='em']">
5254
+ </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl_if">
5255
+ <xsl:param name="id"/>
5256
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
5257
+ <tr>
5258
+ <td>
5259
+ <xsl:copy-of select="node()"/>
5260
+ </td>
5261
+ <td>
5262
+
5263
+ <xsl:copy-of select="following-sibling::*[local-name()='dd'][1]/node()"/>
5264
+
5265
+ </td>
5266
+ </tr>
5267
+
5268
+ </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl_if"/><xsl:template match="*[local-name()='em']">
4623
5269
  <fo:inline font-style="italic">
4624
5270
  <xsl:apply-templates/>
4625
5271
  </fo:inline>
4626
5272
  </xsl:template><xsl:template match="*[local-name()='strong'] | *[local-name()='b']">
5273
+ <xsl:param name="split_keep-within-line"/>
4627
5274
  <fo:inline font-weight="bold">
4628
5275
 
4629
- <xsl:apply-templates/>
5276
+ <xsl:apply-templates>
5277
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5278
+ </xsl:apply-templates>
4630
5279
  </fo:inline>
4631
5280
  </xsl:template><xsl:template match="*[local-name()='padding']">
4632
5281
  <fo:inline padding-right="{@value}"> </fo:inline>
@@ -4827,6 +5476,10 @@
4827
5476
  <xsl:param name="text"/>
4828
5477
  <xsl:param name="separator" select="' '"/>
4829
5478
  <xsl:choose>
5479
+
5480
+ <xsl:when test="$isGenerateTableIF = 'true' and not(contains($text, $separator))">
5481
+ <word><xsl:value-of select="normalize-space($text)"/></word>
5482
+ </xsl:when>
4830
5483
  <xsl:when test="not(contains($text, $separator))">
4831
5484
  <word>
4832
5485
  <xsl:variable name="len_str_tmp" select="string-length(normalize-space($text))"/>
@@ -4871,13 +5524,66 @@
4871
5524
  </xsl:when>
4872
5525
  <xsl:otherwise>
4873
5526
  <word>
4874
- <xsl:value-of select="string-length(normalize-space(substring-before($text, $separator)))"/>
5527
+ <xsl:variable name="word" select="normalize-space(substring-before($text, $separator))"/>
5528
+ <xsl:choose>
5529
+ <xsl:when test="$isGenerateTableIF = 'true'">
5530
+ <xsl:value-of select="$word"/>
5531
+ </xsl:when>
5532
+ <xsl:otherwise>
5533
+ <xsl:value-of select="string-length($word)"/>
5534
+ </xsl:otherwise>
5535
+ </xsl:choose>
4875
5536
  </word>
4876
5537
  <xsl:call-template name="tokenize">
4877
5538
  <xsl:with-param name="text" select="substring-after($text, $separator)"/>
4878
5539
  </xsl:call-template>
4879
5540
  </xsl:otherwise>
4880
5541
  </xsl:choose>
5542
+ </xsl:template><xsl:template name="tokenize_with_tags">
5543
+ <xsl:param name="tags"/>
5544
+ <xsl:param name="text"/>
5545
+ <xsl:param name="separator" select="' '"/>
5546
+ <xsl:choose>
5547
+
5548
+ <xsl:when test="not(contains($text, $separator))">
5549
+ <word>
5550
+ <xsl:call-template name="enclose_text_in_tags">
5551
+ <xsl:with-param name="text" select="normalize-space($text)"/>
5552
+ <xsl:with-param name="tags" select="$tags"/>
5553
+ </xsl:call-template>
5554
+ </word>
5555
+ </xsl:when>
5556
+ <xsl:otherwise>
5557
+ <word>
5558
+ <xsl:call-template name="enclose_text_in_tags">
5559
+ <xsl:with-param name="text" select="normalize-space(substring-before($text, $separator))"/>
5560
+ <xsl:with-param name="tags" select="$tags"/>
5561
+ </xsl:call-template>
5562
+ </word>
5563
+ <xsl:call-template name="tokenize_with_tags">
5564
+ <xsl:with-param name="text" select="substring-after($text, $separator)"/>
5565
+ </xsl:call-template>
5566
+ </xsl:otherwise>
5567
+ </xsl:choose>
5568
+ </xsl:template><xsl:template name="enclose_text_in_tags">
5569
+ <xsl:param name="text"/>
5570
+ <xsl:param name="tags"/>
5571
+ <xsl:param name="num">1</xsl:param> <!-- default (start) value -->
5572
+
5573
+ <xsl:variable name="tag_name" select="normalize-space(xalan:nodeset($tags)//tag[$num])"/>
5574
+
5575
+ <xsl:choose>
5576
+ <xsl:when test="$tag_name = ''"><xsl:value-of select="$text"/></xsl:when>
5577
+ <xsl:otherwise>
5578
+ <xsl:element name="{$tag_name}">
5579
+ <xsl:call-template name="enclose_text_in_tags">
5580
+ <xsl:with-param name="text" select="$text"/>
5581
+ <xsl:with-param name="tags" select="$tags"/>
5582
+ <xsl:with-param name="num" select="$num + 1"/>
5583
+ </xsl:call-template>
5584
+ </xsl:element>
5585
+ </xsl:otherwise>
5586
+ </xsl:choose>
4881
5587
  </xsl:template><xsl:template name="max_length">
4882
5588
  <xsl:param name="words"/>
4883
5589
  <xsl:for-each select="$words//word">
@@ -4978,12 +5684,19 @@
4978
5684
  </xsl:otherwise>
4979
5685
  </xsl:choose>
4980
5686
  </xsl:template><xsl:template name="getSimpleTable">
5687
+ <xsl:param name="id"/>
5688
+
4981
5689
  <xsl:variable name="simple-table">
4982
5690
 
5691
+ <!-- Step 0. replace <br/> to <p>...</p> -->
5692
+ <xsl:variable name="table_without_br">
5693
+ <xsl:apply-templates mode="table-without-br"/>
5694
+ </xsl:variable>
5695
+
4983
5696
  <!-- Step 1. colspan processing -->
4984
5697
  <xsl:variable name="simple-table-colspan">
4985
5698
  <tbody>
4986
- <xsl:apply-templates mode="simple-table-colspan"/>
5699
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-colspan"/>
4987
5700
  </tbody>
4988
5701
  </xsl:variable>
4989
5702
 
@@ -4992,10 +5705,67 @@
4992
5705
  <xsl:apply-templates select="xalan:nodeset($simple-table-colspan)" mode="simple-table-rowspan"/>
4993
5706
  </xsl:variable>
4994
5707
 
4995
- <xsl:copy-of select="xalan:nodeset($simple-table-rowspan)"/>
4996
-
5708
+ <!-- Step 3: add id to each cell -->
5709
+ <!-- add <word>...</word> for each word, image, math -->
5710
+ <xsl:variable name="simple-table-id">
5711
+ <xsl:apply-templates select="xalan:nodeset($simple-table-rowspan)" mode="simple-table-id">
5712
+ <xsl:with-param name="id" select="$id"/>
5713
+ </xsl:apply-templates>
5714
+ </xsl:variable>
5715
+
5716
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
5717
+
4997
5718
  </xsl:variable>
4998
5719
  <xsl:copy-of select="$simple-table"/>
5720
+ </xsl:template><xsl:template match="@*|node()" mode="table-without-br">
5721
+ <xsl:copy>
5722
+ <xsl:apply-templates select="@*|node()" mode="table-without-br"/>
5723
+ </xsl:copy>
5724
+ </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">
5725
+ <xsl:copy>
5726
+ <xsl:copy-of select="@*"/>
5727
+ <p>
5728
+ <xsl:copy-of select="node()"/>
5729
+ </p>
5730
+ </xsl:copy>
5731
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td'][*[local-name()='br']]" mode="table-without-br">
5732
+ <xsl:copy>
5733
+ <xsl:copy-of select="@*"/>
5734
+ <xsl:for-each select="*[local-name()='br']">
5735
+ <xsl:variable name="current_id" select="generate-id()"/>
5736
+ <p>
5737
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
5738
+ <xsl:copy-of select="."/>
5739
+ </xsl:for-each>
5740
+ </p>
5741
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
5742
+ <p>
5743
+ <xsl:for-each select="following-sibling::node()">
5744
+ <xsl:copy-of select="."/>
5745
+ </xsl:for-each>
5746
+ </p>
5747
+ </xsl:if>
5748
+ </xsl:for-each>
5749
+ </xsl:copy>
5750
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']/*[local-name() = 'p'][*[local-name()='br']]" mode="table-without-br">
5751
+ <xsl:for-each select="*[local-name()='br']">
5752
+ <xsl:variable name="current_id" select="generate-id()"/>
5753
+ <p>
5754
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
5755
+ <xsl:copy-of select="."/>
5756
+ </xsl:for-each>
5757
+ </p>
5758
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
5759
+ <p>
5760
+ <xsl:for-each select="following-sibling::node()">
5761
+ <xsl:copy-of select="."/>
5762
+ </xsl:for-each>
5763
+ </p>
5764
+ </xsl:if>
5765
+ </xsl:for-each>
5766
+ </xsl:template><xsl:template match="text()[not(ancestor::*[local-name() = 'sourcecode'])]" mode="table-without-br">
5767
+ <xsl:variable name="text" select="translate(.,'&#9;&#10;&#13;','')"/>
5768
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new($text),' {2,}',' ')"/>
4999
5769
  </xsl:template><xsl:template match="*[local-name()='thead'] | *[local-name()='tbody']" mode="simple-table-colspan">
5000
5770
  <xsl:apply-templates mode="simple-table-colspan"/>
5001
5771
  </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">
@@ -5085,6 +5855,126 @@
5085
5855
  <xsl:apply-templates select="following-sibling::tr[1]" mode="simple-table-rowspan">
5086
5856
  <xsl:with-param name="previousRow" select="$newRow"/>
5087
5857
  </xsl:apply-templates>
5858
+ </xsl:template><xsl:template match="/" mode="simple-table-id">
5859
+ <xsl:param name="id"/>
5860
+ <xsl:variable name="id_prefixed" select="concat('table_if_',$id)"/> <!-- table id prefixed by 'table_if_' to simple search in IF -->
5861
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
5862
+ <xsl:with-param name="id" select="$id_prefixed"/>
5863
+ </xsl:apply-templates>
5864
+ </xsl:template><xsl:template match="@*|node()" mode="simple-table-id">
5865
+ <xsl:param name="id"/>
5866
+ <xsl:copy>
5867
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
5868
+ <xsl:with-param name="id" select="$id"/>
5869
+ </xsl:apply-templates>
5870
+ </xsl:copy>
5871
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="simple-table-id">
5872
+ <xsl:param name="id"/>
5873
+ <xsl:copy>
5874
+ <xsl:copy-of select="@*"/>
5875
+ <xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
5876
+ <xsl:apply-templates select="node()" mode="simple-table-id">
5877
+ <xsl:with-param name="id" select="$id"/>
5878
+ </xsl:apply-templates>
5879
+ </xsl:copy>
5880
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']" mode="simple-table-id">
5881
+ <xsl:param name="id"/>
5882
+ <xsl:copy>
5883
+ <xsl:copy-of select="@*"/>
5884
+ <xsl:variable name="row_number" select="count(../preceding-sibling::*) + 1"/>
5885
+ <xsl:variable name="col_number" select="count(preceding-sibling::*) + 1"/>
5886
+ <xsl:attribute name="id">
5887
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number)"/>
5888
+ </xsl:attribute>
5889
+
5890
+ <xsl:for-each select="*[local-name() = 'p']">
5891
+ <xsl:copy>
5892
+ <xsl:copy-of select="@*"/>
5893
+ <xsl:variable name="p_num" select="count(preceding-sibling::*[local-name() = 'p']) + 1"/>
5894
+ <xsl:attribute name="id">
5895
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_p_',$p_num)"/>
5896
+ </xsl:attribute>
5897
+
5898
+ <xsl:copy-of select="node()"/>
5899
+ </xsl:copy>
5900
+ </xsl:for-each>
5901
+
5902
+
5903
+ <xsl:if test="$isGenerateTableIF = 'true'"> <!-- split each paragraph to words, image, math -->
5904
+
5905
+ <xsl:variable name="td_text">
5906
+ <xsl:apply-templates select="." mode="td_text_with_formatting"/>
5907
+ </xsl:variable>
5908
+
5909
+ <!-- td_text='<xsl:copy-of select="$td_text"/>' -->
5910
+
5911
+ <xsl:variable name="words">
5912
+ <xsl:for-each select=".//*[local-name() = 'image' or local-name() = 'stem']">
5913
+ <word>
5914
+ <xsl:copy-of select="."/>
5915
+ </word>
5916
+ </xsl:for-each>
5917
+
5918
+ <xsl:for-each select="xalan:nodeset($td_text)//*[local-name() = 'word'][normalize-space() != '']">
5919
+ <xsl:copy-of select="."/>
5920
+ </xsl:for-each>
5921
+
5922
+ </xsl:variable>
5923
+
5924
+ <xsl:for-each select="xalan:nodeset($words)/word">
5925
+ <xsl:variable name="num" select="count(preceding-sibling::word) + 1"/>
5926
+ <xsl:copy>
5927
+ <xsl:attribute name="id">
5928
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_word_',$num)"/>
5929
+ </xsl:attribute>
5930
+ <xsl:copy-of select="node()"/>
5931
+ </xsl:copy>
5932
+ </xsl:for-each>
5933
+ </xsl:if>
5934
+ </xsl:copy>
5935
+
5936
+ </xsl:template><xsl:template match="@*|node()" mode="td_text_with_formatting">
5937
+ <xsl:copy>
5938
+ <xsl:apply-templates select="@*|node()" mode="td_text_with_formatting"/>
5939
+ </xsl:copy>
5940
+ </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">
5941
+ <xsl:variable name="formatting_tags">
5942
+ <xsl:call-template name="getFormattingTags"/>
5943
+ </xsl:variable>
5944
+ <word>
5945
+ <xsl:call-template name="enclose_text_in_tags">
5946
+ <xsl:with-param name="text" select="normalize-space(.)"/>
5947
+ <xsl:with-param name="tags" select="$formatting_tags"/>
5948
+ </xsl:call-template>
5949
+ </word>
5950
+ </xsl:template><xsl:template match="*[local-name() != 'keep-together_within-line']/text()" mode="td_text_with_formatting">
5951
+
5952
+ <xsl:variable name="td_text" select="."/>
5953
+
5954
+ <xsl:variable name="string_with_added_zerospaces">
5955
+ <xsl:call-template name="add-zero-spaces-java">
5956
+ <xsl:with-param name="text" select="$td_text"/>
5957
+ </xsl:call-template>
5958
+ </xsl:variable>
5959
+
5960
+ <xsl:variable name="formatting_tags">
5961
+ <xsl:call-template name="getFormattingTags"/>
5962
+ </xsl:variable>
5963
+
5964
+ <!-- <word>text</word> -->
5965
+ <xsl:call-template name="tokenize_with_tags">
5966
+ <xsl:with-param name="tags" select="$formatting_tags"/>
5967
+ <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
5968
+ </xsl:call-template>
5969
+ </xsl:template><xsl:template name="getFormattingTags">
5970
+ <tags>
5971
+ <xsl:if test="ancestor::*[local-name() = 'strong']"><tag>strong</tag></xsl:if>
5972
+ <xsl:if test="ancestor::*[local-name() = 'em']"><tag>em</tag></xsl:if>
5973
+ <xsl:if test="ancestor::*[local-name() = 'sub']"><tag>sub</tag></xsl:if>
5974
+ <xsl:if test="ancestor::*[local-name() = 'sup']"><tag>sup</tag></xsl:if>
5975
+ <xsl:if test="ancestor::*[local-name() = 'tt']"><tag>tt</tag></xsl:if>
5976
+ <xsl:if test="ancestor::*[local-name() = 'keep-together_within-line']"><tag>keep-together_within-line</tag></xsl:if>
5977
+ </tags>
5088
5978
  </xsl:template><xsl:template name="getLang">
5089
5979
  <xsl:variable name="language_current" select="normalize-space(//*[local-name()='bibdata']//*[local-name()='language'][@current = 'true'])"/>
5090
5980
  <xsl:variable name="language">
@@ -6781,7 +7671,9 @@
6781
7671
  <!-- <xsl:attribute name="border">0.5pt solid black</xsl:attribute> -->
6782
7672
  </xsl:if>
6783
7673
  <xsl:variable name="simple-table">
6784
- <xsl:call-template name="getSimpleTable"/>
7674
+ <xsl:call-template name="getSimpleTable">
7675
+ <xsl:with-param name="id" select="@id"/>
7676
+ </xsl:call-template>
6785
7677
  </xsl:variable>
6786
7678
  <xsl:variable name="cols-count" select="count(xalan:nodeset($simple-table)//tr[1]/td)"/>
6787
7679
  <xsl:if test="$cols-count = 2 and not(ancestor::*[local-name()='table'])">
@@ -7751,7 +8643,7 @@
7751
8643
  <!-- <fo:inline id="{@id}" font-size="1pt"/> -->
7752
8644
  <fo:inline id="{@id}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:inline>
7753
8645
  <!-- we need to add zero-width space, otherwise this fo:inline is missing in IF xml -->
7754
- <xsl:if test="not(following-sibling::node()[normalize-space() != ''])"> </xsl:if>
8646
+ <xsl:if test="not(following-sibling::node()[normalize-space() != ''])"><fo:inline font-size="1pt"> </fo:inline></xsl:if>
7755
8647
  </xsl:template><xsl:template match="*[local-name() = 'errata']">
7756
8648
  <!-- <row>
7757
8649
  <date>05-07-2013</date>
@@ -9095,4 +9987,40 @@
9095
9987
  <xsl:value-of select="$value"/>
9096
9988
  </xsl:otherwise>
9097
9989
  </xsl:choose>
9990
+ </xsl:template><xsl:template match="*" mode="print_as_xml">
9991
+ <xsl:param name="level">0</xsl:param>
9992
+
9993
+ <fo:block margin-left="{2*$level}mm">
9994
+ <xsl:text>
9995
+ &lt;</xsl:text>
9996
+ <xsl:value-of select="local-name()"/>
9997
+ <xsl:for-each select="@*">
9998
+ <xsl:text> </xsl:text>
9999
+ <xsl:value-of select="local-name()"/>
10000
+ <xsl:text>="</xsl:text>
10001
+ <xsl:value-of select="."/>
10002
+ <xsl:text>"</xsl:text>
10003
+ </xsl:for-each>
10004
+ <xsl:text>&gt;</xsl:text>
10005
+
10006
+ <xsl:if test="not(*)">
10007
+ <fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline>
10008
+ <xsl:text>&lt;/</xsl:text>
10009
+ <xsl:value-of select="local-name()"/>
10010
+ <xsl:text>&gt;</xsl:text>
10011
+ </xsl:if>
10012
+ </fo:block>
10013
+
10014
+ <xsl:if test="*">
10015
+ <fo:block>
10016
+ <xsl:apply-templates mode="print_as_xml">
10017
+ <xsl:with-param name="level" select="$level + 1"/>
10018
+ </xsl:apply-templates>
10019
+ </fo:block>
10020
+ <fo:block margin-left="{2*$level}mm">
10021
+ <xsl:text>&lt;/</xsl:text>
10022
+ <xsl:value-of select="local-name()"/>
10023
+ <xsl:text>&gt;</xsl:text>
10024
+ </fo:block>
10025
+ </xsl:if>
9098
10026
  </xsl:template></xsl:stylesheet>