metanorma-standoc 2.1.0 → 2.1.3
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 +134 -39
- data/lib/metanorma/standoc/blocks.rb +8 -6
- data/lib/metanorma/standoc/blocks_notes.rb +3 -0
- data/lib/metanorma/standoc/cleanup.rb +1 -0
- data/lib/metanorma/standoc/cleanup_footnotes.rb +14 -9
- data/lib/metanorma/standoc/cleanup_inline.rb +17 -0
- data/lib/metanorma/standoc/cleanup_reqt.rb +1 -1
- data/lib/metanorma/standoc/cleanup_terms.rb +3 -1
- data/lib/metanorma/standoc/cleanup_text.rb +9 -4
- data/lib/metanorma/standoc/cleanup_xref.rb +2 -1
- data/lib/metanorma/standoc/converter.rb +2 -0
- data/lib/metanorma/standoc/inline.rb +2 -1
- data/lib/metanorma/standoc/isodoc.rng +16 -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/ref_sect.rb +2 -1
- data/lib/metanorma/standoc/reqt.rb +5 -3
- data/lib/metanorma/standoc/section.rb +1 -1
- 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 +53 -1
- data/spec/metanorma/cleanup_sections_spec.rb +5 -5
- data/spec/metanorma/cleanup_spec.rb +6 -6
- 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_spec.rb +112 -118
- data/spec/metanorma/table_spec.rb +24 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/vcr_cassettes/bsi16341.yml +69 -69
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +89 -89
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +12 -12
- data/spec/vcr_cassettes/hide_refs.yml +55 -55
- data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_123_1.yml +28 -28
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +35 -35
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +228 -52
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +56 -58
- data/spec/vcr_cassettes/std-link.yml +17 -17
- metadata +9 -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: 322efef58275c5330db01582e8ead5ea9c5c496e8a6c5e96aafd8c8413a4412f
|
4
|
+
data.tar.gz: f88ff574288ee6159fd0e4b05eb076767daede15afd3187d2de05dc1aae295bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f88c019751884a354f2217c7f67798365e4dfa4fdf15f573f8fa95d98b65abb483da40e6a5f8bd6c1fedb76a8d5d1fe72417cff24b94224bd5ecb625389dd926
|
7
|
+
data.tar.gz: 4eaa00800dc54f99af38e012923472d50215308e8ba96d2ebe8414ffb9e38c266a0de29e18fc80ba2536d82c7f47ea0df8bea8b892d7610c7d67b46d088bf430
|
@@ -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,103 @@
|
|
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
|
+
<zeroOrMore>
|
624
|
+
<ref name="bsource"/>
|
625
|
+
</zeroOrMore>
|
626
|
+
<oneOrMore>
|
627
|
+
<ref name="docidentifier"/>
|
628
|
+
</oneOrMore>
|
629
|
+
<optional>
|
630
|
+
<ref name="docnumber"/>
|
631
|
+
</optional>
|
632
|
+
<zeroOrMore>
|
633
|
+
<ref name="bdate"/>
|
634
|
+
</zeroOrMore>
|
635
|
+
<zeroOrMore>
|
636
|
+
<ref name="contributor"/>
|
637
|
+
</zeroOrMore>
|
638
|
+
<optional>
|
639
|
+
<ref name="edition"/>
|
640
|
+
</optional>
|
641
|
+
<zeroOrMore>
|
642
|
+
<ref name="version"/>
|
643
|
+
</zeroOrMore>
|
644
|
+
<zeroOrMore>
|
645
|
+
<ref name="biblionote"/>
|
646
|
+
</zeroOrMore>
|
647
|
+
<zeroOrMore>
|
648
|
+
<ref name="language"/>
|
649
|
+
</zeroOrMore>
|
650
|
+
<zeroOrMore>
|
651
|
+
<ref name="script"/>
|
652
|
+
</zeroOrMore>
|
653
|
+
<zeroOrMore>
|
654
|
+
<ref name="bibabstract"/>
|
655
|
+
</zeroOrMore>
|
656
|
+
<optional>
|
657
|
+
<ref name="status"/>
|
658
|
+
</optional>
|
659
|
+
<zeroOrMore>
|
660
|
+
<ref name="copyright"/>
|
661
|
+
</zeroOrMore>
|
662
|
+
<zeroOrMore>
|
663
|
+
<ref name="docrelation"/>
|
664
|
+
</zeroOrMore>
|
665
|
+
<zeroOrMore>
|
666
|
+
<ref name="series"/>
|
667
|
+
</zeroOrMore>
|
668
|
+
<optional>
|
669
|
+
<ref name="medium"/>
|
670
|
+
</optional>
|
671
|
+
<zeroOrMore>
|
672
|
+
<ref name="bplace"/>
|
673
|
+
</zeroOrMore>
|
674
|
+
<zeroOrMore>
|
675
|
+
<ref name="bprice"/>
|
676
|
+
</zeroOrMore>
|
677
|
+
<zeroOrMore>
|
678
|
+
<ref name="extent"/>
|
679
|
+
</zeroOrMore>
|
680
|
+
<optional>
|
681
|
+
<ref name="bibliographic_size"/>
|
682
|
+
</optional>
|
683
|
+
<zeroOrMore>
|
684
|
+
<ref name="accesslocation"/>
|
685
|
+
</zeroOrMore>
|
686
|
+
<zeroOrMore>
|
687
|
+
<ref name="license"/>
|
688
|
+
</zeroOrMore>
|
689
|
+
<zeroOrMore>
|
690
|
+
<ref name="bclassification"/>
|
691
|
+
</zeroOrMore>
|
692
|
+
<zeroOrMore>
|
693
|
+
<ref name="bkeyword"/>
|
694
|
+
</zeroOrMore>
|
695
|
+
<optional>
|
696
|
+
<ref name="validity"/>
|
697
|
+
</optional>
|
698
|
+
</define>
|
699
|
+
<define name="ReducedBibliographicItem">
|
700
|
+
<optional>
|
701
|
+
<attribute name="type">
|
702
|
+
<ref name="BibItemType"/>
|
703
|
+
</attribute>
|
704
|
+
</optional>
|
705
|
+
<optional>
|
706
|
+
<ref name="fetched"/>
|
707
|
+
</optional>
|
708
|
+
<optional>
|
709
|
+
<ref name="formattedref"/>
|
710
|
+
</optional>
|
711
|
+
<zeroOrMore>
|
712
|
+
<ref name="btitle"/>
|
713
|
+
</zeroOrMore>
|
623
714
|
<zeroOrMore>
|
624
715
|
<ref name="bsource"/>
|
625
716
|
</zeroOrMore>
|
@@ -638,9 +729,9 @@
|
|
638
729
|
<optional>
|
639
730
|
<ref name="edition"/>
|
640
731
|
</optional>
|
641
|
-
<
|
732
|
+
<zeroOrMore>
|
642
733
|
<ref name="version"/>
|
643
|
-
</
|
734
|
+
</zeroOrMore>
|
644
735
|
<zeroOrMore>
|
645
736
|
<ref name="biblionote"/>
|
646
737
|
</zeroOrMore>
|
@@ -833,6 +924,12 @@
|
|
833
924
|
<data type="boolean"/>
|
834
925
|
</attribute>
|
835
926
|
</optional>
|
927
|
+
<optional>
|
928
|
+
<attribute name="language"/>
|
929
|
+
</optional>
|
930
|
+
<optional>
|
931
|
+
<attribute name="script"/>
|
932
|
+
</optional>
|
836
933
|
<text/>
|
837
934
|
</element>
|
838
935
|
</define>
|
@@ -986,36 +1083,34 @@
|
|
986
1083
|
<ref name="SeriesType"/>
|
987
1084
|
</attribute>
|
988
1085
|
</optional>
|
989
|
-
<
|
1086
|
+
<optional>
|
990
1087
|
<ref name="formattedref"/>
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
</group>
|
1018
|
-
</choice>
|
1088
|
+
</optional>
|
1089
|
+
<ref name="btitle"/>
|
1090
|
+
<optional>
|
1091
|
+
<ref name="bplace"/>
|
1092
|
+
</optional>
|
1093
|
+
<optional>
|
1094
|
+
<ref name="seriesorganization"/>
|
1095
|
+
</optional>
|
1096
|
+
<optional>
|
1097
|
+
<ref name="abbreviation"/>
|
1098
|
+
</optional>
|
1099
|
+
<optional>
|
1100
|
+
<ref name="seriesfrom"/>
|
1101
|
+
</optional>
|
1102
|
+
<optional>
|
1103
|
+
<ref name="seriesto"/>
|
1104
|
+
</optional>
|
1105
|
+
<optional>
|
1106
|
+
<ref name="seriesnumber"/>
|
1107
|
+
</optional>
|
1108
|
+
<optional>
|
1109
|
+
<ref name="seriespartnumber"/>
|
1110
|
+
</optional>
|
1111
|
+
<optional>
|
1112
|
+
<ref name="seriesrun"/>
|
1113
|
+
</optional>
|
1019
1114
|
</element>
|
1020
1115
|
</define>
|
1021
1116
|
<define name="SeriesType">
|
@@ -1174,7 +1269,7 @@
|
|
1174
1269
|
</element>
|
1175
1270
|
</optional>
|
1176
1271
|
<element name="bibitem">
|
1177
|
-
<ref name="
|
1272
|
+
<ref name="ReducedBibliographicItem"/>
|
1178
1273
|
</element>
|
1179
1274
|
<choice>
|
1180
1275
|
<zeroOrMore>
|
@@ -1199,9 +1294,9 @@
|
|
1199
1294
|
<optional>
|
1200
1295
|
<ref name="revision-date"/>
|
1201
1296
|
</optional>
|
1202
|
-
<
|
1297
|
+
<optional>
|
1203
1298
|
<ref name="draft"/>
|
1204
|
-
</
|
1299
|
+
</optional>
|
1205
1300
|
</element>
|
1206
1301
|
</define>
|
1207
1302
|
<define name="vedition">
|
@@ -38,9 +38,7 @@ module Metanorma
|
|
38
38
|
role == "form" and return form(node)
|
39
39
|
role == "definition" and return termdefinition(node)
|
40
40
|
result = []
|
41
|
-
node.blocks.each
|
42
|
-
result << send(b.context, b)
|
43
|
-
end
|
41
|
+
node.blocks.each { |b| result << send(b.context, b) }
|
44
42
|
result
|
45
43
|
end
|
46
44
|
|
@@ -80,14 +78,17 @@ module Metanorma
|
|
80
78
|
|
81
79
|
def term_example(node)
|
82
80
|
noko do |xml|
|
83
|
-
xml.termexample **attr_code(id_attr(node)
|
81
|
+
xml.termexample **attr_code(id_attr(node)
|
82
|
+
.merge(
|
83
|
+
keepasterm: node.option?("termexample") || nil,
|
84
|
+
)) do |ex|
|
84
85
|
wrap_in_para(node, ex)
|
85
86
|
end
|
86
87
|
end.join("\n")
|
87
88
|
end
|
88
89
|
|
89
90
|
def example(node)
|
90
|
-
return term_example(node) if in_terms?
|
91
|
+
return term_example(node) if in_terms? || node.option?("termexample")
|
91
92
|
|
92
93
|
role = node.role || node.attr("style")
|
93
94
|
%w(recommendation requirement permission).include?(role) and
|
@@ -237,10 +238,11 @@ module Metanorma
|
|
237
238
|
end
|
238
239
|
|
239
240
|
def pass(node)
|
241
|
+
c = HTMLEntities.new
|
240
242
|
noko do |xml|
|
241
243
|
xml.passthrough **attr_code(formats:
|
242
244
|
node.attr("format") || "metanorma") do |p|
|
243
|
-
p <<
|
245
|
+
p << c.encode(c.decode(node.content), :basic, :hexadecimal)
|
244
246
|
end
|
245
247
|
end
|
246
248
|
end
|
@@ -8,6 +8,7 @@ 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
|
|
@@ -61,6 +62,8 @@ module Metanorma
|
|
61
62
|
end
|
62
63
|
|
63
64
|
def note(node)
|
65
|
+
return termnote(node) if node.option?("termnote")
|
66
|
+
|
64
67
|
noko do |xml|
|
65
68
|
xml.note **note_attrs(node) do |c|
|
66
69
|
wrap_in_para(node, c)
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -68,9 +68,10 @@ module Metanorma
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def xref_to_eref(elem)
|
71
|
+
c = HTMLEntities.new
|
71
72
|
elem["bibitemid"] = elem["target"]
|
72
73
|
if ref = @anchors&.dig(elem["target"], :xref)
|
73
|
-
elem["citeas"] =
|
74
|
+
elem["citeas"] = c.decode(ref)
|
74
75
|
else
|
75
76
|
elem["citeas"] = ""
|
76
77
|
xref_to_eref1(elem)
|
@@ -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|
|
@@ -282,6 +282,9 @@
|
|
282
282
|
<ref name="MultilingualRenderingType"/>
|
283
283
|
</attribute>
|
284
284
|
</optional>
|
285
|
+
<optional>
|
286
|
+
<ref name="tname"/>
|
287
|
+
</optional>
|
285
288
|
<oneOrMore>
|
286
289
|
<ref name="ul_li"/>
|
287
290
|
</oneOrMore>
|
@@ -324,6 +327,9 @@
|
|
324
327
|
</choice>
|
325
328
|
</attribute>
|
326
329
|
</optional>
|
330
|
+
<optional>
|
331
|
+
<ref name="tname"/>
|
332
|
+
</optional>
|
327
333
|
<oneOrMore>
|
328
334
|
<ref name="li"/>
|
329
335
|
</oneOrMore>
|
@@ -360,6 +366,9 @@
|
|
360
366
|
<ref name="MultilingualRenderingType"/>
|
361
367
|
</attribute>
|
362
368
|
</optional>
|
369
|
+
<optional>
|
370
|
+
<ref name="tname"/>
|
371
|
+
</optional>
|
363
372
|
<oneOrMore>
|
364
373
|
<ref name="dt"/>
|
365
374
|
<ref name="dd"/>
|
@@ -694,6 +703,9 @@
|
|
694
703
|
<optional>
|
695
704
|
<attribute name="tag"/>
|
696
705
|
</optional>
|
706
|
+
<optional>
|
707
|
+
<attribute name="type"/>
|
708
|
+
</optional>
|
697
709
|
<optional>
|
698
710
|
<attribute name="multilingual-rendering">
|
699
711
|
<ref name="MultilingualRenderingType"/>
|
@@ -729,6 +741,9 @@
|
|
729
741
|
<optional>
|
730
742
|
<attribute name="tag"/>
|
731
743
|
</optional>
|
744
|
+
<optional>
|
745
|
+
<attribute name="type"/>
|
746
|
+
</optional>
|
732
747
|
<optional>
|
733
748
|
<attribute name="multilingual-rendering">
|
734
749
|
<ref name="MultilingualRenderingType"/>
|
@@ -2050,6 +2065,7 @@
|
|
2050
2065
|
<value>compare</value>
|
2051
2066
|
<value>contrast</value>
|
2052
2067
|
<value>see</value>
|
2068
|
+
<value>seealso</value>
|
2053
2069
|
</choice>
|
2054
2070
|
</define>
|
2055
2071
|
<define name="deprecates">
|
@@ -38,9 +38,8 @@ module Metanorma
|
|
38
38
|
|
39
39
|
noko do |xml|
|
40
40
|
xml.ul **ul_attrs(node) do |xml_ul|
|
41
|
-
node
|
42
|
-
|
43
|
-
end
|
41
|
+
list_caption(node, xml_ul)
|
42
|
+
node.items.each { |item| ul_li(xml_ul, item) }
|
44
43
|
end
|
45
44
|
end.join("\n")
|
46
45
|
end
|
@@ -62,6 +61,7 @@ module Metanorma
|
|
62
61
|
def olist(node)
|
63
62
|
noko do |xml|
|
64
63
|
xml.ol **ol_attrs(node) do |xml_ol|
|
64
|
+
list_caption(node, xml_ol)
|
65
65
|
node.items.each { |item| li(xml_ol, item) }
|
66
66
|
end
|
67
67
|
end.join("\n")
|
@@ -98,6 +98,7 @@ module Metanorma
|
|
98
98
|
def dlist(node)
|
99
99
|
noko do |xml|
|
100
100
|
xml.dl **dl_attrs(node) do |xml_dl|
|
101
|
+
list_caption(node, xml_dl)
|
101
102
|
node.items.each do |terms, dd|
|
102
103
|
dt(terms, xml_dl)
|
103
104
|
dd(dd, xml_dl)
|
@@ -115,6 +116,10 @@ module Metanorma
|
|
115
116
|
end
|
116
117
|
end.join("\n")
|
117
118
|
end
|
119
|
+
|
120
|
+
def list_caption(node, out)
|
121
|
+
a = node.title and out.name { |n| n << a }
|
122
|
+
end
|
118
123
|
end
|
119
124
|
end
|
120
125
|
end
|
@@ -130,7 +130,7 @@ module Metanorma
|
|
130
130
|
|
131
131
|
def process(parent, target, attrs)
|
132
132
|
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
133
|
-
%{<autonumber type
|
133
|
+
%{<autonumber type='#{target}'>#{out}</autonumber>}
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
@@ -143,9 +143,9 @@ module Metanorma
|
|
143
143
|
/^(?<lang>[^-]*)(?:-(?<script>.*))?$/ =~ target
|
144
144
|
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
145
145
|
if script
|
146
|
-
%{<variant lang
|
146
|
+
%{<variant lang='#{lang}' script='#{script}'>#{out}</variant>}
|
147
147
|
else
|
148
|
-
%{<variant lang
|
148
|
+
%{<variant lang='#{lang}'>#{out}</variant>}
|
149
149
|
end
|
150
150
|
end
|
151
151
|
end
|
@@ -191,6 +191,7 @@ module Metanorma
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
+
# inject ZWNJ to prevent Asciidoctor from attempting regex substitutions
|
194
195
|
class PassInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
195
196
|
use_dsl
|
196
197
|
named :"pass-format"
|
@@ -198,7 +199,21 @@ module Metanorma
|
|
198
199
|
def process(parent, target, attrs)
|
199
200
|
format = target || "metanorma"
|
200
201
|
out = Asciidoctor::Inline.new(parent, :quoted, attrs[1]).convert
|
201
|
-
|
202
|
+
.gsub(/((?![<>&])[[:punct:]])/, "\\1‌")
|
203
|
+
%{<passthrough-inline formats="#{format}">#{out}</passthrough-inline>}
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
class IdentifierInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
208
|
+
use_dsl
|
209
|
+
named :identifier
|
210
|
+
parse_content_as :raw
|
211
|
+
using_format :short
|
212
|
+
|
213
|
+
def process(parent, _target, attrs)
|
214
|
+
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
215
|
+
.gsub(/((?![<>&])[[:punct:]])/, "\\1‌")
|
216
|
+
%{<identifier>#{out}</identifier>}
|
202
217
|
end
|
203
218
|
end
|
204
219
|
|
@@ -213,5 +228,17 @@ module Metanorma
|
|
213
228
|
type: :xref, target: "_#{UUIDTools::UUID.random_create}")
|
214
229
|
end
|
215
230
|
end
|
231
|
+
|
232
|
+
class NamedEscapePreprocessor < Asciidoctor::Extensions::Preprocessor
|
233
|
+
def process(_document, reader)
|
234
|
+
c = HTMLEntities.new
|
235
|
+
lines = reader.readlines.map do |l|
|
236
|
+
l.split(/(&[A-Za-z][^;]*;)/).map do |s|
|
237
|
+
/^&[A-Za-z]/.match?(s) ? c.encode(c.decode(s), :hexadecimal) : s
|
238
|
+
end.join
|
239
|
+
end
|
240
|
+
::Asciidoctor::Reader.new lines
|
241
|
+
end
|
242
|
+
end
|
216
243
|
end
|
217
244
|
end
|
@@ -56,7 +56,7 @@ module Metanorma
|
|
56
56
|
m = %w(disabled value)
|
57
57
|
.map { |a| attr[a] ? " #{a}='#{attr[a]}'" : nil }.compact
|
58
58
|
out = Asciidoctor::Inline.new(parent, :quoted, attr["text"]).convert
|
59
|
-
%{<option #{m.join}
|
59
|
+
%{<option #{m.join}>#{out}</option>}
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|