metanorma-standoc 1.0.8 → 1.0.9
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/.rubocop.yml +2 -7
- data/Gemfile.lock +15 -15
- data/README.adoc +315 -2
- data/lib/asciidoctor/standoc/biblio.rng +10 -0
- data/lib/asciidoctor/standoc/cleanup.rb +3 -15
- data/lib/asciidoctor/standoc/cleanup_ref.rb +0 -10
- data/lib/asciidoctor/standoc/front.rb +29 -4
- data/lib/asciidoctor/standoc/isodoc.rng +3 -0
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +1 -1
- data/spec/asciidoctor-standoc/base_spec.rb +55 -9
- data/spec/asciidoctor-standoc/refs_spec.rb +0 -3
- data/spec/spec_helper.rb +0 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fdc800133b8aec3e4931bada3fe492a537f19c2807767b5124c8f4e39b3649b
|
4
|
+
data.tar.gz: ead7bf5902bd28d515fbade4cf7093e1aa88ef5a22faf179f32dae4f42c6da17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c51bf19c625ff3822b45ced863b8d27b231789b2d500abe68bc063b1f92be5f4f9b052bba8fc1d656386c336327ee7f08958cffefb36d12c60079a3dde725b1
|
7
|
+
data.tar.gz: d22b6b4f30f2cbff1b415190d12ed8c1c2d5a41d25ed5c6da7ed1d2738f5cdaa2dec58d0bb2c210ce2f2682792b4606eb48e6a47bd2f56835fee7c3b3ff2cf3c
|
data/.rubocop.yml
CHANGED
@@ -3,13 +3,8 @@
|
|
3
3
|
# All project-specific additions and overrides should be specified in this file.
|
4
4
|
|
5
5
|
inherit_from:
|
6
|
-
|
7
|
-
- ".rubocop.tb.yml"
|
8
|
-
# Overrides from Ribose
|
9
|
-
- ".rubocop.ribose.yml"
|
6
|
+
- https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
|
10
7
|
AllCops:
|
11
|
-
|
12
|
-
StyleGuideCopsOnly: false
|
13
|
-
TargetRubyVersion: 2.5
|
8
|
+
TargetRubyVersion: 2.3
|
14
9
|
Rails:
|
15
10
|
Enabled: true
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
metanorma-standoc (1.0.
|
4
|
+
metanorma-standoc (1.0.9)
|
5
5
|
asciidoctor (~> 1.5.7)
|
6
6
|
iev (~> 0.2.0)
|
7
7
|
isodoc (~> 0.9.0)
|
@@ -17,7 +17,7 @@ GEM
|
|
17
17
|
algoliasearch (1.23.2)
|
18
18
|
httpclient (~> 2.8, >= 2.8.3)
|
19
19
|
json (>= 1.5.1)
|
20
|
-
asciidoctor (1.5.
|
20
|
+
asciidoctor (1.5.8)
|
21
21
|
asciimath (1.0.6)
|
22
22
|
ast (2.4.0)
|
23
23
|
byebug (10.0.2)
|
@@ -31,7 +31,7 @@ GEM
|
|
31
31
|
nokogiri (>= 1.4.3)
|
32
32
|
ffi (1.9.25)
|
33
33
|
formatador (0.2.5)
|
34
|
-
gb-agencies (0.0.
|
34
|
+
gb-agencies (0.0.5)
|
35
35
|
gbbib (0.4.1)
|
36
36
|
cnccs (~> 0.1.1)
|
37
37
|
gb-agencies (~> 0.0.1)
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
guard-compat (~> 1.1)
|
52
52
|
rspec (>= 2.99.0, < 4.0)
|
53
53
|
hashdiff (0.3.7)
|
54
|
-
html2doc (0.8.
|
54
|
+
html2doc (0.8.6)
|
55
55
|
asciimath
|
56
56
|
htmlentities (~> 4.3.4)
|
57
57
|
image_size
|
@@ -78,12 +78,12 @@ GEM
|
|
78
78
|
algoliasearch
|
79
79
|
iecbib (~> 0.2.1)
|
80
80
|
iso-bib-item (~> 0.4.2)
|
81
|
-
isodoc (0.9.
|
81
|
+
isodoc (0.9.8)
|
82
82
|
asciimath
|
83
|
-
html2doc (~> 0.8.
|
83
|
+
html2doc (~> 0.8.6)
|
84
84
|
htmlentities (~> 4.3.4)
|
85
85
|
liquid
|
86
|
-
metanorma (~> 0.
|
86
|
+
metanorma (~> 0.3.0)
|
87
87
|
nokogiri
|
88
88
|
rake (~> 12.0)
|
89
89
|
roman-numerals
|
@@ -100,8 +100,8 @@ GEM
|
|
100
100
|
rb-inotify (~> 0.9, >= 0.9.7)
|
101
101
|
ruby_dep (~> 1.2)
|
102
102
|
lumberjack (1.0.13)
|
103
|
-
metanorma (0.
|
104
|
-
method_source (0.9.
|
103
|
+
metanorma (0.3.0)
|
104
|
+
method_source (0.9.2)
|
105
105
|
mime-types (3.2.2)
|
106
106
|
mime-types-data (~> 3.2015)
|
107
107
|
mime-types-data (3.2018.0812)
|
@@ -114,10 +114,10 @@ GEM
|
|
114
114
|
shellany (~> 0.0)
|
115
115
|
optout (0.0.2)
|
116
116
|
parallel (1.12.1)
|
117
|
-
parser (2.5.
|
117
|
+
parser (2.5.3.0)
|
118
118
|
ast (~> 2.4.0)
|
119
119
|
powerpack (0.1.2)
|
120
|
-
pry (0.
|
120
|
+
pry (0.12.1)
|
121
121
|
coderay (~> 1.1.0)
|
122
122
|
method_source (~> 0.9.0)
|
123
123
|
public_suffix (3.0.3)
|
@@ -162,7 +162,7 @@ GEM
|
|
162
162
|
ruby_deep_clone (0.8.0)
|
163
163
|
ruby_dep (1.5.0)
|
164
164
|
safe_yaml (1.0.4)
|
165
|
-
sass (3.
|
165
|
+
sass (3.7.2)
|
166
166
|
sass-listen (~> 4.0.0)
|
167
167
|
sass-listen (4.0.0)
|
168
168
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
@@ -178,7 +178,7 @@ GEM
|
|
178
178
|
simplecov-html (0.10.2)
|
179
179
|
sterile (1.0.13)
|
180
180
|
nokogiri
|
181
|
-
thor (0.20.
|
181
|
+
thor (0.20.3)
|
182
182
|
thread_safe (0.3.6)
|
183
183
|
timecop (0.9.1)
|
184
184
|
unicode-display_width (1.4.0)
|
@@ -198,7 +198,7 @@ DEPENDENCIES
|
|
198
198
|
equivalent-xml (~> 0.6)
|
199
199
|
guard (~> 2.14)
|
200
200
|
guard-rspec (~> 4.7)
|
201
|
-
metanorma (~> 0.
|
201
|
+
metanorma (~> 0.3.0)
|
202
202
|
metanorma-standoc!
|
203
203
|
rake (~> 12.0)
|
204
204
|
rspec (~> 3.6)
|
@@ -209,4 +209,4 @@ DEPENDENCIES
|
|
209
209
|
webmock
|
210
210
|
|
211
211
|
BUNDLED WITH
|
212
|
-
1.
|
212
|
+
1.17.1
|
data/README.adoc
CHANGED
@@ -8,6 +8,116 @@ WARNING: This gem is still under development.
|
|
8
8
|
|
9
9
|
Gem for serialising the https://github.com/riboseinc/metanorma-model-standoc[Metanorma Standoc] model.
|
10
10
|
|
11
|
+
== Functionality
|
12
|
+
|
13
|
+
This gem processes Metanorma documents following a template for generating standards documents, according
|
14
|
+
to a range of standards classes. This gem provides underlying generic functionality; behaviour specific
|
15
|
+
to each standards class is refined in the gem specific to that standards class (e.g. https://github.com/riboseinc/metanorma-iso).
|
16
|
+
The following outputs are generated.
|
17
|
+
|
18
|
+
* Metanorma XML representation of the document, intended as a document model for
|
19
|
+
Standards. The Metanorma XML representation is processed in turn, to generate one or more of
|
20
|
+
the following outputs as end deliverables, depending on each standards class gem:
|
21
|
+
* Microsoft Word output (`.doc`)
|
22
|
+
* HTML output (`.html`)
|
23
|
+
* PDF (`.pdf`)
|
24
|
+
|
25
|
+
The following input formats are supported:
|
26
|
+
|
27
|
+
* http://asciidoctor.org/[Asciidoctor]
|
28
|
+
|
29
|
+
This README provides an overview of the functionality of the gem; see also
|
30
|
+
https://github.com/riboseinc/metanorma-iso/blob/master/docs/guidance.adoc[Guidance for authoring].
|
31
|
+
https://github.com/riboseinc/metanorma-iso/blob/master/docs/quickstart.adoc[Quickstart guide]
|
32
|
+
gives a summary overview.
|
33
|
+
|
34
|
+
NOTE: http://asciimath.org[AsciiMathML] is used for mathematical formatting.
|
35
|
+
The gem uses the https://github.com/asciidoctor/asciimath[Ruby AsciiMath parser],
|
36
|
+
which is syntactically stricter than the common MathJax processor;
|
37
|
+
if you do not get expected results, try bracketting terms your in AsciiMathML
|
38
|
+
expressions.
|
39
|
+
|
40
|
+
=== Installation
|
41
|
+
|
42
|
+
If you are using a Mac, the https://github.com/riboseinc/metanorma-macos-setup
|
43
|
+
repository has instructions on setting up your machine to run Metanorma
|
44
|
+
scripts such as this one. You need only run the following in a Terminal console:
|
45
|
+
|
46
|
+
[source,console]
|
47
|
+
----
|
48
|
+
$ bash <(curl -s https://raw.githubusercontent.com/riboseinc/metanorma-macos-setup/master/metanorma-setup)
|
49
|
+
$ gem install metanorma-standoc
|
50
|
+
$ gem install metanorma-cli
|
51
|
+
----
|
52
|
+
|
53
|
+
The metanorma-cli gem is the command-line interface for the Metanorma tool suite
|
54
|
+
(incorporating the `metanorma` executable seen above).
|
55
|
+
|
56
|
+
== Approach
|
57
|
+
=== Document model
|
58
|
+
|
59
|
+
The https://github.com/riboseinc/metanorma-model-iso[Metanorma document model] used in document generation
|
60
|
+
intends to introduce rigour into the standards authoring process; existing
|
61
|
+
document templates do not support such rigour down to the element level. It also introduces
|
62
|
+
flexibility by decoupling the document structure from its presentation.
|
63
|
+
|
64
|
+
Formal definitions of standards prescribe the contents of standards to a level
|
65
|
+
amenable to an explicit document model. The ISO International Standard format,
|
66
|
+
ss prescribed in
|
67
|
+
http://www.iec.ch/members_experts/refdocs/iec/isoiecdir-2%7Bed7.0%7Den.pdf[ISO/IEC DIR 2 "Principles and rules for the structure and drafting of ISO and IEC documents"],
|
68
|
+
is one of the more detailed such prescriptions available. A formal document
|
69
|
+
model would allow checking for consistency in format and content, and expedite
|
70
|
+
authoring and quality control of ISO standards. Authoring standards through a
|
71
|
+
more abstract formal model also permit enhanced functionality such as
|
72
|
+
cross-reference link checking and auto-numbering of sections, figures, tables and formulas.
|
73
|
+
Outputting a document in different languages also becomes straightforward.
|
74
|
+
|
75
|
+
=== Asciidoctor
|
76
|
+
|
77
|
+
Asciidoctor has been selected as the authoring tool to generate the document
|
78
|
+
model representation of standards. It is a document formatting tool like
|
79
|
+
Markdown and DocBook, which combines the relative ease of use of the former
|
80
|
+
(using relatively lightweight markup), and the rigour and expressively of the
|
81
|
+
latter (it has a well-defined syntax, and was in fact initially developed as a
|
82
|
+
DocBook document authoring tool). Asciidoctor has built-in capability to output
|
83
|
+
Text and HTML; so it can be used to preview the file as it is being
|
84
|
+
authored. However the gem natively outputs HTML and Word output, so there should
|
85
|
+
not be much need for this.
|
86
|
+
|
87
|
+
Asciidoctor has some formatting constraints because of its own document model,
|
88
|
+
that users need to be aware. For example, Asciidoc has a strict division between
|
89
|
+
inline and block elements, which disallows certain kinds of nesting; so a list
|
90
|
+
cannot be embedded within a paragraph, it can only constitute its own paragraph
|
91
|
+
(though lists themselves can be nested within each other). Asciidoctor also disallows
|
92
|
+
multiple paragraphs in footnotes,
|
93
|
+
http://discuss.asciidoctor.org/footnotes-with-paragraph-breaks-td4130.html[by design].
|
94
|
+
(The document model does not impose this constraint, so you could edit the generated
|
95
|
+
XML to break up paragraphs within a footnote.)
|
96
|
+
|
97
|
+
== Different behaviour from native Asciidoctor
|
98
|
+
|
99
|
+
=== Autonumbering
|
100
|
+
|
101
|
+
Autonumbering in Metanorma extends to formulas (which are encoded as "stem" blocks) and notes.
|
102
|
+
Autonumbering is applied in the conversion from Metanorma XML to output formats (`isodoc`);
|
103
|
+
by default it restarts for each annex, but is continuous for the main body of text.
|
104
|
+
|
105
|
+
=== Unsupported blocks
|
106
|
+
|
107
|
+
Sidebars (`aside`) are not supported, and have been repurposed for reviewer comments.
|
108
|
+
Page breaks (`thematic break`) are not supported; ASCII art/preformatted text (`literal`)
|
109
|
+
are not supported in most standards classes.
|
110
|
+
|
111
|
+
=== Footnotes
|
112
|
+
|
113
|
+
Table and figure footnotes are treated diffferently from all other footnotes: they are
|
114
|
+
rendered at the bottom of the table or figure, and they are numbered separately.
|
115
|
+
|
116
|
+
=== References
|
117
|
+
|
118
|
+
References to well-defined standards codes use the document identifiers for citations
|
119
|
+
(e.g. `ISO 20483:2013`); generic references in bibliographies use bracketed numbers `[1]`.
|
120
|
+
|
11
121
|
[[model_additions]]
|
12
122
|
== Asciidoctor model additions
|
13
123
|
|
@@ -61,8 +171,8 @@ _paddy_ (<<paddy>>) from which the husk only has been removed
|
|
61
171
|
If the Terms and Definitions of a standard are partly or fully sourced from
|
62
172
|
another standard, that standard is cited in a `source` attribute to the section,
|
63
173
|
which is set to the reference anchor of the standard (given under the Normative
|
64
|
-
Referencecs)
|
65
|
-
|
174
|
+
Referencecs).
|
175
|
+
Any boilerplate of the Terms and Definitions section is adjusted accordingly.
|
66
176
|
|
67
177
|
[source,asciidoctor]
|
68
178
|
--
|
@@ -358,3 +468,206 @@ command line:
|
|
358
468
|
If PlantUML is not installed locally, the source PlantUML is incorporated into
|
359
469
|
the output document as sourcecode.
|
360
470
|
|
471
|
+
== Bibliography integration
|
472
|
+
|
473
|
+
Bibliographic entries for standards are expected to use the standard document
|
474
|
+
identifier as the item label; e.g.
|
475
|
+
|
476
|
+
[source,asciidoctor]
|
477
|
+
--
|
478
|
+
* [[[ref1,ISO 712]]], _Cereals and cereal products -- Determination of moisture content -- Reference method_
|
479
|
+
--
|
480
|
+
|
481
|
+
By default, the https://github.com/riboseinc/relaton[`relaton`] gem is used to look up the reference details for
|
482
|
+
standards known to have online bibliographies. For bibliographic standards to be looked up via relaton,
|
483
|
+
the standard document identifier needs to be encoded in a format recognised by relaton as a key:
|
484
|
+
|
485
|
+
* For ISO: `ISO(identifier)`, or any identifier prefixed with `ISO`
|
486
|
+
* For IEC: `IEC(identifier)`, or any identifier prefixed with `IEC`
|
487
|
+
* For IETF: `IETF(identifier)` (e.g. `IETF(I-D.-burger-xcon-mmodels)`), or any identifier prefixed with `RFC`
|
488
|
+
* For GB: `CN(identifier)` (e.g. `CN(JB/T 13368-2018)`)
|
489
|
+
|
490
|
+
The full bibliographic details of the item are screenscraped from the online bibliography and inserted into the XML file
|
491
|
+
(although only the title of the reference is used in rendering).
|
492
|
+
|
493
|
+
In addition, if any entries in Terms and Definitions cite the International Electrotechnical Vocabulary (IEV),
|
494
|
+
the http://www.electropedia.org[IEV Electropedia] termbank is queried during validation, to confirm
|
495
|
+
that the cited entries are the same as what is cited online; those queries are routed through the `iev` gem
|
496
|
+
|
497
|
+
TODO: update
|
498
|
+
|
499
|
+
[[cache]]
|
500
|
+
The results of all `relaton` searches done to date, across all documents,
|
501
|
+
are cached in the global cache file `~/.relaton-bib.pstore`,
|
502
|
+
so they do not need to be re-fetched each time a document is processed.
|
503
|
+
(The web query takes a few seconds per reference.)
|
504
|
+
|
505
|
+
The results of all `relaton` searches done to date in a given directory
|
506
|
+
are stored in the same directory as the current document,
|
507
|
+
as the file `{filename}.relaton.pstore`. The local cache overrides entries in
|
508
|
+
the global cache, and can be manually edited. The local cache is only used
|
509
|
+
if the `:local-cache:` or `:local-cache-only:` document attribute is set.
|
510
|
+
|
511
|
+
If the document attribute `:no-isobib:` is set, the reference details for
|
512
|
+
items are not looked up via `isobib`, and the `isobib` caches are not used.
|
513
|
+
If the document attribute `:no-isobib-cache:` is set, the reference details for
|
514
|
+
items are still looked up via `isobib`, but the `isobib` caches are not used.
|
515
|
+
|
516
|
+
Any entry in the cache that corresponds to an undated ISO reference fetches its details
|
517
|
+
from the latest available entry on the ISO web site. If the entry is more than 60
|
518
|
+
days old, it is refetched.
|
519
|
+
|
520
|
+
The results of all `iev` searches done to date across all documents are cached
|
521
|
+
in the global cache fule `~/iev.pstore`, and the results of all `iev` searches
|
522
|
+
done to date for the current document are stored in the same directory as the
|
523
|
+
current document, in the file `(filename).iev.pstore`.
|
524
|
+
|
525
|
+
== Document Attributes
|
526
|
+
|
527
|
+
The gem relies on Asciidoctor document attributes to provide necessary
|
528
|
+
metadata about the document. These include:
|
529
|
+
|
530
|
+
`:nodoc:`:: Do not generate Word and HTML output, only generate XML output.
|
531
|
+
Can be used as a command-line option (like all other document attributes):
|
532
|
+
`asciidoctor -a nodoc -b iso -r "metanorma-iso" a.adoc`
|
533
|
+
|
534
|
+
`:novalid:`:: Suppress validation.
|
535
|
+
|
536
|
+
`:flush-caches:`:: If set, delete and reinitialise the <<cache,cache>> of `relaton` searches.
|
537
|
+
|
538
|
+
`:no-isobib:`:: If set, do not use the `relaton` or `iev` gem functionality to look up
|
539
|
+
ISO and IEV references online, nor the <<cache,cache>> of `relaton` and `iev` searches.
|
540
|
+
|
541
|
+
`:no-isobib-cache:`:: If set, use the `relaton` and `iev` gem functionality to look up
|
542
|
+
ISO and IEV references online, but do not use the <<cache,cache>> of `relaton` and `iev` searches.
|
543
|
+
|
544
|
+
`:local-cache:`:: Use the local relaton and iev search caches to override the global `relaton` and `iev` search
|
545
|
+
caches.
|
546
|
+
|
547
|
+
`:local-cache-only:`:: Use the local relaton and iev search caches to the exclusion of the global `relaton` and `iev` search
|
548
|
+
caches.
|
549
|
+
|
550
|
+
`:i18nyaml:`:: Name of YAML file of internationalisation text, to use instead
|
551
|
+
of the built-in English, French or Chinese text used to label parts of the document
|
552
|
+
(e.g. "Table", "Foreword", boilerplate text for Normative References, etc.)
|
553
|
+
Use if you wish to output an standard in a language other than those three.
|
554
|
+
A sample YAML file for English, with "Foreword" replaced with "Frontispiece",
|
555
|
+
is available at https://github.com/riboseinc/metanorma-iso/blob/master/spec/examples/english.yaml[]
|
556
|
+
|
557
|
+
`:docnumber:`:: The numeric component of the document identifier (mandatory). The full identifier is formed by prefixing and suffixing this element with other strings derived from metadata.
|
558
|
+
|
559
|
+
`:edition:`:: The document edition
|
560
|
+
|
561
|
+
`:revdate:`:: The date the document was last updated
|
562
|
+
|
563
|
+
`:copyright-year:`:: The year which will be claimed as when the copyright for
|
564
|
+
the document was issued
|
565
|
+
|
566
|
+
`:library-ics:` :: The ICS (International Categorization for Standards) number for the standard. There may be more than one ICS for a document; if so, they should be comma-delimited. (The ics identifier is added to the document metadata, but is not output to the current document templates.)
|
567
|
+
|
568
|
+
`:title:` :: The title of the document
|
569
|
+
|
570
|
+
`:doctype:`:: The document type; e.g. "standard", "guide", "report".
|
571
|
+
|
572
|
+
`:status:` :: The status of the document; e.g. "draft", "published".
|
573
|
+
|
574
|
+
`:technical-committee:`:: The name of the relevant technical committee
|
575
|
+
|
576
|
+
`:draft:`:: The document draft (used in addition to document stage, for multiple iterations: expected format _X.Y_)
|
577
|
+
|
578
|
+
`:issued-date:`::
|
579
|
+
The date on which the standard was issued (authorised for publication by the issuing authority).
|
580
|
+
|
581
|
+
`:published-date:`::
|
582
|
+
The date on which the standard was published (distributed by the publisher).
|
583
|
+
|
584
|
+
`:implemented-date:`::
|
585
|
+
The date on which the standard became active.
|
586
|
+
|
587
|
+
`:created-date:`::
|
588
|
+
The date on which the first version of the standard was created.
|
589
|
+
|
590
|
+
`:updated-date:`::
|
591
|
+
The date on which the current version of the standard was updated.
|
592
|
+
|
593
|
+
`:obsoleted-date:`::
|
594
|
+
The date on which the standard was obsoleted/revoked.
|
595
|
+
|
596
|
+
`:confirmed-date:`::
|
597
|
+
The date on which the standard was reviewed and approved by the issuing authority.
|
598
|
+
|
599
|
+
`:unchanged-date:`::
|
600
|
+
The date on which the standard was last renewed without any changes in content.
|
601
|
+
|
602
|
+
`:circulated-date:`::
|
603
|
+
The date on which the unpublished standard was last circulated officially as a preprint. For standards, this is associated with the latest transition to a formally defined preparation stage, such as Working Draft or Committee Draft.
|
604
|
+
|
605
|
+
`:date:`::
|
606
|
+
An arbitrary date in the production of the standard. Content of the attribute should be a token, giving the type of date, then space, then the date itself. Multiple dates can be added as `:date_2:`, `date_3`, etc.
|
607
|
+
|
608
|
+
`:uri:`:: The URI to which this standard is published.
|
609
|
+
`:xml-uri:`:: The URI to which the (Metanorma) XML representation of this standard is published.
|
610
|
+
`:html-uri:`:: The URI to which the HTML representation of this standard is published.
|
611
|
+
`:pdf-uri:`:: The URI to which the PDF representation of this standard is published.
|
612
|
+
`:doc-uri:`:: The URI to which the DOC representation of this standard is published.
|
613
|
+
`:relaton-uri:`:: The URI to which the Relaton XML representation of this standard is published.
|
614
|
+
|
615
|
+
`:language:` :: The language of the document (`en` or `fr`). Defaults to `en`.
|
616
|
+
|
617
|
+
`:script:` :: The script of the document (defaults to `Latn`). Must be supplied as
|
618
|
+
`Hans` for Simplified Chinese.
|
619
|
+
|
620
|
+
`:publisher:`:: The standards agency publishing the standard; can be multiple
|
621
|
+
(comma-delimited). Defaults to `ISO`.
|
622
|
+
|
623
|
+
`:body-font:`:: Font for body text; will be inserted into CSS. Defaults to
|
624
|
+
Cambria for Latin script, SimSun for Simplified Chinese.
|
625
|
+
|
626
|
+
`:header-font:`:: Font for headers; will be inserted into CSS. Defaults to
|
627
|
+
Cambria for Latin script, SimHei for Simplified Chinese.
|
628
|
+
|
629
|
+
`:monospace-font`:: Font for monospace; will be inserted into CSS. Defaults to
|
630
|
+
Courier New.
|
631
|
+
|
632
|
+
`:htmlstylesheet`:: SCSS stylesheet to use for HTML output. Defaults to built in stylesheet,
|
633
|
+
which adheres with ISO formatting requirements. Recommend against overriding this.
|
634
|
+
|
635
|
+
`:htmlcoverpage`:: HTML template for cover page. Defaults to built in template. Recommend against overriding this.
|
636
|
+
|
637
|
+
`:htmlintropage`:: HTML template for introductory section. Defaults to built in template. Recommend against overriding this.
|
638
|
+
|
639
|
+
`:scripts`:: Javascript scripts for HTML output. Defaults to built in scripts. Recommend against overriding this.
|
640
|
+
`:scripts-pdf`:: Javascript scripts for HTML > PDF output. Defaults to built in scripts. Recommend against overriding this.
|
641
|
+
|
642
|
+
`:wordstylesheet`:: Primary SCSS stylesheet to use for Word output. Defaults to built in stylesheet,
|
643
|
+
which adheres with ISO formatting requirements. Recommend against overriding this.
|
644
|
+
|
645
|
+
`:standardstylesheet`:: Secondary SCSS stylesheet use for Word output. Defaults to built in stylesheet,
|
646
|
+
which adheres with ISO formatting requirements. Recommend against overriding this.
|
647
|
+
|
648
|
+
`:header`:: Header and footer file for Word output. Defaults to built in template. Recommend against overriding this.
|
649
|
+
|
650
|
+
`:wordcoverpage`:: Word template for cover page. Defaults to built in template. Recommend against overriding this.
|
651
|
+
|
652
|
+
`:wordintropage`:: Word template for introductory section. Defaults to built in template. Recommend against overriding this.
|
653
|
+
|
654
|
+
`:ulstyle`:: Word CSS selector for unordered lists in supplied stylesheets. Defaults to value for built in stylesheet. Recommend against overriding this.
|
655
|
+
|
656
|
+
`:olstyle`:: Word CSS selector for ordered lists in supplied stylesheets. Defaults to value for built in stylesheet. Recommend against overriding this.
|
657
|
+
|
658
|
+
`:data-uri-image`:: Encode all images in HTML output as inline data-URIs.
|
659
|
+
|
660
|
+
The attribute `:draft:`, if present, includes review notes in the XML output;
|
661
|
+
these are otherwise suppressed.
|
662
|
+
|
663
|
+
The document proper can reference the values of document attributes, which is convenient
|
664
|
+
for reusability. For example,
|
665
|
+
|
666
|
+
[source,asciidoc]
|
667
|
+
--
|
668
|
+
This document was prepared by Technical Committee ISO/TC {technical-committee-number}, _{technical-committee}_, Subcommittee SC {subcommittee-number}, _{subcommittee}_.
|
669
|
+
--
|
670
|
+
|
671
|
+
If the corresponding document attributes are not populated in the header, then the references
|
672
|
+
themselves will not be populated.
|
673
|
+
|
@@ -476,6 +476,9 @@
|
|
476
476
|
<zeroOrMore>
|
477
477
|
<ref name="docidentifier"/>
|
478
478
|
</zeroOrMore>
|
479
|
+
<optional>
|
480
|
+
<ref name="docnumber"/>
|
481
|
+
</optional>
|
479
482
|
<zeroOrMore>
|
480
483
|
<ref name="bdate"/>
|
481
484
|
</zeroOrMore>
|
@@ -637,6 +640,8 @@
|
|
637
640
|
<value>transmitted</value>
|
638
641
|
<value>copied</value>
|
639
642
|
<value>unchanged</value>
|
643
|
+
<value>circulated</value>
|
644
|
+
<text/>
|
640
645
|
</choice>
|
641
646
|
</attribute>
|
642
647
|
<choice>
|
@@ -673,6 +678,11 @@
|
|
673
678
|
<text/>
|
674
679
|
</element>
|
675
680
|
</define>
|
681
|
+
<define name="docnumber">
|
682
|
+
<element name="docnumber">
|
683
|
+
<text/>
|
684
|
+
</element>
|
685
|
+
</define>
|
676
686
|
<define name="bclassification">
|
677
687
|
<element name="classification">
|
678
688
|
<optional>
|
@@ -43,25 +43,13 @@ module Asciidoctor
|
|
43
43
|
xmldoc
|
44
44
|
end
|
45
45
|
|
46
|
-
# ISO as a prefix goes first
|
47
46
|
def docidentifier_cleanup(xmldoc)
|
48
|
-
id = xmldoc.at("//bibdata/docidentifier/project-number")
|
49
|
-
return unless id
|
50
|
-
|
51
|
-
prefix = []
|
52
|
-
xmldoc.xpath("//bibdata/contributor[role/@type = 'publisher']"\
|
53
|
-
"/organization").each do |x|
|
54
|
-
x1 = x.at("abbreviation")&.text || x.at("name")&.text
|
55
|
-
x1 == "ISO" and prefix.unshift("ISO") or prefix << x1
|
56
|
-
end
|
57
|
-
|
58
|
-
id.content = prefix.join("/") + " " + id.text
|
59
47
|
end
|
60
48
|
|
61
49
|
TEXT_ELEMS =
|
62
|
-
%w{status language script version author name callout phone
|
63
|
-
|
64
|
-
referenceTo docidentifier prefix initial addition surname forename
|
50
|
+
%w{status language script version author name callout phone email
|
51
|
+
street city state country postcode identifier referenceFrom
|
52
|
+
referenceTo docidentifier docnumber prefix initial addition surname forename
|
65
53
|
title draft secretariat title-main title-intro title-part}.freeze
|
66
54
|
|
67
55
|
# it seems Nokogiri::XML is treating the content of <script> as cdata,
|
@@ -102,16 +102,6 @@ module Asciidoctor
|
|
102
102
|
"name = 'International Organization for Standardization' or "\
|
103
103
|
"name = 'International Electrotechnical Commission']".freeze
|
104
104
|
|
105
|
-
def date_range(date)
|
106
|
-
from = date.at("./from")
|
107
|
-
to = date.at("./to")
|
108
|
-
on = date.at("./on")
|
109
|
-
return on.text if on
|
110
|
-
ret = "#{from.text}–"
|
111
|
-
ret += to.text if to
|
112
|
-
ret
|
113
|
-
end
|
114
|
-
|
115
105
|
def reference_names(xmldoc)
|
116
106
|
xmldoc.xpath("//bibitem[not(ancestor::bibitem)]").each do |ref|
|
117
107
|
isopub = ref.at(ISO_PUBLISHER_XPATH)
|
@@ -11,10 +11,11 @@ module Asciidoctor
|
|
11
11
|
module Front
|
12
12
|
def metadata_id(node, xml)
|
13
13
|
part, subpart = node&.attr("partnumber")&.split(/-/)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
id = node.attr("docnumber") || ""
|
15
|
+
id += "-#{part}" if part
|
16
|
+
id += "-#{subpart}" if subpart
|
17
|
+
xml.docidentifier id
|
18
|
+
xml.docnumber node.attr("docnumber")
|
18
19
|
end
|
19
20
|
|
20
21
|
def metadata_version(node, xml)
|
@@ -104,10 +105,34 @@ module Asciidoctor
|
|
104
105
|
node.attr("relaton-uri") && xml.source(node.attr("relaton-uri"), type: "relaton")
|
105
106
|
end
|
106
107
|
|
108
|
+
def metadata_date1(node, xml, type)
|
109
|
+
date = node.attr("#{type}-date")
|
110
|
+
date and xml.date **{ type: type } do |d|
|
111
|
+
d.on date
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
DATETYPES = %w{ published accessed created implemented obsoleted
|
116
|
+
confirmed updated issued circulated unchanged
|
117
|
+
}.freeze
|
118
|
+
|
119
|
+
def metadata_date(node, xml)
|
120
|
+
DATETYPES.each { |t| metadata_date1(node, xml, t) }
|
121
|
+
node.attributes.keys.each do |a|
|
122
|
+
next unless a == "date" || /^date_\d+$/.match(a)
|
123
|
+
type, date = node.attr(a).split(/ /, 2)
|
124
|
+
type or next
|
125
|
+
xml.date **{ type: type } do |d|
|
126
|
+
d.on date
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
107
131
|
def metadata(node, xml)
|
108
132
|
title node, xml
|
109
133
|
metadata_source(node, xml)
|
110
134
|
metadata_id(node, xml)
|
135
|
+
metadata_date(node, xml)
|
111
136
|
metadata_author(node, xml)
|
112
137
|
metadata_publisher(node, xml)
|
113
138
|
xml.language (node.attr("language") || "en")
|
data/metanorma-standoc.gemspec
CHANGED
@@ -43,7 +43,7 @@ Gem::Specification.new do |spec|
|
|
43
43
|
spec.add_development_dependency "rubocop", "~> 0.50"
|
44
44
|
spec.add_development_dependency "simplecov", "~> 0.15"
|
45
45
|
spec.add_development_dependency "timecop", "~> 0.9"
|
46
|
-
spec.add_development_dependency "metanorma", "~> 0.
|
46
|
+
spec.add_development_dependency "metanorma", "~> 0.3.0"
|
47
47
|
spec.add_development_dependency "vcr"
|
48
48
|
spec.add_development_dependency "webmock"
|
49
49
|
end
|
@@ -43,6 +43,18 @@ RSpec.describe Asciidoctor::Standoc do
|
|
43
43
|
:partnumber: 1
|
44
44
|
:edition: 2
|
45
45
|
:revdate: 2000-01-01
|
46
|
+
:published-date: 1000-01-01
|
47
|
+
:accessed-date: 1001-01-01
|
48
|
+
:created-date: 1002-01-01
|
49
|
+
:implemented-date: 1003-01-01
|
50
|
+
:obsoleted-date: 1004-01-01
|
51
|
+
:confirmed-date: 1005-01-01
|
52
|
+
:updated-date: 1006-01-01
|
53
|
+
:issued-date: 1007-01-01
|
54
|
+
:circulated-date: 1008-01-01
|
55
|
+
:unchanged-date: 1009-01-01
|
56
|
+
:date: Fred 1010-01-01
|
57
|
+
:date_2: Jack 1010-01-01
|
46
58
|
:draft: 3.4
|
47
59
|
:technical-committee: TC
|
48
60
|
:technical-committee-number: 1
|
@@ -75,9 +87,44 @@ RSpec.describe Asciidoctor::Standoc do
|
|
75
87
|
<standard-document xmlns="http://riboseinc.com/isoxml">
|
76
88
|
<bibdata type="article">
|
77
89
|
<title language="en" format="text/plain">Main Title — Title</title>
|
78
|
-
<docidentifier>
|
79
|
-
|
80
|
-
|
90
|
+
<docidentifier>1000-1</docidentifier>
|
91
|
+
<docnumber>1000</docnumber>
|
92
|
+
<date type="published">
|
93
|
+
<on>1000-01-01</on>
|
94
|
+
</date>
|
95
|
+
<date type="accessed">
|
96
|
+
<on>1001-01-01</on>
|
97
|
+
</date>
|
98
|
+
<date type="created">
|
99
|
+
<on>1002-01-01</on>
|
100
|
+
</date>
|
101
|
+
<date type="implemented">
|
102
|
+
<on>1003-01-01</on>
|
103
|
+
</date>
|
104
|
+
<date type="obsoleted">
|
105
|
+
<on>1004-01-01</on>
|
106
|
+
</date>
|
107
|
+
<date type="confirmed">
|
108
|
+
<on>1005-01-01</on>
|
109
|
+
</date>
|
110
|
+
<date type="updated">
|
111
|
+
<on>1006-01-01</on>
|
112
|
+
</date>
|
113
|
+
<date type="issued">
|
114
|
+
<on>1007-01-01</on>
|
115
|
+
</date>
|
116
|
+
<date type="circulated">
|
117
|
+
<on>1008-01-01</on>
|
118
|
+
</date>
|
119
|
+
<date type="unchanged">
|
120
|
+
<on>1009-01-01</on>
|
121
|
+
</date>
|
122
|
+
<date type="Fred">
|
123
|
+
<on>1010-01-01</on>
|
124
|
+
</date>
|
125
|
+
<date type="Jack">
|
126
|
+
<on>1010-01-01</on>
|
127
|
+
</date>
|
81
128
|
<language>en</language>
|
82
129
|
<script>Latn</script>
|
83
130
|
<status format="plain">published</status>
|
@@ -136,9 +183,8 @@ RSpec.describe Asciidoctor::Standoc do
|
|
136
183
|
<source type="pdf">D</source>
|
137
184
|
<source type="doc">E</source>
|
138
185
|
<source type="relaton">F</source>
|
139
|
-
<docidentifier>
|
140
|
-
|
141
|
-
</docidentifier>
|
186
|
+
<docidentifier>1000-1-1</docidentifier>
|
187
|
+
<docnumber>1000</docnumber>
|
142
188
|
<contributor>
|
143
189
|
<role type="author"/>
|
144
190
|
<organization>
|
@@ -271,12 +317,12 @@ RSpec.describe Asciidoctor::Standoc do
|
|
271
317
|
expect(html).to match(%r[h1[^{]+\{[^{]+font-family: Comic Sans;]m)
|
272
318
|
expect(html).to match(%r[an empty word cover page])
|
273
319
|
expect(html).to match(%r[an empty word intro page])
|
274
|
-
expect(html).to
|
320
|
+
expect(html).to include(%[Content-Location: file:///C:/Doc/test_files/header.html
|
275
321
|
Content-Transfer-Encoding: base64
|
276
322
|
Content-Type: text/html charset="utf-8"
|
277
323
|
|
278
|
-
|
279
|
-
|
324
|
+
Ci8qIGFuIGVtcHR5IGhlYWRlciAqLwoKU1RBUlQgRE9DIElEOiA6IEVORCBET0MgSUQKCkZJTEVO
|
325
|
+
QU1FOiB0ZXN0Cgo=
|
280
326
|
])
|
281
327
|
end
|
282
328
|
|
@@ -512,9 +512,6 @@ RSpec.describe Asciidoctor::Standoc do
|
|
512
512
|
<?xml version="1.0" encoding="UTF-8"?>
|
513
513
|
<standard-document xmlns="http://riboseinc.com/isoxml">
|
514
514
|
<bibdata type="article">
|
515
|
-
<docidentifier>
|
516
|
-
<project-number> </project-number>
|
517
|
-
</docidentifier>
|
518
515
|
<language>en</language>
|
519
516
|
<script>Latn</script>
|
520
517
|
<status format="plain">published</status>
|
data/spec/spec_helper.rb
CHANGED
@@ -106,9 +106,6 @@ BLANK_HDR = <<~"HDR"
|
|
106
106
|
<?xml version="1.0" encoding="UTF-8"?>
|
107
107
|
<standard-document xmlns="http://riboseinc.com/isoxml">
|
108
108
|
<bibdata type="article">
|
109
|
-
<docidentifier>
|
110
|
-
<project-number> </project-number>
|
111
|
-
</docidentifier>
|
112
109
|
<language>en</language>
|
113
110
|
<script>Latn</script>
|
114
111
|
<status format="plain">published</status>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-standoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -240,14 +240,14 @@ dependencies:
|
|
240
240
|
requirements:
|
241
241
|
- - "~>"
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version: 0.
|
243
|
+
version: 0.3.0
|
244
244
|
type: :development
|
245
245
|
prerelease: false
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
248
|
- - "~>"
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: 0.
|
250
|
+
version: 0.3.0
|
251
251
|
- !ruby/object:Gem::Dependency
|
252
252
|
name: vcr
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|