metanorma-nist 1.0.5 → 1.0.6

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