metanorma-acme 1.0.5 → 1.0.6

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: 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();