isodoc 1.0.29 → 1.1.3.pre.alpha2

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +6 -12
  3. data/.github/workflows/ubuntu.yml +18 -20
  4. data/.github/workflows/windows.yml +6 -12
  5. data/Rakefile +3 -1
  6. data/isodoc.gemspec +2 -2
  7. data/lib/isodoc.rb +2 -0
  8. data/lib/isodoc/base_style/all.css +207 -0
  9. data/lib/isodoc/base_style/blocks.css +0 -0
  10. data/lib/isodoc/base_style/coverpage.css +0 -0
  11. data/lib/isodoc/base_style/defaults.css +0 -0
  12. data/lib/isodoc/base_style/metanorma_word.css +34 -0
  13. data/lib/isodoc/base_style/metanorma_word.scss +0 -1
  14. data/lib/isodoc/base_style/nav.css +0 -0
  15. data/lib/isodoc/base_style/reset.css +105 -0
  16. data/lib/isodoc/base_style/reset.scss +3 -3
  17. data/lib/isodoc/base_style/typography.css +0 -0
  18. data/lib/isodoc/common.rb +0 -4
  19. data/lib/isodoc/convert.rb +121 -58
  20. data/lib/isodoc/function/blocks.rb +3 -3
  21. data/lib/isodoc/function/blocks_example_note.rb +2 -2
  22. data/lib/isodoc/function/inline.rb +5 -5
  23. data/lib/isodoc/function/references.rb +29 -34
  24. data/lib/isodoc/function/reqt.rb +1 -1
  25. data/lib/isodoc/function/section.rb +7 -11
  26. data/lib/isodoc/function/table.rb +1 -1
  27. data/lib/isodoc/function/terms.rb +2 -2
  28. data/lib/isodoc/function/to_word_html.rb +2 -2
  29. data/lib/isodoc/function/utils.rb +57 -51
  30. data/lib/isodoc/gem_tasks.rb +117 -0
  31. data/lib/isodoc/headlesshtml_convert.rb +7 -6
  32. data/lib/isodoc/html_convert.rb +2 -1
  33. data/lib/isodoc/html_function/html.rb +1 -1
  34. data/lib/isodoc/html_function/postprocess.rb +1 -1
  35. data/lib/isodoc/metadata.rb +69 -63
  36. data/lib/isodoc/pdf_convert.rb +8 -6
  37. data/lib/isodoc/presentation_xml_convert.rb +29 -0
  38. data/lib/isodoc/sassc_importer.rb +11 -0
  39. data/lib/isodoc/version.rb +1 -1
  40. data/lib/isodoc/word_convert.rb +2 -1
  41. data/lib/isodoc/word_function/body.rb +1 -1
  42. data/lib/isodoc/word_function/postprocess.rb +1 -0
  43. data/lib/isodoc/xref.rb +59 -0
  44. data/lib/isodoc/{function → xref}/xref_anchor.rb +10 -21
  45. data/lib/isodoc/xref/xref_counter.rb +74 -0
  46. data/lib/isodoc/{function → xref}/xref_gen.rb +9 -22
  47. data/lib/isodoc/{function → xref}/xref_gen_seq.rb +34 -26
  48. data/lib/isodoc/{function → xref}/xref_sect_gen.rb +33 -23
  49. data/lib/isodoc/xslfo_convert.rb +16 -4
  50. data/spec/assets/{html.css → html.scss} +0 -0
  51. data/spec/isodoc/footnotes_spec.rb +2 -2
  52. data/spec/isodoc/postproc_spec.rb +1319 -1345
  53. data/spec/isodoc/presentation_xml_spec.rb +20 -0
  54. data/spec/isodoc/ref_spec.rb +1 -1
  55. data/spec/isodoc/section_spec.rb +52 -0
  56. metadata +40 -28
  57. data/lib/isodoc/function/xref_counter.rb +0 -84
@@ -49,9 +49,9 @@ time, mark, audio, video {
49
49
  }
50
50
 
51
51
  html, body, div, span, applet, object, iframe,
52
- p, blockquote,
53
- a, abbr, acronym, address, big, cite,
54
- del, dfn, em, img, ins, q, s,
52
+ p, blockquote,
53
+ a, abbr, acronym, address, big, cite,
54
+ del, dfn, em, img, ins, q, s,
55
55
  small, strike, strong, sub, sup, var,
56
56
  b, u, i, center,
57
57
  dl, dt, dd, ol, ul, li,
File without changes
@@ -9,8 +9,6 @@ require_relative "./function/table"
9
9
  require_relative "./function/terms"
10
10
  require_relative "./function/to_word_html"
11
11
  require_relative "./function/utils"
12
- require_relative "./function/xref_gen"
13
- require_relative "./function/xref_sect_gen"
14
12
  require_relative "./function/reqt"
15
13
  require_relative "./class_utils"
16
14
 
@@ -27,8 +25,6 @@ module IsoDoc
27
25
  include Function::Terms
28
26
  include Function::ToWordHtml
29
27
  include Function::Utils
30
- include Function::XrefGen
31
- include Function::XrefSectGen
32
28
 
33
29
  extend ::IsoDoc::ClassUtils
34
30
  end
@@ -1,7 +1,8 @@
1
- require "isodoc/common"
2
- require "sassc"
3
- require "fileutils"
4
- require "tempfile"
1
+ # frozen_string_literal: true
2
+
3
+ require 'isodoc/common'
4
+ require 'fileutils'
5
+ require 'tempfile'
5
6
 
6
7
  module IsoDoc
7
8
  class Convert < ::IsoDoc::Common
@@ -27,15 +28,25 @@ module IsoDoc
27
28
  # scripts_pdf: Scripts file for PDF
28
29
  # datauriimage: Encode images in HTML output as data URIs
29
30
  def initialize(options)
30
- @libdir = File.dirname(__FILE__) unless @libdir
31
- options.merge!(default_fonts(options)) { |_, old, new| old || new }.
32
- merge!(default_file_locations(options)) { |_, old, new| old || new }
31
+ @libdir ||= File.dirname(__FILE__)
32
+ options.merge!(default_fonts(options)) do |_, old, new|
33
+ old || new
34
+ end
35
+ .merge!(default_file_locations(options)) do |_, old, new|
36
+ old || new
37
+ end
33
38
  @options = options
34
39
  @files_to_delete = []
35
40
  @tempfile_cache = []
36
- @htmlstylesheet_name = options[:htmlstylesheet]
37
- @wordstylesheet_name = options[:wordstylesheet]
38
- @standardstylesheet_name = options[:standardstylesheet]
41
+ @htmlstylesheet_name = precompiled_style_or_original(
42
+ options[:htmlstylesheet]
43
+ )
44
+ @wordstylesheet_name = precompiled_style_or_original(
45
+ options[:wordstylesheet]
46
+ )
47
+ @standardstylesheet_name = precompiled_style_or_original(
48
+ options[:standardstylesheet]
49
+ )
39
50
  @header = options[:header]
40
51
  @htmlcoverpage = options[:htmlcoverpage]
41
52
  @wordcoverpage = options[:wordcoverpage]
@@ -48,12 +59,11 @@ module IsoDoc
48
59
  @olstyle = options[:olstyle]
49
60
  @datauriimage = options[:datauriimage]
50
61
  @suppressheadingnumbers = options[:suppressheadingnumbers]
51
- @break_up_urls_in_tables = options[:break_up_urls_in_tables] == "true"
52
- @termdomain = ""
62
+ @break_up_urls_in_tables = options[:break_up_urls_in_tables] == 'true'
63
+ @termdomain = ''
53
64
  @termexample = false
54
65
  @note = false
55
66
  @sourcecode = false
56
- @anchors = {}
57
67
  @footnotes = []
58
68
  @comments = []
59
69
  @in_footnote = false
@@ -62,40 +72,57 @@ module IsoDoc
62
72
  @in_figure = false
63
73
  @seen_footnote = Set.new
64
74
  @c = HTMLEntities.new
65
- @openmathdelim = "`"
66
- @closemathdelim = "`"
67
- @lang = "en"
68
- @script = "Latn"
75
+ @openmathdelim = '`'
76
+ @closemathdelim = '`'
77
+ @lang = 'en'
78
+ @script = 'Latn'
69
79
  @maxwidth = 1200
70
80
  @maxheight = 800
71
81
  @wordToClevels = options[:doctoclevels].to_i
72
- @wordToClevels = 2 if @wordToClevels == 0
82
+ @wordToClevels = 2 if @wordToClevels.zero?
73
83
  @htmlToClevels = options[:htmltoclevels].to_i
74
- @htmlToClevels = 2 if @htmlToClevels == 0
75
- @bookmarks_allocated = {"X" => true}
84
+ @htmlToClevels = 2 if @htmlToClevels.zero?
85
+ @bookmarks_allocated = { 'X' => true }
76
86
  @fn_bookmarks = {}
77
87
  end
78
88
 
89
+ # Check if already compiled version(.css) exists,
90
+ # if not, return original scss file. During release
91
+ # we compile scss into css files in order to not depend on scss
92
+ def precompiled_style_or_original(stylesheet_path)
93
+ # Already have compiled stylesheet, use it
94
+ return stylesheet_path if stylesheet_path.nil? ||
95
+ File.extname(stylesheet_path) == '.css'
96
+
97
+ basename = File.basename(stylesheet_path, '.*')
98
+ compiled_path = File.join(File.dirname(stylesheet_path),
99
+ "#{basename}.css")
100
+ return stylesheet_path unless File.file?(compiled_path)
101
+
102
+ compiled_path
103
+ end
104
+
79
105
  # run this after @meta is populated
80
106
  def populate_css
81
- @htmlstylesheet = generate_css(@htmlstylesheet_name, true, extract_fonts(options))
82
- @wordstylesheet = generate_css(@wordstylesheet_name, false, extract_fonts(options))
83
- @standardstylesheet = generate_css(@standardstylesheet_name, false, extract_fonts(options))
107
+ @htmlstylesheet = generate_css(@htmlstylesheet_name, true)
108
+ @wordstylesheet = generate_css(@wordstylesheet_name, false)
109
+ @standardstylesheet = generate_css(@standardstylesheet_name, false)
84
110
  end
85
111
 
86
112
  def tmpimagedir_suffix
87
- "_images"
113
+ '_images'
88
114
  end
89
115
 
90
116
  def default_fonts(_options)
91
117
  {
92
- bodyfont: "Arial",
93
- headerfont: "Arial",
94
- monospacefont: "Courier",
118
+ bodyfont: 'Arial',
119
+ headerfont: 'Arial',
120
+ monospacefont: 'Courier'
95
121
  }
96
122
  end
97
123
 
98
- # none for this parent gem, but will be populated in child gems which have access to stylesheets &c; e.g.
124
+ # none for this parent gem, but will be populated in child
125
+ # gems which have access to stylesheets &c; e.g.
99
126
  # {
100
127
  # htmlstylesheet: html_doc_path("htmlstyle.scss"),
101
128
  # htmlcoverpage: html_doc_path("html_rsd_titlepage.html"),
@@ -113,41 +140,62 @@ module IsoDoc
113
140
  {}
114
141
  end
115
142
 
116
- # extract fonts for use in generate_css
117
- def extract_fonts(options)
118
- b = options[:bodyfont] || "Arial"
119
- h = options[:headerfont] || "Arial"
120
- m = options[:monospacefont] || "Courier"
143
+ def fonts_options
144
+ {
145
+ 'bodyfont' => options[:bodyfont] || 'Arial',
146
+ 'headerfont' => options[:headerfont] || 'Arial',
147
+ 'monospacefont' => options[:monospacefont] || 'Courier'
148
+ }
149
+ end
150
+
151
+ def scss_fontheader
152
+ b = options[:bodyfont] || 'Arial'
153
+ h = options[:headerfont] || 'Arial'
154
+ m = options[:monospacefont] || 'Courier'
121
155
  "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
122
156
  end
123
157
 
124
158
  def html_doc_path(file)
125
- File.join(@libdir, File.join("html", file))
159
+ File.join(@libdir, File.join('html', file))
126
160
  end
127
161
 
128
- def generate_css(filename, stripwordcss, fontheader)
129
- return nil unless filename
130
- stylesheet = File.read(filename, encoding: "UTF-8")
162
+ def convert_scss(filename, stylesheet)
163
+ require 'sassc'
164
+ require 'isodoc/sassc_importer'
165
+
166
+ [File.join(Gem.loaded_specs['isodoc'].full_gem_path,
167
+ 'lib', 'isodoc'),
168
+ File.dirname(filename)].each do |name|
169
+ SassC.load_paths << name
170
+ end
171
+ SassC::Engine.new(scss_fontheader + stylesheet, syntax: :scss,
172
+ importer: SasscImporter)
173
+ .render
174
+ end
175
+
176
+ def generate_css(filename, stripwordcss)
177
+ return nil if filename.nil?
178
+
179
+ stylesheet = File.read(filename, encoding: 'UTF-8')
131
180
  stylesheet = populate_template(stylesheet, :word)
132
- stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, "\\1") if stripwordcss
133
- SassC.load_paths << File.join(Gem.loaded_specs['isodoc'].full_gem_path,
134
- "lib", "isodoc")
135
- SassC.load_paths << File.dirname(filename)
136
- engine = SassC::Engine.new(fontheader + stylesheet, syntax: :scss)
137
- Tempfile.open([File.basename(filename, ".*"), "css"],
138
- :encoding => "utf-8") do |f|
139
- f.write(engine.render)
181
+ stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, '\\1') if stripwordcss
182
+ if File.extname(filename) == '.scss'
183
+ stylesheet = convert_scss(filename, stylesheet)
184
+ end
185
+ Tempfile.open([File.basename(filename, '.*'), 'css'],
186
+ encoding: 'utf-8') do |f|
187
+ f.write(stylesheet)
140
188
  f
141
189
  end
142
190
  end
143
191
 
144
192
  def convert1(docxml, filename, dir)
145
- anchor_names docxml
193
+ @xrefs.parse docxml
146
194
  noko do |xml|
147
- xml.html **{ lang: "#{@lang}" } do |html|
148
- html.parent.add_namespace("epub", "http://www.idpf.org/2007/ops")
195
+ xml.html **{ lang: @lang.to_s } do |html|
196
+ html.parent.add_namespace('epub', 'http://www.idpf.org/2007/ops')
149
197
  info docxml, nil
150
- populate_css()
198
+ populate_css
151
199
  html.head { |head| define_head head, filename, dir }
152
200
  make_body(html, docxml)
153
201
  end
@@ -158,25 +206,40 @@ module IsoDoc
158
206
  @meta = Metadata.new(lang, script, labels)
159
207
  end
160
208
 
161
- def convert_init(file, filename, debug)
209
+ def xref_init(lang, script, klass, labels, options)
210
+ @xrefs = Xref.new(lang, script, klass, labels, options)
211
+ end
212
+
213
+ def convert_init(file, input_filename, debug)
162
214
  docxml = Nokogiri::XML(file)
163
- filename, dir = init_file(filename, debug)
164
- docxml.root.default_namespace = ""
165
- lang = docxml&.at(ns("//bibdata/language"))&.text || @lang
166
- script = docxml&.at(ns("//bibdata/script"))&.text || @script
215
+ filename, dir = init_file(input_filename, debug)
216
+ docxml.root.default_namespace = ''
217
+ lang = docxml&.at(ns('//bibdata/language'))&.text || @lang
218
+ script = docxml&.at(ns('//bibdata/script'))&.text || @script
167
219
  i18n_init(lang, script)
168
220
  metadata_init(lang, script, @labels)
221
+ @meta.fonts_options = fonts_options
222
+ xref_init(lang, script, self, @labels, {})
169
223
  [docxml, filename, dir]
170
224
  end
171
225
 
172
- def convert(filename, file = nil, debug = false)
173
- file = File.read(filename, encoding: "utf-8") if file.nil?
226
+ def convert(input_filename,
227
+ file = nil,
228
+ debug = false,
229
+ output_filename = nil)
230
+ file = File.read(input_filename, encoding: 'utf-8') if file.nil?
174
231
  @openmathdelim, @closemathdelim = extract_delims(file)
175
- docxml, filename, dir = convert_init(file, filename, debug)
232
+ docxml, filename, dir = convert_init(file, input_filename, debug)
176
233
  result = convert1(docxml, filename, dir)
177
234
  return result if debug
178
- postprocess(result, filename, dir)
235
+ output_filename ||= "#{filename}.#{@suffix}"
236
+ postprocess(result, output_filename, dir)
179
237
  FileUtils.rm_rf dir
180
238
  end
239
+
240
+ def middle_clause
241
+ "//clause[parent::sections][not(xmlns:title = 'Scope')]"\
242
+ '[not(descendant::terms)]'
243
+ end
181
244
  end
182
245
  end
@@ -6,7 +6,7 @@ module IsoDoc::Function
6
6
 
7
7
  def figure_name_parse(node, div, name)
8
8
  return if name.nil? && node.at(ns("./figure"))
9
- lbl = anchor(node['id'], :label, false)
9
+ lbl = @xrefs.anchor(node['id'], :label, false)
10
10
  lbl = nil if labelled_ancestor(node) && node.ancestors("figure").empty?
11
11
  return if lbl.nil? && name.nil?
12
12
  div.p **{ class: "FigureTitle", style: "text-align:center;" } do |p|
@@ -55,7 +55,7 @@ module IsoDoc::Function
55
55
  end
56
56
 
57
57
  def sourcecode_name_parse(node, div, name)
58
- lbl = anchor(node['id'], :label, false)
58
+ lbl = @xrefs.anchor(node['id'], :label, false)
59
59
  lbl = nil if labelled_ancestor(node)
60
60
  return if lbl.nil? && name.nil?
61
61
  div.p **{ class: "SourceTitle", style: "text-align:center;" } do |p|
@@ -141,7 +141,7 @@ module IsoDoc::Function
141
141
  out.div **attr_code(class: "formula") do |div|
142
142
  div.p do |p|
143
143
  parse(node.at(ns("./stem")), div)
144
- lbl = anchor(node['id'], :label, false)
144
+ lbl = @xrefs.anchor(node['id'], :label, false)
145
145
  unless lbl.nil?
146
146
  insert_tab(div, 1)
147
147
  div << "(#{lbl})"
@@ -1,7 +1,7 @@
1
1
  module IsoDoc::Function
2
2
  module Blocks
3
3
  def example_label(node, div, name)
4
- n = get_anchors[node["id"]]
4
+ n = @xrefs.get[node["id"]]
5
5
  div.p **{ class: "example-title" } do |p|
6
6
  lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @example_lbl :
7
7
  l10n("#{@example_lbl} #{n[:label]}")
@@ -56,7 +56,7 @@ module IsoDoc::Function
56
56
  end
57
57
 
58
58
  def note_label(node)
59
- n = get_anchors[node["id"]]
59
+ n = @xrefs.get[node["id"]]
60
60
  return @note_lbl if n.nil? || n[:label].nil? || n[:label].empty?
61
61
  l10n("#{@note_lbl} #{n[:label]}")
62
62
  end
@@ -17,17 +17,17 @@ module IsoDoc::Function
17
17
  end
18
18
 
19
19
  def prefix_container(container, linkend, _target)
20
- l10n(anchor(container, :xref) + ", " + linkend)
20
+ l10n(@xrefs.anchor(container, :xref) + ", " + linkend)
21
21
  end
22
22
 
23
23
  def anchor_linkend(node, linkend)
24
24
  if node["citeas"].nil? && node["bibitemid"]
25
- return anchor(node["bibitemid"] ,:xref) || "???"
25
+ return @xrefs.anchor(node["bibitemid"] ,:xref) || "???"
26
26
  elsif node["target"] && !/.#./.match(node["target"])
27
- linkend = anchor(node["target"], :xref)
28
- container = anchor(node["target"], :container, false)
27
+ linkend = @xrefs.anchor(node["target"], :xref)
28
+ container = @xrefs.anchor(node["target"], :container, false)
29
29
  (container && get_note_container_id(node) != container &&
30
- @anchors[node["target"]]) &&
30
+ @xrefs.get[node["target"]]) &&
31
31
  linkend = prefix_container(container, linkend, node["target"])
32
32
  linkend = capitalise_xref(node, linkend)
33
33
  end
@@ -16,22 +16,24 @@ module IsoDoc::Function
16
16
  identifiers = render_identifier(ids)
17
17
  if biblio then ref_entry_code(ref, ordinal, identifiers, ids)
18
18
  else
19
- ref << "#{identifiers[0] || identifiers[1]}, "
20
- ref << "#{identifiers[1]}, " if identifiers[0] && identifiers[1]
19
+ ref << "#{identifiers[0] || identifiers[1]}"
20
+ ref << ", #{identifiers[1]}" if identifiers[0] && identifiers[1]
21
21
  end
22
+ ref << ", " unless biblio && !identifiers[1]
22
23
  reference_format(b, ref)
23
24
  end
24
25
  end
25
26
 
26
27
  def std_bibitem_entry(list, b, ordinal, biblio)
27
28
  list.p **attr_code(iso_bibitem_entry_attrs(b, biblio)) do |ref|
28
- ids = bibitem_ref_code(b)
29
- identifiers = render_identifier(ids)
30
- prefix_bracketed_ref(ref, "[#{ordinal}]") if biblio
31
- ref << "#{identifiers[0] || identifiers[1]}"
32
- ref << ", #{identifiers[1]}" if identifiers[0] && identifiers[1]
29
+ identifiers = render_identifier(bibitem_ref_code(b))
30
+ if biblio then ref_entry_code(ref, ordinal, identifiers, nil)
31
+ else
32
+ ref << "#{identifiers[0] || identifiers[1]}"
33
+ ref << ", #{identifiers[1]}" if identifiers[0] && identifiers[1]
34
+ end
33
35
  date_note_process(b, ref)
34
- ref << ", "
36
+ ref << ", " unless biblio && !identifiers[1]
35
37
  reference_format(b, ref)
36
38
  end
37
39
  end
@@ -40,9 +42,7 @@ module IsoDoc::Function
40
42
  # else, use both ordinal, as prefix, and t
41
43
  def ref_entry_code(r, ordinal, t, id)
42
44
  prefix_bracketed_ref(r, t[0] || "[#{ordinal}]")
43
- if t[1]
44
- r << "#{t[1]}, "
45
- end
45
+ t[1] and r << "#{t[1]}"
46
46
  end
47
47
 
48
48
  def pref_ref_code(b)
@@ -129,12 +129,6 @@ module IsoDoc::Function
129
129
  end
130
130
  end
131
131
 
132
- ISO_PUBLISHER_XPATH =
133
- "./contributor[xmlns:role/@type = 'publisher']/"\
134
- "organization[abbreviation = 'ISO' or xmlns:abbreviation = 'IEC' or "\
135
- "xmlns:name = 'International Organization for Standardization' or "\
136
- "xmlns:name = 'International Electrotechnical Commission']".freeze
137
-
138
132
  def is_standard(b)
139
133
  ret = false
140
134
  b.xpath(ns("./docidentifier")).each do |id|
@@ -159,22 +153,33 @@ module IsoDoc::Function
159
153
  end
160
154
  end
161
155
 
156
+ def norm_ref_xpath
157
+ "//bibliography/references[@normative = 'true'] | "\
158
+ "//bibliography/clause[.//references[@normative = 'true']]"
159
+ end
160
+
162
161
  def norm_ref(isoxml, out, num)
163
- q = "//bibliography/references[@normative = 'true']"
164
- f = isoxml.at(ns(q)) or return num
162
+ f = isoxml.at(ns(norm_ref_xpath)) or return num
165
163
  out.div do |div|
166
164
  num = num + 1
167
165
  clause_name(num, @normref_lbl, div, nil)
168
- biblio_list(f, div, false)
166
+ if f.name == "clause"
167
+ f.elements.each { |e| parse(e, div) unless e.name == "title" }
168
+ else
169
+ biblio_list(f, div, false)
170
+ end
169
171
  end
170
172
  num
171
173
  end
172
174
 
173
- BIBLIOGRAPHY_XPATH = "//bibliography/clause[.//references[@normative = 'false']] | "\
174
- "//bibliography/references[@normative = 'false']".freeze
175
+ def bibliography_xpath
176
+ "//bibliography/clause[.//references]"\
177
+ "[not(.//references[@normative = 'true'])] | "\
178
+ "//bibliography/references[@normative = 'false']"
179
+ end
175
180
 
176
181
  def bibliography(isoxml, out)
177
- f = isoxml.at(ns(BIBLIOGRAPHY_XPATH)) || return
182
+ f = isoxml.at(ns(bibliography_xpath)) || return
178
183
  page_break(out)
179
184
  out.div do |div|
180
185
  div.h1 @bibliography_lbl, **{ class: "Section3" }
@@ -185,7 +190,7 @@ module IsoDoc::Function
185
190
  def bibliography_parse(node, out)
186
191
  title = node&.at(ns("./title"))&.text || ""
187
192
  out.div do |div|
188
- anchor(node['id'], :label, false) and
193
+ @xrefs.anchor(node['id'], :label, false) and
189
194
  clause_parse_title(node, div, node.at(ns("./title")), out) or
190
195
  div.h2 title, **{ class: "Section3" }
191
196
  biblio_list(node, div, true)
@@ -199,16 +204,6 @@ module IsoDoc::Function
199
204
  ref
200
205
  end
201
206
 
202
- def reference_names(ref)
203
- isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
204
- ids = bibitem_ref_code(ref)
205
- identifiers = render_identifier(ids)
206
- date = ref.at(ns("./date[@type = 'published']"))
207
- allparts = ref.at(ns("./extent[@type='part'][referenceFrom='all']"))
208
- reference = docid_l10n(identifiers[0] || identifiers[1])
209
- @anchors[ref["id"]] = { xref: reference }
210
- end
211
-
212
207
  # def ref_names(ref)
213
208
  # linkend = ref.text
214
209
  # linkend.gsub!(/[\[\]]/, "") unless /^\[\d+\]$/.match linkend