metanorma-jis 0.3.6 → 0.4.0
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/isodoc/jis/base_convert.rb +5 -11
- data/lib/isodoc/jis/html_convert.rb +3 -1
- data/lib/isodoc/jis/i18n-ja.yaml +1 -0
- data/lib/isodoc/jis/init.rb +2 -9
- data/lib/isodoc/jis/jis.international-standard.xsl +1439 -209
- data/lib/isodoc/jis/metadata.rb +1 -1
- data/lib/isodoc/jis/presentation_section.rb +2 -2
- data/lib/isodoc/jis/presentation_xml_convert.rb +54 -6
- data/lib/isodoc/jis/table.rb +1 -1
- data/lib/isodoc/jis/xref.rb +54 -16
- data/lib/metanorma/jis/biblio.rng +13 -1
- data/lib/metanorma/jis/isodoc.rng +6 -6
- data/lib/metanorma/jis/processor.rb +8 -0
- data/lib/metanorma/jis/version.rb +1 -1
- data/lib/relaton/render-jis/parse.rb +7 -3
- data/metanorma-jis.gemspec +1 -1
- metadata +4 -4
data/lib/isodoc/jis/metadata.rb
CHANGED
@@ -54,7 +54,7 @@ module IsoDoc
|
|
54
54
|
isoxml.xpath(ns("//bibdata/date")).each do |d|
|
55
55
|
val = Common::date_range(d)
|
56
56
|
@lang == "ja" and val = @i18n.japanese_date(val)
|
57
|
-
set("#{d['type'].
|
57
|
+
set("#{d['type'].tr('-', '_')}date".to_sym, val)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -65,7 +65,7 @@ module IsoDoc
|
|
65
65
|
dest = doc.at(ns("//sections")) ||
|
66
66
|
doc.at(ns("//preface")).after("<sections> </sections>").next_element
|
67
67
|
dest.children.empty? and dest.children = " "
|
68
|
-
dest.
|
68
|
+
dest.add_first_child source
|
69
69
|
end
|
70
70
|
|
71
71
|
def move_participants(doc)
|
@@ -73,7 +73,7 @@ module IsoDoc
|
|
73
73
|
t = participant_table(p) or return
|
74
74
|
p.remove
|
75
75
|
ins = make_preface(doc) or return nil
|
76
|
-
ins.
|
76
|
+
ins.add_first_child t
|
77
77
|
end
|
78
78
|
|
79
79
|
def participant_table(clause)
|
@@ -45,12 +45,8 @@ module IsoDoc
|
|
45
45
|
elem.children.first.previous = @i18n.l10n("#{@i18n.admitted}: ")
|
46
46
|
end
|
47
47
|
|
48
|
-
def block(docxml)
|
49
|
-
super
|
50
|
-
dl docxml
|
51
|
-
end
|
52
|
-
|
53
48
|
def dl(docxml)
|
49
|
+
super
|
54
50
|
docxml.xpath(ns("//table//dl | //figure//dl")).each do |l|
|
55
51
|
l.at(ns("./dl")) || l.at("./ancestor::xmlns:dl") and next
|
56
52
|
dl_to_para(l)
|
@@ -135,6 +131,10 @@ module IsoDoc
|
|
135
131
|
elem.children = l10n("#{@i18n.source}: #{to_xml(elem.children).strip}")
|
136
132
|
end
|
137
133
|
|
134
|
+
def table_fn1(_table, fnote, _idx)
|
135
|
+
fnote["reference"] += ")"
|
136
|
+
end
|
137
|
+
|
138
138
|
def bibdata_i18n(bibdata)
|
139
139
|
super
|
140
140
|
@lang == "ja" and date_translate(bibdata)
|
@@ -142,10 +142,58 @@ module IsoDoc
|
|
142
142
|
|
143
143
|
def date_translate(bibdata)
|
144
144
|
bibdata.xpath(ns("./date")).each do |d|
|
145
|
-
|
145
|
+
j = @i18n.japanese_date(d.text.strip)
|
146
|
+
@autonumbering_style == :japanese and
|
147
|
+
j.gsub!(/(\d+)/) do
|
148
|
+
$1.to_i.localize(:ja).spellout
|
149
|
+
end
|
150
|
+
d.children = j
|
146
151
|
end
|
147
152
|
end
|
148
153
|
|
154
|
+
def edition_translate(bibdata)
|
155
|
+
x = bibdata.at(ns("./edition")) or return
|
156
|
+
/^\d+$/.match?(x.text) or return
|
157
|
+
@i18n.edition_ordinal or return
|
158
|
+
num = x.text.to_i
|
159
|
+
@autonumbering_style == :japanese and num = num.localize(:ja).spellout
|
160
|
+
x.next =
|
161
|
+
%(<edition language="#{@lang}" numberonly="true">#{num}</edition>)
|
162
|
+
tag_translate(x, @lang, @i18n
|
163
|
+
.populate("edition_ordinal", { "var1" => num }))
|
164
|
+
end
|
165
|
+
|
166
|
+
def convert1(xml, filename, dir)
|
167
|
+
j = xml.at(ns("//metanorma-extension/presentation-metadata/" \
|
168
|
+
"autonumbering-style"))&.text
|
169
|
+
j ||= "arabic"
|
170
|
+
@autonumbering_style = j.to_sym
|
171
|
+
@xrefs.autonumbering_style = j.to_sym
|
172
|
+
super
|
173
|
+
end
|
174
|
+
|
175
|
+
def localized_strings(docxml)
|
176
|
+
super
|
177
|
+
a = docxml.at(ns("//localized-strings")) or return
|
178
|
+
ret = (0..1000).map do |i|
|
179
|
+
n = i.localize(:ja).spellout
|
180
|
+
"<localized-string key='#{i}' language='ja'>#{n}</localized-string>"
|
181
|
+
end.join("\n")
|
182
|
+
a << ret
|
183
|
+
end
|
184
|
+
|
185
|
+
def figure_fn(elem)
|
186
|
+
(elem.xpath(ns(".//fn")) - elem.xpath(ns("./name//fn")))
|
187
|
+
.each do |f|
|
188
|
+
table_fn1(elem, f, nil)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def omit_docid_prefix(prefix)
|
193
|
+
prefix.nil? || prefix.empty? and return true
|
194
|
+
super || %w(JIS).include?(prefix)
|
195
|
+
end
|
196
|
+
|
149
197
|
include Init
|
150
198
|
end
|
151
199
|
end
|
data/lib/isodoc/jis/table.rb
CHANGED
@@ -29,7 +29,7 @@ module IsoDoc
|
|
29
29
|
def make_tr_attr_style(cell, row, rowmax, totalrows, opt)
|
30
30
|
top = row.zero? ? "#{SW1} 1.5pt;" : "none;"
|
31
31
|
bottom = "#{SW1} #{rowmax >= totalrows ? '1.5' : '1.0'}pt;"
|
32
|
-
ret = <<~STYLE.
|
32
|
+
ret = <<~STYLE.delete("\n")
|
33
33
|
border-top:#{top}mso-border-top-alt:#{top}
|
34
34
|
border-left:#{bottom}mso-border-top-alt:#{bottom}
|
35
35
|
border-right:#{bottom}mso-border-top-alt:#{bottom}
|
data/lib/isodoc/jis/xref.rb
CHANGED
@@ -5,18 +5,41 @@ module IsoDoc
|
|
5
5
|
return list["type"].to_sym if list["type"]
|
6
6
|
return :alphabet if depth == 1
|
7
7
|
|
8
|
-
:arabic
|
8
|
+
@style == :japanese ? :japanese : :arabic
|
9
9
|
end
|
10
10
|
|
11
11
|
def listlabel(_list, depth)
|
12
12
|
case depth
|
13
13
|
when 1 then (96 + @num).chr.to_s
|
14
|
-
else
|
14
|
+
else
|
15
|
+
if @style == :japanese
|
16
|
+
@num.localize(:ja).spellout
|
17
|
+
else
|
18
|
+
@num.to_s
|
19
|
+
end
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
18
23
|
|
19
24
|
class Xref < IsoDoc::Iso::Xref
|
25
|
+
attr_accessor :autonumbering_style
|
26
|
+
|
27
|
+
def clause_sep
|
28
|
+
@autonumbering_style == :japanese ? "\u30fb" : "."
|
29
|
+
end
|
30
|
+
|
31
|
+
def clause_counter(num, opts)
|
32
|
+
opts[:numerals] ||= @autonumbering_style
|
33
|
+
opts[:separator] ||= clause_sep
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
def list_counter(num, opts)
|
38
|
+
opts[:numerals] ||= @autonumbering_style
|
39
|
+
opts[:separator] ||= clause_sep
|
40
|
+
IsoDoc::Jis::Counter.new(num, opts)
|
41
|
+
end
|
42
|
+
|
20
43
|
def hierfigsep
|
21
44
|
@lang == "ja" ? "の" : super
|
22
45
|
end
|
@@ -28,12 +51,12 @@ module IsoDoc
|
|
28
51
|
end
|
29
52
|
|
30
53
|
def annex_name_lbl(clause, num)
|
31
|
-
obl =
|
54
|
+
obl = "(#{@labels['inform_annex']})"
|
32
55
|
clause["obligation"] == "normative" and
|
33
|
-
obl =
|
56
|
+
obl = "(#{@labels['norm_annex']})"
|
34
57
|
title = Common::case_with_markup(@labels["annex"], "capital",
|
35
58
|
@script)
|
36
|
-
|
59
|
+
"#{title} #{num}<br/>#{obl}"
|
37
60
|
end
|
38
61
|
|
39
62
|
def annex_name_anchors1(clause, num, level)
|
@@ -44,7 +67,7 @@ module IsoDoc
|
|
44
67
|
|
45
68
|
def annex_names1(clause, num, level)
|
46
69
|
annex_name_anchors1(clause, num, level)
|
47
|
-
i =
|
70
|
+
i = clause_counter(0, prefix: num)
|
48
71
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
49
72
|
annex_names1(c, i.increment(c).print, level + 1)
|
50
73
|
end
|
@@ -81,6 +104,16 @@ module IsoDoc
|
|
81
104
|
super
|
82
105
|
end
|
83
106
|
|
107
|
+
def main_anchor_names(xml)
|
108
|
+
n = Counter.new(0, { numerals: @autonumbering_style })
|
109
|
+
clause_order_main(xml).each do |a|
|
110
|
+
xml.xpath(ns(a[:path])).each do |c|
|
111
|
+
section_names(c, n, 1)
|
112
|
+
a[:multi] or break
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
84
117
|
def back_clauses_anchor_names(xml)
|
85
118
|
clause_order_back(xml).each do |a|
|
86
119
|
xml.xpath(ns(a[:path])).each do |c|
|
@@ -96,7 +129,8 @@ module IsoDoc
|
|
96
129
|
|
97
130
|
def commentary_names(clause)
|
98
131
|
preface_name_anchors(clause, 1, clause_title(clause))
|
99
|
-
clause.xpath(ns(SUBCLAUSES))
|
132
|
+
clause.xpath(ns(SUBCLAUSES))
|
133
|
+
.each_with_object(clause_counter(0, {})) do |c, i|
|
100
134
|
commentary_names1(c, clause["id"], i.increment(c).print, 2)
|
101
135
|
end
|
102
136
|
end
|
@@ -104,7 +138,7 @@ module IsoDoc
|
|
104
138
|
def commentary_names1(clause, root, num, level)
|
105
139
|
commentary_name_anchors(clause, num, root, level)
|
106
140
|
clause.xpath(ns(SUBCLAUSES))
|
107
|
-
.each_with_object(
|
141
|
+
.each_with_object(clause_counter(0, prefix: num)) do |c, i|
|
108
142
|
commentary_names1(c, root, i.increment(c).print,
|
109
143
|
level + 1)
|
110
144
|
end
|
@@ -120,15 +154,19 @@ module IsoDoc
|
|
120
154
|
|
121
155
|
def list_item_anchor_names(list, list_anchor, depth, prev_label,
|
122
156
|
refer_list)
|
123
|
-
c =
|
157
|
+
c = list_counter(list["start"] ? list["start"].to_i - 1 : 0, {})
|
124
158
|
list.xpath(ns("./li")).each do |li|
|
125
159
|
bare_label, label =
|
126
|
-
list_item_value(li, c, depth,
|
127
|
-
|
160
|
+
list_item_value(li, c, depth,
|
161
|
+
{ list_anchor: list_anchor,
|
162
|
+
prev_label: prev_label,
|
163
|
+
refer_list: depth == 1 ? refer_list : nil })
|
128
164
|
li["id"] and @anchors[li["id"]] =
|
129
|
-
{ label: bare_label,
|
165
|
+
{ label: bare_label,
|
166
|
+
bare_xref: "#{bare_label})",
|
130
167
|
xref: "#{label})", type: "listitem",
|
131
|
-
refer_list: refer_list,
|
168
|
+
refer_list: refer_list,
|
169
|
+
container: list_anchor[:container] }
|
132
170
|
(li.xpath(ns(".//ol")) - li.xpath(ns(".//ol//ol"))).each do |ol|
|
133
171
|
list_item_anchor_names(ol, list_anchor, depth + 1, label,
|
134
172
|
refer_list)
|
@@ -139,10 +177,10 @@ refer_list)
|
|
139
177
|
def list_item_value(entry, counter, depth, opts)
|
140
178
|
label1 = counter.increment(entry).listlabel(entry.parent, depth)
|
141
179
|
if depth > 2
|
142
|
-
base = opts[:prev_label].
|
143
|
-
label1 = "#{base[
|
180
|
+
base = @c.decode(opts[:prev_label]).split(/\)\s*/) # List a) 1.1.1
|
181
|
+
label1 = "#{base[-1].sub(/^の/,'')}#{clause_sep}#{label1}"
|
144
182
|
[label1, list_item_anchor_label(label1, opts[:list_anchor],
|
145
|
-
base[
|
183
|
+
base[0].sub(/[\p{Zs})]+$/, ""), opts[:refer_list])]
|
146
184
|
else
|
147
185
|
[label1, list_item_anchor_label(label1, opts[:list_anchor], opts[:prev_label],
|
148
186
|
opts[:refer_list])]
|
@@ -1783,9 +1783,21 @@ that the `number` given for the series applies to the second iteration of number
|
|
1783
1783
|
May be used to differentiate rendering of notes in bibliographies</a:documentation>
|
1784
1784
|
</attribute>
|
1785
1785
|
</optional>
|
1786
|
-
<ref name="
|
1786
|
+
<ref name="LocalizedStringAttributes">
|
1787
1787
|
<a:documentation>The content of the note</a:documentation>
|
1788
1788
|
</ref>
|
1789
|
+
<choice>
|
1790
|
+
<oneOrMore>
|
1791
|
+
<ref name="BasicBlockNoId">
|
1792
|
+
<a:documentation>Multiple blocks of content</a:documentation>
|
1793
|
+
</ref>
|
1794
|
+
</oneOrMore>
|
1795
|
+
<oneOrMore>
|
1796
|
+
<ref name="TextElement">
|
1797
|
+
<a:documentation>Single block of content</a:documentation>
|
1798
|
+
</ref>
|
1799
|
+
</oneOrMore>
|
1800
|
+
</choice>
|
1789
1801
|
</element>
|
1790
1802
|
</define>
|
1791
1803
|
<define name="bibabstract">
|
@@ -17,7 +17,7 @@
|
|
17
17
|
these elements; we just want one namespace for any child grammars
|
18
18
|
of this.
|
19
19
|
-->
|
20
|
-
<!-- VERSION v1.
|
20
|
+
<!-- VERSION v1.4.0 -->
|
21
21
|
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
22
22
|
<include href="reqt.rng"/>
|
23
23
|
<include href="basicdoc.rng">
|
@@ -326,7 +326,7 @@ normative or informative references, some split references into sections organiz
|
|
326
326
|
<a:documentation>Content of note</a:documentation>
|
327
327
|
<oneOrMore>
|
328
328
|
<choice>
|
329
|
-
<ref name="paragraph"/>
|
329
|
+
<ref name="paragraph-with-footnote"/>
|
330
330
|
<ref name="ul"/>
|
331
331
|
<ref name="ol"/>
|
332
332
|
<ref name="dl"/>
|
@@ -412,7 +412,7 @@ normative or informative references, some split references into sections organiz
|
|
412
412
|
<element name="note">
|
413
413
|
<ref name="OptionalId"/>
|
414
414
|
<oneOrMore>
|
415
|
-
<ref name="paragraph"/>
|
415
|
+
<ref name="paragraph-with-footnote"/>
|
416
416
|
</oneOrMore>
|
417
417
|
</element>
|
418
418
|
</define>
|
@@ -1977,7 +1977,7 @@ used in document amendments</a:documentation>
|
|
1977
1977
|
<oneOrMore>
|
1978
1978
|
<choice>
|
1979
1979
|
<a:documentation>Content of the verbal representation of the term</a:documentation>
|
1980
|
-
<ref name="paragraph"/>
|
1980
|
+
<ref name="paragraph-with-footnote"/>
|
1981
1981
|
<ref name="dl"/>
|
1982
1982
|
<ref name="ol"/>
|
1983
1983
|
<ref name="ul"/>
|
@@ -2015,7 +2015,7 @@ used in document amendments</a:documentation>
|
|
2015
2015
|
<oneOrMore>
|
2016
2016
|
<choice>
|
2017
2017
|
<a:documentation>Content of the term note</a:documentation>
|
2018
|
-
<ref name="paragraph"/>
|
2018
|
+
<ref name="paragraph-with-footnote"/>
|
2019
2019
|
<ref name="ul"/>
|
2020
2020
|
<ref name="ol"/>
|
2021
2021
|
<ref name="dl"/>
|
@@ -2037,7 +2037,7 @@ used in document amendments</a:documentation>
|
|
2037
2037
|
<ref name="dl"/>
|
2038
2038
|
<ref name="quote"/>
|
2039
2039
|
<ref name="sourcecode"/>
|
2040
|
-
<ref name="paragraph"/>
|
2040
|
+
<ref name="paragraph-with-footnote"/>
|
2041
2041
|
<ref name="figure"/>
|
2042
2042
|
</choice>
|
2043
2043
|
</oneOrMore>
|
@@ -23,6 +23,14 @@ module Metanorma
|
|
23
23
|
"STIX Two Math" => nil,
|
24
24
|
"IPAexGothic" => nil,
|
25
25
|
"IPAexMincho" => nil,
|
26
|
+
=begin
|
27
|
+
"Noto Serif JP" => nil,
|
28
|
+
"Noto Serif JP ExtraLight" => nil,
|
29
|
+
"Noto Serif JP Medium" => nil,
|
30
|
+
"Noto Serif JP Black" => nil,
|
31
|
+
"Noto Sans JP Thin" => nil,
|
32
|
+
"Noto Sans JP Medium" => nil,
|
33
|
+
=end
|
26
34
|
"Courier New" => nil,
|
27
35
|
"Cambria Math" => nil,
|
28
36
|
"Times New Roman" => nil,
|
@@ -6,15 +6,19 @@ module Relaton
|
|
6
6
|
class Parse < ::Relaton::Render::Iso::Parse
|
7
7
|
def simple_or_host_xml2hash(doc, host)
|
8
8
|
ret = super
|
9
|
-
|
10
|
-
|
9
|
+
orgs = %i(publisher_raw author_raw authorizer_raw)
|
10
|
+
.each_with_object([]) do |i, m|
|
11
|
+
ret[i] and m << ret[i]
|
12
|
+
end
|
13
|
+
ret.merge(home_standard: home_standard(doc, orgs.flatten))
|
11
14
|
end
|
12
15
|
|
13
16
|
def home_standard(_doc, pubs)
|
14
17
|
pubs&.any? do |r|
|
15
18
|
["International Organization for Standardization", "ISO",
|
16
19
|
"International Electrotechnical Commission", "IEC",
|
17
|
-
"
|
20
|
+
"日本規格協会", "一般財団法人 日本規格協会",
|
21
|
+
"Japanese Industrial Standards"]
|
18
22
|
.include?(r[:nonpersonal])
|
19
23
|
end
|
20
24
|
end
|
data/metanorma-jis.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.required_ruby_version = Gem::Requirement.new(">= 3.1.0")
|
32
32
|
|
33
33
|
spec.add_dependency "japanese_calendar", "~> 0"
|
34
|
-
spec.add_dependency "metanorma-iso", "~> 2.
|
34
|
+
spec.add_dependency "metanorma-iso", "~> 2.9.0"
|
35
35
|
spec.add_dependency "pubid"
|
36
36
|
|
37
37
|
spec.add_development_dependency "debug"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-jis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: japanese_calendar
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: 2.9.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.
|
40
|
+
version: 2.9.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pubid
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|