isodoc 1.1.1 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module IsoDoc::Function
2
4
  module Utils
3
5
  def date_range(date)
@@ -9,50 +11,50 @@ module IsoDoc::Function
9
11
  end
10
12
 
11
13
  def insert_tab(out, n)
12
- [1..n].each { out << "&nbsp; " }
14
+ [1..n].each { out << '&nbsp; ' }
13
15
  end
14
16
 
15
17
  # add namespaces for Word fragments
16
- NOKOHEAD = <<~HERE.freeze
17
- <!DOCTYPE html SYSTEM
18
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
19
- <html xmlns="http://www.w3.org/1999/xhtml">
20
- <head> <title></title> <meta charset="UTF-8" /> </head>
21
- <body> </body> </html>
18
+ NOKOHEAD = <<~HERE
19
+ <!DOCTYPE html SYSTEM
20
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
21
+ <html xmlns="http://www.w3.org/1999/xhtml">
22
+ <head> <title></title> <meta charset="UTF-8" /> </head>
23
+ <body> </body> </html>
22
24
  HERE
23
25
 
24
26
  # block for processing XML document fragments as XHTML,
25
27
  # to allow for HTMLentities
26
28
  def noko(&block)
27
29
  doc = ::Nokogiri::XML.parse(NOKOHEAD)
28
- fragment = doc.fragment("")
30
+ fragment = doc.fragment('')
29
31
  ::Nokogiri::XML::Builder.with fragment, &block
30
- fragment.to_xml(encoding: "US-ASCII").lines.map do |l|
31
- l.gsub(/\s*\n/, "")
32
+ fragment.to_xml(encoding: 'US-ASCII').lines.map do |l|
33
+ l.gsub(/\s*\n/, '')
32
34
  end
33
35
  end
34
36
 
35
37
  def attr_code(attributes)
36
38
  attributes = attributes.reject { |_, val| val.nil? }.map
37
39
  attributes.map do |k, v|
38
- [k, (v.is_a? String) ? HTMLEntities.new.decode(v) : v]
40
+ [k, v.is_a?(String) ? HTMLEntities.new.decode(v) : v]
39
41
  end.to_h
40
42
  end
41
43
 
42
44
  DOCTYPE_HDR = '<!DOCTYPE html SYSTEM '\
43
- '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'.freeze
45
+ '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
44
46
 
45
47
  def to_xhtml(xml)
46
- xml.gsub!(/<\?xml[^>]*>/, "")
47
- /<!DOCTYPE /.match xml or xml = DOCTYPE_HDR + xml
48
+ xml.gsub!(/<\?xml[^>]*>/, '')
49
+ /<!DOCTYPE /.match(xml) || (xml = DOCTYPE_HDR + xml)
48
50
  xml = xml.split(/(\&[^ \r\n\t#;]+;)/).map do |t|
49
- /^(\&[^ \t\r\n#;]+;)/.match(t) ?
51
+ /^(\&[^ \t\r\n#;]+;)/.match?(t) ?
50
52
  HTMLEntities.new.encode(HTMLEntities.new.decode(t), :hexadecimal) : t
51
- end.join("")
53
+ end.join('')
52
54
  begin
53
- Nokogiri::XML.parse(xml) { |config| config.strict }
55
+ Nokogiri::XML.parse(xml, &:strict)
54
56
  rescue Nokogiri::XML::SyntaxError => e
55
- File.open("#{@filename}.#{@format}.err", "w:UTF-8") { |f| f.write xml }
57
+ File.open("#{@filename}.#{@format}.err", 'w:UTF-8') { |f| f.write xml }
56
58
  abort "Malformed Output XML for #{@format}: #{e} (see #{@filename}.#{@format}.err)"
57
59
  end
58
60
  end
@@ -64,7 +66,7 @@ module IsoDoc::Function
64
66
  end
65
67
 
66
68
  def from_xhtml(xml)
67
- xml.to_xml.sub(%r{ xmlns="http://www.w3.org/1999/xhtml"}, "")
69
+ xml.to_xml.sub(%r{ xmlns="http://www.w3.org/1999/xhtml"}, '')
68
70
  end
69
71
 
70
72
  CLAUSE_ANCESTOR =
@@ -72,7 +74,7 @@ module IsoDoc::Function
72
74
  "local-name() = 'acknowledgements' or local-name() = 'term' or "\
73
75
  "local-name() = 'appendix' or local-name() = 'foreword' or "\
74
76
  "local-name() = 'introduction' or local-name() = 'terms' or "\
75
- "local-name() = 'clause' or local-name() = 'references']/@id".freeze
77
+ "local-name() = 'clause' or local-name() = 'references']/@id"
76
78
 
77
79
  def get_clause_id(node)
78
80
  clause = node.xpath(CLAUSE_ANCESTOR)
@@ -86,7 +88,7 @@ module IsoDoc::Function
86
88
  "local-name() = 'acknowledgements' or local-name() = 'term' or "\
87
89
  "local-name() = 'clause' or local-name() = 'references' or "\
88
90
  "local-name() = 'figure' or local-name() = 'formula' or "\
89
- "local-name() = 'table' or local-name() = 'example']/@id".freeze
91
+ "local-name() = 'table' or local-name() = 'example']/@id"
90
92
 
91
93
  def get_note_container_id(node)
92
94
  container = node.xpath(NOTE_CONTAINER_ANCESTOR)
@@ -94,7 +96,7 @@ module IsoDoc::Function
94
96
  end
95
97
 
96
98
  def sentence_join(array)
97
- return "" if array.nil? || array.empty?
99
+ return '' if array.nil? || array.empty?
98
100
  if array.length == 1 then array[0]
99
101
  else
100
102
  IsoDoc::Function::I18n::l10n("#{array[0..-2].join(', ')} "\
@@ -105,25 +107,25 @@ module IsoDoc::Function
105
107
 
106
108
  # avoid `; avoid {{ (Liquid Templates); avoid [[ (Javascript)
107
109
  def extract_delims(text)
108
- @openmathdelim = "(#("
109
- @closemathdelim = ")#)"
110
+ @openmathdelim = '(#('
111
+ @closemathdelim = ')#)'
110
112
  while text.include?(@openmathdelim) || text.include?(@closemathdelim)
111
- @openmathdelim += "("
112
- @closemathdelim += ")"
113
+ @openmathdelim += '('
114
+ @closemathdelim += ')'
113
115
  end
114
116
  [@openmathdelim, @closemathdelim]
115
117
  end
116
118
 
117
119
  def header_strip(h)
118
- h = h.to_s.gsub(%r{<br\s*/>}, " ").gsub(/<\/?h[123456][^>]*>/, "").
119
- gsub(/<\/?b[^>]*>/, "")
120
+ h = h.to_s.gsub(%r{<br\s*/>}, ' ').gsub(/<\/?h[123456][^>]*>/, '')
121
+ .gsub(/<\/?b[^>]*>/, '')
120
122
  h1 = to_xhtml_fragment(h.dup)
121
123
  h1.traverse do |x|
122
- x.replace(" ") if x.name == "span" && /mso-tab-count/.match(x["style"])
123
- x.remove if x.name == "span" && x["class"] == "MsoCommentReference"
124
- x.remove if x.name == "a" && x["class"] == "FootnoteRef"
125
- x.remove if x.name == "span" && /mso-bookmark/.match(x["style"])
126
- x.replace(x.children) if x.name == "a"
124
+ x.replace(' ') if x.name == 'span' && /mso-tab-count/.match(x['style'])
125
+ x.remove if x.name == 'span' && x['class'] == 'MsoCommentReference'
126
+ x.remove if x.name == 'a' && x['class'] == 'FootnoteRef'
127
+ x.remove if x.name == 'span' && /mso-bookmark/.match(x['style'])
128
+ x.replace(x.children) if x.name == 'a'
127
129
  end
128
130
  from_xhtml(h1)
129
131
  end
@@ -135,9 +137,9 @@ module IsoDoc::Function
135
137
  def liquid(doc)
136
138
  # unescape HTML escapes in doc
137
139
  doc = doc.split(%r<(\{%|%\})>).each_slice(4).map do |a|
138
- a[2] = a[2].gsub(/\&lt;/, "<").gsub(/\&gt;/, ">") if a.size > 2
139
- a.join("")
140
- end.join("")
140
+ a[2] = a[2].gsub(/\&lt;/, '<').gsub(/\&gt;/, '>') if a.size > 2
141
+ a.join('')
142
+ end.join('')
141
143
  Liquid::Template.parse(doc)
142
144
  end
143
145
 
@@ -147,37 +149,41 @@ module IsoDoc::Function
147
149
  end
148
150
 
149
151
  def populate_template(docxml, _format = nil)
150
- meta = @meta.get.merge(@labels || {}).merge(@meta.labels || {})
152
+ meta = @meta
153
+ .get
154
+ .merge(@labels || {})
155
+ .merge(@meta.labels || {})
156
+ .merge(@meta.fonts_options || {})
151
157
  template = liquid(docxml)
152
- template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h).
153
- gsub('&lt;', '&#x3c;').gsub('&gt;', '&#x3e;').gsub('&amp;', '&#x26;')
158
+ template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h)
159
+ .gsub('&lt;', '&#x3c;').gsub('&gt;', '&#x3e;').gsub('&amp;', '&#x26;')
154
160
  end
155
161
 
156
- def save_dataimage(uri, relative_dir = true)
162
+ def save_dataimage(uri, _relative_dir = true)
157
163
  %r{^data:image/(?<imgtype>[^;]+);base64,(?<imgdata>.+)$} =~ uri
158
- imgtype.sub!(/\+[a-z0-9]+$/, "") # svg+xml
159
- imgtype = "png" unless /^[a-z0-9]+$/.match imgtype
160
- Tempfile.open(["image", ".#{imgtype}"]) do |f|
164
+ imgtype.sub!(/\+[a-z0-9]+$/, '') # svg+xml
165
+ imgtype = 'png' unless /^[a-z0-9]+$/.match imgtype
166
+ Tempfile.open(['image', ".#{imgtype}"]) do |f|
161
167
  f.binmode
162
168
  f.write(Base64.strict_decode64(imgdata))
163
- @tempfile_cache << f #persist to the end
169
+ @tempfile_cache << f # persist to the end
164
170
  f.path
165
171
  end
166
172
  end
167
173
 
168
174
  def image_localfile(i)
169
- if /^data:image/.match i["src"]
170
- save_dataimage(i["src"], false)
171
- elsif %r{^([A-Z]:)?/}.match i["src"]
172
- i["src"]
175
+ if /^data:image/.match? i['src']
176
+ save_dataimage(i['src'], false)
177
+ elsif %r{^([A-Z]:)?/}.match? i['src']
178
+ i['src']
173
179
  else
174
- File.join(@localdir, i["src"])
180
+ File.join(@localdir, i['src'])
175
181
  end
176
182
  end
177
183
 
178
184
  def labelled_ancestor(node)
179
- return !node.ancestors("example, requirement, recommendation, permission, "\
180
- "table, figure, sourcecode").empty?
185
+ !node.ancestors('example, requirement, recommendation, permission, '\
186
+ 'table, figure, sourcecode').empty?
181
187
  end
182
188
  end
183
189
  end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sassc'
4
+ require 'isodoc/sassc_importer'
5
+ require 'rake/clean'
6
+
7
+ module IsoDoc
8
+ module GemTasks
9
+ extend Rake::DSL if defined? Rake::DSL
10
+
11
+ module_function
12
+
13
+ def install
14
+ rule '.css' => [proc { |tn| tn.sub(/\.css$/, '.scss') }] do |current_task|
15
+ begin
16
+ puts(current_task)
17
+ compile_scss_task(current_task)
18
+ rescue StandardError => e
19
+ notify_borken_compilation(e, current_task)
20
+ end
21
+ end
22
+
23
+ scss_files = Rake::FileList['lib/**/*.scss']
24
+ source_files = scss_files.ext('.css')
25
+
26
+ task :comment_out_liquid do
27
+ process_css_files(scss_files) do |file_name|
28
+ comment_out_liquid(File.read(file_name, encoding: 'UTF-8'))
29
+ end
30
+ end
31
+
32
+ task build_scss: [:comment_out_liquid].push(*source_files) do
33
+ process_css_files(scss_files) do |file_name|
34
+ uncomment_out_liquid(File.read(file_name, encoding: 'UTF-8'))
35
+ end
36
+ git_cache_compiled_files && puts('Built scss!')
37
+ end
38
+
39
+ Rake::Task['build'].enhance [:build_scss] do
40
+ git_rm_compiled_files
41
+ Rake::Task[:clean].invoke
42
+ end
43
+ end
44
+
45
+ def notify_borken_compilation(error, current_task)
46
+ puts("Cannot compile #{current_task} because of #{error.message}")
47
+ puts('continue anyway[y|n]?')
48
+ answer = STDIN.gets.strip
49
+ if %w[y yes].include?(answer.strip.downcase)
50
+ puts("Cannot compile #{current_task} because of #{error.message}")
51
+ else
52
+ exit(0)
53
+ end
54
+ end
55
+
56
+ def git_cache_compiled_files
57
+ CLEAN.each do |css_file|
58
+ sh "git add #{css_file}"
59
+ end
60
+ end
61
+
62
+ def git_rm_compiled_files
63
+ CLEAN.each do |css_file|
64
+ sh "git rm --cached #{css_file}"
65
+ end
66
+ end
67
+
68
+ def process_css_files(scss_files)
69
+ scss_files.each do |file_name|
70
+ result = yield(file_name)
71
+ File.open(file_name, 'w', encoding: 'UTF-8') do |file|
72
+ file.puts(result)
73
+ end
74
+ end
75
+ end
76
+
77
+ def comment_out_liquid(text)
78
+ text.split("\n").map do |line|
79
+ if line.match?(/{({|%).+(}|%)}/)
80
+ "/* LIQUID_COMMENT#{line}LIQUID_COMMENT */"
81
+ else
82
+ line
83
+ end
84
+ end
85
+ .join("\n")
86
+ end
87
+
88
+ def uncomment_out_liquid(text)
89
+ text
90
+ .gsub('/* LIQUID_COMMENT', '')
91
+ .gsub('LIQUID_COMMENT */', '')
92
+ .gsub('"{{', '{{').gsub('}}"', '}}')
93
+ end
94
+
95
+ def fonts_placeholder
96
+ <<~TEXT
97
+ $bodyfont: '{{bodyfont}}';
98
+ $headerfont: '{{headerfont}}';
99
+ $monospacefont: '{{monospacefont}}';
100
+ TEXT
101
+ end
102
+
103
+ def compile_scss(filename)
104
+ require 'sassc'
105
+
106
+ isodoc_path = if Gem.loaded_specs['isodoc']
107
+ File.join(Gem.loaded_specs['isodoc'].full_gem_path, 'lib', 'isodoc')
108
+ else
109
+ File.join('lib', 'isodoc')
110
+ end
111
+ [isodoc_path,
112
+ File.dirname(filename)].each do |name|
113
+ SassC.load_paths << name
114
+ end
115
+ sheet_content = File.read(filename, encoding: 'UTF-8')
116
+ SassC::Engine.new(fonts_placeholder + sheet_content,
117
+ syntax: :scss,
118
+ importer: SasscImporter)
119
+ .render
120
+ end
121
+
122
+ def compile_scss_task(current_task)
123
+ filename = current_task.source
124
+ basename = File.basename(filename, '.*')
125
+ compiled_path = File.join(File.dirname(filename), "#{basename}.css")
126
+ content = uncomment_out_liquid(compile_scss(filename))
127
+ File.open(compiled_path, 'w:UTF-8') do |f|
128
+ f.write(content)
129
+ end
130
+ CLEAN << compiled_path
131
+ end
132
+ end
133
+ end
@@ -1,10 +1,15 @@
1
- require_relative "./metadata_date"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './metadata_date'
2
4
 
3
5
  module IsoDoc
4
6
  class Metadata
5
7
  DATETYPES = %w{published accessed created implemented obsoleted confirmed
6
- updated issued received transmitted copied unchanged circulated vote-started
7
- vote-ended}.freeze
8
+ updated issued received transmitted copied unchanged
9
+ circulated vote-started
10
+ vote-ended}.freeze
11
+
12
+ attr_accessor :fonts_options
8
13
 
9
14
  def ns(xpath)
10
15
  Common::ns(xpath)
@@ -14,13 +19,14 @@ module IsoDoc
14
19
  IsoDoc::Function::I18n::l10n(a, b, c)
15
20
  end
16
21
 
17
- def initialize(lang, script, labels)
22
+ def initialize(lang, script, labels, fonts_options = {})
18
23
  @metadata = {}
19
- DATETYPES.each { |w| @metadata["#{w.gsub(/-/, "_")}date".to_sym] = "XXX" }
24
+ DATETYPES.each { |w| @metadata["#{w.gsub(/-/, '_')}date".to_sym] = 'XXX' }
20
25
  @lang = lang
21
26
  @script = script
22
27
  @c = HTMLEntities.new
23
28
  @labels = labels
29
+ @fonts_options = fonts_options
24
30
  end
25
31
 
26
32
  def get
@@ -36,26 +42,26 @@ module IsoDoc
36
42
  end
37
43
 
38
44
  def extract_person_names(authors)
39
- authors.inject([]) do |ret, a|
40
- if a.at(ns("./name/completename"))
41
- ret << a.at(ns("./name/completename")).text
45
+ authors.reduce([]) do |ret, a|
46
+ if a.at(ns('./name/completename'))
47
+ ret << a.at(ns('./name/completename')).text
42
48
  else
43
49
  fn = []
44
- forenames = a.xpath(ns("./name/forename"))
50
+ forenames = a.xpath(ns('./name/forename'))
45
51
  forenames.each { |f| fn << f.text }
46
- surname = a&.at(ns("./name/surname"))&.text
47
- ret << fn.join(" ") + " " + surname
52
+ surname = a&.at(ns('./name/surname'))&.text
53
+ ret << fn.join(' ') + ' ' + surname
48
54
  end
49
55
  end
50
56
  end
51
57
 
52
58
  def extract_person_affiliations(authors)
53
- authors.inject([]) do |m, a|
54
- name = a&.at(ns("./affiliation/organization/name"))&.text
55
- location = a&.at(ns("./affiliation/organization/address/"\
56
- "formattedAddress"))&.text
57
- m << ((!name.nil? && !location.nil?) ? "#{name}, #{location}" :
58
- (name || location || ""))
59
+ authors.reduce([]) do |m, a|
60
+ name = a&.at(ns('./affiliation/organization/name'))&.text
61
+ location = a&.at(ns('./affiliation/organization/address/'\
62
+ 'formattedAddress'))&.text
63
+ m << (!name.nil? && !location.nil? ? "#{name}, #{location}" :
64
+ (name || location || ''))
59
65
  m
60
66
  end
61
67
  end
@@ -84,99 +90,99 @@ module IsoDoc
84
90
  end
85
91
 
86
92
  def bibdate(isoxml, _out)
87
- isoxml.xpath(ns("//bibdata/date")).each do |d|
88
- set("#{d['type'].gsub(/-/, "_")}date".to_sym, Common::date_range(d))
93
+ isoxml.xpath(ns('//bibdata/date')).each do |d|
94
+ set("#{d['type'].gsub(/-/, '_')}date".to_sym, Common::date_range(d))
89
95
  end
90
96
  end
91
97
 
92
98
  def doctype(isoxml, _out)
93
- b = isoxml&.at(ns("//bibdata/ext/doctype"))&.text || return
94
- t = b.split(/[- ]/).map{ |w| w.capitalize }.join(" ")
99
+ b = isoxml&.at(ns('//bibdata/ext/doctype'))&.text || return
100
+ t = b.split(/[- ]/).map(&:capitalize).join(' ')
95
101
  set(:doctype, t)
96
102
  end
97
103
 
98
104
  def iso?(org)
99
- name = org&.at(ns("./name"))&.text
100
- abbrev = org&.at(ns("./abbreviation"))&.text
101
- (abbrev == "ISO" ||
102
- name == "International Organization for Standardization" )
105
+ name = org&.at(ns('./name'))&.text
106
+ abbrev = org&.at(ns('./abbreviation'))&.text
107
+ (abbrev == 'ISO' ||
108
+ name == 'International Organization for Standardization')
103
109
  end
104
110
 
105
111
  def agency(xml)
106
- agency = ""
112
+ agency = ''
107
113
  publisher = []
108
114
  xml.xpath(ns("//bibdata/contributor[xmlns:role/@type = 'publisher']/"\
109
- "organization")).each do |org|
110
- name = org&.at(ns("./name"))&.text
111
- agency1 = org&.at(ns("./abbreviation"))&.text || name
115
+ 'organization')).each do |org|
116
+ name = org&.at(ns('./name'))&.text
117
+ agency1 = org&.at(ns('./abbreviation'))&.text || name
112
118
  publisher << name if name
113
- agency = iso?(org) ? "ISO/#{agency}" : "#{agency}#{agency1}/"
119
+ agency = iso?(org) ? "ISO/#{agency}" : "#{agency}#{agency1}/"
114
120
  end
115
- set(:agency, agency.sub(%r{/$}, ""))
116
- set(:publisher, multiple_and(publisher, @labels["and"]))
121
+ set(:agency, agency.sub(%r{/$}, ''))
122
+ set(:publisher, multiple_and(publisher, @labels['and']))
117
123
  end
118
124
 
119
125
  def multiple_and(names, andword)
120
- return "" if names.length == 0
126
+ return '' if names.empty?
121
127
  return names[0] if names.length == 1
122
- names.length == 2 and
123
- return l10n("#{names[0]} #{andword} #{names[1]}", @lang, @script)
124
- l10n(names[0..-2].join(", ") + " #{andword} #{names[-1]}", @lang, @script)
128
+ (names.length == 2) &&
129
+ (return l10n("#{names[0]} #{andword} #{names[1]}", @lang, @script))
130
+ l10n(names[0..-2].join(', ') + " #{andword} #{names[-1]}", @lang, @script)
125
131
  end
126
132
 
127
133
  def docstatus(isoxml, _out)
128
- docstatus = isoxml.at(ns("//bibdata/status/stage"))
134
+ docstatus = isoxml.at(ns('//bibdata/status/stage'))
129
135
  set(:unpublished, true)
130
136
  if docstatus
131
137
  set(:stage, status_print(docstatus.text))
132
- i = isoxml&.at(ns("//bibdata/status/substage"))&.text and
138
+ (i = isoxml&.at(ns('//bibdata/status/substage'))&.text) &&
133
139
  set(:substage, i)
134
- i = isoxml&.at(ns("//bibdata/status/iteration"))&.text and
140
+ (i = isoxml&.at(ns('//bibdata/status/iteration'))&.text) &&
135
141
  set(:iteration, i)
136
142
  set(:unpublished, unpublished(docstatus.text))
137
- unpublished(docstatus.text) and
143
+ unpublished(docstatus.text) &&
138
144
  set(:stageabbr, stage_abbr(docstatus.text))
139
145
  end
140
146
  end
141
147
 
142
148
  def stage_abbr(docstatus)
143
- status_print(docstatus).split(/ /).
144
- map { |s| s[0].upcase }.join("")
149
+ status_print(docstatus).split(/ /)
150
+ .map { |s| s[0].upcase }.join('')
145
151
  end
146
152
 
147
153
  def unpublished(status)
148
- !(status.downcase == "published")
154
+ !status.casecmp('published').zero?
149
155
  end
150
156
 
151
157
  def status_print(status)
152
- status.split(/-/).map{ |w| w.capitalize }.join(" ")
158
+ status.split(/-/).map(&:capitalize).join(' ')
153
159
  end
154
160
 
155
161
  def docid(isoxml, _out)
156
- dn = isoxml.at(ns("//bibdata/docidentifier"))
162
+ dn = isoxml.at(ns('//bibdata/docidentifier'))
157
163
  set(:docnumber, dn&.text)
158
164
  end
159
165
 
160
166
  def docnumeric(isoxml, _out)
161
- dn = isoxml.at(ns("//bibdata/docnumber"))
167
+ dn = isoxml.at(ns('//bibdata/docnumber'))
162
168
  set(:docnumeric, dn&.text)
163
169
  end
164
170
 
165
171
  def draftinfo(draft, revdate)
166
- draftinfo = ""
172
+ draftinfo = ''
167
173
  if draft
168
- draftinfo = " (#{@labels["draft_label"]} #{draft}"
174
+ draftinfo = " (#{@labels['draft_label']} #{draft}"
169
175
  draftinfo += ", #{revdate}" if revdate
170
- draftinfo += ")"
176
+ draftinfo += ')'
171
177
  end
172
178
  l10n(draftinfo, @lang, @script)
173
179
  end
174
180
 
175
181
  def version(isoxml, _out)
176
- set(:edition, isoxml&.at(ns("//bibdata/edition"))&.text)
177
- set(:docyear, isoxml&.at(ns("//bibdata/copyright/from"))&.text)
178
- set(:draft, isoxml&.at(ns("//version/draft"))&.text)
179
- revdate = isoxml&.at(ns("//version/revision-date"))&.text
182
+ set(:edition, isoxml&.at(ns('//bibdata/edition'))&.text)
183
+ set(:docyear, isoxml&.at(ns('//bibdata/copyright/from'))&.text)
184
+ set(:draft, isoxml&.at(ns('//version/draft'))&.text)
185
+ revdate = isoxml&.at(ns('//version/revision-date'))&.text
180
186
  set(:revdate, revdate)
181
187
  set(:revdate_monthyear, monthyr(revdate))
182
188
  set(:draftinfo,
@@ -188,7 +194,7 @@ module IsoDoc
188
194
  set(:doctitle, main)
189
195
  end
190
196
 
191
- def subtitle(isoxml, _out)
197
+ def subtitle(_isoxml, _out)
192
198
  nil
193
199
  end
194
200
 
@@ -199,29 +205,29 @@ module IsoDoc
199
205
 
200
206
  def relations_partof(isoxml)
201
207
  std = isoxml.at(ns("//bibdata/relation[@type = 'partOf']")) || return
202
- id = std.at(ns(".//docidentifier"))
208
+ id = std.at(ns('.//docidentifier'))
203
209
  set(:partof, id.text) if id
204
210
  end
205
211
 
206
212
  def relations_obsoletes(isoxml)
207
213
  std = isoxml.at(ns("//bibdata/relation[@type = 'obsoletes']")) || return
208
- locality = std.at(ns(".//locality"))
209
- id = std.at(ns(".//docidentifier"))
214
+ locality = std.at(ns('.//locality'))
215
+ id = std.at(ns('.//docidentifier'))
210
216
  set(:obsoletes, id.text) if id
211
217
  set(:obsoletes_part, locality.text) if locality
212
218
  end
213
219
 
214
220
  def url(xml, _out)
215
- a = xml.at(ns("//bibdata/uri[not(@type)]")) and set(:url, a.text)
216
- a = xml.at(ns("//bibdata/uri[@type = 'html']")) and set(:html, a.text)
217
- a = xml.at(ns("//bibdata/uri[@type = 'xml']")) and set(:xml, a.text)
218
- a = xml.at(ns("//bibdata/uri[@type = 'pdf']")) and set(:pdf, a.text)
219
- a = xml.at(ns("//bibdata/uri[@type = 'doc']")) and set(:doc, a.text)
221
+ (a = xml.at(ns('//bibdata/uri[not(@type)]'))) && set(:url, a.text)
222
+ (a = xml.at(ns("//bibdata/uri[@type = 'html']"))) && set(:html, a.text)
223
+ (a = xml.at(ns("//bibdata/uri[@type = 'xml']"))) && set(:xml, a.text)
224
+ (a = xml.at(ns("//bibdata/uri[@type = 'pdf']"))) && set(:pdf, a.text)
225
+ (a = xml.at(ns("//bibdata/uri[@type = 'doc']"))) && set(:doc, a.text)
220
226
  end
221
227
 
222
228
  def keywords(isoxml, _out)
223
229
  ret = []
224
- isoxml.xpath(ns("//bibdata/keyword")).each { |kw| ret << kw.text }
230
+ isoxml.xpath(ns('//bibdata/keyword')).each { |kw| ret << kw.text }
225
231
  set(:keywords, ret)
226
232
  end
227
233
  end