metanorma-standoc 1.6.4 → 1.6.5
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/standoc/base.rb +8 -16
- data/lib/asciidoctor/standoc/basicdoc.rng +32 -0
- data/lib/asciidoctor/standoc/cleanup.rb +1 -1
- data/lib/asciidoctor/standoc/cleanup_ref.rb +17 -24
- data/lib/asciidoctor/standoc/cleanup_terms.rb +3 -0
- data/lib/asciidoctor/standoc/converter.rb +3 -0
- data/lib/asciidoctor/standoc/isodoc.rng +15 -0
- data/lib/asciidoctor/standoc/macros.rb +19 -63
- data/lib/asciidoctor/standoc/macros_terms.rb +82 -0
- data/lib/asciidoctor/standoc/ref.rb +12 -21
- data/lib/asciidoctor/standoc/table.rb +12 -0
- data/lib/asciidoctor/standoc/term_lookup_cleanup.rb +86 -0
- data/lib/metanorma/standoc/version.rb +1 -1
- data/spec/asciidoctor-standoc/blocks_spec.rb +8 -8
- data/spec/asciidoctor-standoc/cleanup_sections_spec.rb +6 -6
- data/spec/asciidoctor-standoc/cleanup_spec.rb +70 -9
- data/spec/asciidoctor-standoc/macros_plantuml_spec.rb +307 -0
- data/spec/asciidoctor-standoc/macros_spec.rb +228 -277
- data/spec/asciidoctor-standoc/section_spec.rb +11 -11
- data/spec/asciidoctor-standoc/table_spec.rb +86 -0
- data/spec/fixtures/diagram_definitions.lutaml +4 -4
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +49 -49
- 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 +37 -37
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_124.yml +14 -14
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +51 -61
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f510c7d84985eb301f3bfe71f4ebe89f39961a6b9ec113a9e019537056e3933
|
4
|
+
data.tar.gz: a0844efae9739bfd19ab8263dd9a5b1edff6883b443f5c7fb399a056cd528bfa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9fa2f578c9b742860c5464141a2efbe1d565061148e0aa701520cfe8cfe0ef0828c46ffa21883d893190af37efc7c31a792d4a11a6c8775a43ca6bae6b08aa9
|
7
|
+
data.tar.gz: 63a79d788f62977472a2ff3c21d1926dfb52b43722092f82f721cbcfb8748caba1adec96fb3062c02dab8fb7d74b9dc691bcb70dca9f91121d778122444158bc
|
@@ -94,12 +94,10 @@ module Asciidoctor
|
|
94
94
|
@draft = node.attributes.has_key?("draft")
|
95
95
|
@novalid = node.attr("novalid")
|
96
96
|
@smartquotes = node.attr("smartquotes") != "false"
|
97
|
-
@keepasciimath = node.attr("mn-keep-asciimath") &&
|
98
|
-
node.attr("mn-keep-asciimath") != "false"
|
97
|
+
@keepasciimath = node.attr("mn-keep-asciimath") && node.attr("mn-keep-asciimath") != "false"
|
99
98
|
@fontheader = default_fonts(node)
|
100
99
|
@files_to_delete = []
|
101
|
-
@filename = node.attr("docfile") ?
|
102
|
-
File.basename(node.attr("docfile")).gsub(/\.adoc$/, "") : ""
|
100
|
+
@filename = node.attr("docfile") ? File.basename(node.attr("docfile")).gsub(/\.adoc$/, "") : ""
|
103
101
|
@localdir = Utils::localdir(node)
|
104
102
|
@output_dir = outputdir node
|
105
103
|
@no_isobib_cache = node.attr("no-isobib-cache")
|
@@ -119,11 +117,9 @@ module Asciidoctor
|
|
119
117
|
|
120
118
|
def default_fonts(node)
|
121
119
|
b = node.attr("body-font") ||
|
122
|
-
(node.attr("script") == "Hans" ? '"SimSun",serif' :
|
123
|
-
'"Cambria",serif')
|
120
|
+
(node.attr("script") == "Hans" ? '"SimSun",serif' : '"Cambria",serif')
|
124
121
|
h = node.attr("header-font") ||
|
125
|
-
(node.attr("script") == "Hans" ? '"SimHei",sans-serif' :
|
126
|
-
'"Cambria",serif')
|
122
|
+
(node.attr("script") == "Hans" ? '"SimHei",sans-serif' : '"Cambria",serif')
|
127
123
|
m = node.attr("monospace-font") || '"Courier New",monospace'
|
128
124
|
"$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
|
129
125
|
end
|
@@ -154,8 +150,7 @@ module Asciidoctor
|
|
154
150
|
end
|
155
151
|
|
156
152
|
def makexml1(node)
|
157
|
-
result = ["<?xml version='1.0' encoding='UTF-8'?>",
|
158
|
-
"<#{xml_root_tag} type='semantic' version='#{version}'>"]
|
153
|
+
result = ["<?xml version='1.0' encoding='UTF-8'?>", "<#{xml_root_tag} type='semantic' version='#{version}'>"]
|
159
154
|
result << noko { |ixml| front node, ixml }
|
160
155
|
result << noko { |ixml| middle node, ixml }
|
161
156
|
result << "</#{xml_root_tag}>"
|
@@ -192,16 +187,14 @@ module Asciidoctor
|
|
192
187
|
|
193
188
|
def term_source_attrs(seen_xref)
|
194
189
|
{ bibitemid: seen_xref.children[0]["target"],
|
195
|
-
format: seen_xref.children[0]["format"],
|
196
|
-
type: "inline" }
|
190
|
+
format: seen_xref.children[0]["format"], type: "inline" }
|
197
191
|
end
|
198
192
|
|
199
193
|
def add_term_source(xml_t, seen_xref, m)
|
200
194
|
if seen_xref.children[0].name == "concept"
|
201
195
|
xml_t.origin { |o| o << seen_xref.children[0].to_xml }
|
202
196
|
else
|
203
|
-
xml_t.origin seen_xref.children[0].content,
|
204
|
-
**attr_code(term_source_attrs(seen_xref))
|
197
|
+
xml_t.origin seen_xref.children[0].content, **attr_code(term_source_attrs(seen_xref))
|
205
198
|
end
|
206
199
|
m[:text] && xml_t.modification do |mod|
|
207
200
|
mod.p { |p| p << m[:text].sub(/^\s+/, "") }
|
@@ -219,8 +212,7 @@ module Asciidoctor
|
|
219
212
|
|
220
213
|
def extract_termsource_refs(text, node)
|
221
214
|
matched = TERM_REFERENCE_RE.match text
|
222
|
-
matched.nil? and
|
223
|
-
@log.add("AsciiDoc Input", node, "term reference not in expected format: #{text}")
|
215
|
+
matched.nil? and @log.add("AsciiDoc Input", node, "term reference not in expected format: #{text}")
|
224
216
|
matched
|
225
217
|
end
|
226
218
|
|
@@ -596,6 +596,7 @@
|
|
596
596
|
<ref name="bookmark"/>
|
597
597
|
<ref name="image"/>
|
598
598
|
<ref name="index"/>
|
599
|
+
<ref name="index-xref"/>
|
599
600
|
</choice>
|
600
601
|
</define>
|
601
602
|
<define name="PureTextElement">
|
@@ -737,6 +738,37 @@
|
|
737
738
|
</optional>
|
738
739
|
</element>
|
739
740
|
</define>
|
741
|
+
<define name="index-xref">
|
742
|
+
<element name="index-xref">
|
743
|
+
<attribute name="also">
|
744
|
+
<data type="boolean"/>
|
745
|
+
</attribute>
|
746
|
+
<element name="primary">
|
747
|
+
<oneOrMore>
|
748
|
+
<ref name="PureTextElement"/>
|
749
|
+
</oneOrMore>
|
750
|
+
</element>
|
751
|
+
<optional>
|
752
|
+
<element name="secondary">
|
753
|
+
<oneOrMore>
|
754
|
+
<ref name="PureTextElement"/>
|
755
|
+
</oneOrMore>
|
756
|
+
</element>
|
757
|
+
</optional>
|
758
|
+
<optional>
|
759
|
+
<element name="tertiary">
|
760
|
+
<oneOrMore>
|
761
|
+
<ref name="PureTextElement"/>
|
762
|
+
</oneOrMore>
|
763
|
+
</element>
|
764
|
+
</optional>
|
765
|
+
<element name="target">
|
766
|
+
<oneOrMore>
|
767
|
+
<ref name="PureTextElement"/>
|
768
|
+
</oneOrMore>
|
769
|
+
</element>
|
770
|
+
</element>
|
771
|
+
</define>
|
740
772
|
<!-- bare ID element, used for referencing arbitrary spans of text -->
|
741
773
|
<define name="bookmark">
|
742
774
|
<element name="bookmark">
|
@@ -176,7 +176,7 @@ module Asciidoctor
|
|
176
176
|
|
177
177
|
# presuppose multichar mi upright, singlechar mi MathML default italic
|
178
178
|
def mathml_italicise(x)
|
179
|
-
x.xpath(".//m:mi", "m" => MATHML_NS).each do |i|
|
179
|
+
x.xpath(".//m:mi[not(ancestor::*[@mathvariant])]", "m" => MATHML_NS).each do |i|
|
180
180
|
char = HTMLEntities.new.decode(i.text)
|
181
181
|
i["mathvariant"] = "normal" if mi_italicise?(char)
|
182
182
|
end
|
@@ -16,8 +16,7 @@ module Asciidoctor
|
|
16
16
|
insert = refs&.at("./bibitem")&.previous_element
|
17
17
|
refs.xpath("./bibitem").each { |b| b.remove }
|
18
18
|
bib.reverse.each do |b|
|
19
|
-
insert and insert.next = b.to_xml or
|
20
|
-
refs.children.first.add_previous_sibling b.to_xml
|
19
|
+
insert and insert.next = b.to_xml or refs.children.first.add_previous_sibling b.to_xml
|
21
20
|
end
|
22
21
|
extract_notes_from_biblio(refs)
|
23
22
|
refs.xpath("./references").each { |r| biblio_reorder1(r) }
|
@@ -49,12 +48,14 @@ module Asciidoctor
|
|
49
48
|
# consecutively, but that standards codes are preserved as is:
|
50
49
|
# only numeric references are renumbered
|
51
50
|
def biblio_renumber(xmldoc)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
51
|
+
i = 0
|
52
|
+
xmldoc.xpath("//bibliography//references | //clause//references | //annex//references").each do |r|
|
53
|
+
r.xpath("./bibitem").each do |b|
|
54
|
+
i += 1
|
55
|
+
next unless docid = b.at("./docidentifier[@type = 'metanorma']")
|
56
|
+
next unless /^\[\d+\]$/.match(docid.text)
|
57
|
+
docid.children = "[#{i}]"
|
58
|
+
end
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
@@ -123,8 +124,7 @@ module Asciidoctor
|
|
123
124
|
xmldoc.xpath("//clause[@bibitem = 'true']").each do |c|
|
124
125
|
bib = dl_bib_extract(c) or next
|
125
126
|
validate_ref_dl(bib, c)
|
126
|
-
bibitemxml = RelatonBib::BibliographicItem.new(
|
127
|
-
RelatonBib::HashConverter::hash_to_bib(bib)).to_xml or next
|
127
|
+
bibitemxml = RelatonBib::BibliographicItem.new(RelatonBib::HashConverter::hash_to_bib(bib)).to_xml or next
|
128
128
|
bibitem = Nokogiri::XML(bibitemxml)
|
129
129
|
bibitem.root["id"] = c["id"] if c["id"] && !/^_/.match(c["id"])
|
130
130
|
c.replace(bibitem.root)
|
@@ -135,14 +135,11 @@ module Asciidoctor
|
|
135
135
|
id = bib["id"]
|
136
136
|
id ||= c["id"] unless /^_/.match(c["id"]) # do not accept implicit id
|
137
137
|
unless id
|
138
|
-
@log.add("Anchors", c, "The following reference is missing "
|
139
|
-
"an anchor:\n" + c.to_xml)
|
138
|
+
@log.add("Anchors", c, "The following reference is missing an anchor:\n" + c.to_xml)
|
140
139
|
return
|
141
140
|
end
|
142
|
-
bib["title"] or @log.add("Bibliography", c, "Reference #{id} "
|
143
|
-
|
144
|
-
bib["docid"] or @log.add("Bibliography", c, "Reference #{id} "\
|
145
|
-
"is missing a document identifier (docid)")
|
141
|
+
bib["title"] or @log.add("Bibliography", c, "Reference #{id} is missing a title")
|
142
|
+
bib["docid"] or @log.add("Bibliography", c, "Reference #{id} is missing a document identifier (docid)")
|
146
143
|
end
|
147
144
|
|
148
145
|
def extract_from_p(tag, bib, key)
|
@@ -173,8 +170,7 @@ module Asciidoctor
|
|
173
170
|
return nil if dtd.children.empty?
|
174
171
|
dtd.at("./dl") and return dl_bib_extract(dtd)
|
175
172
|
elems = dtd.remove.elements
|
176
|
-
return p_unwrap(dtd) unless elems.size == 1 &&
|
177
|
-
%w(ol ul).include?(elems[0].name)
|
173
|
+
return p_unwrap(dtd) unless elems.size == 1 && %w(ol ul).include?(elems[0].name)
|
178
174
|
ret = []
|
179
175
|
elems[0].xpath("./li").each do |li|
|
180
176
|
ret << p_unwrap(li)
|
@@ -192,8 +188,7 @@ module Asciidoctor
|
|
192
188
|
bib = {}
|
193
189
|
key = ""
|
194
190
|
dl.xpath("./dt | ./dd").each do |dtd|
|
195
|
-
dtd.name == "dt" and key = dtd.text.sub(/:+$/, "") or
|
196
|
-
add_to_hash(bib, key, dd_bib_extract(dtd))
|
191
|
+
dtd.name == "dt" and key = dtd.text.sub(/:+$/, "") or add_to_hash(bib, key, dd_bib_extract(dtd))
|
197
192
|
end
|
198
193
|
c.xpath("./clause").each do |c1|
|
199
194
|
key = c1&.at("./title")&.text&.downcase&.strip
|
@@ -221,8 +216,7 @@ module Asciidoctor
|
|
221
216
|
File.file?(file) or return nil
|
222
217
|
xml = Nokogiri::XML(File.read(file, encoding: "utf-8"))
|
223
218
|
ret = xml.at("//*[local-name() = 'bibdata']") or return nil
|
224
|
-
ret = Nokogiri::XML(ret.to_xml.sub(
|
225
|
-
%r{(<bibdata[^>]*?) xmlns=("[^"]+"|'[^']+')}, "\\1")).root
|
219
|
+
ret = Nokogiri::XML(ret.to_xml.sub(%r{(<bibdata[^>]*?) xmlns=("[^"]+"|'[^']+')}, "\\1")).root
|
226
220
|
ret.name = "bibitem"
|
227
221
|
ins = ret.at("./*[local-name() = 'docidentifier']") or return nil
|
228
222
|
ins.previous = %{<uri type="citation">#{uri}</uri>}
|
@@ -232,8 +226,7 @@ module Asciidoctor
|
|
232
226
|
|
233
227
|
# if citation uri points to local file, get bibitem from it
|
234
228
|
def fetch_local_bibitem(xmldoc)
|
235
|
-
xmldoc.xpath("//bibitem[formattedref]"
|
236
|
-
"[uri[@type = 'citation']]").each do |b|
|
229
|
+
xmldoc.xpath("//bibitem[formattedref][uri[@type = 'citation']]").each do |b|
|
237
230
|
uri = b&.at("./uri[@type = 'citation']")&.text
|
238
231
|
bibitem = read_local_bibitem(uri) or next
|
239
232
|
bibitem["id"] = b["id"]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative "term_lookup_cleanup"
|
2
|
+
|
1
3
|
module Asciidoctor
|
2
4
|
module Standoc
|
3
5
|
module Cleanup
|
@@ -86,6 +88,7 @@ module Asciidoctor
|
|
86
88
|
end
|
87
89
|
|
88
90
|
def termdef_cleanup(xmldoc)
|
91
|
+
Asciidoctor::Standoc::TermLookupCleanup.new(xmldoc, @log).call
|
89
92
|
termdef_from_termbase(xmldoc)
|
90
93
|
termdef_unnest_cleanup(xmldoc)
|
91
94
|
termdef_stem_cleanup(xmldoc)
|
@@ -39,6 +39,8 @@ module Asciidoctor
|
|
39
39
|
inline_macro Asciidoctor::Standoc::AutonumberInlineMacro
|
40
40
|
inline_macro Asciidoctor::Standoc::VariantInlineMacro
|
41
41
|
inline_macro Asciidoctor::Standoc::FootnoteBlockInlineMacro
|
42
|
+
inline_macro Asciidoctor::Standoc::TermRefInlineMacro
|
43
|
+
inline_macro Asciidoctor::Standoc::IndexInlineMacro
|
42
44
|
block Asciidoctor::Standoc::ToDoAdmonitionBlock
|
43
45
|
treeprocessor Asciidoctor::Standoc::ToDoInlineAdmonitionBlock
|
44
46
|
block Asciidoctor::Standoc::PlantUMLBlockMacro
|
@@ -52,6 +54,7 @@ module Asciidoctor
|
|
52
54
|
include ::Asciidoctor::Standoc::Base
|
53
55
|
include ::Asciidoctor::Standoc::Front
|
54
56
|
include ::Asciidoctor::Standoc::Lists
|
57
|
+
include ::Asciidoctor::Standoc::Refs
|
55
58
|
include ::Asciidoctor::Standoc::Inline
|
56
59
|
include ::Asciidoctor::Standoc::Blocks
|
57
60
|
include ::Asciidoctor::Standoc::Section
|
@@ -246,6 +246,9 @@
|
|
246
246
|
<data type="boolean"/>
|
247
247
|
</attribute>
|
248
248
|
</optional>
|
249
|
+
<optional>
|
250
|
+
<ref name="colgroup"/>
|
251
|
+
</optional>
|
249
252
|
<optional>
|
250
253
|
<ref name="tname"/>
|
251
254
|
</optional>
|
@@ -764,6 +767,18 @@
|
|
764
767
|
</define>
|
765
768
|
</include>
|
766
769
|
<!-- end overrides -->
|
770
|
+
<define name="colgroup">
|
771
|
+
<element name="colgroup">
|
772
|
+
<oneOrMore>
|
773
|
+
<ref name="col"/>
|
774
|
+
</oneOrMore>
|
775
|
+
</element>
|
776
|
+
</define>
|
777
|
+
<define name="col">
|
778
|
+
<element name="col">
|
779
|
+
<attribute name="width"/>
|
780
|
+
</element>
|
781
|
+
</define>
|
767
782
|
<define name="TextElement" combine="choice">
|
768
783
|
<ref name="concept"/>
|
769
784
|
</define>
|
@@ -3,6 +3,7 @@ require "fileutils"
|
|
3
3
|
require "uuidtools"
|
4
4
|
require "yaml"
|
5
5
|
require_relative "./macros_plantuml.rb"
|
6
|
+
require_relative "./macros_terms.rb"
|
6
7
|
require_relative "./datamodel/attributes_table_preprocessor.rb"
|
7
8
|
require_relative "./datamodel/diagram_preprocessor.rb"
|
8
9
|
require "metanorma-plugin-datastruct"
|
@@ -10,42 +11,6 @@ require "metanorma-plugin-lutaml"
|
|
10
11
|
|
11
12
|
module Asciidoctor
|
12
13
|
module Standoc
|
13
|
-
class AltTermInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
14
|
-
use_dsl
|
15
|
-
named :alt
|
16
|
-
parse_content_as :text
|
17
|
-
using_format :short
|
18
|
-
|
19
|
-
def process(parent, _target, attrs)
|
20
|
-
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
21
|
-
%{<admitted>#{out}</admitted>}
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class DeprecatedTermInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
26
|
-
use_dsl
|
27
|
-
named :deprecated
|
28
|
-
parse_content_as :text
|
29
|
-
using_format :short
|
30
|
-
|
31
|
-
def process(parent, _target, attrs)
|
32
|
-
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
33
|
-
%{<deprecates>#{out}</deprecates>}
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class DomainTermInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
38
|
-
use_dsl
|
39
|
-
named :domain
|
40
|
-
parse_content_as :text
|
41
|
-
using_format :short
|
42
|
-
|
43
|
-
def process(parent, _target, attrs)
|
44
|
-
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
45
|
-
%{<domain>#{out}</domain>}
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
14
|
class InheritInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
50
15
|
use_dsl
|
51
16
|
named :inherit
|
@@ -58,33 +23,24 @@ module Asciidoctor
|
|
58
23
|
end
|
59
24
|
end
|
60
25
|
|
61
|
-
class
|
26
|
+
class IndexInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
62
27
|
use_dsl
|
63
|
-
named :
|
64
|
-
name_positional_attributes "id", "word", "term"
|
65
|
-
# match %r{concept:(?<target>[^\[]*)\[(?<content>|.*?[^\\])\]$}
|
66
|
-
match /\{\{(?<content>|.*?[^\\])\}\}/
|
67
|
-
using_format :short
|
28
|
+
named :index
|
68
29
|
|
69
|
-
# deal with locality attrs and their disruption of positional attrs
|
70
30
|
def preprocess_attrs(attrs)
|
71
|
-
attrs.
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
attrs
|
31
|
+
return unless attrs.size > 1 && attrs.size < 5
|
32
|
+
ret = { primary: attrs[1], target: attrs[attrs.size] }
|
33
|
+
ret[:secondary] = attrs[2] if attrs.size > 2
|
34
|
+
ret[:tertiary] = attrs[3] if attrs.size > 3
|
35
|
+
ret
|
77
36
|
end
|
78
37
|
|
79
|
-
def process(
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
join(",")
|
86
|
-
out = Asciidoctor::Inline.new(parent, :quoted, text).convert
|
87
|
-
%{<concept key="#{attr['id']}" term="#{attr['term']}">#{out}</concept>}
|
38
|
+
def process(_parent, target, attr)
|
39
|
+
args = preprocess_attrs(attr) or return
|
40
|
+
ret = "<index-xref also='#{target == 'also'}'><primary>#{args[:primary]}</primary>"
|
41
|
+
ret += "<secondary>#{args[:secondary]}</secondary>" if args[:secondary]
|
42
|
+
ret += "<tertiary>#{args[:tertiary]}</tertiary>" if args[:tertiary]
|
43
|
+
ret + "<target>#{args[:target]}</target></index-xref>"
|
88
44
|
end
|
89
45
|
end
|
90
46
|
|
@@ -135,7 +91,7 @@ module Asciidoctor
|
|
135
91
|
if (attributes.size == 1) && attributes.key?("text")
|
136
92
|
rt = attributes["text"]
|
137
93
|
elsif (attributes.size == 2) && attributes.key?(1) &&
|
138
|
-
|
94
|
+
attributes.key?("rpbegin")
|
139
95
|
# for example, html5ruby:楽聖少女[がくせいしょうじょ]
|
140
96
|
rt = attributes[1] || ""
|
141
97
|
else
|
@@ -158,7 +114,7 @@ module Asciidoctor
|
|
158
114
|
attrs["name"] = "todo"
|
159
115
|
attrs["caption"] = "TODO"
|
160
116
|
create_block parent, :admonition, reader.lines, attrs,
|
161
|
-
|
117
|
+
content_model: :compound
|
162
118
|
end
|
163
119
|
end
|
164
120
|
|
@@ -171,7 +127,7 @@ module Asciidoctor
|
|
171
127
|
para.set_attr("caption", "TODO")
|
172
128
|
para.lines[0].sub!(/^TODO: /, "")
|
173
129
|
todo = Block.new parent, :admonition, attributes: para.attributes,
|
174
|
-
|
130
|
+
source: para.lines, content_model: :compound
|
175
131
|
parent.blocks[parent.blocks.index(para)] = todo
|
176
132
|
end
|
177
133
|
end
|
@@ -197,8 +153,8 @@ module Asciidoctor
|
|
197
153
|
/^(?<lang>[^-]*)(-(?<script>.*))?$/ =~ target
|
198
154
|
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
199
155
|
script ?
|
200
|
-
|
201
|
-
|
156
|
+
%{<variant lang=#{lang} script=#{script}>#{out}</variant>} :
|
157
|
+
%{<variant lang=#{lang}>#{out}</variant>}
|
202
158
|
end
|
203
159
|
end
|
204
160
|
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Asciidoctor
|
2
|
+
module Standoc
|
3
|
+
class AltTermInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
4
|
+
use_dsl
|
5
|
+
named :alt
|
6
|
+
parse_content_as :text
|
7
|
+
using_format :short
|
8
|
+
|
9
|
+
def process(parent, _target, attrs)
|
10
|
+
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
11
|
+
%{<admitted>#{out}</admitted>}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class DeprecatedTermInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
16
|
+
use_dsl
|
17
|
+
named :deprecated
|
18
|
+
parse_content_as :text
|
19
|
+
using_format :short
|
20
|
+
|
21
|
+
def process(parent, _target, attrs)
|
22
|
+
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
23
|
+
%{<deprecates>#{out}</deprecates>}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class DomainTermInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
28
|
+
use_dsl
|
29
|
+
named :domain
|
30
|
+
parse_content_as :text
|
31
|
+
using_format :short
|
32
|
+
|
33
|
+
def process(parent, _target, attrs)
|
34
|
+
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
35
|
+
%{<domain>#{out}</domain>}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Macro to transform `term[X,Y]` into em, termxref xml
|
40
|
+
class TermRefInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
41
|
+
use_dsl
|
42
|
+
named :term
|
43
|
+
name_positional_attributes 'name', 'termxref'
|
44
|
+
using_format :short
|
45
|
+
|
46
|
+
def process(_parent, _target, attrs)
|
47
|
+
termref = attrs['termxref'] || attrs['name']
|
48
|
+
"<em>#{attrs['name']}</em> (<termxref>#{termref}</termxref>)"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class ConceptInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
53
|
+
use_dsl
|
54
|
+
named :concept
|
55
|
+
name_positional_attributes "id", "word", "term"
|
56
|
+
# match %r{concept:(?<target>[^\[]*)\[(?<content>|.*?[^\\])\]$}
|
57
|
+
match /\{\{(?<content>|.*?[^\\])\}\}/
|
58
|
+
using_format :short
|
59
|
+
|
60
|
+
# deal with locality attrs and their disruption of positional attrs
|
61
|
+
def preprocess_attrs(attrs)
|
62
|
+
attrs.delete("term") if attrs["term"] && !attrs["word"]
|
63
|
+
attrs.delete(3) if attrs[3] == attrs["term"]
|
64
|
+
a = attrs.keys.reject { |k| k.is_a?(String) || [1, 2].include?(k) }
|
65
|
+
attrs["word"] ||= attrs[a[0]] if !a.empty?
|
66
|
+
attrs["term"] ||= attrs[a[1]] if a.length > 1
|
67
|
+
attrs
|
68
|
+
end
|
69
|
+
|
70
|
+
def process(parent, _target, attr)
|
71
|
+
attr = preprocess_attrs(attr)
|
72
|
+
localities = attr.keys.reject { |k| %w(id word term).include? k }.
|
73
|
+
reject { |k| k.is_a? Numeric }.
|
74
|
+
map { |k| "#{k}=#{attr[k]}" }.join(",")
|
75
|
+
text = [localities, attr["word"]].reject{ |k| k.nil? || k.empty? }.
|
76
|
+
join(",")
|
77
|
+
out = Asciidoctor::Inline.new(parent, :quoted, text).convert
|
78
|
+
%{<concept key="#{attr['id']}" term="#{attr['term']}">#{out}</concept>}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|