metanorma-standoc 1.5.3 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/macos.yml +4 -9
- data/.github/workflows/ubuntu.yml +0 -4
- data/.github/workflows/windows.yml +2 -12
- data/lib/asciidoctor/standoc/base.rb +6 -1
- data/lib/asciidoctor/standoc/basicdoc.rng +4 -11
- data/lib/asciidoctor/standoc/cleanup.rb +30 -12
- data/lib/asciidoctor/standoc/cleanup_ref.rb +2 -3
- data/lib/asciidoctor/standoc/front_contributor.rb +10 -2
- data/lib/asciidoctor/standoc/inline.rb +18 -40
- data/lib/asciidoctor/standoc/isodoc.rng +13 -6
- data/lib/asciidoctor/standoc/json2_text_preprocessor.rb +2 -1
- data/lib/asciidoctor/standoc/ref.rb +31 -30
- data/lib/asciidoctor/standoc/yaml2_text_preprocessor.rb +4 -1
- data/lib/metanorma/standoc.rb +0 -5
- data/lib/metanorma/standoc/version.rb +20 -1
- data/metanorma-standoc.gemspec +2 -1
- data/spec/asciidoctor-standoc/base_spec.rb +121 -3
- data/spec/asciidoctor-standoc/blocks_spec.rb +1 -1
- data/spec/asciidoctor-standoc/cleanup_spec.rb +11 -9
- data/spec/asciidoctor-standoc/inline_spec.rb +128 -4
- data/spec/asciidoctor-standoc/isobib_cache_spec.rb +9 -7
- data/spec/asciidoctor-standoc/refs_spec.rb +27 -18
- data/spec/spec_helper.rb +1 -1
- data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +46 -0
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +71 -71
- data/spec/vcr_cassettes/isobib_get_123.yml +17 -17
- data/spec/vcr_cassettes/isobib_get_123_1.yml +35 -35
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +18 -18
- data/spec/vcr_cassettes/isobib_get_124.yml +17 -17
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +39 -37
- metadata +5 -7
- data/lib/metanorma/standoc/latexml_requirement.rb +0 -62
- data/lib/metanorma/standoc/requirement.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a619338025bf24d56d382fde0bfcd3d7c5f2e5ecf5520d995d8c7d4986cb67d
|
4
|
+
data.tar.gz: 1f8c10a80a5ada1b94c6216568eb11851fd081c9ae63bae2d8b9e3e080673b17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d9fea4687d265c36099b30faa69893c10ec011e7d1a8b7e32b4e0df4ef9d892e5efe90bb8bd0767f51f3ec74f91b05dc3613532eeff247f1a2039b6094f15dc
|
7
|
+
data.tar.gz: 2ccb181da62a4ca659c2f3915ffdbebbc88b501c97938244d65d780b241e05bd2f61870ac32cc8a3cef739ac7a36b8c714f2cc5027d9269e78c7e6f6bcabb12c
|
data/.github/workflows/macos.yml
CHANGED
@@ -29,18 +29,13 @@ jobs:
|
|
29
29
|
uses: actions/setup-ruby@v1
|
30
30
|
with:
|
31
31
|
ruby-version: ${{ matrix.ruby }}
|
32
|
-
- name: Install LaTeXML
|
33
|
-
run: |
|
34
|
-
brew install libxml2 cpanminus
|
35
|
-
env PATH=$(brew --prefix libxml2)/bin:$PATH \
|
36
|
-
cpanm --notest XML::LibXSLT@1.96 git://github.com/brucemiller/LaTeXML.git@9a0e7dc5
|
37
|
-
- name: Install PlantUML
|
38
|
-
run: |
|
39
|
-
brew install plantuml
|
40
32
|
- name: Update gems
|
41
33
|
run: |
|
42
34
|
sudo gem install bundler --force
|
43
35
|
bundle install --jobs 4 --retry 3
|
36
|
+
- name: Install PlantUML
|
37
|
+
run: |
|
38
|
+
brew install plantuml
|
44
39
|
- name: Run specs
|
45
40
|
run: |
|
46
|
-
|
41
|
+
bundle exec rake
|
@@ -29,25 +29,15 @@ jobs:
|
|
29
29
|
uses: actions/setup-ruby@v1
|
30
30
|
with:
|
31
31
|
ruby-version: ${{ matrix.ruby }}
|
32
|
-
- name: Install MN Windows dependencies
|
33
|
-
shell: pwsh
|
34
|
-
run: |
|
35
|
-
choco install --no-progress plantuml make sed gnuwin32-coreutils.install grep
|
36
32
|
- name: Update gems
|
37
33
|
shell: pwsh
|
38
34
|
run: |
|
39
35
|
gem install bundler
|
40
36
|
bundle config --local path vendor/bundle
|
41
37
|
bundle install --jobs 4 --retry 3
|
42
|
-
- name: Install
|
43
|
-
shell: cmd
|
38
|
+
- name: Install PlantUML
|
44
39
|
run: |
|
45
|
-
cinst -y
|
46
|
-
refreshenv
|
47
|
-
set PATH=C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;%PATH%
|
48
|
-
where latexmlmath
|
40
|
+
cinst -y plantuml
|
49
41
|
- name: Run specs
|
50
|
-
shell: pwsh
|
51
42
|
run: |
|
52
|
-
$env:Path = "C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;$env:Path"
|
53
43
|
bundle exec rake
|
@@ -143,6 +143,11 @@ module Asciidoctor
|
|
143
143
|
ret
|
144
144
|
end
|
145
145
|
|
146
|
+
def version
|
147
|
+
flavour = self.class.name.sub(/::Converter$/, "").sub(/^.+::/, "")
|
148
|
+
Metanorma.versioned(Metanorma, flavour)[-1]::VERSION
|
149
|
+
end
|
150
|
+
|
146
151
|
def clean_exit
|
147
152
|
@log.write(@output_dir + @filename + ".err") unless @novalid
|
148
153
|
@files_to_delete.each { |f| FileUtils.rm f }
|
@@ -150,7 +155,7 @@ module Asciidoctor
|
|
150
155
|
|
151
156
|
def makexml1(node)
|
152
157
|
result = ["<?xml version='1.0' encoding='UTF-8'?>",
|
153
|
-
"<#{xml_root_tag}>"]
|
158
|
+
"<#{xml_root_tag} type='semantic' version='#{version}'>"]
|
154
159
|
result << noko { |ixml| front node, ixml }
|
155
160
|
result << noko { |ixml| middle node, ixml }
|
156
161
|
result << "</#{xml_root_tag}>"
|
@@ -158,17 +158,7 @@
|
|
158
158
|
<data type="ID"/>
|
159
159
|
</attribute>
|
160
160
|
<oneOrMore>
|
161
|
-
<
|
162
|
-
<ref name="formula"/>
|
163
|
-
<ref name="ul"/>
|
164
|
-
<ref name="ol"/>
|
165
|
-
<ref name="dl"/>
|
166
|
-
<ref name="quote"/>
|
167
|
-
<ref name="sourcecode"/>
|
168
|
-
<ref name="paragraph"/>
|
169
|
-
<ref name="table"/>
|
170
|
-
<ref name="figure"/>
|
171
|
-
</choice>
|
161
|
+
<ref name="paragraph"/>
|
172
162
|
</oneOrMore>
|
173
163
|
</element>
|
174
164
|
</define>
|
@@ -1028,6 +1018,9 @@
|
|
1028
1018
|
<value>alphabet_upper</value>
|
1029
1019
|
</choice>
|
1030
1020
|
</attribute>
|
1021
|
+
<optional>
|
1022
|
+
<attribute name="start"/>
|
1023
|
+
</optional>
|
1031
1024
|
<oneOrMore>
|
1032
1025
|
<ref name="li"/>
|
1033
1026
|
</oneOrMore>
|
@@ -81,12 +81,13 @@ module Asciidoctor
|
|
81
81
|
xmldoc.traverse do |n|
|
82
82
|
next unless n.text?
|
83
83
|
if @smartquotes
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
/[-'"(<>]|\.\.|\dx/.match(n) or next
|
85
|
+
n.ancestors("pre, tt, sourcecode, bibdata, on, "\
|
86
|
+
"stem, figure[@class = 'pseudocode']").empty? or next
|
87
87
|
n.replace(Utils::smartformat(n.text))
|
88
88
|
else
|
89
|
-
n.replace(n.text.gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"))
|
89
|
+
n.replace(n.text.gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"))#.
|
90
|
+
#gsub(/</, "<").gsub(/>/, ">"))
|
90
91
|
end
|
91
92
|
end
|
92
93
|
end
|
@@ -146,16 +147,33 @@ module Asciidoctor
|
|
146
147
|
align_callouts_to_annotations(xmldoc)
|
147
148
|
end
|
148
149
|
|
150
|
+
def xml_unescape_mathml(x)
|
151
|
+
return if x.children.any? { |y| y.element? }
|
152
|
+
math = x.text.gsub(/</, "<").gsub(/>/, ">").gsub(/"/, '"').
|
153
|
+
gsub(/'/, "'").gsub(/&/, "&").
|
154
|
+
gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</")
|
155
|
+
x.children = math
|
156
|
+
end
|
157
|
+
|
158
|
+
def mathml_preserve_space(m)
|
159
|
+
m.xpath(".//m:mtext",
|
160
|
+
"m" => "http://www.w3.org/1998/Math/MathML").each do |x|
|
161
|
+
x.children = x.children.to_xml.gsub(/^\s/, " ").
|
162
|
+
gsub(/\s$/, " ")
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def mathml_namespace(stem)
|
167
|
+
stem.xpath("./math", ).each do |x|
|
168
|
+
x.default_namespace = "http://www.w3.org/1998/Math/MathML"
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
149
172
|
def mathml_cleanup(xmldoc)
|
150
173
|
xmldoc.xpath("//stem[@type = 'MathML']").each do |x|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</").
|
155
|
-
gsub(/ xmlns[^>"']+/, "").
|
156
|
-
gsub(/<math /, '<math xmlns="http://www.w3.org/1998/Math/MathML" ').
|
157
|
-
gsub(/<math>/, '<math xmlns="http://www.w3.org/1998/Math/MathML">')
|
158
|
-
x.children = math
|
174
|
+
xml_unescape_mathml(x)
|
175
|
+
mathml_namespace(x)
|
176
|
+
mathml_preserve_space(x)
|
159
177
|
end
|
160
178
|
end
|
161
179
|
|
@@ -49,9 +49,8 @@ module Asciidoctor
|
|
49
49
|
# consecutively, but that standards codes are preserved as is:
|
50
50
|
# only numeric references are renumbered
|
51
51
|
def biblio_renumber(xmldoc)
|
52
|
-
r = xmldoc.at("//references
|
53
|
-
"//
|
54
|
-
"//annex[.//references[@normative = 'false']]") or return
|
52
|
+
r = xmldoc.at("//references | //clause[.//references] | "\
|
53
|
+
"//annex[.//references]") or return
|
55
54
|
r.xpath(".//bibitem[not(ancestor::bibitem)]").each_with_index do |b, i|
|
56
55
|
next unless docid = b.at("./docidentifier[@type = 'metanorma']")
|
57
56
|
next unless /^\[\d+\]$/.match(docid.text)
|
@@ -22,14 +22,18 @@ module Asciidoctor
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def organization(org, orgname)
|
25
|
+
abbrevs = org_abbrev
|
26
|
+
n = abbrevs.invert[orgname] and orgname = n
|
25
27
|
org.name orgname
|
28
|
+
a = org_abbrev[orgname] and org.abbreviation a
|
26
29
|
end
|
27
30
|
|
28
31
|
# , " => ," : CSV definition does not deal with space followed by quote
|
29
32
|
# at start of field
|
30
33
|
def csv_split(s, delim = ",")
|
31
|
-
CSV.parse_line(s&.gsub(/, "(?!")/, ',"'),
|
32
|
-
|
34
|
+
CSV.parse_line(s&.gsub(/, "(?!")/, ',"'),
|
35
|
+
liberal_parsing: true,
|
36
|
+
col_sep: delim)&.compact&.map { |x| x.strip }
|
33
37
|
end
|
34
38
|
|
35
39
|
def metadata_author(node, xml)
|
@@ -105,6 +109,10 @@ module Asciidoctor
|
|
105
109
|
nil
|
106
110
|
end
|
107
111
|
|
112
|
+
def org_abbrev
|
113
|
+
{ }
|
114
|
+
end
|
115
|
+
|
108
116
|
def metadata_publisher(node, xml)
|
109
117
|
publishers = node.attr("publisher") || default_publisher || return
|
110
118
|
csv_split(publishers)&.each do |p|
|
@@ -33,18 +33,28 @@ module Asciidoctor
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def inline_anchor_xref(node)
|
36
|
-
m = /^(?<case>capital%|lowercase%)?(?<fn>fn(:\s*(?<text>.*))?)?$/.match node.text
|
37
|
-
casing = m.nil? ? nil : m[:case]&.sub(/%$/, "")
|
38
|
-
f = (m.nil? || m[:fn].nil?) ? "inline" : "footnote"
|
39
|
-
c = (!m.nil? && (!m[:fn].nil? || !m[:case].nil?)) ? m[:text] : node.text
|
40
|
-
t = node.target.gsub(/^#/, "").gsub(%r{(\.xml|\.adoc)(#.*$)}, "\\2")
|
41
36
|
noko do |xml|
|
42
|
-
|
37
|
+
attrs = inline_anchor_xref_attrs(node)
|
38
|
+
c = attrs[:text]
|
39
|
+
attrs.delete(:text) unless c.nil?
|
40
|
+
xml.xref **attr_code(attrs) do |x|
|
43
41
|
x << c
|
44
42
|
end
|
45
43
|
end.join
|
46
44
|
end
|
47
45
|
|
46
|
+
def inline_anchor_xref_attrs(node)
|
47
|
+
m = /^(?<drop>droploc%)?(?<case>capital%|lowercase%)?(?<drop2>droploc%)?
|
48
|
+
(?<fn>fn(:\s*(?<text>.*))?)?$/x.match node.text
|
49
|
+
casing = m.nil? ? nil : m[:case]&.sub(/%$/, "")
|
50
|
+
droploc = m.nil? ? nil : ((m[:drop].nil? && m[:drop2].nil?) ? nil: true)
|
51
|
+
f = (m.nil? || m[:fn].nil?) ? "inline" : "footnote"
|
52
|
+
c = (!m.nil? && (%i[case fn drop drop2].any? { |x| !m[x].nil? })) ?
|
53
|
+
m[:text] : node.text
|
54
|
+
t = node.target.gsub(/^#/, "").gsub(%r{(\.xml|\.adoc)(#.*$)}, "\\2")
|
55
|
+
{ target: t, type: f, case: casing, droploc: droploc, text: c }
|
56
|
+
end
|
57
|
+
|
48
58
|
def inline_anchor_link(node)
|
49
59
|
contents = node.text
|
50
60
|
contents = "" if node.target.gsub(%r{^mailto:}, "") == node.text
|
@@ -106,40 +116,8 @@ module Asciidoctor
|
|
106
116
|
HTMLEntities.new.encode(text, :basic, :hexadecimal).
|
107
117
|
gsub(/&gt;/, ">").gsub(/\&lt;/, "<").gsub(/&amp;/, "&").
|
108
118
|
gsub(/>/, ">").gsub(/</, "<").gsub(/&/, "&").
|
109
|
-
gsub(/"/, '"').gsub(/
/, "\n")
|
110
|
-
end
|
111
|
-
|
112
|
-
=begin
|
113
|
-
def latex_run1(lxm_input, cmd)
|
114
|
-
IO.popen(cmd, "r+", external_encoding: "UTF-8") do |io|
|
115
|
-
io.write(lxm_input)
|
116
|
-
io.close_write
|
117
|
-
io.read
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def latex_run(lxm_input)
|
122
|
-
results = nil
|
123
|
-
Metanorma::Standoc::Requirements[:latexml].cmd.each_with_index do |cmd, i|
|
124
|
-
warn "Retrying with #{cmd}" if i > 0
|
125
|
-
results = latex_run1(lxm_input, cmd)
|
126
|
-
if $CHILD_STATUS.to_i.zero?
|
127
|
-
warn "Success!" if i > 0
|
128
|
-
break
|
129
|
-
end
|
130
|
-
end
|
131
|
-
$CHILD_STATUS.to_i.zero? ? results : nil
|
132
|
-
end
|
133
|
-
|
134
|
-
def latex_parse(text)
|
135
|
-
lxm_input = Unicode2LaTeX.unicode2latex(HTMLEntities.new.decode(text))
|
136
|
-
results = latex_run(lxm_input)
|
137
|
-
results.nil? and
|
138
|
-
@log.add('Math', nil,
|
139
|
-
"latexmlmath failed to process equation:\n#{lxm_input}")
|
140
|
-
results&.sub(%r{<math ([^>]+ )?display="block"}, "<math \\1")
|
119
|
+
gsub(/"/, '"').gsub(/
/, "\n").gsub(/&#/, "&#")
|
141
120
|
end
|
142
|
-
=end
|
143
121
|
|
144
122
|
def latex_parse(text)
|
145
123
|
lxm_input = Unicode2LaTeX.unicode2latex(HTMLEntities.new.decode(text))
|
@@ -163,7 +141,7 @@ module Asciidoctor
|
|
163
141
|
s.parent.children = math
|
164
142
|
end
|
165
143
|
else
|
166
|
-
xml.stem text, **{ type: "AsciiMath" }
|
144
|
+
xml.stem text&.gsub(/\&#/, "&#"), **{ type: "AsciiMath" }
|
167
145
|
end
|
168
146
|
end
|
169
147
|
|
@@ -64,6 +64,11 @@
|
|
64
64
|
</choice>
|
65
65
|
</attribute>
|
66
66
|
</optional>
|
67
|
+
<optional>
|
68
|
+
<attribute name="droploc">
|
69
|
+
<data type="boolean"/>
|
70
|
+
</attribute>
|
71
|
+
</optional>
|
67
72
|
<text/>
|
68
73
|
</element>
|
69
74
|
</define>
|
@@ -859,6 +864,13 @@
|
|
859
864
|
</define>
|
860
865
|
<define name="standard-document">
|
861
866
|
<element name="standard-document">
|
867
|
+
<attribute name="version"/>
|
868
|
+
<attribute name="type">
|
869
|
+
<choice>
|
870
|
+
<value>semantic</value>
|
871
|
+
<value>presentation</value>
|
872
|
+
</choice>
|
873
|
+
</attribute>
|
862
874
|
<ref name="bibdata"/>
|
863
875
|
<optional>
|
864
876
|
<ref name="boilerplate"/>
|
@@ -880,7 +892,7 @@
|
|
880
892
|
<oneOrMore>
|
881
893
|
<choice>
|
882
894
|
<ref name="content"/>
|
883
|
-
<ref name="
|
895
|
+
<ref name="abstract"/>
|
884
896
|
<ref name="foreword"/>
|
885
897
|
<ref name="introduction"/>
|
886
898
|
<ref name="acknowledgements"/>
|
@@ -1481,11 +1493,6 @@
|
|
1481
1493
|
</optional>
|
1482
1494
|
</element>
|
1483
1495
|
</define>
|
1484
|
-
<define name="preface_abstract">
|
1485
|
-
<element name="abstract">
|
1486
|
-
<ref name="Basic-Section"/>
|
1487
|
-
</element>
|
1488
|
-
</define>
|
1489
1496
|
<define name="term-clause">
|
1490
1497
|
<element name="clause">
|
1491
1498
|
<optional>
|
@@ -42,8 +42,7 @@ module Asciidoctor
|
|
42
42
|
|
43
43
|
def docid(t, code)
|
44
44
|
type, code1 = /^\[\d+\]$|^\([^)]+\).*$/.match(code) ?
|
45
|
-
["metanorma", mn_code(code)] :
|
46
|
-
@bibdb&.docid_type(code) || [nil, code]
|
45
|
+
["metanorma", mn_code(code)] : @bibdb&.docid_type(code) || [nil, code]
|
47
46
|
code1.sub!(/^nofetch\((.+)\)$/, "\\1")
|
48
47
|
t.docidentifier **attr_code(type: type) do |d|
|
49
48
|
d << code1
|
@@ -84,6 +83,10 @@ module Asciidoctor
|
|
84
83
|
ref = fetch_ref xml, m[:code], nil, no_year: true, note: m[:fn],
|
85
84
|
title: m[:text], usrlbl: m[:usrlbl]
|
86
85
|
return use_my_anchor(ref, m[:anchor]) if ref
|
86
|
+
isorefmatches2_1(xml, m)
|
87
|
+
end
|
88
|
+
|
89
|
+
def isorefmatches2_1(xml, m)
|
87
90
|
xml.bibitem **attr_code(ref_attributes(m)) do |t|
|
88
91
|
isorefrender1(t, m, "--")
|
89
92
|
t.date **{ type: "published" } do |d|
|
@@ -106,13 +109,14 @@ module Asciidoctor
|
|
106
109
|
|
107
110
|
def isorefmatches3(xml, m)
|
108
111
|
yr = norm_year(m[:year])
|
109
|
-
#hasyr = m.names.include?("year") && yr != "--"
|
110
112
|
hasyr = !yr.nil? && yr != "--"
|
111
|
-
#noyr = m.names.include?("year") && yr == "--"
|
112
113
|
ref = fetch_ref xml, m[:code], hasyr ? yr : nil, all_parts: true,
|
113
114
|
no_year: yr == "--", text: m[:text], usrlbl: m[:usrlbl]
|
114
115
|
return use_my_anchor(ref, m[:anchor]) if ref
|
116
|
+
isorefmatches3_1(xml, m, yr, hasyr, ref)
|
117
|
+
end
|
115
118
|
|
119
|
+
def isorefmatches3_1(xml, m, yr, hasyr, ref)
|
116
120
|
xml.bibitem(**attr_code(ref_attributes(m))) do |t|
|
117
121
|
isorefrender1(t, m, yr, " (all parts)")
|
118
122
|
conditional_date(t, m, yr == "--")
|
@@ -147,30 +151,24 @@ module Asciidoctor
|
|
147
151
|
end
|
148
152
|
|
149
153
|
MALFORMED_REF = "no anchor on reference, markup may be malformed: see "\
|
150
|
-
"https://www.metanorma.com/author/topics/document-format/
|
151
|
-
"https://www.metanorma.com/author/iso/topics/markup
|
154
|
+
"https://www.metanorma.com/author/topics/document-format/"\
|
155
|
+
"bibliography/ , https://www.metanorma.com/author/iso/topics/markup/"\
|
156
|
+
"#bibliographies".freeze
|
152
157
|
|
153
158
|
def analyse_ref_nofetch(ret)
|
154
159
|
return ret unless m = /^nofetch\((?<id>.+)\)$/.match(ret[:id])
|
155
|
-
ret
|
156
|
-
ret[:nofetch] = true
|
157
|
-
ret
|
160
|
+
ret.merge(id: m[:id], nofetch: true)
|
158
161
|
end
|
159
162
|
|
160
163
|
def analyse_ref_repo_path(ret)
|
161
164
|
return ret unless m =
|
162
165
|
/^(?<type>repo|path):\((?<key>[^,]+),(?<id>.+)\)$/.match(ret[:id])
|
163
|
-
ret[:id]
|
164
|
-
ret[:type] = m[:type]
|
165
|
-
ret[:key] = m[:key]
|
166
|
-
ret[:nofetch] = true
|
167
|
-
ret
|
166
|
+
ret.merge(id: m[:id], type: m[:type], key: m[:key], nofetch: true)
|
168
167
|
end
|
169
168
|
|
170
169
|
def analyse_ref_numeric(ret)
|
171
170
|
return ret unless /^\d+$/.match(ret[:id])
|
172
|
-
ret
|
173
|
-
ret
|
171
|
+
ret.merge(numeric: true)
|
174
172
|
end
|
175
173
|
|
176
174
|
# ref id = (usrlbl)code[:-]year
|
@@ -178,10 +176,7 @@ module Asciidoctor
|
|
178
176
|
def analyse_ref_code(code)
|
179
177
|
ret = {id: code}
|
180
178
|
return ret if code.nil? || code.empty?
|
181
|
-
|
182
|
-
ret = analyse_ref_repo_path(ret)
|
183
|
-
ret = analyse_ref_numeric(ret)
|
184
|
-
ret
|
179
|
+
analyse_ref_nofetch(analyse_ref_repo_path(analyse_ref_numeric(ret)))
|
185
180
|
end
|
186
181
|
|
187
182
|
# TODO: alternative where only title is available
|
@@ -190,6 +185,10 @@ module Asciidoctor
|
|
190
185
|
@log.add("AsciiDoc Input", node, "#{MALFORMED_REF}: #{item}")
|
191
186
|
return
|
192
187
|
end
|
188
|
+
refitem1(xml, item, m)
|
189
|
+
end
|
190
|
+
|
191
|
+
def refitem1(xml, item, m)
|
193
192
|
code = analyse_ref_code(m[:code])
|
194
193
|
unless code[:id] && code[:numeric] || code[:nofetch]
|
195
194
|
ref = fetch_ref xml, code[:id],
|
@@ -214,23 +213,25 @@ module Asciidoctor
|
|
214
213
|
(?<text>.*)$}xm
|
215
214
|
|
216
215
|
ISO_REF_NO_YEAR = %r{^<ref\sid="(?<anchor>[^"]+)">
|
217
|
-
\[(?<usrlbl>\([^)]+\))?(?<code>(ISO|IEC)[^0-9]*\s[0-9-]+):
|
216
|
+
\[(?<usrlbl>\([^)]+\))?(?<code>(ISO|IEC)[^0-9]*\s[0-9-]+):
|
217
|
+
(--|\&\#821[12]\;)\]</ref>,?\s*
|
218
218
|
(<fn[^>]*>\s*<p>(?<fn>[^\]]+)</p>\s*</fn>)?,?\s?(?<text>.*)$}xm
|
219
219
|
|
220
220
|
ISO_REF_ALL_PARTS = %r{^<ref\sid="(?<anchor>[^"]+)">
|
221
|
-
\[(?<usrlbl>\([^)]+\))?(?<code>(ISO|IEC)[^0-9]*\s[0-9]+)
|
221
|
+
\[(?<usrlbl>\([^)]+\))?(?<code>(ISO|IEC)[^0-9]*\s[0-9]+)
|
222
|
+
(:(?<year>--|\&\#821[12]\;|[0-9][0-9-]+))?\s
|
222
223
|
\(all\sparts\)\]</ref>,?\s*
|
223
224
|
(<fn[^>]*>\s*<p>(?<fn>[^\]]+)</p>\s*</fn>,?\s?)?(?<text>.*)$}xm
|
224
225
|
|
225
226
|
NON_ISO_REF = %r{^<ref\sid="(?<anchor>[^"]+)">
|
226
|
-
\[(?<usrlbl>\([^)]+\))?(?<code>[^\]]+?)
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
227
|
+
\[(?<usrlbl>\([^)]+\))?(?<code>[^\]]+?)
|
228
|
+
([:-](?<year>(19|20)[0-9][0-9]))?\]</ref>,?\s*(?<text>.*)$}xm
|
229
|
+
|
230
|
+
def reference1_matches(item)
|
231
|
+
matched = ISO_REF.match item
|
232
|
+
matched2 = ISO_REF_NO_YEAR.match item
|
233
|
+
matched3 = ISO_REF_ALL_PARTS.match item
|
234
|
+
[matched, matched2, matched3]
|
234
235
|
end
|
235
236
|
|
236
237
|
def reference1(node, item, xml)
|