asciidoctor-iso 0.9.9 → 0.10.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.
- checksums.yaml +4 -4
- data/.travis.yml +7 -0
- data/README.adoc +49 -9
- data/asciidoctor-iso.gemspec +3 -3
- data/lib/asciidoctor-iso.rb +2 -0
- data/lib/asciidoctor/iso/base.rb +14 -0
- data/lib/asciidoctor/iso/blocks.rb +1 -1
- data/lib/asciidoctor/iso/cleanup.rb +2 -2
- data/lib/asciidoctor/iso/cleanup_ref.rb +1 -1
- data/lib/asciidoctor/iso/inline.rb +1 -1
- data/lib/asciidoctor/iso/macros.rb +54 -0
- data/lib/asciidoctor/iso/ref.rb +7 -2
- data/lib/asciidoctor/iso/validate.rb +8 -8
- data/lib/asciidoctor/iso/validate_requirements.rb +5 -5
- data/lib/asciidoctor/iso/version.rb +1 -1
- data/lib/isodoc/iso/html/header.html +206 -0
- data/lib/isodoc/iso/html/html_iso_intro.html +34 -0
- data/lib/isodoc/iso/html/html_iso_titlepage.html +34 -0
- data/lib/isodoc/iso/html/htmlstyle.scss +46 -0
- data/lib/isodoc/iso/html/isodoc.scss +696 -0
- data/lib/isodoc/iso/html/scripts.html +174 -0
- data/lib/isodoc/iso/html/style-human.scss +1277 -0
- data/lib/isodoc/iso/html/style-iso.scss +1257 -0
- data/lib/isodoc/iso/html/word_iso_intro.html +72 -0
- data/lib/isodoc/iso/html/word_iso_titlepage.html +62 -0
- data/lib/isodoc/iso/html/wordstyle.scss +1175 -0
- data/lib/isodoc/iso/html_convert.rb +136 -0
- data/lib/isodoc/iso/metadata.rb +107 -0
- data/lib/isodoc/iso/word_convert.rb +139 -0
- data/spec/asciidoctor-iso/isobib_cache_spec.rb +18 -4
- data/spec/asciidoctor-iso/macros_spec.rb +92 -1
- data/spec/asciidoctor-iso/validate_spec.rb +173 -144
- data/spec/assets/header.html +7 -0
- data/spec/assets/html.css +2 -0
- data/spec/assets/htmlcover.html +4 -0
- data/spec/assets/htmlintro.html +5 -0
- data/spec/assets/i18n.yaml +2 -0
- data/spec/assets/iso.doc +2312 -0
- data/spec/assets/iso.headless.html +33 -0
- data/spec/assets/iso.html +1388 -0
- data/spec/assets/iso.xml +8 -0
- data/spec/assets/rice_image1.png +0 -0
- data/spec/assets/scripts.html +3 -0
- data/spec/assets/std.css +2 -0
- data/spec/assets/word.css +2 -0
- data/spec/assets/wordcover.html +3 -0
- data/spec/assets/wordintro.html +4 -0
- data/spec/examples/103_01_02.html +247 -0
- data/spec/isodoc/i18n_spec.rb +642 -0
- data/spec/isodoc/iso_spec.rb +168 -0
- data/spec/isodoc/metadata_spec.rb +152 -0
- data/spec/isodoc/postproc_spec.rb +409 -0
- data/spec/isodoc/section_spec.rb +522 -0
- data/spec/isodoc/xref_spec.rb +1337 -0
- data/spec/spec_helper.rb +45 -0
- metadata +45 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f33d6a123eea911079343a47615fa26a433e777d3dcd57866711705b8fd02e8
|
4
|
+
data.tar.gz: c1bd60cc9ce1b4a164f112ab17a181fe3cf32a42f8d5e0a5efbecd26902a517a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b29a3b72d11cea8a6e8b4bc2f4cfbed276d475c92702facd1214177fc9452f04e90a842e7d7758519291264826f7a74d5894437148106ae631f6392a6830be8a
|
7
|
+
data.tar.gz: 48b79c7530f7a756d5646d99131d7ae57b3cb5434c6349e827f7dedc4082bb6332c18e80f617057b264db70e61a1ddc33db131e3406990a638ef24e43352b05f
|
data/.travis.yml
CHANGED
@@ -8,6 +8,13 @@ rvm:
|
|
8
8
|
before_install:
|
9
9
|
- gem install bundler -v 1.16.1
|
10
10
|
- unset _JAVA_OPTIONS
|
11
|
+
- wget "http://downloads.sourceforge.net/project/plantuml/plantuml.jar?r=&ts=1424308684&use_mirror=jaist" -O plantuml.jar
|
12
|
+
- sudo mkdir -p /opt/plantuml
|
13
|
+
- sudo cp plantuml.jar /opt/plantuml
|
14
|
+
- echo "#! /bin/sh" > plantuml.sh
|
15
|
+
- echo 'exec java -jar /opt/plantuml/plantuml.jar "$@"' >> plantuml.sh
|
16
|
+
- sudo install -m 755 -D plantuml.sh /usr/bin/plantuml
|
17
|
+
- plantuml -version
|
11
18
|
matrix:
|
12
19
|
allow_failures:
|
13
20
|
- rvm: ruby-head
|
data/README.adoc
CHANGED
@@ -514,6 +514,38 @@ This generates the following ISO XML:
|
|
514
514
|
</clause>
|
515
515
|
--
|
516
516
|
|
517
|
+
=== PlantUML
|
518
|
+
|
519
|
+
The http://plantuml.com[PlantUML] diagramming tool is integrated with Asciidoctor
|
520
|
+
in this gem, as a literal block with the style attribute `plantuml`:
|
521
|
+
|
522
|
+
[source,asciidoctor]
|
523
|
+
--
|
524
|
+
[plantuml]
|
525
|
+
....
|
526
|
+
@startuml
|
527
|
+
Alice -> Bob: Authentication Request
|
528
|
+
Bob --> Alice: Authentication Response
|
529
|
+
|
530
|
+
Alice -> Bob: Another authentication Request
|
531
|
+
Alice <-- Bob: another authentication Response
|
532
|
+
@enduml
|
533
|
+
....
|
534
|
+
--
|
535
|
+
|
536
|
+
The integration runs PlantUML for each such block, generating a PNG image.
|
537
|
+
The images are stored in the `plantuml` directory, and linked into the output
|
538
|
+
document in place of the PlantUML.
|
539
|
+
|
540
|
+
PlantUML needs to be installed by users separately, and accesssible from the
|
541
|
+
command line:
|
542
|
+
|
543
|
+
* `brew install plantuml` on MacOS.
|
544
|
+
* For Linux, link the PlantUML jar file into a command line executable; see
|
545
|
+
`.travis.yml` for an example.
|
546
|
+
|
547
|
+
If PlantUML is not installed locally, the source PlantUML is incorporated into
|
548
|
+
the output document as sourcecode.
|
517
549
|
|
518
550
|
=== Features not visible in HTML preview
|
519
551
|
|
@@ -623,17 +655,20 @@ identifier as the item label; e.g.
|
|
623
655
|
By default, the `isobib` gem is used to look up the reference details for
|
624
656
|
any item label prefixed with `ISO` on the ISO web site. The full bibliographic details
|
625
657
|
of the item are screenscraped from the ISO site and inserted into the XML file
|
626
|
-
(although only the title of the reference is used in rendering).
|
658
|
+
(although only the title of the reference is used in rendering). The
|
659
|
+
http://www.electropedia.org[Electropedia] termbank is queried in validation, to confirm
|
660
|
+
that the cited entries in Terms and Definitions are the same as what is cited online;
|
661
|
+
those queries are routed through the `iev` gem
|
627
662
|
|
628
663
|
[[cache]]
|
629
664
|
The results of all `isobib` searches done to date, across all documents,
|
630
|
-
are cached in the global cache file `~/.relaton-bib.
|
665
|
+
are cached in the global cache file `~/.relaton-bib.pstore`,
|
631
666
|
so they do not need to be re-fetched each time a document is processed.
|
632
667
|
(The web query takes a few seconds per reference.)
|
633
668
|
|
634
669
|
The results of all `isobib` searches done to date for the current document
|
635
670
|
(`filename.adoc`) are stored in the same directory as the current document,
|
636
|
-
in the file `filename
|
671
|
+
in the file `{filename}.relaton.pstore`. The local cache overrides entries in
|
637
672
|
the global cache, and can be manually edited. The local cache is only used
|
638
673
|
if the `:local-cache:` document attribute is set.
|
639
674
|
|
@@ -646,6 +681,11 @@ Any entry in the cache that corresponds to an undated ISO reference fetches its
|
|
646
681
|
from the latest available entry on the ISO web site. If the entry is more than 60
|
647
682
|
days old, it is refetched.
|
648
683
|
|
684
|
+
The results of all `iev` searches done to date across all documents are cached
|
685
|
+
in the global cache fule `~/iev.pstore`, and the results of all `iev` searches
|
686
|
+
done to date for the current document are stored in the same directory as the
|
687
|
+
current document, in the file `(filename).iev.pstore`.
|
688
|
+
|
649
689
|
== Document Attributes
|
650
690
|
|
651
691
|
The gem relies on Asciidoctor document attributes to provide necessary
|
@@ -660,14 +700,14 @@ Can be used as a command-line option (like all other document attributes):
|
|
660
700
|
`:flush-caches:`:: If set, delete and reinitialise the <<cache,cache>> of `isobib` searches
|
661
701
|
for ISO references from the ISO web site.
|
662
702
|
|
663
|
-
`:no-isobib:`:: If set, do not use the `isobib` gem functionality to look up
|
664
|
-
ISO references online, nor the <<cache,cache>> of `isobib` searches.
|
703
|
+
`:no-isobib:`:: If set, do not use the `isobib` or `iev` gem functionality to look up
|
704
|
+
ISO and IEV references online, nor the <<cache,cache>> of `isobib` and `iev` searches.
|
665
705
|
|
666
|
-
`:no-isobib-cache:`:: If set, use the `isobib` gem functionality to look up
|
667
|
-
ISO references online, but do not use the <<cache,cache>> of `isobib` searches.
|
706
|
+
`:no-isobib-cache:`:: If set, use the `isobib` and `iev` gem functionality to look up
|
707
|
+
ISO and IEV references online, but do not use the <<cache,cache>> of `isobib` and `iev` searches.
|
668
708
|
|
669
|
-
`:local-cache:`:: Use the local isobib search
|
670
|
-
|
709
|
+
`:local-cache:`:: Use the local isobib and iev search caches to override the global isobib and iev search
|
710
|
+
caches.
|
671
711
|
|
672
712
|
`:i18nyaml:`:: Name of YAML file of internationalisation text, to use instead
|
673
713
|
of the built-in English, French or Chinese text used to label parts of the document
|
data/asciidoctor-iso.gemspec
CHANGED
@@ -25,16 +25,16 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
spec.files = `git ls-files`.split("\n")
|
27
27
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
28
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
28
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
29
29
|
|
30
30
|
spec.add_dependency "asciidoctor", "~> 1.5.7"
|
31
31
|
spec.add_dependency "ruby-jing"
|
32
32
|
spec.add_dependency "isodoc", ">= 0.8"
|
33
|
-
spec.add_dependency "iev", "~> 0.
|
33
|
+
spec.add_dependency "iev", "~> 0.2.0"
|
34
34
|
spec.add_dependency "relaton", "~> 0.1.3"
|
35
35
|
|
36
36
|
spec.add_development_dependency "bundler", "~> 1.15"
|
37
|
-
spec.add_development_dependency "byebug"
|
37
|
+
spec.add_development_dependency "byebug"
|
38
38
|
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
39
39
|
spec.add_development_dependency "guard", "~> 2.14"
|
40
40
|
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
data/lib/asciidoctor-iso.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "asciidoctor" unless defined? Asciidoctor::Converter
|
2
2
|
require_relative "asciidoctor/iso/converter"
|
3
3
|
require_relative "asciidoctor/iso/version"
|
4
|
+
require_relative "isodoc/iso/html_convert"
|
5
|
+
require_relative "isodoc/iso/word_convert"
|
4
6
|
require "asciidoctor/extensions"
|
5
7
|
|
6
8
|
if defined? Metanorma
|
data/lib/asciidoctor/iso/base.rb
CHANGED
@@ -16,6 +16,7 @@ module Asciidoctor
|
|
16
16
|
inline_macro Asciidoctor::ISO::AltTermInlineMacro
|
17
17
|
inline_macro Asciidoctor::ISO::DeprecatedTermInlineMacro
|
18
18
|
inline_macro Asciidoctor::ISO::DomainTermInlineMacro
|
19
|
+
block Asciidoctor::ISO::PlantUMLBlockMacro
|
19
20
|
end
|
20
21
|
|
21
22
|
def content(node)
|
@@ -75,6 +76,7 @@ module Asciidoctor
|
|
75
76
|
@no_isobib = node.attr("no-isobib")
|
76
77
|
@bibdb = nil
|
77
78
|
init_bib_caches(node)
|
79
|
+
init_iev_caches(node)
|
78
80
|
end
|
79
81
|
|
80
82
|
def init_bib_caches(node)
|
@@ -89,6 +91,18 @@ module Asciidoctor
|
|
89
91
|
@bibdb = Relaton::Db.new(globalname, localname) unless @no_isobib
|
90
92
|
end
|
91
93
|
|
94
|
+
def init_iev_caches(node)
|
95
|
+
unless (@no_isobib_cache || @no_isobib)
|
96
|
+
globalname = ievcache_name(true)
|
97
|
+
localname = ievcache_name(false) if node.attr("local-cache")
|
98
|
+
if node.attr("flush-caches")
|
99
|
+
system("rm -f #{globalname}") unless globalname.nil?
|
100
|
+
system("rm -f #{localname}") unless localname.nil?
|
101
|
+
end
|
102
|
+
end
|
103
|
+
@iev = Iev::Db.new(globalname, localname) unless @no_isobib
|
104
|
+
end
|
105
|
+
|
92
106
|
def default_fonts(node)
|
93
107
|
b = node.attr("body-font") ||
|
94
108
|
(node.attr("script") == "Hans" ? '"SimSun",serif' :
|
@@ -35,7 +35,7 @@ module Asciidoctor
|
|
35
35
|
|
36
36
|
def sidebar_attrs(node)
|
37
37
|
date = node.attr("date") || Date.today.iso8601.gsub(/\+.*$/, "")
|
38
|
-
date += "T00:00:00Z" unless /T/.match
|
38
|
+
date += "T00:00:00Z" unless /T/.match date
|
39
39
|
{
|
40
40
|
reviewer: node.attr("reviewer") || node.attr("source") || "(Unknown)",
|
41
41
|
id: Utils::anchor_or_uuid(node),
|
@@ -203,7 +203,7 @@ module Asciidoctor
|
|
203
203
|
def empty_text_before_first_element(x)
|
204
204
|
x.children.each do |c|
|
205
205
|
if c.text?
|
206
|
-
return false if /\S/.match
|
206
|
+
return false if /\S/.match(c.text)
|
207
207
|
end
|
208
208
|
return true if c.element?
|
209
209
|
end
|
@@ -212,7 +212,7 @@ module Asciidoctor
|
|
212
212
|
|
213
213
|
def strip_initial_space(x)
|
214
214
|
if x.children[0].text?
|
215
|
-
if !/\S/.match
|
215
|
+
if !/\S/.match(x.children[0].text)
|
216
216
|
x.children[0].remove
|
217
217
|
else
|
218
218
|
x.children[0].content = x.children[0].text.gsub(/^ /, "")
|
@@ -93,7 +93,7 @@ module Asciidoctor
|
|
93
93
|
|
94
94
|
def stem_parse(text, xml)
|
95
95
|
if /<([^:>&]+:)?math(\s+[^>&]+)?> |
|
96
|
-
<([^:>&]+:)?math(\s+[^>&]+)?>/x.match
|
96
|
+
<([^:>&]+:)?math(\s+[^>&]+)?>/x.match text
|
97
97
|
math = HTMLEntities.new.encode(text, :basic, :hexadecimal).
|
98
98
|
gsub(/&gt;/, ">").gsub(/\&lt;/, "<").gsub(/&amp;/, "&").
|
99
99
|
gsub(/>/, ">").gsub(/</, "<").gsub(/&/, "&")
|
@@ -37,5 +37,59 @@ module Asciidoctor
|
|
37
37
|
%{<domain>#{out}</domain>}
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
class PlantUMLBlockMacroBackend
|
42
|
+
# https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
43
|
+
def self.plantuml_installed?
|
44
|
+
cmd = "plantuml"
|
45
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
46
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
47
|
+
exts.each do |ext|
|
48
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
49
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.generate_file parent, reader
|
56
|
+
src = reader.source
|
57
|
+
reader.lines.first.sub(/\s+$/, "") != "@startuml" or
|
58
|
+
src = "@startuml\n#{src}\n@enduml\n"
|
59
|
+
filename = parent.document.reader.lineno
|
60
|
+
system "mkdir -p plantuml"
|
61
|
+
File.open("plantuml/#{filename}.pml", "w") { |f| f.write src }
|
62
|
+
system "plantuml plantuml/#{filename}.pml"
|
63
|
+
filename
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.generate_attrs attrs
|
67
|
+
through_attrs = %w(id align float title role width height alt).
|
68
|
+
inject({}) do |memo, key|
|
69
|
+
memo[key] = attrs[key] if attrs.has_key? key
|
70
|
+
memo
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class PlantUMLBlockMacro < Asciidoctor::Extensions::BlockProcessor
|
76
|
+
use_dsl
|
77
|
+
named :plantuml
|
78
|
+
on_context :literal
|
79
|
+
parse_content_as :raw
|
80
|
+
|
81
|
+
def process(parent, reader, attrs)
|
82
|
+
if PlantUMLBlockMacroBackend.plantuml_installed?
|
83
|
+
filename = PlantUMLBlockMacroBackend.generate_file parent, reader
|
84
|
+
through_attrs = PlantUMLBlockMacroBackend.generate_attrs attrs
|
85
|
+
through_attrs["target"] = "plantuml/#{filename}.png"
|
86
|
+
create_image_block parent, through_attrs
|
87
|
+
else
|
88
|
+
warn "PlantUML not installed"
|
89
|
+
# attrs.delete(1) : remove the style attribute
|
90
|
+
create_listing_block parent, reader.source, attrs.reject { |k, v| k == 1 }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
40
94
|
end
|
41
95
|
end
|
data/lib/asciidoctor/iso/ref.rb
CHANGED
@@ -93,7 +93,7 @@ module Asciidoctor
|
|
93
93
|
t.formattedref **{ format: "application/x-isodoc+xml" } do |i|
|
94
94
|
i << ref_normalise_no_format(m[:text])
|
95
95
|
end
|
96
|
-
t.docidentifier(/^\d+$/.match
|
96
|
+
t.docidentifier(/^\d+$/.match(m[:code]) ? "[#{m[:code]}]" : m[:code])
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -103,7 +103,7 @@ module Asciidoctor
|
|
103
103
|
Utils::warning(node, "no anchor on reference", item)
|
104
104
|
return
|
105
105
|
end
|
106
|
-
unless m[:code] && /^\d+$/.match
|
106
|
+
unless m[:code] && /^\d+$/.match(m[:code])
|
107
107
|
ref = fetch_ref xml, m[:code],
|
108
108
|
m.named_captures.has_key?("year") ? m[:year] : nil, {}
|
109
109
|
return use_my_anchor(ref, m[:anchor]) if ref
|
@@ -177,6 +177,11 @@ module Asciidoctor
|
|
177
177
|
global ? "#{Dir.home}/.relaton-bib.pstore" :
|
178
178
|
"#{@filename}.relaton.pstore"
|
179
179
|
end
|
180
|
+
|
181
|
+
def ievcache_name(global)
|
182
|
+
global ? "#{Dir.home}/.iev.pstore" :
|
183
|
+
"#{@filename}.iev.pstore"
|
184
|
+
end
|
180
185
|
end
|
181
186
|
end
|
182
187
|
end
|
@@ -53,11 +53,11 @@ module Asciidoctor
|
|
53
53
|
doctypes = /International\sStandard | Technical\sSpecification |
|
54
54
|
Publicly\sAvailable\sSpecification | Technical\sReport | Guide /xi
|
55
55
|
title_main_en = root.at("//title-main[@language='en']")
|
56
|
-
if !title_main_en.nil? && doctypes.match
|
56
|
+
if !title_main_en.nil? && doctypes.match(title_main_en.text)
|
57
57
|
warn "Main Title may name document type"
|
58
58
|
end
|
59
59
|
title_intro_en = root.at("//title-intro[@language='en']")
|
60
|
-
if !title_intro_en.nil? && doctypes.match
|
60
|
+
if !title_intro_en.nil? && doctypes.match(title_intro_en.text)
|
61
61
|
warn "Title Intro may name document type"
|
62
62
|
end
|
63
63
|
end
|
@@ -124,7 +124,7 @@ module Asciidoctor
|
|
124
124
|
root.xpath("//xref").each do |t|
|
125
125
|
# does not deal with preceding text marked up
|
126
126
|
preceding = t.at("./preceding-sibling::text()[last()]")
|
127
|
-
next unless !preceding.nil? && /\bsee\s*$/mi.match
|
127
|
+
next unless !preceding.nil? && /\bsee\s*$/mi.match(preceding)
|
128
128
|
(target = root.at("//*[@id = '#{t['target']}']")) || next
|
129
129
|
if target&.at("./ancestor-or-self::*[@obligation = 'normative']")
|
130
130
|
warn "ISO: 'see #{t['target']}' is pointing to a normative section"
|
@@ -135,7 +135,7 @@ module Asciidoctor
|
|
135
135
|
def see_erefs_validate(root)
|
136
136
|
root.xpath("//eref").each do |t|
|
137
137
|
preceding = t.at("./preceding-sibling::text()[last()]")
|
138
|
-
next unless !preceding.nil? && /\bsee\s*$/mi.match
|
138
|
+
next unless !preceding.nil? && /\bsee\s*$/mi.match(preceding)
|
139
139
|
target = root.at("//*[@id = '#{t['bibitemid']}']")
|
140
140
|
if target.at("./ancestor::references"\
|
141
141
|
"[title = 'Normative References']")
|
@@ -146,7 +146,7 @@ module Asciidoctor
|
|
146
146
|
|
147
147
|
def locality_erefs_validate(root)
|
148
148
|
root.xpath("//eref[locality]").each do |t|
|
149
|
-
unless /:[ ]?\d+{4}$/.match
|
149
|
+
unless /:[ ]?\d+{4}$/.match t["citeas"]
|
150
150
|
warn "ISO: undated reference #{t['citeas']} should not contain "\
|
151
151
|
"specific elements"
|
152
152
|
end
|
@@ -154,7 +154,7 @@ module Asciidoctor
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def termdef_warn(text, re, term, msg)
|
157
|
-
re.match
|
157
|
+
re.match(text) && warn("ISO style: #{term}: #{msg}")
|
158
158
|
end
|
159
159
|
|
160
160
|
def termdef_style(xmldoc)
|
@@ -172,10 +172,10 @@ module Asciidoctor
|
|
172
172
|
|
173
173
|
def iev_validate(xmldoc)
|
174
174
|
xmldoc.xpath("//term").each do |t|
|
175
|
-
/^IEV($|\s|:)/.match
|
175
|
+
/^IEV($|\s|:)/.match(t&.at(".//origin/@citeas")&.text) or next
|
176
176
|
pref = t.xpath("./preferred").inject([]) { |m, x| m << x&.text&.downcase }
|
177
177
|
locality = t.xpath(SOURCELOCALITY)&.text or next
|
178
|
-
iev =
|
178
|
+
iev = @iev.fetch(locality, xmldoc&.at("//language")&.text || "en") or next
|
179
179
|
pref.include?(iev.downcase) or
|
180
180
|
warn %(Term "#{pref[0]}" does not match IEV #{locality} "#{iev}")
|
181
181
|
end
|
@@ -25,7 +25,7 @@ module Asciidoctor
|
|
25
25
|
|
26
26
|
def requirement(text)
|
27
27
|
text.split(/\.\s+/).each do |t|
|
28
|
-
return t if REQUIREMENT_RE.match
|
28
|
+
return t if REQUIREMENT_RE.match t
|
29
29
|
end
|
30
30
|
nil
|
31
31
|
end
|
@@ -43,7 +43,7 @@ module Asciidoctor
|
|
43
43
|
|
44
44
|
def recommendation(text)
|
45
45
|
text.split(/\.\s+/).each do |t|
|
46
|
-
return t if RECOMMENDATION_RE.match
|
46
|
+
return t if RECOMMENDATION_RE.match t
|
47
47
|
end
|
48
48
|
nil
|
49
49
|
end
|
@@ -62,7 +62,7 @@ module Asciidoctor
|
|
62
62
|
|
63
63
|
def permission(text)
|
64
64
|
text.split(/\.\s+/).each do |t|
|
65
|
-
return t if PERMISSION_RE.match
|
65
|
+
return t if PERMISSION_RE.match t
|
66
66
|
end
|
67
67
|
nil
|
68
68
|
end
|
@@ -81,13 +81,13 @@ module Asciidoctor
|
|
81
81
|
Regexp::IGNORECASE)
|
82
82
|
|
83
83
|
def possibility(text)
|
84
|
-
text.split(/\.\s+/).each { |t| return t if POSSIBILITY_RE.match
|
84
|
+
text.split(/\.\s+/).each { |t| return t if POSSIBILITY_RE.match t }
|
85
85
|
nil
|
86
86
|
end
|
87
87
|
|
88
88
|
def external_constraint(text)
|
89
89
|
text.split(/\.\s+/).each do |t|
|
90
|
-
return t if /\b(must)\b/xi.match
|
90
|
+
return t if /\b(must)\b/xi.match t
|
91
91
|
end
|
92
92
|
nil
|
93
93
|
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
2
|
+
xmlns:o="urn:schemas-microsoft-com:office:office"
|
3
|
+
xmlns:w="urn:schemas-microsoft-com:office:word"
|
4
|
+
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
|
5
|
+
xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
|
6
|
+
|
7
|
+
<head>
|
8
|
+
<meta name=Title content="">
|
9
|
+
<meta name=Keywords content="">
|
10
|
+
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
|
11
|
+
<meta name=ProgId content=Word.Document>
|
12
|
+
<meta name=Generator content="Microsoft Word 15">
|
13
|
+
<meta name=Originator content="Microsoft Word 15">
|
14
|
+
<link id=Main-File rel=Main-File href="../{{ filename }}.html">
|
15
|
+
<!--[if gte mso 9]><xml>
|
16
|
+
<o:shapedefaults v:ext="edit" spidmax="2049"/>
|
17
|
+
</xml><![endif]-->
|
18
|
+
</head>
|
19
|
+
|
20
|
+
<body lang=EN link=blue vlink="#954F72">
|
21
|
+
|
22
|
+
<div style='mso-element:footnote-separator' id=fs>
|
23
|
+
|
24
|
+
<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
|
25
|
+
normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
|
26
|
+
|
27
|
+
<hr align=left size=1 width="33%">
|
28
|
+
|
29
|
+
<![endif]></span></span></p>
|
30
|
+
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<div style='mso-element:footnote-continuation-separator' id=fcs>
|
34
|
+
|
35
|
+
<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
|
36
|
+
normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
|
37
|
+
|
38
|
+
<hr align=left size=1>
|
39
|
+
|
40
|
+
<![endif]></span></span></p>
|
41
|
+
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div style='mso-element:endnote-separator' id=es>
|
45
|
+
|
46
|
+
<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
|
47
|
+
normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
|
48
|
+
|
49
|
+
<hr align=left size=1 width="33%">
|
50
|
+
|
51
|
+
<![endif]></span></span></p>
|
52
|
+
|
53
|
+
</div>
|
54
|
+
|
55
|
+
<div style='mso-element:endnote-continuation-separator' id=ecs>
|
56
|
+
|
57
|
+
<p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
|
58
|
+
normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
|
59
|
+
|
60
|
+
<hr align=left size=1>
|
61
|
+
|
62
|
+
<![endif]></span></span></p>
|
63
|
+
|
64
|
+
</div>
|
65
|
+
|
66
|
+
<div style='mso-element:header' id=eha>
|
67
|
+
|
68
|
+
<p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
|
69
|
+
mso-line-height-rule:exactly'><span lang=EN-GB>{{ docnumber }}:{{ docyear }}(E){{ draftinfo }}</span></p>
|
70
|
+
|
71
|
+
</div>
|
72
|
+
|
73
|
+
<div style='mso-element:header' id=ha>
|
74
|
+
|
75
|
+
<p class=MsoHeader style='margin-bottom:18.0pt'><span lang=EN-GB
|
76
|
+
style='font-size:10.0pt;mso-bidi-font-size:11.0pt;font-weight:normal'>©
|
77
|
+
{{ agency }} {{ docyear }} – All rights reserved</span><span lang=EN-GB
|
78
|
+
style='font-weight:normal'><o:p></o:p></span></p>
|
79
|
+
|
80
|
+
</div>
|
81
|
+
|
82
|
+
<div style='mso-element:footer' id=efa>
|
83
|
+
|
84
|
+
<p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
|
85
|
+
exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
|
86
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
87
|
+
style='mso-element:field-begin'></span><span
|
88
|
+
style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>
|
89
|
+
</span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
|
90
|
+
style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
|
91
|
+
mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
|
92
|
+
style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
|
93
|
+
mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
|
94
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
95
|
+
style='mso-tab-count:1'> </span>©
|
96
|
+
{{ agency }} {{ docyear }} – All rights reserved<o:p></o:p></span></p>
|
97
|
+
|
98
|
+
</div>
|
99
|
+
|
100
|
+
<div style='mso-element:header' id=eh2>
|
101
|
+
|
102
|
+
<p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
|
103
|
+
mso-line-height-rule:exactly'><span lang=EN-GB>{{ docnumber }}:{{ docyear }}(E){{ draftinfo }}</span></p>
|
104
|
+
|
105
|
+
</div>
|
106
|
+
|
107
|
+
<div style='mso-element:header' id=h2>
|
108
|
+
|
109
|
+
<p class=MsoHeader align=right style='text-align:right;line-height:12.0pt;
|
110
|
+
mso-line-height-rule:exactly'><span lang=EN-GB>{{ docnumber }}:{{ docyear }}(E){{ draftinfo }}</span></p>
|
111
|
+
|
112
|
+
</div>
|
113
|
+
|
114
|
+
<div style='mso-element:footer' id=ef2>
|
115
|
+
|
116
|
+
<p class=MsoFooter style='line-height:12.0pt;mso-line-height-rule:exactly'><!--[if supportFields]><span
|
117
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
118
|
+
style='mso-element:field-begin'></span><span
|
119
|
+
style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>
|
120
|
+
</span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
|
121
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
122
|
+
style='mso-no-proof:yes'>ii</span></span><!--[if supportFields]><span
|
123
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
124
|
+
style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
|
125
|
+
style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:
|
126
|
+
1'> </span>©
|
127
|
+
{{ agency }} {{ docyear }} – All rights reserved<o:p></o:p></span></p>
|
128
|
+
|
129
|
+
</div>
|
130
|
+
|
131
|
+
<div style='mso-element:footer' id=f2>
|
132
|
+
|
133
|
+
<p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
|
134
|
+
style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© {{ agency }} {{ docyear }} – All
|
135
|
+
rights reserved<span style='mso-tab-count:1'> </span></span><!--[if supportFields]><span
|
136
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
137
|
+
style='mso-element:field-begin'></span> PAGE<span style='mso-spacerun:yes'>
|
138
|
+
</span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
|
139
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
140
|
+
style='mso-no-proof:yes'>iii</span></span><!--[if supportFields]><span
|
141
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
142
|
+
style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
|
143
|
+
style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
|
144
|
+
|
145
|
+
</div>
|
146
|
+
|
147
|
+
<div style='mso-element:footer' id=ef3>
|
148
|
+
|
149
|
+
<p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
|
150
|
+
exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
|
151
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
152
|
+
style='mso-element:field-begin'></span><span
|
153
|
+
style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>
|
154
|
+
</span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
|
155
|
+
style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
|
156
|
+
mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
|
157
|
+
style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
|
158
|
+
mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
|
159
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
|
160
|
+
style='mso-tab-count:1'> </span>©
|
161
|
+
{{ agency }} {{ docyear }} – All rights reserved<o:p></o:p></span></p>
|
162
|
+
|
163
|
+
</div>
|
164
|
+
|
165
|
+
<div style='mso-element:footer' id=f3>
|
166
|
+
|
167
|
+
<p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
|
168
|
+
style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© {{ agency }} {{ docyear }} – All
|
169
|
+
rights reserved<span style='mso-tab-count:1'> </span></span><!--[if supportFields]><b
|
170
|
+
style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
|
171
|
+
mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
|
172
|
+
PAGE<span style='mso-spacerun:yes'> </span>\* MERGEFORMAT <span
|
173
|
+
style='mso-element:field-separator'></span></span></b><![endif]--><b
|
174
|
+
style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
|
175
|
+
mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b
|
176
|
+
style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
|
177
|
+
mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
|
178
|
+
lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
|
179
|
+
|
180
|
+
</div>
|
181
|
+
|
182
|
+
<div style='mso-element:footer' id=f4>
|
183
|
+
|
184
|
+
<p class=MsoFooter><b style='mso-bidi-font-weight:normal'><span>ICS {{ ics }}<o:p></o:p></span></b></p>
|
185
|
+
|
186
|
+
<p class=MsoFooter style='margin-top:0cm'><span lang=EN-AU style='font-size:
|
187
|
+
10.0pt;mso-ansi-language:EN-AU'>Price based on </span><!--[if supportFields]><span
|
188
|
+
lang=EN-AU style='font-size:10.0pt;mso-ansi-language:EN-AU'><span
|
189
|
+
style='mso-element:field-begin'></span><span style='mso-spacerun:yes'> </span>NUMPAGES<span
|
190
|
+
style='mso-spacerun:yes'> </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
|
191
|
+
lang=EN-AU style='font-size:10.0pt;mso-ansi-language:EN-AU'><span
|
192
|
+
style='mso-no-proof:yes'>26</span></span><!--[if supportFields]><span
|
193
|
+
lang=EN-AU style='font-size:10.0pt;mso-ansi-language:EN-AU'><span
|
194
|
+
style='mso-element:field-end'></span></span><![endif]--><span lang=EN-AU
|
195
|
+
style='font-size:10.0pt;mso-ansi-language:EN-AU'> pages<o:p></o:p></span></p>
|
196
|
+
|
197
|
+
<p class=MsoFooter><span lang=EN-AU style='font-size:10.0pt;'>©
|
198
|
+
{{ agency }} {{ docyear }} – All rights reserved<o:p></o:p></span></p>
|
199
|
+
|
200
|
+
</div>
|
201
|
+
|
202
|
+
|
203
|
+
|
204
|
+
</body>
|
205
|
+
|
206
|
+
</html>
|