metanorma-iso 2.1.0 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/html2doc/lists.rb +145 -10
  3. data/lib/isodoc/iso/base_convert.rb +11 -1
  4. data/lib/isodoc/iso/html/html_iso_titlepage.html +2 -0
  5. data/lib/isodoc/iso/html/isodoc-dis.css +216 -278
  6. data/lib/isodoc/iso/html/isodoc-dis.scss +294 -288
  7. data/lib/isodoc/iso/html/isodoc.css +38 -13
  8. data/lib/isodoc/iso/html/isodoc.scss +38 -12
  9. data/lib/isodoc/iso/html/style-human.css +14 -1
  10. data/lib/isodoc/iso/html/style-human.scss +10 -1
  11. data/lib/isodoc/iso/html/style-iso.css +35 -23
  12. data/lib/isodoc/iso/html/style-iso.scss +31 -23
  13. data/lib/isodoc/iso/html/word_iso_intro-dis.html +1 -6
  14. data/lib/isodoc/iso/html/word_iso_titlepage-dis.html +24 -13
  15. data/lib/isodoc/iso/html/word_iso_titlepage-prf.html +58 -0
  16. data/lib/isodoc/iso/html/word_iso_titlepage.html +10 -6
  17. data/lib/isodoc/iso/html/wordstyle-dis.css +12 -62
  18. data/lib/isodoc/iso/html/wordstyle-dis.scss +7 -56
  19. data/lib/isodoc/iso/html_convert.rb +7 -2
  20. data/lib/isodoc/iso/i18n-en.yaml +32 -4
  21. data/lib/isodoc/iso/i18n-fr.yaml +29 -3
  22. data/lib/isodoc/iso/i18n-ru.yaml +32 -4
  23. data/lib/isodoc/iso/i18n-zh-Hans.yaml +32 -3
  24. data/lib/isodoc/iso/i18n.rb +1 -1
  25. data/lib/isodoc/iso/iso.amendment.xsl +1570 -246
  26. data/lib/isodoc/iso/iso.international-standard.xsl +1570 -246
  27. data/lib/isodoc/iso/metadata.rb +67 -67
  28. data/lib/isodoc/iso/presentation_bibdata.rb +74 -0
  29. data/lib/isodoc/iso/presentation_xml_convert.rb +16 -5
  30. data/lib/isodoc/iso/presentation_xref.rb +10 -4
  31. data/lib/isodoc/iso/sections.rb +3 -3
  32. data/lib/isodoc/iso/word_cleanup.rb +3 -0
  33. data/lib/isodoc/iso/word_convert.rb +8 -5
  34. data/lib/isodoc/iso/word_dis_cleanup.rb +235 -0
  35. data/lib/isodoc/iso/word_dis_convert.rb +48 -100
  36. data/lib/isodoc/iso/xref.rb +34 -6
  37. data/lib/metanorma/iso/base.rb +20 -1
  38. data/lib/metanorma/iso/biblio.rng +134 -39
  39. data/lib/metanorma/iso/boilerplate-fr.xml +3 -0
  40. data/lib/metanorma/iso/boilerplate-ru.xml +3 -0
  41. data/lib/metanorma/iso/boilerplate.xml +3 -0
  42. data/lib/metanorma/iso/cleanup.rb +49 -11
  43. data/lib/metanorma/iso/front.rb +38 -6
  44. data/lib/metanorma/iso/front_id.rb +2 -0
  45. data/lib/metanorma/iso/isodoc.rng +16 -0
  46. data/lib/metanorma/iso/isostandard.rng +30 -12
  47. data/lib/metanorma/iso/macros.rb +29 -0
  48. data/lib/metanorma/iso/validate_section.rb +0 -12
  49. data/lib/metanorma/iso/version.rb +1 -1
  50. data/spec/isodoc/amd_spec.rb +20 -46
  51. data/spec/isodoc/blocks_spec.rb +499 -2
  52. data/spec/isodoc/i18n_spec.rb +145 -80
  53. data/spec/isodoc/iso_spec.rb +50 -169
  54. data/spec/isodoc/metadata_spec.rb +240 -99
  55. data/spec/isodoc/postproc_spec.rb +43 -7
  56. data/spec/isodoc/section_spec.rb +9 -9
  57. data/spec/isodoc/word_dis_spec.rb +1332 -146
  58. data/spec/isodoc/xref_spec.rb +87 -13
  59. data/spec/metanorma/amd_spec.rb +39 -23
  60. data/spec/metanorma/base_spec.rb +174 -44
  61. data/spec/metanorma/blocks_spec.rb +54 -0
  62. data/spec/metanorma/lists_spec.rb +2 -2
  63. data/spec/metanorma/section_spec.rb +2 -2
  64. data/spec/metanorma/validate_spec.rb +8 -19
  65. data/spec/spec_helper.rb +17 -7
  66. data/spec/vcr_cassettes/withdrawn_iso.yml +30 -30
  67. metadata +7 -8
  68. data/docs/asciiiso-syntax.adoc +0 -307
  69. data/docs/guidance.adoc +0 -487
  70. data/docs/navigation.adoc +0 -23
  71. data/docs/quickstart.adoc +0 -179
  72. data/lib/isodoc/iso/presentation_inline.rb +0 -90
@@ -30,12 +30,19 @@
30
30
  </xsl:variable>
31
31
  <xsl:variable name="copyrightYear" select="/iso:iso-standard/iso:bibdata/iso:copyright/iso:from"/>
32
32
  <xsl:variable name="copyrightAbbr_">
33
- <xsl:for-each select="/iso:iso-standard/iso:bibdata/iso:copyright/iso:owner/iso:organization/iso:abbreviation">
33
+ <xsl:for-each select="/iso:iso-standard/iso:bibdata/iso:copyright/iso:owner/iso:organization/iso:abbreviation[. != 'IEEE']">
34
34
  <xsl:value-of select="."/><xsl:if test="position() != last()">/</xsl:if>
35
35
  </xsl:for-each>
36
36
  </xsl:variable>
37
37
  <xsl:variable name="copyrightAbbr" select="normalize-space($copyrightAbbr_)"/>
38
- <xsl:variable name="copyrightText" select="concat( ', $copyrightAbbr, ' ', $copyrightYear ,' – ', $all_rights_reserved)"/>
38
+ <xsl:variable name="copyrightAbbrIEEE" select="normalize-space(/iso:iso-standard/iso:bibdata/iso:copyright/iso:owner/iso:organization/iso:abbreviation[. = 'IEEE'])"/>
39
+ <xsl:variable name="copyrightText">
40
+ <xsl:value-of select="concat('© ', $copyrightAbbr, ' ', $copyrightYear ,' – ', $all_rights_reserved)"/>
41
+ <xsl:if test="$copyrightAbbrIEEE != ''">
42
+ <xsl:value-of select="$linebreak"/>
43
+ <xsl:value-of select="concat('© ', $copyrightAbbrIEEE, ' ', $copyrightYear ,' – ', $all_rights_reserved)"/>
44
+ </xsl:if>
45
+ </xsl:variable>
39
46
 
40
47
  <xsl:variable name="lang-1st-letter_tmp" select="substring-before(substring-after(/iso:iso-standard/iso:bibdata/iso:docidentifier[@type = 'iso-with-lang'], '('), ')')"/>
41
48
  <xsl:variable name="lang-1st-letter" select="concat('(', $lang-1st-letter_tmp , ')')"/>
@@ -195,22 +202,48 @@
195
202
  </xsl:variable>
196
203
 
197
204
  <xsl:variable name="editorialgroup_">
198
- <xsl:variable name="data">
199
- <xsl:for-each select="/iso:iso-standard/iso:bibdata/iso:ext/iso:editorialgroup/iso:technical-committee[normalize-space(@number) != '']">
200
- <xsl:text>/TC </xsl:text><fo:inline font-weight="bold"><xsl:value-of select="@number"/></fo:inline>
201
- </xsl:for-each>
202
- <xsl:for-each select="/iso:iso-standard/iso:bibdata/iso:ext/iso:editorialgroup/iso:subcommittee[normalize-space(@number) != '']">
203
- <xsl:text>/SC </xsl:text><fo:inline font-weight="bold"><xsl:value-of select="@number"/></fo:inline>
205
+ <!-- Example: ISO/TC 46/SC 2 -->
206
+ <!-- ISO/SG SMART/SG TS/AG 1 -->
207
+ <xsl:variable name="approvalgroup" select="normalize-space(/iso:iso-standard/iso:bibdata/iso:ext/iso:approvalgroup/@identifier)"/>
208
+ <xsl:variable name="parts_by_slash">
209
+ <xsl:call-template name="split">
210
+ <xsl:with-param name="pText" select="$approvalgroup"/>
211
+ <xsl:with-param name="sep" select="'/'"/>
212
+ <xsl:with-param name="normalize-space">false</xsl:with-param>
213
+ <xsl:with-param name="keep_sep">true</xsl:with-param>
214
+ </xsl:call-template>
215
+ </xsl:variable>
216
+ <xsl:variable name="parts_with_subparts">
217
+ <xsl:for-each select="xalan:nodeset($parts_by_slash)//item">
218
+ <subitem>
219
+ <xsl:call-template name="split">
220
+ <xsl:with-param name="pText" select="."/>
221
+ <xsl:with-param name="sep" select="' '"/>
222
+ <xsl:with-param name="normalize-space">false</xsl:with-param>
223
+ <xsl:with-param name="keep_sep">true</xsl:with-param>
224
+ </xsl:call-template>
225
+ </subitem>
204
226
  </xsl:for-each>
205
- <xsl:if test="not($stage-abbreviation = 'DIS' or $stage-abbreviation = 'FDIS')">
206
- <xsl:for-each select="/iso:iso-standard/iso:bibdata/iso:ext/iso:editorialgroup/iso:workgroup[normalize-space(@number) != '']">
207
- <xsl:text>/WG </xsl:text><fo:inline font-weight="bold"><xsl:value-of select="@number"/></fo:inline>
208
- </xsl:for-each>
209
- </xsl:if>
210
227
  </xsl:variable>
211
- <xsl:if test="normalize-space($data) != ''">
212
- <xsl:text>ISO</xsl:text><xsl:copy-of select="$data"/>
213
- </xsl:if>
228
+ <xsl:for-each select="xalan:nodeset($parts_with_subparts)//subitem">
229
+ <xsl:choose>
230
+ <xsl:when test="position() = 1">
231
+ <xsl:value-of select="."/>
232
+ </xsl:when>
233
+ <xsl:otherwise>
234
+ <xsl:for-each select="item">
235
+ <xsl:choose>
236
+ <xsl:when test="position() = last()">
237
+ <fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline>
238
+ </xsl:when>
239
+ <xsl:otherwise>
240
+ <xsl:value-of select="."/>
241
+ </xsl:otherwise>
242
+ </xsl:choose>
243
+ </xsl:for-each>
244
+ </xsl:otherwise>
245
+ </xsl:choose>
246
+ </xsl:for-each>
214
247
  </xsl:variable>
215
248
  <xsl:variable name="editorialgroup" select="xalan:nodeset($editorialgroup_)"/>
216
249
 
@@ -243,9 +276,9 @@
243
276
 
244
277
  <xsl:variable name="root-style">
245
278
  <root-style xsl:use-attribute-sets="root-style">
246
- <xsl:if test="$lang = 'zh'">
279
+ <!-- <xsl:if test="$lang = 'zh'">
247
280
  <xsl:attribute name="font-family">Source Han Sans, Times New Roman, Cambria Math</xsl:attribute>
248
- </xsl:if>
281
+ </xsl:if> -->
249
282
  </root-style>
250
283
  </xsl:variable>
251
284
  <xsl:call-template name="insertRootStyle">
@@ -264,25 +297,25 @@
264
297
  </fo:simple-page-master>
265
298
 
266
299
  <fo:simple-page-master master-name="cover-page-published" page-width="{$pageWidth}mm" page-height="{$pageHeight}mm">
267
- <fo:region-body margin-top="12.7mm" margin-bottom="40mm" margin-left="78mm" margin-right="18.5mm"/>
300
+ <fo:region-body margin-top="12.7mm" margin-bottom="75mm" margin-left="78mm" margin-right="18.5mm"/>
268
301
  <fo:region-before region-name="cover-page-header" extent="12.7mm"/>
269
- <fo:region-after region-name="cover-page-footer" extent="40mm" display-align="after"/>
302
+ <fo:region-after region-name="cover-page-footer" extent="75mm" display-align="after"/>
270
303
  <fo:region-start region-name="cover-left-region" extent="78mm"/>
271
304
  <fo:region-end region-name="cover-right-region" extent="18.5mm"/>
272
305
  </fo:simple-page-master>
273
306
 
274
307
 
275
308
  <fo:simple-page-master master-name="cover-page-publishedISO-odd" page-width="{$pageWidth}mm" page-height="{$pageHeight}mm">
276
- <fo:region-body margin-top="12.7mm" margin-bottom="40mm" margin-left="{$marginLeftRight1}mm" margin-right="{$marginLeftRight2}mm"/>
309
+ <fo:region-body margin-top="12.7mm" margin-bottom="75mm" margin-left="{$marginLeftRight1}mm" margin-right="{$marginLeftRight2}mm"/>
277
310
  <fo:region-before region-name="cover-page-header" extent="12.7mm"/>
278
- <fo:region-after region-name="cover-page-footer" extent="40mm" display-align="after"/>
311
+ <fo:region-after region-name="cover-page-footer" extent="75mm" display-align="after"/>
279
312
  <fo:region-start region-name="cover-left-region" extent="{$marginLeftRight1}mm"/>
280
313
  <fo:region-end region-name="cover-right-region" extent="{$marginLeftRight2}mm"/>
281
314
  </fo:simple-page-master>
282
315
  <fo:simple-page-master master-name="cover-page-publishedISO-even" page-width="{$pageWidth}mm" page-height="{$pageHeight}mm">
283
- <fo:region-body margin-top="12.7mm" margin-bottom="40mm" margin-left="{$marginLeftRight2}mm" margin-right="{$marginLeftRight1}mm"/>
316
+ <fo:region-body margin-top="12.7mm" margin-bottom="75mm" margin-left="{$marginLeftRight2}mm" margin-right="{$marginLeftRight1}mm"/>
284
317
  <fo:region-before region-name="cover-page-header" extent="12.7mm"/>
285
- <fo:region-after region-name="cover-page-footer" extent="40mm" display-align="after"/>
318
+ <fo:region-after region-name="cover-page-footer" extent="75mm" display-align="after"/>
286
319
  <fo:region-start region-name="cover-left-region" extent="{$marginLeftRight2}mm"/>
287
320
  <fo:region-end region-name="cover-right-region" extent="{$marginLeftRight1}mm"/>
288
321
  </fo:simple-page-master>
@@ -431,9 +464,9 @@
431
464
  <fo:table-column column-width="112.5mm"/>
432
465
  <fo:table-body>
433
466
  <fo:table-row>
434
- <fo:table-cell font-size="6.5pt" text-align="justify" display-align="after" padding-bottom="8mm"><!-- before -->
467
+ <fo:table-cell font-size="6.5pt" text-align="justify" display-align="after" padding-bottom="8mm">
435
468
  <!-- margin-top="-30mm" -->
436
- <fo:block margin-top="-100mm">
469
+ <fo:block> <!-- margin-top="-100mm" -->
437
470
  <xsl:if test="$stage-abbreviation = 'DIS' or $stage-abbreviation = 'NWIP' or $stage-abbreviation = 'NP' or $stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD'">
438
471
  <fo:block margin-bottom="1.5mm">
439
472
  <xsl:text>THIS DOCUMENT IS A DRAFT CIRCULATED FOR COMMENT AND APPROVAL. IT IS THEREFORE SUBJECT TO CHANGE AND MAY NOT BE REFERRED TO AS AN INTERNATIONAL STANDARD UNTIL PUBLISHED AS SUCH.</xsl:text>
@@ -463,31 +496,82 @@
463
496
  <fo:table-cell>
464
497
  <fo:block> </fo:block>
465
498
  </fo:table-cell>
466
- <fo:table-cell>
467
- <xsl:if test="$stage-abbreviation = 'DIS'">
468
- <fo:block-container margin-top="-15mm" margin-bottom="7mm" margin-left="1mm">
469
- <fo:block font-size="9pt" border="0.5pt solid black" fox:border-radius="5pt" padding-left="2mm" padding-top="2mm" padding-bottom="2mm">
470
- <xsl:text>This document is circulated as received from the committee secretariat.</xsl:text>
471
- </fo:block>
472
- </fo:block-container>
473
- </xsl:if>
499
+ <fo:table-cell display-align="after" padding-bottom="3mm">
500
+ <fo:block-container height="22.5mm" display-align="center">
501
+
502
+ <xsl:variable name="iso-fast-track">false</xsl:variable>
503
+
504
+ <xsl:if test="normalize-space($iso-fast-track) = 'true'">
505
+ <xsl:attribute name="height">28mm</xsl:attribute>
506
+ </xsl:if>
507
+
508
+ <fo:block>
509
+ <xsl:if test="$stage-abbreviation = 'NWIP' or $stage-abbreviation = 'NP' or $stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD' or $stage-abbreviation = 'DIS' or $stage-abbreviation = 'FDIS'">
510
+ <xsl:variable name="text">
511
+ <xsl:for-each select="/iso:iso-standard/iso:preface/iso:note[@coverpage='true']/iso:p">
512
+ <fo:block>
513
+ <xsl:apply-templates/>
514
+ </fo:block>
515
+ </xsl:for-each>
516
+ </xsl:variable>
517
+ <xsl:if test="normalize-space($text) != ''">
518
+ <fo:block-container margin-left="1mm"> <!-- margin-bottom="7mm" margin-top="-15mm" -->
519
+ <fo:block font-size="9pt" border="0.5pt solid black" fox:border-radius="5pt" padding-left="2mm" padding-top="2mm" padding-bottom="2mm">
520
+ <!-- <xsl:text>This document is circulated as received from the committee secretariat.</xsl:text> -->
521
+ <xsl:copy-of select="xalan:nodeset($text)/node()"/>
522
+ </fo:block>
523
+ </fo:block-container>
524
+ </xsl:if>
525
+
526
+ <xsl:if test="normalize-space($iso-fast-track) = 'true'">
527
+ <fo:block-container space-before="2mm">
528
+ <fo:block background-color="rgb(77,77,77)" color="white" fox:border-radius="5pt" text-align="center" display-align="center" font-size="19pt" font-weight="bold">
529
+ <fo:block-container height="13.2mm">
530
+ <fo:block>
531
+ <xsl:text>FAST TRACK PROCEDURE</xsl:text>
532
+ </fo:block>
533
+ </fo:block-container>
534
+ </fo:block>
535
+ </fo:block-container>
536
+ </xsl:if>
537
+ </xsl:if>
538
+ </fo:block>
539
+ </fo:block-container>
474
540
  <fo:block>
475
541
  <xsl:call-template name="insertTripleLine"/>
476
- <fo:table table-layout="fixed" width="100%" margin-bottom="3mm">
542
+ <fo:table table-layout="fixed" width="100%"> <!-- margin-bottom="3mm" -->
477
543
  <fo:table-column column-width="50%"/>
478
544
  <fo:table-column column-width="50%"/>
479
545
  <fo:table-body>
480
546
  <fo:table-row height="34mm">
481
547
  <fo:table-cell display-align="center">
548
+
549
+ <xsl:if test="$copyrightAbbrIEEE != ''">
550
+ <xsl:attribute name="display-align">before</xsl:attribute>
551
+ </xsl:if>
552
+
482
553
  <fo:block text-align="left" margin-top="2mm">
483
- <xsl:variable name="docid" select="substring-before(/iso:iso-standard/iso:bibdata/iso:docidentifier, ' ')"/>
484
- <xsl:for-each select="xalan:tokenize($docid, '/')">
554
+
555
+ <xsl:if test="$copyrightAbbrIEEE != ''">
556
+ <xsl:attribute name="margin-top">0</xsl:attribute>
557
+ </xsl:if>
558
+
559
+ <!-- <xsl:variable name="docid" select="substring-before(/iso:iso-standard/iso:bibdata/iso:docidentifier, ' ')"/>
560
+ <xsl:for-each select="xalan:tokenize($docid, '/')"> -->
561
+ <xsl:variable name="content-height">
562
+ <xsl:choose>
563
+ <xsl:when test="$copyrightAbbrIEEE != ''">13.9</xsl:when>
564
+ <xsl:otherwise>19</xsl:otherwise>
565
+ </xsl:choose>
566
+ </xsl:variable>
567
+
568
+ <xsl:for-each select="/iso:iso-standard/iso:bibdata/iso:copyright/iso:owner/iso:organization/iso:abbreviation[. != 'IEEE']">
485
569
  <xsl:choose>
486
570
  <xsl:when test=". = 'ISO'">
487
- <fo:external-graphic src="{concat('data:image/png;base64,', normalize-space($Image-ISO-Logo))}" content-height="19mm" content-width="scale-to-fit" scaling="uniform" fox:alt-text="Image {@alt}"/>
571
+ <fo:external-graphic src="{concat('data:image/png;base64,', normalize-space($Image-ISO-Logo))}" content-height="{$content-height}mm" content-width="scale-to-fit" scaling="uniform" fox:alt-text="Image {@alt}"/>
488
572
  </xsl:when>
489
573
  <xsl:when test=". = 'IEC'">
490
- <fo:external-graphic src="{concat('data:image/png;base64,', normalize-space($Image-IEC-Logo))}" content-height="19mm" content-width="scale-to-fit" scaling="uniform" fox:alt-text="Image {@alt}"/>
574
+ <fo:external-graphic src="{concat('data:image/png;base64,', normalize-space($Image-IEC-Logo))}" content-height="{$content-height}mm" content-width="scale-to-fit" scaling="uniform" fox:alt-text="Image {@alt}"/>
491
575
  </xsl:when>
492
576
  <xsl:otherwise/>
493
577
  </xsl:choose>
@@ -495,6 +579,11 @@
495
579
  <fo:inline padding-right="1mm"> </fo:inline>
496
580
  </xsl:if>
497
581
  </xsl:for-each>
582
+ <xsl:if test="$copyrightAbbrIEEE != ''">
583
+ <fo:block>
584
+ <fo:external-graphic src="{concat('data:image/png;base64,', normalize-space($Image-IEEE-Logo))}" content-height="11mm" content-width="scale-to-fit" scaling="uniform" fox:alt-text="Image {@alt}"/>
585
+ </fo:block>
586
+ </xsl:if>
498
587
  </fo:block>
499
588
  </fo:table-cell>
500
589
  <fo:table-cell display-align="center">
@@ -508,7 +597,17 @@
508
597
  <fo:block>
509
598
  <xsl:value-of select="$ISOname"/>
510
599
  </fo:block>
511
- <fo:block space-before="28pt"><fo:inline font-size="9pt">©</fo:inline><xsl:value-of select="concat(' ', $copyrightAbbr, ' ', $copyrightYear)"/></fo:block>
600
+ <fo:block space-before="28pt">
601
+ <xsl:if test="$copyrightAbbrIEEE != ''">
602
+ <xsl:attribute name="space-before">14pt</xsl:attribute>
603
+ </xsl:if>
604
+ <fo:inline font-size="9pt">©</fo:inline><xsl:value-of select="concat(' ', $copyrightAbbr, ' ', $copyrightYear)"/>
605
+ <xsl:if test="$copyrightAbbrIEEE != ''">
606
+ <xsl:value-of select="$linebreak"/>
607
+ <fo:inline font-size="9pt">©</fo:inline>
608
+ <xsl:value-of select="concat(' ', $copyrightAbbrIEEE, ' ', $copyrightYear)"/>
609
+ </xsl:if>
610
+ </fo:block>
512
611
  </fo:block>
513
612
  </fo:table-cell>
514
613
  </fo:table-row>
@@ -713,7 +812,7 @@
713
812
  <xsl:call-template name="printEdition"/>
714
813
  </xsl:if>
715
814
  <xsl:choose>
716
- <xsl:when test="($stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD') and /iso:iso-standard/iso:bibdata/iso:version/iso:revision-date">
815
+ <xsl:when test="($stage-abbreviation = 'NWIP' or $stage-abbreviation = 'NP' or $stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD' or $stage-abbreviation = 'FDIS') and /iso:iso-standard/iso:bibdata/iso:version/iso:revision-date">
717
816
  <xsl:value-of select="$linebreak"/>
718
817
  <xsl:value-of select="/iso:iso-standard/iso:bibdata/iso:version/iso:revision-date"/>
719
818
  </xsl:when>
@@ -756,7 +855,7 @@
756
855
  <fo:table-cell><fo:block/></fo:table-cell>
757
856
  <fo:table-cell number-columns-spanned="2" font-size="10pt" line-height="1.2" display-align="center">
758
857
  <fo:block>
759
- <xsl:if test="$stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD'">
858
+ <xsl:if test="$stage-abbreviation = 'NWIP' or $stage-abbreviation = 'NP' or $stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD' or $stage-abbreviation = 'FDIS'">
760
859
  <fo:table table-layout="fixed" width="100%">
761
860
  <fo:table-column column-width="50%"/>
762
861
  <fo:table-column column-width="50%"/>
@@ -868,7 +967,7 @@
868
967
  </fo:block>
869
968
  </xsl:for-each>
870
969
 
871
- <xsl:if test="$stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD'">
970
+ <xsl:if test="$stage-abbreviation = 'NWIP' or $stage-abbreviation = 'NP' or $stage-abbreviation = 'PWI' or $stage-abbreviation = 'AWI' or $stage-abbreviation = 'WD' or $stage-abbreviation = 'CD' or $stage-abbreviation = 'FDIS'">
872
971
  <fo:block margin-top="10mm">
873
972
  <xsl:copy-of select="$ics"/>
874
973
  </fo:block>
@@ -920,7 +1019,13 @@
920
1019
  <fo:block><xsl:value-of select="$ISOname"/></fo:block>
921
1020
  <fo:block> </fo:block>
922
1021
  <fo:block> </fo:block>
923
- <fo:block><fo:inline font-size="9pt">©</fo:inline><xsl:value-of select="concat(' ', $copyrightAbbr, ' ', $copyrightYear)"/></fo:block>
1022
+ <fo:block><fo:inline font-size="9pt">©</fo:inline><xsl:value-of select="concat(' ', $copyrightAbbr, ' ', $copyrightYear)"/>
1023
+ <xsl:if test="$copyrightAbbrIEEE != ''">
1024
+ <xsl:value-of select="$linebreak"/>
1025
+ <fo:inline font-size="9pt">©</fo:inline>
1026
+ <xsl:value-of select="concat(' ', $copyrightAbbrIEEE, ' ', $copyrightYear)"/>
1027
+ </xsl:if>
1028
+ </fo:block>
924
1029
  </fo:block>
925
1030
  </fo:table-cell>
926
1031
  </fo:table-row>
@@ -1770,6 +1875,7 @@
1770
1875
 
1771
1876
  <xsl:template match="iso:p" name="paragraph">
1772
1877
  <xsl:param name="inline" select="'false'"/>
1878
+ <xsl:param name="split_keep-within-line"/>
1773
1879
  <xsl:variable name="previous-element" select="local-name(preceding-sibling::*[1])"/>
1774
1880
  <xsl:variable name="element-name">
1775
1881
  <xsl:choose>
@@ -1799,7 +1905,9 @@
1799
1905
  <xsl:attribute name="margin-bottom">0pt</xsl:attribute>
1800
1906
  <xsl:attribute name="line-height">0</xsl:attribute>
1801
1907
  </xsl:if>
1802
- <xsl:apply-templates/>
1908
+ <xsl:apply-templates>
1909
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
1910
+ </xsl:apply-templates>
1803
1911
  </xsl:element>
1804
1912
  <xsl:if test="$element-name = 'fo:inline' and not($inline = 'true') and not(local-name(..) = 'admonition')">
1805
1913
  <fo:block margin-bottom="12pt">
@@ -1924,6 +2032,9 @@
1924
2032
  <fo:table-body>
1925
2033
  <fo:table-row>
1926
2034
  <fo:table-cell display-align="center" padding-top="0mm" font-size="11pt" font-weight="{$font-weight}">
2035
+ <xsl:if test="contains($copyrightText, 'IEEE')">
2036
+ <xsl:attribute name="display-align">before</xsl:attribute>
2037
+ </xsl:if>
1927
2038
  <fo:block><fo:page-number/></fo:block>
1928
2039
  </fo:table-cell>
1929
2040
  <fo:table-cell display-align="center">
@@ -1978,6 +2089,9 @@
1978
2089
  </fo:block>
1979
2090
  </fo:table-cell>
1980
2091
  <fo:table-cell display-align="center" padding-top="0mm" font-size="11pt" font-weight="{$font-weight}">
2092
+ <xsl:if test="contains($copyrightText, 'IEEE')">
2093
+ <xsl:attribute name="display-align">before</xsl:attribute>
2094
+ </xsl:if>
1981
2095
  <fo:block text-align="right"><fo:page-number/></fo:block>
1982
2096
  </fo:table-cell>
1983
2097
  </fo:table-row>
@@ -2010,16 +2124,51 @@
2010
2124
  <xsl:text>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</xsl:text>
2011
2125
  </xsl:variable>
2012
2126
 
2127
+ <xsl:variable name="Image-IEEE-Logo">
2128
+ <xsl:text>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</xsl:text>
2129
+ </xsl:variable>
2130
+
2013
2131
  <xsl:variable name="Image-Attention">
2014
2132
  <xsl:text>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</xsl:text>
2015
2133
  </xsl:variable>
2016
2134
 
2017
- <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">
2135
+ <xsl:param name="svg_images"/><xsl:variable name="images" select="document($svg_images)"/><xsl:param name="basepath"/><xsl:param name="external_index"/><xsl:param name="syntax-highlight">false</xsl:param><xsl:param name="add_math_as_text">true</xsl:param><xsl:param name="table_if">false</xsl:param><xsl:param name="table_widths"/><xsl:variable name="table_widths_from_if" select="xalan:nodeset($table_widths)"/><xsl:variable name="table_widths_from_if_calculated_">
2136
+ <xsl:for-each select="$table_widths_from_if//table">
2137
+ <xsl:copy>
2138
+ <xsl:copy-of select="@*"/>
2139
+ <xsl:call-template name="calculate-column-widths-autolayout-algorithm"/>
2140
+ </xsl:copy>
2141
+ </xsl:for-each>
2142
+ </xsl:variable><xsl:variable name="table_widths_from_if_calculated" select="xalan:nodeset($table_widths_from_if_calculated_)"/><xsl:param name="table_if_debug">false</xsl:param><xsl:variable name="isGenerateTableIF_">
2143
+
2144
+ <xsl:value-of select="normalize-space($table_if) = 'true'"/>
2145
+
2146
+ </xsl:variable><xsl:variable name="isGenerateTableIF" select="normalize-space($isGenerateTableIF_)"/><xsl:variable name="lang">
2018
2147
  <xsl:call-template name="getLang"/>
2019
- </xsl:variable><xsl:variable name="pageWidth_">
2020
- 210
2148
+ </xsl:variable><xsl:variable name="papersize" select="java:toLowerCase(java:java.lang.String.new(normalize-space(//*[contains(local-name(), '-standard')]/*[local-name() = 'misc-container']/*[local-name() = 'presentation-metadata']/*[local-name() = 'papersize'])))"/><xsl:variable name="papersize_width_">
2149
+ <xsl:choose>
2150
+ <xsl:when test="$papersize = 'letter'">215.9</xsl:when>
2151
+ <xsl:when test="$papersize = 'a4'">210</xsl:when>
2152
+ </xsl:choose>
2153
+ </xsl:variable><xsl:variable name="papersize_width" select="normalize-space($papersize_width_)"/><xsl:variable name="papersize_height_">
2154
+ <xsl:choose>
2155
+ <xsl:when test="$papersize = 'letter'">279.4</xsl:when>
2156
+ <xsl:when test="$papersize = 'a4'">297</xsl:when>
2157
+ </xsl:choose>
2158
+ </xsl:variable><xsl:variable name="papersize_height" select="normalize-space($papersize_height_)"/><xsl:variable name="pageWidth_">
2159
+ <xsl:choose>
2160
+ <xsl:when test="$papersize_width != ''"><xsl:value-of select="$papersize_width"/></xsl:when>
2161
+ <xsl:otherwise>
2162
+ 210
2163
+ </xsl:otherwise>
2164
+ </xsl:choose>
2021
2165
  </xsl:variable><xsl:variable name="pageWidth" select="normalize-space($pageWidth_)"/><xsl:variable name="pageHeight_">
2022
- 297
2166
+ <xsl:choose>
2167
+ <xsl:when test="$papersize_height != ''"><xsl:value-of select="$papersize_height"/></xsl:when>
2168
+ <xsl:otherwise>
2169
+ 297
2170
+ </xsl:otherwise>
2171
+ </xsl:choose>
2023
2172
  </xsl:variable><xsl:variable name="pageHeight" select="normalize-space($pageHeight_)"/><xsl:variable name="marginLeftRight1_">
2024
2173
  25
2025
2174
  </xsl:variable><xsl:variable name="marginLeftRight1" select="normalize-space($marginLeftRight1_)"/><xsl:variable name="marginLeftRight2_">
@@ -2137,7 +2286,8 @@
2137
2286
  <xsl:value-of select="$titles/*[local-name() = $name][@lang = 'en']"/>
2138
2287
  </xsl:otherwise>
2139
2288
  </xsl:choose>
2140
- </xsl:template><xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable><xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable><xsl:variable name="en_chars" select="concat($lower,$upper,',.`1234567890-=~!@#$%^*()_+[]{}\|?/')"/><xsl:attribute-set name="root-style">
2289
+ </xsl:template><xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable><xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable><xsl:variable name="en_chars" select="concat($lower,$upper,',.`1234567890-=~!@#$%^*()_+[]{}\|?/')"/><xsl:variable name="font_noto_sans">Noto Sans, Noto Sans HK, Noto Sans JP, Noto Sans KR, Noto Sans SC, Noto Sans TC</xsl:variable><xsl:variable name="font_noto_sans_mono">Noto Sans Mono, Noto Sans Mono CJK HK, Noto Sans Mono CJK JP, Noto Sans Mono CJK KR, Noto Sans Mono CJK SC, Noto Sans Mono CJK TC</xsl:variable><xsl:variable name="font_noto_serif">Noto Serif, Noto Serif HK, Noto Serif JP, Noto Serif KR, Noto Serif SC, Noto Serif TC</xsl:variable><xsl:attribute-set name="root-style">
2290
+
2141
2291
 
2142
2292
 
2143
2293
 
@@ -2146,7 +2296,8 @@
2146
2296
 
2147
2297
 
2148
2298
 
2149
- <xsl:attribute name="font-family">Cambria, Times New Roman, Cambria Math, Source Han Sans</xsl:attribute>
2299
+ <xsl:attribute name="font-family">Cambria, Times New Roman, Cambria Math, <xsl:value-of select="$font_noto_serif"/></xsl:attribute>
2300
+ <xsl:attribute name="font-family-generic">Serif</xsl:attribute>
2150
2301
  <xsl:attribute name="font-size">11pt</xsl:attribute>
2151
2302
 
2152
2303
 
@@ -2168,17 +2319,60 @@
2168
2319
  </xsl:variable>
2169
2320
  <xsl:variable name="additional_fonts" select="normalize-space($additional_fonts_)"/>
2170
2321
 
2322
+ <xsl:variable name="font_family_generic" select="$root-style_/root-style/@font-family-generic"/>
2323
+
2171
2324
  <xsl:for-each select="$root-style_/root-style/@*">
2325
+
2172
2326
  <xsl:choose>
2173
- <xsl:when test="local-name() = 'font-family' and $additional_fonts != ''">
2327
+ <xsl:when test="local-name() = 'font-family-generic'"><!-- skip, it's using for determine 'sans' or 'serif' --></xsl:when>
2328
+ <xsl:when test="local-name() = 'font-family'">
2329
+
2330
+ <xsl:variable name="font_regional_prefix">
2331
+ <xsl:choose>
2332
+ <xsl:when test="$font_family_generic = 'Sans'">Noto Sans</xsl:when>
2333
+ <xsl:otherwise>Noto Serif</xsl:otherwise>
2334
+ </xsl:choose>
2335
+ </xsl:variable>
2336
+
2174
2337
  <xsl:attribute name="{local-name()}">
2175
- <xsl:value-of select="."/>, <xsl:value-of select="$additional_fonts"/>
2338
+
2339
+ <xsl:variable name="font_extended">
2340
+ <xsl:choose>
2341
+ <xsl:when test="$lang = 'zh'"><xsl:value-of select="$font_regional_prefix"/> SC</xsl:when>
2342
+ <xsl:when test="$lang = 'hk'"><xsl:value-of select="$font_regional_prefix"/> HK</xsl:when>
2343
+ <xsl:when test="$lang = 'jp'"><xsl:value-of select="$font_regional_prefix"/> JP</xsl:when>
2344
+ <xsl:when test="$lang = 'kr'"><xsl:value-of select="$font_regional_prefix"/> KR</xsl:when>
2345
+ <xsl:when test="$lang = 'sc'"><xsl:value-of select="$font_regional_prefix"/> SC</xsl:when>
2346
+ <xsl:when test="$lang = 'tc'"><xsl:value-of select="$font_regional_prefix"/> TC</xsl:when>
2347
+ </xsl:choose>
2348
+ </xsl:variable>
2349
+ <xsl:if test="normalize-space($font_extended) != ''">
2350
+ <xsl:value-of select="$font_regional_prefix"/><xsl:text>, </xsl:text>
2351
+ <xsl:value-of select="$font_extended"/><xsl:text>, </xsl:text>
2352
+ </xsl:if>
2353
+
2354
+ <xsl:value-of select="."/>
2355
+
2356
+ <xsl:if test="$additional_fonts != ''">
2357
+ <xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
2358
+ </xsl:if>
2176
2359
  </xsl:attribute>
2177
2360
  </xsl:when>
2178
2361
  <xsl:otherwise>
2179
2362
  <xsl:copy-of select="."/>
2180
2363
  </xsl:otherwise>
2181
2364
  </xsl:choose>
2365
+
2366
+ <!-- <xsl:choose>
2367
+ <xsl:when test="local-name() = 'font-family'">
2368
+ <xsl:attribute name="{local-name()}">
2369
+ <xsl:value-of select="."/>, <xsl:value-of select="$additional_fonts"/>
2370
+ </xsl:attribute>
2371
+ </xsl:when>
2372
+ <xsl:otherwise>
2373
+ <xsl:copy-of select="."/>
2374
+ </xsl:otherwise>
2375
+ </xsl:choose> -->
2182
2376
  </xsl:for-each>
2183
2377
  </xsl:template><xsl:attribute-set name="copyright-statement-style">
2184
2378
 
@@ -2255,7 +2449,8 @@
2255
2449
 
2256
2450
 
2257
2451
 
2258
- <xsl:attribute name="font-family">Courier New</xsl:attribute>
2452
+
2453
+ <xsl:attribute name="font-family">Courier New, <xsl:value-of select="$font_noto_sans_mono"/></xsl:attribute>
2259
2454
  <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
2260
2455
 
2261
2456
 
@@ -2298,6 +2493,7 @@
2298
2493
 
2299
2494
 
2300
2495
 
2496
+
2301
2497
  <xsl:attribute name="font-size">10pt</xsl:attribute>
2302
2498
  <xsl:attribute name="margin-top">8pt</xsl:attribute>
2303
2499
  <xsl:attribute name="margin-bottom">8pt</xsl:attribute>
@@ -2310,6 +2506,7 @@
2310
2506
 
2311
2507
 
2312
2508
 
2509
+
2313
2510
  <xsl:attribute name="font-size">10pt</xsl:attribute>
2314
2511
  <xsl:attribute name="margin-top">8pt</xsl:attribute>
2315
2512
  <xsl:attribute name="margin-bottom">8pt</xsl:attribute>
@@ -2350,6 +2547,7 @@
2350
2547
 
2351
2548
 
2352
2549
 
2550
+
2353
2551
 
2354
2552
 
2355
2553
 
@@ -2388,6 +2586,7 @@
2388
2586
 
2389
2587
  </xsl:attribute-set><xsl:variable name="table-border_">
2390
2588
 
2589
+
2391
2590
  </xsl:variable><xsl:variable name="table-border" select="normalize-space($table-border_)"/><xsl:attribute-set name="table-container-style">
2392
2591
  <xsl:attribute name="margin-left">0mm</xsl:attribute>
2393
2592
  <xsl:attribute name="margin-right">0mm</xsl:attribute>
@@ -2400,6 +2599,7 @@
2400
2599
 
2401
2600
 
2402
2601
 
2602
+
2403
2603
  <xsl:attribute name="font-size">10pt</xsl:attribute>
2404
2604
  <xsl:attribute name="margin-top">12pt</xsl:attribute>
2405
2605
  <xsl:attribute name="margin-bottom">8pt</xsl:attribute>
@@ -2430,6 +2630,7 @@
2430
2630
 
2431
2631
 
2432
2632
 
2633
+
2433
2634
  <xsl:attribute name="border">1.5pt solid black</xsl:attribute>
2434
2635
 
2435
2636
 
@@ -2449,6 +2650,7 @@
2449
2650
 
2450
2651
 
2451
2652
 
2653
+
2452
2654
 
2453
2655
 
2454
2656
  <xsl:attribute name="font-size">11pt</xsl:attribute>
@@ -2498,6 +2700,7 @@
2498
2700
  <xsl:attribute name="font-weight">bold</xsl:attribute>
2499
2701
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
2500
2702
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
2703
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
2501
2704
  <xsl:attribute name="display-align">center</xsl:attribute>
2502
2705
 
2503
2706
 
@@ -2518,6 +2721,7 @@
2518
2721
  <xsl:attribute name="display-align">center</xsl:attribute>
2519
2722
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
2520
2723
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
2724
+ <xsl:attribute name="padding-right">1mm</xsl:attribute>
2521
2725
 
2522
2726
 
2523
2727
 
@@ -2533,6 +2737,7 @@
2533
2737
 
2534
2738
 
2535
2739
 
2740
+
2536
2741
  </xsl:attribute-set><xsl:attribute-set name="table-footer-cell-style">
2537
2742
  <xsl:attribute name="border">solid black 1pt</xsl:attribute>
2538
2743
  <xsl:attribute name="padding-left">1mm</xsl:attribute>
@@ -2547,7 +2752,7 @@
2547
2752
  <xsl:attribute name="border-top">solid black 0pt</xsl:attribute>
2548
2753
 
2549
2754
 
2550
-
2755
+
2551
2756
 
2552
2757
 
2553
2758
 
@@ -2565,6 +2770,7 @@
2565
2770
 
2566
2771
 
2567
2772
 
2773
+
2568
2774
  </xsl:attribute-set><xsl:attribute-set name="table-fn-style">
2569
2775
  <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
2570
2776
 
@@ -2576,6 +2782,8 @@
2576
2782
 
2577
2783
 
2578
2784
 
2785
+
2786
+
2579
2787
  </xsl:attribute-set><xsl:attribute-set name="table-fn-number-style">
2580
2788
  <xsl:attribute name="font-size">80%</xsl:attribute>
2581
2789
  <xsl:attribute name="padding-right">5mm</xsl:attribute>
@@ -2593,6 +2801,7 @@
2593
2801
 
2594
2802
 
2595
2803
 
2804
+
2596
2805
  </xsl:attribute-set><xsl:attribute-set name="fn-container-body-style">
2597
2806
  <xsl:attribute name="text-indent">0</xsl:attribute>
2598
2807
  <xsl:attribute name="start-indent">0</xsl:attribute>
@@ -2612,7 +2821,8 @@
2612
2821
  </xsl:attribute-set><xsl:attribute-set name="dt-row-style">
2613
2822
 
2614
2823
 
2615
- </xsl:attribute-set><xsl:attribute-set name="dt-style">
2824
+ </xsl:attribute-set><xsl:attribute-set name="dt-cell-style">
2825
+ </xsl:attribute-set><xsl:attribute-set name="dt-block-style">
2616
2826
  <xsl:attribute name="margin-top">6pt</xsl:attribute>
2617
2827
 
2618
2828
 
@@ -2620,12 +2830,35 @@
2620
2830
 
2621
2831
 
2622
2832
 
2833
+
2623
2834
  <xsl:attribute name="margin-top">0pt</xsl:attribute>
2624
2835
 
2625
2836
 
2626
2837
 
2627
2838
 
2628
2839
 
2840
+ </xsl:attribute-set><xsl:attribute-set name="dl-name-style">
2841
+ <xsl:attribute name="keep-with-next">always</xsl:attribute>
2842
+ <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
2843
+
2844
+
2845
+
2846
+
2847
+
2848
+
2849
+
2850
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
2851
+
2852
+
2853
+
2854
+
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+ </xsl:attribute-set><xsl:attribute-set name="dd-cell-style">
2861
+ <xsl:attribute name="padding-left">2mm</xsl:attribute>
2629
2862
  </xsl:attribute-set><xsl:attribute-set name="appendix-style">
2630
2863
 
2631
2864
  <xsl:attribute name="font-size">12pt</xsl:attribute>
@@ -2665,6 +2898,7 @@
2665
2898
 
2666
2899
 
2667
2900
 
2901
+
2668
2902
 
2669
2903
 
2670
2904
  <xsl:attribute name="font-size">10pt</xsl:attribute>
@@ -2738,6 +2972,8 @@
2738
2972
 
2739
2973
 
2740
2974
 
2975
+ </xsl:attribute-set><xsl:attribute-set name="termnote-p-style">
2976
+
2741
2977
  </xsl:attribute-set><xsl:attribute-set name="quote-style">
2742
2978
  <xsl:attribute name="margin-left">12mm</xsl:attribute>
2743
2979
  <xsl:attribute name="margin-right">12mm</xsl:attribute>
@@ -2784,6 +3020,7 @@
2784
3020
  </xsl:attribute-set><xsl:attribute-set name="figure-name-style">
2785
3021
 
2786
3022
 
3023
+
2787
3024
 
2788
3025
 
2789
3026
 
@@ -2824,6 +3061,7 @@
2824
3061
 
2825
3062
 
2826
3063
 
3064
+
2827
3065
  <xsl:attribute name="text-align">left</xsl:attribute>
2828
3066
  <xsl:attribute name="margin-left">5mm</xsl:attribute>
2829
3067
 
@@ -2851,20 +3089,20 @@
2851
3089
  </xsl:attribute-set><xsl:attribute-set name="figure-pseudocode-p-style">
2852
3090
 
2853
3091
  </xsl:attribute-set><xsl:attribute-set name="image-graphic-style">
3092
+ <xsl:attribute name="width">100%</xsl:attribute>
3093
+ <xsl:attribute name="content-height">100%</xsl:attribute>
3094
+ <xsl:attribute name="scaling">uniform</xsl:attribute>
2854
3095
 
2855
3096
 
2856
- <xsl:attribute name="width">100%</xsl:attribute>
2857
3097
  <xsl:attribute name="content-height">scale-to-fit</xsl:attribute>
2858
- <xsl:attribute name="scaling">uniform</xsl:attribute>
2859
3098
 
2860
3099
 
2861
3100
 
2862
-
2863
-
3101
+
2864
3102
  </xsl:attribute-set><xsl:attribute-set name="tt-style">
2865
3103
 
2866
3104
 
2867
- <xsl:attribute name="font-family">Courier New</xsl:attribute>
3105
+ <xsl:attribute name="font-family">Courier New, <xsl:value-of select="$font_noto_sans_mono"/></xsl:attribute>
2868
3106
 
2869
3107
 
2870
3108
  </xsl:attribute-set><xsl:attribute-set name="sourcecode-name-style">
@@ -2937,6 +3175,7 @@
2937
3175
 
2938
3176
 
2939
3177
 
3178
+
2940
3179
  <xsl:attribute name="provisional-distance-between-starts">7mm</xsl:attribute>
2941
3180
  <xsl:attribute name="margin-top">8pt</xsl:attribute>
2942
3181
 
@@ -2950,6 +3189,25 @@
2950
3189
 
2951
3190
 
2952
3191
 
3192
+ </xsl:attribute-set><xsl:attribute-set name="list-name-style">
3193
+ <xsl:attribute name="keep-with-next">always</xsl:attribute>
3194
+
3195
+
3196
+
3197
+
3198
+
3199
+
3200
+ <xsl:attribute name="margin-top">8pt</xsl:attribute>
3201
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
3202
+
3203
+
3204
+
3205
+
3206
+
3207
+
3208
+
3209
+
3210
+
2953
3211
  </xsl:attribute-set><xsl:attribute-set name="list-item-style">
2954
3212
 
2955
3213
 
@@ -2986,6 +3244,7 @@
2986
3244
 
2987
3245
 
2988
3246
 
3247
+
2989
3248
  <xsl:attribute name="font-size">80%</xsl:attribute>
2990
3249
  <xsl:attribute name="vertical-align">super</xsl:attribute>
2991
3250
 
@@ -3010,6 +3269,7 @@
3010
3269
 
3011
3270
 
3012
3271
 
3272
+
3013
3273
  <xsl:attribute name="font-size">10pt</xsl:attribute>
3014
3274
  <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
3015
3275
 
@@ -3033,6 +3293,7 @@
3033
3293
 
3034
3294
 
3035
3295
 
3296
+
3036
3297
  <xsl:attribute name="padding-right">3mm</xsl:attribute>
3037
3298
 
3038
3299
 
@@ -3052,6 +3313,7 @@
3052
3313
 
3053
3314
 
3054
3315
 
3316
+
3055
3317
  <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
3056
3318
  <xsl:attribute name="font-weight">bold</xsl:attribute>
3057
3319
 
@@ -3063,6 +3325,9 @@
3063
3325
 
3064
3326
 
3065
3327
  </xsl:attribute-set><xsl:attribute-set name="admonition-container-style">
3328
+ <xsl:attribute name="margin-left">0mm</xsl:attribute>
3329
+ <xsl:attribute name="margin-right">0mm</xsl:attribute>
3330
+
3066
3331
 
3067
3332
 
3068
3333
 
@@ -3100,6 +3365,7 @@
3100
3365
 
3101
3366
 
3102
3367
 
3368
+
3103
3369
  </xsl:attribute-set><xsl:attribute-set name="bibitem-normative-style">
3104
3370
 
3105
3371
 
@@ -3130,6 +3396,7 @@
3130
3396
 
3131
3397
 
3132
3398
 
3399
+
3133
3400
  <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
3134
3401
 
3135
3402
 
@@ -3151,6 +3418,7 @@
3151
3418
 
3152
3419
 
3153
3420
 
3421
+
3154
3422
  <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
3155
3423
 
3156
3424
 
@@ -3176,6 +3444,7 @@
3176
3444
 
3177
3445
 
3178
3446
 
3447
+
3179
3448
  <xsl:attribute name="font-size">8pt</xsl:attribute>
3180
3449
  <xsl:attribute name="baseline-shift">30%</xsl:attribute>
3181
3450
 
@@ -3197,6 +3466,7 @@
3197
3466
 
3198
3467
 
3199
3468
 
3469
+
3200
3470
  <xsl:attribute name="alignment-baseline">hanging</xsl:attribute>
3201
3471
  <xsl:attribute name="padding-right">3mm</xsl:attribute>
3202
3472
 
@@ -3218,6 +3488,7 @@
3218
3488
 
3219
3489
 
3220
3490
 
3491
+
3221
3492
  <xsl:attribute name="margin-bottom">4pt</xsl:attribute>
3222
3493
 
3223
3494
 
@@ -3344,13 +3615,13 @@
3344
3615
 
3345
3616
  </xsl:attribute-set><xsl:variable name="border-block-added">2.5pt solid rgb(0, 176, 80)</xsl:variable><xsl:variable name="border-block-deleted">2.5pt solid rgb(255, 0, 0)</xsl:variable><xsl:variable name="ace_tag">ace-tag_</xsl:variable><xsl:template name="processPrefaceSectionsDefault_Contents">
3346
3617
  <xsl:variable name="nodes_preface_">
3347
- <xsl:for-each select="/*/*[local-name()='preface']/*">
3618
+ <xsl:for-each select="/*/*[local-name()='preface']/*[not(local-name() = 'note' or local-name() = 'admonition')]">
3348
3619
  <node id="{@id}"/>
3349
3620
  </xsl:for-each>
3350
3621
  </xsl:variable>
3351
3622
  <xsl:variable name="nodes_preface" select="xalan:nodeset($nodes_preface_)"/>
3352
3623
 
3353
- <xsl:for-each select="/*/*[local-name()='preface']/*">
3624
+ <xsl:for-each select="/*/*[local-name()='preface']/*[not(local-name() = 'note' or local-name() = 'admonition')]">
3354
3625
  <xsl:sort select="@displayorder" data-type="number"/>
3355
3626
 
3356
3627
  <!-- process Section's title -->
@@ -3416,7 +3687,7 @@
3416
3687
  </xsl:for-each>
3417
3688
  </figures>
3418
3689
  </xsl:template><xsl:template name="processPrefaceSectionsDefault">
3419
- <xsl:for-each select="/*/*[local-name()='preface']/*">
3690
+ <xsl:for-each select="/*/*[local-name()='preface']/*[not(local-name() = 'note' or local-name() = 'admonition')]">
3420
3691
  <xsl:sort select="@displayorder" data-type="number"/>
3421
3692
  <xsl:apply-templates select="."/>
3422
3693
  </xsl:for-each>
@@ -3462,7 +3733,38 @@
3462
3733
  </xsl:template><xsl:template match="*[local-name()='br']">
3463
3734
  <xsl:value-of select="$linebreak"/>
3464
3735
  </xsl:template><xsl:template match="*[local-name() = 'keep-together_within-line']">
3465
- <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3736
+ <xsl:param name="split_keep-within-line"/>
3737
+
3738
+ <!-- <fo:inline>split_keep-within-line='<xsl:value-of select="$split_keep-within-line"/>'</fo:inline> -->
3739
+ <xsl:choose>
3740
+
3741
+ <xsl:when test="normalize-space($split_keep-within-line) = 'true'">
3742
+ <xsl:variable name="sep">_</xsl:variable>
3743
+ <xsl:variable name="items">
3744
+ <xsl:call-template name="split">
3745
+ <xsl:with-param name="pText" select="."/>
3746
+ <xsl:with-param name="sep" select="$sep"/>
3747
+ <xsl:with-param name="normalize-space">false</xsl:with-param>
3748
+ <xsl:with-param name="keep_sep">true</xsl:with-param>
3749
+ </xsl:call-template>
3750
+ </xsl:variable>
3751
+ <xsl:for-each select="xalan:nodeset($items)/item">
3752
+ <xsl:choose>
3753
+ <xsl:when test=". = $sep">
3754
+ <xsl:value-of select="$sep"/><xsl:value-of select="$zero_width_space"/>
3755
+ </xsl:when>
3756
+ <xsl:otherwise>
3757
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3758
+ </xsl:otherwise>
3759
+ </xsl:choose>
3760
+ </xsl:for-each>
3761
+ </xsl:when>
3762
+
3763
+ <xsl:otherwise>
3764
+ <fo:inline keep-together.within-line="always"><xsl:apply-templates/></fo:inline>
3765
+ </xsl:otherwise>
3766
+
3767
+ </xsl:choose>
3466
3768
  </xsl:template><xsl:template match="*[local-name()='copyright-statement']">
3467
3769
  <fo:block xsl:use-attribute-sets="copyright-statement-style">
3468
3770
  <xsl:apply-templates/>
@@ -3569,9 +3871,14 @@
3569
3871
 
3570
3872
  <xsl:variable name="table">
3571
3873
 
3572
- <xsl:variable name="simple-table">
3573
- <xsl:call-template name="getSimpleTable"/>
3874
+ <xsl:variable name="simple-table">
3875
+ <xsl:call-template name="getSimpleTable">
3876
+ <xsl:with-param name="id" select="@id"/>
3877
+ </xsl:call-template>
3574
3878
  </xsl:variable>
3879
+ <!-- <xsl:variable name="simple-table" select="xalan:nodeset($simple-table_)"/> -->
3880
+
3881
+ <!-- simple-table=<xsl:copy-of select="$simple-table"/> -->
3575
3882
 
3576
3883
 
3577
3884
  <!-- Display table's name before table as standalone block -->
@@ -3590,7 +3897,23 @@
3590
3897
  </xsl:call-template>
3591
3898
  </xsl:if>
3592
3899
  </xsl:variable>
3593
- <!-- DEBUG colwidths=<xsl:copy-of select="$colwidths"/> -->
3900
+ <!-- <xsl:variable name="colwidths" select="xalan:nodeset($colwidths_)"/> -->
3901
+
3902
+ <!-- DEBUG -->
3903
+ <xsl:if test="$table_if_debug = 'true'">
3904
+ <fo:block font-size="60%">
3905
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
3906
+ </fo:block>
3907
+ </xsl:if>
3908
+
3909
+
3910
+ <!-- <xsl:copy-of select="$colwidths"/> -->
3911
+
3912
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
3913
+ DEBUG
3914
+ colwidths=<xsl:copy-of select="$colwidths"/>
3915
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
3916
+
3594
3917
 
3595
3918
 
3596
3919
  <xsl:variable name="margin-side">
@@ -3612,6 +3935,8 @@
3612
3935
 
3613
3936
 
3614
3937
 
3938
+
3939
+
3615
3940
 
3616
3941
 
3617
3942
 
@@ -3642,6 +3967,8 @@
3642
3967
 
3643
3968
 
3644
3969
 
3970
+
3971
+
3645
3972
  <xsl:if test="*[local-name()='thead']">
3646
3973
  <xsl:attribute name="border-top">1pt solid black</xsl:attribute>
3647
3974
  </xsl:if>
@@ -3659,9 +3986,17 @@
3659
3986
  </xsl:element>
3660
3987
  </xsl:variable>
3661
3988
 
3989
+ <xsl:if test="$isGenerateTableIF = 'true'">
3990
+ <!-- to determine start of table -->
3991
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
3992
+ </xsl:if>
3662
3993
 
3663
3994
  <fo:table id="{@id}">
3664
3995
 
3996
+ <xsl:if test="$isGenerateTableIF = 'true'">
3997
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
3998
+ </xsl:if>
3999
+
3665
4000
  <xsl:for-each select="xalan:nodeset($table_attributes)/table_attributes/@*">
3666
4001
  <xsl:attribute name="{local-name()}">
3667
4002
  <xsl:value-of select="."/>
@@ -3675,24 +4010,47 @@
3675
4010
 
3676
4011
 
3677
4012
  <xsl:choose>
3678
- <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
3679
- <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
3680
- <fo:table-column column-width="{@width}"/>
3681
- </xsl:for-each>
4013
+ <xsl:when test="$isGenerateTableIF = 'true'">
4014
+ <!-- generate IF for table widths -->
4015
+ <!-- example:
4016
+ <tr>
4017
+ <td valign="top" align="left" id="tab-symdu_1_1">
4018
+ <p>Symbol</p>
4019
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
4020
+ </td>
4021
+ <td valign="top" align="left" id="tab-symdu_1_2">
4022
+ <p>Description</p>
4023
+ <word id="tab-symdu_1_2_word_1">Description</word>
4024
+ </td>
4025
+ </tr>
4026
+ -->
4027
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if"/>
4028
+
3682
4029
  </xsl:when>
3683
4030
  <xsl:otherwise>
3684
- <xsl:call-template name="insertTableColumnWidth">
3685
- <xsl:with-param name="colwidths" select="$colwidths"/>
3686
- </xsl:call-template>
3687
- </xsl:otherwise>
3688
- </xsl:choose>
3689
4031
 
3690
- <xsl:choose>
3691
- <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
3692
- <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
3693
- </xsl:when>
3694
- <xsl:otherwise>
3695
- <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 -->
4032
+ <xsl:choose>
4033
+ <xsl:when test="*[local-name()='colgroup']/*[local-name()='col']">
4034
+ <xsl:for-each select="*[local-name()='colgroup']/*[local-name()='col']">
4035
+ <fo:table-column column-width="{@width}"/>
4036
+ </xsl:for-each>
4037
+ </xsl:when>
4038
+ <xsl:otherwise>
4039
+ <xsl:call-template name="insertTableColumnWidth">
4040
+ <xsl:with-param name="colwidths" select="$colwidths"/>
4041
+ </xsl:call-template>
4042
+ </xsl:otherwise>
4043
+ </xsl:choose>
4044
+
4045
+ <xsl:choose>
4046
+ <xsl:when test="not(*[local-name()='tbody']) and *[local-name()='thead']">
4047
+ <xsl:apply-templates select="*[local-name()='thead']" mode="process_tbody"/>
4048
+ </xsl:when>
4049
+ <xsl:otherwise>
4050
+ <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 -->
4051
+ </xsl:otherwise>
4052
+ </xsl:choose>
4053
+
3696
4054
  </xsl:otherwise>
3697
4055
  </xsl:choose>
3698
4056
 
@@ -3770,38 +4128,52 @@
3770
4128
  </xsl:template><xsl:template match="*[local-name()='table']/*[local-name() = 'name']">
3771
4129
  <xsl:param name="continued"/>
3772
4130
  <xsl:if test="normalize-space() != ''">
3773
- <fo:block xsl:use-attribute-sets="table-name-style">
3774
-
3775
-
3776
-
3777
-
4131
+
4132
+
3778
4133
 
3779
- <xsl:choose>
3780
- <xsl:when test="$continued = 'true'">
4134
+ <fo:block xsl:use-attribute-sets="table-name-style">
4135
+
3781
4136
 
3782
- <xsl:apply-templates/>
3783
4137
 
3784
- </xsl:when>
3785
- <xsl:otherwise>
3786
- <xsl:apply-templates/>
3787
- </xsl:otherwise>
3788
- </xsl:choose>
3789
-
3790
-
3791
- </fo:block>
3792
- </xsl:if>
3793
- </xsl:template><xsl:template name="calculate-columns-numbers">
3794
- <xsl:param name="table-row"/>
4138
+
4139
+
4140
+ <xsl:choose>
4141
+ <xsl:when test="$continued = 'true'">
4142
+
4143
+ <xsl:apply-templates/>
4144
+
4145
+ </xsl:when>
4146
+ <xsl:otherwise>
4147
+ <xsl:apply-templates/>
4148
+ </xsl:otherwise>
4149
+ </xsl:choose>
4150
+
4151
+
4152
+ </fo:block>
4153
+
4154
+
4155
+
4156
+ </xsl:if>
4157
+ </xsl:template><xsl:template name="calculate-columns-numbers">
4158
+ <xsl:param name="table-row"/>
3795
4159
  <xsl:variable name="columns-count" select="count($table-row/*)"/>
3796
4160
  <xsl:variable name="sum-colspans" select="sum($table-row/*/@colspan)"/>
3797
4161
  <xsl:variable name="columns-with-colspan" select="count($table-row/*[@colspan])"/>
3798
4162
  <xsl:value-of select="$columns-count + $sum-colspans - $columns-with-colspan"/>
3799
4163
  </xsl:template><xsl:template name="calculate-column-widths">
4164
+ <xsl:param name="table"/>
4165
+ <xsl:param name="cols-count"/>
4166
+
4167
+ <xsl:call-template name="get-calculated-column-widths-autolayout-algorithm"/>
4168
+
4169
+ </xsl:template><xsl:template name="calculate-column-widths-proportional">
3800
4170
  <xsl:param name="table"/>
3801
4171
  <xsl:param name="cols-count"/>
3802
4172
  <xsl:param name="curr-col" select="1"/>
3803
4173
  <xsl:param name="width" select="0"/>
3804
4174
 
4175
+ <!-- table=<xsl:copy-of select="$table"/> -->
4176
+
3805
4177
  <xsl:if test="$curr-col &lt;= $cols-count">
3806
4178
  <xsl:variable name="widths">
3807
4179
  <xsl:choose>
@@ -3839,10 +4211,15 @@
3839
4211
  </xsl:for-each>
3840
4212
  </xsl:when>
3841
4213
  <xsl:otherwise>
3842
- <xsl:for-each select="xalan:nodeset($table)/*/tr">
4214
+ <!-- <curr_col><xsl:value-of select="$curr-col"/></curr_col> -->
4215
+
4216
+ <!-- <table><xsl:copy-of select="$table"/></table>
4217
+ -->
4218
+ <xsl:for-each select="xalan:nodeset($table)/*/*[local-name()='tr']">
3843
4219
  <xsl:variable name="td_text">
3844
4220
  <xsl:apply-templates select="td[$curr-col]" mode="td_text"/>
3845
4221
  </xsl:variable>
4222
+ <!-- <td_text><xsl:value-of select="$td_text"/></td_text> -->
3846
4223
  <xsl:variable name="words">
3847
4224
  <xsl:variable name="string_with_added_zerospaces">
3848
4225
  <xsl:call-template name="add-zero-spaces-java">
@@ -3857,6 +4234,7 @@
3857
4234
  <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
3858
4235
  </xsl:call-template>
3859
4236
  </xsl:variable>
4237
+ <!-- words=<xsl:copy-of select="$words"/> -->
3860
4238
  <xsl:variable name="max_length">
3861
4239
  <xsl:call-template name="max_length">
3862
4240
  <xsl:with-param name="words" select="xalan:nodeset($words)"/>
@@ -3881,6 +4259,8 @@
3881
4259
  </xsl:choose>
3882
4260
  </xsl:variable>
3883
4261
 
4262
+ <!-- widths=<xsl:copy-of select="$widths"/> -->
4263
+
3884
4264
  <column>
3885
4265
  <xsl:for-each select="xalan:nodeset($widths)//width">
3886
4266
  <xsl:sort select="." data-type="number" order="descending"/>
@@ -3889,33 +4269,271 @@
3889
4269
  </xsl:if>
3890
4270
  </xsl:for-each>
3891
4271
  </column>
3892
- <xsl:call-template name="calculate-column-widths">
4272
+ <xsl:call-template name="calculate-column-widths-proportional">
3893
4273
  <xsl:with-param name="cols-count" select="$cols-count"/>
3894
4274
  <xsl:with-param name="curr-col" select="$curr-col +1"/>
3895
4275
  <xsl:with-param name="table" select="$table"/>
3896
4276
  </xsl:call-template>
3897
4277
  </xsl:if>
3898
- </xsl:template><xsl:template match="*[@keep-together.within-line]/text()" priority="2" mode="td_text">
4278
+ </xsl:template><xsl:template match="*[@keep-together.within-line or local-name() = 'keep-together_within-line']/text()" priority="2" mode="td_text">
3899
4279
  <!-- <xsl:message>DEBUG t1=<xsl:value-of select="."/></xsl:message>
3900
4280
  <xsl:message>DEBUG t2=<xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/></xsl:message> -->
3901
4281
  <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),'.','X')"/>
4282
+
4283
+ <!-- if all capitals english letters or digits -->
4284
+ <xsl:if test="normalize-space(translate(., concat($upper,'0123456789'), '')) = ''">
4285
+ <xsl:call-template name="repeat">
4286
+ <xsl:with-param name="char" select="'X'"/>
4287
+ <xsl:with-param name="count" select="string-length(normalize-space(.)) * 0.5"/>
4288
+ </xsl:call-template>
4289
+ </xsl:if>
3902
4290
  </xsl:template><xsl:template match="text()" mode="td_text">
3903
4291
  <xsl:value-of select="translate(., $zero_width_space, ' ')"/><xsl:text> </xsl:text>
3904
4292
  </xsl:template><xsl:template match="*[local-name()='termsource']" mode="td_text">
3905
4293
  <xsl:value-of select="*[local-name()='origin']/@citeas"/>
3906
4294
  </xsl:template><xsl:template match="*[local-name()='link']" mode="td_text">
3907
4295
  <xsl:value-of select="@target"/>
3908
- </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text">
3909
- <xsl:variable name="mathml">
3910
- <xsl:for-each select="*">
3911
- <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
3912
- <xsl:copy-of select="."/>
3913
- </xsl:if>
4296
+ </xsl:template><xsl:template match="*[local-name()='math']" mode="td_text" name="math_length">
4297
+ <xsl:if test="$isGenerateTableIF = 'false'">
4298
+ <xsl:variable name="mathml_">
4299
+ <xsl:for-each select="*">
4300
+ <xsl:if test="local-name() != 'unit' and local-name() != 'prefix' and local-name() != 'dimension' and local-name() != 'quantity'">
4301
+ <xsl:copy-of select="."/>
4302
+ </xsl:if>
4303
+ </xsl:for-each>
4304
+ </xsl:variable>
4305
+ <xsl:variable name="mathml" select="xalan:nodeset($mathml_)"/>
4306
+
4307
+ <xsl:variable name="math_text">
4308
+ <xsl:value-of select="normalize-space($mathml)"/>
4309
+ <xsl:for-each select="$mathml//@open"><xsl:value-of select="."/></xsl:for-each>
4310
+ <xsl:for-each select="$mathml//@close"><xsl:value-of select="."/></xsl:for-each>
4311
+ </xsl:variable>
4312
+ <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
4313
+ </xsl:if>
4314
+ </xsl:template><xsl:template name="calculate-column-widths-autolayout-algorithm">
4315
+ <xsl:param name="parent_table_page-width"/> <!-- for nested tables, in re-calculate step -->
4316
+
4317
+ <!-- via intermediate format -->
4318
+
4319
+ <!-- The algorithm uses two passes through the table data and scales linearly with the size of the table -->
4320
+
4321
+ <!-- In the first pass, line wrapping is disabled, and the user agent keeps track of the minimum and maximum width of each cell. -->
4322
+
4323
+ <!-- Since line wrap has been disabled, paragraphs are treated as long lines unless broken by BR elements. -->
4324
+
4325
+ <!-- get current table id -->
4326
+ <xsl:variable name="table_id" select="@id"/>
4327
+ <!-- find table by id in the file 'table_widths' -->
4328
+ <!-- <xsl:variable name="table-if_" select="$table_widths_from_if//table[@id = $table_id]"/>
4329
+ <xsl:variable name="table-if" select="xalan:nodeset($table-if_)"/> -->
4330
+
4331
+ <!-- table='<xsl:copy-of select="$table"/>' -->
4332
+ <!-- table_id='<xsl:value-of select="$table_id"/>\ -->
4333
+ <!-- table-if='<xsl:copy-of select="$table-if"/>' -->
4334
+ <!-- table_widths_from_if='<xsl:copy-of select="$table_widths_from_if"/>' -->
4335
+
4336
+ <xsl:variable name="table_with_cell_widths_">
4337
+ <xsl:apply-templates select="." mode="determine_cell_widths-if"/> <!-- read column's width from IF -->
4338
+ </xsl:variable>
4339
+ <xsl:variable name="table_with_cell_widths" select="xalan:nodeset($table_with_cell_widths_)"/>
4340
+
4341
+ <!-- <xsl:if test="$table_if_debug = 'true'">
4342
+ <xsl:copy-of select="$table_with_cell_widths"/>
4343
+ </xsl:if> -->
4344
+
4345
+
4346
+ <!-- The minimum and maximum cell widths are then used to determine the corresponding minimum and maximum widths for the columns. -->
4347
+
4348
+ <xsl:variable name="column_widths_">
4349
+ <!-- iteration of columns -->
4350
+ <xsl:for-each select="$table_with_cell_widths//tr[1]/td">
4351
+ <xsl:variable name="pos" select="position()"/>
4352
+ <column>
4353
+ <xsl:attribute name="width_max">
4354
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_max">
4355
+ <xsl:sort select="." data-type="number" order="descending"/>
4356
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4357
+ </xsl:for-each>
4358
+ </xsl:attribute>
4359
+ <xsl:attribute name="width_min">
4360
+ <xsl:for-each select="ancestor::tbody//tr/td[$pos]/@width_min">
4361
+ <xsl:sort select="." data-type="number" order="descending"/>
4362
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4363
+ </xsl:for-each>
4364
+ </xsl:attribute>
4365
+ </column>
3914
4366
  </xsl:for-each>
3915
4367
  </xsl:variable>
4368
+ <xsl:variable name="column_widths" select="xalan:nodeset($column_widths_)"/>
4369
+
4370
+ <!-- <column_widths>
4371
+ <xsl:copy-of select="$column_widths"/>
4372
+ </column_widths> -->
4373
+
4374
+ <!-- These in turn, are used to find the minimum and maximum width for the table. -->
4375
+ <xsl:variable name="table_widths_">
4376
+ <table>
4377
+ <xsl:attribute name="width_max">
4378
+ <xsl:value-of select="sum($column_widths/column/@width_max)"/>
4379
+ </xsl:attribute>
4380
+ <xsl:attribute name="width_min">
4381
+ <xsl:value-of select="sum($column_widths/column/@width_min)"/>
4382
+ </xsl:attribute>
4383
+ </table>
4384
+ </xsl:variable>
4385
+ <xsl:variable name="table_widths" select="xalan:nodeset($table_widths_)"/>
4386
+
4387
+ <xsl:variable name="page_width">
4388
+ <xsl:choose>
4389
+ <xsl:when test="$parent_table_page-width != ''">
4390
+ <xsl:value-of select="$parent_table_page-width"/>
4391
+ </xsl:when>
4392
+ <xsl:otherwise>
4393
+ <xsl:value-of select="@page-width"/>
4394
+ </xsl:otherwise>
4395
+ </xsl:choose>
4396
+ </xsl:variable>
4397
+
4398
+ <xsl:if test="$table_if_debug = 'true'">
4399
+ <table_width>
4400
+ <xsl:copy-of select="$table_widths"/>
4401
+ </table_width>
4402
+ <debug>$page_width=<xsl:value-of select="$page_width"/></debug>
4403
+ </xsl:if>
4404
+
4405
+
4406
+ <!-- There are three cases: -->
4407
+ <xsl:choose>
4408
+ <!-- 1. The minimum table width is equal to or wider than the available space -->
4409
+ <xsl:when test="$table_widths/table/@width_min &gt;= $page_width and 1 = 2"> <!-- this condition isn't working see case 3 below -->
4410
+ <!-- call old algorithm -->
4411
+ <case1/>
4412
+ <!-- <xsl:variable name="cols-count" select="count(xalan:nodeset($table)/*/tr[1]/td)"/>
4413
+ <xsl:call-template name="calculate-column-widths-proportional">
4414
+ <xsl:with-param name="cols-count" select="$cols-count"/>
4415
+ <xsl:with-param name="table" select="$table"/>
4416
+ </xsl:call-template> -->
4417
+ </xsl:when>
4418
+ <!-- 2. The maximum table width fits within the available space. In this case, set the columns to their maximum widths. -->
4419
+ <xsl:when test="$table_widths/table/@width_max &lt;= $page_width">
4420
+ <case2/>
4421
+ <autolayout/>
4422
+ <xsl:for-each select="$column_widths/column/@width_max">
4423
+ <column divider="100"><xsl:value-of select="."/></column>
4424
+ </xsl:for-each>
4425
+ </xsl:when>
4426
+ <!-- 3. The maximum width of the table is greater than the available space, but the minimum table width is smaller.
4427
+ In this case, find the difference between the available space and the minimum table width, lets call it W.
4428
+ Lets also call D the difference between maximum and minimum width of the table.
4429
+ For each column, let d be the difference between maximum and minimum width of that column.
4430
+ Now set the column's width to the minimum width plus d times W over D.
4431
+ This makes columns with large differences between minimum and maximum widths wider than columns with smaller differences. -->
4432
+ <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)">
4433
+ <!-- difference between the available space and the minimum table width -->
4434
+ <xsl:variable name="W" select="$page_width - $table_widths/table/@width_min"/>
4435
+ <W><xsl:value-of select="$W"/></W>
4436
+ <!-- difference between maximum and minimum width of the table -->
4437
+ <xsl:variable name="D" select="$table_widths/table/@width_max - $table_widths/table/@width_min"/>
4438
+ <D><xsl:value-of select="$D"/></D>
4439
+ <case3/>
4440
+ <autolayout/>
4441
+ <xsl:if test="$table_widths/table/@width_min &gt;= $page_width">
4442
+ <split_keep-within-line>true</split_keep-within-line>
4443
+ </xsl:if>
4444
+ <xsl:for-each select="$column_widths/column">
4445
+ <!-- difference between maximum and minimum width of that column. -->
4446
+ <xsl:variable name="d" select="@width_max - @width_min"/>
4447
+ <d><xsl:value-of select="$d"/></d>
4448
+ <width_min><xsl:value-of select="@width_min"/></width_min>
4449
+ <e><xsl:value-of select="$d * $W div $D"/></e>
4450
+ <!-- set the column's width to the minimum width plus d times W over D. -->
4451
+ <column divider="100">
4452
+ <xsl:value-of select="round(@width_min + $d * $W div $D)"/> <!-- * 10 -->
4453
+ </column>
4454
+ </xsl:for-each>
4455
+
4456
+ </xsl:when>
4457
+ <xsl:otherwise><unknown_case/></xsl:otherwise>
4458
+ </xsl:choose>
4459
+
4460
+ </xsl:template><xsl:template name="get-calculated-column-widths-autolayout-algorithm">
4461
+
4462
+ <!-- if nested 'dl' or 'table' -->
4463
+ <xsl:variable name="parent_table_id" select="normalize-space(ancestor::*[local-name() = 'table' or local-name() = 'dl'][1]/@id)"/>
4464
+ <parent_table_id><xsl:value-of select="$parent_table_id"/></parent_table_id>
4465
+
4466
+ <parent_element><xsl:value-of select="local-name(..)"/></parent_element>
4467
+
4468
+ <xsl:variable name="parent_table_page-width_">
4469
+ <xsl:if test="$parent_table_id != ''">
4470
+ <!-- determine column number in the parent table -->
4471
+ <xsl:variable name="parent_table_column_number">
4472
+ <xsl:choose>
4473
+ <xsl:when test="parent::*[local-name() = 'dd']">2</xsl:when>
4474
+ <xsl:otherwise> <!-- parent is table -->
4475
+ <xsl:value-of select="count(ancestor::*[local-name() = 'td'][1]/preceding-sibling::*[local-name() = 'td']) + 1"/>
4476
+ </xsl:otherwise>
4477
+ </xsl:choose>
4478
+ </xsl:variable>
4479
+ <!-- find table by id in the file 'table_widths' and get all Nth `<column>...</column> -->
4480
+ <xsl:value-of select="$table_widths_from_if_calculated//table[@id = $parent_table_id]/column[number($parent_table_column_number)]"/>
4481
+ </xsl:if>
4482
+ </xsl:variable>
4483
+ <xsl:variable name="parent_table_page-width" select="normalize-space($parent_table_page-width_)"/>
3916
4484
 
3917
- <xsl:variable name="math_text" select="normalize-space(xalan:nodeset($mathml))"/>
3918
- <xsl:value-of select="translate($math_text, ' ', '#')"/><!-- mathml images as one 'word' without spaces -->
4485
+ <!-- get current table id -->
4486
+ <xsl:variable name="table_id" select="@id"/>
4487
+
4488
+ <xsl:choose>
4489
+ <xsl:when test="$parent_table_id = '' or $parent_table_page-width = ''">
4490
+ <!-- find table by id in the file 'table_widths' and get all `<column>...</column> -->
4491
+ <xsl:copy-of select="$table_widths_from_if_calculated//table[@id = $table_id]/node()"/>
4492
+ </xsl:when>
4493
+ <xsl:otherwise>
4494
+ <!-- recalculate columns width based on parent table width -->
4495
+ <xsl:for-each select="$table_widths_from_if//table[@id = $table_id]">
4496
+ <xsl:call-template name="calculate-column-widths-autolayout-algorithm">
4497
+ <xsl:with-param name="parent_table_page-width" select="$parent_table_page-width"/> <!-- padding-left = 2mm = 50000-->
4498
+ </xsl:call-template>
4499
+ </xsl:for-each>
4500
+ </xsl:otherwise>
4501
+ </xsl:choose>
4502
+
4503
+ </xsl:template><xsl:template match="@*|node()" mode="determine_cell_widths-if">
4504
+ <xsl:copy>
4505
+ <xsl:apply-templates select="@*|node()" mode="determine_cell_widths-if"/>
4506
+ </xsl:copy>
4507
+ </xsl:template><xsl:template match="td | th" mode="determine_cell_widths-if">
4508
+ <xsl:copy>
4509
+ <xsl:copy-of select="@*"/>
4510
+
4511
+ <!-- The maximum width is given by the widest line. -->
4512
+ <xsl:attribute name="width_max">
4513
+ <xsl:for-each select="p_len">
4514
+ <xsl:sort select="." data-type="number" order="descending"/>
4515
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4516
+ </xsl:for-each>
4517
+ </xsl:attribute>
4518
+
4519
+ <!-- The minimum width is given by the widest text element (word, image, etc.) -->
4520
+ <xsl:variable name="width_min">
4521
+ <xsl:for-each select="word_len">
4522
+ <xsl:sort select="." data-type="number" order="descending"/>
4523
+ <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
4524
+ </xsl:for-each>
4525
+ </xsl:variable>
4526
+ <xsl:attribute name="width_min">
4527
+ <xsl:value-of select="$width_min"/>
4528
+ </xsl:attribute>
4529
+
4530
+ <xsl:if test="$width_min = 0">
4531
+ <xsl:attribute name="width_min">1</xsl:attribute>
4532
+ </xsl:if>
4533
+
4534
+ <xsl:apply-templates select="node()" mode="determine_cell_widths-if"/>
4535
+
4536
+ </xsl:copy>
3919
4537
  </xsl:template><xsl:template match="*[local-name()='thead']">
3920
4538
  <xsl:param name="cols-count"/>
3921
4539
  <fo:table-header>
@@ -3933,19 +4551,25 @@
3933
4551
  <fo:table-row>
3934
4552
  <fo:table-cell number-columns-spanned="{$cols-count}" border-left="1.5pt solid white" border-right="1.5pt solid white" border-top="1.5pt solid white" border-bottom="1.5pt solid black">
3935
4553
 
3936
- <xsl:apply-templates select="ancestor::*[local-name()='table']/*[local-name()='name']">
3937
- <xsl:with-param name="continued">true</xsl:with-param>
3938
- </xsl:apply-templates>
3939
4554
 
3940
4555
 
3941
- <xsl:for-each select="ancestor::*[local-name()='table'][1]">
3942
- <xsl:call-template name="table_name_fn_display"/>
3943
- </xsl:for-each>
4556
+
4557
+ <xsl:apply-templates select="ancestor::*[local-name()='table']/*[local-name()='name']">
4558
+ <xsl:with-param name="continued">true</xsl:with-param>
4559
+ </xsl:apply-templates>
4560
+
4561
+
4562
+ <xsl:for-each select="ancestor::*[local-name()='table'][1]">
4563
+ <xsl:call-template name="table_name_fn_display"/>
4564
+ </xsl:for-each>
3944
4565
 
3945
- <fo:block text-align="right" font-style="italic">
3946
- <xsl:text> </xsl:text>
3947
- <fo:retrieve-table-marker retrieve-class-name="table_continued"/>
3948
- </fo:block>
4566
+ <fo:block text-align="right" font-style="italic">
4567
+ <xsl:text> </xsl:text>
4568
+ <fo:retrieve-table-marker retrieve-class-name="table_continued"/>
4569
+ </fo:block>
4570
+
4571
+
4572
+
3949
4573
 
3950
4574
 
3951
4575
  </fo:table-cell>
@@ -4013,6 +4637,7 @@
4013
4637
  </xsl:for-each>
4014
4638
  </xsl:when>
4015
4639
  <xsl:otherwise>
4640
+ <!-- $colwidths=<xsl:copy-of select="$colwidths"/> -->
4016
4641
  <xsl:call-template name="insertTableColumnWidth">
4017
4642
  <xsl:with-param name="colwidths" select="$colwidths"/>
4018
4643
  </xsl:call-template>
@@ -4047,7 +4672,10 @@
4047
4672
 
4048
4673
 
4049
4674
  <!-- fn processing -->
4050
- <xsl:call-template name="table_fn_display"/>
4675
+
4676
+ <xsl:call-template name="table_fn_display"/>
4677
+
4678
+
4051
4679
 
4052
4680
  <!-- for PAS display Notes after footnotes -->
4053
4681
 
@@ -4057,6 +4685,9 @@
4057
4685
  </fo:table-body>
4058
4686
 
4059
4687
  </fo:table>
4688
+
4689
+
4690
+
4060
4691
  </xsl:if>
4061
4692
  </xsl:template><xsl:template match="*[local-name()='tbody']">
4062
4693
 
@@ -4137,6 +4768,52 @@
4137
4768
 
4138
4769
  </fo:table-body>
4139
4770
 
4771
+ </xsl:template><xsl:template match="/" mode="process_table-if">
4772
+ <xsl:param name="table_or_dl">table</xsl:param>
4773
+ <xsl:apply-templates mode="process_table-if">
4774
+ <xsl:with-param name="table_or_dl" select="$table_or_dl"/>
4775
+ </xsl:apply-templates>
4776
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="process_table-if">
4777
+ <xsl:param name="table_or_dl">table</xsl:param>
4778
+
4779
+ <fo:table-body>
4780
+ <xsl:for-each select="*[local-name() = 'tr']">
4781
+ <xsl:variable name="col_count" select="count(*)"/>
4782
+
4783
+ <!-- iteration for each tr/td -->
4784
+
4785
+ <xsl:choose>
4786
+ <xsl:when test="$table_or_dl = 'table'">
4787
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']/*">
4788
+ <fo:table-row number-columns-spanned="{$col_count}">
4789
+ <!-- <test_table><xsl:copy-of select="."/></test_table> -->
4790
+ <xsl:call-template name="td"/>
4791
+ </fo:table-row>
4792
+ </xsl:for-each>
4793
+ </xsl:when>
4794
+ <xsl:otherwise> <!-- $table_or_dl = 'dl' -->
4795
+ <xsl:for-each select="*[local-name() = 'td' or local-name() = 'th']">
4796
+ <xsl:variable name="is_dt" select="position() = 1"/>
4797
+
4798
+ <xsl:for-each select="*">
4799
+ <!-- <test><xsl:copy-of select="."/></test> -->
4800
+ <fo:table-row number-columns-spanned="{$col_count}">
4801
+ <xsl:choose>
4802
+ <xsl:when test="$is_dt">
4803
+ <xsl:call-template name="insert_dt_cell"/>
4804
+ </xsl:when>
4805
+ <xsl:otherwise>
4806
+ <xsl:call-template name="insert_dd_cell"/>
4807
+ </xsl:otherwise>
4808
+ </xsl:choose>
4809
+ </fo:table-row>
4810
+ </xsl:for-each>
4811
+ </xsl:for-each>
4812
+ </xsl:otherwise>
4813
+ </xsl:choose>
4814
+
4815
+ </xsl:for-each>
4816
+ </fo:table-body>
4140
4817
  </xsl:template><xsl:template match="*[local-name()='thead']/*[local-name()='tr']" priority="2">
4141
4818
  <fo:table-row xsl:use-attribute-sets="table-header-row-style">
4142
4819
 
@@ -4155,6 +4832,9 @@
4155
4832
  </xsl:choose>
4156
4833
 
4157
4834
 
4835
+
4836
+
4837
+
4158
4838
 
4159
4839
 
4160
4840
  <xsl:call-template name="setTableRowAttributes"/>
@@ -4174,6 +4854,8 @@
4174
4854
 
4175
4855
 
4176
4856
 
4857
+
4858
+
4177
4859
  <xsl:call-template name="setTableRowAttributes"/>
4178
4860
  <xsl:apply-templates/>
4179
4861
  </fo:table-row>
@@ -4234,7 +4916,7 @@
4234
4916
  </xsl:choose>
4235
4917
  </xsl:attribute>
4236
4918
  </xsl:if>
4237
- </xsl:template><xsl:template match="*[local-name()='td']">
4919
+ </xsl:template><xsl:template match="*[local-name()='td']" name="td">
4238
4920
  <fo:table-cell xsl:use-attribute-sets="table-cell-style"> <!-- text-align="{@align}" -->
4239
4921
  <xsl:call-template name="setTextAlignment">
4240
4922
  <xsl:with-param name="default">left</xsl:with-param>
@@ -4253,6 +4935,8 @@
4253
4935
 
4254
4936
 
4255
4937
 
4938
+
4939
+
4256
4940
  <xsl:if test="ancestor::*[local-name() = 'tfoot']">
4257
4941
  <xsl:attribute name="border">solid black 0</xsl:attribute>
4258
4942
  </xsl:if>
@@ -4272,11 +4956,24 @@
4272
4956
 
4273
4957
  <xsl:call-template name="setTableCellAttributes"/>
4274
4958
 
4959
+ <xsl:if test="$isGenerateTableIF = 'true'">
4960
+ <xsl:attribute name="border">1pt solid black</xsl:attribute> <!-- border is mandatory, to determine page width -->
4961
+ <xsl:attribute name="text-align">left</xsl:attribute>
4962
+ </xsl:if>
4963
+
4275
4964
  <fo:block>
4276
4965
 
4966
+ <xsl:if test="$isGenerateTableIF = 'true'">
4967
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
4968
+ </xsl:if>
4969
+
4970
+
4277
4971
 
4278
4972
 
4279
4973
  <xsl:apply-templates/>
4974
+
4975
+ <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"/> -->
4976
+
4280
4977
  </fo:block>
4281
4978
  </fo:table-cell>
4282
4979
  </xsl:template><xsl:template match="*[local-name()='table']/*[local-name()='note']" priority="2">
@@ -4317,7 +5014,11 @@
4317
5014
 
4318
5015
  <xsl:variable name="gen_id" select="generate-id(.)"/>
4319
5016
  <xsl:variable name="lang" select="ancestor::*[contains(local-name(), '-standard')]/*[local-name()='bibdata']//*[local-name()='language'][@current = 'true']"/>
4320
- <xsl:variable name="reference" select="@reference"/>
5017
+ <xsl:variable name="reference_">
5018
+ <xsl:value-of select="@reference"/>
5019
+ <xsl:if test="normalize-space(@reference) = ''"><xsl:value-of select="$gen_id"/></xsl:if>
5020
+ </xsl:variable>
5021
+ <xsl:variable name="reference" select="normalize-space($reference_)"/>
4321
5022
  <!-- fn sequence number in document -->
4322
5023
  <xsl:variable name="current_fn_number">
4323
5024
  <xsl:choose>
@@ -4394,7 +5095,7 @@
4394
5095
  <xsl:copy-of select="node()"/>
4395
5096
  </fn>
4396
5097
  </xsl:for-each>
4397
- <xsl:for-each select="ancestor::*[contains(local-name(), '-standard')]/*[local-name()='preface']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='sections']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='annex'] | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='bibliography']/*">
5098
+ <xsl:for-each select="ancestor::*[contains(local-name(), '-standard')]/*[local-name()='boilerplate']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='preface']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='sections']/* | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='annex'] | ancestor::*[contains(local-name(), '-standard')]/*[local-name()='bibliography']/*">
4398
5099
  <xsl:sort select="@displayorder" data-type="number"/>
4399
5100
  <xsl:for-each select=".//*[local-name() = 'bibitem'][ancestor::*[local-name() = 'references']]/*[local-name() = 'note'] | .//*[local-name() = 'fn'][not(ancestor::*[(local-name() = 'table' or local-name() = 'figure') and not(ancestor::*[local-name() = 'name'])])][generate-id(.)=generate-id(key('kfn',@reference)[1])]">
4400
5101
  <!-- copy unique fn -->
@@ -4475,9 +5176,9 @@
4475
5176
  <!-- current hierarchy is 'figure' element -->
4476
5177
  <xsl:variable name="following_dl_colwidths">
4477
5178
  <xsl:if test="*[local-name() = 'dl']"><!-- if there is a 'dl', then set the same columns width as for 'dl' -->
4478
- <xsl:variable name="html-table">
4479
- <xsl:variable name="doc_ns">
4480
-
5179
+ <xsl:variable name="simple-table">
5180
+ <!-- <xsl:variable name="doc_ns">
5181
+ <xsl:if test="$namespace = 'bipm'">bipm</xsl:if>
4481
5182
  </xsl:variable>
4482
5183
  <xsl:variable name="ns">
4483
5184
  <xsl:choose>
@@ -4488,7 +5189,7 @@
4488
5189
  <xsl:value-of select="substring-before(name(/*), '-')"/>
4489
5190
  </xsl:otherwise>
4490
5191
  </xsl:choose>
4491
- </xsl:variable>
5192
+ </xsl:variable> -->
4492
5193
 
4493
5194
  <xsl:for-each select="*[local-name() = 'dl'][1]">
4494
5195
  <tbody>
@@ -4499,7 +5200,7 @@
4499
5200
 
4500
5201
  <xsl:call-template name="calculate-column-widths">
4501
5202
  <xsl:with-param name="cols-count" select="2"/>
4502
- <xsl:with-param name="table" select="$html-table"/>
5203
+ <xsl:with-param name="table" select="$simple-table"/>
4503
5204
  </xsl:call-template>
4504
5205
 
4505
5206
  </xsl:if>
@@ -4693,12 +5394,31 @@
4693
5394
 
4694
5395
 
4695
5396
 
5397
+
5398
+ <xsl:if test="ancestor::*[local-name() = 'dd' or local-name() = 'td']">
5399
+ <xsl:attribute name="margin-top">0</xsl:attribute>
5400
+ </xsl:if>
5401
+
4696
5402
  <fo:block>
4697
5403
 
4698
5404
 
4699
5405
 
4700
5406
 
5407
+ <xsl:apply-templates select="*[local-name() = 'name']">
5408
+ <xsl:with-param name="process">true</xsl:with-param>
5409
+ </xsl:apply-templates>
5410
+
5411
+ <xsl:if test="$isGenerateTableIF = 'true'">
5412
+ <!-- to determine start of table -->
5413
+ <fo:block id="{concat('table_if_start_',@id)}" keep-with-next="always" font-size="1pt">Start table '<xsl:value-of select="@id"/>'.</fo:block>
5414
+ </xsl:if>
5415
+
4701
5416
  <fo:table width="95%" table-layout="fixed">
5417
+
5418
+ <xsl:if test="$isGenerateTableIF = 'true'">
5419
+ <xsl:attribute name="wrap-option">no-wrap</xsl:attribute>
5420
+ </xsl:if>
5421
+
4702
5422
 
4703
5423
  <xsl:choose>
4704
5424
  <xsl:when test="normalize-space($key_iso) = 'true' and $parent = 'formula'"/>
@@ -4707,72 +5427,177 @@
4707
5427
 
4708
5428
  </xsl:when>
4709
5429
  </xsl:choose>
4710
- <!-- create virtual html table for dl/[dt and dd] -->
4711
- <xsl:variable name="html-table">
4712
- <xsl:variable name="doc_ns">
5430
+
5431
+
5432
+ <xsl:attribute name="width">100%</xsl:attribute>
5433
+
5434
+
5435
+ <xsl:choose>
5436
+ <xsl:when test="$isGenerateTableIF = 'true'">
5437
+ <!-- generate IF for table widths -->
5438
+ <!-- example:
5439
+ <tr>
5440
+ <td valign="top" align="left" id="tab-symdu_1_1">
5441
+ <p>Symbol</p>
5442
+ <word id="tab-symdu_1_1_word_1">Symbol</word>
5443
+ </td>
5444
+ <td valign="top" align="left" id="tab-symdu_1_2">
5445
+ <p>Description</p>
5446
+ <word id="tab-symdu_1_2_word_1">Description</word>
5447
+ </td>
5448
+ </tr>
5449
+ -->
4713
5450
 
4714
- </xsl:variable>
4715
- <xsl:variable name="ns">
4716
- <xsl:choose>
4717
- <xsl:when test="normalize-space($doc_ns) != ''">
4718
- <xsl:value-of select="normalize-space($doc_ns)"/>
4719
- </xsl:when>
4720
- <xsl:otherwise>
4721
- <xsl:value-of select="substring-before(name(/*), '-')"/>
4722
- </xsl:otherwise>
4723
- </xsl:choose>
4724
- </xsl:variable>
4725
- <tbody>
4726
- <xsl:apply-templates mode="dl"/>
4727
- </tbody>
4728
- </xsl:variable>
4729
- <!-- DEBUG: html-table<xsl:copy-of select="$html-table"/> -->
4730
- <xsl:variable name="colwidths">
4731
- <xsl:call-template name="calculate-column-widths">
4732
- <xsl:with-param name="cols-count" select="2"/>
4733
- <xsl:with-param name="table" select="$html-table"/>
4734
- </xsl:call-template>
4735
- </xsl:variable>
4736
- <!-- DEBUG: colwidths=<xsl:copy-of select="$colwidths"/> -->
4737
- <xsl:variable name="maxlength_dt">
4738
- <xsl:call-template name="getMaxLength_dt"/>
4739
- </xsl:variable>
4740
- <xsl:variable name="isContainsKeepTogetherTag_">
4741
-
4742
- <!-- <xsl:value-of select="count(.//*[local-name() = 'strong'][translate(., $express_reference_characters, '') = '']) &gt; 0"/> -->
4743
- <xsl:value-of select="count(.//*[local-name() = $element_name_keep-together_within-line]) &gt; 0"/>
5451
+ <!-- create virtual html table for dl/[dt and dd] -->
5452
+ <xsl:variable name="simple-table">
5453
+
5454
+ <xsl:variable name="dl_table">
5455
+ <tbody>
5456
+ <xsl:apply-templates mode="dl_if">
5457
+ <xsl:with-param name="id" select="@id"/>
5458
+ </xsl:apply-templates>
5459
+ </tbody>
5460
+ </xsl:variable>
5461
+
5462
+ <!-- dl_table='<xsl:copy-of select="$dl_table"/>' -->
5463
+
5464
+ <!-- Step: replace <br/> to <p>...</p> -->
5465
+ <xsl:variable name="table_without_br">
5466
+ <xsl:apply-templates select="xalan:nodeset($dl_table)" mode="table-without-br"/>
5467
+ </xsl:variable>
5468
+
5469
+ <!-- table_without_br='<xsl:copy-of select="$table_without_br"/>' -->
5470
+
5471
+ <!-- Step: add id to each cell -->
5472
+ <!-- add <word>...</word> for each word, image, math -->
5473
+ <xsl:variable name="simple-table-id">
5474
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-id">
5475
+ <xsl:with-param name="id" select="@id"/>
5476
+ </xsl:apply-templates>
5477
+ </xsl:variable>
5478
+
5479
+ <!-- simple-table-id='<xsl:copy-of select="$simple-table-id"/>' -->
5480
+
5481
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
5482
+
5483
+ </xsl:variable>
4744
5484
 
4745
- </xsl:variable>
4746
- <xsl:variable name="isContainsKeepTogetherTag" select="normalize-space($isContainsKeepTogetherTag_)"/>
4747
- <!-- isContainsExpressReference=<xsl:value-of select="$isContainsExpressReference"/> -->
4748
- <xsl:call-template name="setColumnWidth_dl">
4749
- <xsl:with-param name="colwidths" select="$colwidths"/>
4750
- <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
4751
- <xsl:with-param name="isContainsKeepTogetherTag" select="$isContainsKeepTogetherTag"/>
4752
- </xsl:call-template>
5485
+ <!-- DEBUG: simple-table<xsl:copy-of select="$simple-table"/> -->
5486
+
5487
+ <xsl:apply-templates select="xalan:nodeset($simple-table)" mode="process_table-if">
5488
+ <xsl:with-param name="table_or_dl">dl</xsl:with-param>
5489
+ </xsl:apply-templates>
5490
+
5491
+ </xsl:when>
5492
+ <xsl:otherwise>
4753
5493
 
4754
- <fo:table-body>
4755
- <xsl:apply-templates>
4756
- <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
4757
- </xsl:apply-templates>
4758
- </fo:table-body>
5494
+ <xsl:variable name="simple-table">
5495
+
5496
+ <xsl:variable name="dl_table">
5497
+ <tbody>
5498
+ <xsl:apply-templates mode="dl">
5499
+ <xsl:with-param name="id" select="@id"/>
5500
+ </xsl:apply-templates>
5501
+ </tbody>
5502
+ </xsl:variable>
5503
+
5504
+ <xsl:copy-of select="$dl_table"/>
5505
+ </xsl:variable>
5506
+
5507
+ <xsl:variable name="colwidths">
5508
+ <xsl:call-template name="calculate-column-widths">
5509
+ <xsl:with-param name="cols-count" select="2"/>
5510
+ <xsl:with-param name="table" select="$simple-table"/>
5511
+ </xsl:call-template>
5512
+ </xsl:variable>
5513
+
5514
+ <!-- <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
5515
+ DEBUG
5516
+ colwidths=<xsl:copy-of select="$colwidths"/>
5517
+ <xsl:text disable-output-escaping="yes">- -&gt;</xsl:text> -->
5518
+
5519
+ <!-- colwidths=<xsl:copy-of select="$colwidths"/> -->
5520
+
5521
+ <xsl:variable name="maxlength_dt">
5522
+ <xsl:call-template name="getMaxLength_dt"/>
5523
+ </xsl:variable>
5524
+
5525
+ <xsl:variable name="isContainsKeepTogetherTag_">
5526
+
5527
+ <xsl:value-of select="count(.//*[local-name() = $element_name_keep-together_within-line]) &gt; 0"/>
5528
+
5529
+ </xsl:variable>
5530
+ <xsl:variable name="isContainsKeepTogetherTag" select="normalize-space($isContainsKeepTogetherTag_)"/>
5531
+ <!-- isContainsExpressReference=<xsl:value-of select="$isContainsExpressReference"/> -->
5532
+
5533
+
5534
+ <xsl:call-template name="setColumnWidth_dl">
5535
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5536
+ <xsl:with-param name="maxlength_dt" select="$maxlength_dt"/>
5537
+ <xsl:with-param name="isContainsKeepTogetherTag" select="$isContainsKeepTogetherTag"/>
5538
+ </xsl:call-template>
5539
+
5540
+ <fo:table-body>
5541
+
5542
+ <!-- DEBUG -->
5543
+ <xsl:if test="$table_if_debug = 'true'">
5544
+ <fo:table-row>
5545
+ <fo:table-cell number-columns-spanned="2" font-size="60%">
5546
+ <xsl:apply-templates select="xalan:nodeset($colwidths)" mode="print_as_xml"/>
5547
+ </fo:table-cell>
5548
+ </fo:table-row>
5549
+ </xsl:if>
5550
+
5551
+ <xsl:apply-templates>
5552
+ <xsl:with-param name="key_iso" select="normalize-space($key_iso)"/>
5553
+ <xsl:with-param name="split_keep-within-line" select="xalan:nodeset($colwidths)/split_keep-within-line"/>
5554
+ </xsl:apply-templates>
5555
+
5556
+ </fo:table-body>
5557
+ </xsl:otherwise>
5558
+ </xsl:choose>
4759
5559
  </fo:table>
4760
5560
  </fo:block>
4761
5561
  </fo:block>
4762
5562
  </xsl:if> <!-- END: a few components -->
4763
5563
  </fo:block-container>
4764
5564
  </fo:block-container>
5565
+
5566
+ <xsl:if test="$isGenerateTableIF = 'true'"> <!-- process nested 'dl' -->
5567
+ <xsl:apply-templates select="*[local-name() = 'dd']/*[local-name() = 'dl']"/>
5568
+ </xsl:if>
5569
+
5570
+ </xsl:template><xsl:template match="*[local-name() = 'dl']/*[local-name() = 'name']">
5571
+ <xsl:param name="process">false</xsl:param>
5572
+ <xsl:if test="$process = 'true'">
5573
+ <fo:block xsl:use-attribute-sets="dl-name-style">
5574
+ <xsl:apply-templates/>
5575
+ </fo:block>
5576
+ </xsl:if>
4765
5577
  </xsl:template><xsl:template name="setColumnWidth_dl">
4766
5578
  <xsl:param name="colwidths"/>
4767
5579
  <xsl:param name="maxlength_dt"/>
4768
5580
  <xsl:param name="isContainsKeepTogetherTag"/>
5581
+
5582
+ <!-- <colwidths><xsl:copy-of select="$colwidths"/></colwidths> -->
5583
+
4769
5584
  <xsl:choose>
5585
+ <xsl:when test="xalan:nodeset($colwidths)/autolayout">
5586
+ <xsl:call-template name="insertTableColumnWidth">
5587
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5588
+ </xsl:call-template>
5589
+ </xsl:when>
4770
5590
  <xsl:when test="ancestor::*[local-name()='dl']"><!-- second level, i.e. inlined table -->
4771
5591
  <fo:table-column column-width="50%"/>
4772
5592
  <fo:table-column column-width="50%"/>
4773
5593
  </xsl:when>
4774
5594
  <xsl:otherwise>
4775
5595
  <xsl:choose>
5596
+ <xsl:when test="xalan:nodeset($colwidths)/autolayout">
5597
+ <xsl:call-template name="insertTableColumnWidth">
5598
+ <xsl:with-param name="colwidths" select="$colwidths"/>
5599
+ </xsl:call-template>
5600
+ </xsl:when>
4776
5601
  <xsl:when test="$isContainsKeepTogetherTag">
4777
5602
  <xsl:call-template name="insertTableColumnWidth">
4778
5603
  <xsl:with-param name="colwidths" select="$colwidths"/>
@@ -4817,13 +5642,19 @@
4817
5642
  </xsl:choose>
4818
5643
  </xsl:template><xsl:template name="insertTableColumnWidth">
4819
5644
  <xsl:param name="colwidths"/>
5645
+
4820
5646
  <xsl:for-each select="xalan:nodeset($colwidths)//column">
4821
5647
  <xsl:choose>
4822
5648
  <xsl:when test=". = 1 or . = 0">
4823
5649
  <fo:table-column column-width="proportional-column-width(2)"/>
4824
5650
  </xsl:when>
4825
5651
  <xsl:otherwise>
4826
- <fo:table-column column-width="proportional-column-width({.})"/>
5652
+ <!-- <fo:table-column column-width="proportional-column-width({.})"/> -->
5653
+ <xsl:variable name="divider">
5654
+ <xsl:value-of select="@divider"/>
5655
+ <xsl:if test="not(@divider)">1</xsl:if>
5656
+ </xsl:variable>
5657
+ <fo:table-column column-width="proportional-column-width({round(. div $divider)})"/>
4827
5658
  </xsl:otherwise>
4828
5659
  </xsl:choose>
4829
5660
  </xsl:for-each>
@@ -4885,11 +5716,19 @@
4885
5716
  </fo:table-cell>
4886
5717
  </fo:table-row>
4887
5718
  </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl">
5719
+ <xsl:param name="id"/>
5720
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
4888
5721
  <tr>
4889
5722
  <td>
5723
+ <xsl:attribute name="id">
5724
+ <xsl:value-of select="concat($id,'_',$row_number,'_1')"/>
5725
+ </xsl:attribute>
4890
5726
  <xsl:apply-templates/>
4891
5727
  </td>
4892
5728
  <td>
5729
+ <xsl:attribute name="id">
5730
+ <xsl:value-of select="concat($id,'_',$row_number,'_2')"/>
5731
+ </xsl:attribute>
4893
5732
 
4894
5733
  <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
4895
5734
  <xsl:with-param name="process">true</xsl:with-param>
@@ -4900,50 +5739,134 @@
4900
5739
 
4901
5740
  </xsl:template><xsl:template match="*[local-name()='dt']">
4902
5741
  <xsl:param name="key_iso"/>
5742
+ <xsl:param name="split_keep-within-line"/>
4903
5743
 
4904
5744
  <fo:table-row xsl:use-attribute-sets="dt-row-style">
4905
- <fo:table-cell>
5745
+ <xsl:call-template name="insert_dt_cell">
5746
+ <xsl:with-param name="key_iso" select="$key_iso"/>
5747
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5748
+ </xsl:call-template>
5749
+ <xsl:for-each select="following-sibling::*[local-name()='dd'][1]">
5750
+ <xsl:call-template name="insert_dd_cell">
5751
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5752
+ </xsl:call-template>
5753
+ </xsl:for-each>
5754
+ </fo:table-row>
5755
+ </xsl:template><xsl:template name="insert_dt_cell">
5756
+ <xsl:param name="key_iso"/>
5757
+ <xsl:param name="split_keep-within-line"/>
5758
+ <fo:table-cell xsl:use-attribute-sets="dt-cell-style">
5759
+
5760
+ <xsl:if test="$isGenerateTableIF = 'true'">
5761
+ <!-- border is mandatory, to calculate real width -->
5762
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
5763
+ <xsl:attribute name="text-align">left</xsl:attribute>
5764
+ </xsl:if>
5765
+
5766
+
5767
+ <fo:block xsl:use-attribute-sets="dt-block-style">
5768
+ <xsl:copy-of select="@id"/>
5769
+
5770
+ <xsl:if test="normalize-space($key_iso) = 'true'">
5771
+ <xsl:attribute name="margin-top">0</xsl:attribute>
5772
+ </xsl:if>
5773
+
5774
+
5775
+
5776
+ <xsl:apply-templates>
5777
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5778
+ </xsl:apply-templates>
5779
+
5780
+ <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"/> -->
5781
+
5782
+ </fo:block>
5783
+ </fo:table-cell>
5784
+ </xsl:template><xsl:template name="insert_dd_cell">
5785
+ <xsl:param name="split_keep-within-line"/>
5786
+ <fo:table-cell xsl:use-attribute-sets="dd-cell-style">
5787
+
5788
+ <xsl:if test="$isGenerateTableIF = 'true'">
5789
+ <!-- border is mandatory, to calculate real width -->
5790
+ <xsl:attribute name="border">0.1pt solid black</xsl:attribute>
5791
+ </xsl:if>
5792
+
5793
+ <fo:block>
5794
+
5795
+ <xsl:if test="$isGenerateTableIF = 'true'">
5796
+ <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
5797
+ </xsl:if>
5798
+
4906
5799
 
4907
- <fo:block xsl:use-attribute-sets="dt-style">
4908
- <xsl:copy-of select="@id"/>
4909
-
4910
- <xsl:if test="normalize-space($key_iso) = 'true'">
4911
- <xsl:attribute name="margin-top">0</xsl:attribute>
4912
- </xsl:if>
4913
-
4914
-
4915
-
4916
- <xsl:apply-templates/>
4917
- </fo:block>
4918
- </fo:table-cell>
4919
- <fo:table-cell>
4920
- <fo:block>
4921
-
4922
5800
 
4923
- <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]">
4924
- <xsl:with-param name="process">true</xsl:with-param>
4925
- </xsl:apply-templates>
4926
- </fo:block>
4927
- </fo:table-cell>
4928
- </fo:table-row>
5801
+ <xsl:choose>
5802
+ <xsl:when test="$isGenerateTableIF = 'true'">
5803
+ <xsl:apply-templates> <!-- following-sibling::*[local-name()='dd'][1] -->
5804
+ <xsl:with-param name="process">true</xsl:with-param>
5805
+ </xsl:apply-templates>
5806
+ </xsl:when>
5807
+ <xsl:otherwise>
5808
+ <xsl:apply-templates select="."> <!-- following-sibling::*[local-name()='dd'][1] -->
5809
+ <xsl:with-param name="process">true</xsl:with-param>
5810
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5811
+ </xsl:apply-templates>
5812
+ </xsl:otherwise>
5813
+
5814
+ </xsl:choose>
5815
+
5816
+ <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"/> -->
5817
+
5818
+ </fo:block>
5819
+ </fo:table-cell>
4929
5820
  </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl"/><xsl:template match="*[local-name()='dd']" mode="dl_process">
4930
5821
  <xsl:apply-templates/>
4931
5822
  </xsl:template><xsl:template match="*[local-name()='dd']">
4932
5823
  <xsl:param name="process">false</xsl:param>
5824
+ <xsl:param name="split_keep-within-line"/>
4933
5825
  <xsl:if test="$process = 'true'">
4934
5826
  <xsl:apply-templates select="@language"/>
4935
- <xsl:apply-templates/>
5827
+ <xsl:apply-templates>
5828
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5829
+ </xsl:apply-templates>
4936
5830
  </xsl:if>
4937
5831
  </xsl:template><xsl:template match="*[local-name()='dd']/*[local-name()='p']" mode="inline">
4938
5832
  <fo:inline><xsl:text> </xsl:text><xsl:apply-templates/></fo:inline>
4939
- </xsl:template><xsl:template match="*[local-name()='em']">
5833
+ </xsl:template><xsl:template match="*[local-name()='dt']" mode="dl_if">
5834
+ <xsl:param name="id"/>
5835
+ <xsl:variable name="row_number" select="count(preceding-sibling::*[local-name()='dt']) + 1"/>
5836
+ <tr>
5837
+ <td>
5838
+ <xsl:copy-of select="node()"/>
5839
+ </td>
5840
+ <td>
5841
+
5842
+ <xsl:copy-of select="following-sibling::*[local-name()='dd'][1]/node()[not(local-name() = 'dl')]"/>
5843
+
5844
+ <!-- get paragraphs from nested 'dl' -->
5845
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]/*[local-name() = 'dl']" mode="dl_if_nested"/>
5846
+
5847
+
5848
+ </td>
5849
+ </tr>
5850
+
5851
+ </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl_if"/><xsl:template match="*[local-name()='dl']" mode="dl_if_nested">
5852
+ <xsl:for-each select="*[local-name() = 'dt']">
5853
+ <p>
5854
+ <xsl:copy-of select="node()"/>
5855
+ <xsl:text> </xsl:text>
5856
+ <xsl:copy-of select="following-sibling::*[local-name()='dd'][1]/*[local-name() = 'p']/node()"/>
5857
+ </p>
5858
+ </xsl:for-each>
5859
+ </xsl:template><xsl:template match="*[local-name()='dd']" mode="dl_if_nested"/><xsl:template match="*[local-name()='em']">
4940
5860
  <fo:inline font-style="italic">
4941
5861
  <xsl:apply-templates/>
4942
5862
  </fo:inline>
4943
5863
  </xsl:template><xsl:template match="*[local-name()='strong'] | *[local-name()='b']">
5864
+ <xsl:param name="split_keep-within-line"/>
4944
5865
  <fo:inline font-weight="bold">
4945
5866
 
4946
- <xsl:apply-templates/>
5867
+ <xsl:apply-templates>
5868
+ <xsl:with-param name="split_keep-within-line" select="$split_keep-within-line"/>
5869
+ </xsl:apply-templates>
4947
5870
  </fo:inline>
4948
5871
  </xsl:template><xsl:template match="*[local-name()='padding']">
4949
5872
  <fo:inline padding-right="{@value}"> </fo:inline>
@@ -4964,7 +5887,7 @@
4964
5887
 
4965
5888
 
4966
5889
 
4967
- 10
5890
+ inherit <!-- 10 -->
4968
5891
 
4969
5892
 
4970
5893
 
@@ -5144,6 +6067,10 @@
5144
6067
  <xsl:param name="text"/>
5145
6068
  <xsl:param name="separator" select="' '"/>
5146
6069
  <xsl:choose>
6070
+
6071
+ <xsl:when test="$isGenerateTableIF = 'true' and not(contains($text, $separator))">
6072
+ <word><xsl:value-of select="normalize-space($text)"/></word>
6073
+ </xsl:when>
5147
6074
  <xsl:when test="not(contains($text, $separator))">
5148
6075
  <word>
5149
6076
  <xsl:variable name="len_str_tmp" select="string-length(normalize-space($text))"/>
@@ -5188,13 +6115,66 @@
5188
6115
  </xsl:when>
5189
6116
  <xsl:otherwise>
5190
6117
  <word>
5191
- <xsl:value-of select="string-length(normalize-space(substring-before($text, $separator)))"/>
6118
+ <xsl:variable name="word" select="normalize-space(substring-before($text, $separator))"/>
6119
+ <xsl:choose>
6120
+ <xsl:when test="$isGenerateTableIF = 'true'">
6121
+ <xsl:value-of select="$word"/>
6122
+ </xsl:when>
6123
+ <xsl:otherwise>
6124
+ <xsl:value-of select="string-length($word)"/>
6125
+ </xsl:otherwise>
6126
+ </xsl:choose>
5192
6127
  </word>
5193
6128
  <xsl:call-template name="tokenize">
5194
6129
  <xsl:with-param name="text" select="substring-after($text, $separator)"/>
5195
6130
  </xsl:call-template>
5196
6131
  </xsl:otherwise>
5197
6132
  </xsl:choose>
6133
+ </xsl:template><xsl:template name="tokenize_with_tags">
6134
+ <xsl:param name="tags"/>
6135
+ <xsl:param name="text"/>
6136
+ <xsl:param name="separator" select="' '"/>
6137
+ <xsl:choose>
6138
+
6139
+ <xsl:when test="not(contains($text, $separator))">
6140
+ <word>
6141
+ <xsl:call-template name="enclose_text_in_tags">
6142
+ <xsl:with-param name="text" select="normalize-space($text)"/>
6143
+ <xsl:with-param name="tags" select="$tags"/>
6144
+ </xsl:call-template>
6145
+ </word>
6146
+ </xsl:when>
6147
+ <xsl:otherwise>
6148
+ <word>
6149
+ <xsl:call-template name="enclose_text_in_tags">
6150
+ <xsl:with-param name="text" select="normalize-space(substring-before($text, $separator))"/>
6151
+ <xsl:with-param name="tags" select="$tags"/>
6152
+ </xsl:call-template>
6153
+ </word>
6154
+ <xsl:call-template name="tokenize_with_tags">
6155
+ <xsl:with-param name="text" select="substring-after($text, $separator)"/>
6156
+ </xsl:call-template>
6157
+ </xsl:otherwise>
6158
+ </xsl:choose>
6159
+ </xsl:template><xsl:template name="enclose_text_in_tags">
6160
+ <xsl:param name="text"/>
6161
+ <xsl:param name="tags"/>
6162
+ <xsl:param name="num">1</xsl:param> <!-- default (start) value -->
6163
+
6164
+ <xsl:variable name="tag_name" select="normalize-space(xalan:nodeset($tags)//tag[$num])"/>
6165
+
6166
+ <xsl:choose>
6167
+ <xsl:when test="$tag_name = ''"><xsl:value-of select="$text"/></xsl:when>
6168
+ <xsl:otherwise>
6169
+ <xsl:element name="{$tag_name}">
6170
+ <xsl:call-template name="enclose_text_in_tags">
6171
+ <xsl:with-param name="text" select="$text"/>
6172
+ <xsl:with-param name="tags" select="$tags"/>
6173
+ <xsl:with-param name="num" select="$num + 1"/>
6174
+ </xsl:call-template>
6175
+ </xsl:element>
6176
+ </xsl:otherwise>
6177
+ </xsl:choose>
5198
6178
  </xsl:template><xsl:template name="max_length">
5199
6179
  <xsl:param name="words"/>
5200
6180
  <xsl:for-each select="$words//word">
@@ -5295,12 +6275,19 @@
5295
6275
  </xsl:otherwise>
5296
6276
  </xsl:choose>
5297
6277
  </xsl:template><xsl:template name="getSimpleTable">
6278
+ <xsl:param name="id"/>
6279
+
5298
6280
  <xsl:variable name="simple-table">
5299
6281
 
6282
+ <!-- Step 0. replace <br/> to <p>...</p> -->
6283
+ <xsl:variable name="table_without_br">
6284
+ <xsl:apply-templates mode="table-without-br"/>
6285
+ </xsl:variable>
6286
+
5300
6287
  <!-- Step 1. colspan processing -->
5301
6288
  <xsl:variable name="simple-table-colspan">
5302
6289
  <tbody>
5303
- <xsl:apply-templates mode="simple-table-colspan"/>
6290
+ <xsl:apply-templates select="xalan:nodeset($table_without_br)" mode="simple-table-colspan"/>
5304
6291
  </tbody>
5305
6292
  </xsl:variable>
5306
6293
 
@@ -5309,10 +6296,67 @@
5309
6296
  <xsl:apply-templates select="xalan:nodeset($simple-table-colspan)" mode="simple-table-rowspan"/>
5310
6297
  </xsl:variable>
5311
6298
 
5312
- <xsl:copy-of select="xalan:nodeset($simple-table-rowspan)"/>
5313
-
6299
+ <!-- Step 3: add id to each cell -->
6300
+ <!-- add <word>...</word> for each word, image, math -->
6301
+ <xsl:variable name="simple-table-id">
6302
+ <xsl:apply-templates select="xalan:nodeset($simple-table-rowspan)" mode="simple-table-id">
6303
+ <xsl:with-param name="id" select="$id"/>
6304
+ </xsl:apply-templates>
6305
+ </xsl:variable>
6306
+
6307
+ <xsl:copy-of select="xalan:nodeset($simple-table-id)"/>
6308
+
5314
6309
  </xsl:variable>
5315
6310
  <xsl:copy-of select="$simple-table"/>
6311
+ </xsl:template><xsl:template match="@*|node()" mode="table-without-br">
6312
+ <xsl:copy>
6313
+ <xsl:apply-templates select="@*|node()" mode="table-without-br"/>
6314
+ </xsl:copy>
6315
+ </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">
6316
+ <xsl:copy>
6317
+ <xsl:copy-of select="@*"/>
6318
+ <p>
6319
+ <xsl:copy-of select="node()"/>
6320
+ </p>
6321
+ </xsl:copy>
6322
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td'][*[local-name()='br']]" mode="table-without-br">
6323
+ <xsl:copy>
6324
+ <xsl:copy-of select="@*"/>
6325
+ <xsl:for-each select="*[local-name()='br']">
6326
+ <xsl:variable name="current_id" select="generate-id()"/>
6327
+ <p>
6328
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
6329
+ <xsl:copy-of select="."/>
6330
+ </xsl:for-each>
6331
+ </p>
6332
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
6333
+ <p>
6334
+ <xsl:for-each select="following-sibling::node()">
6335
+ <xsl:copy-of select="."/>
6336
+ </xsl:for-each>
6337
+ </p>
6338
+ </xsl:if>
6339
+ </xsl:for-each>
6340
+ </xsl:copy>
6341
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']/*[local-name() = 'p'][*[local-name()='br']]" mode="table-without-br">
6342
+ <xsl:for-each select="*[local-name()='br']">
6343
+ <xsl:variable name="current_id" select="generate-id()"/>
6344
+ <p>
6345
+ <xsl:for-each select="preceding-sibling::node()[following-sibling::*[local-name() = 'br'][1][generate-id() = $current_id]][not(local-name() = 'br')]">
6346
+ <xsl:copy-of select="."/>
6347
+ </xsl:for-each>
6348
+ </p>
6349
+ <xsl:if test="not(following-sibling::*[local-name() = 'br'])">
6350
+ <p>
6351
+ <xsl:for-each select="following-sibling::node()">
6352
+ <xsl:copy-of select="."/>
6353
+ </xsl:for-each>
6354
+ </p>
6355
+ </xsl:if>
6356
+ </xsl:for-each>
6357
+ </xsl:template><xsl:template match="text()[not(ancestor::*[local-name() = 'sourcecode'])]" mode="table-without-br">
6358
+ <xsl:variable name="text" select="translate(.,'&#9;&#10;&#13;','')"/>
6359
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new($text),' {2,}',' ')"/>
5316
6360
  </xsl:template><xsl:template match="*[local-name()='thead'] | *[local-name()='tbody']" mode="simple-table-colspan">
5317
6361
  <xsl:apply-templates mode="simple-table-colspan"/>
5318
6362
  </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">
@@ -5402,6 +6446,126 @@
5402
6446
  <xsl:apply-templates select="following-sibling::tr[1]" mode="simple-table-rowspan">
5403
6447
  <xsl:with-param name="previousRow" select="$newRow"/>
5404
6448
  </xsl:apply-templates>
6449
+ </xsl:template><xsl:template match="/" mode="simple-table-id">
6450
+ <xsl:param name="id"/>
6451
+ <xsl:variable name="id_prefixed" select="concat('table_if_',$id)"/> <!-- table id prefixed by 'table_if_' to simple search in IF -->
6452
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
6453
+ <xsl:with-param name="id" select="$id_prefixed"/>
6454
+ </xsl:apply-templates>
6455
+ </xsl:template><xsl:template match="@*|node()" mode="simple-table-id">
6456
+ <xsl:param name="id"/>
6457
+ <xsl:copy>
6458
+ <xsl:apply-templates select="@*|node()" mode="simple-table-id">
6459
+ <xsl:with-param name="id" select="$id"/>
6460
+ </xsl:apply-templates>
6461
+ </xsl:copy>
6462
+ </xsl:template><xsl:template match="*[local-name()='tbody']" mode="simple-table-id">
6463
+ <xsl:param name="id"/>
6464
+ <xsl:copy>
6465
+ <xsl:copy-of select="@*"/>
6466
+ <xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
6467
+ <xsl:apply-templates select="node()" mode="simple-table-id">
6468
+ <xsl:with-param name="id" select="$id"/>
6469
+ </xsl:apply-templates>
6470
+ </xsl:copy>
6471
+ </xsl:template><xsl:template match="*[local-name()='th' or local-name()='td']" mode="simple-table-id">
6472
+ <xsl:param name="id"/>
6473
+ <xsl:copy>
6474
+ <xsl:copy-of select="@*"/>
6475
+ <xsl:variable name="row_number" select="count(../preceding-sibling::*) + 1"/>
6476
+ <xsl:variable name="col_number" select="count(preceding-sibling::*) + 1"/>
6477
+ <xsl:attribute name="id">
6478
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number)"/>
6479
+ </xsl:attribute>
6480
+
6481
+ <xsl:for-each select="*[local-name() = 'p']">
6482
+ <xsl:copy>
6483
+ <xsl:copy-of select="@*"/>
6484
+ <xsl:variable name="p_num" select="count(preceding-sibling::*[local-name() = 'p']) + 1"/>
6485
+ <xsl:attribute name="id">
6486
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_p_',$p_num)"/>
6487
+ </xsl:attribute>
6488
+
6489
+ <xsl:copy-of select="node()"/>
6490
+ </xsl:copy>
6491
+ </xsl:for-each>
6492
+
6493
+
6494
+ <xsl:if test="$isGenerateTableIF = 'true'"> <!-- split each paragraph to words, image, math -->
6495
+
6496
+ <xsl:variable name="td_text">
6497
+ <xsl:apply-templates select="." mode="td_text_with_formatting"/>
6498
+ </xsl:variable>
6499
+
6500
+ <!-- td_text='<xsl:copy-of select="$td_text"/>' -->
6501
+
6502
+ <xsl:variable name="words">
6503
+ <xsl:for-each select=".//*[local-name() = 'image' or local-name() = 'stem']">
6504
+ <word>
6505
+ <xsl:copy-of select="."/>
6506
+ </word>
6507
+ </xsl:for-each>
6508
+
6509
+ <xsl:for-each select="xalan:nodeset($td_text)//*[local-name() = 'word'][normalize-space() != '']">
6510
+ <xsl:copy-of select="."/>
6511
+ </xsl:for-each>
6512
+
6513
+ </xsl:variable>
6514
+
6515
+ <xsl:for-each select="xalan:nodeset($words)/word">
6516
+ <xsl:variable name="num" select="count(preceding-sibling::word) + 1"/>
6517
+ <xsl:copy>
6518
+ <xsl:attribute name="id">
6519
+ <xsl:value-of select="concat($id,'_',$row_number,'_',$col_number,'_word_',$num)"/>
6520
+ </xsl:attribute>
6521
+ <xsl:copy-of select="node()"/>
6522
+ </xsl:copy>
6523
+ </xsl:for-each>
6524
+ </xsl:if>
6525
+ </xsl:copy>
6526
+
6527
+ </xsl:template><xsl:template match="@*|node()" mode="td_text_with_formatting">
6528
+ <xsl:copy>
6529
+ <xsl:apply-templates select="@*|node()" mode="td_text_with_formatting"/>
6530
+ </xsl:copy>
6531
+ </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">
6532
+ <xsl:variable name="formatting_tags">
6533
+ <xsl:call-template name="getFormattingTags"/>
6534
+ </xsl:variable>
6535
+ <word>
6536
+ <xsl:call-template name="enclose_text_in_tags">
6537
+ <xsl:with-param name="text" select="normalize-space(.)"/>
6538
+ <xsl:with-param name="tags" select="$formatting_tags"/>
6539
+ </xsl:call-template>
6540
+ </word>
6541
+ </xsl:template><xsl:template match="*[local-name() != 'keep-together_within-line']/text()" mode="td_text_with_formatting">
6542
+
6543
+ <xsl:variable name="td_text" select="."/>
6544
+
6545
+ <xsl:variable name="string_with_added_zerospaces">
6546
+ <xsl:call-template name="add-zero-spaces-java">
6547
+ <xsl:with-param name="text" select="$td_text"/>
6548
+ </xsl:call-template>
6549
+ </xsl:variable>
6550
+
6551
+ <xsl:variable name="formatting_tags">
6552
+ <xsl:call-template name="getFormattingTags"/>
6553
+ </xsl:variable>
6554
+
6555
+ <!-- <word>text</word> -->
6556
+ <xsl:call-template name="tokenize_with_tags">
6557
+ <xsl:with-param name="tags" select="$formatting_tags"/>
6558
+ <xsl:with-param name="text" select="normalize-space(translate($string_with_added_zerospaces, '​­', ' '))"/> <!-- replace zero-width-space and soft-hyphen to space -->
6559
+ </xsl:call-template>
6560
+ </xsl:template><xsl:template name="getFormattingTags">
6561
+ <tags>
6562
+ <xsl:if test="ancestor::*[local-name() = 'strong']"><tag>strong</tag></xsl:if>
6563
+ <xsl:if test="ancestor::*[local-name() = 'em']"><tag>em</tag></xsl:if>
6564
+ <xsl:if test="ancestor::*[local-name() = 'sub']"><tag>sub</tag></xsl:if>
6565
+ <xsl:if test="ancestor::*[local-name() = 'sup']"><tag>sup</tag></xsl:if>
6566
+ <xsl:if test="ancestor::*[local-name() = 'tt']"><tag>tt</tag></xsl:if>
6567
+ <xsl:if test="ancestor::*[local-name() = 'keep-together_within-line']"><tag>keep-together_within-line</tag></xsl:if>
6568
+ </tags>
5405
6569
  </xsl:template><xsl:template name="getLang">
5406
6570
  <xsl:variable name="language_current" select="normalize-space(//*[local-name()='bibdata']//*[local-name()='language'][@current = 'true'])"/>
5407
6571
  <xsl:variable name="language">
@@ -5602,6 +6766,11 @@
5602
6766
  </xsl:variable>
5603
6767
  <fo:inline xsl:use-attribute-sets="link-style">
5604
6768
 
6769
+ <xsl:if test="starts-with(normalize-space(@target), 'mailto:')">
6770
+ <xsl:attribute name="keep-together.within-line">always</xsl:attribute>
6771
+ </xsl:if>
6772
+
6773
+
5605
6774
 
5606
6775
 
5607
6776
 
@@ -5864,7 +7033,19 @@
5864
7033
  <xsl:value-of select="$suffix"/>
5865
7034
  </xsl:if>
5866
7035
  </xsl:template><xsl:template match="*[local-name() = 'termnote']/*[local-name() = 'p']">
5867
- <fo:inline><xsl:apply-templates/></fo:inline>
7036
+ <xsl:variable name="num"><xsl:number/></xsl:variable>
7037
+ <xsl:choose>
7038
+ <xsl:when test="$num = 1"> <!-- first paragraph renders in the same line as titlenote name -->
7039
+ <fo:inline xsl:use-attribute-sets="termnote-p-style">
7040
+ <xsl:apply-templates/>
7041
+ </fo:inline>
7042
+ </xsl:when>
7043
+ <xsl:otherwise>
7044
+ <fo:block xsl:use-attribute-sets="termnote-p-style">
7045
+ <xsl:apply-templates/>
7046
+ </fo:block>
7047
+ </xsl:otherwise>
7048
+ </xsl:choose>
5868
7049
  </xsl:template><xsl:template match="*[local-name() = 'terms']">
5869
7050
  <!-- <xsl:message>'terms' <xsl:number/> processing...</xsl:message> -->
5870
7051
  <fo:block id="{@id}">
@@ -6683,7 +7864,7 @@
6683
7864
  </xsl:choose>
6684
7865
  </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">
6685
7866
  <xsl:value-of select="."/>
6686
- </xsl:template><xsl:template match="*[local-name() = 'tab']" mode="contents_item">
7867
+ </xsl:template><xsl:template match="*[local-name() = 'review']" mode="contents_item"/><xsl:template match="*[local-name() = 'tab']" mode="contents_item">
6687
7868
  <xsl:text> </xsl:text>
6688
7869
  </xsl:template><xsl:template match="*[local-name() = 'strong']" mode="contents_item">
6689
7870
  <xsl:copy>
@@ -6754,7 +7935,7 @@
6754
7935
 
6755
7936
 
6756
7937
 
6757
- 9
7938
+ inherit<!-- 9 -->
6758
7939
 
6759
7940
 
6760
7941
 
@@ -6838,7 +8019,7 @@
6838
8019
  <xsl:for-each select="xalan:nodeset($text_step4)/node()">
6839
8020
  <xsl:choose>
6840
8021
  <xsl:when test="local-name() = 'interspers'"> <!-- word with length more than 30 will be interspersed with zero-width space -->
6841
- <xsl:call-template name="interspers">
8022
+ <xsl:call-template name="interspers-java">
6842
8023
  <xsl:with-param name="str" select="."/>
6843
8024
  </xsl:call-template>
6844
8025
  </xsl:when>
@@ -6888,6 +8069,10 @@
6888
8069
  <xsl:with-param name="char" select="$char"/>
6889
8070
  </xsl:call-template>
6890
8071
  </xsl:if>
8072
+ </xsl:template><xsl:template name="interspers-java">
8073
+ <xsl:param name="str"/>
8074
+ <xsl:param name="char" select="$zero_width_space"/>
8075
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new($str),'([^ -.:=_—])',concat('$1', $char))"/> <!-- insert $char after each char excep space, - . : = _ etc. -->
6891
8076
  </xsl:template><xsl:template match="*" mode="syntax_highlight">
6892
8077
  <xsl:apply-templates mode="syntax_highlight"/>
6893
8078
  </xsl:template><xsl:variable name="syntax_highlight_styles_">
@@ -7100,7 +8285,9 @@
7100
8285
  <!-- <xsl:attribute name="border">0.5pt solid black</xsl:attribute> -->
7101
8286
  </xsl:if>
7102
8287
  <xsl:variable name="simple-table">
7103
- <xsl:call-template name="getSimpleTable"/>
8288
+ <xsl:call-template name="getSimpleTable">
8289
+ <xsl:with-param name="id" select="@id"/>
8290
+ </xsl:call-template>
7104
8291
  </xsl:variable>
7105
8292
  <xsl:variable name="cols-count" select="count(xalan:nodeset($simple-table)//tr[1]/td)"/>
7106
8293
  <xsl:if test="$cols-count = 2 and not(ancestor::*[local-name()='table'])">
@@ -7520,6 +8707,7 @@
7520
8707
 
7521
8708
 
7522
8709
 
8710
+
7523
8711
  <xsl:choose>
7524
8712
  <xsl:when test="$depth = 2">3</xsl:when>
7525
8713
  <xsl:otherwise>4</xsl:otherwise>
@@ -7792,7 +8980,7 @@
7792
8980
  <xsl:variable name="format">
7793
8981
  <xsl:choose>
7794
8982
  <xsl:when test="$type = 'arabic'">
7795
- 1.
8983
+ 1)
7796
8984
  </xsl:when>
7797
8985
  <xsl:when test="$type = 'alphabet'">
7798
8986
  a)
@@ -7839,6 +9027,11 @@
7839
9027
  </xsl:otherwise>
7840
9028
  </xsl:choose>
7841
9029
  </xsl:template><xsl:template match="*[local-name()='ul'] | *[local-name()='ol']" mode="list" name="list">
9030
+
9031
+ <xsl:apply-templates select="*[local-name() = 'name']">
9032
+ <xsl:with-param name="process">true</xsl:with-param>
9033
+ </xsl:apply-templates>
9034
+
7842
9035
  <fo:list-block xsl:use-attribute-sets="list-style">
7843
9036
 
7844
9037
 
@@ -7849,12 +9042,23 @@
7849
9042
 
7850
9043
 
7851
9044
 
9045
+ <xsl:if test="*[local-name() = 'name']">
9046
+ <xsl:attribute name="margin-top">0pt</xsl:attribute>
9047
+ </xsl:if>
9048
+
7852
9049
  <xsl:apply-templates select="node()[not(local-name() = 'note')]"/>
7853
9050
  </fo:list-block>
7854
9051
  <!-- <xsl:for-each select="./iho:note">
7855
9052
  <xsl:call-template name="note"/>
7856
9053
  </xsl:for-each> -->
7857
9054
  <xsl:apply-templates select="./*[local-name() = 'note']"/>
9055
+ </xsl:template><xsl:template match="*[local-name() = 'ol' or local-name() = 'ul']/*[local-name() = 'name']">
9056
+ <xsl:param name="process">false</xsl:param>
9057
+ <xsl:if test="$process = 'true'">
9058
+ <fo:block xsl:use-attribute-sets="list-name-style">
9059
+ <xsl:apply-templates/>
9060
+ </fo:block>
9061
+ </xsl:if>
7858
9062
  </xsl:template><xsl:template match="*[local-name()='li']">
7859
9063
  <fo:list-item xsl:use-attribute-sets="list-item-style">
7860
9064
  <xsl:copy-of select="@id"/>
@@ -8054,7 +9258,7 @@
8054
9258
  <!-- <fo:inline id="{@id}" font-size="1pt"/> -->
8055
9259
  <fo:inline id="{@id}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:inline>
8056
9260
  <!-- we need to add zero-width space, otherwise this fo:inline is missing in IF xml -->
8057
- <xsl:if test="not(following-sibling::node()[normalize-space() != ''])"> </xsl:if>
9261
+ <xsl:if test="not(following-sibling::node()[normalize-space() != ''])"><fo:inline font-size="1pt"> </fo:inline></xsl:if>
8058
9262
  </xsl:template><xsl:template match="*[local-name() = 'errata']">
8059
9263
  <!-- <row>
8060
9264
  <date>05-07-2013</date>
@@ -8125,7 +9329,7 @@
8125
9329
 
8126
9330
  </xsl:template><xsl:template match="*[local-name() = 'references'][not(@normative='true')]/*[local-name() = 'bibitem']" priority="2">
8127
9331
 
8128
- <!-- $namespace = 'csd' or $namespace = 'gb' or $namespace = 'iec' or $namespace = 'iso' or $namespace = 'jcgm' or $namespace = 'm3d' or
9332
+ <!-- $namespace = 'csd' or $namespace = 'gb' or $namespace = 'iec' or $namespace = 'ieee' or $namespace = 'iso' or $namespace = 'jcgm' or $namespace = 'm3d' or
8129
9333
  $namespace = 'mpfd' or $namespace = 'ogc' or $namespace = 'ogc-white-paper' -->
8130
9334
  <!-- Example: [1] ISO 9:1995, Information and documentation – Transliteration of Cyrillic characters into Latin characters – Slavic and non-Slavic languages -->
8131
9335
  <fo:list-block id="{@id}" xsl:use-attribute-sets="bibitem-non-normative-list-style">
@@ -8136,7 +9340,9 @@
8136
9340
 
8137
9341
  <xsl:value-of select="*[local-name()='docidentifier'][@type = 'metanorma-ordinal']"/>
8138
9342
  <xsl:if test="not(*[local-name()='docidentifier'][@type = 'metanorma-ordinal'])">
8139
- <xsl:number format="[1]"/>
9343
+
9344
+ <xsl:number format="[1]" count="*[local-name()='bibitem'][not(@hidden = 'true')]"/>
9345
+
8140
9346
  </xsl:if>
8141
9347
 
8142
9348
  </fo:inline>
@@ -8158,26 +9364,23 @@
8158
9364
  <xsl:if test=".//*[local-name() = 'fn']">
8159
9365
  <xsl:attribute name="line-height-shift-adjustment">disregard-shifts</xsl:attribute>
8160
9366
  </xsl:if>
9367
+
9368
+ <!-- display document identifier, not number [1] -->
8161
9369
  <xsl:variable name="docidentifier">
8162
9370
  <xsl:choose>
8163
9371
  <xsl:when test="*[local-name() = 'docidentifier']/@type = 'metanorma'"/>
8164
9372
  <xsl:otherwise><xsl:value-of select="*[local-name() = 'docidentifier'][not(@type = 'metanorma-ordinal')]"/></xsl:otherwise>
8165
9373
  </xsl:choose>
8166
9374
  </xsl:variable>
8167
- <fo:inline><xsl:value-of select="$docidentifier"/></fo:inline>
9375
+ <xsl:value-of select="$docidentifier"/>
9376
+
8168
9377
  <xsl:apply-templates select="*[local-name() = 'note']"/>
8169
- <xsl:if test="normalize-space($docidentifier) != ''">, </xsl:if>
8170
- <xsl:choose>
8171
- <xsl:when test="*[local-name() = 'title'][@type = 'main' and @language = $lang]">
8172
- <xsl:apply-templates select="*[local-name() = 'title'][@type = 'main' and @language = $lang]"/>
8173
- </xsl:when>
8174
- <xsl:when test="*[local-name() = 'title'][@type = 'main' and @language = 'en']">
8175
- <xsl:apply-templates select="*[local-name() = 'title'][@type = 'main' and @language = 'en']"/>
8176
- </xsl:when>
8177
- <xsl:otherwise>
8178
- <xsl:apply-templates select="*[local-name() = 'title']"/>
8179
- </xsl:otherwise>
8180
- </xsl:choose>
9378
+
9379
+ <xsl:if test="normalize-space($docidentifier) != '' and *[local-name() = 'formattedref']">
9380
+ <xsl:text>,</xsl:text>
9381
+ <xsl:text> </xsl:text>
9382
+ </xsl:if>
9383
+
8181
9384
  <xsl:apply-templates select="*[local-name() = 'formattedref']"/>
8182
9385
  <!-- end bibitem processing -->
8183
9386
 
@@ -8484,36 +9687,60 @@
8484
9687
 
8485
9688
 
8486
9689
 
9690
+ <xsl:if test="@type = 'editorial'">
9691
+ <xsl:attribute name="color">green</xsl:attribute>
9692
+ <xsl:attribute name="font-weight">normal</xsl:attribute>
9693
+
9694
+ <!-- <xsl:variable name="note-style">
9695
+ <style xsl:use-attribute-sets="note-style"></style>
9696
+ </xsl:variable>
9697
+ <xsl:for-each select="xalan:nodeset($note-style)//style/@*">
9698
+ <xsl:attribute name="{local-name()}"><xsl:value-of select="."/></xsl:attribute>
9699
+ </xsl:for-each> -->
9700
+ </xsl:if>
9701
+
9702
+
8487
9703
 
8488
9704
 
9705
+ <xsl:if test="@type != 'editorial'">
9706
+ <xsl:call-template name="displayAdmonitionName">
9707
+ <xsl:with-param name="sep"> — </xsl:with-param>
9708
+ </xsl:call-template>
9709
+ </xsl:if>
9710
+
8489
9711
 
8490
- <xsl:call-template name="displayAdmonitionName"/>
8491
- <xsl:text> — </xsl:text>
8492
9712
 
8493
9713
 
8494
9714
  <xsl:apply-templates select="node()[not(local-name() = 'name')]"/>
8495
9715
  </fo:block>
8496
9716
 
8497
9717
  </xsl:template><xsl:template name="displayAdmonitionName">
8498
-
9718
+ <xsl:param name="sep"/> <!-- Example: ' - ' -->
9719
+ <!-- <xsl:choose>
9720
+ <xsl:when test="$namespace = 'nist-cswp' or $namespace = 'nist-sp'">
9721
+ <xsl:choose>
9722
+ <xsl:when test="@type='important'"><xsl:apply-templates select="@type"/></xsl:when>
9723
+ <xsl:otherwise>
9724
+ <xsl:apply-templates select="*[local-name() = 'name']"/>
9725
+ </xsl:otherwise>
9726
+ </xsl:choose>
9727
+ </xsl:when>
9728
+ <xsl:otherwise>
8499
9729
  <xsl:apply-templates select="*[local-name() = 'name']"/>
8500
9730
  <xsl:if test="not(*[local-name() = 'name'])">
8501
9731
  <xsl:apply-templates select="@type"/>
8502
9732
  </xsl:if>
8503
-
8504
- </xsl:template><xsl:template match="*[local-name() = 'admonition']/*[local-name() = 'name']">
8505
- <xsl:apply-templates/>
8506
- </xsl:template><xsl:template match="*[local-name() = 'admonition']/@type">
8507
- <xsl:variable name="admonition_type_">
8508
- <xsl:call-template name="getLocalizedString">
8509
- <xsl:with-param name="key">admonition.<xsl:value-of select="."/></xsl:with-param>
8510
- </xsl:call-template>
9733
+ </xsl:otherwise>
9734
+ </xsl:choose> -->
9735
+ <xsl:variable name="name">
9736
+ <xsl:apply-templates select="*[local-name() = 'name']"/>
8511
9737
  </xsl:variable>
8512
- <xsl:variable name="admonition_type" select="normalize-space(java:toUpperCase(java:java.lang.String.new($admonition_type_)))"/>
8513
- <xsl:value-of select="$admonition_type"/>
8514
- <xsl:if test="$admonition_type = ''">
8515
- <xsl:value-of select="java:toUpperCase(java:java.lang.String.new(.))"/>
9738
+ <xsl:copy-of select="$name"/>
9739
+ <xsl:if test="normalize-space($name) != ''">
9740
+ <xsl:value-of select="$sep"/>
8516
9741
  </xsl:if>
9742
+ </xsl:template><xsl:template match="*[local-name() = 'admonition']/*[local-name() = 'name']">
9743
+ <xsl:apply-templates/>
8517
9744
  </xsl:template><xsl:template match="*[local-name() = 'admonition']/*[local-name() = 'p']">
8518
9745
  <!-- processing for admonition/p found in the template for 'p' -->
8519
9746
  <xsl:call-template name="paragraph"/>
@@ -8640,6 +9867,26 @@
8640
9867
  </xsl:if>
8641
9868
  </xsl:template>
8642
9869
 
9870
+ <!-- add id for table without id (for autolayout algorithm) -->
9871
+ <!-- <xsl:template match="*[local-name() = 'table'][not(@id)]" mode="update_xml_step2">
9872
+ <xsl:copy>
9873
+ <xsl:apply-templates select="@*" mode="update_xml_step2"/>
9874
+ <xsl:attribute name="id">_abc<xsl:value-of select="generate-id()"/></xsl:attribute>
9875
+
9876
+ <xsl:apply-templates select="node()" mode="update_xml_step2"/>
9877
+ </xsl:copy>
9878
+ </xsl:template> -->
9879
+
9880
+ <!-- add @reference for fn -->
9881
+ <xsl:template match="*[local-name() = 'fn'][not(@reference)]" mode="update_xml_step2">
9882
+ <xsl:copy>
9883
+ <xsl:apply-templates select="@*" mode="update_xml_step2"/>
9884
+ <xsl:attribute name="reference"><xsl:value-of select="generate-id(.)"/></xsl:attribute>
9885
+ <xsl:apply-templates select="node()" mode="update_xml_step2"/>
9886
+ </xsl:copy>
9887
+ </xsl:template>
9888
+
9889
+
8643
9890
  <!-- add @reference for bibitem/note, similar to fn/reference -->
8644
9891
  <xsl:template match="*[local-name() = 'bibitem']/*[local-name() = 'note']" mode="update_xml_step2">
8645
9892
  <xsl:copy>
@@ -8654,6 +9901,23 @@
8654
9901
  </xsl:template>
8655
9902
 
8656
9903
  <!-- END STEP2: add 'fn' after 'eref' and 'origin', if referenced to bibitem with 'note' = Withdrawn.' or 'Cancelled and replaced...' -->
9904
+
9905
+
9906
+ <!-- enclose sequence of 'char x' + 'combining char y' to <lang_none>xy</lang_none> -->
9907
+ <xsl:variable name="regex_combining_chars">(.[̀-ͯ])</xsl:variable>
9908
+ <xsl:variable name="element_name_lang_none">lang_none</xsl:variable>
9909
+ <xsl:variable name="tag_element_name_lang_none_open">###<xsl:value-of select="$element_name_lang_none"/>###</xsl:variable>
9910
+ <xsl:variable name="tag_element_name_lang_none_close">###/<xsl:value-of select="$element_name_lang_none"/>###</xsl:variable>
9911
+
9912
+ <xsl:template match="text()" mode="update_xml_step2">
9913
+ <xsl:variable name="text_" select="java:replaceAll(java:java.lang.String.new(.), $regex_combining_chars, concat($tag_element_name_lang_none_open,'$1',$tag_element_name_lang_none_close))"/>
9914
+ <xsl:call-template name="replace_text_tags">
9915
+ <xsl:with-param name="tag_open" select="$tag_element_name_lang_none_open"/>
9916
+ <xsl:with-param name="tag_close" select="$tag_element_name_lang_none_close"/>
9917
+ <xsl:with-param name="text" select="$text_"/>
9918
+ </xsl:call-template>
9919
+ </xsl:template>
9920
+
8657
9921
  <xsl:template match="@*|node()" mode="update_xml_enclose_keep-together_within-line">
8658
9922
  <xsl:copy>
8659
9923
  <xsl:apply-templates select="@*|node()" mode="update_xml_enclose_keep-together_within-line"/>
@@ -8749,6 +10013,8 @@
8749
10013
  </xsl:when>
8750
10014
  <xsl:otherwise><xsl:value-of select="$text"/></xsl:otherwise>
8751
10015
  </xsl:choose>
10016
+ </xsl:template><xsl:template match="*[local-name() = 'lang_none']">
10017
+ <fo:inline xml:lang="none"><xsl:value-of select="."/></fo:inline>
8752
10018
  </xsl:template><xsl:template name="printEdition">
8753
10019
  <xsl:variable name="edition_i18n" select="normalize-space((//*[contains(local-name(), '-standard')])[1]/*[local-name() = 'bibdata']/*[local-name() = 'edition'][normalize-space(@language) != ''])"/>
8754
10020
  <xsl:text> </xsl:text>
@@ -8855,6 +10121,27 @@
8855
10121
  </xsl:when>
8856
10122
  <xsl:otherwise><xsl:value-of select="$monthStr_"/></xsl:otherwise>
8857
10123
  </xsl:choose>
10124
+ </xsl:template><xsl:template name="getMonthLocalizedByNum">
10125
+ <xsl:param name="num"/>
10126
+ <xsl:variable name="monthStr">
10127
+ <xsl:choose>
10128
+ <xsl:when test="$num = '01'">january</xsl:when>
10129
+ <xsl:when test="$num = '02'">february</xsl:when>
10130
+ <xsl:when test="$num = '03'">march</xsl:when>
10131
+ <xsl:when test="$num = '04'">april</xsl:when>
10132
+ <xsl:when test="$num = '05'">may</xsl:when>
10133
+ <xsl:when test="$num = '06'">june</xsl:when>
10134
+ <xsl:when test="$num = '07'">july</xsl:when>
10135
+ <xsl:when test="$num = '08'">august</xsl:when>
10136
+ <xsl:when test="$num = '09'">september</xsl:when>
10137
+ <xsl:when test="$num = '10'">october</xsl:when>
10138
+ <xsl:when test="$num = '11'">november</xsl:when>
10139
+ <xsl:when test="$num = '12'">december</xsl:when>
10140
+ </xsl:choose>
10141
+ </xsl:variable>
10142
+ <xsl:call-template name="getLocalizedString">
10143
+ <xsl:with-param name="key">month_<xsl:value-of select="$monthStr"/></xsl:with-param>
10144
+ </xsl:call-template>
8858
10145
  </xsl:template><xsl:template name="insertKeywords">
8859
10146
  <xsl:param name="sorting" select="'true'"/>
8860
10147
  <xsl:param name="charAtEnd" select="'.'"/>
@@ -9056,6 +10343,7 @@
9056
10343
 
9057
10344
 
9058
10345
 
10346
+
9059
10347
 
9060
10348
 
9061
10349
 
@@ -9461,4 +10749,40 @@
9461
10749
  <xsl:value-of select="$value"/>
9462
10750
  </xsl:otherwise>
9463
10751
  </xsl:choose>
10752
+ </xsl:template><xsl:template match="*" mode="print_as_xml">
10753
+ <xsl:param name="level">0</xsl:param>
10754
+
10755
+ <fo:block margin-left="{2*$level}mm">
10756
+ <xsl:text>
10757
+ &lt;</xsl:text>
10758
+ <xsl:value-of select="local-name()"/>
10759
+ <xsl:for-each select="@*">
10760
+ <xsl:text> </xsl:text>
10761
+ <xsl:value-of select="local-name()"/>
10762
+ <xsl:text>="</xsl:text>
10763
+ <xsl:value-of select="."/>
10764
+ <xsl:text>"</xsl:text>
10765
+ </xsl:for-each>
10766
+ <xsl:text>&gt;</xsl:text>
10767
+
10768
+ <xsl:if test="not(*)">
10769
+ <fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline>
10770
+ <xsl:text>&lt;/</xsl:text>
10771
+ <xsl:value-of select="local-name()"/>
10772
+ <xsl:text>&gt;</xsl:text>
10773
+ </xsl:if>
10774
+ </fo:block>
10775
+
10776
+ <xsl:if test="*">
10777
+ <fo:block>
10778
+ <xsl:apply-templates mode="print_as_xml">
10779
+ <xsl:with-param name="level" select="$level + 1"/>
10780
+ </xsl:apply-templates>
10781
+ </fo:block>
10782
+ <fo:block margin-left="{2*$level}mm">
10783
+ <xsl:text>&lt;/</xsl:text>
10784
+ <xsl:value-of select="local-name()"/>
10785
+ <xsl:text>&gt;</xsl:text>
10786
+ </fo:block>
10787
+ </xsl:if>
9464
10788
  </xsl:template></xsl:stylesheet>