isodoc 1.5.1 → 1.6.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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -1
  3. data/.rubocop.yml +6 -2
  4. data/Gemfile +2 -2
  5. data/isodoc.gemspec +11 -11
  6. data/lib/isodoc/base_style/all.css +7 -0
  7. data/lib/isodoc/base_style/metanorma_word.css +7 -0
  8. data/lib/isodoc/base_style/metanorma_word.scss +8 -0
  9. data/lib/isodoc/base_style/reset.css +7 -0
  10. data/lib/isodoc/base_style/reset.scss +9 -0
  11. data/lib/isodoc/base_style/scripts.html +187 -0
  12. data/lib/isodoc/class_utils.rb +6 -5
  13. data/lib/isodoc/convert.rb +28 -15
  14. data/lib/isodoc/css.rb +14 -4
  15. data/lib/isodoc/function/blocks.rb +4 -0
  16. data/lib/isodoc/function/inline.rb +31 -10
  17. data/lib/isodoc/function/references.rb +1 -1
  18. data/lib/isodoc/function/to_word_html.rb +19 -8
  19. data/lib/isodoc/function/utils.rb +1 -0
  20. data/lib/isodoc/html_function/postprocess.rb +8 -5
  21. data/lib/isodoc/pdf_convert.rb +1 -3
  22. data/lib/isodoc/presentation_function/block.rb +11 -5
  23. data/lib/isodoc/presentation_function/inline.rb +42 -38
  24. data/lib/isodoc/presentation_function/section.rb +1 -1
  25. data/lib/isodoc/presentation_xml_convert.rb +1 -1
  26. data/lib/isodoc/version.rb +1 -1
  27. data/lib/isodoc/word_function/inline.rb +6 -0
  28. data/lib/isodoc/word_function/postprocess.rb +16 -6
  29. data/lib/isodoc/xref.rb +1 -1
  30. data/lib/isodoc/xref/xref_gen.rb +16 -15
  31. data/lib/isodoc/xslfo_convert.rb +36 -25
  32. data/spec/assets/html_override.css +1 -0
  33. data/spec/assets/word_override.css +1 -0
  34. data/spec/isodoc/blocks_spec.rb +87 -0
  35. data/spec/isodoc/footnotes_spec.rb +1 -16
  36. data/spec/isodoc/inline_spec.rb +38 -1
  37. data/spec/isodoc/postproc_spec.rb +42 -14
  38. data/spec/isodoc/presentation_xml_spec.rb +345 -338
  39. data/spec/isodoc/section_spec.rb +910 -902
  40. data/spec/isodoc/table_spec.rb +566 -556
  41. data/spec/isodoc/terms_spec.rb +252 -256
  42. data/spec/isodoc/xref_spec.rb +2990 -2987
  43. data/spec/isodoc/xslfo_convert_spec.rb +39 -0
  44. data/spec/spec_helper.rb +30 -29
  45. metadata +71 -69
  46. data/.rubocop.ribose.yml +0 -65
  47. data/.rubocop.tb.yml +0 -650
data/lib/isodoc/css.rb CHANGED
@@ -14,11 +14,22 @@ module IsoDoc
14
14
  compiled_path
15
15
  end
16
16
 
17
+ def localpath(path)
18
+ return path if %r{^[A-Z]:|^/|^file:/}.match(path)
19
+ return path unless (@sourcedir || @localdir) && path
20
+ File.expand_path(File.join((@sourcedir || @localdir), path))
21
+ end
22
+
17
23
  # run this after @meta is populated
18
24
  def populate_css
19
- @htmlstylesheet = generate_css(@htmlstylesheet_name, true)
20
- @wordstylesheet = generate_css(@wordstylesheet_name, false)
21
- @standardstylesheet = generate_css(@standardstylesheet_name, false)
25
+ @htmlstylesheet = generate_css(localpath(@htmlstylesheet_name), true)
26
+ @wordstylesheet = generate_css(localpath(@wordstylesheet_name), false)
27
+ @standardstylesheet =
28
+ generate_css(localpath(@standardstylesheet_name), false)
29
+ @htmlstylesheet_override_name and @htmlstylesheet_override =
30
+ File.open(localpath(@htmlstylesheet_override_name))
31
+ @wordstylesheet_override_name and @wordstylesheet_override =
32
+ File.open(localpath(@wordstylesheet_override_name))
22
33
  end
23
34
 
24
35
  def default_fonts(_options)
@@ -77,7 +88,6 @@ module IsoDoc
77
88
  # stripwordcss if HTML stylesheet, !stripwordcss if DOC stylesheet
78
89
  def generate_css(filename, stripwordcss)
79
90
  return nil if filename.nil?
80
-
81
91
  filename = precompiled_style_or_original(filename)
82
92
  stylesheet = File.read(filename, encoding: 'UTF-8')
83
93
  stylesheet = populate_template(stylesheet, :word)
@@ -205,5 +205,9 @@ module IsoDoc::Function
205
205
  !(node["format"].split(/,/).include? @format.to_s)
206
206
  out.passthrough node.text
207
207
  end
208
+
209
+ def svg_parse(node, out)
210
+ out << node.to_xml
211
+ end
208
212
  end
209
213
  end
@@ -23,21 +23,26 @@ module IsoDoc::Function
23
23
  end
24
24
 
25
25
  def xref_parse(node, out)
26
- target = /#/.match(node["target"]) ? node["target"].sub(/#/, ".html#") :
27
- "##{node["target"]}"
28
- out.a(**{ "href": target }) { |l| no_locality_parse(node, l) }
26
+ target = if /#/.match?(node["target"])
27
+ node["target"].sub(/#/, ".html#")
28
+ else
29
+ "##{node['target']}"
30
+ end
31
+ out.a(**{ "href": target }) { |l| no_locality_parse(node, l) }
29
32
  end
30
33
 
31
34
  def suffix_url(url)
32
- return url if %r{^http[s]?://}.match(url)
35
+ return url if %r{^https?://}.match?(url)
36
+
33
37
  url.sub(/#{File.extname(url)}$/, ".html")
34
38
  end
35
39
 
36
40
  def eref_target(node)
37
- href = "#" + node["bibitemid"]
41
+ href = "##{node['bibitemid']}"
38
42
  url = node.at(ns("//bibitem[@id = '#{node['bibitemid']}']/"\
39
43
  "uri[@type = 'citation']"))
40
44
  return href unless url
45
+
41
46
  href = suffix_url(url.text)
42
47
  anchor = node&.at(ns(".//locality[@type = 'anchor']"))&.text&.strip
43
48
  anchor and href += "##{anchor}"
@@ -68,10 +73,11 @@ module IsoDoc::Function
68
73
  end
69
74
 
70
75
  def stem_parse(node, out)
71
- ooml = if node["type"] == "AsciiMath"
76
+ ooml = case node["type"]
77
+ when "AsciiMath"
72
78
  "#{@openmathdelim}#{HTMLEntities.new.encode(node.text)}"\
73
79
  "#{@closemathdelim}"
74
- elsif node["type"] == "MathML" then node.first_element_child.to_s
80
+ when "MathML" then node.first_element_child.to_s
75
81
  else
76
82
  HTMLEntities.new.encode(node.text)
77
83
  end
@@ -93,7 +99,7 @@ module IsoDoc::Function
93
99
  height: node["height"] || "auto",
94
100
  width: node["width"] || "auto",
95
101
  title: node["title"],
96
- alt: node["alt"] }
102
+ alt: node["alt"] }
97
103
  out.img **attr_code(attrs)
98
104
  image_title_parse(out, caption)
99
105
  end
@@ -106,12 +112,27 @@ module IsoDoc::Function
106
112
 
107
113
  def text_parse(node, out)
108
114
  return if node.nil? || node.text.nil?
115
+
109
116
  text = node.to_s
110
- text = text.gsub("\n", "<br/>").gsub("<br/> ", "<br/>&nbsp;").
111
- gsub(/[ ](?=[ ])/, "&nbsp;") if in_sourcecode
117
+ if in_sourcecode
118
+ text = text.gsub("\n", "<br/>").gsub("<br/> ", "<br/>&nbsp;")
119
+ .gsub(/ (?= )/, "&nbsp;")
120
+ end
112
121
  out << text
113
122
  end
114
123
 
124
+ def add_parse(node, out)
125
+ out.span **{class: "addition"} do |e|
126
+ node.children.each { |n| parse(n, e) }
127
+ end
128
+ end
129
+
130
+ def del_parse(node, out)
131
+ out.span **{class: "deletion"} do |e|
132
+ node.children.each { |n| parse(n, e) }
133
+ end
134
+ end
135
+
115
136
  def error_parse(node, out)
116
137
  text = node.to_xml.gsub(/</, "&lt;").gsub(/>/, "&gt;")
117
138
  out.para do |p|
@@ -87,7 +87,7 @@ module IsoDoc::Function
87
87
 
88
88
  def omit_docid_prefix(prefix)
89
89
  return true if prefix.nil? || prefix.empty?
90
- return %w(ISO IEC ITU W3C metanorma).include? prefix
90
+ return %w(ISO IEC IEV ITU W3C csd metanorma rfc-anchor).include? prefix
91
91
  end
92
92
 
93
93
  def date_note_process(b, ref)
@@ -19,14 +19,21 @@ module IsoDoc::Function
19
19
  def init_file(filename, debug)
20
20
  filepath = Pathname.new(filename)
21
21
  filename = filepath.sub_ext('').sub(/\.presentation$/, "").to_s
22
+ dir = init_dir(filename, debug)
23
+ @filename = filename
24
+ @localdir = filepath.parent.to_s + '/'
25
+ @sourcedir = @localdir
26
+ @sourcefilename and @sourcedir = Pathname.new(@sourcefilename).parent.to_s + '/'
27
+ [filename, dir]
28
+ end
29
+
30
+ def init_dir(filename, debug)
22
31
  dir = "#{filename}_files"
23
32
  unless debug
24
33
  Dir.mkdir(dir, 0777) unless File.exists?(dir)
25
34
  FileUtils.rm_rf "#{dir}/*"
26
35
  end
27
- @filename = filename
28
- @localdir = filepath.parent.to_s + '/'
29
- [filename, dir]
36
+ dir
30
37
  end
31
38
 
32
39
  # tmp image dir is same directory as @filename
@@ -44,15 +51,16 @@ module IsoDoc::Function
44
51
  if @standardstylesheet
45
52
  head.style do |style|
46
53
  @standardstylesheet.open
47
- stylesheet = @standardstylesheet.read.
48
- gsub("FILENAME", File.basename(filename).sub(/\.presentation$/, ""))
54
+ stylesheet = @standardstylesheet.read.gsub(
55
+ "FILENAME", File.basename(filename).sub(/\.presentation$/, "")
56
+ )
49
57
  style.comment "\n#{stylesheet}\n"
50
58
  end
51
59
  end
52
60
  end
53
61
 
54
62
  def body_attr
55
- { lang: "#{@lang}" }
63
+ { lang: @lang.to_s }
56
64
  end
57
65
 
58
66
  def make_body(xml, docxml)
@@ -125,7 +133,7 @@ module IsoDoc::Function
125
133
  i = scope isoxml, out, 0
126
134
  i = norm_ref isoxml, out, i
127
135
  i = terms_defs isoxml, out, i
128
- i = symbols_abbrevs isoxml, out, i
136
+ symbols_abbrevs isoxml, out, i
129
137
  clause isoxml, out
130
138
  annex isoxml, out
131
139
  bibliography isoxml, out
@@ -133,7 +141,7 @@ module IsoDoc::Function
133
141
 
134
142
  def boilerplate(node, out)
135
143
  boilerplate = node.at(ns("//boilerplate")) or return
136
- out.div **{class: "authority"} do |s|
144
+ out.div **{ class: "authority" } do |s|
137
145
  boilerplate.children.each do |n|
138
146
  if n.name == "title"
139
147
  s.h1 do |h|
@@ -225,6 +233,9 @@ module IsoDoc::Function
225
233
  when "passthrough" then passthrough_parse(node, out)
226
234
  when "amend" then amend_parse(node, out)
227
235
  when "tab" then clausedelimspace(out) # in Presentation XML only
236
+ when "svg" then svg_parse(node, out) # in Presentation XML only
237
+ when "add" then add_parse(node, out)
238
+ when "del" then del_parse(node, out)
228
239
  else
229
240
  error_parse(node, out)
230
241
  end
@@ -123,6 +123,7 @@ module IsoDoc::Function
123
123
  h1 = to_xhtml_fragment(h.dup)
124
124
  h1.traverse do |x|
125
125
  x.replace(' ') if x.name == 'span' && /mso-tab-count/.match(x['style'])
126
+ x.remove if x.name == 'img'
126
127
  x.remove if x.name == 'span' && x['class'] == 'MsoCommentReference'
127
128
  x.remove if x.name == 'a' && x['class'] == 'FootnoteRef'
128
129
  x.remove if x.name == 'span' && /mso-bookmark/.match(x['style'])
@@ -44,12 +44,14 @@ module IsoDoc::HtmlFunction
44
44
  IsoDoc::HtmlFunction::MathvariantToPlain.new(docxml).convert
45
45
  end
46
46
 
47
- def htmlstylesheet
48
- @htmlstylesheet.open
49
- stylesheet = @htmlstylesheet.read
47
+ def htmlstylesheet(file)
48
+ return if file.nil?
49
+ file.open if file.is_a?(Tempfile)
50
+ stylesheet = file.read
50
51
  xml = Nokogiri::XML("<style/>")
51
52
  xml.children.first << Nokogiri::XML::Comment.new(xml, "\n#{stylesheet}\n")
52
- @htmlstylesheet.close!
53
+ file.close
54
+ file.unlink if file.is_a?(Tempfile)
53
55
  xml.root.to_s
54
56
  end
55
57
 
@@ -57,7 +59,8 @@ module IsoDoc::HtmlFunction
57
59
  return docxml unless @htmlstylesheet
58
60
  title = docxml.at("//*[local-name() = 'head']/*[local-name() = 'title']")
59
61
  head = docxml.at("//*[local-name() = 'head']")
60
- head << htmlstylesheet
62
+ head << htmlstylesheet(@htmlstylesheet)
63
+ s = htmlstylesheet(@htmlstylesheet_override) and head << s
61
64
  docxml
62
65
  end
63
66
 
@@ -42,9 +42,7 @@ module IsoDoc
42
42
  end
43
43
 
44
44
  def xref_parse(node, out)
45
- target = /#/.match(node["target"]) ? node["target"].sub(/#/, ".pdf#") :
46
- "##{node["target"]}"
47
- out.a(**{ "href": target }) { |l| l << get_linkend(node) }
45
+ out.a(**{ "href": target_pdf(node) }) { |l| l << get_linkend(node) }
48
46
  end
49
47
  end
50
48
  end
@@ -1,3 +1,5 @@
1
+ require "base64"
2
+
1
3
  module IsoDoc
2
4
  class PresentationXMLConvert < ::IsoDoc::Convert
3
5
  def lower2cap(s)
@@ -6,9 +8,8 @@ module IsoDoc
6
8
  end
7
9
 
8
10
  def figure(docxml)
9
- docxml.xpath(ns("//figure")).each do |f|
10
- figure1(f)
11
- end
11
+ docxml.xpath(ns("//image")).each { |f| svg_extract(f) }
12
+ docxml.xpath(ns("//figure")).each { |f| figure1(f) }
12
13
  docxml.xpath(ns("//svgmap")).each do |s|
13
14
  if f = s.at(ns("./figure")) then s.replace(f)
14
15
  else
@@ -17,9 +18,14 @@ module IsoDoc
17
18
  end
18
19
  end
19
20
 
21
+ def svg_extract(f)
22
+ return unless %r{^data:image/svg\+xml;base64,}.match(f["src"])
23
+ svg = Base64.strict_decode64(f["src"].sub(%r{^data:image/svg\+xml;base64,}, ""))
24
+ f.replace(svg.sub(/<\?xml[^>]*>/, ""))
25
+ end
26
+
20
27
  def figure1(f)
21
- return sourcecode1(f) if f["class"] == "pseudocode" ||
22
- f["type"] == "pseudocode"
28
+ return sourcecode1(f) if f["class"] == "pseudocode" || f["type"] == "pseudocode"
23
29
  return if labelled_ancestor(f) && f.ancestors("figure").empty?
24
30
  return if f.at(ns("./figure")) and !f.at(ns("./name"))
25
31
  lbl = @xrefs.anchor(f['id'], :label, false) or return
@@ -1,4 +1,5 @@
1
1
  require "twitter_cldr"
2
+ require "bigdecimal"
2
3
 
3
4
  module IsoDoc
4
5
  class PresentationXMLConvert < ::IsoDoc::Convert
@@ -10,8 +11,7 @@ module IsoDoc
10
11
  if node["citeas"].nil? && node["bibitemid"]
11
12
  return @xrefs.anchor(node["bibitemid"] ,:xref) || "???"
12
13
  elsif node["target"] && node["droploc"]
13
- return @xrefs.anchor(node["target"], :value) ||
14
- @xrefs.anchor(node["target"], :label) ||
14
+ return @xrefs.anchor(node["target"], :value) || @xrefs.anchor(node["target"], :label) ||
15
15
  @xrefs.anchor(node["target"], :xref) || "???"
16
16
  elsif node["target"] && !/.#./.match(node["target"])
17
17
  linkend = anchor_linkend1(node)
@@ -22,9 +22,8 @@ module IsoDoc
22
22
  def anchor_linkend1(node)
23
23
  linkend = @xrefs.anchor(node["target"], :xref)
24
24
  container = @xrefs.anchor(node["target"], :container, false)
25
- (container && get_note_container_id(node) != container &&
26
- @xrefs.get[node["target"]]) &&
27
- linkend = prefix_container(container, linkend, node["target"])
25
+ (container && get_note_container_id(node) != container && @xrefs.get[node["target"]]) &&
26
+ linkend = prefix_container(container, linkend, node["target"])
28
27
  capitalise_xref(node, linkend)
29
28
  end
30
29
 
@@ -35,13 +34,11 @@ module IsoDoc
35
34
  return linkend if linkend[0,1].match(/\p{Upper}/)
36
35
  prec = nearest_block_parent(node).xpath("./descendant-or-self::text()") &
37
36
  node.xpath("./preceding::text()")
38
- (prec.empty? || /(?!<[^.].)\.\s+$/.match(prec.map { |p| p.text }.join)) ?
39
- linkend&.capitalize : linkend
37
+ (prec.empty? || /(?!<[^.].)\.\s+$/.match(prec.map { |p| p.text }.join)) ? linkend&.capitalize : linkend
40
38
  end
41
39
 
42
40
  def nearest_block_parent(node)
43
- until %w(p title td th name formula
44
- li dt dd sourcecode pre).include?(node.name)
41
+ until %w(p title td th name formula li dt dd sourcecode pre).include?(node.name)
45
42
  node = node.parent
46
43
  end
47
44
  node
@@ -53,69 +50,79 @@ module IsoDoc
53
50
  end
54
51
  end
55
52
 
56
- def get_linkend(n)
57
- contents = non_locality_elems(n).select { |c| !c.text? || /\S/.match(c) }
53
+ def get_linkend(node)
54
+ contents = non_locality_elems(node).select { |c| !c.text? || /\S/.match(c) }
58
55
  return unless contents.empty?
59
- link = anchor_linkend(n, docid_l10n(n["target"] || n["citeas"]))
60
- link += eref_localities(n.xpath(ns("./locality | ./localityStack")), link)
61
- non_locality_elems(n).each { |n| n.remove }
62
- n.add_child(link)
56
+ link = anchor_linkend(node, docid_l10n(node["target"] || node["citeas"]))
57
+ link += eref_localities(node.xpath(ns("./locality | ./localityStack")), link, node)
58
+ non_locality_elems(node).each { |n| n.remove }
59
+ node.add_child(link)
63
60
  end
64
61
  # so not <origin bibitemid="ISO7301" citeas="ISO 7301">
65
62
  # <locality type="section"><reference>3.1</reference></locality></origin>
66
63
 
67
- def eref_localities(refs, target)
64
+ def eref_localities(refs, target, n)
68
65
  ret = ""
69
66
  refs.each_with_index do |r, i|
70
67
  delim = ","
71
68
  delim = ";" if r.name == "localityStack" && i>0
72
- ret = eref_locality_stack(r, i, target, delim, ret)
69
+ ret = eref_locality_stack(r, i, target, delim, ret, n)
73
70
  end
74
71
  ret
75
72
  end
76
73
 
77
- def eref_locality_stack(r, i, target, delim, ret)
74
+ def eref_locality_stack(r, i, target, delim, ret, n)
78
75
  if r.name == "localityStack"
79
76
  r.elements.each_with_index do |rr, j|
80
- ret += eref_localities0(rr, j, target, delim)
77
+ ret += eref_localities0(rr, j, target, delim, n)
81
78
  delim = ","
82
79
  end
83
80
  else
84
- ret += eref_localities0(r, i, target, delim)
81
+ ret += eref_localities0(r, i, target, delim, n)
85
82
  end
86
83
  ret
87
84
  end
88
85
 
89
- def eref_localities0(r, i, target, delim)
86
+ def eref_localities0(r, i, target, delim, n)
90
87
  if r["type"] == "whole" then l10n("#{delim} #{@i18n.wholeoftext}")
91
88
  else
92
89
  eref_localities1(target, r["type"], r.at(ns("./referenceFrom")),
93
- r.at(ns("./referenceTo")), delim, @lang)
90
+ r.at(ns("./referenceTo")), delim, n, @lang)
94
91
  end
95
92
  end
96
93
 
97
94
  # TODO: move to localization file
98
- def eref_localities1_zh(target, type, from, to, delim)
95
+ def eref_localities1_zh(target, type, from, to, n, delim)
99
96
  ret = "#{delim} 第#{from.text}" if from
100
97
  ret += "&ndash;#{to.text}" if to
101
98
  loc = (@i18n.locality[type] || type.sub(/^locality:/, "").capitalize )
102
- ret += " #{loc}"
99
+ ret += " #{loc}" unless n["droploc"] == "true"
103
100
  ret
104
101
  end
105
102
 
106
103
  # TODO: move to localization file
107
- def eref_localities1(target, type, from, to, delim, lang = "en")
104
+ def eref_localities1(target, type, from, to, delim, n, lang = "en")
108
105
  return "" if type == "anchor"
109
- lang == "zh" and
110
- return l10n(eref_localities1_zh(target, type, from, to, delim))
106
+ lang == "zh" and return l10n(eref_localities1_zh(target, type, from, to, n, delim))
111
107
  ret = delim
112
- loc = @i18n.locality[type] || type.sub(/^locality:/, "").capitalize
113
- ret += " #{loc}"
108
+ ret += eref_locality_populate(type, n)
114
109
  ret += " #{from.text}" if from
115
110
  ret += "&ndash;#{to.text}" if to
116
111
  l10n(ret)
117
112
  end
118
113
 
114
+ def eref_locality_populate(type, n)
115
+ return "" if n["droploc"] == "true"
116
+ loc = @i18n.locality[type] || type.sub(/^locality:/, "")
117
+ loc = case n["case"]
118
+ when "capital" then loc.capitalize
119
+ when "lowercase" then loc.downcase
120
+ else
121
+ loc.capitalize
122
+ end
123
+ " #{loc}"
124
+ end
125
+
119
126
  def xref(docxml)
120
127
  docxml.xpath(ns("//xref")).each { |f| xref1(f) }
121
128
  end
@@ -163,23 +170,22 @@ module IsoDoc
163
170
  # TwitterCldr::DataReaders::NumberDataReader.new(locale).symbols
164
171
  def localize_maths(f, locale)
165
172
  f.xpath(".//m:mn", MATHML).each do |x|
166
- num = /\./.match(x.text) ? x.text.to_f : x.text.to_i
173
+ num = BigDecimal(x.text)
167
174
  precision = /\./.match(x.text) ? x.text.sub(/^.*\./, "").size : 0
168
175
  x.children = localized_number(num, locale, precision)
169
176
  end
170
177
  end
171
178
 
172
- # By itself twiiter cldr does not support fraction part digits grouping
179
+ # By itself twitter-cldr does not support fraction part digits grouping
173
180
  # and custom delimeter, will decorate fraction part manually
174
181
  def localized_number(num, locale, precision)
175
- localized = precision == 0 ? num.localize(locale).to_s :
182
+ localized = (precision == 0) ? num.localize(locale).to_s :
176
183
  num.localize(locale).to_decimal.to_s(:precision => precision)
177
184
  twitter_cldr_reader_symbols = twitter_cldr_reader(locale)
178
185
  return localized unless twitter_cldr_reader_symbols[:decimal]
179
186
  integer, fraction = localized.split(twitter_cldr_reader_symbols[:decimal])
180
187
  return localized if fraction.nil? || fraction.length.zero?
181
- [integer, decorate_fraction_part(fraction, locale)].
182
- join(twitter_cldr_reader_symbols[:decimal])
188
+ [integer, decorate_fraction_part(fraction, locale)].join(twitter_cldr_reader_symbols[:decimal])
183
189
  end
184
190
 
185
191
  def decorate_fraction_part(fract, locale)
@@ -229,8 +235,7 @@ module IsoDoc
229
235
  end
230
236
 
231
237
  def variant1(node)
232
- if (!node["lang"] || node["lang"] == @lang) &&
233
- (!node["script"] || node["script"] == @script)
238
+ if (!node["lang"] || node["lang"] == @lang) && (!node["script"] || node["script"] == @script)
234
239
  elsif found_matching_variant_sibling(node)
235
240
  node["remove"] = "true"
236
241
  else
@@ -243,8 +248,7 @@ module IsoDoc
243
248
  foll = node.xpath("./following-sibling::xmlns:variant")
244
249
  found = false
245
250
  (prev + foll).each do |n|
246
- found = true if n["lang"] == @lang &&
247
- (!n["script"] || n["script"] == @script)
251
+ found = true if n["lang"] == @lang && (!n["script"] || n["script"] == @script)
248
252
  end
249
253
  found
250
254
  end