metanorma-iec 1.3.6 → 1.3.7
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 +4 -4
- data/lib/asciidoctor/iec/front.rb +64 -46
- data/lib/asciidoctor/iec/isodoc.rng +32 -7
- data/lib/asciidoctor/iec/isostandard.rng +7 -3
- data/lib/isodoc/iec/iec.international-standard.xsl +122 -2
- data/lib/metanorma/iec/version.rb +1 -1
- data/metanorma-iec.gemspec +1 -1
- data/spec/isodoc/postproc_spec.rb +221 -192
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5b9cbe5c402a7dbd3a2b074aefdc52fa620a62c515d8a8d32a904c2198d4c5e
|
4
|
+
data.tar.gz: 43958dfa8f657c760a67c35d10403123fde662527f0c94402a7f32ab2e582ad2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fa2ca8ae28b7ae9d060a1900f72a362f2d3f64b7cfb36a3b7e537270720be9c01b7eb5df31ca86ce263cc59b3dc08556d517c8c7aab4f9d4170846261b0a197
|
7
|
+
data.tar.gz: dd32106b4774c119cdd10ce89944f116d146906f70e0ecb29e8094fe45340319c35e1dcc308ebf1f0c95699b6a398b4f970b5878e7730eee27e169d4360841ee
|
@@ -6,7 +6,9 @@ module Asciidoctor
|
|
6
6
|
csv_split(publishers)&.each do |p|
|
7
7
|
xml.contributor do |c|
|
8
8
|
c.role **{ type: "author" }
|
9
|
-
c.organization
|
9
|
+
c.organization do |a|
|
10
|
+
organization(a, p, false, node, !node.attr("publisher"))
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -16,7 +18,9 @@ module Asciidoctor
|
|
16
18
|
csv_split(publishers)&.each do |p|
|
17
19
|
xml.contributor do |c|
|
18
20
|
c.role **{ type: "publisher" }
|
19
|
-
c.organization
|
21
|
+
c.organization do |a|
|
22
|
+
organization(a, p, true, node, !node.attr("publisher"))
|
23
|
+
end
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
@@ -47,24 +51,29 @@ module Asciidoctor
|
|
47
51
|
xml.docidentifier dn, **attr_code(type: "ISO")
|
48
52
|
end
|
49
53
|
|
50
|
-
def id_edition_suffix(
|
54
|
+
def id_edition_suffix(docnum, node)
|
51
55
|
ed = node.attr("edition") || 1
|
52
|
-
|
53
|
-
|
56
|
+
docnum += " ED #{ed}"
|
57
|
+
docnum
|
54
58
|
end
|
55
59
|
|
56
60
|
STAGE_CODES = {
|
57
|
-
"PNW" => "1000", "ANW" => "2000", "CAN" => "2098", "ACD" => "2099",
|
58
|
-
"
|
59
|
-
"
|
60
|
-
"
|
61
|
-
"
|
62
|
-
"
|
63
|
-
"
|
64
|
-
"
|
65
|
-
"
|
66
|
-
"
|
67
|
-
"
|
61
|
+
"PNW" => "1000", "ANW" => "2000", "CAN" => "2098", "ACD" => "2099",
|
62
|
+
"CD" => "3020", "BWG" => "3092", "A2CD" => "3099", "2CD" => "3520",
|
63
|
+
"3CD" => "3520", "4CD" => "3520", "5CD" => "3520", "6CD" => "3520",
|
64
|
+
"7CD" => "3520", "8CD" => "3520", "9CD" => "3520", "CDM" => "3591",
|
65
|
+
"A3CD" => "3592", "A4CD" => "3592", "A5CD" => "3592", "A6CD" => "3592",
|
66
|
+
"A7CD" => "3592", "A8CD" => "3592", "A9CD" => "3592", "ACDV" => "3599",
|
67
|
+
"CCDV" => "4020", "CDVM" => "4091", "NCDV" => "4092",
|
68
|
+
"NADIS" => "4093", "ADIS" => "4099", "ADTR" => "4099",
|
69
|
+
"ADTS" => "4099", "RDISH" => "5000", "RFDIS" => "5000",
|
70
|
+
"CDISH" => "5020", "CDPAS" => "5020", "CDTR" => "5020",
|
71
|
+
"CDTS" => "5020", "CFDIS" => "5020", "DTRM" => "5092",
|
72
|
+
"DTSM" => "5092", "NDTR" => "5092", "NDTS" => "5092",
|
73
|
+
"NFDIS" => "5092", "APUB" => "5099", "BPUB" => "6000",
|
74
|
+
"PPUB" => "6060", "RR" => "9092", "AMW" => "9220", "WPUB" => "9599",
|
75
|
+
"DELPUB" => "9960", "PWI" => "0000", "NWIP" => "1000", "WD" => "2000",
|
76
|
+
"CDV" => "4000", "FDIS" => "5000"
|
68
77
|
}.freeze
|
69
78
|
|
70
79
|
DOC_STAGE = {
|
@@ -82,19 +91,23 @@ module Asciidoctor
|
|
82
91
|
}.freeze
|
83
92
|
|
84
93
|
STAGE_ABBRS = {
|
85
|
-
"00" => {"00" => "PWI"},
|
86
|
-
"10" => {"00" => "PNW"},
|
87
|
-
"20" => {"00" => "ANW", "98" => "CAN", "99" => "ACD"},
|
88
|
-
"30" => {"00" => "CD", "20" => "CD", "92" => "BWG", "97" => "MERGED",
|
89
|
-
|
90
|
-
"
|
91
|
-
|
92
|
-
"
|
93
|
-
|
94
|
-
|
95
|
-
"
|
96
|
-
|
97
|
-
"
|
94
|
+
"00" => { "00" => "PWI" },
|
95
|
+
"10" => { "00" => "PNW" },
|
96
|
+
"20" => { "00" => "ANW", "98" => "CAN", "99" => "ACD" },
|
97
|
+
"30" => { "00" => "CD", "20" => "CD", "92" => "BWG", "97" => "MERGED",
|
98
|
+
"98" => "DREJ", "99" => "A2CD" },
|
99
|
+
"35" => { "00" => "CD", "20" => "CD", "91" => "CDM", "92" => "ACD",
|
100
|
+
"99" => "ACDV" },
|
101
|
+
"40" => { "00" => "CCDV", "20" => "CCDV", "91" => "CDVM",
|
102
|
+
"92" => "NCDV", "93" => "NADIS",
|
103
|
+
"95" => "ADISSB", "99" => "ADIS" },
|
104
|
+
"50" => { "00" => "RFDIS", "20" => "CFDIS", "92" => "NFDIS",
|
105
|
+
"95" => "APUBSB", "99" => "APUB" },
|
106
|
+
"60" => { "00" => "BPUB", "60" => "PPUB" },
|
107
|
+
"90" => { "00" => "RR", "92" => "RR" },
|
108
|
+
"92" => { "00" => "AMW", "20" => "AMW" },
|
109
|
+
"95" => { "00" => "WPUB", "99" => "WPUB" },
|
110
|
+
"99" => { "00" => "DELPUB", "60" => "DELPUB" },
|
98
111
|
}.freeze
|
99
112
|
|
100
113
|
STAGE_NAMES = {
|
@@ -112,7 +125,7 @@ module Asciidoctor
|
|
112
125
|
"99": "Deleted",
|
113
126
|
}.freeze
|
114
127
|
|
115
|
-
def status_abbrev1(stage, substage, iter, doctype,
|
128
|
+
def status_abbrev1(stage, substage, iter, doctype, _draft)
|
116
129
|
return "" unless stage
|
117
130
|
|
118
131
|
abbr = STAGE_ABBRS.dig(stage, substage) || "??"
|
@@ -121,30 +134,30 @@ module Asciidoctor
|
|
121
134
|
end
|
122
135
|
case doctype
|
123
136
|
when "technical-report"
|
124
|
-
|
125
|
-
|
126
|
-
|
137
|
+
abbr = "ADTR" if stage == "40" && substage == "99"
|
138
|
+
abbr = "CDTR" if stage == "50" && substage == "20"
|
139
|
+
abbr = "DTRM" if stage == "50" && substage == "92"
|
127
140
|
when "technical-specification"
|
128
|
-
|
129
|
-
|
130
|
-
|
141
|
+
abbr = "ADTS" if stage == "40" && substage == "99"
|
142
|
+
abbr = "CDTS" if stage == "50" && substage == "20"
|
143
|
+
abbr = "DTSM" if stage == "50" && substage == "92"
|
131
144
|
when "interpretation-sheet"
|
132
|
-
|
133
|
-
|
145
|
+
abbr = "RDISH" if stage == "50" && substage == "00"
|
146
|
+
abbr = "CDISH" if stage == "50" && substage == "20"
|
134
147
|
when "publicly-available-specification"
|
135
|
-
|
148
|
+
abbr = "CDPAS" if stage == "50" && substage == "20"
|
136
149
|
end
|
137
150
|
abbr = abbr.sub(/CD$/, "#{iter}CD") if iter
|
138
151
|
abbr
|
139
152
|
end
|
140
153
|
|
141
|
-
def stage_abbr(stage,
|
154
|
+
def stage_abbr(stage, _substage)
|
142
155
|
return "PPUB" if stage == "60"
|
143
156
|
|
144
157
|
DOC_STAGE[stage.to_sym] || "??"
|
145
158
|
end
|
146
159
|
|
147
|
-
def stage_name(stage,
|
160
|
+
def stage_name(stage, _substage, _doctype, _iteration)
|
148
161
|
STAGE_NAMES[stage.to_sym]
|
149
162
|
end
|
150
163
|
|
@@ -159,11 +172,16 @@ module Asciidoctor
|
|
159
172
|
st = node.attr("status") || node.attr("docstage")
|
160
173
|
stage = get_stage(node)
|
161
174
|
node.attr("docsubstage") ||
|
162
|
-
( stage == "60"
|
175
|
+
(if stage == "60"
|
176
|
+
"60"
|
177
|
+
else
|
178
|
+
STAGE_CODES[st] ? STAGE_CODES[st][2..3] : "00"
|
179
|
+
end)
|
163
180
|
end
|
164
181
|
|
165
|
-
def id_stage_abbr(stage,
|
182
|
+
def id_stage_abbr(stage, _substage, node)
|
166
183
|
return "" if stage == "60"
|
184
|
+
|
167
185
|
abbr = DOC_STAGE[stage.to_sym] || ""
|
168
186
|
abbr = node.attr("iteration") + abbr if node.attr("iteration")
|
169
187
|
abbr
|
@@ -174,9 +192,9 @@ module Asciidoctor
|
|
174
192
|
substage = get_substage(node)
|
175
193
|
xml.status do |s|
|
176
194
|
s.stage stage, **attr_code(abbreviation: stage_abbr(stage, substage))
|
177
|
-
|
178
|
-
|
179
|
-
|
195
|
+
subst = status_abbrev1(stage, substage, node.attr("iteration"),
|
196
|
+
doctype(node), node.attr("draft"))
|
197
|
+
s.substage substage, **attr_code(abbreviation: subst)
|
180
198
|
node.attr("iteration") && (s.iteration node.attr("iteration"))
|
181
199
|
end
|
182
200
|
end
|
@@ -204,6 +204,18 @@
|
|
204
204
|
</zeroOrMore>
|
205
205
|
</element>
|
206
206
|
</define>
|
207
|
+
<define name="dt">
|
208
|
+
<element name="dt">
|
209
|
+
<optional>
|
210
|
+
<attribute name="id">
|
211
|
+
<data type="ID"/>
|
212
|
+
</attribute>
|
213
|
+
</optional>
|
214
|
+
<zeroOrMore>
|
215
|
+
<ref name="TextElement"/>
|
216
|
+
</zeroOrMore>
|
217
|
+
</element>
|
218
|
+
</define>
|
207
219
|
<define name="example">
|
208
220
|
<element name="example">
|
209
221
|
<attribute name="id">
|
@@ -899,7 +911,7 @@
|
|
899
911
|
</include>
|
900
912
|
<!-- end overrides -->
|
901
913
|
<define name="docsubtype">
|
902
|
-
<element name="
|
914
|
+
<element name="subdoctype">
|
903
915
|
<ref name="DocumentSubtype"/>
|
904
916
|
</element>
|
905
917
|
</define>
|
@@ -954,6 +966,16 @@
|
|
954
966
|
</define>
|
955
967
|
<define name="concept">
|
956
968
|
<element name="concept">
|
969
|
+
<optional>
|
970
|
+
<attribute name="ital">
|
971
|
+
<data type="boolean"/>
|
972
|
+
</attribute>
|
973
|
+
</optional>
|
974
|
+
<optional>
|
975
|
+
<attribute name="ref">
|
976
|
+
<data type="boolean"/>
|
977
|
+
</attribute>
|
978
|
+
</optional>
|
957
979
|
<optional>
|
958
980
|
<element name="refterm">
|
959
981
|
<zeroOrMore>
|
@@ -998,6 +1020,9 @@
|
|
998
1020
|
</attribute>
|
999
1021
|
<attribute name="name"/>
|
1000
1022
|
<attribute name="action"/>
|
1023
|
+
<optional>
|
1024
|
+
<attribute name="class"/>
|
1025
|
+
</optional>
|
1001
1026
|
<zeroOrMore>
|
1002
1027
|
<choice>
|
1003
1028
|
<ref name="TextElement"/>
|
@@ -1490,26 +1515,26 @@
|
|
1490
1515
|
<optional>
|
1491
1516
|
<ref name="section-title"/>
|
1492
1517
|
</optional>
|
1493
|
-
<
|
1518
|
+
<choice>
|
1494
1519
|
<choice>
|
1495
1520
|
<group>
|
1496
|
-
<
|
1521
|
+
<oneOrMore>
|
1497
1522
|
<ref name="BasicBlock"/>
|
1498
|
-
</
|
1523
|
+
</oneOrMore>
|
1499
1524
|
<zeroOrMore>
|
1500
1525
|
<ref name="note"/>
|
1501
1526
|
</zeroOrMore>
|
1502
1527
|
</group>
|
1503
1528
|
<ref name="amend"/>
|
1504
1529
|
</choice>
|
1505
|
-
<
|
1530
|
+
<oneOrMore>
|
1506
1531
|
<choice>
|
1507
1532
|
<ref name="clause-subsection"/>
|
1508
1533
|
<ref name="terms"/>
|
1509
1534
|
<ref name="definitions"/>
|
1510
1535
|
</choice>
|
1511
|
-
</
|
1512
|
-
</
|
1536
|
+
</oneOrMore>
|
1537
|
+
</choice>
|
1513
1538
|
</define>
|
1514
1539
|
<define name="Annex-Section">
|
1515
1540
|
<optional>
|
@@ -101,7 +101,11 @@
|
|
101
101
|
<ref name="definitions"/>
|
102
102
|
</optional>
|
103
103
|
<oneOrMore>
|
104
|
-
<
|
104
|
+
<choice>
|
105
|
+
<ref name="clause"/>
|
106
|
+
<ref name="term-clause"/>
|
107
|
+
<ref name="terms"/>
|
108
|
+
</choice>
|
105
109
|
</oneOrMore>
|
106
110
|
</element>
|
107
111
|
</define>
|
@@ -136,7 +140,7 @@
|
|
136
140
|
<optional>
|
137
141
|
<ref name="section-title"/>
|
138
142
|
</optional>
|
139
|
-
<
|
143
|
+
<choice>
|
140
144
|
<choice>
|
141
145
|
<group>
|
142
146
|
<oneOrMore>
|
@@ -151,7 +155,7 @@
|
|
151
155
|
<oneOrMore>
|
152
156
|
<ref name="clause-subsection"/>
|
153
157
|
</oneOrMore>
|
154
|
-
</
|
158
|
+
</choice>
|
155
159
|
</define>
|
156
160
|
<define name="term">
|
157
161
|
<element name="term">
|
@@ -3643,6 +3643,7 @@
|
|
3643
3643
|
<fo:table-cell border="solid black 1pt" padding-left="1mm" padding-right="1mm" padding-top="1mm" number-columns-spanned="{$cols-count}">
|
3644
3644
|
|
3645
3645
|
|
3646
|
+
|
3646
3647
|
<xsl:attribute name="border">solid black 0.5pt</xsl:attribute>
|
3647
3648
|
|
3648
3649
|
|
@@ -3658,6 +3659,10 @@
|
|
3658
3659
|
|
3659
3660
|
|
3660
3661
|
|
3662
|
+
|
3663
|
+
<!-- for BSI (not PAS) display Notes before footnotes -->
|
3664
|
+
|
3665
|
+
|
3661
3666
|
<!-- except gb -->
|
3662
3667
|
|
3663
3668
|
<xsl:apply-templates select="../*[local-name()='note']" mode="process"/>
|
@@ -3689,6 +3694,10 @@
|
|
3689
3694
|
<!-- fn processing -->
|
3690
3695
|
<xsl:call-template name="fn_display"/>
|
3691
3696
|
|
3697
|
+
|
3698
|
+
<!-- for PAS display Notes after footnotes -->
|
3699
|
+
|
3700
|
+
|
3692
3701
|
</fo:table-cell>
|
3693
3702
|
</fo:table-row>
|
3694
3703
|
</fo:table-body>
|
@@ -3749,6 +3758,7 @@
|
|
3749
3758
|
<xsl:if test="$parent-name = 'tfoot'">
|
3750
3759
|
|
3751
3760
|
|
3761
|
+
|
3752
3762
|
<xsl:attribute name="border-left">solid black 0.5pt</xsl:attribute>
|
3753
3763
|
<xsl:attribute name="border-right">solid black 0.5pt</xsl:attribute>
|
3754
3764
|
|
@@ -3895,6 +3905,7 @@
|
|
3895
3905
|
|
3896
3906
|
|
3897
3907
|
|
3908
|
+
|
3898
3909
|
<xsl:attribute name="font-size">8pt</xsl:attribute>
|
3899
3910
|
<xsl:attribute name="margin-bottom">6pt</xsl:attribute>
|
3900
3911
|
|
@@ -3902,8 +3913,12 @@
|
|
3902
3913
|
|
3903
3914
|
|
3904
3915
|
|
3916
|
+
<!-- Table's note name (NOTE, for example) -->
|
3917
|
+
|
3905
3918
|
<fo:inline padding-right="2mm">
|
3906
3919
|
|
3920
|
+
|
3921
|
+
|
3907
3922
|
|
3908
3923
|
|
3909
3924
|
|
@@ -3911,6 +3926,8 @@
|
|
3911
3926
|
|
3912
3927
|
</fo:inline>
|
3913
3928
|
|
3929
|
+
|
3930
|
+
|
3914
3931
|
<xsl:apply-templates mode="process"/>
|
3915
3932
|
</fo:block>
|
3916
3933
|
|
@@ -3930,6 +3947,8 @@
|
|
3930
3947
|
<xsl:variable name="reference" select="@reference"/>
|
3931
3948
|
<xsl:if test="not(preceding-sibling::*[@reference = $reference])"> <!-- only unique reference puts in note-->
|
3932
3949
|
<fo:block margin-bottom="12pt">
|
3950
|
+
|
3951
|
+
|
3933
3952
|
|
3934
3953
|
|
3935
3954
|
|
@@ -3955,6 +3974,7 @@
|
|
3955
3974
|
<xsl:value-of select="@reference"/>
|
3956
3975
|
|
3957
3976
|
|
3977
|
+
|
3958
3978
|
</fo:inline>
|
3959
3979
|
<fo:inline>
|
3960
3980
|
|
@@ -4119,6 +4139,7 @@
|
|
4119
4139
|
|
4120
4140
|
<xsl:value-of select="@reference"/>
|
4121
4141
|
|
4142
|
+
|
4122
4143
|
</fo:basic-link>
|
4123
4144
|
</fo:inline>
|
4124
4145
|
</xsl:template><xsl:template match="*[local-name()='fn']/*[local-name()='p']">
|
@@ -5146,6 +5167,7 @@
|
|
5146
5167
|
|
5147
5168
|
|
5148
5169
|
|
5170
|
+
|
5149
5171
|
<fo:block-container margin-left="0mm">
|
5150
5172
|
|
5151
5173
|
|
@@ -6350,9 +6372,10 @@
|
|
6350
6372
|
|
6351
6373
|
|
6352
6374
|
</xsl:if>
|
6353
|
-
|
6375
|
+
|
6376
|
+
|
6377
|
+
|
6354
6378
|
<fo:basic-link internal-destination="{@bibitemid}" fox:alt-text="{@citeas}">
|
6355
|
-
|
6356
6379
|
<xsl:if test="normalize-space(@citeas) = ''">
|
6357
6380
|
<xsl:attribute name="fox:alt-text"><xsl:value-of select="."/></xsl:attribute>
|
6358
6381
|
</xsl:if>
|
@@ -6360,6 +6383,7 @@
|
|
6360
6383
|
|
6361
6384
|
|
6362
6385
|
|
6386
|
+
|
6363
6387
|
</xsl:if>
|
6364
6388
|
|
6365
6389
|
<xsl:apply-templates/>
|
@@ -7275,4 +7299,100 @@
|
|
7275
7299
|
<xsl:otherwise><xsl:value-of select="$default"/></xsl:otherwise>
|
7276
7300
|
</xsl:choose>
|
7277
7301
|
</xsl:attribute>
|
7302
|
+
</xsl:template><xsl:template name="number-to-words">
|
7303
|
+
<xsl:param name="number"/>
|
7304
|
+
<xsl:param name="first"/>
|
7305
|
+
<xsl:if test="$number != ''">
|
7306
|
+
<xsl:variable name="words">
|
7307
|
+
<words>
|
7308
|
+
<word cardinal="1">One-</word>
|
7309
|
+
<word ordinal="1">First </word>
|
7310
|
+
<word cardinal="2">Two-</word>
|
7311
|
+
<word ordinal="2">Second </word>
|
7312
|
+
<word cardinal="3">Three-</word>
|
7313
|
+
<word ordinal="3">Third </word>
|
7314
|
+
<word cardinal="4">Four-</word>
|
7315
|
+
<word ordinal="4">Fourth </word>
|
7316
|
+
<word cardinal="5">Five-</word>
|
7317
|
+
<word ordinal="5">Fifth </word>
|
7318
|
+
<word cardinal="6">Six-</word>
|
7319
|
+
<word ordinal="6">Sixth </word>
|
7320
|
+
<word cardinal="7">Seven-</word>
|
7321
|
+
<word ordinal="7">Seventh </word>
|
7322
|
+
<word cardinal="8">Eight-</word>
|
7323
|
+
<word ordinal="8">Eighth </word>
|
7324
|
+
<word cardinal="9">Nine-</word>
|
7325
|
+
<word ordinal="9">Ninth </word>
|
7326
|
+
<word ordinal="10">Tenth </word>
|
7327
|
+
<word ordinal="11">Eleventh </word>
|
7328
|
+
<word ordinal="12">Twelfth </word>
|
7329
|
+
<word ordinal="13">Thirteenth </word>
|
7330
|
+
<word ordinal="14">Fourteenth </word>
|
7331
|
+
<word ordinal="15">Fifteenth </word>
|
7332
|
+
<word ordinal="16">Sixteenth </word>
|
7333
|
+
<word ordinal="17">Seventeenth </word>
|
7334
|
+
<word ordinal="18">Eighteenth </word>
|
7335
|
+
<word ordinal="19">Nineteenth </word>
|
7336
|
+
<word cardinal="20">Twenty-</word>
|
7337
|
+
<word ordinal="20">Twentieth </word>
|
7338
|
+
<word cardinal="30">Thirty-</word>
|
7339
|
+
<word ordinal="30">Thirtieth </word>
|
7340
|
+
<word cardinal="40">Forty-</word>
|
7341
|
+
<word ordinal="40">Fortieth </word>
|
7342
|
+
<word cardinal="50">Fifty-</word>
|
7343
|
+
<word ordinal="50">Fiftieth </word>
|
7344
|
+
<word cardinal="60">Sixty-</word>
|
7345
|
+
<word ordinal="60">Sixtieth </word>
|
7346
|
+
<word cardinal="70">Seventy-</word>
|
7347
|
+
<word ordinal="70">Seventieth </word>
|
7348
|
+
<word cardinal="80">Eighty-</word>
|
7349
|
+
<word ordinal="80">Eightieth </word>
|
7350
|
+
<word cardinal="90">Ninety-</word>
|
7351
|
+
<word ordinal="90">Ninetieth </word>
|
7352
|
+
<word cardinal="100">Hundred-</word>
|
7353
|
+
<word ordinal="100">Hundredth </word>
|
7354
|
+
</words>
|
7355
|
+
</xsl:variable>
|
7356
|
+
|
7357
|
+
<xsl:variable name="ordinal" select="xalan:nodeset($words)//word[@ordinal = $number]/text()"/>
|
7358
|
+
|
7359
|
+
<xsl:variable name="value">
|
7360
|
+
<xsl:choose>
|
7361
|
+
<xsl:when test="$ordinal != ''">
|
7362
|
+
<xsl:value-of select="$ordinal"/>
|
7363
|
+
</xsl:when>
|
7364
|
+
<xsl:otherwise>
|
7365
|
+
<xsl:choose>
|
7366
|
+
<xsl:when test="$number < 100">
|
7367
|
+
<xsl:variable name="decade" select="concat(substring($number,1,1), '0')"/>
|
7368
|
+
<xsl:variable name="digit" select="substring($number,2)"/>
|
7369
|
+
<xsl:value-of select="xalan:nodeset($words)//word[@cardinal = $decade]/text()"/>
|
7370
|
+
<xsl:value-of select="xalan:nodeset($words)//word[@ordinal = $digit]/text()"/>
|
7371
|
+
</xsl:when>
|
7372
|
+
<xsl:otherwise>
|
7373
|
+
<!-- more 100 -->
|
7374
|
+
<xsl:variable name="hundred" select="substring($number,1,1)"/>
|
7375
|
+
<xsl:variable name="digits" select="number(substring($number,2))"/>
|
7376
|
+
<xsl:value-of select="xalan:nodeset($words)//word[@cardinal = $hundred]/text()"/>
|
7377
|
+
<xsl:value-of select="xalan:nodeset($words)//word[@cardinal = '100']/text()"/>
|
7378
|
+
<xsl:call-template name="number-to-words">
|
7379
|
+
<xsl:with-param name="number" select="$digits"/>
|
7380
|
+
</xsl:call-template>
|
7381
|
+
</xsl:otherwise>
|
7382
|
+
</xsl:choose>
|
7383
|
+
</xsl:otherwise>
|
7384
|
+
</xsl:choose>
|
7385
|
+
</xsl:variable>
|
7386
|
+
<xsl:choose>
|
7387
|
+
<xsl:when test="$first = 'true'">
|
7388
|
+
<xsl:variable name="value_lc" select="java:toLowerCase(java:java.lang.String.new($value))"/>
|
7389
|
+
<xsl:call-template name="capitalize">
|
7390
|
+
<xsl:with-param name="str" select="$value_lc"/>
|
7391
|
+
</xsl:call-template>
|
7392
|
+
</xsl:when>
|
7393
|
+
<xsl:otherwise>
|
7394
|
+
<xsl:value-of select="$value"/>
|
7395
|
+
</xsl:otherwise>
|
7396
|
+
</xsl:choose>
|
7397
|
+
</xsl:if>
|
7278
7398
|
</xsl:template></xsl:stylesheet>
|
data/metanorma-iec.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
28
28
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
|
29
29
|
|
30
|
-
spec.add_dependency "metanorma-iso", "~> 1.
|
30
|
+
spec.add_dependency "metanorma-iso", "~> 1.9.0"
|
31
31
|
spec.add_dependency "ruby-jing"
|
32
32
|
|
33
33
|
spec.add_development_dependency "byebug"
|
@@ -5,25 +5,29 @@ RSpec.describe IsoDoc do
|
|
5
5
|
it "generates file based on string input" do
|
6
6
|
FileUtils.rm_f "test.doc"
|
7
7
|
FileUtils.rm_f "test.html"
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
</note>
|
21
|
-
|
22
|
-
|
8
|
+
input = <<~INPUT
|
9
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
10
|
+
<bibdata>
|
11
|
+
<title>
|
12
|
+
<title type="title-intro" language="en" format="text/plain">Cereals and pulses</title>
|
13
|
+
<title type="title-main" language="en" format="text/plain">Specifications and test methods</title>
|
14
|
+
<title type="title-part" language="en" format="text/plain">Rice</title>
|
15
|
+
</title>
|
16
|
+
</bibdata>
|
17
|
+
<preface><foreword>
|
18
|
+
<note>
|
19
|
+
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
|
20
|
+
</note>
|
21
|
+
</foreword></preface>
|
22
|
+
</iso-standard>
|
23
23
|
INPUT
|
24
|
+
IsoDoc::Iec::HtmlConvert
|
25
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
26
|
+
htmlstylesheet: "spec/assets/html.css", filename: "test" })
|
27
|
+
.convert("test", input, false)
|
24
28
|
expect(File.exist?("test.html")).to be true
|
25
29
|
html = File.read("test.html", encoding: "UTF-8")
|
26
|
-
expect(html).to match(%r{<title>Cereals and pulses
|
30
|
+
expect(html).to match(%r{<title>Cereals and pulses — Specifications and test methods — Rice</title>})
|
27
31
|
expect(html).to match(%r{cdnjs\.cloudflare\.com/ajax/libs/mathjax/})
|
28
32
|
expect(html).to match(/delimiters: \[\['\(#\(', '\)#\)'\]\]/)
|
29
33
|
end
|
@@ -31,25 +35,29 @@ RSpec.describe IsoDoc do
|
|
31
35
|
it "generates HTML output docs with null configuration" do
|
32
36
|
FileUtils.rm_f "test.doc"
|
33
37
|
FileUtils.rm_f "test.html"
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
</note>
|
47
|
-
|
48
|
-
|
38
|
+
input = <<~INPUT
|
39
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
40
|
+
<bibdata>
|
41
|
+
<title>
|
42
|
+
<title type="title-intro" language="en" format="text/plain">Cereals and pulses</title>
|
43
|
+
<title type="title-main" language="en" format="text/plain">Specifications and test methods</title>
|
44
|
+
<title type="title-part" language="en" format="text/plain">Rice</title>
|
45
|
+
</title>
|
46
|
+
</bibdata>
|
47
|
+
<preface><foreword>
|
48
|
+
<note>
|
49
|
+
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
|
50
|
+
</note>
|
51
|
+
</foreword></preface>
|
52
|
+
</iso-standard>
|
49
53
|
INPUT
|
54
|
+
IsoDoc::Iec::HtmlConvert
|
55
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
56
|
+
htmlstylesheet: "spec/assets/html.css" })
|
57
|
+
.convert("test", input, false)
|
50
58
|
expect(File.exist?("test.html")).to be true
|
51
59
|
html = File.read("test.html", encoding: "UTF-8")
|
52
|
-
expect(html).to match(%r{<title>Cereals and pulses
|
60
|
+
expect(html).to match(%r{<title>Cereals and pulses — Specifications and test methods — Rice</title>})
|
53
61
|
expect(html).to match(%r{cdnjs\.cloudflare\.com/ajax/libs/mathjax/})
|
54
62
|
expect(html).to match(/delimiters: \[\['\(#\(', '\)#\)'\]\]/)
|
55
63
|
end
|
@@ -57,15 +65,19 @@ RSpec.describe IsoDoc do
|
|
57
65
|
it "generates Word output docs with null configuration" do
|
58
66
|
FileUtils.rm_f "test.doc"
|
59
67
|
FileUtils.rm_f "test.html"
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
</note>
|
66
|
-
|
67
|
-
|
68
|
+
input = <<~INPUT
|
69
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
70
|
+
<preface><foreword>
|
71
|
+
<note>
|
72
|
+
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
|
73
|
+
</note>
|
74
|
+
</foreword></preface>
|
75
|
+
</iso-standard>
|
68
76
|
INPUT
|
77
|
+
IsoDoc::Iec::WordConvert
|
78
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
79
|
+
htmlstylesheet: "spec/assets/html.css" })
|
80
|
+
.convert("test", input, false)
|
69
81
|
expect(File.exist?("test.doc")).to be true
|
70
82
|
word = File.read("test.doc", encoding: "UTF-8")
|
71
83
|
expect(word).to match(/<style>/)
|
@@ -74,7 +86,9 @@ RSpec.describe IsoDoc do
|
|
74
86
|
it "generates HTML output docs with null configuration from file" do
|
75
87
|
FileUtils.rm_f "spec/assets/iso.doc"
|
76
88
|
FileUtils.rm_f "spec/assets/iso.html"
|
77
|
-
IsoDoc::Iec::HtmlConvert
|
89
|
+
IsoDoc::Iec::HtmlConvert
|
90
|
+
.new({ wordstylesheet: "word.css", htmlstylesheet: "html.css" })
|
91
|
+
.convert("spec/assets/iso.xml", nil, false)
|
78
92
|
expect(File.exist?("spec/assets/iso.html")).to be true
|
79
93
|
html = File.read("spec/assets/iso.html", encoding: "UTF-8")
|
80
94
|
expect(html).to match(/<style>/)
|
@@ -84,198 +98,213 @@ RSpec.describe IsoDoc do
|
|
84
98
|
|
85
99
|
it "generates Word output docs with null configuration from file" do
|
86
100
|
FileUtils.rm_f "spec/assets/iso.doc"
|
87
|
-
IsoDoc::Iec::WordConvert
|
101
|
+
IsoDoc::Iec::WordConvert
|
102
|
+
.new({ wordstylesheet: "word.css", htmlstylesheet: "html.css" })
|
103
|
+
.convert("spec/assets/iso.xml", nil, false)
|
88
104
|
expect(File.exist?("spec/assets/iso.doc")).to be true
|
89
105
|
word = File.read("spec/assets/iso.doc", encoding: "UTF-8")
|
90
106
|
expect(word).to match(/<w:WordDocument>/)
|
91
107
|
expect(word).to match(/<style>/)
|
92
108
|
end
|
93
109
|
|
94
|
-
|
110
|
+
it "generates Pdf output docs with null configuration from file" do
|
95
111
|
FileUtils.rm_f "spec/assets/iso.pdf"
|
96
|
-
IsoDoc::Iec::PdfConvert
|
112
|
+
IsoDoc::Iec::PdfConvert
|
113
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
114
|
+
htmlstylesheet: "spec/assets/html.css" })
|
115
|
+
.convert("spec/assets/iso.xml", nil, false)
|
97
116
|
expect(File.exist?("spec/assets/iso.pdf")).to be true
|
98
117
|
end
|
99
118
|
|
100
119
|
it "populates Word template with terms reference labels" do
|
101
120
|
FileUtils.rm_f "test.doc"
|
102
121
|
FileUtils.rm_f "test.html"
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
<
|
109
|
-
<
|
110
|
-
<
|
111
|
-
<
|
112
|
-
<
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
</
|
118
|
-
|
119
|
-
</
|
120
|
-
</sections>
|
121
|
-
</iso-standard>
|
122
|
-
|
122
|
+
input = <<~INPUT
|
123
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
124
|
+
<sections>
|
125
|
+
<terms id="_terms_and_definitions" obligation="normative"><title>1<tab/>Terms and Definitions</title>
|
126
|
+
<term id="paddy1">
|
127
|
+
<name>1.1</name>
|
128
|
+
<preferred>paddy</preferred>
|
129
|
+
<definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
|
130
|
+
<termsource status="modified">
|
131
|
+
<origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality>ISO 7301:2011, 3.1</origin>
|
132
|
+
<modification>
|
133
|
+
<p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
|
134
|
+
</modification>
|
135
|
+
</termsource></term>
|
136
|
+
</terms>
|
137
|
+
</sections>
|
138
|
+
</iso-standard>
|
123
139
|
INPUT
|
124
|
-
|
125
|
-
|
140
|
+
IsoDoc::Iec::WordConvert
|
141
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
142
|
+
htmlstylesheet: "spec/assets/html.css" })
|
143
|
+
.convert("test", input, false)
|
144
|
+
word = File.read("test.doc", encoding: "UTF-8")
|
145
|
+
.sub(/^.*<div class="WordSection3">/m, '<div class="WordSection3">')
|
146
|
+
.sub(%r{<br.*$}m, "")
|
126
147
|
expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
148
|
+
<div class="WordSection3">
|
149
|
+
#{IEC_TITLE1.gsub(/ /, ' ')}
|
150
|
+
<div><a name="_terms_and_definitions" id="_terms_and_definitions"></a><h1 class="main">1<span style="mso-tab-count:1">  </span>Terms and Definitions</h1>
|
151
|
+
<p class="TermNum"><a name="paddy1" id="paddy1"></a>1.1</p><p class="Terms" style="text-align:left;">paddy</p>
|
152
|
+
<p class="MsoNormal"><a name="_eb29b35e-123e-4d1c-b50b-2714d41e747f" id="_eb29b35e-123e-4d1c-b50b-2714d41e747f"></a>rice retaining its husk after threshing</p>
|
153
|
+
<p class="MsoNormal">[SOURCE: <a href="#ISO7301">ISO 7301:2011, 3.1</a>, modified — The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here]</p></div>
|
154
|
+
</div>
|
134
155
|
OUTPUT
|
135
156
|
end
|
136
157
|
|
137
158
|
it "processes IsoXML terms for HTML" do
|
138
159
|
FileUtils.rm_f "test.html"
|
139
160
|
FileUtils.rm_f "test.doc"
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
<
|
146
|
-
<
|
147
|
-
<
|
148
|
-
<
|
149
|
-
<
|
150
|
-
<
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
<
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
<
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
</
|
168
|
-
|
169
|
-
<
|
170
|
-
<
|
171
|
-
<
|
172
|
-
<
|
173
|
-
<
|
174
|
-
<
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
</
|
180
|
-
<termnote id="_671a1994-4783-40d0-bc81-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
<
|
185
|
-
|
186
|
-
</
|
187
|
-
|
188
|
-
|
189
|
-
</
|
190
|
-
</terms>
|
191
|
-
</sections>
|
192
|
-
</iso-standard>
|
161
|
+
input = <<~INPUT
|
162
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
163
|
+
<sections>
|
164
|
+
<terms id="_terms_and_definitions" obligation="normative"><title>1<tab/>Terms and Definitions</title>
|
165
|
+
<term id="paddy1">
|
166
|
+
<name>1.1</name>
|
167
|
+
<preferred>paddy</preferred>
|
168
|
+
<domain>rice</domain>
|
169
|
+
<definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
|
170
|
+
<termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f892">
|
171
|
+
<p id="_65c9a509-9a89-4b54-a890-274126aeb55c">Foreign seeds, husks, bran, sand, dust.</p>
|
172
|
+
<ul>
|
173
|
+
<li>A</li>
|
174
|
+
</ul>
|
175
|
+
</termexample>
|
176
|
+
<termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f894">
|
177
|
+
<ul>
|
178
|
+
<li>A</li>
|
179
|
+
</ul>
|
180
|
+
</termexample>
|
181
|
+
<termsource status="modified">
|
182
|
+
<origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality></origin>
|
183
|
+
<modification>
|
184
|
+
<p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
|
185
|
+
</modification>
|
186
|
+
</termsource></term>
|
187
|
+
<term id="paddy">
|
188
|
+
<name>1.2</name>
|
189
|
+
<preferred>paddy</preferred><admitted>paddy rice</admitted>
|
190
|
+
<admitted>rough rice</admitted>
|
191
|
+
<deprecates>cargo rice</deprecates>
|
192
|
+
<definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
|
193
|
+
<termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f893">
|
194
|
+
<ul>
|
195
|
+
<li>A</li>
|
196
|
+
</ul>
|
197
|
+
</termexample>
|
198
|
+
<termnote id="_671a1994-4783-40d0-bc81-987d06ffb74e">
|
199
|
+
<p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">The starch of waxy rice consists almost entirely of amylopectin. The kernels have a tendency to stick together after cooking.</p>
|
200
|
+
</termnote>
|
201
|
+
<termnote id="_671a1994-4783-40d0-bc81-987d06ffb74f">
|
202
|
+
<ul><li>A</li></ul>
|
203
|
+
<p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">The starch of waxy rice consists almost entirely of amylopectin. The kernels have a tendency to stick together after cooking.</p>
|
204
|
+
</termnote>
|
205
|
+
<termsource status="identical">
|
206
|
+
<origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality></origin>
|
207
|
+
</termsource></term>
|
208
|
+
</terms>
|
209
|
+
</sections>
|
210
|
+
</iso-standard>
|
193
211
|
INPUT
|
212
|
+
IsoDoc::Iec::HtmlConvert
|
213
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
214
|
+
htmlstylesheet: "spec/assets/html.css" })
|
215
|
+
.convert("test", input, false)
|
194
216
|
expect(File.exist?("test.html")).to be true
|
195
217
|
html = File.read("test.html", encoding: "UTF-8")
|
196
218
|
expect(html).to match(%r{<h2 class="TermNum" id="paddy1">1\.1</h2>})
|
197
219
|
expect(html).to match(%r{<h2 class="TermNum" id="paddy">1\.2</h2>})
|
198
220
|
end
|
199
221
|
|
200
|
-
|
222
|
+
it "inserts default paragraph between two tables for Word" do
|
201
223
|
FileUtils.rm_f "test.doc"
|
202
224
|
FileUtils.rm_f "test.html"
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
</example>
|
209
|
-
<example id="_63112cbc-cde0-435f-9553-e0b8c4f5851d">
|
210
|
-
|
211
|
-
</example>
|
212
|
-
|
213
|
-
|
225
|
+
input = <<~INPUT
|
226
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
227
|
+
<annex id="P" inline-header="false" obligation="normative">
|
228
|
+
<example id="_63112cbc-cde0-435f-9553-e0b8c4f5851c">
|
229
|
+
<p id="_158d4efa-b1c9-4aec-b325-756de8e4c968">'1M', '01M', and '0001M' all describe the calendar month January.</p>
|
230
|
+
</example>
|
231
|
+
<example id="_63112cbc-cde0-435f-9553-e0b8c4f5851d">
|
232
|
+
<p id="_158d4efa-b1c9-4aec-b325-756de8e4c969">'2M', '02M', and '0002M' all describe the calendar month February.</p>
|
233
|
+
</example>
|
234
|
+
</annex>
|
235
|
+
</iso-standard>
|
214
236
|
INPUT
|
215
|
-
|
216
|
-
|
237
|
+
IsoDoc::Iec::WordConvert
|
238
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
239
|
+
htmlstylesheet: "spec/assets/html.css" })
|
240
|
+
.convert("test", input, false)
|
241
|
+
word = File.read("test.doc", encoding: "UTF-8")
|
242
|
+
.sub(/^.*<div class="WordSection3">/m, '<div class="WordSection3">')
|
243
|
+
.sub(%r{<br[^>]*>\s*<div class="colophon">.*$}m, "")
|
217
244
|
expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
245
|
+
<div class="WordSection3">
|
246
|
+
#{IEC_TITLE1.gsub(/ /, ' ')}
|
247
|
+
<p class="MsoNormal">
|
248
|
+
<br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
|
249
|
+
</p>
|
250
|
+
<div class="Section3"><a name="P" id="P"></a>
|
251
|
+
<div class="example"><a name="_63112cbc-cde0-435f-9553-e0b8c4f5851c" id="_63112cbc-cde0-435f-9553-e0b8c4f5851c"></a>
|
252
|
+
<p class="example"><span style="mso-tab-count:1">  </span>'1M', '01M', and '0001M' all describe the calendar month January.</p>
|
253
|
+
</div>
|
254
|
+
<div class="example"><a name="_63112cbc-cde0-435f-9553-e0b8c4f5851d" id="_63112cbc-cde0-435f-9553-e0b8c4f5851d"></a>
|
255
|
+
<p class="example"><span style="mso-tab-count:1">  </span>'2M', '02M', and '0002M' all describe the calendar month February.</p>
|
256
|
+
</div>
|
229
257
|
</div>
|
230
258
|
</div>
|
231
|
-
</div>
|
232
259
|
OUTPUT
|
233
260
|
end
|
234
261
|
|
235
|
-
|
236
|
-
|
262
|
+
it "processes source code in tables (Word)" do
|
263
|
+
FileUtils.rm_f "test.doc"
|
237
264
|
FileUtils.rm_f "test.html"
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
</table>
|
249
|
-
|
250
|
-
|
265
|
+
input = <<~INPUT
|
266
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
267
|
+
<annex id="P" inline-header="false" obligation="normative">
|
268
|
+
<sourcecode lang="ruby" id="A">puts "Hello, world."</sourcecode>
|
269
|
+
<table id="samplecode">
|
270
|
+
<tbody>
|
271
|
+
<tr><td>
|
272
|
+
<sourcecode lang="ruby" id="B">puts "Hello, world."</sourcecode>
|
273
|
+
</td></tr>
|
274
|
+
</tbody>
|
275
|
+
</table>
|
276
|
+
</annex>
|
277
|
+
</iso-standard>
|
251
278
|
INPUT
|
252
|
-
|
253
|
-
|
279
|
+
IsoDoc::Iec::WordConvert
|
280
|
+
.new({ wordstylesheet: "spec/assets/word.css",
|
281
|
+
htmlstylesheet: "spec/assets/html.css" })
|
282
|
+
.convert("test", input, false)
|
283
|
+
word = File.read("test.doc", encoding: "UTF-8")
|
284
|
+
.sub(/^.*<div class="WordSection3">/m, '<div class="WordSection3">')
|
285
|
+
.sub(%r{<br[^>]*>\s*<div class="colophon">.*$}m, "")
|
254
286
|
expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
287
|
+
<div class="WordSection3">
|
288
|
+
#{IEC_TITLE1.gsub(/ /, ' ')}
|
289
|
+
<p class="MsoNormal">
|
290
|
+
<br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
|
291
|
+
</p>
|
292
|
+
<div class="Section3"><a name="P" id="P"></a>
|
293
|
+
<p class="Sourcecode"><a name="A" id="A"></a>puts "Hello, world."</p>
|
294
|
+
<div align='center' class='table_container'>
|
295
|
+
<table class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
|
296
|
+
<a name='samplecode' id='samplecode'/>
|
297
|
+
<tbody>
|
298
|
+
<tr>
|
299
|
+
<td style="border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;" class="TABLE-cell">
|
300
|
+
<p class="CODE-TableCell"><a name="B" id="B"></a>puts "Hello, world."</p>
|
301
|
+
</td>
|
302
|
+
</tr>
|
303
|
+
</tbody>
|
304
|
+
</table>
|
305
|
+
</div>
|
273
306
|
</div>
|
274
307
|
</div>
|
275
|
-
</div>
|
276
308
|
OUTPUT
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
309
|
+
end
|
281
310
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-iec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metanorma-iso
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.9.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.9.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: ruby-jing
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|