metanorma-acme 1.0.5 → 1.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b316e4548f6533c1e9e2d2fffec59fd34f3181e67ad665a19538496da0eff92
4
- data.tar.gz: f79dd709e75c128addf55e181a421a2062988cc9302c2ac67a4ee690c8531b9c
3
+ metadata.gz: fbac64a224ed9b71d32900fbbad69d7d4b8b2fd62cecd0415c3f7fdd4390dff5
4
+ data.tar.gz: 46e0fa032335f5b72b226a852664230ca17ae91bc72901bab36cc1dfb9311d32
5
5
  SHA512:
6
- metadata.gz: e0d135ed6999d82b33b8ffeffee27adb7e9572015221d439b367cf642a2f77540c5c0310bfa83a299dea471c983726b946798c77769c25ec5c7999ad32e88d36
7
- data.tar.gz: 1d5c5027598b7008ccc672383cbd5e4f96d028007747dea85921fb29aa22927207836c16cf0866e03b23bb9b4ed9429b60fd8f5cf87c6d3c1e180eb52e89103f
6
+ metadata.gz: '039a1899119e0fe18e72c41b74de185299df2650190832f0a093f4aafb2cf32b08c3ccc5d8370bc419d860f1d79fd05d6ea42cd0ead658019b182b40ccfd6eb2'
7
+ data.tar.gz: a0c67c605103c0d07f02093583781efad988c3213a2b4ca62011b2d0707e627f25125ecc83ea6b61a32b80171941457bbb4b269f0d820a715cb192e31c81d368
@@ -1,44 +1,148 @@
1
- = metanorma-acme: Sample Asciidoctor processor for Metanorma documents
1
+ = metanorma-ogc: Asciidoctor processor for Open Geospatial Consortium documents
2
2
 
3
- image:https://img.shields.io/gem/v/metanorma-acme.svg["Gem Version", link="https://rubygems.org/gems/metanorma-acme"]
4
- image:https://img.shields.io/travis/riboseinc/metanorma-acme/master.svg["Build Status", link="https://travis-ci.org/riboseinc/metanorma-acme"]
5
- image:https://codeclimate.com/github/riboseinc/metanorma-acme/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/riboseinc/metanorma-acme"]
3
+ image:https://img.shields.io/gem/v/metanorma-ogc.svg["Gem Version", link="https://rubygems.org/gems/metanorma-ogc"]
4
+ image:https://img.shields.io/travis/riboseinc/metanorma-ogc/master.svg["Build Status", link="https://travis-ci.org/riboseinc/metanorma-ogc"]
5
+ image:https://codeclimate.com/github/riboseinc/metanorma-ogc/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/riboseinc/metanorma-ogc"]
6
+
7
+ WARNING: This gem is still under development.
6
8
 
7
9
  == Functionality
8
10
 
9
- This is an example of a https://github.com/riboseinc/metanorma[Metanorma] gem for processing input formats (Asciidoctor) and generating output formats (Word, HTML, PDF).
10
- It has been created as an exemplar for generating new instances of Metanorma gems, as illustrated in https://github.com/riboseinc/metanorma-iso/wiki/Gem-Customisation-Guide
11
+ This gem processes http://asciidoctor.org/[Asciidoctor] documents following
12
+ a template for generating OGC documents.
13
+
14
+ The gem currently inherits from the https://github.com/riboseinc/metanorma-standoc
15
+ gem, and aligns closely to it. Refer to the ISO gem documentation
16
+ for guidance, including https://github.com/riboseinc/metanorma-iso/wiki/Guidance-for-authoring
17
+
18
+ The following outputs are generated.
19
+
20
+ * an XML representation of the document, intended as a document model for OGC documents.
21
+ * The XML representation is processed in turn to generate the following outputs
22
+ as end deliverable OGC documents.
23
+ ** HTML
24
+ ** http://asciimath.org[AsciiMathML] is to be used for mathematical formatting.
25
+ The gem uses the https://github.com/asciidoctor/asciimath[Ruby AsciiMath parser],
26
+ which is syntactically stricter than the common MathJax processor;
27
+ if you do not get expected results, try bracketing terms your in AsciiMathML
28
+ expressions.
29
+
30
+ == Usage
11
31
 
12
- You can customise output of this gem for your own purposes without needing to customise the gem fully. You can use the
13
- following asciidoctor document variables to set the stylesheets that are passed as arguments to the `isodoc` gem:
32
+ The preferred way to invoke this gem is via the `metanorma` script:
14
33
 
15
- [source,asciidoc]
34
+ [source,console]
16
35
  ----
17
- :body-font: (name of the main font to be used)
18
- :header-font: (name of the header font to be used)
19
- :monospace-font: (name of the monospace font to be used)
20
- :htmlstylesheet: (stylesheet for HTML)
21
- :htmlcoverpage: (cover page for HTML)
22
- :htmlintropage: (intro page for HTML)
23
- :scripts: (scripts for HTML)
24
- :wordstylesheet: (default stylesheet for Word)
25
- :standardstylesheet: (standard-specific stylesheet for Word)
26
- :header: (header/footer HTML for Word)
27
- :wordcoverpage: (cover page for Word)
28
- :wordintropage: (intro page for Word)
29
- :ulstyle: (list style selector for unordered lists for Word)
30
- :olstyle: (list style selector for ordered lists for Word)
36
+ $ metanorma --type ogc a.adoc # output HTML
37
+ $ metanorma --type ogc --extensions html a.adoc # output just HTML
38
+ $ metanorma --type ogc --extensions xml a.adoc # output RSD XML
31
39
  ----
32
40
 
33
- You should run the gem through the https://github.com/riboseinc/metanorma-cli[Metanorma CLI]:
41
+ The gem translates the document into Metanorma XML format, and then
42
+ validates its output against the Metanorma XML document model; errors are
43
+ reported to console against the XML, and are intended for users to
44
+ check that they have provided all necessary components of the
45
+ document.
34
46
 
35
- [source, console]
47
+ The gem then converts the XML into HTML.
48
+
49
+ The gem can also be invoked directly within asciidoctor, though this is deprecated:
50
+
51
+ [source,console]
36
52
  ----
37
- metanorma -r metanorma-acme -t acme test.adoc
53
+ $ asciidoctor -b ogc -r 'metanorma-ogc' a.adoc
38
54
  ----
39
55
 
40
- The CSS stylesheets are normally expected to be https://sass-lang.com/guide[SCSS], with the font names `$body-font, $header-font, $monospace-font` used as variables; but if you supply the stylesheets, you can bypass that customisation, and give the font names in the stylesheets.
56
+ === Installation
57
+
58
+ If you are using a Mac, the https://github.com/riboseinc/metanorma-macos-setup
59
+ repository has instructions on setting up your machine to run Metanorma
60
+ scripts such as this one. You need only run the following in a Terminal console:
61
+
62
+ [source,console]
63
+ ----
64
+ $ bash <(curl -s https://raw.githubusercontent.com/riboseinc/metanorma-macos-setup/master/metanorma-setup)
65
+ $ gem install metanorma-ogc
66
+ $ gem install metanorma-cli
67
+ ----
68
+
69
+ == Approach
70
+
71
+ === Document model
72
+
73
+ The OGC Document model used by this gem is an instance of the
74
+ https://github.com/riboseinc/isodoc-models[StandardDocument model].
75
+
76
+ The Metanorma XML format intends to introduce rigor into the OGC
77
+ standards authoring process, and is prescribed in a separate document.
78
+
79
+ === Asciidoctor
80
+
81
+ Asciidoctor has been selected as the authoring tool to generate the document
82
+ model representation of OGC standards. It is a document formatting tool like
83
+ Markdown and DocBook, which combines the relative ease of use of the former
84
+ (using relatively lightweight markup), and the rigor and expressively of the
85
+ latter (it has a well-defined syntax, and was in fact initially developed as a
86
+ DocBook document authoring tool). Asciidoctor has built-in capability to output
87
+ Text, DocBook and HTML; so it can be used to preview the file as it is being
88
+ autA
89
+
90
+ Generating documents via a document model substantially automated formatting
91
+ associated with the document, including automating numbering of headings, figures,
92
+ tables etc, and automatically generating references and citations.
93
+ hored.
94
+
95
+ == Document Attributes
96
+
97
+ === Common attributes
98
+
99
+ The gem relies on Asciidoctor document attributes to provide necessary
100
+ metadata about the document. The https://github.com/riboseinc/metanorma-standoc[metanorma-standoc]
101
+ gem documents the Asciidoctor document attributes common to all metanorma gems. These include:
102
+
103
+ `:edition:`:: The document edition
104
+
105
+ `:revdate:`:: The date the document was last updated
106
+
107
+ `:copyright-year:`:: The year which will be claimed as when the copyright for
108
+ the document was issued
109
+
110
+ `:title:`:: The main component of the English title of the document
111
+ (mandatory). (The first line of the AsciiDoc document, which contains the title
112
+ introduced with `=`, is ignored)
113
+
114
+ `:doctype:`:: The document type (mandatory). The permitted types are:
115
+ +
116
+ --
117
+ code:: Code Artifact
118
+ presentation:: Presentation
119
+ proposal:: Proposal; includes IETF DRAFT
120
+ standard:: Recommendation; includes IETF RFC
121
+ report:: report
122
+ --
123
+
124
+ `:status:``:: The document status. The permitted types are: `proposal`,
125
+ `working-draft`, `committee-draft`, `draft-standard`, `final-draft`,
126
+ `published`, `withdrawn`.
127
+
128
+ `:technical-committee:`:: The name of the relevant M3D technical committee
129
+ (mandatory)
130
+
131
+ `:language:` :: The language of the document (only `en` for now) (mandatory)
132
+
133
+ The attribute `:draft:`, if present, includes review notes in the XML output;
134
+ these are otherwise suppressed.
135
+
136
+ == Asciidoctor features specific to OGC
137
+
138
+ The https://github.com/riboseinc/metanorma-standoc[metanorma-standoc]
139
+ gem documents the customisations of Asciidoctor markup common to all metanorma gems.
140
+ The following markup is specific to this gem:
141
+
142
+
143
+ == Examples
41
144
 
42
- The cover page and intro page are still expected to be http://liquidmarkup.org[Liquid Template] files, giving metadata fields from `isodoc/metadata.rb` in curly brackets. See https://github.com/riboseinc/isodoc/blob/master/lib/isodoc/metadata.rb for the default metadata field settings.
145
+ * link:spec/examples/rfc6350.adoc[] is an Metanorma Asciidoctor version of https://tools.ietf.org/html/rfc6350[RFC 6350].
146
+ * link:spec/examples/rfc6350.html[] is an HTML file generated from the Asciidoctor.
147
+ * link:spec/examples/rfc6350.doc[] is a Word document generated from the Asciidoctor.
43
148
 
44
- The use of HTML and CSS for Word is idiosyncratic, and involves some trial and error; consult the documentation above for more information.
@@ -104,13 +104,6 @@ module Asciidoctor
104
104
  d
105
105
  end
106
106
 
107
- def pdf_convert(filename)
108
- url = "#{Dir.pwd}/#{filename}.html"
109
- pdfjs = File.join(File.dirname(__FILE__), 'pdf.js')
110
- system "export NODE_PATH=$(npm root --quiet -g);
111
- node #{pdfjs} file://#{url} #{filename}.pdf"
112
- end
113
-
114
107
  def document(node)
115
108
  init(node)
116
109
  ret1 = makexml(node)
@@ -121,7 +114,7 @@ module Asciidoctor
121
114
  File.open(filename, "w") { |f| f.write(ret) }
122
115
  html_converter(node).convert filename unless node.attr("nodoc")
123
116
  word_converter(node).convert filename unless node.attr("nodoc")
124
- pdf_convert(filename.sub(/\.xml$/, "")) unless node.attr("nodoc")
117
+ pdf_converter(node).convert filename unless node.attr("nodoc")
125
118
  end
126
119
  @files_to_delete.each { |f| FileUtils.rm f }
127
120
  ret
@@ -161,6 +154,10 @@ module Asciidoctor
161
154
  IsoDoc::Acme::HtmlConvert.new(html_extract_attributes(node))
162
155
  end
163
156
 
157
+ def pdf_converter(node)
158
+ IsoDoc::Acme::PdfConvert.new(html_extract_attributes(node))
159
+ end
160
+
164
161
  def word_converter(node)
165
162
  IsoDoc::Acme::WordConvert.new(doc_extract_attributes(node))
166
163
  end
@@ -744,6 +744,9 @@
744
744
  </define>
745
745
  <define name="preface">
746
746
  <element name="preface">
747
+ <optional>
748
+ <ref name="preface_abstract"/>
749
+ </optional>
747
750
  <ref name="foreword"/>
748
751
  <optional>
749
752
  <ref name="introduction"/>
@@ -811,6 +814,11 @@
811
814
  </optional>
812
815
  </element>
813
816
  </define>
817
+ <define name="preface_abstract">
818
+ <element name="abstract">
819
+ <ref name="Basic-Section"/>
820
+ </element>
821
+ </define>
814
822
  <define name="foreword">
815
823
  <element name="foreword">
816
824
  <ref name="Basic-Section"/>
@@ -56,7 +56,7 @@
56
56
  <div class="coverpage-stage-block" >{{ revdate }}</div>
57
57
  {% endif %}
58
58
 
59
- {% if status != "Published" and status != "Withdrawn" %}
59
+ {% if unpublished %}
60
60
  <div class="coverpage-warning">
61
61
  <span class="title">Warning for Drafts</span>
62
62
 
@@ -18,7 +18,7 @@ margin-left:4.25pt;margin-right:4.25pt'>
18
18
 
19
19
  <p class="MsoNormal" align="center" style='text-align:center;border:none;
20
20
  mso-border-alt:solid windowtext .5pt;padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span
21
- lang="EN-GB" style='font-size:16.0pt'>{{ status }} {{ doctype }}</span></p>
21
+ lang="EN-GB" style='font-size:16.0pt'>{% if unpublished %}{{ status }} {% endif %}{{ doctype }}</span></p>
22
22
 
23
23
  {% if security %}
24
24
  <p class="MsoNormal" align="center" style='text-align:center;border:none;
@@ -39,7 +39,7 @@ mso-border-alt:solid windowtext .5pt;padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0
39
39
  mso-border-alt:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
40
40
  margin-left:4.25pt;margin-right:4.25pt'>
41
41
 
42
- {% if status != "Published" and status != "Withdrawn" %}
42
+ {% if unpublished %}
43
43
  <p class="MsoNormal" align="center" style='margin-bottom:6.0pt;text-align:center;
44
44
  border:none;mso-border-alt:solid windowtext .5pt;padding:0cm;mso-padding-alt:
45
45
  1.0pt 4.0pt 1.0pt 4.0pt'><b style='mso-bidi-font-weight:normal'><span
@@ -49,6 +49,10 @@ module IsoDoc
49
49
  end
50
50
  end
51
51
 
52
+ def unpublished(status)
53
+ %w(published withdrawn).include? status.downcase
54
+ end
55
+
52
56
  def version(isoxml, _out)
53
57
  super
54
58
  revdate = get[:revdate]
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Acme
3
- VERSION = "1.0.5"
3
+ VERSION = "1.0.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-acme
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-19 00:00:00.000000000 Z
11
+ date: 2018-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -278,7 +278,6 @@ files:
278
278
  - lib/asciidoctor/acme/converter.rb
279
279
  - lib/asciidoctor/acme/isodoc.rng
280
280
  - lib/asciidoctor/acme/isostandard.rng
281
- - lib/asciidoctor/acme/pdf.js
282
281
  - lib/isodoc/acme.rb
283
282
  - lib/isodoc/acme/html/acme.scss
284
283
  - lib/isodoc/acme/html/header.html
@@ -1,31 +0,0 @@
1
- 'use strict';
2
-
3
- try {
4
- require.resolve("puppeteer");
5
- } catch(e) {
6
- console.error("puppeteer Node library is not installed; will not generate PDF");
7
- process.exit(e.code);
8
- }
9
-
10
- const puppeteer = require('puppeteer');
11
-
12
- const createPdf = async() => {
13
- let browser;
14
- try {
15
- browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
16
- const page = await browser.newPage();
17
- await page.goto(process.argv[2], {waitUntil: 'networkidle2'});
18
- await page.pdf({
19
- path: process.argv[3],
20
- format: 'A4'
21
- });
22
- } catch (err) {
23
- console.log(err.message);
24
- } finally {
25
- if (browser) {
26
- browser.close();
27
- }
28
- process.exit();
29
- }
30
- };
31
- createPdf();