metanorma-standoc 2.2.4 → 2.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/automerge.yml +31 -0
- data/lib/isodoc/html/htmlstyle.css +1 -1
- data/lib/metanorma/standoc/base.rb +1 -0
- data/lib/metanorma/standoc/basicdoc.rng +0 -27
- data/lib/metanorma/standoc/biblio-standoc.rng +164 -0
- data/lib/metanorma/standoc/biblio.rng +45 -18
- data/lib/metanorma/standoc/blocks.rb +2 -1
- data/lib/metanorma/standoc/cleanup.rb +1 -0
- data/lib/metanorma/standoc/cleanup_asciibib.rb +110 -0
- data/lib/metanorma/standoc/cleanup_biblio.rb +5 -111
- data/lib/metanorma/standoc/cleanup_block.rb +7 -6
- data/lib/metanorma/standoc/cleanup_boilerplate.rb +6 -6
- data/lib/metanorma/standoc/cleanup_inline.rb +2 -2
- data/lib/metanorma/standoc/cleanup_text.rb +10 -3
- data/lib/metanorma/standoc/inline.rb +3 -1
- data/lib/metanorma/standoc/isodoc-compile.rng +7 -0
- data/lib/metanorma/standoc/isodoc.rng +32 -195
- data/lib/metanorma/standoc/macros_plantuml.rb +23 -10
- data/lib/metanorma/standoc/validate.rb +8 -8
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +0 -1
- data/spec/metanorma/biblio_spec.rb +152 -144
- data/spec/metanorma/blocks_spec.rb +2 -2
- data/spec/metanorma/cleanup_sections_spec.rb +1 -2
- data/spec/metanorma/cleanup_spec.rb +11 -0
- data/spec/metanorma/inline_spec.rb +70 -8
- data/spec/metanorma/isobib_cache_spec.rb +2 -2
- data/spec/metanorma/macros_plantuml_spec.rb +4 -4
- data/spec/metanorma/macros_spec.rb +2 -2
- data/spec/metanorma/refs_spec.rb +25 -25
- data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +3 -3
- data/spec/vcr_cassettes/bsi16341.yml +70 -72
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +82 -82
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +12 -12
- data/spec/vcr_cassettes/hide_refs.yml +58 -58
- data/spec/vcr_cassettes/isobib_get_123.yml +13 -13
- data/spec/vcr_cassettes/isobib_get_123_1.yml +22 -22
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +33 -33
- data/spec/vcr_cassettes/isobib_get_123_2.yml +25 -25
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +12 -12
- data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +37 -21
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +45 -45
- data/spec/vcr_cassettes/std-link.yml +12 -12
- metadata +6 -16
@@ -53,11 +53,11 @@ module Metanorma
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
TERM_CLAUSE = "//sections/terms | "\
|
56
|
+
TERM_CLAUSE = "//sections/terms | " \
|
57
57
|
"//sections/clause[descendant::terms]".freeze
|
58
58
|
|
59
59
|
NORM_REF =
|
60
|
-
"//bibliography/references[@normative = 'true'][not(@hidden)] | "\
|
60
|
+
"//bibliography/references[@normative = 'true'][not(@hidden)] | " \
|
61
61
|
"//bibliography/clause[.//references[@normative = 'true']]".freeze
|
62
62
|
|
63
63
|
def boilerplate_isodoc(xmldoc)
|
@@ -79,7 +79,7 @@ module Metanorma
|
|
79
79
|
|
80
80
|
def unwrap_boilerplate_clauses(xmldoc, xpath)
|
81
81
|
xmldoc.xpath(xpath).each do |f|
|
82
|
-
f.xpath(".//clause[@type = 'boilerplate'] | "\
|
82
|
+
f.xpath(".//clause[@type = 'boilerplate'] | " \
|
83
83
|
".//note[@type = 'boilerplate']").each do |c|
|
84
84
|
c&.at("./title")&.remove
|
85
85
|
c.replace(c.children)
|
@@ -175,9 +175,9 @@ module Metanorma
|
|
175
175
|
end
|
176
176
|
|
177
177
|
def indirect_eref_to_xref(eref, ident)
|
178
|
-
loc = eref
|
178
|
+
loc = eref.at("./localityStack[locality[@type = 'anchor']]")
|
179
179
|
&.remove&.text ||
|
180
|
-
eref
|
180
|
+
eref.at("./locality[@type = 'anchor']")&.remove&.text || ident
|
181
181
|
eref.name = "xref"
|
182
182
|
eref.delete("bibitemid")
|
183
183
|
eref.delete("citeas")
|
@@ -213,7 +213,7 @@ module Metanorma
|
|
213
213
|
def bibdata_embed_hdr_cleanup(xmldoc)
|
214
214
|
return if @embed_hdr.nil? || @embed_hdr.empty?
|
215
215
|
|
216
|
-
xmldoc.at("//bibdata") << "<relation type='derivedFrom'>"\
|
216
|
+
xmldoc.at("//bibdata") << "<relation type='derivedFrom'>" \
|
217
217
|
"#{hdr2bibitem(@embed_hdr.first)}</relation>"
|
218
218
|
end
|
219
219
|
|
@@ -35,7 +35,7 @@ module Metanorma
|
|
35
35
|
|
36
36
|
def li_bookmark_cleanup(xmldoc)
|
37
37
|
xmldoc.xpath("//li[descendant::bookmark]").each do |x|
|
38
|
-
if x.at("./*[1][local-name() = 'p']/"\
|
38
|
+
if x.at("./*[1][local-name() = 'p']/" \
|
39
39
|
"*[1][local-name() = 'bookmark']") &&
|
40
40
|
empty_text_before_first_element(x.elements[0])
|
41
41
|
bookmark_to_id(x, x.elements[0].elements[0])
|
@@ -45,7 +45,7 @@ module Metanorma
|
|
45
45
|
|
46
46
|
def dt_bookmark_cleanup(xmldoc)
|
47
47
|
xmldoc.xpath("//dt[descendant::bookmark]").each do |x|
|
48
|
-
if x.at("./*[1][local-name() = 'p']/"\
|
48
|
+
if x.at("./*[1][local-name() = 'p']/" \
|
49
49
|
"*[1][local-name() = 'bookmark']") &&
|
50
50
|
empty_text_before_first_element(x.elements[0])
|
51
51
|
bookmark_to_id(x, x.elements[0].elements[0])
|
@@ -43,7 +43,7 @@ module Metanorma
|
|
43
43
|
.intersection(IGNORE_QUOTES_ELEMENTS).empty? &&
|
44
44
|
((elem.previous.text.strip.empty? &&
|
45
45
|
!empty_tag_with_text_content?(elem.previous)) ||
|
46
|
-
elem.previous
|
46
|
+
ignoretext?(elem.previous)))
|
47
47
|
end
|
48
48
|
|
49
49
|
def uninterrupt_quotes_around_xml1(elem)
|
@@ -56,13 +56,20 @@ module Metanorma
|
|
56
56
|
prev.content = "#{prev.text}#{m[1]}"
|
57
57
|
end
|
58
58
|
|
59
|
+
IGNORE_TEXT_ELEMENTS =
|
60
|
+
%w(index fn).freeze
|
61
|
+
|
62
|
+
def ignoretext?(elem)
|
63
|
+
IGNORE_TEXT_ELEMENTS.include? elem.name
|
64
|
+
end
|
65
|
+
|
59
66
|
def block?(elem)
|
60
67
|
%w(title name variant-title clause figure annex example introduction
|
61
68
|
foreword acknowledgements note li th td dt dd p quote label
|
62
69
|
abstract preferred admitted related deprecates field-of-application
|
63
70
|
usage-info expression pronunciation grammar-value domain
|
64
71
|
definition termnote termexample modification description
|
65
|
-
newcontent floating-title).include? elem.name
|
72
|
+
newcontent floating-title tab).include? elem.name
|
66
73
|
end
|
67
74
|
|
68
75
|
def empty_tag_with_text_content?(elem)
|
@@ -79,7 +86,7 @@ module Metanorma
|
|
79
86
|
ancestors = x.path.split(%r{/})[1..-2]
|
80
87
|
ancestors.intersection(IGNORE_QUOTES_ELEMENTS).empty? and
|
81
88
|
dumb2smart_quotes1(x, prev)
|
82
|
-
prev = x.text
|
89
|
+
prev = x.text if ancestors.intersection(IGNORE_TEXT_ELEMENTS).empty?
|
83
90
|
end
|
84
91
|
end
|
85
92
|
|
@@ -45,6 +45,7 @@ module Metanorma
|
|
45
45
|
m.nil? and return { target: t, type: "inline", text: node.text }
|
46
46
|
{ target: t, type: m[:fn].nil? ? "inline" : "footnote",
|
47
47
|
case: m[:case]&.sub(/%$/, ""),
|
48
|
+
style: m[:style]&.sub(/^style=/, "")&.sub(/%$/, "") || @xrefstyle,
|
48
49
|
droploc: m[:drop].nil? && m[:drop2].nil? ? nil : true,
|
49
50
|
text: inline_anchor_xref_text(m, node),
|
50
51
|
hidden: m[:hidden] }
|
@@ -52,12 +53,13 @@ module Metanorma
|
|
52
53
|
|
53
54
|
def inline_anchor_xref_match(node)
|
54
55
|
/^(?:hidden%(?<hidden>[^,]+),?)?
|
56
|
+
(?<style>style=[^%]+%)?
|
55
57
|
(?<drop>droploc%)?(?<case>capital%|lowercase%)?(?<drop2>droploc%)?
|
56
58
|
(?<fn>fn:?\s*)?(?<text>.*)$/x.match node.text
|
57
59
|
end
|
58
60
|
|
59
61
|
def inline_anchor_xref_text(match, node)
|
60
|
-
if %i[case fn drop drop2 hidden].any? do |x|
|
62
|
+
if %i[case fn drop drop2 hidden style].any? do |x|
|
61
63
|
!match[x].nil?
|
62
64
|
end
|
63
65
|
match[:text]
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<grammar ns="https://www.metanorma.org/ns/standoc" xmlns="http://relaxng.org/ns/structure/1.0">
|
3
|
+
<!-- default namespace isostandard = "https://www.metanorma.com/ns/iso" -->
|
4
|
+
<include href="biblio-standoc.rng"/>
|
5
|
+
<include href="isodoc.rng"/>
|
6
|
+
</grammar>
|
7
|
+
<!-- end overrides -->
|
@@ -17,21 +17,9 @@
|
|
17
17
|
these elements; we just want one namespace for any child grammars
|
18
18
|
of this.
|
19
19
|
-->
|
20
|
-
<grammar
|
20
|
+
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
21
21
|
<include href="reqt.rng"/>
|
22
|
-
<!-- include "biblio.rnc" { } -->
|
23
22
|
<include href="basicdoc.rng">
|
24
|
-
<start>
|
25
|
-
<ref name="standard-document"/>
|
26
|
-
</start>
|
27
|
-
<define name="doctype">
|
28
|
-
<element name="doctype">
|
29
|
-
<optional>
|
30
|
-
<attribute name="abbreviation"/>
|
31
|
-
</optional>
|
32
|
-
<ref name="DocumentType"/>
|
33
|
-
</element>
|
34
|
-
</define>
|
35
23
|
<define name="admonition">
|
36
24
|
<element name="admonition">
|
37
25
|
<attribute name="type">
|
@@ -117,24 +105,6 @@
|
|
117
105
|
</optional>
|
118
106
|
</element>
|
119
107
|
</define>
|
120
|
-
<define name="bibitem">
|
121
|
-
<element name="bibitem">
|
122
|
-
<attribute name="id">
|
123
|
-
<data type="ID"/>
|
124
|
-
</attribute>
|
125
|
-
<optional>
|
126
|
-
<attribute name="hidden">
|
127
|
-
<data type="boolean"/>
|
128
|
-
</attribute>
|
129
|
-
</optional>
|
130
|
-
<optional>
|
131
|
-
<attribute name="suppress_identifier">
|
132
|
-
<data type="boolean"/>
|
133
|
-
</attribute>
|
134
|
-
</optional>
|
135
|
-
<ref name="BibliographicItem"/>
|
136
|
-
</element>
|
137
|
-
</define>
|
138
108
|
<define name="section-title">
|
139
109
|
<element name="title">
|
140
110
|
<zeroOrMore>
|
@@ -205,6 +175,15 @@
|
|
205
175
|
<data type="boolean"/>
|
206
176
|
</attribute>
|
207
177
|
</optional>
|
178
|
+
<optional>
|
179
|
+
<attribute name="style">
|
180
|
+
<choice>
|
181
|
+
<value>basic</value>
|
182
|
+
<value>full</value>
|
183
|
+
<value>short</value>
|
184
|
+
</choice>
|
185
|
+
</attribute>
|
186
|
+
</optional>
|
208
187
|
<ref name="XrefBody"/>
|
209
188
|
</element>
|
210
189
|
</define>
|
@@ -239,42 +218,6 @@
|
|
239
218
|
<ref name="PureTextElement"/>
|
240
219
|
</oneOrMore>
|
241
220
|
</define>
|
242
|
-
<define name="localityStack">
|
243
|
-
<element name="localityStack">
|
244
|
-
<optional>
|
245
|
-
<attribute name="connective">
|
246
|
-
<choice>
|
247
|
-
<value>and</value>
|
248
|
-
<value>or</value>
|
249
|
-
<value>from</value>
|
250
|
-
<value>to</value>
|
251
|
-
<value/>
|
252
|
-
</choice>
|
253
|
-
</attribute>
|
254
|
-
</optional>
|
255
|
-
<zeroOrMore>
|
256
|
-
<ref name="locality"/>
|
257
|
-
</zeroOrMore>
|
258
|
-
</element>
|
259
|
-
</define>
|
260
|
-
<define name="sourceLocalityStack">
|
261
|
-
<element name="sourceLocalityStack">
|
262
|
-
<optional>
|
263
|
-
<attribute name="connective">
|
264
|
-
<choice>
|
265
|
-
<value>and</value>
|
266
|
-
<value>or</value>
|
267
|
-
<value>from</value>
|
268
|
-
<value>to</value>
|
269
|
-
<value/>
|
270
|
-
</choice>
|
271
|
-
</attribute>
|
272
|
-
</optional>
|
273
|
-
<zeroOrMore>
|
274
|
-
<ref name="sourceLocality"/>
|
275
|
-
</zeroOrMore>
|
276
|
-
</element>
|
277
|
-
</define>
|
278
221
|
<define name="ul">
|
279
222
|
<element name="ul">
|
280
223
|
<attribute name="id">
|
@@ -818,21 +761,6 @@
|
|
818
761
|
</zeroOrMore>
|
819
762
|
</element>
|
820
763
|
</define>
|
821
|
-
<define name="BibDataExtensionType">
|
822
|
-
<ref name="doctype"/>
|
823
|
-
<optional>
|
824
|
-
<ref name="docsubtype"/>
|
825
|
-
</optional>
|
826
|
-
<optional>
|
827
|
-
<ref name="editorialgroup"/>
|
828
|
-
</optional>
|
829
|
-
<zeroOrMore>
|
830
|
-
<ref name="ics"/>
|
831
|
-
</zeroOrMore>
|
832
|
-
<zeroOrMore>
|
833
|
-
<ref name="structuredidentifier"/>
|
834
|
-
</zeroOrMore>
|
835
|
-
</define>
|
836
764
|
<!-- TitleType = text -->
|
837
765
|
<define name="sections">
|
838
766
|
<element name="sections">
|
@@ -872,7 +800,7 @@
|
|
872
800
|
<ref name="BasicBlock"/>
|
873
801
|
</zeroOrMore>
|
874
802
|
<zeroOrMore>
|
875
|
-
<ref name="
|
803
|
+
<ref name="doc_bibitem"/>
|
876
804
|
<zeroOrMore>
|
877
805
|
<ref name="note"/>
|
878
806
|
</zeroOrMore>
|
@@ -1210,6 +1138,24 @@
|
|
1210
1138
|
</define>
|
1211
1139
|
</include>
|
1212
1140
|
<!-- end overrides -->
|
1141
|
+
<define name="doc_bibitem">
|
1142
|
+
<element name="bibitem">
|
1143
|
+
<attribute name="id">
|
1144
|
+
<data type="ID"/>
|
1145
|
+
</attribute>
|
1146
|
+
<optional>
|
1147
|
+
<attribute name="hidden">
|
1148
|
+
<data type="boolean"/>
|
1149
|
+
</attribute>
|
1150
|
+
</optional>
|
1151
|
+
<optional>
|
1152
|
+
<attribute name="suppress_identifier">
|
1153
|
+
<data type="boolean"/>
|
1154
|
+
</attribute>
|
1155
|
+
</optional>
|
1156
|
+
<ref name="BibliographicItem"/>
|
1157
|
+
</element>
|
1158
|
+
</define>
|
1213
1159
|
<define name="image" combine="choice">
|
1214
1160
|
<element name="svg">
|
1215
1161
|
<oneOrMore>
|
@@ -1228,14 +1174,6 @@
|
|
1228
1174
|
<value>tag</value>
|
1229
1175
|
</choice>
|
1230
1176
|
</define>
|
1231
|
-
<define name="docsubtype">
|
1232
|
-
<element name="subdoctype">
|
1233
|
-
<ref name="DocumentSubtype"/>
|
1234
|
-
</element>
|
1235
|
-
</define>
|
1236
|
-
<define name="DocumentSubtype">
|
1237
|
-
<text/>
|
1238
|
-
</define>
|
1239
1177
|
<define name="colgroup">
|
1240
1178
|
<element name="colgroup">
|
1241
1179
|
<oneOrMore>
|
@@ -1597,45 +1535,6 @@
|
|
1597
1535
|
</choice>
|
1598
1536
|
</element>
|
1599
1537
|
</define>
|
1600
|
-
<define name="editorialgroup">
|
1601
|
-
<element name="editorialgroup">
|
1602
|
-
<oneOrMore>
|
1603
|
-
<ref name="technical-committee"/>
|
1604
|
-
</oneOrMore>
|
1605
|
-
</element>
|
1606
|
-
</define>
|
1607
|
-
<define name="technical-committee">
|
1608
|
-
<element name="technical-committee">
|
1609
|
-
<ref name="IsoWorkgroup"/>
|
1610
|
-
</element>
|
1611
|
-
</define>
|
1612
|
-
<define name="IsoWorkgroup">
|
1613
|
-
<optional>
|
1614
|
-
<attribute name="number"/>
|
1615
|
-
</optional>
|
1616
|
-
<optional>
|
1617
|
-
<attribute name="type"/>
|
1618
|
-
</optional>
|
1619
|
-
<optional>
|
1620
|
-
<attribute name="identifier"/>
|
1621
|
-
</optional>
|
1622
|
-
<optional>
|
1623
|
-
<attribute name="prefix"/>
|
1624
|
-
</optional>
|
1625
|
-
<text/>
|
1626
|
-
</define>
|
1627
|
-
<define name="ics">
|
1628
|
-
<element name="ics">
|
1629
|
-
<element name="code">
|
1630
|
-
<text/>
|
1631
|
-
</element>
|
1632
|
-
<optional>
|
1633
|
-
<element name="text">
|
1634
|
-
<text/>
|
1635
|
-
</element>
|
1636
|
-
</optional>
|
1637
|
-
</element>
|
1638
|
-
</define>
|
1639
1538
|
<define name="standard-document">
|
1640
1539
|
<element name="standard-document">
|
1641
1540
|
<attribute name="version"/>
|
@@ -2466,71 +2365,6 @@
|
|
2466
2365
|
</optional>
|
2467
2366
|
</element>
|
2468
2367
|
</define>
|
2469
|
-
<define name="structuredidentifier">
|
2470
|
-
<element name="structuredidentifier">
|
2471
|
-
<optional>
|
2472
|
-
<attribute name="type"/>
|
2473
|
-
</optional>
|
2474
|
-
<oneOrMore>
|
2475
|
-
<element name="agency">
|
2476
|
-
<text/>
|
2477
|
-
</element>
|
2478
|
-
</oneOrMore>
|
2479
|
-
<optional>
|
2480
|
-
<element name="class">
|
2481
|
-
<text/>
|
2482
|
-
</element>
|
2483
|
-
</optional>
|
2484
|
-
<element name="docnumber">
|
2485
|
-
<text/>
|
2486
|
-
</element>
|
2487
|
-
<optional>
|
2488
|
-
<element name="partnumber">
|
2489
|
-
<text/>
|
2490
|
-
</element>
|
2491
|
-
</optional>
|
2492
|
-
<optional>
|
2493
|
-
<element name="edition">
|
2494
|
-
<text/>
|
2495
|
-
</element>
|
2496
|
-
</optional>
|
2497
|
-
<optional>
|
2498
|
-
<element name="version">
|
2499
|
-
<text/>
|
2500
|
-
</element>
|
2501
|
-
</optional>
|
2502
|
-
<optional>
|
2503
|
-
<element name="supplementtype">
|
2504
|
-
<text/>
|
2505
|
-
</element>
|
2506
|
-
</optional>
|
2507
|
-
<optional>
|
2508
|
-
<element name="supplementnumber">
|
2509
|
-
<text/>
|
2510
|
-
</element>
|
2511
|
-
</optional>
|
2512
|
-
<optional>
|
2513
|
-
<element name="amendment">
|
2514
|
-
<text/>
|
2515
|
-
</element>
|
2516
|
-
</optional>
|
2517
|
-
<optional>
|
2518
|
-
<element name="corrigendum">
|
2519
|
-
<text/>
|
2520
|
-
</element>
|
2521
|
-
</optional>
|
2522
|
-
<optional>
|
2523
|
-
<element name="language">
|
2524
|
-
<text/>
|
2525
|
-
</element>
|
2526
|
-
</optional>
|
2527
|
-
<optional>
|
2528
|
-
<element name="year">
|
2529
|
-
<text/>
|
2530
|
-
</element>
|
2531
|
-
</optional>
|
2532
|
-
</element>
|
2533
|
-
</define>
|
2534
2368
|
<define name="term-clause">
|
2535
2369
|
<element name="clause">
|
2536
2370
|
<optional>
|
@@ -2804,4 +2638,7 @@
|
|
2804
2638
|
</attribute>
|
2805
2639
|
</element>
|
2806
2640
|
</define>
|
2641
|
+
<start>
|
2642
|
+
<ref name="standard-document"/>
|
2643
|
+
</start>
|
2807
2644
|
</grammar>
|
@@ -1,21 +1,22 @@
|
|
1
1
|
module Metanorma
|
2
2
|
module Standoc
|
3
3
|
class PlantUMLBlockMacroBackend
|
4
|
-
# https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
5
4
|
def self.plantuml_installed?
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
unless which("plantuml")
|
6
|
+
raise "PlantUML not installed"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.plantuml_bin
|
11
|
+
if Gem.win_platform? || which("plantumlc")
|
12
|
+
"plantumlc"
|
13
|
+
else
|
14
|
+
"plantuml"
|
13
15
|
end
|
14
|
-
raise "PlantUML not installed"
|
15
16
|
end
|
16
17
|
|
17
18
|
def self.run(umlfile, outfile)
|
18
|
-
system "
|
19
|
+
system "#{plantuml_bin} #{umlfile.path}" or (warn $? and return false)
|
19
20
|
i = 0
|
20
21
|
until !Gem.win_platform? || File.exist?(outfile) || i == 15
|
21
22
|
sleep(1)
|
@@ -84,6 +85,18 @@ module Metanorma
|
|
84
85
|
memo
|
85
86
|
end
|
86
87
|
end
|
88
|
+
|
89
|
+
# https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
90
|
+
def self.which(cmd)
|
91
|
+
exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
|
92
|
+
ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
|
93
|
+
exts.each do |ext|
|
94
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
95
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
nil
|
99
|
+
end
|
87
100
|
end
|
88
101
|
|
89
102
|
class PlantUMLBlockMacro < Asciidoctor::Extensions::BlockProcessor
|
@@ -9,7 +9,7 @@ require "pngcheck"
|
|
9
9
|
module Metanorma
|
10
10
|
module Standoc
|
11
11
|
module Validate
|
12
|
-
SOURCELOCALITY = "./origin//locality[@type = 'clause']/"\
|
12
|
+
SOURCELOCALITY = "./origin//locality[@type = 'clause']/" \
|
13
13
|
"referenceFrom".freeze
|
14
14
|
|
15
15
|
def init_iev
|
@@ -24,7 +24,7 @@ module Metanorma
|
|
24
24
|
@iev = init_iev or return
|
25
25
|
xmldoc.xpath("//term").each do |t|
|
26
26
|
t.xpath(".//termsource").each do |src|
|
27
|
-
(/^IEC 60050-/.match(src
|
27
|
+
(/^IEC 60050-/.match(src.at("./origin/@citeas")&.text) &&
|
28
28
|
loc = src.xpath(SOURCELOCALITY)&.text) or next
|
29
29
|
iev_validate1(t, loc, xmldoc)
|
30
30
|
end
|
@@ -33,9 +33,9 @@ module Metanorma
|
|
33
33
|
|
34
34
|
def iev_validate1(term, loc, xmldoc)
|
35
35
|
iev = @iev.fetch(loc,
|
36
|
-
xmldoc
|
36
|
+
xmldoc.at("//language")&.text || "en") or return
|
37
37
|
pref = term.xpath("./preferred//name").inject([]) do |m, x|
|
38
|
-
m << x
|
38
|
+
m << x.text&.downcase
|
39
39
|
end
|
40
40
|
pref.include?(iev.downcase) or
|
41
41
|
@log.add("Bibliography", term, %(Term "#{pref[0]}" does not match ) +
|
@@ -97,7 +97,7 @@ module Metanorma
|
|
97
97
|
|
98
98
|
def repeat_id_validate1(ids, elem)
|
99
99
|
if ids[elem["id"]]
|
100
|
-
@log.add("Anchors", elem, "Anchor #{elem['id']} has already been "\
|
100
|
+
@log.add("Anchors", elem, "Anchor #{elem['id']} has already been " \
|
101
101
|
"used at line #{ids[elem['id']]}")
|
102
102
|
@fatalerror << "Multiple instances of same ID: #{elem['id']}"
|
103
103
|
else
|
@@ -137,8 +137,8 @@ module Metanorma
|
|
137
137
|
SVG_NS = "http://www.w3.org/2000/svg".freeze
|
138
138
|
|
139
139
|
WILDCARD_ATTRS =
|
140
|
-
"//*[@format] | //stem | //bibdata//description | "\
|
141
|
-
"//formattedref | //bibdata//note | //bibdata/abstract | "\
|
140
|
+
"//*[@format] | //stem | //bibdata//description | " \
|
141
|
+
"//formattedref | //bibdata//note | //bibdata/abstract | " \
|
142
142
|
"//bibitem/abstract | //bibitem/note | //misc-container".freeze
|
143
143
|
|
144
144
|
# RelaxNG cannot cope well with wildcard attributes. So we strip
|
@@ -213,7 +213,7 @@ module Metanorma
|
|
213
213
|
def validate(doc)
|
214
214
|
content_validate(doc)
|
215
215
|
schema_validate(formattedstr_strip(doc.dup),
|
216
|
-
File.join(File.dirname(__FILE__), "isodoc.rng"))
|
216
|
+
File.join(File.dirname(__FILE__), "isodoc-compile.rng"))
|
217
217
|
end
|
218
218
|
end
|
219
219
|
end
|
data/metanorma-standoc.gemspec
CHANGED
@@ -37,7 +37,6 @@ Gem::Specification.new do |spec|
|
|
37
37
|
spec.add_dependency "concurrent-ruby"
|
38
38
|
spec.add_dependency "latexmath"
|
39
39
|
spec.add_dependency "mathml2asciimath"
|
40
|
-
spec.add_dependency "mn-requirements", "~> 0.1.4"
|
41
40
|
spec.add_dependency "pngcheck"
|
42
41
|
spec.add_dependency "relaton-cli", "~> 1.13.0"
|
43
42
|
spec.add_dependency "relaton-iev", "~> 1.1.0"
|