Class: IsoDoc::JIS::PresentationXMLConvert
- Inherits:
-
Iso::PresentationXMLConvert
- Object
- Iso::PresentationXMLConvert
- IsoDoc::JIS::PresentationXMLConvert
show all
- Includes:
- Init
- Defined in:
- lib/isodoc/jis/presentation_section.rb,
lib/isodoc/jis/presentation_xml_convert.rb
Constant Summary
collapse
- JPAN =
"\\p{Hiragana}\\p{Katakana}\\p{Han}".freeze
- JPAN_BOLD =
"<span style='font-family:\"MS Gothic\"'>".freeze
Instance Method Summary
collapse
-
#admits(elem) ⇒ Object
-
#annex(docxml) ⇒ Object
-
#annex1(elem) ⇒ Object
-
#bibdata_i18n(bibdata) ⇒ Object
-
#block(docxml) ⇒ Object
-
#commentary(elem) ⇒ Object
-
#commentary_title_hdr(elem) ⇒ Object
-
#date_translate(bibdata) ⇒ Object
-
#dl(docxml) ⇒ Object
-
#dl_id_insert(node, ret) ⇒ Object
-
#dl_to_para(node) ⇒ Object
-
#dl_to_para_name(node) ⇒ Object
-
#dl_to_para_terms(node) ⇒ Object
-
#dt_dd?(node) ⇒ Boolean
-
#full_row(cols, elem) ⇒ Object
-
#inline(docxml) ⇒ Object
-
#middle_subtitle_main(out, style) ⇒ Object
-
#middle_title(docxml) ⇒ Object
-
#middle_title_hdr(out) ⇒ Object
-
#middle_title_main(out, style) ⇒ Object
-
#middle_title_para(style, intro, main, part) ⇒ Object
-
#move_commentaries_to_end(docxml) ⇒ Object
-
#move_introduction(doc) ⇒ Object
-
#ol_depth(node) ⇒ Object
-
#preface_rearrange(doc) ⇒ Object
-
#strip_para(node) ⇒ Object
-
#strong(docxml) ⇒ Object
-
#strong1(text) ⇒ Object
-
#table1(node) ⇒ Object
-
#table_cols_count(node) ⇒ Object
-
#table_thead_pt(node, name) ⇒ Object
-
#table_unit_note(node, thead, cols) ⇒ Object
-
#tablesource(elem) ⇒ Object
-
#toc_title_insert_pt(docxml) ⇒ Object
Methods included from Init
#i18n_init, #metadata_init, #omit_docid_prefix, #std_docid_semantic, #xref_init
Instance Method Details
#admits(elem) ⇒ Object
43
44
45
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 43
def admits(elem)
elem.children.first.previous = @i18n.l10n("#{@i18n.admitted}: ")
end
|
#annex(docxml) ⇒ Object
16
17
18
19
|
# File 'lib/isodoc/jis/presentation_section.rb', line 16
def annex(docxml)
super
(docxml)
end
|
#annex1(elem) ⇒ Object
7
8
9
10
11
12
13
14
|
# File 'lib/isodoc/jis/presentation_section.rb', line 7
def annex1(elem)
elem["commentary"] == "true" and return (elem)
lbl = @xrefs.anchor(elem["id"], :label)
if t = elem.at(ns("./title"))
t.children = "<strong>#{to_xml(t.children)}</strong>"
end
prefix_name(elem, "<br/>", lbl, "title")
end
|
#bibdata_i18n(bibdata) ⇒ Object
137
138
139
140
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 137
def bibdata_i18n(bibdata)
super
@lang == "ja" and date_translate(bibdata)
end
|
#block(docxml) ⇒ Object
47
48
49
50
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 47
def block(docxml)
super
dl docxml
end
|
30
31
32
33
34
|
# File 'lib/isodoc/jis/presentation_section.rb', line 30
def (elem)
t = elem.elements.first
(t)
middle_title_main(t, "CommentaryStandardName")
end
|
36
37
38
39
40
41
42
43
|
# File 'lib/isodoc/jis/presentation_section.rb', line 36
def (elem)
ret = <<~COMMENTARY
<p class="CommentaryStandardNumber">JIS #{@meta.get[:docnumber_undated]}
COMMENTARY
yr = @meta.get[:docyear] and
ret += ": <span class='CommentaryEffectiveYear'>#{yr}</span>"
elem.previous = ret
end
|
#date_translate(bibdata) ⇒ Object
142
143
144
145
146
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 142
def date_translate(bibdata)
bibdata.xpath(ns("./date")).each do |d|
d.children = @i18n.japanese_date(d.text.strip)
end
end
|
#dl(docxml) ⇒ Object
52
53
54
55
56
57
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 52
def dl(docxml)
docxml.xpath(ns("//table//dl | //figure//dl")).each do |l|
l.at(ns("./dl")) || l.at("./ancestor::xmlns:dl") and next
dl_to_para(l)
end
end
|
#dl_id_insert(node, ret) ⇒ Object
72
73
74
75
76
77
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 72
def dl_id_insert(node, ret)
a = node.replace(ret)
p = a.at("./descendant-or-self::xmlns:p")
node["id"] and p << "<bookmark id='#{node['id']}'/>"
a.xpath("./descendant-or-self::*[@id = '']").each { |x| x.delete("id") }
end
|
#dl_to_para(node) ⇒ Object
63
64
65
66
67
68
69
70
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 63
def dl_to_para(node)
ret = dl_to_para_name(node)
ret += dl_to_para_terms(node)
node.elements.reject { |n| %w(dt dd name).include?(n.name) }.each do |x|
ret += x.to_xml
end
dl_id_insert(node, ret)
end
|
#dl_to_para_name(node) ⇒ Object
79
80
81
82
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 79
def dl_to_para_name(node)
e = node.at(ns("./name"))
"<p class='ListTitle'>#{e&.children&.to_xml || @i18n.key}</p>"
end
|
#dl_to_para_terms(node) ⇒ Object
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 84
def dl_to_para_terms(node)
ret = ""
node.elements.select { |n| dt_dd?(n) }.each_slice(2) do |dt, dd|
term = strip_para(dt)
defn = strip_para(dd)
bkmk = dd["id"] ? "<bookmark id='#{dd['id']}'/>" : ""
ret += "<p class='dl' id='#{dt['id']}'>#{term}: #{bkmk}#{defn}</p>"
end
ret
end
|
#dt_dd?(node) ⇒ Boolean
59
60
61
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 59
def dt_dd?(node)
%w{dt dd}.include? node.name
end
|
#full_row(cols, elem) ⇒ Object
126
127
128
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 126
def full_row(cols, elem)
"<tr><td border='0' colspan='#{cols}'>#{elem}</td></tr>"
end
|
#inline(docxml) ⇒ Object
8
9
10
11
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 8
def inline(docxml)
super
strong(docxml)
end
|
#middle_subtitle_main(out, style) ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/isodoc/jis/presentation_section.rb', line 101
def middle_subtitle_main(out, style)
t = @meta.get[:docsubtitlemain]
(t && !t.empty?) or return
ret = middle_title_para(style, :docsubtitleintro, :docsubtitlemain,
:docsubtitlepart)
if a = @meta.get[:docsubtitlepart]
ret += "<p class='zzSTDTitle2'>"
b = @meta.get[:docsubtitlepartlabel] and ret += "#{b}: "
ret += "<br/><strong>#{a}</strong></p>"
end
out.previous = ret
end
|
#middle_title(docxml) ⇒ Object
66
67
68
69
70
71
72
73
|
# File 'lib/isodoc/jis/presentation_section.rb', line 66
def middle_title(docxml)
s = docxml.at(ns("//sections")) or return
elem = s.children.first
middle_title_hdr(elem)
middle_title_main(elem, "zzSTDTitle1")
middle_subtitle_main(elem, "zzSTDTitle2")
end
|
#middle_title_hdr(out) ⇒ Object
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/isodoc/jis/presentation_section.rb', line 75
def middle_title_hdr(out)
ret = "<p class='JapaneseIndustrialStandard'>#{@i18n.jis}"
@meta.get[:unpublished] and ret += @i18n.l10n("(#{@i18n.draft_label})")
ret += ("<tab/>" * 7)
ret += "<span class='JIS'>JIS</span></p>"
ret += "<p class='StandardNumber'><tab/>#{@meta.get[:docnumber_undated]}"
if yr = @meta.get[:docyear]
ret += ": <span class='EffectiveYear'>#{yr}</span>"
end
ret += "</p><p class='IDT'/>"
out.previous = ret
end
|
#middle_title_main(out, style) ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/isodoc/jis/presentation_section.rb', line 88
def middle_title_main(out, style)
t = @meta.get[:doctitlemain]
(t && !t.empty?) or return
ret =
middle_title_para(style, :doctitleintro, :doctitlemain, :doctitlepart)
if a = @meta.get[:doctitlepart]
ret += "<p class='zzSTDTitle1'>"
b = @meta.get[:doctitlepartlabel] and ret += "#{b}: "
ret += "<br/><strong>#{a}</strong></p>"
end
out.previous = ret
end
|
#middle_title_para(style, intro, main, part) ⇒ Object
114
115
116
117
118
119
120
121
|
# File 'lib/isodoc/jis/presentation_section.rb', line 114
def middle_title_para(style, intro, main, part)
ret = "<p class='#{style}'>#{@meta.get[intro]}"
ret += " — " if @meta.get[intro] && @meta.get[main]
ret += @meta.get[main]
ret += " — " if @meta.get[main] && @meta.get[part]
ret += "</p>"
ret
end
|
21
22
23
24
25
26
27
28
|
# File 'lib/isodoc/jis/presentation_section.rb', line 21
def (docxml)
docxml.at(ns("//annex[@commentary = 'true']")) or return
b = docxml.at(ns("//bibliography")) ||
docxml.at(ns("//annex[last()]")).after(" ").next
docxml.xpath(ns("//annex[@commentary = 'true']")).reverse.each do |x|
b.next = x.remove
end
end
|
#move_introduction(doc) ⇒ Object
58
59
60
61
62
63
64
|
# File 'lib/isodoc/jis/presentation_section.rb', line 58
def move_introduction(doc)
source = doc.at(ns("//preface/introduction")) or return
dest = doc.at(ns("//sections")) ||
doc.at(ns("//preface")).after("<sections> </sections>").next_element
dest.children.empty? and dest.children = " "
dest.children.first.next = source
end
|
#ol_depth(node) ⇒ Object
37
38
39
40
41
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 37
def ol_depth(node)
depth = node.ancestors("ol").size + 1
depth == 1 and return :alphabetic
:arabic
end
|
#preface_rearrange(doc) ⇒ Object
53
54
55
56
|
# File 'lib/isodoc/jis/presentation_section.rb', line 53
def preface_rearrange(doc)
move_introduction(doc)
super
end
|
#strip_para(node) ⇒ Object
95
96
97
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 95
def strip_para(node)
node.children.to_xml.gsub(%r{</?p( [^>]*)?>}, "")
end
|
#strong(docxml) ⇒ Object
16
17
18
19
20
21
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 16
def strong(docxml)
docxml.xpath(ns("//strong")).each do |x|
(x.children.size == 1 && x.children.first.text?) or next x.replace(strong1(x.text))
end
end
|
#strong1(text) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 23
def strong1(text)
jpan = /^[#{JPAN}]/o.match?(text[0])
ret = jpan ? JPAN_BOLD : "<strong>"
text.chars.each do |n|
new = /^[#{JPAN}]/o.match?(n)
jpan && !new and ret += "</span><strong>"
!jpan && new and ret += "</strong>#{JPAN_BOLD}"
ret += n
jpan = new
end
ret += /[#{JPAN}]/o.match?(text[-1]) ? "</span>" : "</strong>"
ret
end
|
#table1(node) ⇒ Object
99
100
101
102
103
104
105
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 99
def table1(node)
super
cols = table_cols_count(node)
name = node.at(ns("./name"))
thead = table_thead_pt(node, name)
table_unit_note(node, thead, cols)
end
|
#table_cols_count(node) ⇒ Object
113
114
115
116
117
118
119
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 113
def table_cols_count(node)
cols = 0
node.at(ns(".//tr")).xpath(ns("./td | ./th")).each do |x|
cols += x["colspan"]&.to_i || 1
end
cols
end
|
#table_thead_pt(node, name) ⇒ Object
107
108
109
110
111
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 107
def table_thead_pt(node, name)
node.at(ns("./thead")) ||
name&.after("<thead> </thead>")&.next ||
node.elements.first.before("<thead> </thead>").previous
end
|
#table_unit_note(node, thead, cols) ⇒ Object
121
122
123
124
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 121
def table_unit_note(node, thead, cols)
unit_note = node.at(ns(".//note[@type = 'units']")) or return
thead.children.first.previous = full_row(cols, unit_note.remove.to_xml)
end
|
#tablesource(elem) ⇒ Object
130
131
132
133
134
135
|
# File 'lib/isodoc/jis/presentation_xml_convert.rb', line 130
def tablesource(elem)
while elem&.next_element&.name == "source"
elem << "; #{to_xml(elem.next_element.remove.children)}"
end
elem.children = l10n("#{@i18n.source}: #{to_xml(elem.children).strip}")
end
|
#toc_title_insert_pt(docxml) ⇒ Object
45
46
47
48
49
50
51
|
# File 'lib/isodoc/jis/presentation_section.rb', line 45
def toc_title_insert_pt(docxml)
ins = docxml.at(ns("//preface")) ||
docxml.at(ns("//sections | //annex | //bibliography"))
&.before("<preface> </preface>")
&.previous_element or return nil
ins.children.last.after(" ").next
end
|