metanorma 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e823c389c083ead32851781abb9fa3e28d7744d7fcd3ebacb60b051c118157ed
4
- data.tar.gz: 6a3ef75f087f322c0fcf317f72cf5d91c52576b3f322c0935c368e9c74fb7e6d
3
+ metadata.gz: 6da8527ed559d4b6833977c169022db5dfec3a9d93926257586d9e676a11e578
4
+ data.tar.gz: cf9cc8d31d2ae7cbd08787dcb3f4a79747e85fad5c142bc02fd377df91e467e0
5
5
  SHA512:
6
- metadata.gz: b942d2fadf478c4aa4e8f27437a29a75c37d9515541bc1c13aec1fece10c8d81b07ad8d60cdce455341fc8f65b35d1a53b3d20bf6005281753774e21e1130354
7
- data.tar.gz: f744d5316edcd92e46fcfff79128a20353849b8a5d7037cc808afbc39aeb5c1feecb503d3e47fffad4f5fd175129f152be83c5208dc3f8ca771d748d4deb5736
6
+ metadata.gz: 07f86288c180813daf6ceed810dec2bfecc1cdb2605bf45de5f363cf0a7187babffa37095f208679fd1d1a3cdc6aeebfc879a5293f51c4f49ecc9c473a077295
7
+ data.tar.gz: bc111d4ca32a5b3135cf518c748370654b9f99803b4123de42b2603965bba4a1e6164e6b3307f7f9afa8b53b7b721b1b01941eee22fd3dd5d63d95a8597cb71e
@@ -49,5 +49,5 @@ jobs:
49
49
  with:
50
50
  token: ${{ secrets.METANORMA_CI_PAT_TOKEN || secrets.GITHUB_TOKEN }}
51
51
  repository: ${{ github.repository }}
52
- event-type: notify
52
+ event-type: tests-passed
53
53
  client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}'
data/.hound.yml CHANGED
@@ -1,3 +1,5 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
1
3
  ruby:
2
- Enabled: true
4
+ enabled: true
3
5
  config_file: .rubocop.yml
data/.rubocop.yml CHANGED
@@ -1,14 +1,10 @@
1
- # This project follows the Ribose OSS style guide.
2
- # https://github.com/riboseinc/oss-guides
3
- # All project-specific additions and overrides should be specified in this file.
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
4
3
  inherit_from:
5
4
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
6
5
 
7
6
  # local repo-specific modifications
7
+ # ...
8
8
 
9
9
  AllCops:
10
- DisplayCopNames: false
11
- StyleGuideCopsOnly: false
12
10
  TargetRubyVersion: 2.4
13
- Rails:
14
- Enabled: true
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -1,20 +1,18 @@
1
1
  module Metanorma::AsciidoctorExtensions
2
-
3
2
  class GlobIncludeProcessor < ::Asciidoctor::Extensions::IncludeProcessor
4
- def process doc, reader, target_glob, attributes
3
+ def process(_doc, reader, target_glob, attributes)
5
4
  Dir[File.join reader.dir, target_glob].sort.reverse_each do |target|
6
5
  content = IO.readlines target
7
- content.unshift '' unless attributes['adjoin-option']
6
+ content.unshift "" unless attributes["adjoin-option"]
8
7
  reader.push_include content, target, target, 1, attributes
9
8
  end
10
9
  reader
11
10
  end
12
11
 
13
- def handles? target
14
- target.include? '*'
12
+ def handles?(target)
13
+ target.include? "*"
15
14
  end
16
15
  end
17
-
18
16
  end
19
17
 
20
18
  Asciidoctor::Extensions.register do
@@ -44,9 +44,10 @@ module Metanorma
44
44
  end
45
45
 
46
46
  # rubocop:enable Metrics/AbcSize,Metrics/MethodLength
47
- def clean_exit
48
- @log.write(File.join(File.dirname(@file), File.basename(@file, ".*") + ".err"))
49
- end
47
+ def clean_exit
48
+ @log.write(File.join(File.dirname(@file),
49
+ "#{File.basename(@file, '.*')}.err"))
50
+ end
50
51
 
51
52
  # @return [String] XML
52
53
  def to_xml
@@ -110,7 +111,7 @@ module Metanorma
110
111
  # @parma mnf [Metanorma::CollectionManifest]
111
112
  # @return [Hash{String=>Metanorma::Document}]
112
113
  def docs_from_xml(xml, mnf)
113
- xml.xpath("//xmlns:doc-container/*/xmlns:bibdata")
114
+ xml.xpath("//xmlns:doc-container//xmlns:bibdata")
114
115
  .each_with_object({}) do |b, m|
115
116
  bd = Relaton::Cli.parse_xml b
116
117
  docref = mnf.docref_by_id bd.docidentifier.first.id
@@ -153,7 +154,7 @@ module Metanorma
153
154
 
154
155
  require "metanorma-#{doctype}"
155
156
  out = sections(dummy_header + cnt)
156
- builder.send(elm + "-content") { |b| b << out }
157
+ builder.send("#{elm}-content") { |b| b << out }
157
158
  end
158
159
 
159
160
  # @param cnt [String] prefatory/final content
@@ -168,9 +169,14 @@ module Metanorma
168
169
  return unless Array(@directives).include? "documents-inline"
169
170
 
170
171
  documents.each_with_index do |(_, d), i|
171
- next if d.attachment
172
172
  id = format("doc%<index>09d", index: i)
173
- builder.send("doc-container", id: id) { |b| d.to_xml b }
173
+ builder.send("doc-container", id: id) do |b|
174
+ if d.attachment
175
+ d.bibitem and b << d.bibitem.root.to_xml
176
+ b.attachment Metanorma::Utils::datauri(d.file)
177
+ else d.to_xml b
178
+ end
179
+ end
174
180
  end
175
181
  end
176
182
 
@@ -13,8 +13,11 @@ module Metanorma
13
13
  xrefs.parse xml
14
14
  xrefs.get.each do |k, v|
15
15
  ret[v[:type]] ||= {}
16
- index = v[:container] || v[:label].nil? || v[:label].empty? ?
17
- UUIDTools::UUID.random_create.to_s : v[:label]
16
+ index = if v[:container] || v[:label].nil? || v[:label].empty?
17
+ UUIDTools::UUID.random_create.to_s
18
+ else
19
+ v[:label]
20
+ end
18
21
  ret[v[:type]][index] = k
19
22
  end
20
23
  ret
@@ -46,7 +49,8 @@ module Metanorma
46
49
  newbib["id"] = id
47
50
  newbib["hidden"] = "true"
48
51
  newbib&.at(ns("./ext"))&.remove
49
- _file, url = targetfile(@files[docid], false, !@files[docid][:attachment])
52
+ _file, url = targetfile(@files[docid], relative: true, read: false,
53
+ doc: !@files[docid][:attachment])
50
54
  uri_node = Nokogiri::XML::Node.new "uri", newbib
51
55
  uri_node[:type] = "citation"
52
56
  uri_node.content = url
@@ -87,9 +91,32 @@ module Metanorma
87
91
  href = isodoc.eref_target(e)
88
92
  next if href == "##{e['bibitemid']}"
89
93
 
90
- if href.match(/^#/)
91
- next unless docxml.at("//*[@id = '#{href.sub(/^#/, '')}']")
94
+ # XML collection renderer
95
+ # map locality type and label (e.g. "clause" "1") to id = anchor for
96
+ # a document
97
+ # Note: will only key clauses, which have unambiguous reference label in
98
+ # locality. Notes, examples etc with containers are just plunked against
99
+ # UUIDs, so that their IDs can at least be registered to be tracked
100
+ # as existing.
101
+ # @param id [String]
102
+ # @param read [Boolean]
103
+ # @return [Array<String, nil>]
104
+ # @param bib [Nokogiri::XML::Element]
105
+ # @param identifier [String]
106
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
107
+ # Resolves direct links to other files in collection
108
+ # (repo(current-metanorma-collection/x),
109
+ # and indirect links to other files in collection
110
+ # (bibitem[@type = 'internal'] pointing to a file anchor
111
+ # in another file in the collection)
112
+ # @param file [String] XML content
113
+ # @param identifier [String] docid
114
+ # @param internal_refs [Hash{String=>Hash{String=>String}] schema name to anchor to filename
115
+ # @return [String] XML content
116
+ if href =~ /^#/ && !docxml.at("//*[@id = '#{href.sub(/^#/, '')}']")
117
+ next
92
118
  end
119
+
93
120
  e["target"] = href.strip
94
121
  e.name = "link"
95
122
  e&.elements&.remove
@@ -106,6 +133,7 @@ module Metanorma
106
133
  docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |b|
107
134
  docid = b&.at(ns("./docidentifier[@type = 'repository']"))&.text
108
135
  next unless docid && %r{^current-metanorma-collection/}.match(docid)
136
+
109
137
  update_bibitem(b, identifier)
110
138
  update_anchors(b, docxml, docid)
111
139
  end
@@ -150,8 +178,9 @@ module Metanorma
150
178
  ref = loc.at(ns("./referenceFrom")) || return
151
179
  anchor = "#{ref.text}_#{document_suffix}"
152
180
  return unless @files[docid][:anchors].inject([]) do |m, (_, x)|
153
- m+= x.values
181
+ m += x.values
154
182
  end.include?(anchor)
183
+
155
184
  ref.content = anchor
156
185
  end
157
186
 
@@ -174,7 +203,8 @@ module Metanorma
174
203
  def gather_internal_refs
175
204
  @files.each_with_object({}) do |(_, x), refs|
176
205
  next if x[:attachment]
177
- file, _ = targetfile(x, true)
206
+
207
+ file, = targetfile(x, read: true)
178
208
  Nokogiri::XML(file)
179
209
  .xpath(ns("//bibitem[@type = 'internal']/"\
180
210
  "docidentifier[@type = 'repository']")).each do |d|
@@ -192,7 +222,7 @@ module Metanorma
192
222
  @files.each do |identifier, x|
193
223
  next if x[:attachment]
194
224
 
195
- file, _filename = targetfile(x, true)
225
+ file, _filename = targetfile(x, read: true)
196
226
  docxml = Nokogiri::XML(file)
197
227
  refs.each do |schema, ids|
198
228
  ids.each_key do |id|
@@ -17,13 +17,16 @@ module Metanorma
17
17
  @xml.xpath(ns("//docref")).each do |d|
18
18
  identifier = d.at(ns("./identifier")).text
19
19
  files[identifier] = file_entry(d, path)
20
- next if files[identifier][:attachment]
21
-
22
- file, _filename = targetfile(files[identifier], true)
23
- xml = Nokogiri::XML(file)
24
- add_document_suffix(identifier, xml)
25
- files[identifier][:anchors] = read_anchors(xml)
26
- files[identifier][:bibdata] = xml.at(ns("//bibdata"))
20
+ if files[identifier][:attachment]
21
+ files[identifier][:bibdata] = Metanorma::Document
22
+ .attachment_bibitem(identifier).root
23
+ else
24
+ file, _filename = targetfile(files[identifier], read: true)
25
+ xml = Nokogiri::XML(file)
26
+ add_document_suffix(identifier, xml)
27
+ files[identifier][:anchors] = read_anchors(xml)
28
+ files[identifier][:bibdata] = xml.at(ns("//bibdata"))
29
+ end
27
30
  end
28
31
  files
29
32
  end
@@ -58,12 +61,20 @@ module Metanorma
58
61
 
59
62
  # return file contents + output filename for each file in the collection,
60
63
  # given a docref entry
61
- # @param data [Hash]
62
- # @param read [Boolean]
64
+ # @param data [Hash] docref entry
65
+ # @param read [Boolean] read the file in and return it
66
+ # @param doc [Boolean] I am a Metanorma document,
67
+ # so my URL should end with html or pdf or whatever
68
+ # @param relative [Boolean] Return path relative to YAML file,
69
+ # not relative to calling function
63
70
  # @return [Array<String, nil>]
64
- def targetfile(data, read = false, doc = true)
65
- if data[:type] == "fileref" then ref_file data[:ref], read, doc
66
- else xml_file data[:id], read
71
+ def targetfile(data, options)
72
+ options = { read: false, doc: true, relative: false }.merge(options)
73
+ path = options[:relative] ? data[:rel_path] : data[:ref]
74
+ if data[:type] == "fileref"
75
+ ref_file path, options[:read], options[:doc]
76
+ else
77
+ xml_file data[:id], options[:read]
67
78
  end
68
79
  end
69
80
 
@@ -94,7 +105,7 @@ module Metanorma
94
105
  end
95
106
 
96
107
  def copy_file_to_dest(fileref)
97
- _file, filename = targetfile(fileref, true, false)
108
+ _file, filename = targetfile(fileref, read: true, doc: false)
98
109
  dest = File.join(@outdir, fileref[:rel_path])
99
110
  FileUtils.mkdir_p(File.dirname(dest))
100
111
  FileUtils.cp filename, dest
@@ -107,7 +118,7 @@ module Metanorma
107
118
  @files.each do |identifier, x|
108
119
  if x[:attachment] then copy_file_to_dest(x)
109
120
  else
110
- file, filename = targetfile(x, true)
121
+ file, filename = targetfile(x, read: true)
111
122
  file = update_xrefs(file, identifier, internal_refs)
112
123
  Tempfile.open(["collection", ".xml"], encoding: "utf-8") do |f|
113
124
  f.write(file)
@@ -63,12 +63,13 @@ module Metanorma
63
63
  docs = @docref.each_with_object({}) do |dr, m|
64
64
  next m unless dr["fileref"]
65
65
 
66
- m[dr["identifier"]] = Document.parse_file(File.join(dir, dr["fileref"]), dr["attachment"])
66
+ m[dr["identifier"]] = Document.parse_file(
67
+ File.join(dir, dr["fileref"]),
68
+ dr["attachment"], dr["identifier"]
69
+ )
67
70
  m
68
71
  end
69
- @manifest.reduce(docs) do |mem, mnf|
70
- mem.merge mnf.documents(dir)
71
- end
72
+ @manifest.reduce(docs) { |mem, mnf| mem.merge mnf.documents(dir) }
72
73
  end
73
74
 
74
75
  # @param builder [Nokogiri::XML::Builder]
@@ -223,7 +223,7 @@ module Metanorma
223
223
  @processor.output(nil, presentationxml_name, outfilename, ext, isodoc_options) :
224
224
  @processor.output(isodoc, xml_name, outfilename, ext, isodoc_options)
225
225
  rescue StandardError => e
226
- if e.message.start_with? "mn2pdf"
226
+ if e.message.include? "Fatal:"
227
227
  @errors << e.message
228
228
  else
229
229
  puts e.message
@@ -15,7 +15,7 @@ module Metanorma
15
15
  attr_accessor :logs
16
16
 
17
17
  def initialize
18
- @logs ||= [:warning, :error, :fatal]
18
+ @logs ||= %i[warning error fatal]
19
19
  end
20
20
  end
21
21
 
@@ -1,7 +1,7 @@
1
1
  module Metanorma
2
2
  class Document
3
3
  # @return [Strin]
4
- attr_reader :file, :attachment
4
+ attr_reader :file, :attachment, :bibitem
5
5
 
6
6
  # @param bibitem [RelatonBib::BibliographicItem]
7
7
  def initialize(bibitem, file, options = {})
@@ -14,9 +14,12 @@ module Metanorma
14
14
  class << self
15
15
  # @param file [String] file path
16
16
  # @param attachment [Bool] is an attachment
17
+ # @param identifier [String] is the identifier assigned the file
18
+ # in the collection file
17
19
  # @return [Metanorma::Document]
18
- def parse_file(file, attachment)
19
- new bibitem(file), file, { attachment: attachment }
20
+ def parse_file(file, attachment, identifier = nil)
21
+ new(bibitem(file, attachment, identifier), file,
22
+ { attachment: attachment })
20
23
  end
21
24
 
22
25
  # #param xml [Nokogiri::XML::Document, Nokogiri::XML::Element]
@@ -31,6 +34,12 @@ module Metanorma
31
34
  new(doc, filename, raw: true)
32
35
  end
33
36
 
37
+ def attachment_bibitem(identifier)
38
+ Nokogiri::XML(
39
+ "<bibdata><docidentifier>#{identifier}</docidentifier></bibdata>",
40
+ )
41
+ end
42
+
34
43
  private
35
44
 
36
45
  # #param xml [Nokogiri::XML::Document, Nokogiri::XML::Element]
@@ -51,13 +60,16 @@ module Metanorma
51
60
  # @param file [String]
52
61
  # @return [RelatonBib::BibliographicItem,
53
62
  # RelatonIso::IsoBibliographicItem]
54
- def bibitem(file)
55
- case format(file)
56
- when :xml
57
- from_xml Nokogiri::XML(File.read(file, encoding: "UTF-8"))
58
- when :yaml
59
- yaml = File.read(file, encoding: "UTF-8")
60
- Relaton::Cli::YAMLConvertor.convert_single_file(yaml)
63
+ def bibitem(file, attachment, identifier)
64
+ if attachment then attachment_bibitem(identifier)
65
+ else
66
+ case format(file)
67
+ when :xml
68
+ from_xml Nokogiri::XML(File.read(file, encoding: "UTF-8"))
69
+ when :yaml
70
+ yaml = File.read(file, encoding: "UTF-8")
71
+ Relaton::Cli::YAMLConvertor.convert_single_file(yaml)
72
+ end
61
73
  end
62
74
  end
63
75
  end
@@ -3,6 +3,5 @@ require_relative "./input/asciidoc"
3
3
 
4
4
  module Metanorma
5
5
  module Input
6
-
7
6
  end
8
7
  end
@@ -4,7 +4,5 @@ require_relative "./output/xslfo"
4
4
 
5
5
  module Metanorma
6
6
  module Output
7
-
8
7
  end
9
8
  end
10
-
@@ -7,7 +7,8 @@ module Metanorma
7
7
  def file_path(url_path)
8
8
  file_url = url_path
9
9
  file_url = "file://#{url_path}" if Pathname.new(file_url).absolute?
10
- file_url = "file://#{Dir.pwd}/#{url_path}" unless %r{^file://} =~ file_url
10
+ %r{^file://}.match?(file_url) or
11
+ file_url = "file://#{Dir.pwd}/#{url_path}"
11
12
  file_url
12
13
  end
13
14
  end
@@ -1,3 +1,3 @@
1
1
  module Metanorma
2
- VERSION = "1.3.1".freeze
2
+ VERSION = "1.3.2".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-26 00:00:00.000000000 Z
11
+ date: 2021-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor