metanorma-jis 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7202e095e949d4def144db9e549bfaa78fc453096fb6607d83024924da0bd0b8
4
- data.tar.gz: 765d9791c6428d6e8f55db74d14c6fbea884502ae78b8590c0435d4370f91ea9
3
+ metadata.gz: 6bf51e10fbc568a6c14c9e8b4192e16f90b5dd093aff54cdc0fbdb9ef11566bb
4
+ data.tar.gz: 060bddc60dd35141b7143e36a1cd66bc4ef89b9db9fc0b5d385ea9171d3baa8b
5
5
  SHA512:
6
- metadata.gz: 331443ed139aa8c3c6024781d1723d2965ef45a4714eba88294898bbffa2bab14ab6af52963da9e6b98f07389b582362a3fe637bec13da2c95bb9de30c3109bb
7
- data.tar.gz: 71d1aeacef86ad9a9113f28327ac88a4acb56f1ffdad9a2c98a7a9233e235b50446f1fb314bbd05665644dc12beb418e4bbbe43f89d6d6d9708d95ade43a1f03
6
+ metadata.gz: fa5e35fcdff0101c14bd5f3d713560aa8e5236e055288e328b4024268bc9e62b1fbd399d75a388b337a7779be50939fc96438cedf691106f6ef77aca56921dd6
7
+ data.tar.gz: 55665ed144401a91526a924d27a8b2134b818581627663e371fec91fe1ccf60afb384838364dfd3986798f093e03818cd9e0e9983f6371227d9b427f9b1aab5d
@@ -9,7 +9,7 @@ class Html2Doc
9
9
  end
10
10
 
11
11
  def style_list(elem, level, liststyle, listnumber)
12
- return unless liststyle
12
+ liststyle or return
13
13
  elem["level"] = level
14
14
  super
15
15
  end
@@ -32,14 +32,6 @@ class Html2Doc
32
32
  end
33
33
  item.at("./p") or return
34
34
  item.replace(item.children)
35
- =begin
36
- prev = p1.xpath("./preceding-sibling::* | ./preceding-sibling::text()")
37
- if prev[-1].name == "span" && prev[-1]["style"] == "mso-tab-count:1" &&
38
- prev.size == 2
39
- p1.children.first.previous = prev[1]
40
- p1.children.first.previous = prev[0]
41
- end
42
- =end
43
35
  end
44
36
 
45
37
  def list2para_unnest_para(para, first_p, last_p)
@@ -74,29 +66,29 @@ class Html2Doc
74
66
  case listtype
75
67
  when "ol"
76
68
  ret = case depth
77
- when "1" then "margin-left: 36.0pt;"
78
- when "2" then "margin-left: 54.0pt;"
79
- when "3" then "margin-left: 72.0pt;"
80
- when "4" then "margin-left: 90.0pt;"
81
- when "5" then "margin-left: 108.0pt;"
82
- when "6" then "margin-left: 126.0pt;"
83
- when "7" then "margin-left: 144.0pt;"
84
- when "8" then "margin-left: 162.0pt;"
85
- else "margin-left: 180.0pt;"
86
- end
69
+ when "1" then "margin-left: 36.0pt;"
70
+ when "2" then "margin-left: 54.0pt;"
71
+ when "3" then "margin-left: 72.0pt;"
72
+ when "4" then "margin-left: 90.0pt;"
73
+ when "5" then "margin-left: 108.0pt;"
74
+ when "6" then "margin-left: 126.0pt;"
75
+ when "7" then "margin-left: 144.0pt;"
76
+ when "8" then "margin-left: 162.0pt;"
77
+ else "margin-left: 180.0pt;"
78
+ end
87
79
  "#{ret}text-indent:-18.0pt;"
88
80
  when "ul"
89
81
  ret = case depth
90
- when "1" then "margin-left: 36.0pt;"
91
- when "2" then "margin-left: 45.95pt;"
92
- when "3" then "margin-left: 72.0pt;"
93
- when "4" then "margin-left: 90.0pt;"
94
- when "5" then "margin-left: 108.0pt;"
95
- when "6" then "margin-left: 126.0pt;"
96
- when "7" then "margin-left: 144.0pt;"
97
- when "8" then "margin-left: 162.0pt;"
98
- else "margin-left: 180.0pt;"
99
- end
82
+ when "1" then "margin-left: 36.0pt;"
83
+ when "2" then "margin-left: 45.95pt;"
84
+ when "3" then "margin-left: 72.0pt;"
85
+ when "4" then "margin-left: 90.0pt;"
86
+ when "5" then "margin-left: 108.0pt;"
87
+ when "6" then "margin-left: 126.0pt;"
88
+ when "7" then "margin-left: 144.0pt;"
89
+ when "8" then "margin-left: 162.0pt;"
90
+ else "margin-left: 180.0pt;"
91
+ end
100
92
  "#{ret}text-indent:-18.0pt;"
101
93
 
102
94
  end
@@ -112,11 +104,10 @@ class Html2Doc
112
104
  u.replace(u.children)
113
105
  end
114
106
  unnest_list_paras(docxml)
115
- indent_lists(docxml)
116
107
  end
117
108
 
118
109
  def unnest_list_paras(docxml)
119
- docxml.xpath("//p[@class = 'ListContinue1' or @class = 'ListNumber1']" \
110
+ docxml.xpath("//p[@class = 'MsoList' or @class = 'MsoListBullet']" \
120
111
  "[.//p]").each do |p|
121
112
  p.at("./p") and
122
113
  list2para_unnest_para(p, p.at("./p"),
@@ -128,24 +119,6 @@ class Html2Doc
128
119
  end
129
120
  end
130
121
 
131
- def indent_lists(docxml)
132
- docxml.xpath("//div[@class = 'Note' or @class = 'Example' or " \
133
- "@class = 'Quote']").each do |d|
134
- d.xpath(".//p").each do |p|
135
- indent_lists1(p)
136
- end
137
- end
138
- end
139
-
140
- def indent_lists1(para)
141
- m = /^(ListContinue|ListNumber|MsoListContinue|MsoListNumber)(\d)$/
142
- .match(para["class"]) or return
143
- base = m[1].sub(/^Mso/, "")
144
- level = m[2].to_i + 1
145
- level = 5 if level > 5
146
- para["class"] = "#{base}#{level}-"
147
- end
148
-
149
122
  def list_add(xpath, liststyles, listtype, level)
150
123
  xpath.each do |l|
151
124
  level == 1 and l["seen"] = true and @listnumber += 1
@@ -172,23 +145,6 @@ class Html2Doc
172
145
  end
173
146
  end
174
147
 
175
- def listlabel(listtype, idx, level)
176
- case listtype
177
- when :ul then "—"
178
- when :ol then "#{listidx(idx, level)})"
179
- end
180
- end
181
-
182
- def listidx(idx, level)
183
- case level
184
- when "a" then (96 + idx).chr.to_s
185
- when "1" then idx.to_s
186
- when "i" then RomanNumerals.to_roman(idx).downcase
187
- when "A" then (64 + idx).chr.to_s
188
- when "I" then RomanNumerals.to_roman(idx).upcase
189
- end
190
- end
191
-
192
148
  def cleanup(docxml)
193
149
  super
194
150
  docxml.xpath("//div[@class = 'Quote' or @class = 'Example' or " \
@@ -5,13 +5,32 @@ module IsoDoc
5
5
  module JIS
6
6
  module BaseConvert
7
7
  def middle_title(_isoxml, out)
8
- middle_title_main(out)
8
+ middle_title_hdr(out)
9
+ middle_title_main(out, "zzSTDTitle1")
9
10
  middle_subtitle_main(out)
10
11
  # middle_title_amd(out)
11
12
  end
12
13
 
13
- def middle_title_main(out)
14
- out.p(class: "zzSTDTitle1") do |p|
14
+ def middle_title_hdr(out)
15
+ out.p(class: "JapaneseIndustrialStandard") do |p|
16
+ p << @i18n.jis
17
+ @meta.get[:unpublished] and p << @i18n.l10n("(#{@i18n.draft_label})")
18
+ insert_tab(p, 7)
19
+ p << "<span class='JIS'>JIS</span>"
20
+ end
21
+ out.p(class: "StandardNumber") do |p|
22
+ insert_tab(p, 1)
23
+ p << @meta.get[:docnumber_undated]
24
+ if yr = @meta.get[:docyear]
25
+ p << ": "
26
+ p << "<span class='EffectiveYear'>#{yr}</span>"
27
+ end
28
+ end
29
+ out.p(class: "IDT")
30
+ end
31
+
32
+ def middle_title_main(out, style)
33
+ out.p(class: style) do |p|
15
34
  p << @meta.get[:doctitleintro]
16
35
  p << " &#x2014; " if @meta.get[:doctitleintro] && @meta.get[:doctitlemain]
17
36
  p << @meta.get[:doctitlemain]
@@ -37,8 +56,23 @@ module IsoDoc
37
56
  end
38
57
  end
39
58
 
59
+ def commentary_title(_isoxml, out)
60
+ commentary_title_hdr(out)
61
+ middle_title_main(out, "CommentaryStandardName")
62
+ end
63
+
64
+ def commentary_title_hdr(out)
65
+ out.p(class: "CommentaryStandardNumber") do |p|
66
+ p << "JIS #{@meta.get[:docnumber_undated]}"
67
+ if yr = @meta.get[:docyear]
68
+ p << ": "
69
+ p << "<span class='CommentaryEffectiveYear'>#{yr}</span>"
70
+ end
71
+ end
72
+ end
73
+
40
74
  def termnote_parse(node, out)
41
- name = node&.at(ns("./name"))&.remove
75
+ name = node.at(ns("./name"))&.remove
42
76
  out.div **note_attrs(node) do |div|
43
77
  div.p do |p|
44
78
  if name
@@ -59,13 +93,6 @@ module IsoDoc
59
93
  end
60
94
  end
61
95
 
62
- def admitted_term_parse(node, out)
63
- out.p class: "Terms", style: "text-align:left;" do |p|
64
- p << l10n("#{@i18n.alternative}: ")
65
- node.children.each { |c| parse(c, p) }
66
- end
67
- end
68
-
69
96
  def para_class(node)
70
97
  super || node["class"]
71
98
  end
@@ -74,6 +101,46 @@ module IsoDoc
74
101
  cell["border"] == "0" and bordered = false
75
102
  super
76
103
  end
104
+
105
+ def middle(isoxml, out)
106
+ middle_title(isoxml, out)
107
+ middle_admonitions(isoxml, out)
108
+ scope isoxml, out, 0
109
+ norm_ref isoxml, out, 0
110
+ clause_etc isoxml, out, 0
111
+ annex isoxml, out
112
+ bibliography isoxml, out
113
+ commentary isoxml, out
114
+ indexsect isoxml, out
115
+ end
116
+
117
+ def annex(isoxml, out)
118
+ amd(isoxml) and @suppressheadingnumbers = @oldsuppressheadingnumbers
119
+ isoxml.xpath(ns("//annex[not(@commentary = 'true')]")).each do |c|
120
+ page_break(out)
121
+ out.div **attr_code(annex_attrs(c)) do |s|
122
+ c.elements.each do |c1|
123
+ if c1.name == "title" then annex_name(c, c1, s)
124
+ else parse(c1, s)
125
+ end
126
+ end
127
+ end
128
+ end
129
+ amd(isoxml) and @suppressheadingnumbers = true
130
+ end
131
+
132
+ def commentary(isoxml, out)
133
+ isoxml.xpath(ns("//annex[@commentary = 'true']")).each do |c|
134
+ page_break(out)
135
+ out.div **attr_code(annex_attrs(c)) do |s|
136
+ c.elements.each do |c1|
137
+ if c1.name == "title" then annex_name(c, c1, s)
138
+ else parse(c1, s)
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
77
144
  end
78
145
  end
79
146
  end
@@ -0,0 +1,99 @@
1
+ module IsoDoc
2
+ module JIS
3
+ class WordConvert < IsoDoc::Iso::WordConvert
4
+ def figure_attrs(node)
5
+ attr_code(id: node["id"], class: "MsoTableGrid",
6
+ style: "border-collapse:collapse;" \
7
+ "border:none;mso-padding-alt: " \
8
+ "0cm 5.4pt 0cm 5.4pt;mso-border-insideh:none;" \
9
+ "mso-border-insidev:none;#{keep_style(node)}",
10
+ border: 0, cellspacing: 0, cellpadding: 0)
11
+ end
12
+
13
+ def figure_components(node)
14
+ { units: node.at(ns("./note[@type = 'units']")),
15
+ notes_etc: figure_notes_examples_paras(node
16
+ .xpath(ns("./note[not(@type = 'units')] | ./example | ./p"))),
17
+ name: node.at(ns("./name")),
18
+ key: node.xpath(ns("./p[@class = 'ListTitle' or @class = 'dl']")),
19
+ img: node.at(ns("./image")),
20
+ aside: node.at(ns("./aside")),
21
+ source: node.at(ns("./source")),
22
+ subfigs: node.xpath(ns("./figure")).map { |n| figure_components(n) } }
23
+ end
24
+
25
+ def figure_notes_examples_paras(xpath)
26
+ xpath.empty? and return nil
27
+ curr = ""
28
+ xpath.each_with_object([]) do |e, m|
29
+ e.name == curr or m << []
30
+ curr = e.name
31
+ m[-1] << e
32
+ end
33
+ end
34
+
35
+ def figure_parse1(node, out)
36
+ c = figure_components(node)
37
+ out.table **figure_attrs(node) do |div|
38
+ %i(units img subfigs key notes_etc aside source name).each do |key|
39
+ case key
40
+ when :subfigs then figure_subfigs(node, div, c[key])
41
+ when :notes_etc, :key
42
+ c[key]&.each { |n| figure_row(node, div, n, key) }
43
+ else figure_row(node, div, c, key) end
44
+ end
45
+ end
46
+ end
47
+
48
+ def figure_subfigs(node, div, elem)
49
+ elem.each do |n|
50
+ n[:subname] = n[:name]
51
+ figure_row(node, div, n, :img)
52
+ figure_row(node, div, n, :subname)
53
+ end
54
+ end
55
+
56
+ def figure_name_parse(_node, div, name)
57
+ name.nil? and return
58
+ div.p class: "Tabletitle", style: "text-align:center;" do |p|
59
+ name.children.each { |n| parse(n, p) }
60
+ end
61
+ end
62
+
63
+ def figure_row(node, table, hash, key)
64
+ key != :notes_etc && (
65
+ hash[key].nil? || (hash[key].is_a?(Array) && hash[key].empty?)) and
66
+ return
67
+ table.tr do |r|
68
+ r.td valign: "top", style: "padding:0cm 5.4pt 0cm 5.4pt" do |d|
69
+ figure_row1(node, d, hash, key)
70
+ end
71
+ end
72
+ end
73
+
74
+ def figure_row1(node, cell, hash, key)
75
+ case key
76
+ when :units then units_render(hash[key], cell)
77
+ when :notes_etc, :aside, :key then hash.each { |n| parse(n, cell) }
78
+ when :source then parse(hash[key], cell)
79
+ when :name then figure_name_parse(node, cell, hash[key])
80
+ when :img
81
+ cell.p class: "Figure" do |p|
82
+ parse(hash[key], p)
83
+ end
84
+ when :subname
85
+ cell.p class: "SubfigureCaption" do |p|
86
+ hash[key].children.each { |n| parse(n, p) }
87
+ end
88
+ end
89
+ end
90
+
91
+ def units_render(note, cell)
92
+ para = note.at(ns("./p")) and note = para
93
+ cell.p class: "UnitStatement" do |p|
94
+ note.children.each { |n| parse(n, p) }
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end