metanorma-standoc 1.4.4 → 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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +4 -9
  3. data/.github/workflows/ubuntu.yml +1 -5
  4. data/.github/workflows/windows.yml +2 -12
  5. data/.rubocop.yml +1 -1
  6. data/lib/asciidoctor/standoc/base.rb +11 -5
  7. data/lib/asciidoctor/standoc/base_structured_text_preprocessor.rb +123 -0
  8. data/lib/asciidoctor/standoc/basicdoc.rng +23 -0
  9. data/lib/asciidoctor/standoc/cleanup.rb +32 -12
  10. data/lib/asciidoctor/standoc/cleanup_amend.rb +54 -0
  11. data/lib/asciidoctor/standoc/cleanup_block.rb +0 -2
  12. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +11 -24
  13. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +0 -3
  14. data/lib/asciidoctor/standoc/cleanup_inline.rb +62 -1
  15. data/lib/asciidoctor/standoc/cleanup_ref.rb +10 -7
  16. data/lib/asciidoctor/standoc/cleanup_section.rb +91 -8
  17. data/lib/asciidoctor/standoc/cleanup_terms.rb +12 -2
  18. data/lib/asciidoctor/standoc/converter.rb +3 -3
  19. data/lib/asciidoctor/standoc/front.rb +0 -12
  20. data/lib/asciidoctor/standoc/front_contributor.rb +51 -10
  21. data/lib/asciidoctor/standoc/inline.rb +21 -31
  22. data/lib/asciidoctor/standoc/isodoc.rng +137 -21
  23. data/lib/asciidoctor/standoc/json2_text_preprocessor.rb +44 -0
  24. data/lib/asciidoctor/standoc/log.rb +10 -1
  25. data/lib/asciidoctor/standoc/macros.rb +45 -33
  26. data/lib/asciidoctor/standoc/ref.rb +45 -45
  27. data/lib/asciidoctor/standoc/section.rb +39 -30
  28. data/lib/asciidoctor/standoc/table.rb +3 -2
  29. data/lib/asciidoctor/standoc/utils.rb +18 -1
  30. data/lib/asciidoctor/standoc/validate.rb +30 -18
  31. data/lib/asciidoctor/standoc/validate_section.rb +1 -1
  32. data/lib/asciidoctor/standoc/views/datamodel/model_representation.adoc.erb +10 -10
  33. data/lib/asciidoctor/standoc/yaml2_text_preprocessor.rb +46 -0
  34. data/lib/liquid/custom_blocks/key_iterator.rb +21 -0
  35. data/lib/liquid/custom_filters/values.rb +7 -0
  36. data/lib/metanorma/standoc.rb +0 -5
  37. data/lib/metanorma/standoc/version.rb +20 -1
  38. data/metanorma-standoc.gemspec +4 -5
  39. data/spec/asciidoctor-standoc/base_spec.rb +140 -7
  40. data/spec/asciidoctor-standoc/blocks_spec.rb +275 -149
  41. data/spec/asciidoctor-standoc/cleanup_spec.rb +1372 -56
  42. data/spec/asciidoctor-standoc/inline_spec.rb +133 -6
  43. data/spec/asciidoctor-standoc/isobib_cache_spec.rb +9 -7
  44. data/spec/asciidoctor-standoc/macros_json2text_spec.rb +10 -0
  45. data/spec/asciidoctor-standoc/macros_spec.rb +43 -23
  46. data/spec/asciidoctor-standoc/macros_yaml2text_spec.rb +5 -560
  47. data/spec/asciidoctor-standoc/refs_dl_spec.rb +9 -7
  48. data/spec/asciidoctor-standoc/refs_spec.rb +43 -34
  49. data/spec/asciidoctor-standoc/section_spec.rb +42 -39
  50. data/spec/asciidoctor-standoc/table_spec.rb +119 -113
  51. data/spec/asciidoctor-standoc/validate_spec.rb +45 -1
  52. data/spec/assets/i18n.yaml +17 -2
  53. data/spec/examples/codes_table.html +1365 -1365
  54. data/spec/fixtures/macros_datamodel/address_class_profile.xml +46 -46
  55. data/spec/fixtures/macros_datamodel/address_component_profile.xml +21 -21
  56. data/spec/fixtures/macros_datamodel/blank_definition_profile.xml +21 -21
  57. data/spec/metanorma/processor_spec.rb +1 -2
  58. data/spec/spec_helper.rb +110 -109
  59. data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +629 -0
  60. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +71 -71
  61. data/spec/vcr_cassettes/isobib_get_123.yml +16 -16
  62. data/spec/vcr_cassettes/isobib_get_123_1.yml +36 -36
  63. data/spec/vcr_cassettes/isobib_get_123_2001.yml +16 -16
  64. data/spec/vcr_cassettes/isobib_get_124.yml +17 -17
  65. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
  66. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +39 -37
  67. metadata +29 -14
  68. data/lib/asciidoctor-yaml/i18n-en.yaml +0 -20
  69. data/lib/asciidoctor-yaml/i18n-fr.yaml +0 -13
  70. data/lib/asciidoctor-yaml/i18n-zh-Hans.yaml +0 -15
  71. data/lib/asciidoctor/standoc/i18n.rb +0 -39
  72. data/lib/asciidoctor/standoc/macros_yaml2text.rb +0 -165
  73. data/lib/metanorma/standoc/latexml_requirement.rb +0 -62
  74. data/lib/metanorma/standoc/requirement.rb +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 841be88451455a61d53e89d5c557c57f1769372d878c5200826136dae8d62cfd
4
- data.tar.gz: b922c30fbd44544dda7ee63a4090d672030f2af570861b500dcd3e8f205497d3
3
+ metadata.gz: 0a619338025bf24d56d382fde0bfcd3d7c5f2e5ecf5520d995d8c7d4986cb67d
4
+ data.tar.gz: 1f8c10a80a5ada1b94c6216568eb11851fd081c9ae63bae2d8b9e3e080673b17
5
5
  SHA512:
6
- metadata.gz: cd2d8b314061fb9c108b6e7568ee9dc65ce81180e955961d593bcaf17081b0e8e7c3e22c8d132ce57c0f5c698869347ff35fd7b56b62d0d1ee34b6c8877a462c
7
- data.tar.gz: 7e501083f23311f0b8a8b22eeaf8ec2990d39bc442fe76882b9172bb9bfafc44d273f1485ae0a9117006ba508beff735857194fdf0a49d8eb80deaf902b3a433
6
+ metadata.gz: 5d9fea4687d265c36099b30faa69893c10ec011e7d1a8b7e32b4e0df4ef9d892e5efe90bb8bd0767f51f3ec74f91b05dc3613532eeff247f1a2039b6094f15dc
7
+ data.tar.gz: 2ccb181da62a4ca659c2f3915ffdbebbc88b501c97938244d65d780b241e05bd2f61870ac32cc8a3cef739ac7a36b8c714f2cc5027d9269e78c7e6f6bcabb12c
@@ -29,18 +29,13 @@ jobs:
29
29
  uses: actions/setup-ruby@v1
30
30
  with:
31
31
  ruby-version: ${{ matrix.ruby }}
32
- - name: Install LaTeXML
33
- run: |
34
- brew install libxml2 cpanminus
35
- env PATH=$(brew --prefix libxml2)/bin:$PATH \
36
- cpanm --notest XML::LibXSLT@1.96 git://github.com/brucemiller/LaTeXML.git@9a0e7dc5
37
- - name: Install PlantUML
38
- run: |
39
- brew install plantuml
40
32
  - name: Update gems
41
33
  run: |
42
34
  sudo gem install bundler --force
43
35
  bundle install --jobs 4 --retry 3
36
+ - name: Install PlantUML
37
+ run: |
38
+ brew install plantuml
44
39
  - name: Run specs
45
40
  run: |
46
- env PATH=$(brew --prefix perl)/bin:$PATH bundle exec rake
41
+ bundle exec rake
@@ -33,17 +33,13 @@ jobs:
33
33
  run: |
34
34
  gem install bundler
35
35
  bundle install --jobs 4 --retry 3
36
- - name: Install LaTeXML
37
- run: |
38
- sudo snap install latexml --edge
39
- echo "::add-path::/snap/bin"
40
36
  - name: Install PlantUML
41
37
  uses: nick-invision/retry@v1
42
38
  with:
43
39
  polling_interval_seconds: 5
44
40
  timeout_minutes: 5
45
41
  max_attempts: 3
46
- command: sudo bash -c "curl -L https://github.com/metanorma/plantuml-install/raw/master/ubuntu.sh | bash"
42
+ command: sudo apt-get update -y && sudo bash -c "curl -L https://github.com/metanorma/plantuml-install/raw/master/ubuntu.sh | bash"
47
43
  - name: Run specs
48
44
  run: |
49
45
  bundle exec rake
@@ -29,25 +29,15 @@ jobs:
29
29
  uses: actions/setup-ruby@v1
30
30
  with:
31
31
  ruby-version: ${{ matrix.ruby }}
32
- - name: Install MN Windows dependencies
33
- shell: pwsh
34
- run: |
35
- choco install --no-progress plantuml make sed gnuwin32-coreutils.install grep
36
32
  - name: Update gems
37
33
  shell: pwsh
38
34
  run: |
39
35
  gem install bundler
40
36
  bundle config --local path vendor/bundle
41
37
  bundle install --jobs 4 --retry 3
42
- - name: Install LaTeXML
43
- shell: cmd
38
+ - name: Install PlantUML
44
39
  run: |
45
- cinst -y latexml
46
- refreshenv
47
- set PATH=C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;%PATH%
48
- where latexmlmath
40
+ cinst -y plantuml
49
41
  - name: Run specs
50
- shell: pwsh
51
42
  run: |
52
- $env:Path = "C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;$env:Path"
53
43
  bundle exec rake
@@ -5,6 +5,6 @@
5
5
  inherit_from:
6
6
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
7
  AllCops:
8
- TargetRubyVersion: 2.3
8
+ TargetRubyVersion: 2.6
9
9
  Rails:
10
10
  Enabled: true
@@ -111,9 +111,10 @@ module Asciidoctor
111
111
  @log = Asciidoctor::Standoc::Log.new
112
112
  init_bib_caches(node)
113
113
  init_iev_caches(node)
114
- lang = (node.attr("language") || "en")
115
- script = (node.attr("script") || "en")
116
- i18n_init(lang, script)
114
+ @lang = (node.attr("language") || "en")
115
+ @script = (node.attr("script") || "Latn")
116
+ @isodoc = isodoc(@lang, @script, node.attr("i18nyaml"))
117
+ @i18n = @isodoc.i18n
117
118
  end
118
119
 
119
120
  def default_fonts(node)
@@ -142,6 +143,11 @@ module Asciidoctor
142
143
  ret
143
144
  end
144
145
 
146
+ def version
147
+ flavour = self.class.name.sub(/::Converter$/, "").sub(/^.+::/, "")
148
+ Metanorma.versioned(Metanorma, flavour)[-1]::VERSION
149
+ end
150
+
145
151
  def clean_exit
146
152
  @log.write(@output_dir + @filename + ".err") unless @novalid
147
153
  @files_to_delete.each { |f| FileUtils.rm f }
@@ -149,7 +155,7 @@ module Asciidoctor
149
155
 
150
156
  def makexml1(node)
151
157
  result = ["<?xml version='1.0' encoding='UTF-8'?>",
152
- "<#{xml_root_tag}>"]
158
+ "<#{xml_root_tag} type='semantic' version='#{version}'>"]
153
159
  result << noko { |ixml| front node, ixml }
154
160
  result << noko { |ixml| middle node, ixml }
155
161
  result << "</#{xml_root_tag}>"
@@ -169,7 +175,7 @@ module Asciidoctor
169
175
  end
170
176
 
171
177
  def doctype(node)
172
- node.attr("doctype")
178
+ node.attr("doctype")&.gsub(/\s+/, "-")&.downcase
173
179
  end
174
180
 
175
181
  def front(node, xml)
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "liquid/custom_blocks/key_iterator"
4
+ require "liquid/custom_filters/values"
5
+
6
+ Liquid::Template.register_tag("keyiterator", Liquid::CustomBlocks::KeyIterator)
7
+ Liquid::Template.register_filter(Liquid::CustomFilters)
8
+
9
+ module Asciidoctor
10
+ module Standoc
11
+ # Base class for processing structured data blocks(yaml, json)
12
+ class BaseStructuredTextPreprocessor < Asciidoctor::Extensions::Preprocessor
13
+ BLOCK_START_REGEXP = /\{(.+?)\.\*,(.+),(.+)\}/
14
+ BLOCK_END_REGEXP = /\A\{[A-Z]+\}\z/
15
+
16
+ def process(document, reader)
17
+ input_lines = reader.readlines.to_enum
18
+ Reader.new(processed_lines(document, input_lines))
19
+ end
20
+
21
+ protected
22
+
23
+ def content_from_file(_document, _file_path)
24
+ raise ArgumentError, "Implement `content_from_file` in your class"
25
+ end
26
+
27
+ private
28
+
29
+ def processed_lines(document, input_lines)
30
+ result = []
31
+ loop do
32
+ result.push(*process_text_blocks(document, input_lines))
33
+ end
34
+ result
35
+ end
36
+
37
+ def relative_file_path(document, file_path)
38
+ docfile_directory = File.dirname(document.attributes["docfile"] || ".")
39
+ document
40
+ .path_resolver
41
+ .system_path(file_path, docfile_directory)
42
+ end
43
+
44
+ def process_text_blocks(document, input_lines)
45
+ line = input_lines.next
46
+ block_match = line.match(/^\[#{config[:block_name]},(.+?),(.+?)\]/)
47
+ return [line] if block_match.nil?
48
+
49
+ mark = input_lines.next
50
+ current_block = []
51
+ while (block_line = input_lines.next) != mark
52
+ current_block.push(block_line)
53
+ end
54
+ read_content_and_parse_template(document,
55
+ current_block,
56
+ block_match)
57
+ end
58
+
59
+ def read_content_and_parse_template(document, current_block, block_match)
60
+ transformed_liquid_lines = current_block
61
+ .map(&method(:transform_line_liquid))
62
+ context_items = content_from_file(document, block_match[1])
63
+ parse_context_block(document: document,
64
+ context_lines: transformed_liquid_lines,
65
+ context_items: context_items,
66
+ context_name: block_match[2])
67
+ rescue StandardError => exception
68
+ document.logger
69
+ .warn("Failed to parse #{config[:block_name]} \
70
+ block: #{exception.message}")
71
+ []
72
+ end
73
+
74
+ def transform_line_liquid(line)
75
+ if line.match?(BLOCK_START_REGEXP)
76
+ line.gsub!(BLOCK_START_REGEXP,
77
+ '{% keyiterator \1, \2 %}')
78
+ end
79
+
80
+ if line.strip.match?(BLOCK_END_REGEXP)
81
+ line.gsub!(BLOCK_END_REGEXP, "{% endkeyiterator %}")
82
+ end
83
+ line
84
+ .gsub(/(?<!{){(?!%)([^{}]+)(?<!%)}(?!})/, '{{\1}}')
85
+ .gsub(/[a-z\.]+\#/, "index")
86
+ .gsub(/{{(.+)\s+\+\s+(\d+)\s*?}}/, '{{ \1 | plus: \2 }}')
87
+ .gsub(/{{(.+)\s+\-\s+(\d+)\s*?}}/, '{{ \1 | minus: \2 }}')
88
+ .gsub(/{{(.+).values(.*?)}}/,
89
+ '{% assign custom_value = \1 | values %}{{custom_value\2}}')
90
+ end
91
+
92
+ def parse_context_block(context_lines:,
93
+ context_items:,
94
+ context_name:,
95
+ document:)
96
+ render_result, errors = render_liquid_string(
97
+ template_string: context_lines.join("\n"),
98
+ context_items: context_items,
99
+ context_name: context_name
100
+ )
101
+ notify_render_errors(document, errors)
102
+ render_result.split("\n")
103
+ end
104
+
105
+ def render_liquid_string(template_string:, context_items:, context_name:)
106
+ liquid_template = Liquid::Template.parse(template_string)
107
+ rendered_string = liquid_template
108
+ .render(context_name => context_items,
109
+ strict_variables: true,
110
+ error_mode: :warn)
111
+ [rendered_string, liquid_template.errors]
112
+ end
113
+
114
+ def notify_render_errors(document, errors)
115
+ errors.each do |error_obj|
116
+ document
117
+ .logger
118
+ .warn("Liquid render error: #{error_obj.message}")
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
@@ -402,6 +402,16 @@
402
402
  </choice>
403
403
  </attribute>
404
404
  </optional>
405
+ <optional>
406
+ <attribute name="valign">
407
+ <choice>
408
+ <value>top</value>
409
+ <value>middle</value>
410
+ <value>bottom</value>
411
+ <value>baseline</value>
412
+ </choice>
413
+ </attribute>
414
+ </optional>
405
415
  <choice>
406
416
  <zeroOrMore>
407
417
  <ref name="TextElement"/>
@@ -429,6 +439,16 @@
429
439
  </choice>
430
440
  </attribute>
431
441
  </optional>
442
+ <optional>
443
+ <attribute name="valign">
444
+ <choice>
445
+ <value>top</value>
446
+ <value>middle</value>
447
+ <value>bottom</value>
448
+ <value>baseline</value>
449
+ </choice>
450
+ </attribute>
451
+ </optional>
432
452
  <choice>
433
453
  <zeroOrMore>
434
454
  <ref name="TextElement"/>
@@ -998,6 +1018,9 @@
998
1018
  <value>alphabet_upper</value>
999
1019
  </choice>
1000
1020
  </attribute>
1021
+ <optional>
1022
+ <attribute name="start"/>
1023
+ </optional>
1001
1024
  <oneOrMore>
1002
1025
  <ref name="li"/>
1003
1026
  </oneOrMore>
@@ -9,6 +9,7 @@ require_relative "./cleanup_boilerplate.rb"
9
9
  require_relative "./cleanup_section.rb"
10
10
  require_relative "./cleanup_terms.rb"
11
11
  require_relative "./cleanup_inline.rb"
12
+ require_relative "./cleanup_amend.rb"
12
13
  require "relaton_iev"
13
14
 
14
15
  module Asciidoctor
@@ -71,6 +72,7 @@ module Asciidoctor
71
72
  para_cleanup(xmldoc)
72
73
  empty_element_cleanup(xmldoc)
73
74
  img_cleanup(xmldoc)
75
+ anchor_cleanup(xmldoc)
74
76
  xmldoc
75
77
  end
76
78
 
@@ -79,12 +81,13 @@ module Asciidoctor
79
81
  xmldoc.traverse do |n|
80
82
  next unless n.text?
81
83
  if @smartquotes
82
- next unless /[-'"(<>]|\.\.|\dx/.match(n)
83
- next unless n.ancestors("pre, tt, sourcecode, bibdata, on, "\
84
- "stem, figure[@class = 'pseudocode']").empty?
84
+ /[-'"(<>]|\.\.|\dx/.match(n) or next
85
+ n.ancestors("pre, tt, sourcecode, bibdata, on, "\
86
+ "stem, figure[@class = 'pseudocode']").empty? or next
85
87
  n.replace(Utils::smartformat(n.text))
86
88
  else
87
- n.replace(n.text.gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"))
89
+ n.replace(n.text.gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"))#.
90
+ #gsub(/</, "&lt;").gsub(/>/, "&gt;"))
88
91
  end
89
92
  end
90
93
  end
@@ -144,16 +147,33 @@ module Asciidoctor
144
147
  align_callouts_to_annotations(xmldoc)
145
148
  end
146
149
 
150
+ def xml_unescape_mathml(x)
151
+ return if x.children.any? { |y| y.element? }
152
+ math = x.text.gsub(/&lt;/, "<").gsub(/&gt;/, ">").gsub(/&quot;/, '"').
153
+ gsub(/&apos;/, "'").gsub(/&amp;/, "&").
154
+ gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</")
155
+ x.children = math
156
+ end
157
+
158
+ def mathml_preserve_space(m)
159
+ m.xpath(".//m:mtext",
160
+ "m" => "http://www.w3.org/1998/Math/MathML").each do |x|
161
+ x.children = x.children.to_xml.gsub(/^\s/, "&#xA0;").
162
+ gsub(/\s$/, "&#xA0;")
163
+ end
164
+ end
165
+
166
+ def mathml_namespace(stem)
167
+ stem.xpath("./math", ).each do |x|
168
+ x.default_namespace = "http://www.w3.org/1998/Math/MathML"
169
+ end
170
+ end
171
+
147
172
  def mathml_cleanup(xmldoc)
148
173
  xmldoc.xpath("//stem[@type = 'MathML']").each do |x|
149
- next if x.children.any? { |y| y.element? }
150
- math = x.text.gsub(/&lt;/, "<").gsub(/&gt;/, ">").gsub(/&quot;/, '"').
151
- gsub(/&apos;/, "'").gsub(/&amp;/, "&").
152
- gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</").
153
- gsub(/ xmlns[^>"']+/, "").
154
- gsub(/<math /, '<math xmlns="http://www.w3.org/1998/Math/MathML" ').
155
- gsub(/<math>/, '<math xmlns="http://www.w3.org/1998/Math/MathML">')
156
- x.children = math
174
+ xml_unescape_mathml(x)
175
+ mathml_namespace(x)
176
+ mathml_preserve_space(x)
157
177
  end
158
178
  end
159
179
 
@@ -0,0 +1,54 @@
1
+ module Asciidoctor
2
+ module Standoc
3
+ module Cleanup
4
+ def change_clauses(x)
5
+ x.xpath("//clause[@change]").each do |c|
6
+ a = create_amend(c)
7
+ end
8
+ end
9
+
10
+ def create_amend(c)
11
+ a = c.add_child("<amend id='_#{UUIDTools::UUID.random_create}'/>").first
12
+ c.elements.each do |e|
13
+ e.parent = a unless %w(amend title).include? e.name
14
+ end
15
+ create_amend1(c, a)
16
+ end
17
+
18
+ def create_amend1(c, a)
19
+ create_amend2(c, a)
20
+ d = a.at("./description")
21
+ d.xpath(".//autonumber").each { |e| d.previous = e }
22
+ d.xpath(".//p[normalize-space(.)='']").each { |e| e.remove }
23
+ move_attrs_to_amend(c, a)
24
+ a
25
+ end
26
+
27
+ def create_amend2(c, a)
28
+ q = a.at("./quote") and q.name = "newcontent"
29
+ if q.nil?
30
+ a.children = "<description>#{a.children.to_xml}</description>"
31
+ else
32
+ pre = q&.xpath("./preceding-sibling::*")&.remove
33
+ post = q&.xpath("./following-sibling::*")&.remove
34
+ pre.empty? or a << "<description>#{pre.to_xml}</description>"
35
+ a << q.remove
36
+ post.empty? or a << "<description>#{post.to_xml}</description>"
37
+ end
38
+ end
39
+
40
+ def move_attrs_to_amend(c, a)
41
+ %w(change path path_end title).each do |e|
42
+ next unless c[e]
43
+ a[e] = c[e]
44
+ c.delete(e)
45
+ end
46
+ return unless a["locality"]
47
+ loc = a.children.add_previous_sibling("<location/>")
48
+ extract_localities1(loc, a["locality"])
49
+ loc1 = loc.at("./localityStack") and loc.replace(loc1.elements)
50
+ a.delete("locality")
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,8 +1,6 @@
1
1
  require "date"
2
- require "nokogiri"
3
2
  require "htmlentities"
4
3
  require "json"
5
- require "pathname"
6
4
  require "open-uri"
7
5
 
8
6
  module Asciidoctor
@@ -2,25 +2,25 @@ module Asciidoctor
2
2
  module Standoc
3
3
  module Cleanup
4
4
  def external_terms_boilerplate(sources)
5
- IsoDoc::Function::I18n::l10n(
6
- @external_terms_boilerplate.gsub(/%/, sources || "???"),
5
+ @i18n.l10n(
6
+ @i18n.external_terms_boilerplate.gsub(/%/, sources || "???"),
7
7
  @lang, @script)
8
8
  end
9
9
 
10
10
  def internal_external_terms_boilerplate(sources)
11
- IsoDoc::Function::I18n::l10n(
12
- @internal_external_terms_boilerplate.gsub(/%/, sources || "??"),
11
+ @i18n.l10n(
12
+ @i18n.internal_external_terms_boilerplate.gsub(/%/, sources || "??"),
13
13
  @lang, @script)
14
14
  end
15
15
 
16
16
  def term_defs_boilerplate(div, source, term, preface, isodoc)
17
- div.next = @term_def_boilerplate
17
+ a = @i18n.term_def_boilerplate and div.next = a
18
18
  source.each do |s|
19
19
  @anchors[s["bibitemid"]] or
20
20
  @log.add("Crossreferences", nil, "term source #{s['bibitemid']} not referenced")
21
21
  end
22
22
  if source.empty? && term.nil?
23
- div.next = @no_terms_boilerplate
23
+ div.next = @i18n.no_terms_boilerplate
24
24
  else
25
25
  div.next = term_defs_boilerplate_cont(source, term, isodoc)
26
26
  end
@@ -30,7 +30,7 @@ module Asciidoctor
30
30
  sources = isodoc.sentence_join(src.map do |s|
31
31
  %{<eref bibitemid="#{s['bibitemid']}"/>}
32
32
  end)
33
- if src.empty? then @internal_terms_boilerplate
33
+ if src.empty? then @i18n.internal_terms_boilerplate
34
34
  elsif term.nil? then external_terms_boilerplate(sources)
35
35
  else
36
36
  internal_external_terms_boilerplate(sources)
@@ -42,7 +42,7 @@ module Asciidoctor
42
42
  ["reference", "bibitem"].include? e.name
43
43
  end
44
44
  f.at("./title").next =
45
- "<p>#{(refs.empty? ? @norm_empty_pref : @norm_with_refs_pref)}</p>"
45
+ "<p>#{(refs.empty? ? @i18n.norm_empty_pref : @i18n.norm_with_refs_pref)}</p>"
46
46
  end
47
47
 
48
48
  TERM_CLAUSE = "//sections/terms | "\
@@ -54,13 +54,9 @@ module Asciidoctor
54
54
  x = xmldoc.dup
55
55
  x.root.add_namespace(nil, self.class::XML_NAMESPACE)
56
56
  xml = Nokogiri::XML(x.to_xml)
57
- conv = html_converter(EmptyAttr.new)
58
- @lang = xmldoc&.at("//bibdata/language")&.text
59
- @script = xmldoc&.at("//bibdata/script")&.text
60
- conv.i18n_init(@lang, @script)
61
- conv.metadata_init(@lang, @script, conv.labels)
62
- conv.info(xml, nil)
63
- conv
57
+ @isodoc ||= isodoc(@lang, @script)
58
+ @isodoc.info(xml, nil)
59
+ @isodoc
64
60
  end
65
61
 
66
62
  def boilerplate_cleanup(xmldoc)
@@ -83,15 +79,6 @@ module Asciidoctor
83
79
  preface.previous = b
84
80
  end
85
81
 
86
- class EmptyAttr
87
- def attr(_x)
88
- nil
89
- end
90
- def attributes
91
- {}
92
- end
93
- end
94
-
95
82
  def boilerplate_file(xmldoc)
96
83
  File.join(@libdir, "boilerplate.xml")
97
84
  end