metanorma-iso 2.1.0 → 2.1.3

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