isodoc 1.0.29 → 1.1.3.pre.alpha2

Sign up to get free protection for your applications and to get access to all the features.
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