metanorma-nist 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f758b64420197c62c491fb933d62fe0dde91fec5d9955d83e830a474160bfed0
4
- data.tar.gz: 5b37fe1074ed0d62720af6e88dd08ffca4cb0c1f6eb1aeb256653e53c56c632e
3
+ metadata.gz: d4718e306a8584f427aa244ce10552c267eca1310510e99981582dc7d028ba3d
4
+ data.tar.gz: 4c976e465bfbd218bd3b02577ce2a2ee64b031cec48a5168a717d91f04cc6698
5
5
  SHA512:
6
- metadata.gz: 3e4d2b04a0ded879553796a90c5a88ca0b7537020b5b59c0b94823c504e0c8594ac35d5fa299efd454014b8a25c1a891b10c5e0a11847224e83e7f693780b264
7
- data.tar.gz: 62c4a654c0d35e6e39104be8627d260650e2392e1ce3b61871747ccced61c38cd38a83d05e37073d82c7de320eeeb9b52096fa4ec7bcfaa00f38bf1c57d77af1
6
+ metadata.gz: ca687ca19884fd7aa3d63e174811448a8bc2380a60721bdb39d87c76d6a93951223bb27f70f4f54d422476f82255606fcc798cb0f3734a937472391a09e551f1
7
+ data.tar.gz: 5cd16e3ed0dd3bd4f9b6655f50e184c6499fd784599436b3d81a2e422e90d69505ece3bcdc1b9f08118588ff03d14e48e784686baa523048279ac8b0dd575c69
@@ -26,13 +26,6 @@ jobs:
26
26
  run: |
27
27
  sudo gem install bundler --force
28
28
  bundle install --jobs 4 --retry 3
29
- - name: Use Node
30
- uses: actions/setup-node@v1
31
- with:
32
- node-version: '8'
33
- - name: Install Puppeteer
34
- run: |
35
- npm install -g puppeteer
36
29
  - name: Run specs
37
30
  run: |
38
31
  bundle exec rake
@@ -26,18 +26,11 @@ jobs:
26
26
  run: |
27
27
  gem install bundler
28
28
  bundle install --jobs 4 --retry 3
29
- - name: Use Node
30
- uses: actions/setup-node@v1
31
- with:
32
- node-version: '8'
33
- - name: Install Puppeteer
34
- run: |
35
- npm install -g puppeteer
36
29
  - name: Run specs
37
30
  run: |
38
31
  bundle exec rake
39
32
  - name: Trigger dependent repositories
40
- if: github.ref == 'refs/heads/master'
33
+ if: github.ref == 'refs/heads/master' && matrix.ruby == '2.6'
41
34
  env:
42
35
  GH_USERNAME: ${{ secrets.PAT_USERNAME }}
43
36
  GH_ACCESS_TOKEN: ${{ secrets.PAT_TOKEN }}
@@ -46,5 +39,5 @@ jobs:
46
39
  [[ -f ".github/workflows/dependent_repos.env" ]] && source .github/workflows/dependent_repos.env
47
40
  for repo in $DEPENDENT_REPOS
48
41
  do
49
- sh trigger-gh-actions.sh $ORGANISATION $repo $GH_USERNAME $GH_ACCESS_TOKEN $GITHUB_REPOSITORY
42
+ sh trigger-gh-actions.sh $ORGANISATION $repo $GH_USERNAME $GH_ACCESS_TOKEN $GITHUB_REPOSITORY "{ \"ref\": \"${GITHUB_REF}\" }"
50
43
  done
@@ -27,15 +27,7 @@ jobs:
27
27
  run: |
28
28
  gem install bundler
29
29
  bundle config --local path vendor/bundle
30
- bundle update
31
30
  bundle install --jobs 4 --retry 3
32
- - name: Use Node
33
- uses: actions/setup-node@v1
34
- with:
35
- node-version: '8'
36
- - name: Install Puppeteer
37
- run: |
38
- npm install -g puppeteer
39
31
  - name: Run specs
40
32
  run: |
41
33
  bundle exec rake
@@ -767,6 +767,8 @@
767
767
  <value>unchanged</value>
768
768
  <value>circulated</value>
769
769
  <value>adapted</value>
770
+ <value>vote-started</value>
771
+ <value>vote-ended</value>
770
772
  </choice>
771
773
  </define>
772
774
  <define name="bdate">
@@ -1019,38 +1021,63 @@
1019
1021
  </define>
1020
1022
  <define name="DocRelationType">
1021
1023
  <choice>
1022
- <value>obsoletes</value>
1023
- <value>obsoletedBy</value>
1024
- <value>supersedes</value>
1025
- <value>supersededBy</value>
1026
- <value>updates</value>
1027
- <value>updatedBy</value>
1028
- <value>complements</value>
1029
- <value>derivedFrom</value>
1030
- <value>translatedFrom</value>
1031
- <value>hasTranslation</value>
1032
- <value>adoptedFrom</value>
1033
- <value>equivalent</value>
1034
- <value>identical</value>
1035
- <value>nonequivalent</value>
1036
- <value>includedIn</value>
1037
1024
  <value>includes</value>
1038
- <value>instance</value>
1039
- <value>instanceOf</value>
1040
- <value>partOf</value>
1025
+ <value>includedIn</value>
1041
1026
  <value>hasPart</value>
1042
- <value>hasDraft</value>
1043
- <value>draftOf</value>
1027
+ <value>partOf</value>
1044
1028
  <value>merges</value>
1029
+ <value>mergedInto</value>
1045
1030
  <value>splits</value>
1046
- <value>amends</value>
1047
- <value>amendedBy</value>
1048
- <value>corrects</value>
1049
- <value>correctedBy</value>
1050
- <value>revises</value>
1051
- <value>revisedBy</value>
1031
+ <value>splitInto</value>
1032
+ <value>instance</value>
1033
+ <value>hasInstance</value>
1034
+ <value>exemplarOf</value>
1035
+ <value>hasExemplar</value>
1036
+ <value>manifestationOf</value>
1037
+ <value>hasManifestation</value>
1038
+ <value>reproductionOf</value>
1039
+ <value>hasReproduction</value>
1040
+ <value>reprintOf</value>
1041
+ <value>hasReprint</value>
1042
+ <value>expressionOf</value>
1043
+ <value>hasExpression</value>
1044
+ <value>translatedFrom</value>
1045
+ <value>hasTranslation</value>
1046
+ <value>arrangementOf</value>
1047
+ <value>hasArrangement</value>
1048
+ <value>abridgementOf</value>
1049
+ <value>hasAbridgement</value>
1050
+ <value>annotationOf</value>
1051
+ <value>hasAnnotation</value>
1052
+ <value>draftOf</value>
1053
+ <value>hasDraft</value>
1054
+ <value>editionOf</value>
1055
+ <value>hasEdition</value>
1056
+ <value>updates</value>
1057
+ <value>updatedBy</value>
1058
+ <value>derivedFrom</value>
1059
+ <value>derives</value>
1052
1060
  <value>describes</value>
1053
1061
  <value>describedBy</value>
1062
+ <value>catalogues</value>
1063
+ <value>cataloguedBy</value>
1064
+ <value>hasSuccessor</value>
1065
+ <value>successorOf</value>
1066
+ <value>adaptedFrom</value>
1067
+ <value>hasAdaptation</value>
1068
+ <value>adoptedFrom</value>
1069
+ <value>adoptedAs</value>
1070
+ <value>reviewOf</value>
1071
+ <value>hasReview</value>
1072
+ <value>commentaryOf</value>
1073
+ <value>hasCommentary</value>
1074
+ <value>related</value>
1075
+ <value>complements</value>
1076
+ <value>complementOf</value>
1077
+ <value>obsoletes</value>
1078
+ <value>obsoletedBy</value>
1079
+ <value>cited</value>
1080
+ <value>isCitedIn</value>
1054
1081
  </choice>
1055
1082
  </define>
1056
1083
  <define name="docrelation">
@@ -107,7 +107,7 @@ module Asciidoctor
107
107
  File.open(filename, "w:UTF-8") { |f| f.write(ret) }
108
108
  html_converter(node).convert filename unless node.attr("nodoc")
109
109
  word_converter(node).convert filename unless node.attr("nodoc")
110
- pdf_converter(node).convert filename unless node.attr("nodoc")
110
+ pdf_converter(node)&.convert filename unless node.attr("nodoc")
111
111
  end
112
112
  @log.write(@localdir + @filename + ".err") unless @novalid
113
113
  @files_to_delete.each { |f| FileUtils.rm f }
@@ -236,6 +236,7 @@ module Asciidoctor
236
236
  end
237
237
 
238
238
  def pdf_converter(node)
239
+ return nil if node.attr("no-pdf")
239
240
  IsoDoc::NIST::PdfConvert.new(html_extract_attributes(node))
240
241
  end
241
242
  end
@@ -46,7 +46,7 @@ module Asciidoctor
46
46
 
47
47
  def title_main(node, t, at)
48
48
  t.title(**attr_code(at.merge(type: "main"))) do |t1|
49
- t1 << Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("title-main") || node.title)
49
+ t1 << (Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("title-main")) || node.title)
50
50
  end
51
51
  node.attr("title-main-short") and
52
52
  t.title(**attr_code(at.merge(type: "short-title"))) do |t1|
@@ -163,7 +163,7 @@ module Asciidoctor
163
163
 
164
164
  def metadata_superseding_doc(node, xml)
165
165
  xml.relation **{ type: "obsoletedBy" } do |r|
166
- r.bibitem do |b|
166
+ r.bibitem **{ type: "standard" } do |b|
167
167
  metadata_superseding_titles(b, node)
168
168
  doi = node.attr("superseding-doi") and
169
169
  b.uri doi, **{ type: "doi" }
@@ -203,16 +203,21 @@ module Asciidoctor
203
203
 
204
204
  def metadata_superseding_titles(b, node)
205
205
  if node.attr("superseding-title")
206
- b.title Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("superseding-title")),
207
- **{ type: "main" }
206
+ b.title **{ type: "main" } do |t|
207
+ t << Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("superseding-title"))
208
+ end
208
209
  node.attr("superseding-subtitle") and
209
- b.title Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("superseding-subtitle")),
210
- **{ type: "subtitle" }
210
+ b.title **{ type: "subtitle" } do |t|
211
+ t << Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("superseding-subtitle"))
212
+ end
211
213
  else
212
- b.title Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("title-main") || node.title),
213
- **{ type: "main" }
214
+ b.title **{ type: "main" } do |t|
215
+ t << (Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("title-main")) || node.title)
216
+ end
214
217
  node.attr("title-sub") and
215
- b.title Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("title-sub")), **{ type: "subtitle" }
218
+ b.title **{ type: "subtitle" } do |t|
219
+ t << Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("title-sub"))
220
+ end
216
221
  end
217
222
  end
218
223
 
@@ -303,8 +303,23 @@
303
303
  <ref name="paragraph"/>
304
304
  </element>
305
305
  </define>
306
+ <define name="TextElement" combine="choice">
307
+ <ref name="concept"/>
308
+ </define>
306
309
  </include>
307
310
  <!-- end overrides -->
311
+ <define name="concept">
312
+ <element name="concept">
313
+ <optional>
314
+ <attribute name="term"/>
315
+ </optional>
316
+ <choice>
317
+ <ref name="eref"/>
318
+ <ref name="xref"/>
319
+ <ref name="termref"/>
320
+ </choice>
321
+ </element>
322
+ </define>
308
323
  <define name="BasicBlock" combine="choice">
309
324
  <choice>
310
325
  <ref name="requirement"/>
@@ -911,7 +926,10 @@
911
926
  </define>
912
927
  <define name="origin">
913
928
  <element name="origin">
914
- <ref name="erefType"/>
929
+ <choice>
930
+ <ref name="erefType"/>
931
+ <ref name="termref"/>
932
+ </choice>
915
933
  </element>
916
934
  </define>
917
935
  <define name="modification">
@@ -919,6 +937,15 @@
919
937
  <ref name="paragraph"/>
920
938
  </element>
921
939
  </define>
940
+ <define name="termref">
941
+ <element name="termref">
942
+ <attribute name="base"/>
943
+ <attribute name="target"/>
944
+ <optional>
945
+ <text/>
946
+ </optional>
947
+ </element>
948
+ </define>
922
949
  <define name="structuredidentifier">
923
950
  <element name="structuredidentifier">
924
951
  <optional>
@@ -178,7 +178,7 @@ module IsoDoc
178
178
  def get_linkend(node)
179
179
  link = anchor_linkend(node, docid_l10n(node["target"] || wrap_brackets(node['citeas'])))
180
180
  link += eref_localities(node.xpath(ns("./locality | ./localityStack")), link)
181
- contents = node.children.select { |c| %w{locality localityStack}.include? c.name }
181
+ contents = node.children.select { |c| !%w{locality localityStack}.include? c.name }
182
182
  return link if contents.nil? || contents.empty?
183
183
  Nokogiri::XML::NodeSet.new(node.document, contents).to_xml
184
184
  # so not <origin bibitemid="ISO7301" citeas="ISO 7301">
@@ -0,0 +1,1246 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:iso="http://riboseinc.com/isoxml" xmlns:iec="http://riboseinc.com/isoxml" xmlns:itu="https://open.ribose.com/standards/itu" xmlns:nist="http://www.nist.gov/metanorma" xmlns:un="https://open.ribose.com/standards/unece" xmlns:csd="https://www.calconnect.org/standards/csd" xmlns:mathml="http://www.w3.org/1998/Math/MathML" xmlns:xalan="http://xml.apache.org/xalan" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions" version="1.0">
3
+
4
+ <xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable>
5
+ <xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
6
+
7
+ <xsl:variable name="en_chars" select="concat($lower,$upper,',.`1234567890-=~!@#$%^*()_+[]{}\|?/')"/>
8
+
9
+ <xsl:variable name="linebreak" select="'&#x2028;'"/>
10
+
11
+ <xsl:variable name="namespace" select="substring-before(name(/*), '-')"/>
12
+
13
+ <xsl:variable name="unece-rec">
14
+ <xsl:if test="$namespace = 'unece' and /un:unece-standard/un:bibdata/un:ext/un:doctype = 'recommendation'">true</xsl:if>
15
+ </xsl:variable>
16
+
17
+ <xsl:template match="text()">
18
+ <xsl:value-of select="."/>
19
+ </xsl:template>
20
+
21
+ <xsl:template match="*[local-name()='br']">
22
+ <xsl:value-of select="$linebreak"/>
23
+ </xsl:template>
24
+
25
+ <xsl:template match="*[local-name()='td']//text() | *[local-name()='th']//text()" priority="1">
26
+ <xsl:call-template name="add-zero-spaces"/>
27
+ </xsl:template>
28
+
29
+
30
+ <xsl:template match="*[local-name()='table']">
31
+
32
+ <xsl:variable name="simple-table">
33
+ <!-- <xsl:copy> -->
34
+ <xsl:call-template name="getSimpleTable"/>
35
+ <!-- </xsl:copy> -->
36
+ </xsl:variable>
37
+
38
+ <!-- DEBUG -->
39
+ <!-- SourceTable=<xsl:copy-of select="current()"/>EndSourceTable -->
40
+ <!-- Simpletable=<xsl:copy-of select="$simple-table"/>EndSimpltable -->
41
+
42
+ <!-- <xsl:variable name="namespace" select="substring-before(name(/*), '-')"/> -->
43
+ <xsl:if test="$namespace = 'itu'">
44
+ <fo:block space-before="18pt">&#xA0;</fo:block>
45
+ </xsl:if>
46
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
47
+ <fo:block space-before="6pt">&#xA0;</fo:block>
48
+ </xsl:if>
49
+ <xsl:choose>
50
+ <xsl:when test="@unnumbered = 'true'"></xsl:when>
51
+ <xsl:otherwise>
52
+ <xsl:choose>
53
+ <xsl:when test="$namespace = 'unece' and ancestor::*[local-name() = 'sections'] and $unece-rec = 'true'">
54
+ </xsl:when>
55
+ <xsl:otherwise>
56
+ <fo:block font-weight="bold" text-align="center" margin-bottom="6pt" keep-with-next="always">
57
+ <xsl:if test="$namespace = 'nist'">
58
+ <xsl:attribute name="font-family">Arial</xsl:attribute>
59
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
60
+ </xsl:if>
61
+ <xsl:if test="$namespace = 'unece' and $unece-rec = 'true'">
62
+ <xsl:attribute name="text-align">left</xsl:attribute>
63
+ <xsl:attribute name="margin-top">12pt</xsl:attribute>
64
+ <xsl:attribute name="margin-bottom">0pt</xsl:attribute>
65
+ </xsl:if>
66
+ <xsl:if test="$namespace = 'unece' and $unece-rec != 'true'">
67
+ <xsl:attribute name="font-weight">normal</xsl:attribute>
68
+ <xsl:attribute name="font-size">11pt</xsl:attribute>
69
+ </xsl:if>
70
+ <xsl:text>Table </xsl:text>
71
+ <xsl:choose>
72
+ <xsl:when test="ancestor::*[local-name()='executivesummary']"> <!-- NIST -->
73
+ <xsl:text>ES-</xsl:text><xsl:number format="1" count="*[local-name()='executivesummary']//*[local-name()='table'][not(@unnumbered) or @unnumbered != 'true']"/>
74
+ </xsl:when>
75
+ <xsl:when test="ancestor::*[local-name()='annex']">
76
+ <xsl:choose>
77
+ <xsl:when test="$namespace = 'iso' or $namespace = 'iec'">
78
+ <xsl:number format="A." count="*[local-name()='annex']"/><xsl:number format="1"/>
79
+ </xsl:when>
80
+ <xsl:when test="$namespace = 'itu'">
81
+ <xsl:choose>
82
+ <xsl:when test="ancestor::itu:annex[@obligation = 'informative']">
83
+ <xsl:variable name="annex-id" select="ancestor::itu:annex/@id"/>
84
+ <!-- Table in Appendix -->
85
+ <xsl:number format="I-" count="itu:annex[@obligation = 'informative']"/>
86
+ <xsl:number format="1" level="any" count="itu:table[(not(@unnumbered) or @unnumbered != 'true') and ancestor::itu:annex[@id = $annex-id]]"/>
87
+ </xsl:when>
88
+ <!-- Table in Annex -->
89
+ <xsl:when test="ancestor::itu:annex[not(@obligation) or @obligation != 'informative']">
90
+ <xsl:variable name="annex-id" select="ancestor::itu:annex/@id"/>
91
+ <xsl:number format="A-" count="itu:annex[not(@obligation) or @obligation != 'informative']"/>
92
+ <xsl:number format="1" level="any" count="itu:table[(not(@unnumbered) or @unnumbered != 'true') and ancestor::itu:annex[@id = $annex-id]]"/>
93
+ </xsl:when>
94
+ </xsl:choose>
95
+ </xsl:when>
96
+ <xsl:when test="$namespace = 'nist'">
97
+ <xsl:variable name="annex-id" select="ancestor::*[local-name()='annex']/@id"/>
98
+ <xsl:number format="A-" count="*[local-name()='annex']"/>
99
+ <xsl:number format="1" level="any" count="*[local-name()='table'][not(@unnumbered) or @unnumbered != 'true'][ancestor::*[local-name()='annex'][@id = $annex-id]]"/>
100
+ </xsl:when>
101
+ <xsl:when test="$namespace = 'unece' and $unece-rec = 'true'">
102
+ <!-- <xsl:variable name="annex-id" select="ancestor::*[local-name()='annex']/@id"/>
103
+ <xsl:number format="I." count="*[local-name()='annex']"/> -->
104
+ <xsl:text>A</xsl:text> <!-- 'A' means Annex -->
105
+ <xsl:number format="1" level="any" count="*[local-name()='table'][not(@unnumbered) or @unnumbered != 'true'][ancestor::*[local-name()='annex']]"/> <!-- [@id = $annex-id] -->
106
+ </xsl:when>
107
+ <xsl:when test="$namespace = 'unece'">
108
+ <xsl:variable name="annex-id" select="ancestor::*[local-name()='annex']/@id"/>
109
+ <xsl:number format="I." count="*[local-name()='annex']"/>
110
+ <xsl:number format="1" level="any" count="*[local-name()='table'][not(@unnumbered) or @unnumbered != 'true'][ancestor::*[local-name()='annex'][@id = $annex-id]]"/>
111
+ </xsl:when>
112
+ <xsl:otherwise>
113
+ <xsl:number format="A-1" level="multiple" count="*[local-name()='annex'] | *[local-name()='table'][not(@unnumbered) or @unnumbered != 'true'] "/>
114
+ </xsl:otherwise>
115
+ </xsl:choose>
116
+ </xsl:when>
117
+ <xsl:otherwise>
118
+ <!-- <xsl:number format="1"/> -->
119
+ <xsl:number format="A." count="*[local-name()='annex']"/>
120
+ <!-- <xsl:number format="1" level="any" count="*[local-name()='sections']//*[local-name()='table'][not(@unnumbered) or @unnumbered != 'true']"/> -->
121
+ <xsl:number format="1" level="any" count="//*[local-name()='table']
122
+ [not(ancestor::*[local-name()='annex']) and not(ancestor::*[local-name()='executivesummary'])]
123
+ [not(@unnumbered) or @unnumbered != 'true']"/>
124
+ </xsl:otherwise>
125
+ </xsl:choose>
126
+ <xsl:if test="*[local-name()='name']">
127
+ <xsl:choose>
128
+ <xsl:when test="$namespace = 'unece' and $unece-rec = 'true'"><xsl:text>. </xsl:text></xsl:when>
129
+ <xsl:otherwise>
130
+ <xsl:text> — </xsl:text>
131
+ </xsl:otherwise>
132
+ </xsl:choose>
133
+ <xsl:apply-templates select="*[local-name()='name']" mode="process"/>
134
+ </xsl:if>
135
+ </fo:block>
136
+ </xsl:otherwise>
137
+ </xsl:choose>
138
+ <xsl:call-template name="fn_name_display"/>
139
+ </xsl:otherwise>
140
+ </xsl:choose>
141
+
142
+ <xsl:variable name="cols-count" select="count(xalan:nodeset($simple-table)//tr[1]/td)"/>
143
+
144
+ <!-- <xsl:variable name="cols-count">
145
+ <xsl:choose>
146
+ <xsl:when test="*[local-name()='thead']">
147
+ <xsl:call-template name="calculate-columns-numbers">
148
+ <xsl:with-param name="table-row" select="*[local-name()='thead']/*[local-name()='tr'][1]"/>
149
+ </xsl:call-template>
150
+ </xsl:when>
151
+ <xsl:otherwise>
152
+ <xsl:call-template name="calculate-columns-numbers">
153
+ <xsl:with-param name="table-row" select="*[local-name()='tbody']/*[local-name()='tr'][1]"/>
154
+ </xsl:call-template>
155
+ </xsl:otherwise>
156
+ </xsl:choose>
157
+ </xsl:variable> -->
158
+ <!-- cols-count=<xsl:copy-of select="$cols-count"/> -->
159
+ <!-- cols-count2=<xsl:copy-of select="$cols-count2"/> -->
160
+
161
+
162
+
163
+ <xsl:variable name="colwidths">
164
+ <xsl:call-template name="calculate-column-widths">
165
+ <xsl:with-param name="cols-count" select="$cols-count"/>
166
+ <xsl:with-param name="table" select="$simple-table"/>
167
+ </xsl:call-template>
168
+ </xsl:variable>
169
+
170
+ <xsl:variable name="colwidths2">
171
+ <xsl:call-template name="calculate-column-widths">
172
+ <xsl:with-param name="cols-count" select="$cols-count"/>
173
+ </xsl:call-template>
174
+ </xsl:variable>
175
+
176
+ <!-- cols-count=<xsl:copy-of select="$cols-count"/>
177
+ colwidthsNew=<xsl:copy-of select="$colwidths"/>
178
+ colwidthsOld=<xsl:copy-of select="$colwidths2"/>z -->
179
+
180
+ <xsl:variable name="margin-left">
181
+ <xsl:choose>
182
+ <xsl:when test="sum(xalan:nodeset($colwidths)//column) &gt; 75">15</xsl:when>
183
+ <xsl:otherwise>0</xsl:otherwise>
184
+ </xsl:choose>
185
+ </xsl:variable>
186
+
187
+ <fo:block-container margin-left="-{$margin-left}mm" margin-right="-{$margin-left}mm">
188
+ <xsl:if test="$namespace = 'itu' or $namespace = 'nist'">
189
+ <xsl:attribute name="space-after">6pt</xsl:attribute>
190
+ </xsl:if>
191
+ <xsl:if test="$namespace='unece'">
192
+ <xsl:attribute name="space-after">12pt</xsl:attribute>
193
+ </xsl:if>
194
+ <fo:table id="{@id}" table-layout="fixed" width="100%" margin-left="{$margin-left}mm" margin-right="{$margin-left}mm">
195
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
196
+ <xsl:attribute name="border">1.5pt solid black</xsl:attribute>
197
+ </xsl:if>
198
+ <xsl:choose>
199
+ <xsl:when test="$namespace = 'nist' and (ancestor::*[local-name()='annex'] or ancestor::*[local-name()='preface'])">
200
+ <xsl:attribute name="font-family">Times New Roman</xsl:attribute>
201
+ <xsl:attribute name="font-size">10pt</xsl:attribute>
202
+ </xsl:when>
203
+ <xsl:when test="$namespace = 'nist'">
204
+ <xsl:attribute name="font-family">Times New Roman</xsl:attribute>
205
+ <xsl:attribute name="font-size">12pt</xsl:attribute>
206
+ </xsl:when>
207
+ <xsl:when test="$namespace = 'unece' and ancestor::*[local-name()='sections'] and $unece-rec = 'true'">
208
+ <xsl:attribute name="border-top">1.5pt solid black</xsl:attribute>
209
+ <xsl:attribute name="border-bottom">1.5pt solid black</xsl:attribute>
210
+ </xsl:when>
211
+ <xsl:otherwise>
212
+ <xsl:attribute name="font-size">10pt</xsl:attribute>
213
+ </xsl:otherwise>
214
+ </xsl:choose>
215
+ <xsl:for-each select="xalan:nodeset($colwidths)//column">
216
+ <xsl:choose>
217
+ <xsl:when test=". = 1">
218
+ <fo:table-column column-width="proportional-column-width(2)"/>
219
+ </xsl:when>
220
+ <xsl:otherwise>
221
+ <fo:table-column column-width="proportional-column-width({.})"/>
222
+ </xsl:otherwise>
223
+ </xsl:choose>
224
+ </xsl:for-each>
225
+ <xsl:apply-templates />
226
+ </fo:table>
227
+ <!-- <xsl:if test="$namespace = 'itu' or $namespace = 'nist'">
228
+ <fo:block space-after="6pt">&#xA0;</fo:block>
229
+ </xsl:if> -->
230
+ </fo:block-container>
231
+ </xsl:template>
232
+
233
+ <xsl:template match="*[local-name()='table']/*[local-name()='name']"/>
234
+ <xsl:template match="*[local-name()='table']/*[local-name()='name']" mode="process">
235
+ <xsl:apply-templates />
236
+ </xsl:template>
237
+
238
+
239
+
240
+ <xsl:template name="calculate-columns-numbers">
241
+ <xsl:param name="table-row" />
242
+ <xsl:variable name="columns-count" select="count($table-row/*)"/>
243
+ <xsl:variable name="sum-colspans" select="sum($table-row/*/@colspan)"/>
244
+ <xsl:variable name="columns-with-colspan" select="count($table-row/*[@colspan])"/>
245
+ <xsl:value-of select="$columns-count + $sum-colspans - $columns-with-colspan"/>
246
+ </xsl:template>
247
+
248
+ <xsl:template name="calculate-column-widths">
249
+ <xsl:param name="table"/>
250
+ <xsl:param name="cols-count"/>
251
+ <xsl:param name="curr-col" select="1"/>
252
+ <xsl:param name="width" select="0"/>
253
+
254
+ <xsl:if test="$curr-col &lt;= $cols-count">
255
+ <xsl:variable name="widths">
256
+ <xsl:choose>
257
+ <xsl:when test="not($table)">
258
+ <xsl:for-each select="*[local-name()='thead']//*[local-name()='tr']">
259
+ <xsl:variable name="words">
260
+ <xsl:call-template name="tokenize">
261
+ <xsl:with-param name="text" select="translate(*[local-name()='th'][$curr-col],'- —', ' ')"/>
262
+ </xsl:call-template>
263
+ </xsl:variable>
264
+ <xsl:variable name="max_length">
265
+ <xsl:call-template name="max_length">
266
+ <xsl:with-param name="words" select="xalan:nodeset($words)"/>
267
+ </xsl:call-template>
268
+ </xsl:variable>
269
+ <width>
270
+ <xsl:value-of select="$max_length"/>
271
+ </width>
272
+ </xsl:for-each>
273
+ <xsl:for-each select="*[local-name()='tbody']//*[local-name()='tr']">
274
+ <xsl:variable name="words">
275
+ <xsl:call-template name="tokenize">
276
+ <xsl:with-param name="text" select="translate(*[local-name()='td'][$curr-col],'- —', ' ')"/>
277
+ </xsl:call-template>
278
+ </xsl:variable>
279
+ <xsl:variable name="max_length">
280
+ <xsl:call-template name="max_length">
281
+ <xsl:with-param name="words" select="xalan:nodeset($words)"/>
282
+ </xsl:call-template>
283
+ </xsl:variable>
284
+ <width>
285
+ <xsl:value-of select="$max_length"/>
286
+ </width>
287
+
288
+ </xsl:for-each>
289
+ </xsl:when>
290
+ <xsl:otherwise>
291
+ <xsl:for-each select="xalan:nodeset($table)//tr">
292
+ <xsl:variable name="words">
293
+ <xsl:call-template name="tokenize">
294
+ <xsl:with-param name="text" select="translate(td[$curr-col],'- —', ' ')"/>
295
+ </xsl:call-template>
296
+ </xsl:variable>
297
+ <xsl:variable name="max_length">
298
+ <xsl:call-template name="max_length">
299
+ <xsl:with-param name="words" select="xalan:nodeset($words)"/>
300
+ </xsl:call-template>
301
+ </xsl:variable>
302
+ <width>
303
+ <xsl:variable name="divider">
304
+ <xsl:choose>
305
+ <xsl:when test="td[$curr-col]/@divide">
306
+ <xsl:value-of select="td[$curr-col]/@divide"/>
307
+ </xsl:when>
308
+ <xsl:otherwise>1</xsl:otherwise>
309
+ </xsl:choose>
310
+ </xsl:variable>
311
+ <xsl:value-of select="$max_length div $divider"/>
312
+ </width>
313
+
314
+ </xsl:for-each>
315
+
316
+ </xsl:otherwise>
317
+ </xsl:choose>
318
+ </xsl:variable>
319
+
320
+
321
+ <column>
322
+ <xsl:for-each select="xalan:nodeset($widths)//width">
323
+ <xsl:sort select="." data-type="number" order="descending"/>
324
+ <xsl:if test="position()=1">
325
+ <xsl:value-of select="."/>
326
+ </xsl:if>
327
+ </xsl:for-each>
328
+ </column>
329
+ <xsl:call-template name="calculate-column-widths">
330
+ <xsl:with-param name="cols-count" select="$cols-count"/>
331
+ <xsl:with-param name="curr-col" select="$curr-col +1"/>
332
+ <xsl:with-param name="table" select="$table"/>
333
+ </xsl:call-template>
334
+ </xsl:if>
335
+ </xsl:template>
336
+
337
+ <!-- for debug purpose only -->
338
+ <xsl:template match="*[local-name()='table2']"/>
339
+
340
+ <xsl:template match="*[local-name()='thead']"/>
341
+
342
+ <xsl:template match="*[local-name()='thead']" mode="process">
343
+ <!-- <fo:table-header font-weight="bold">
344
+ <xsl:apply-templates />
345
+ </fo:table-header> -->
346
+ <xsl:apply-templates />
347
+ </xsl:template>
348
+
349
+ <xsl:template match="*[local-name()='tfoot']"/>
350
+
351
+ <xsl:template match="*[local-name()='tfoot']" mode="process">
352
+ <xsl:apply-templates/>
353
+ </xsl:template>
354
+
355
+ <xsl:template match="*[local-name()='tbody']">
356
+ <xsl:variable name="cols-count">
357
+ <xsl:choose>
358
+ <xsl:when test="../*[local-name()='thead']">
359
+ <!-- <xsl:value-of select="count(../*[local-name()='thead']/*[local-name()='tr']/*[local-name()='th'])"/> -->
360
+ <xsl:call-template name="calculate-columns-numbers">
361
+ <xsl:with-param name="table-row" select="../*[local-name()='thead']/*[local-name()='tr'][1]"/>
362
+ </xsl:call-template>
363
+ </xsl:when>
364
+ <xsl:otherwise>
365
+ <!-- <xsl:value-of select="count(./*[local-name()='tr'][1]/*[local-name()='td'])"/> -->
366
+ <xsl:call-template name="calculate-columns-numbers">
367
+ <xsl:with-param name="table-row" select="./*[local-name()='tr'][1]"/>
368
+ </xsl:call-template>
369
+ </xsl:otherwise>
370
+ </xsl:choose>
371
+ </xsl:variable>
372
+
373
+ <fo:table-body>
374
+ <xsl:apply-templates select="../*[local-name()='thead']" mode="process"/>
375
+ <xsl:apply-templates />
376
+ <xsl:apply-templates select="../*[local-name()='tfoot']" mode="process"/>
377
+ <!-- if there are note(s) or fn(s) then create footer row -->
378
+ <xsl:if test="../*[local-name()='note'] or ..//*[local-name()='fn'][local-name(..) != 'name']">
379
+ <fo:table-row>
380
+ <fo:table-cell border="solid black 1pt" padding-left="1mm" padding-right="1mm" padding-top="1mm" number-columns-spanned="{$cols-count}">
381
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
382
+ <xsl:attribute name="border-top">solid black 0pt</xsl:attribute>
383
+ </xsl:if>
384
+ <!-- fn will be processed inside 'note' processing -->
385
+ <xsl:apply-templates select="../*[local-name()='note']" mode="process"/>
386
+ <!-- fn processing -->
387
+ <xsl:call-template name="fn_display" />
388
+
389
+ </fo:table-cell>
390
+ </fo:table-row>
391
+
392
+ </xsl:if>
393
+ </fo:table-body>
394
+ </xsl:template>
395
+
396
+ <!--
397
+ <xsl:template match="*[local-name()='thead']/*[local-name()='tr']">
398
+ <fo:table-row font-weight="bold" min-height="4mm" >
399
+ <xsl:apply-templates />
400
+ </fo:table-row>
401
+ </xsl:template> -->
402
+
403
+ <xsl:template match="*[local-name()='tr']">
404
+ <xsl:variable name="parent-name" select="local-name(..)"/>
405
+ <!-- <xsl:variable name="namespace" select="substring-before(name(/*), '-')"/> -->
406
+ <fo:table-row min-height="4mm">
407
+ <xsl:if test="$parent-name = 'thead'">
408
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
409
+ <xsl:if test="$namespace = 'nist'">
410
+ <xsl:attribute name="font-family">Arial</xsl:attribute>
411
+ <xsl:attribute name="font-size">10pt</xsl:attribute>
412
+ </xsl:if>
413
+ <xsl:choose>
414
+ <xsl:when test="($namespace = 'iso' or $namespace = 'iec') and position() = 1">
415
+ <xsl:attribute name="border-top">solid black 1.5pt</xsl:attribute>
416
+ <xsl:attribute name="border-bottom">solid black 1pt</xsl:attribute>
417
+ </xsl:when>
418
+ <xsl:when test="($namespace = 'iso' or $namespace = 'iec') and position() = last()">
419
+ <xsl:attribute name="border-top">solid black 1pt</xsl:attribute>
420
+ <xsl:attribute name="border-bottom">solid black 1.5pt</xsl:attribute>
421
+ </xsl:when>
422
+ <xsl:when test="$namespace = 'iso' or $namespace = 'iec'">
423
+ <xsl:attribute name="border-top">solid black 1pt</xsl:attribute>
424
+ <xsl:attribute name="border-bottom">solid black 1pt</xsl:attribute>
425
+ </xsl:when>
426
+ </xsl:choose>
427
+ </xsl:if>
428
+ <xsl:if test="$parent-name = 'tfoot'">
429
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
430
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
431
+ <xsl:attribute name="border-left">solid black 1pt</xsl:attribute>
432
+ <xsl:attribute name="border-right">solid black 1pt</xsl:attribute>
433
+ </xsl:if>
434
+ </xsl:if>
435
+ <xsl:apply-templates />
436
+ </fo:table-row>
437
+ </xsl:template>
438
+
439
+
440
+ <xsl:template match="*[local-name()='th']">
441
+ <fo:table-cell text-align="{@align}" font-weight="bold" border="solid black 1pt" padding-left="1mm" display-align="center">
442
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
443
+ <xsl:attribute name="padding-top">1mm</xsl:attribute>
444
+ </xsl:if>
445
+ <xsl:if test="$namespace = 'nist'">
446
+ <xsl:attribute name="text-align">center</xsl:attribute>
447
+ <xsl:attribute name="background-color">black</xsl:attribute>
448
+ <xsl:attribute name="color">white</xsl:attribute>
449
+ </xsl:if>
450
+ <xsl:if test="$namespace = 'unece' and ancestor::*[local-name()='sections'] and $unece-rec = 'true'">
451
+ <xsl:attribute name="border">solid black 0pt</xsl:attribute>
452
+ <xsl:attribute name="display-align">before</xsl:attribute>
453
+ <xsl:attribute name="padding-top">1mm</xsl:attribute>
454
+ </xsl:if>
455
+ <xsl:if test="$namespace = 'unece' and ancestor::*[local-name()='annex'] and $unece-rec = 'true'">
456
+ <xsl:attribute name="font-weight">normal</xsl:attribute>
457
+ <xsl:attribute name="padding-top">1mm</xsl:attribute>
458
+ <xsl:attribute name="background-color">rgb(218, 218, 218)</xsl:attribute>
459
+ <xsl:if test="starts-with(text(), '1') or starts-with(text(), '2') or starts-with(text(), '3') or starts-with(text(), '4') or starts-with(text(), '5') or
460
+ starts-with(text(), '6') or starts-with(text(), '7') or starts-with(text(), '8') or starts-with(text(), '9')">
461
+ <xsl:attribute name="color">rgb(46, 116, 182)</xsl:attribute>
462
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
463
+ </xsl:if>
464
+ </xsl:if>
465
+ <xsl:if test="@colspan">
466
+ <xsl:attribute name="number-columns-spanned">
467
+ <xsl:value-of select="@colspan"/>
468
+ </xsl:attribute>
469
+ </xsl:if>
470
+ <xsl:if test="@rowspan">
471
+ <xsl:attribute name="number-rows-spanned">
472
+ <xsl:value-of select="@rowspan"/>
473
+ </xsl:attribute>
474
+ </xsl:if>
475
+ <fo:block>
476
+ <xsl:apply-templates />
477
+ </fo:block>
478
+ </fo:table-cell>
479
+ </xsl:template>
480
+
481
+
482
+ <xsl:template match="*[local-name()='td']">
483
+ <fo:table-cell text-align="{@align}" display-align="center" border="solid black 1pt" padding-left="1mm">
484
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'"> <!-- and ancestor::*[local-name() = 'thead'] -->
485
+ <xsl:attribute name="padding-top">0.5mm</xsl:attribute>
486
+ </xsl:if>
487
+ <xsl:if test="($namespace = 'iso' or $namespace = 'iec') and ancestor::*[local-name() = 'tfoot']">
488
+ <xsl:attribute name="border">solid black 0</xsl:attribute>
489
+ </xsl:if>
490
+ <xsl:if test="$namespace = 'unece' and ancestor::*[local-name()='sections'] and $unece-rec = 'true'">
491
+ <xsl:attribute name="border">solid black 0pt</xsl:attribute>
492
+ <xsl:attribute name="padding-top">1mm</xsl:attribute>
493
+ </xsl:if>
494
+ <xsl:if test="@colspan">
495
+ <xsl:attribute name="number-columns-spanned">
496
+ <xsl:value-of select="@colspan"/>
497
+ </xsl:attribute>
498
+ </xsl:if>
499
+ <xsl:if test="@rowspan">
500
+ <xsl:attribute name="number-rows-spanned">
501
+ <xsl:value-of select="@rowspan"/>
502
+ </xsl:attribute>
503
+ </xsl:if>
504
+ <fo:block>
505
+ <xsl:apply-templates />
506
+ </fo:block>
507
+ <!-- <xsl:choose>
508
+ <xsl:when test="count(*) = 1 and *[local-name() = 'p']">
509
+ <xsl:apply-templates />
510
+ </xsl:when>
511
+ <xsl:otherwise>
512
+ <fo:block>
513
+ <xsl:apply-templates />
514
+ </fo:block>
515
+ </xsl:otherwise>
516
+ </xsl:choose> -->
517
+
518
+
519
+ </fo:table-cell>
520
+ </xsl:template>
521
+
522
+
523
+ <xsl:template match="*[local-name()='table']/*[local-name()='note']"/>
524
+ <xsl:template match="*[local-name()='table']/*[local-name()='note']" mode="process">
525
+
526
+
527
+ <fo:block font-size="10pt" margin-bottom="12pt">
528
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
529
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
530
+ <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
531
+ </xsl:if>
532
+ <fo:inline padding-right="2mm">NOTE <xsl:number format="1 "/></fo:inline>
533
+ <xsl:apply-templates mode="process"/>
534
+ </fo:block>
535
+
536
+ </xsl:template>
537
+
538
+ <xsl:template match="*[local-name()='table']/*[local-name()='note']/*[local-name()='p']" mode="process">
539
+ <xsl:apply-templates/>
540
+ </xsl:template>
541
+
542
+
543
+ <xsl:template name="fn_display">
544
+ <xsl:variable name="references">
545
+ <xsl:for-each select="..//*[local-name()='fn'][local-name(..) != 'name']">
546
+ <fn reference="{@reference}" id="{@reference}_{ancestor::*[@id][1]/@id}">
547
+ <xsl:apply-templates />
548
+ </fn>
549
+ </xsl:for-each>
550
+ </xsl:variable>
551
+ <xsl:for-each select="xalan:nodeset($references)//fn">
552
+ <xsl:variable name="reference" select="@reference"/>
553
+ <xsl:if test="not(preceding-sibling::*[@reference = $reference])"> <!-- only unique reference puts in note-->
554
+ <fo:block margin-bottom="12pt">
555
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
556
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
557
+ <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
558
+ </xsl:if>
559
+ <fo:inline font-size="80%" padding-right="5mm" id="{@id}">
560
+ <xsl:if test="$namespace != 'iso' and $namespace != 'iec'">
561
+ <xsl:attribute name="vertical-align">super</xsl:attribute>
562
+ </xsl:if>
563
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
564
+ <xsl:attribute name="alignment-baseline">hanging</xsl:attribute>
565
+ </xsl:if>
566
+ <xsl:value-of select="@reference"/>
567
+ </fo:inline>
568
+ <xsl:apply-templates />
569
+ </fo:block>
570
+ </xsl:if>
571
+ </xsl:for-each>
572
+ </xsl:template>
573
+
574
+ <xsl:template name="fn_name_display">
575
+ <!-- <xsl:variable name="references">
576
+ <xsl:for-each select="*[local-name()='name']//*[local-name()='fn']">
577
+ <fn reference="{@reference}" id="{@reference}_{ancestor::*[@id][1]/@id}">
578
+ <xsl:apply-templates />
579
+ </fn>
580
+ </xsl:for-each>
581
+ </xsl:variable>
582
+ $references=<xsl:copy-of select="$references"/> -->
583
+ <xsl:for-each select="*[local-name()='name']//*[local-name()='fn']">
584
+ <xsl:variable name="reference" select="@reference"/>
585
+ <fo:block id="{@reference}_{ancestor::*[@id][1]/@id}"><xsl:value-of select="@reference"/></fo:block>
586
+ <fo:block margin-bottom="12pt">
587
+ <xsl:apply-templates />
588
+ </fo:block>
589
+ </xsl:for-each>
590
+ </xsl:template>
591
+
592
+
593
+ <xsl:template name="fn_display_figure">
594
+ <xsl:variable name="key_iso">
595
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">true</xsl:if> <!-- and (not(@class) or @class !='pseudocode') -->
596
+ </xsl:variable>
597
+ <xsl:variable name="references">
598
+ <xsl:for-each select=".//*[local-name()='fn']">
599
+ <fn reference="{@reference}" id="{@reference}_{ancestor::*[@id][1]/@id}">
600
+ <xsl:apply-templates />
601
+ </fn>
602
+ </xsl:for-each>
603
+ </xsl:variable>
604
+ <xsl:if test="xalan:nodeset($references)//fn">
605
+ <fo:block>
606
+ <fo:table width="95%" table-layout="fixed">
607
+ <xsl:if test="$key_iso = 'true'">
608
+ <xsl:attribute name="font-size">10pt</xsl:attribute>
609
+ </xsl:if>
610
+ <fo:table-column column-width="15%"/>
611
+ <fo:table-column column-width="85%"/>
612
+ <fo:table-body>
613
+ <xsl:for-each select="xalan:nodeset($references)//fn">
614
+ <xsl:variable name="reference" select="@reference"/>
615
+ <xsl:if test="not(preceding-sibling::*[@reference = $reference])"> <!-- only unique reference puts in note-->
616
+ <fo:table-row>
617
+ <fo:table-cell>
618
+ <fo:block>
619
+ <fo:inline font-size="80%" padding-right="5mm" vertical-align="super" id="{@id}">
620
+ <xsl:value-of select="@reference"/>
621
+ </fo:inline>
622
+ </fo:block>
623
+ </fo:table-cell>
624
+ <fo:table-cell>
625
+ <fo:block text-align="justify" margin-bottom="12pt">
626
+ <xsl:if test="$key_iso = 'true'">
627
+ <xsl:attribute name="margin-bottom">0</xsl:attribute>
628
+ </xsl:if>
629
+ <xsl:apply-templates />
630
+ </fo:block>
631
+ </fo:table-cell>
632
+ </fo:table-row>
633
+ </xsl:if>
634
+ </xsl:for-each>
635
+ </fo:table-body>
636
+ </fo:table>
637
+ </fo:block>
638
+ </xsl:if>
639
+
640
+ </xsl:template>
641
+
642
+ <!-- *[local-name()='table']// -->
643
+ <xsl:template match="*[local-name()='fn']">
644
+ <!-- <xsl:variable name="namespace" select="substring-before(name(/*), '-')"/> -->
645
+ <fo:inline font-size="80%" keep-with-previous.within-line="always">
646
+ <xsl:if test="($namespace = 'iso' or $namespace = 'iec') and ancestor::*[local-name()='td']">
647
+ <xsl:attribute name="font-weight">normal</xsl:attribute>
648
+ <!-- <xsl:attribute name="alignment-baseline">hanging</xsl:attribute> -->
649
+ <xsl:attribute name="baseline-shift">15%</xsl:attribute>
650
+ </xsl:if>
651
+ <xsl:if test="$namespace = 'itu' or $namespace = 'nist'">
652
+ <xsl:attribute name="vertical-align">super</xsl:attribute>
653
+ <xsl:attribute name="color">blue</xsl:attribute>
654
+ </xsl:if>
655
+ <xsl:if test="$namespace = 'nist'">
656
+ <xsl:attribute name="text-decoration">underline</xsl:attribute>
657
+ </xsl:if>
658
+ <fo:basic-link internal-destination="{@reference}_{ancestor::*[@id][1]/@id}" fox:alt-text="{@reference}"> <!-- @reference | ancestor::*[local-name()='clause'][1]/@id-->
659
+ <xsl:value-of select="@reference"/>
660
+ </fo:basic-link>
661
+ </fo:inline>
662
+ </xsl:template>
663
+
664
+
665
+ <xsl:template match="*[local-name()='fn']/*[local-name()='p']">
666
+ <fo:inline>
667
+ <xsl:apply-templates />
668
+ </fo:inline>
669
+ </xsl:template>
670
+
671
+ <xsl:template match="*[local-name()='dl']">
672
+ <xsl:variable name="parent" select="local-name(..)"/>
673
+
674
+ <xsl:variable name="key_iso">
675
+ <xsl:if test="($namespace = 'iso' or $namespace = 'iec') and ($parent = 'figure' or $parent = 'formula')">true</xsl:if> <!-- and (not(../@class) or ../@class !='pseudocode') -->
676
+ </xsl:variable>
677
+
678
+ <xsl:choose>
679
+ <xsl:when test="$parent = 'formula' and count(*[local-name()='dt']) = 1"> <!-- only one component -->
680
+ <fo:block margin-bottom="12pt">
681
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
682
+ <xsl:attribute name="margin-bottom">0</xsl:attribute>
683
+ </xsl:if>
684
+ <xsl:text>where </xsl:text>
685
+ <xsl:apply-templates select="*[local-name()='dt']/*"/>
686
+ <xsl:text></xsl:text>
687
+ <xsl:apply-templates select="*[local-name()='dd']/*" mode="inline"/>
688
+ </fo:block>
689
+ </xsl:when>
690
+ <xsl:when test="$parent = 'formula'"> <!-- a few components -->
691
+ <fo:block margin-bottom="12pt">
692
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
693
+ <xsl:attribute name="margin-bottom">6pt</xsl:attribute>
694
+ </xsl:if>
695
+ <xsl:text>where</xsl:text>
696
+ </fo:block>
697
+ </xsl:when>
698
+ <xsl:when test="$parent = 'figure' and (not(../@class) or ../@class !='pseudocode')">
699
+ <fo:block font-weight="bold" text-align="left" margin-bottom="12pt">
700
+ <xsl:if test="$namespace = 'iso' or $namespace = 'iec'">
701
+ <xsl:attribute name="font-size">10pt</xsl:attribute>
702
+ <xsl:attribute name="margin-bottom">0</xsl:attribute>
703
+ </xsl:if>
704
+ <xsl:text>Key</xsl:text>
705
+ </fo:block>
706
+ </xsl:when>
707
+ </xsl:choose>
708
+
709
+ <!-- a few components -->
710
+ <xsl:if test="not($parent = 'formula' and count(*[local-name()='dt']) = 1)">
711
+ <fo:block>
712
+ <xsl:if test="$namespace ='iso' and $parent = 'formula'">
713
+ <xsl:attribute name="margin-left">4mm</xsl:attribute>
714
+ </xsl:if>
715
+ <xsl:if test="$namespace = 'itu' and local-name(..) = 'li'">
716
+ <xsl:attribute name="margin-left">-4mm</xsl:attribute>
717
+ </xsl:if>
718
+ <xsl:if test="$namespace = 'nist' and not(.//*[local-name()='dt']//*[local-name()='stem'])">
719
+ <xsl:attribute name="margin-left">5mm</xsl:attribute>
720
+ </xsl:if>
721
+
722
+ <fo:block>
723
+ <xsl:if test="$namespace = 'nist' and not(.//*[local-name()='dt']//*[local-name()='stem'])">
724
+ <xsl:attribute name="margin-left">-2.5mm</xsl:attribute>
725
+ </xsl:if>
726
+
727
+ <!-- create virtual html table for dl/[dt and dd] -->
728
+ <xsl:variable name="html-table">
729
+ <xsl:element name="{$namespace}:table">
730
+ <tbody>
731
+ <xsl:apply-templates mode="dl"/>
732
+ </tbody>
733
+ </xsl:element>
734
+ </xsl:variable>
735
+
736
+ <xsl:variable name="colwidths">
737
+ <xsl:call-template name="calculate-column-widths">
738
+ <xsl:with-param name="cols-count" select="2"/>
739
+ <xsl:with-param name="table" select="$html-table"/>
740
+ </xsl:call-template>
741
+ </xsl:variable>
742
+ <!-- colwidths=<xsl:value-of select="$colwidths"/> -->
743
+
744
+ <fo:table width="95%" table-layout="fixed">
745
+ <xsl:choose>
746
+ <xsl:when test="$key_iso = 'true' and $parent = 'formula'">
747
+ <!-- <xsl:attribute name="font-size">11pt</xsl:attribute> -->
748
+ </xsl:when>
749
+ <xsl:when test="$key_iso = 'true'">
750
+ <xsl:attribute name="font-size">10pt</xsl:attribute>
751
+ </xsl:when>
752
+ </xsl:choose>
753
+ <xsl:choose>
754
+ <xsl:when test="ancestor::*[local-name()='dl']"><!-- second level, i.e. inlined table -->
755
+ <fo:table-column column-width="50%"/>
756
+ <fo:table-column column-width="50%"/>
757
+ </xsl:when>
758
+ <xsl:otherwise>
759
+ <xsl:choose>
760
+ <!-- <xsl:when test="xalan:nodeset($colwidths)/column[1] div xalan:nodeset($colwidths)/column[2] &gt; 1.7">
761
+ <fo:table-column column-width="60%"/>
762
+ <fo:table-column column-width="40%"/>
763
+ </xsl:when> -->
764
+ <xsl:when test="xalan:nodeset($colwidths)/column[1] div xalan:nodeset($colwidths)/column[2] &gt; 1.3">
765
+ <fo:table-column column-width="50%"/>
766
+ <fo:table-column column-width="50%"/>
767
+ </xsl:when>
768
+ <xsl:when test="xalan:nodeset($colwidths)/column[1] div xalan:nodeset($colwidths)/column[2] &gt; 0.5">
769
+ <fo:table-column column-width="40%"/>
770
+ <fo:table-column column-width="60%"/>
771
+ </xsl:when>
772
+ <xsl:otherwise>
773
+ <xsl:for-each select="xalan:nodeset($colwidths)//column">
774
+ <xsl:choose>
775
+ <xsl:when test=". = 1">
776
+ <fo:table-column column-width="proportional-column-width(2)"/>
777
+ </xsl:when>
778
+ <xsl:otherwise>
779
+ <fo:table-column column-width="proportional-column-width({.})"/>
780
+ </xsl:otherwise>
781
+ </xsl:choose>
782
+ </xsl:for-each>
783
+ </xsl:otherwise>
784
+ </xsl:choose>
785
+ <!-- <fo:table-column column-width="15%"/>
786
+ <fo:table-column column-width="85%"/> -->
787
+ </xsl:otherwise>
788
+ </xsl:choose>
789
+ <fo:table-body>
790
+ <xsl:apply-templates>
791
+ <xsl:with-param name="key_iso" select="$key_iso"/>
792
+ </xsl:apply-templates>
793
+ </fo:table-body>
794
+ </fo:table>
795
+ </fo:block>
796
+ </fo:block>
797
+ </xsl:if>
798
+ </xsl:template>
799
+
800
+ <xsl:template match="*[local-name()='dl']/*[local-name()='note']">
801
+ <xsl:param name="key_iso"/>
802
+
803
+ <!-- <tr>
804
+ <td>NOTE</td>
805
+ <td>
806
+ <xsl:apply-templates />
807
+ </td>
808
+ </tr>
809
+ -->
810
+ <fo:table-row>
811
+ <fo:table-cell>
812
+ <fo:block margin-top="6pt">
813
+ <xsl:if test="$key_iso = 'true'">
814
+ <xsl:attribute name="margin-top">0</xsl:attribute>
815
+ </xsl:if>
816
+ NOTE
817
+ </fo:block>
818
+ </fo:table-cell>
819
+ <fo:table-cell>
820
+ <fo:block>
821
+ <xsl:apply-templates />
822
+ </fo:block>
823
+ </fo:table-cell>
824
+ </fo:table-row>
825
+ </xsl:template>
826
+
827
+ <xsl:template match="*[local-name()='dt']" mode="dl">
828
+ <tr>
829
+ <td>
830
+ <xsl:apply-templates />
831
+ </td>
832
+ <td>
833
+ <xsl:choose>
834
+ <xsl:when test="$namespace = 'nist'">
835
+ <xsl:if test="local-name(*[1]) != 'stem'">
836
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]" mode="process"/>
837
+ </xsl:if>
838
+ </xsl:when>
839
+ <xsl:otherwise>
840
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]" mode="process"/>
841
+ </xsl:otherwise>
842
+ </xsl:choose>
843
+ </td>
844
+ </tr>
845
+ <xsl:if test="local-name(*[1]) = 'stem' and $namespace = 'nist' ">
846
+ <tr>
847
+ <td>
848
+ <xsl:text>&#xA0;</xsl:text>
849
+ </td>
850
+ <td>
851
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]" mode="dl_process"/>
852
+ </td>
853
+ </tr>
854
+ </xsl:if>
855
+ </xsl:template>
856
+
857
+ <xsl:template match="*[local-name()='dt']">
858
+ <xsl:param name="key_iso"/>
859
+
860
+ <fo:table-row>
861
+ <fo:table-cell>
862
+ <fo:block margin-top="6pt">
863
+ <xsl:if test="$key_iso = 'true'">
864
+ <xsl:attribute name="margin-top">0</xsl:attribute>
865
+ </xsl:if>
866
+ <xsl:if test="$namespace = 'nist'">
867
+ <xsl:attribute name="margin-top">0</xsl:attribute>
868
+ <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
869
+ </xsl:if>
870
+ <xsl:apply-templates />
871
+ </fo:block>
872
+ </fo:table-cell>
873
+ <fo:table-cell>
874
+ <fo:block>
875
+ <xsl:choose>
876
+ <xsl:when test="$namespace = 'nist'">
877
+ <xsl:if test="local-name(*[1]) != 'stem'">
878
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]" mode="process"/>
879
+ </xsl:if>
880
+ </xsl:when>
881
+ <xsl:otherwise>
882
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]" mode="process"/>
883
+ </xsl:otherwise>
884
+ </xsl:choose>
885
+ </fo:block>
886
+ </fo:table-cell>
887
+ </fo:table-row>
888
+ <xsl:if test="local-name(*[1]) = 'stem' and $namespace = 'nist' ">
889
+ <fo:table-row>
890
+ <fo:table-cell>
891
+ <fo:block margin-top="6pt">
892
+ <xsl:if test="$key_iso = 'true'">
893
+ <xsl:attribute name="margin-top">0</xsl:attribute>
894
+ </xsl:if>
895
+ <xsl:text>&#xA0;</xsl:text>
896
+ </fo:block>
897
+ </fo:table-cell>
898
+ <fo:table-cell>
899
+ <fo:block>
900
+ <xsl:apply-templates select="following-sibling::*[local-name()='dd'][1]" mode="process"/>
901
+ </fo:block>
902
+ </fo:table-cell>
903
+ </fo:table-row>
904
+ </xsl:if>
905
+ </xsl:template>
906
+
907
+ <xsl:template match="*[local-name()='dd']" mode="dl"/>
908
+ <xsl:template match="*[local-name()='dd']" mode="dl_process">
909
+ <xsl:apply-templates />
910
+ </xsl:template>
911
+
912
+ <xsl:template match="*[local-name()='dd']"/>
913
+ <xsl:template match="*[local-name()='dd']" mode="process">
914
+ <xsl:apply-templates />
915
+ </xsl:template>
916
+
917
+ <xsl:template match="*[local-name()='dd']/*[local-name()='p']" mode="inline">
918
+ <fo:inline><xsl:apply-templates /></fo:inline>
919
+ </xsl:template>
920
+
921
+ <xsl:template match="*[local-name()='em']">
922
+ <fo:inline font-style="italic">
923
+ <xsl:apply-templates />
924
+ </fo:inline>
925
+ </xsl:template>
926
+
927
+ <xsl:template match="*[local-name()='strong']">
928
+ <fo:inline font-weight="bold">
929
+ <xsl:apply-templates />
930
+ </fo:inline>
931
+ </xsl:template>
932
+
933
+ <xsl:template match="*[local-name()='sup']">
934
+ <fo:inline font-size="80%" vertical-align="super">
935
+ <xsl:apply-templates />
936
+ </fo:inline>
937
+ </xsl:template>
938
+
939
+ <xsl:template match="*[local-name()='sub']">
940
+ <fo:inline font-size="80%" vertical-align="sub">
941
+ <xsl:apply-templates />
942
+ </fo:inline>
943
+ </xsl:template>
944
+
945
+ <xsl:template match="*[local-name()='tt']">
946
+ <fo:inline font-family="Courier" font-size="10pt">
947
+ <xsl:apply-templates />
948
+ </fo:inline>
949
+ </xsl:template>
950
+
951
+ <xsl:template match="*[local-name()='del']">
952
+ <fo:inline font-size="10pt" color="red" text-decoration="line-through">
953
+ <xsl:apply-templates />
954
+ </fo:inline>
955
+ </xsl:template>
956
+
957
+ <xsl:template match="text()[ancestor::*[local-name()='smallcap']]">
958
+ <xsl:variable name="text" select="normalize-space(.)"/>
959
+ <fo:inline font-size="75%">
960
+ <xsl:if test="string-length($text) &gt; 0">
961
+ <xsl:call-template name="recursiveSmallCaps">
962
+ <xsl:with-param name="text" select="$text"/>
963
+ </xsl:call-template>
964
+ </xsl:if>
965
+ </fo:inline>
966
+ </xsl:template>
967
+
968
+ <xsl:template name="recursiveSmallCaps">
969
+ <xsl:param name="text"/>
970
+ <xsl:variable name="char" select="substring($text,1,1)"/>
971
+ <xsl:variable name="upperCase" select="translate($char, $lower, $upper)"/>
972
+ <xsl:choose>
973
+ <xsl:when test="$char=$upperCase">
974
+ <fo:inline font-size="{100 div 0.75}%">
975
+ <xsl:value-of select="$upperCase"/>
976
+ </fo:inline>
977
+ </xsl:when>
978
+ <xsl:otherwise>
979
+ <xsl:value-of select="$upperCase"/>
980
+ </xsl:otherwise>
981
+ </xsl:choose>
982
+ <xsl:if test="string-length($text) &gt; 1">
983
+ <xsl:call-template name="recursiveSmallCaps">
984
+ <xsl:with-param name="text" select="substring($text,2)"/>
985
+ </xsl:call-template>
986
+ </xsl:if>
987
+ </xsl:template>
988
+
989
+ <!-- split string 'text' by 'separator' -->
990
+ <xsl:template name="tokenize">
991
+ <xsl:param name="text"/>
992
+ <xsl:param name="separator" select="' '"/>
993
+ <xsl:choose>
994
+ <xsl:when test="not(contains($text, $separator))">
995
+ <word>
996
+ <xsl:variable name="str_no_en_chars" select="normalize-space(translate($text, $en_chars, ''))"/>
997
+ <xsl:variable name="len_str_no_en_chars" select="string-length($str_no_en_chars)"/>
998
+ <xsl:variable name="len_str" select="string-length(normalize-space($text))"/>
999
+
1000
+ <!-- <xsl:if test="$len_str_no_en_chars div $len_str &gt; 0.8">
1001
+ <xsl:message>
1002
+ div=<xsl:value-of select="$len_str_no_en_chars div $len_str"/>
1003
+ len_str=<xsl:value-of select="$len_str"/>
1004
+ len_str_no_en_chars=<xsl:value-of select="$len_str_no_en_chars"/>
1005
+ </xsl:message>
1006
+ </xsl:if> -->
1007
+ <!-- <len_str_no_en_chars><xsl:value-of select="$len_str_no_en_chars"/></len_str_no_en_chars>
1008
+ <len_str><xsl:value-of select="$len_str"/></len_str> -->
1009
+ <xsl:choose>
1010
+ <xsl:when test="$len_str_no_en_chars div $len_str &gt; 0.8"> <!-- means non-english string -->
1011
+ <xsl:value-of select="$len_str - $len_str_no_en_chars"/>
1012
+ </xsl:when>
1013
+ <xsl:otherwise>
1014
+ <xsl:value-of select="$len_str"/>
1015
+ </xsl:otherwise>
1016
+ </xsl:choose>
1017
+ </word>
1018
+ </xsl:when>
1019
+ <xsl:otherwise>
1020
+ <word>
1021
+ <xsl:value-of select="string-length(normalize-space(substring-before($text, $separator)))"/>
1022
+ </word>
1023
+ <xsl:call-template name="tokenize">
1024
+ <xsl:with-param name="text" select="substring-after($text, $separator)"/>
1025
+ </xsl:call-template>
1026
+ </xsl:otherwise>
1027
+ </xsl:choose>
1028
+ </xsl:template>
1029
+
1030
+ <!-- get max value in array -->
1031
+ <xsl:template name="max_length">
1032
+ <xsl:param name="words"/>
1033
+ <xsl:for-each select="$words//word">
1034
+ <xsl:sort select="." data-type="number" order="descending"/>
1035
+ <xsl:if test="position()=1">
1036
+ <xsl:value-of select="."/>
1037
+ </xsl:if>
1038
+ </xsl:for-each>
1039
+ </xsl:template>
1040
+
1041
+ <!-- add zero space after dash character (for table's entries) -->
1042
+ <xsl:template name="add-zero-spaces">
1043
+ <xsl:param name="text" select="."/>
1044
+ <xsl:variable name="zero-space-after-chars">&#x002D;</xsl:variable>
1045
+ <xsl:variable name="zero-space-after-dot">.</xsl:variable>
1046
+ <xsl:variable name="zero-space-after-colon">:</xsl:variable>
1047
+ <xsl:variable name="zero-space">&#x200B;</xsl:variable>
1048
+ <xsl:choose>
1049
+ <xsl:when test="contains($text, $zero-space-after-chars)">
1050
+ <xsl:value-of select="substring-before($text, $zero-space-after-chars)"/>
1051
+ <xsl:value-of select="$zero-space-after-chars"/>
1052
+ <xsl:value-of select="$zero-space"/>
1053
+ <xsl:call-template name="add-zero-spaces">
1054
+ <xsl:with-param name="text" select="substring-after($text, $zero-space-after-chars)"/>
1055
+ </xsl:call-template>
1056
+ </xsl:when>
1057
+ <xsl:when test="contains($text, $zero-space-after-dot)">
1058
+ <xsl:value-of select="substring-before($text, $zero-space-after-dot)"/>
1059
+ <xsl:value-of select="$zero-space-after-dot"/>
1060
+ <xsl:value-of select="$zero-space"/>
1061
+ <xsl:call-template name="add-zero-spaces">
1062
+ <xsl:with-param name="text" select="substring-after($text, $zero-space-after-dot)"/>
1063
+ </xsl:call-template>
1064
+ </xsl:when>
1065
+ <xsl:when test="contains($text, $zero-space-after-colon)">
1066
+ <xsl:value-of select="substring-before($text, $zero-space-after-colon)"/>
1067
+ <xsl:value-of select="$zero-space-after-colon"/>
1068
+ <xsl:value-of select="$zero-space"/>
1069
+ <xsl:call-template name="add-zero-spaces">
1070
+ <xsl:with-param name="text" select="substring-after($text, $zero-space-after-colon)"/>
1071
+ </xsl:call-template>
1072
+ </xsl:when>
1073
+ <xsl:otherwise>
1074
+ <xsl:value-of select="$text"/>
1075
+ </xsl:otherwise>
1076
+ </xsl:choose>
1077
+ </xsl:template>
1078
+
1079
+ <!-- Table normalization (colspan,rowspan processing for adding TDs) for column width calculation -->
1080
+ <xsl:template name="getSimpleTable">
1081
+ <xsl:variable name="simple-table">
1082
+
1083
+ <!-- Step 1. colspan processing -->
1084
+ <xsl:variable name="simple-table-colspan">
1085
+ <tbody>
1086
+ <xsl:apply-templates mode="simple-table-colspan"/>
1087
+ </tbody>
1088
+ </xsl:variable>
1089
+
1090
+ <!-- Step 2. rowspan processing -->
1091
+ <xsl:variable name="simple-table-rowspan">
1092
+ <xsl:apply-templates select="xalan:nodeset($simple-table-colspan)" mode="simple-table-rowspan"/>
1093
+ </xsl:variable>
1094
+
1095
+ <xsl:copy-of select="xalan:nodeset($simple-table-rowspan)"/>
1096
+
1097
+ <!-- <xsl:choose>
1098
+ <xsl:when test="current()//*[local-name()='th'][@colspan] or current()//*[local-name()='td'][@colspan] ">
1099
+
1100
+ </xsl:when>
1101
+ <xsl:otherwise>
1102
+ <xsl:copy-of select="current()"/>
1103
+ </xsl:otherwise>
1104
+ </xsl:choose> -->
1105
+ </xsl:variable>
1106
+ <xsl:copy-of select="$simple-table"/>
1107
+ </xsl:template>
1108
+
1109
+ <!-- ===================== -->
1110
+ <!-- 1. mode "simple-table-colspan"
1111
+ 1.1. remove thead, tbody, fn
1112
+ 1.2. rename th -> td
1113
+ 1.3. repeating N td with colspan=N
1114
+ 1.4. remove namespace
1115
+ 1.5. remove @colspan attribute
1116
+ 1.6. add @divide attribute for divide text width in further processing
1117
+ -->
1118
+ <!-- ===================== -->
1119
+ <xsl:template match="*[local-name()='thead'] | *[local-name()='tbody']" mode="simple-table-colspan">
1120
+ <xsl:apply-templates mode="simple-table-colspan"/>
1121
+ </xsl:template>
1122
+ <xsl:template match="*[local-name()='fn']" mode="simple-table-colspan"/>
1123
+
1124
+ <xsl:template match="*[local-name()='th'] | *[local-name()='td']" mode="simple-table-colspan">
1125
+ <xsl:choose>
1126
+ <xsl:when test="@colspan">
1127
+ <xsl:variable name="td">
1128
+ <xsl:element name="td">
1129
+ <xsl:attribute name="divide"><xsl:value-of select="@colspan"/></xsl:attribute>
1130
+ <xsl:apply-templates select="@*" mode="simple-table-colspan"/>
1131
+ <xsl:apply-templates mode="simple-table-colspan"/>
1132
+ </xsl:element>
1133
+ </xsl:variable>
1134
+ <xsl:call-template name="repeatNode">
1135
+ <xsl:with-param name="count" select="@colspan"/>
1136
+ <xsl:with-param name="node" select="$td"/>
1137
+ </xsl:call-template>
1138
+ </xsl:when>
1139
+ <xsl:otherwise>
1140
+ <xsl:element name="td">
1141
+ <xsl:apply-templates select="@*" mode="simple-table-colspan"/>
1142
+ <xsl:apply-templates mode="simple-table-colspan"/>
1143
+ </xsl:element>
1144
+ </xsl:otherwise>
1145
+ </xsl:choose>
1146
+ </xsl:template>
1147
+
1148
+ <xsl:template match="@colspan" mode="simple-table-colspan"/>
1149
+
1150
+ <xsl:template match="*[local-name()='tr']" mode="simple-table-colspan">
1151
+ <xsl:element name="tr">
1152
+ <xsl:apply-templates select="@*" mode="simple-table-colspan"/>
1153
+ <xsl:apply-templates mode="simple-table-colspan"/>
1154
+ </xsl:element>
1155
+ </xsl:template>
1156
+
1157
+ <xsl:template match="@*|node()" mode="simple-table-colspan">
1158
+ <xsl:copy>
1159
+ <xsl:apply-templates select="@*|node()" mode="simple-table-colspan"/>
1160
+ </xsl:copy>
1161
+ </xsl:template>
1162
+
1163
+ <!-- repeat node 'count' times -->
1164
+ <xsl:template name="repeatNode">
1165
+ <xsl:param name="count"/>
1166
+ <xsl:param name="node"/>
1167
+
1168
+ <xsl:if test="$count &gt; 0">
1169
+ <xsl:call-template name="repeatNode">
1170
+ <xsl:with-param name="count" select="$count - 1"/>
1171
+ <xsl:with-param name="node" select="$node"/>
1172
+ </xsl:call-template>
1173
+ <xsl:copy-of select="$node"/>
1174
+ </xsl:if>
1175
+ </xsl:template>
1176
+ <!-- End mode simple-table-colspan -->
1177
+ <!-- ===================== -->
1178
+ <!-- ===================== -->
1179
+
1180
+ <!-- ===================== -->
1181
+ <!-- 2. mode "simple-table-rowspan"
1182
+ Row span processing, more information http://andrewjwelch.com/code/xslt/table/table-normalization.html -->
1183
+ <!-- ===================== -->
1184
+ <xsl:template match="@*|node()" mode="simple-table-rowspan">
1185
+ <xsl:copy>
1186
+ <xsl:apply-templates select="@*|node()" mode="simple-table-rowspan"/>
1187
+ </xsl:copy>
1188
+ </xsl:template>
1189
+
1190
+ <xsl:template match="tbody" mode="simple-table-rowspan">
1191
+ <xsl:copy>
1192
+ <xsl:copy-of select="tr[1]" />
1193
+ <xsl:apply-templates select="tr[2]" mode="simple-table-rowspan">
1194
+ <xsl:with-param name="previousRow" select="tr[1]" />
1195
+ </xsl:apply-templates>
1196
+ </xsl:copy>
1197
+ </xsl:template>
1198
+
1199
+ <xsl:template match="tr" mode="simple-table-rowspan">
1200
+ <xsl:param name="previousRow"/>
1201
+ <xsl:variable name="currentRow" select="." />
1202
+
1203
+ <xsl:variable name="normalizedTDs">
1204
+ <xsl:for-each select="xalan:nodeset($previousRow)//td">
1205
+ <xsl:choose>
1206
+ <xsl:when test="@rowspan &gt; 1">
1207
+ <xsl:copy>
1208
+ <xsl:attribute name="rowspan">
1209
+ <xsl:value-of select="@rowspan - 1" />
1210
+ </xsl:attribute>
1211
+ <xsl:copy-of select="@*[not(name() = 'rowspan')]" />
1212
+ <xsl:copy-of select="node()" />
1213
+ </xsl:copy>
1214
+ </xsl:when>
1215
+ <xsl:otherwise>
1216
+ <xsl:copy-of select="$currentRow/td[1 + count(current()/preceding-sibling::td[not(@rowspan) or (@rowspan = 1)])]" />
1217
+ </xsl:otherwise>
1218
+ </xsl:choose>
1219
+ </xsl:for-each>
1220
+ </xsl:variable>
1221
+
1222
+ <xsl:variable name="newRow">
1223
+ <xsl:copy>
1224
+ <xsl:copy-of select="$currentRow/@*" />
1225
+ <xsl:copy-of select="xalan:nodeset($normalizedTDs)" />
1226
+ </xsl:copy>
1227
+ </xsl:variable>
1228
+ <xsl:copy-of select="$newRow" />
1229
+
1230
+ <xsl:apply-templates select="following-sibling::tr[1]" mode="simple-table-rowspan">
1231
+ <xsl:with-param name="previousRow" select="$newRow" />
1232
+ </xsl:apply-templates>
1233
+ </xsl:template>
1234
+ <!-- End mode simple-table-rowspan -->
1235
+ <!-- ===================== -->
1236
+ <!-- ===================== -->
1237
+
1238
+ <xsl:template name="getLang">
1239
+ <xsl:variable name="language" select="//*[local-name()='bibdata']//*[local-name()='language']"/>
1240
+ <xsl:choose>
1241
+ <xsl:when test="$language = 'English'">en</xsl:when>
1242
+ <xsl:otherwise><xsl:value-of select="$language"/></xsl:otherwise>
1243
+ </xsl:choose>
1244
+ </xsl:template>
1245
+
1246
+ </xsl:stylesheet>