= Metanorma for VSD: Metanorma processor for Vitagreen Standard Documents (VSD) image:https://img.shields.io/gem/v/metanorma-vsd.svg["Gem Version", link="https://rubygems.org/gems/metanorma-vsd"] image:https://travis-ci.com/metanorma/metanorma-vsd.svg["Build Status", link="https://travis-ci.com/metanorma/metanorma-vsd"] image:https://ci.appveyor.com/api/projects/status/8ugivqot7pi03naw?svg=true["Appveyor Build Status", link="https://ci.appveyor.com/project/metanorma/metanorma-vsd"] image:https://codeclimate.com/github/metanorma/metanorma-vsd/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/metanorma-vsd"] image:https://img.shields.io/github/issues-pr-raw/metanorma/metanorma-vsd.svg["Pull Requests", link="https://github.com/metanorma/metanorma-vsd/pulls"] image:https://img.shields.io/github/commits-since/metanorma/metanorma-vsd/latest.svg["Commits since latest",link="https://github.com/metanorma/metanorma-vsd/releases"] == Functionality This gem processes http://asciidoctor.org/[Asciidoctor] documents following a template for generating VSD documents. The gem currently inherits from the https://github.com/riboseinc/asciidoctor-iso gem, and aligns closely to it. Refer to the ISO gem for guidance, including https://github.com/riboseinc/asciidoctor-iso/wiki/Guidance-for-authoring The following outputs are generated. * (Optional) An HTML preview generated directly from the Asciidoctor document, using native Asciidoctor formatting. ** http://asciimath.org[AsciiMathML] is to be used for mathematical formatting. The gem uses the https://github.com/asciidoctor/asciimath[Ruby AsciiMath parser], which is syntactically stricter than the common MathJax processor; if you do not get expected results, try bracketing terms your in AsciiMathML expressions. * an XML representation of the document, intended as a document model for VSD International Standards. * The XML representation is processed in turn to generate the following outputs as end deliverable VSD standard drafts. ** DOC ** HTML This AsciiDoc syntax for writing VSD standards is hereby named "AsciiVSD". == Usage The preferred way to invoke this gem is via the `metanorma` script: [source,console] ---- $ metanorma --type vsd a.adoc # output HTML and DOC $ metanorma --type vsd --extensions html a.adoc # output just HTML $ metanorma --type vsd --extensions doc a.adoc # output just DOC $ metanorma --type vsd --extensions xml a.adoc # output VSD XML ---- The gem translates the document into VSD XML format, and then validates its output against the VSD XML document model; errors are reported to console against the XML, and are intended for users to check that they have provided all necessary components of the document. The gem then converts the XML into HTML and PDF. === Installation If you are using a Mac, the https://github.com/riboseinc/metanorma-macos-setup repository has instructions on setting up your machine to run Metanorma scripts such as this one. You need only run the following in a Terminal console: [source,console] ---- $ bash <(curl -s https://raw.githubusercontent.com/riboseinc/metanorma-macos-setup/master/metanorma-setup) $ gem install metanorma-vsd ---- == Approach === Document model The Vitagreen Standard Document model is an instance of the https://github.com/riboseinc/isodoc-models[StandardDocument model]. The VSD format ("VSD XML") intends to introduce rigor into the VSD standards authoring process, and is prescribed in a separate document. VSD XML is still under development, but it already contains all the markup needed to render a VSD document into HTML. WARNING: The current RNG model of VSD XML is out of sync with the UML. === Asciidoctor Asciidoctor has been selected as the authoring tool to generate the document model representation of VSD standards. It is a document formatting tool like Markdown and DocBook, which combines the relative ease of use of the former (using relatively lightweight markup), and the rigor and expressively of the latter (it has a well-defined syntax, and was in fact initially developed as a DocBook document authoring tool). Asciidoctor has built-in capability to output Text, DocBook and HTML; so it can be used to preview the file as it is being authored. Note that in order to generate HTML preview output close to what is intended in the VSD standard, the Asciidoc document includes a fair amount of formatting instructions (e.g. disabling section numbering where appropriate, the titling of Appendixes as Annexes), as well as VSD boilerplate text, and predefined section headers (sections are recognised by fixed titles such as `Normative References`). Authoring VSD standards in this fashion assumes that users will be populating an Asciidoc template, and not removing needed formatting instructions. == Document Attributes The gem relies on Asciidoctor document attributes to provide necessary metadata about the document. These include: `:edition:`:: The document edition `:revdate:`:: The date the document was last updated `:copyright-year:`:: The year which will be claimed as when the copyright for the document was issued `:title:`:: The main component of the English title of the document (mandatory). (The first line of the AsciiDoc document, which contains the title introduced with `=`, is ignored) `:doctype:`:: The document type (see VSD deliverables: The different types of VSD publications) (mandatory). The permitted types are: + -- * policy-and-procedures * best-practices * supporting-document * report * legal * directives * proposal * standard -- `:status:``:: The document status. The permitted types are: `proposal`, `working-draft`, `committee-draft`, `draft-standard`, `final-draft`, `published`, `withdrawn`. `:committee:`:: The name of the relevant VSD committee (mandatory) `:committee-type:`:: The type of the relevant VSD committee (mandatory): `technical` or `provisional`. `:language:` :: The language of the document (only `en` for now) (mandatory) `:security:` :: Security level classification, e.g., "confidential", "client confidential" The attribute `:draft:`, if present, includes review notes in the XML output; these are otherwise suppressed. == AsciiVSD features not also present in AsciiISO * `+[keyword]#...#+`: encodes keywords, such as "MUST", "MUST NOT". (Encoded as `...`. == Data Models The VSD Standard Document format is an instance of the https://github.com/riboseinc/isodoc-models[StandardDocument model]. Details of this general model can be found on its page. Details of the VSD modifications to this general model can be found on the https://github.com/riboseinc/metanorma-model-vsd[VSD model] repository. == Examples * link:spec/examples/rfc6350.adoc[] is an AsciiVSD version of https://tools.ietf.org/html/rfc6350[RFC 6350]. * link:spec/examples/rfc6350.html[] is an HTML file generated from the AsciiVSD. * link:spec/examples/rfc6350.doc[] is a Word document generated from the AsciiVSD.