Class: IsoDoc::Jis::Xref

Inherits:
Iso::Xref
  • Object
show all
Defined in:
lib/isodoc/jis/xref.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#autonumbering_styleObject

Returns the value of attribute autonumbering_style.



25
26
27
# File 'lib/isodoc/jis/xref.rb', line 25

def autonumbering_style
  @autonumbering_style
end

Instance Method Details

#annex_name_anchors1(clause, num, level) ⇒ Object



62
63
64
65
66
# File 'lib/isodoc/jis/xref.rb', line 62

def annex_name_anchors1(clause, num, level)
  @anchors[clause["id"]] =
    { xref: num, label: num, level: level,
      subtype: "annex" }
end

#annex_name_lbl(clause, num) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/isodoc/jis/xref.rb', line 53

def annex_name_lbl(clause, num)
  obl = "(#{@labels['inform_annex']})"
  clause["obligation"] == "normative" and
    obl = "(#{@labels['norm_annex']})"
  title = Common::case_with_markup(@labels["annex"], "capital",
                                   @script)
  "#{title} #{num}<br/>#{obl}"
end

#annex_names1(clause, num, level) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/isodoc/jis/xref.rb', line 68

def annex_names1(clause, num, level)
  annex_name_anchors1(clause, num, level)
  i = clause_counter(0, prefix: num)
  clause.xpath(ns(SUBCLAUSES)).each do |c|
    annex_names1(c, i.increment(c).print, level + 1)
  end
end

#back_clauses_anchor_names(xml) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/isodoc/jis/xref.rb', line 117

def back_clauses_anchor_names(xml)
  clause_order_back(xml).each do |a|
    xml.xpath(ns(a[:path])).each do |c|
      if c["commentary"] == "true" then commentary_names(c)
      else preface_names(c)
      end
      x = Nokogiri::XML::NodeSet.new(c.document, [c])
      sequential_asset_names(x, container: true)
      a[:multi] or break
    end
  end
end

#clause_counter(num, opts) ⇒ Object



31
32
33
34
35
# File 'lib/isodoc/jis/xref.rb', line 31

def clause_counter(num, opts)
  opts[:numerals] ||= @autonumbering_style
  opts[:separator] ||= clause_sep
  super
end

#clause_order_annex(_docxml) ⇒ Object



89
90
91
# File 'lib/isodoc/jis/xref.rb', line 89

def clause_order_annex(_docxml)
  [{ path: "//annex[not(@commentary = 'true')]", multi: true }]
end

#clause_order_back(_docxml) ⇒ Object



93
94
95
96
97
98
99
100
# File 'lib/isodoc/jis/xref.rb', line 93

def clause_order_back(_docxml)
  [
    { path: @klass.bibliography_xpath },
    { path: "//annex[@commentary = 'true']", multi: true },
    { path: "//indexsect", multi: true },
    { path: "//colophon/*", multi: true },
  ]
end

#clause_order_main(docxml) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/isodoc/jis/xref.rb', line 76

def clause_order_main(docxml)
  [
    { path: "//sections/introduction" },
    { path: "//clause[@type = 'scope']" },
    { path: @klass.norm_ref_xpath },
    { path: "//sections/terms | " \
            "//sections/clause[descendant::terms]" },
    { path: "//sections/definitions | " \
            "//sections/clause[descendant::definitions][not(descendant::terms)]" },
    { path: @klass.middle_clause(docxml), multi: true },
  ]
end

#clause_sepObject



27
28
29
# File 'lib/isodoc/jis/xref.rb', line 27

def clause_sep
  @autonumbering_style == :japanese ? "\u30fb" : "."
end

#commentary_name_anchors(clause, num, root, level) ⇒ Object



147
148
149
150
151
152
153
# File 'lib/isodoc/jis/xref.rb', line 147

def commentary_name_anchors(clause, num, root, level)
  @anchors[clause["id"]] =
    { label: num, xref: l10n("#{@labels['clause']} #{num}"),
      container: root,
      title: clause_title(clause), level: level, type: "clause",
      elem: @labels["clause"] }
end

#commentary_names(clause) ⇒ Object



130
131
132
133
134
135
136
# File 'lib/isodoc/jis/xref.rb', line 130

def commentary_names(clause)
  preface_name_anchors(clause, 1, clause_title(clause))
  clause.xpath(ns(SUBCLAUSES))
    .each_with_object(clause_counter(0, {})) do |c, i|
    commentary_names1(c, clause["id"], i.increment(c).print, 2)
  end
end

#commentary_names1(clause, root, num, level) ⇒ Object



138
139
140
141
142
143
144
145
# File 'lib/isodoc/jis/xref.rb', line 138

def commentary_names1(clause, root, num, level)
  commentary_name_anchors(clause, num, root, level)
  clause.xpath(ns(SUBCLAUSES))
    .each_with_object(clause_counter(0, prefix: num)) do |c, i|
    commentary_names1(c, root, i.increment(c).print,
                      level + 1)
  end
end

#hierfigsepObject



43
44
45
# File 'lib/isodoc/jis/xref.rb', line 43

def hierfigsep
  @lang == "ja" ? "の" : super
end

#list_counter(num, opts) ⇒ Object



37
38
39
40
41
# File 'lib/isodoc/jis/xref.rb', line 37

def list_counter(num, opts)
  opts[:numerals] ||= @autonumbering_style
  opts[:separator] ||= clause_sep
  IsoDoc::Jis::Counter.new(num, opts)
end

#list_item_anchor_names(list, list_anchor, depth, prev_label, refer_list) ⇒ Object



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/isodoc/jis/xref.rb', line 155

def list_item_anchor_names(list, list_anchor, depth, prev_label,
refer_list)
  c = list_counter(list["start"] ? list["start"].to_i - 1 : 0, {})
  list.xpath(ns("./li")).each do |li|
    bare_label, label =
      list_item_value(li, c, depth,
                      { list_anchor: list_anchor,
                        prev_label: prev_label,
                        refer_list: depth == 1 ? refer_list : nil })
    li["id"] and @anchors[li["id"]] =
                   { label: bare_label,
                     bare_xref: "#{bare_label})",
                     xref: "#{label})", type: "listitem",
                     refer_list: refer_list,
                     container: list_anchor[:container] }
    (li.xpath(ns(".//ol")) - li.xpath(ns(".//ol//ol"))).each do |ol|
      list_item_anchor_names(ol, list_anchor, depth + 1, label,
                             refer_list)
    end
  end
end

#list_item_value(entry, counter, depth, opts) ⇒ Object



177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/isodoc/jis/xref.rb', line 177

def list_item_value(entry, counter, depth, opts)
  label1 = counter.increment(entry).listlabel(entry.parent, depth)
  if depth > 2
    base = @c.decode(opts[:prev_label]).split(/\)\s*/) # List a) 1.1.1
    label1 = "#{base[-1].sub(/^の/,'')}#{clause_sep}#{label1}"
    [label1, list_item_anchor_label(label1, opts[:list_anchor],
                                    base[0].sub(/[\p{Zs})]+$/, ""), opts[:refer_list])]
  else
    [label1, list_item_anchor_label(label1, opts[:list_anchor], opts[:prev_label],
                                    opts[:refer_list])]
  end
end

#main_anchor_names(xml) ⇒ Object



107
108
109
110
111
112
113
114
115
# File 'lib/isodoc/jis/xref.rb', line 107

def main_anchor_names(xml)
  n = Counter.new(0, { numerals: @autonumbering_style })
  clause_order_main(xml).each do |a|
    xml.xpath(ns(a[:path])).each do |c|
      section_names(c, n, 1)
      a[:multi] or break
    end
  end
end

#section_names(clause, num, lvl) ⇒ Object



102
103
104
105
# File 'lib/isodoc/jis/xref.rb', line 102

def section_names(clause, num, lvl)
  clause&.name == "introduction" and clause["unnumbered"] = "true"
  super
end

#subfigure_label(subfignum) ⇒ Object



47
48
49
50
51
# File 'lib/isodoc/jis/xref.rb', line 47

def subfigure_label(subfignum)
  subfignum.zero? and return ""
  sep = @lang == "ja" ? "の" : " "
  "#{sep}#{(subfignum + 96).chr})"
end