Module: IsoDoc::Function::Section

Included in:
Common
Defined in:
lib/isodoc/function/section.rb

Constant Summary collapse

MIDDLE_CLAUSE =
"//clause[parent::sections][not(xmlns:title = 'Scope')]"\
"[not(descendant::terms)]".freeze
TERM_CLAUSE =
"//sections/terms | "\
"//sections/clause[descendant::terms]".freeze

Instance Method Summary collapse

Instance Method Details

#annex(isoxml, out) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/isodoc/function/section.rb', line 72

def annex(isoxml, out)
  isoxml.xpath(ns("//annex")).each do |c|
    page_break(out)
    out.div **attr_code(id: c["id"], class: "Section3") do |s|
      c.elements.each do |c1|
        if c1.name == "title" then annex_name(c, c1, s)
        else
          parse(c1, s)
        end
      end
    end
  end
end

#annex_name(annex, name, div) ⇒ Object



65
66
67
68
69
70
# File 'lib/isodoc/function/section.rb', line 65

def annex_name(annex, name, div)
  div.h1 **{ class: "Annex" } do |t|
    t << "#{get_anchors[annex['id']][:label]}<br/><br/>"
    t << "<b>#{name.text}</b>"
  end
end

#clause(isoxml, out) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/isodoc/function/section.rb', line 53

def clause(isoxml, out)
  isoxml.xpath(ns(MIDDLE_CLAUSE)).each do |c|
    out.div **attr_code(id: c["id"]) do |s|
      clause_name(get_anchors[c['id']][:label],
                  c&.at(ns("./title"))&.content, s, nil)
      c.elements.reject { |c1| c1.name == "title" }.each do |c1|
        parse(c1, s)
      end
    end
  end
end

#clause_name(num, title, div, header_class) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/isodoc/function/section.rb', line 37

def clause_name(num, title, div, header_class)
  header_class = {} if header_class.nil?
  div.h1 **attr_code(header_class) do |h1|
    if num
      h1 << "#{num}."
      insert_tab(h1, 1)
    end
    h1 << title
  end
  div.parent.at(".//h1")
end

#clause_parse(node, out) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/isodoc/function/section.rb', line 28

def clause_parse(node, out)
  out.div **attr_code(id: node["id"]) do |div|
    clause_parse_title(node, div, node.at(ns("./title")), out)
    node.children.reject { |c1| c1.name == "title" }.each do |c1|
      parse(c1, div)
    end
  end
end

#clause_parse_title(node, div, c1, out) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/isodoc/function/section.rb', line 16

def clause_parse_title(node, div, c1, out)
  if node["inline-header"] == "true"
    inline_header_title(out, node, c1)
  else
    div.send "h#{get_anchors[node['id']][:level]}" do |h|
      lbl = get_anchors[node['id']][:label]
      h << "#{lbl}. " if lbl
      c1&.children&.each { |c2| parse(c2, h) }
    end
  end
end

#external_terms_boilerplate(sources) ⇒ Object



98
99
100
# File 'lib/isodoc/function/section.rb', line 98

def external_terms_boilerplate(sources)
  @external_terms_boilerplate.gsub(/%/, sources || "???")
end

#foreword(isoxml, out) ⇒ Object



185
186
187
188
189
190
191
192
# File 'lib/isodoc/function/section.rb', line 185

def foreword(isoxml, out)
  f = isoxml.at(ns("//foreword")) || return
  page_break(out)
  out.div **attr_code(id: f["id"]) do |s|
    s.h1(**{ class: "ForewordTitle" }) { |h1| h1 << @foreword_lbl }
    f.elements.each { |e| parse(e, s) unless e.name == "title" }
  end
end

#inline_header_title(out, node, c1) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
# File 'lib/isodoc/function/section.rb', line 3

def inline_header_title(out, node, c1)
  title = c1&.content || ""
  out.span **{ class: "zzMoveToFollowing" } do |s|
    s.b do |b|
      if get_anchors[node['id']][:label]
        b << "#{get_anchors[node['id']][:label]}. #{title} "
      else
        b << "#{title} "
      end
    end
  end
end

#internal_external_terms_boilerplate(sources) ⇒ Object



102
103
104
# File 'lib/isodoc/function/section.rb', line 102

def internal_external_terms_boilerplate(sources)
  @internal_external_terms_boilerplate.gsub(/%/, sources || "??")
end

#introduction(isoxml, out) ⇒ Object



173
174
175
176
177
178
179
180
181
182
183
# File 'lib/isodoc/function/section.rb', line 173

def introduction(isoxml, out)
  f = isoxml.at(ns("//introduction")) || return
  title_attr = { class: "IntroTitle" }
  page_break(out)
  out.div **{ class: "Section3", id: f["id"] } do |div|
    clause_name(nil, @introduction_lbl, div, title_attr)
    f.elements.each do |e|
      parse(e, div) unless e.name == "title"
    end
  end
end

#scope(isoxml, out, num) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/isodoc/function/section.rb', line 86

def scope(isoxml, out, num)
  f = isoxml.at(ns("//clause[title = 'Scope']")) or return num
  out.div **attr_code(id: f["id"]) do |div|
    num = num + 1
    clause_name(num, @scope_lbl, div, nil)
    f.elements.each do |e|
      parse(e, div) unless e.name == "title"
    end
  end
  num
end

#symbols_abbrevs(isoxml, out, num) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
# File 'lib/isodoc/function/section.rb', line 154

def symbols_abbrevs(isoxml, out, num)
  f = isoxml.at(ns("//sections/definitions")) or return num
  out.div **attr_code(id: f["id"], class: "Symbols") do |div|
    num = num + 1
    clause_name(num, @symbols_lbl, div, nil)
    f.elements.each do |e|
      parse(e, div) unless e.name == "title"
    end
  end
  num
end

#symbols_parse(isoxml, out) ⇒ Object

subclause



167
168
169
170
171
# File 'lib/isodoc/function/section.rb', line 167

def symbols_parse(isoxml, out)
  isoxml.children.first.previous =
    "<title>#{@symbols_lbl}</title>"
  clause_parse(isoxml, out)
end

#term_defs_boilerplate(div, source, term, preface) ⇒ Object



106
107
108
109
110
111
112
113
114
# File 'lib/isodoc/function/section.rb', line 106

def term_defs_boilerplate(div, source, term, preface)
  source.each { |s| @anchors[s["bibitemid"]] or warn "#{s['bibitemid']} not referenced" }
  if source.empty? && term.nil?
    div << @no_terms_boilerplate
  else
    div << term_defs_boilerplate_cont(source, term)
  end
  div << @term_def_boilerplate
end

#term_defs_boilerplate_cont(src, term) ⇒ Object



116
117
118
119
120
121
122
123
124
# File 'lib/isodoc/function/section.rb', line 116

def term_defs_boilerplate_cont(src, term)
  #sources = sentence_join(src.map { |s| @anchors[s["bibitemid"]][:xref] })
  sources = sentence_join(src.map { |s| @anchors.dig(s["bibitemid"], :xref) })
  if src.empty? then @internal_terms_boilerplate
  elsif term.nil? then external_terms_boilerplate(sources)
  else
    internal_external_terms_boilerplate(sources)
  end
end

#terms_defs(isoxml, out, num) ⇒ Object



135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/isodoc/function/section.rb', line 135

def terms_defs(isoxml, out, num)
  f = isoxml.at(ns(TERM_CLAUSE)) or return num
  out.div **attr_code(id: f["id"]) do |div|
    num = num + 1
    clause_name(num, terms_defs_title(f), div, nil)
    term_defs_boilerplate(div, isoxml.xpath(ns(".//termdocsource")),
                          f.at(ns(".//term")), f.at(ns("./p")))
    f.elements.each do |e|
      parse(e, div) unless %w{title source}.include? e.name
    end
  end
  num
end

#terms_defs_title(f) ⇒ Object



126
127
128
129
130
# File 'lib/isodoc/function/section.rb', line 126

def terms_defs_title(f)
  symbols = f.at(ns(".//definitions"))
  return @termsdefsymbols_lbl if symbols
  @termsdef_lbl
end

#terms_parse(isoxml, out) ⇒ Object

subclause



150
151
152
# File 'lib/isodoc/function/section.rb', line 150

def terms_parse(isoxml, out)
  clause_parse(isoxml, out)
end