metanorma-standoc 2.0.7 → 2.1.2
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/metanorma/standoc/base.rb +3 -1
- data/lib/metanorma/standoc/biblio.rng +69 -42
- data/lib/metanorma/standoc/blocks.rb +8 -3
- data/lib/metanorma/standoc/blocks_notes.rb +20 -11
- data/lib/metanorma/standoc/cleanup.rb +1 -0
- data/lib/metanorma/standoc/cleanup_block.rb +10 -0
- data/lib/metanorma/standoc/cleanup_footnotes.rb +14 -9
- data/lib/metanorma/standoc/cleanup_inline.rb +17 -0
- data/lib/metanorma/standoc/cleanup_maths.rb +5 -4
- data/lib/metanorma/standoc/cleanup_reqt.rb +1 -1
- data/lib/metanorma/standoc/cleanup_section.rb +15 -13
- data/lib/metanorma/standoc/cleanup_terms.rb +3 -1
- data/lib/metanorma/standoc/cleanup_text.rb +9 -4
- data/lib/metanorma/standoc/converter.rb +2 -0
- data/lib/metanorma/standoc/inline.rb +2 -1
- data/lib/metanorma/standoc/isodoc.rng +65 -0
- data/lib/metanorma/standoc/lists.rb +8 -3
- data/lib/metanorma/standoc/macros.rb +31 -4
- data/lib/metanorma/standoc/macros_form.rb +1 -1
- data/lib/metanorma/standoc/macros_note.rb +1 -6
- data/lib/metanorma/standoc/reqt.rb +5 -3
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +2 -2
- data/spec/metanorma/base_spec.rb +41 -5
- data/spec/metanorma/blocks_spec.rb +78 -3
- data/spec/metanorma/cleanup_blocks_spec.rb +9 -0
- data/spec/metanorma/cleanup_sections_spec.rb +5 -5
- data/spec/metanorma/cleanup_spec.rb +5 -5
- data/spec/metanorma/cleanup_terms_spec.rb +1 -1
- data/spec/metanorma/inline_spec.rb +3 -3
- data/spec/metanorma/lists_spec.rb +10 -4
- data/spec/metanorma/macros_spec.rb +21 -12
- data/spec/metanorma/refs_dl_spec.rb +17 -5
- data/spec/metanorma/refs_spec.rb +1 -7
- data/spec/metanorma/table_spec.rb +24 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/vcr_cassettes/bsi16341.yml +496 -0
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +49 -49
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +12 -12
- data/spec/vcr_cassettes/hide_refs.yml +168 -168
- data/spec/vcr_cassettes/isobib_get_123.yml +12 -12
- data/spec/vcr_cassettes/isobib_get_123_1.yml +96 -96
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +110 -110
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +11 -11
- data/spec/vcr_cassettes/isobib_get_124.yml +13 -13
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +18 -22
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +45 -45
- data/spec/vcr_cassettes/std-link.yml +207 -0
- metadata +11 -10
- data/docs/quickstart.adoc +0 -375
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 56e2b9105572c28858ffc12d075b16615ec8195836ad4bf7d7d2122fbf81dc05
|
|
4
|
+
data.tar.gz: 2594f703aeba2f78a5bf3df715709f78b3b6da1a751cb52fedd3ebce299eaf2d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: eeef127fe3ea160b49aa62cbb1aa665fb4e0cdb6d1712f646667394a41633c89864a294900c444abc1fceb7fbe2649bdfb2f539d1ccc66d3df89cd247ea31655
|
|
7
|
+
data.tar.gz: 2d1ded28e889db67a42275a5890a8e942b2b966e342e7bb7bc2b21129875394dff03ce1c1cd634b409ce72a68de0e4fd4eff518731cb3b8809c70d5c0c5f0449
|
|
@@ -171,7 +171,9 @@ module Metanorma
|
|
|
171
171
|
end
|
|
172
172
|
|
|
173
173
|
def doctype(node)
|
|
174
|
-
node.attr("doctype")&.gsub(/\s+/, "-")&.downcase
|
|
174
|
+
ret = node.attr("doctype")&.gsub(/\s+/, "-")&.downcase || "standard"
|
|
175
|
+
ret = "standard" if ret == "article"
|
|
176
|
+
ret
|
|
175
177
|
end
|
|
176
178
|
|
|
177
179
|
def front(node, xml)
|
|
@@ -614,12 +614,12 @@
|
|
|
614
614
|
<optional>
|
|
615
615
|
<ref name="fetched"/>
|
|
616
616
|
</optional>
|
|
617
|
-
<
|
|
618
|
-
<oneOrMore>
|
|
619
|
-
<ref name="btitle"/>
|
|
620
|
-
</oneOrMore>
|
|
617
|
+
<optional>
|
|
621
618
|
<ref name="formattedref"/>
|
|
622
|
-
</
|
|
619
|
+
</optional>
|
|
620
|
+
<oneOrMore>
|
|
621
|
+
<ref name="btitle"/>
|
|
622
|
+
</oneOrMore>
|
|
623
623
|
<zeroOrMore>
|
|
624
624
|
<ref name="bsource"/>
|
|
625
625
|
</zeroOrMore>
|
|
@@ -851,17 +851,46 @@
|
|
|
851
851
|
</define>
|
|
852
852
|
<define name="bplace">
|
|
853
853
|
<element name="place">
|
|
854
|
-
<
|
|
855
|
-
<
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
854
|
+
<choice>
|
|
855
|
+
<text/>
|
|
856
|
+
<group>
|
|
857
|
+
<ref name="bibliocity"/>
|
|
858
|
+
<zeroOrMore>
|
|
859
|
+
<ref name="biblioregion"/>
|
|
860
|
+
</zeroOrMore>
|
|
861
|
+
<zeroOrMore>
|
|
862
|
+
<ref name="bibliocountry"/>
|
|
863
|
+
</zeroOrMore>
|
|
864
|
+
</group>
|
|
865
|
+
</choice>
|
|
866
|
+
</element>
|
|
867
|
+
</define>
|
|
868
|
+
<define name="bibliocity">
|
|
869
|
+
<element name="city">
|
|
862
870
|
<text/>
|
|
863
871
|
</element>
|
|
864
872
|
</define>
|
|
873
|
+
<define name="biblioregion">
|
|
874
|
+
<element name="region">
|
|
875
|
+
<ref name="RegionType"/>
|
|
876
|
+
</element>
|
|
877
|
+
</define>
|
|
878
|
+
<define name="bibliocountry">
|
|
879
|
+
<element name="country">
|
|
880
|
+
<ref name="RegionType"/>
|
|
881
|
+
</element>
|
|
882
|
+
</define>
|
|
883
|
+
<define name="RegionType">
|
|
884
|
+
<optional>
|
|
885
|
+
<attribute name="iso"/>
|
|
886
|
+
</optional>
|
|
887
|
+
<optional>
|
|
888
|
+
<attribute name="recommended">
|
|
889
|
+
<data type="boolean"/>
|
|
890
|
+
</attribute>
|
|
891
|
+
</optional>
|
|
892
|
+
<text/>
|
|
893
|
+
</define>
|
|
865
894
|
<define name="bprice">
|
|
866
895
|
<element name="price">
|
|
867
896
|
<attribute name="currency"/>
|
|
@@ -957,36 +986,34 @@
|
|
|
957
986
|
<ref name="SeriesType"/>
|
|
958
987
|
</attribute>
|
|
959
988
|
</optional>
|
|
960
|
-
<
|
|
989
|
+
<optional>
|
|
961
990
|
<ref name="formattedref"/>
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
</group>
|
|
989
|
-
</choice>
|
|
991
|
+
</optional>
|
|
992
|
+
<ref name="btitle"/>
|
|
993
|
+
<optional>
|
|
994
|
+
<ref name="bplace"/>
|
|
995
|
+
</optional>
|
|
996
|
+
<optional>
|
|
997
|
+
<ref name="seriesorganization"/>
|
|
998
|
+
</optional>
|
|
999
|
+
<optional>
|
|
1000
|
+
<ref name="abbreviation"/>
|
|
1001
|
+
</optional>
|
|
1002
|
+
<optional>
|
|
1003
|
+
<ref name="seriesfrom"/>
|
|
1004
|
+
</optional>
|
|
1005
|
+
<optional>
|
|
1006
|
+
<ref name="seriesto"/>
|
|
1007
|
+
</optional>
|
|
1008
|
+
<optional>
|
|
1009
|
+
<ref name="seriesnumber"/>
|
|
1010
|
+
</optional>
|
|
1011
|
+
<optional>
|
|
1012
|
+
<ref name="seriespartnumber"/>
|
|
1013
|
+
</optional>
|
|
1014
|
+
<optional>
|
|
1015
|
+
<ref name="seriesrun"/>
|
|
1016
|
+
</optional>
|
|
990
1017
|
</element>
|
|
991
1018
|
</define>
|
|
992
1019
|
<define name="SeriesType">
|
|
@@ -80,14 +80,17 @@ module Metanorma
|
|
|
80
80
|
|
|
81
81
|
def term_example(node)
|
|
82
82
|
noko do |xml|
|
|
83
|
-
xml.termexample **attr_code(id_attr(node)
|
|
83
|
+
xml.termexample **attr_code(id_attr(node)
|
|
84
|
+
.merge(
|
|
85
|
+
keepasterm: node.option?("termexample") ? "true" : nil,
|
|
86
|
+
)) do |ex|
|
|
84
87
|
wrap_in_para(node, ex)
|
|
85
88
|
end
|
|
86
89
|
end.join("\n")
|
|
87
90
|
end
|
|
88
91
|
|
|
89
92
|
def example(node)
|
|
90
|
-
return term_example(node) if in_terms?
|
|
93
|
+
return term_example(node) if in_terms? || node.option?("termexample")
|
|
91
94
|
|
|
92
95
|
role = node.role || node.attr("style")
|
|
93
96
|
%w(recommendation requirement permission).include?(role) and
|
|
@@ -237,10 +240,12 @@ module Metanorma
|
|
|
237
240
|
end
|
|
238
241
|
|
|
239
242
|
def pass(node)
|
|
243
|
+
c = HTMLEntities.new
|
|
240
244
|
noko do |xml|
|
|
241
245
|
xml.passthrough **attr_code(formats:
|
|
242
246
|
node.attr("format") || "metanorma") do |p|
|
|
243
|
-
p <<
|
|
247
|
+
p << c.encode(c.decode(node.content),
|
|
248
|
+
:basic, :hexadecimal)
|
|
244
249
|
end
|
|
245
250
|
end
|
|
246
251
|
end
|
|
@@ -8,16 +8,13 @@ module Metanorma
|
|
|
8
8
|
number: node.attr("number"),
|
|
9
9
|
subsequence: node.attr("subsequence"),
|
|
10
10
|
"keep-separate": node.attr("keep-separate"),
|
|
11
|
+
keepasterm: node.option?("termnote") ? "true" : nil,
|
|
11
12
|
)))
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def note_attrs(node)
|
|
15
|
-
attr_code(
|
|
16
|
-
|
|
17
|
-
type: node.attr("type"),
|
|
18
|
-
beforeclauses: node.attr("beforeclauses") == "true" ? "true" : nil,
|
|
19
|
-
),
|
|
20
|
-
)
|
|
16
|
+
attr_code(termnote_attrs(node).merge(admonition_core_attrs(node)
|
|
17
|
+
.merge(type: node.attr("type"))))
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
def sidebar_attrs(node)
|
|
@@ -65,6 +62,8 @@ module Metanorma
|
|
|
65
62
|
end
|
|
66
63
|
|
|
67
64
|
def note(node)
|
|
65
|
+
return termnote(node) if node.option?("termnote")
|
|
66
|
+
|
|
68
67
|
noko do |xml|
|
|
69
68
|
xml.note **note_attrs(node) do |c|
|
|
70
69
|
wrap_in_para(node, c)
|
|
@@ -73,15 +72,25 @@ module Metanorma
|
|
|
73
72
|
end
|
|
74
73
|
|
|
75
74
|
def admonition_attrs(node)
|
|
75
|
+
attr_code(keep_attrs(node).merge(id_attr(node)
|
|
76
|
+
.merge(admonition_core_attrs(node)
|
|
77
|
+
.merge(type: admonition_name(node)))))
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def admonition_core_attrs(node)
|
|
81
|
+
{ notag: node.attr("notag") == "true" ? "true" : nil,
|
|
82
|
+
coverpage: node.attr("coverpage") == "true" ? "true" : nil,
|
|
83
|
+
beforeclauses: node.attr("beforeclauses") == "true" ? "true" : nil,
|
|
84
|
+
unnumbered: node.attr("unnumbered") ||
|
|
85
|
+
(node.attr("notag") == "true") || nil }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def admonition_name(node)
|
|
76
89
|
name = node.attr("name")
|
|
77
90
|
a = node.attr("type") and ["danger", "safety precautions"].each do |t|
|
|
78
91
|
name = t if a.casecmp(t).zero?
|
|
79
92
|
end
|
|
80
|
-
|
|
81
|
-
.merge(
|
|
82
|
-
type: name,
|
|
83
|
-
beforeclauses: node.attr("beforeclauses") == "true" ? "true" : nil,
|
|
84
|
-
)))
|
|
93
|
+
name
|
|
85
94
|
end
|
|
86
95
|
|
|
87
96
|
def admonition(node)
|
|
@@ -73,11 +73,21 @@ module Metanorma
|
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
+
def single_subfigure_cleanup(xmldoc)
|
|
77
|
+
xmldoc.xpath("//figure[figure]").each do |e|
|
|
78
|
+
s = e.xpath("./figure")
|
|
79
|
+
return unless s.size == 1
|
|
80
|
+
|
|
81
|
+
s[0].replace(s[0].children)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
76
85
|
def figure_cleanup(xmldoc)
|
|
77
86
|
figure_footnote_cleanup(xmldoc)
|
|
78
87
|
figure_dl_cleanup1(xmldoc)
|
|
79
88
|
figure_dl_cleanup2(xmldoc)
|
|
80
89
|
subfigure_cleanup(xmldoc)
|
|
90
|
+
single_subfigure_cleanup(xmldoc)
|
|
81
91
|
end
|
|
82
92
|
|
|
83
93
|
ELEMS_ALLOW_NOTES = %w[p formula ul ol dl figure].freeze
|
|
@@ -5,12 +5,15 @@ require "json"
|
|
|
5
5
|
module Metanorma
|
|
6
6
|
module Standoc
|
|
7
7
|
module Cleanup
|
|
8
|
-
def footnote_content(
|
|
9
|
-
c =
|
|
8
|
+
def footnote_content(fnote)
|
|
9
|
+
c = if fnote.children.respond_to?(:to_xml)
|
|
10
|
+
fnote.children.to_xml
|
|
11
|
+
else fn.children
|
|
12
|
+
end
|
|
10
13
|
c.gsub(/ id="[^"]+"/, "")
|
|
11
14
|
end
|
|
12
15
|
|
|
13
|
-
# include footnotes inside figure if they are the only content
|
|
16
|
+
# include footnotes inside figure if they are the only content
|
|
14
17
|
# of the paras following
|
|
15
18
|
def figure_footnote_cleanup(xmldoc)
|
|
16
19
|
nomatches = false
|
|
@@ -18,7 +21,9 @@ module Metanorma
|
|
|
18
21
|
q = "//figure/following-sibling::*[1][self::p and *[1][self::fn]]"
|
|
19
22
|
nomatches = true
|
|
20
23
|
xmldoc.xpath(q).each do |s|
|
|
21
|
-
next if s.children.map
|
|
24
|
+
next if s.children.map do |c|
|
|
25
|
+
c.text? && /[[:alpha:]]/.match(c.text)
|
|
26
|
+
end.any?
|
|
22
27
|
|
|
23
28
|
s.previous_element << s.first_element_child.remove
|
|
24
29
|
s.remove
|
|
@@ -27,16 +32,16 @@ module Metanorma
|
|
|
27
32
|
end
|
|
28
33
|
end
|
|
29
34
|
|
|
30
|
-
def table_footnote_renumber1(
|
|
31
|
-
content = footnote_content(
|
|
35
|
+
def table_footnote_renumber1(fnote, i, seen)
|
|
36
|
+
content = footnote_content(fnote)
|
|
32
37
|
if seen[content] then outnum = seen[content]
|
|
33
38
|
else
|
|
34
39
|
i += 1
|
|
35
40
|
outnum = i
|
|
36
41
|
seen[content] = outnum
|
|
37
42
|
end
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
fnote["reference"] = (outnum - 1 + "a".ord).chr
|
|
44
|
+
fnote["table"] = true
|
|
40
45
|
[i, seen]
|
|
41
46
|
end
|
|
42
47
|
|
|
@@ -84,7 +89,7 @@ module Metanorma
|
|
|
84
89
|
|
|
85
90
|
def footnote_block_cleanup(xmldoc)
|
|
86
91
|
xmldoc.xpath("//footnoteblock").each do |f|
|
|
87
|
-
f.name =
|
|
92
|
+
f.name = "fn"
|
|
88
93
|
if id = xmldoc.at("//*[@id = '#{f.text}']")
|
|
89
94
|
f.children = id.remove.children
|
|
90
95
|
else
|
|
@@ -185,6 +185,23 @@ module Metanorma
|
|
|
185
185
|
Digest::MD5.hexdigest("#{elem.path}////#{elem.text}")
|
|
186
186
|
.sub(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, "_\\1-\\2-\\3-\\4-\\5")
|
|
187
187
|
end
|
|
188
|
+
|
|
189
|
+
def passthrough_cleanup(doc)
|
|
190
|
+
doc.xpath("//passthrough-inline").each do |p|
|
|
191
|
+
p.name = "passthrough"
|
|
192
|
+
p.children = select_odd_chars(p.children.to_xml)
|
|
193
|
+
end
|
|
194
|
+
doc.xpath("//identifier").each do |p|
|
|
195
|
+
p.children = select_odd_chars(p.children.to_xml)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
private
|
|
200
|
+
|
|
201
|
+
# skip ZWNJ inserted to prevent regexes operating in asciidoctor
|
|
202
|
+
def select_odd_chars(text)
|
|
203
|
+
text.gsub(/(?!&)([[:punct:]])\u200c/, "\\1")
|
|
204
|
+
end
|
|
188
205
|
end
|
|
189
206
|
end
|
|
190
207
|
end
|
|
@@ -20,8 +20,8 @@ module Metanorma
|
|
|
20
20
|
text = text.gsub(%r{<stem type="AsciiMath">(.+?)</stem>}m) do
|
|
21
21
|
"<amathstem>#{HTMLEntities.new.decode($1)}</amathstem>"
|
|
22
22
|
end
|
|
23
|
-
text = Html2Doc.
|
|
24
|
-
|
|
23
|
+
text = Html2Doc.new({})
|
|
24
|
+
.asciimath_to_mathml(text, ["<amathstem>", "</amathstem>"])
|
|
25
25
|
x = Nokogiri::XML(text)
|
|
26
26
|
x.xpath("//*[local-name() = 'math'][not(parent::stem)]").each do |y|
|
|
27
27
|
y.wrap("<stem type='MathML'></stem>")
|
|
@@ -68,10 +68,11 @@ module Metanorma
|
|
|
68
68
|
def mi_italicise?(char)
|
|
69
69
|
return false if char.length > 1
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
case char
|
|
72
|
+
when /\p{Greek}/
|
|
72
73
|
(/\p{Lower}/.match(char) && !mathml_mi_italics[:lowergreek]) ||
|
|
73
74
|
(/\p{Upper}/.match(char) && !mathml_mi_italics[:uppergreek])
|
|
74
|
-
|
|
75
|
+
when /\p{Latin}/
|
|
75
76
|
(/\p{Lower}/.match(char) && !mathml_mi_italics[:lowerroman]) ||
|
|
76
77
|
(/\p{Upper}/.match(char) && !mathml_mi_italics[:upperroman])
|
|
77
78
|
else false
|
|
@@ -53,7 +53,7 @@ module Metanorma
|
|
|
53
53
|
permission).include?(text.name))) ||
|
|
54
54
|
(text.text.strip.empty? && !text.at(".//xref | .//eref | .//link"))
|
|
55
55
|
|
|
56
|
-
t = Nokogiri::XML::Element.new("description", reqt)
|
|
56
|
+
t = Nokogiri::XML::Element.new("description", reqt.document)
|
|
57
57
|
text.before(t)
|
|
58
58
|
t.children = text.remove
|
|
59
59
|
end
|
|
@@ -125,11 +125,8 @@ module Metanorma
|
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def obligations_cleanup_info(xml)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
s = xml.at("//acknowledgements") and s["obligation"] = "informative"
|
|
131
|
-
xml.xpath("//references").each { |r| r["obligation"] = "informative" }
|
|
132
|
-
xml.xpath("//preface//clause").each do |r|
|
|
128
|
+
xml.xpath("//foreword | //introduction | //acknowledgements | "\
|
|
129
|
+
"//references | //preface//clause").each do |r|
|
|
133
130
|
r["obligation"] = "informative"
|
|
134
131
|
end
|
|
135
132
|
end
|
|
@@ -158,29 +155,34 @@ module Metanorma
|
|
|
158
155
|
def preface_clausebefore_cleanup(xmldoc)
|
|
159
156
|
return unless xmldoc.at("//preface")
|
|
160
157
|
|
|
161
|
-
|
|
162
|
-
xmldoc.at("//preface") << " "
|
|
163
|
-
ins = xmldoc.at("//preface").children.first
|
|
164
|
-
end
|
|
158
|
+
ins = insert_before(xmldoc, "//preface")
|
|
165
159
|
xmldoc.xpath("//preface//*[@beforeclauses = 'true']").each do |x|
|
|
166
160
|
x.delete("beforeclauses")
|
|
167
161
|
ins.previous = x.remove
|
|
168
162
|
end
|
|
163
|
+
xmldoc.xpath("//*[@coverpage = 'true']").each do |x|
|
|
164
|
+
ins.previous = x.remove
|
|
165
|
+
end
|
|
169
166
|
end
|
|
170
167
|
|
|
171
168
|
def sections_clausebefore_cleanup(xmldoc)
|
|
172
169
|
return unless xmldoc.at("//sections")
|
|
173
170
|
|
|
174
|
-
|
|
175
|
-
xmldoc.at("//sections") << " "
|
|
176
|
-
ins = xmldoc.at("//sections").children.first
|
|
177
|
-
end
|
|
171
|
+
ins = insert_before(xmldoc, "//sections")
|
|
178
172
|
xmldoc.xpath("//sections//*[@beforeclauses = 'true']").each do |x|
|
|
179
173
|
x.delete("beforeclauses")
|
|
180
174
|
ins.previous = x.remove
|
|
181
175
|
end
|
|
182
176
|
end
|
|
183
177
|
|
|
178
|
+
def insert_before(xmldoc, xpath)
|
|
179
|
+
unless ins = xmldoc.at(xpath).children.first
|
|
180
|
+
xmldoc.at(xpath) << " "
|
|
181
|
+
ins = xmldoc.at(xpath).children.first
|
|
182
|
+
end
|
|
183
|
+
ins
|
|
184
|
+
end
|
|
185
|
+
|
|
184
186
|
def floatingtitle_cleanup(xmldoc)
|
|
185
187
|
pop_floating_title(xmldoc)
|
|
186
188
|
floating_title_preface2sections(xmldoc)
|
|
@@ -93,7 +93,9 @@ module Metanorma
|
|
|
93
93
|
def termnote_example_cleanup(xmldoc)
|
|
94
94
|
%w(note example).each do |w|
|
|
95
95
|
xmldoc.xpath("//term#{w}[not(ancestor::term)]").each do |x|
|
|
96
|
-
x
|
|
96
|
+
if x["keepasterm"] then x.delete("keepasterm")
|
|
97
|
+
else x.name = w
|
|
98
|
+
end
|
|
97
99
|
end
|
|
98
100
|
end
|
|
99
101
|
end
|
|
@@ -5,8 +5,11 @@ module Metanorma
|
|
|
5
5
|
text = result.flatten.map { |l| l.sub(/\s*\Z/, "") } * "\n"
|
|
6
6
|
!@keepasciimath and text = asciimath2mathml(text)
|
|
7
7
|
text = text.gsub(/\s+<fn /, "<fn ")
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
%w(passthrough passthrough-inline).each do |v|
|
|
9
|
+
text.gsub!(%r{<#{v}\s+formats="metanorma">([^<]*)
|
|
10
|
+
</#{v}>}mx) { HTMLEntities.new.decode($1) }
|
|
11
|
+
end
|
|
12
|
+
text
|
|
10
13
|
end
|
|
11
14
|
|
|
12
15
|
def smartquotes_cleanup(xmldoc)
|
|
@@ -33,7 +36,8 @@ module Metanorma
|
|
|
33
36
|
|
|
34
37
|
def uninterrupt_quotes_around_xml_skip(elem)
|
|
35
38
|
!(/\A['"]/.match?(elem.text) &&
|
|
36
|
-
elem.previous.ancestors("pre, tt, sourcecode, stem, figure, bibdata
|
|
39
|
+
elem.previous.ancestors("pre, tt, sourcecode, stem, figure, bibdata,
|
|
40
|
+
passthrough, identifer")
|
|
37
41
|
.empty? &&
|
|
38
42
|
((elem.previous.text.strip.empty? &&
|
|
39
43
|
!empty_tag_with_text_content?(elem.previous)) ||
|
|
@@ -70,7 +74,8 @@ module Metanorma
|
|
|
70
74
|
empty_tag_with_text_content?(x) and prev = "dummy"
|
|
71
75
|
next unless x.text?
|
|
72
76
|
|
|
73
|
-
x.ancestors("pre, tt, sourcecode, stem, figure, bibdata
|
|
77
|
+
x.ancestors("pre, tt, sourcecode, stem, figure, bibdata, passthrough,
|
|
78
|
+
identifier").empty? and
|
|
74
79
|
dumb2smart_quotes1(x, prev)
|
|
75
80
|
prev = x.text if x.ancestors("index").empty?
|
|
76
81
|
end
|
|
@@ -36,6 +36,7 @@ module Metanorma
|
|
|
36
36
|
inline_macro Metanorma::Standoc::DomainTermInlineMacro
|
|
37
37
|
inline_macro Metanorma::Standoc::InheritInlineMacro
|
|
38
38
|
inline_macro Metanorma::Standoc::HTML5RubyMacro
|
|
39
|
+
inline_macro Metanorma::Standoc::IdentifierInlineMacro
|
|
39
40
|
inline_macro Metanorma::Standoc::ConceptInlineMacro
|
|
40
41
|
inline_macro Metanorma::Standoc::AutonumberInlineMacro
|
|
41
42
|
inline_macro Metanorma::Standoc::VariantInlineMacro
|
|
@@ -63,6 +64,7 @@ module Metanorma
|
|
|
63
64
|
block Metanorma::Plugin::Lutaml::LutamlDiagramBlock
|
|
64
65
|
block Metanorma::Standoc::PseudocodeBlockMacro
|
|
65
66
|
preprocessor Metanorma::Standoc::EmbedIncludeProcessor
|
|
67
|
+
preprocessor Metanorma::Standoc::NamedEscapePreprocessor
|
|
66
68
|
end
|
|
67
69
|
|
|
68
70
|
include ::Asciidoctor::Converter
|
|
@@ -79,7 +79,8 @@ module Metanorma
|
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def inline_anchor_bibref(node)
|
|
82
|
-
eref_contents =
|
|
82
|
+
eref_contents = HTMLEntities.new
|
|
83
|
+
.decode(node.text || node.target || node.id)
|
|
83
84
|
&.sub(/^\[?([^\[\]]+?)\]?$/, "[\\1]")
|
|
84
85
|
@refids << (node.target || node.id)
|
|
85
86
|
noko do |xml|
|
|
@@ -32,6 +32,43 @@
|
|
|
32
32
|
<ref name="DocumentType"/>
|
|
33
33
|
</element>
|
|
34
34
|
</define>
|
|
35
|
+
<define name="admonition">
|
|
36
|
+
<element name="admonition">
|
|
37
|
+
<attribute name="type">
|
|
38
|
+
<ref name="AdmonitionType"/>
|
|
39
|
+
</attribute>
|
|
40
|
+
<optional>
|
|
41
|
+
<attribute name="class"/>
|
|
42
|
+
</optional>
|
|
43
|
+
<attribute name="id">
|
|
44
|
+
<data type="ID"/>
|
|
45
|
+
</attribute>
|
|
46
|
+
<optional>
|
|
47
|
+
<attribute name="uri">
|
|
48
|
+
<data type="anyURI"/>
|
|
49
|
+
</attribute>
|
|
50
|
+
</optional>
|
|
51
|
+
<optional>
|
|
52
|
+
<attribute name="coverpage">
|
|
53
|
+
<data type="boolean"/>
|
|
54
|
+
</attribute>
|
|
55
|
+
</optional>
|
|
56
|
+
<optional>
|
|
57
|
+
<attribute name="notag">
|
|
58
|
+
<data type="boolean"/>
|
|
59
|
+
</attribute>
|
|
60
|
+
</optional>
|
|
61
|
+
<optional>
|
|
62
|
+
<ref name="tname"/>
|
|
63
|
+
</optional>
|
|
64
|
+
<zeroOrMore>
|
|
65
|
+
<ref name="paragraph-with-footnote"/>
|
|
66
|
+
</zeroOrMore>
|
|
67
|
+
<zeroOrMore>
|
|
68
|
+
<ref name="note"/>
|
|
69
|
+
</zeroOrMore>
|
|
70
|
+
</element>
|
|
71
|
+
</define>
|
|
35
72
|
<define name="index">
|
|
36
73
|
<element name="index">
|
|
37
74
|
<optional>
|
|
@@ -245,6 +282,9 @@
|
|
|
245
282
|
<ref name="MultilingualRenderingType"/>
|
|
246
283
|
</attribute>
|
|
247
284
|
</optional>
|
|
285
|
+
<optional>
|
|
286
|
+
<ref name="tname"/>
|
|
287
|
+
</optional>
|
|
248
288
|
<oneOrMore>
|
|
249
289
|
<ref name="ul_li"/>
|
|
250
290
|
</oneOrMore>
|
|
@@ -287,6 +327,9 @@
|
|
|
287
327
|
</choice>
|
|
288
328
|
</attribute>
|
|
289
329
|
</optional>
|
|
330
|
+
<optional>
|
|
331
|
+
<ref name="tname"/>
|
|
332
|
+
</optional>
|
|
290
333
|
<oneOrMore>
|
|
291
334
|
<ref name="li"/>
|
|
292
335
|
</oneOrMore>
|
|
@@ -323,6 +366,9 @@
|
|
|
323
366
|
<ref name="MultilingualRenderingType"/>
|
|
324
367
|
</attribute>
|
|
325
368
|
</optional>
|
|
369
|
+
<optional>
|
|
370
|
+
<ref name="tname"/>
|
|
371
|
+
</optional>
|
|
326
372
|
<oneOrMore>
|
|
327
373
|
<ref name="dt"/>
|
|
328
374
|
<ref name="dd"/>
|
|
@@ -851,6 +897,16 @@
|
|
|
851
897
|
<ref name="MultilingualRenderingType"/>
|
|
852
898
|
</attribute>
|
|
853
899
|
</optional>
|
|
900
|
+
<optional>
|
|
901
|
+
<attribute name="coverpage">
|
|
902
|
+
<data type="boolean"/>
|
|
903
|
+
</attribute>
|
|
904
|
+
</optional>
|
|
905
|
+
<optional>
|
|
906
|
+
<attribute name="notag">
|
|
907
|
+
<data type="boolean"/>
|
|
908
|
+
</attribute>
|
|
909
|
+
</optional>
|
|
854
910
|
<oneOrMore>
|
|
855
911
|
<choice>
|
|
856
912
|
<ref name="paragraph"/>
|
|
@@ -1178,6 +1234,7 @@
|
|
|
1178
1234
|
<ref name="concept"/>
|
|
1179
1235
|
<ref name="add"/>
|
|
1180
1236
|
<ref name="del"/>
|
|
1237
|
+
<ref name="span"/>
|
|
1181
1238
|
</choice>
|
|
1182
1239
|
</define>
|
|
1183
1240
|
<define name="add">
|
|
@@ -1204,6 +1261,14 @@
|
|
|
1204
1261
|
</choice>
|
|
1205
1262
|
</element>
|
|
1206
1263
|
</define>
|
|
1264
|
+
<define name="span">
|
|
1265
|
+
<element name="span">
|
|
1266
|
+
<attribute name="class"/>
|
|
1267
|
+
<oneOrMore>
|
|
1268
|
+
<ref name="TextElement"/>
|
|
1269
|
+
</oneOrMore>
|
|
1270
|
+
</element>
|
|
1271
|
+
</define>
|
|
1207
1272
|
<define name="concept">
|
|
1208
1273
|
<element name="concept">
|
|
1209
1274
|
<optional>
|