metanorma-iso 1.8.1 → 1.8.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -256,6 +256,7 @@
256
256
  <value>guide</value>
257
257
  <value>amendment</value>
258
258
  <value>technical-corrigendum</value>
259
+ <value>directive</value>
259
260
  </choice>
260
261
  </define>
261
262
  <define name="structuredidentifier">
@@ -10,7 +10,7 @@ module Asciidoctor
10
10
  end
11
11
 
12
12
  def scope_parse(attrs, xml, node)
13
- attrs = attrs.merge(type: "scope") unless @amd
13
+ attrs = attrs.merge(type: "scope") unless @amd
14
14
  clause_parse(attrs, xml, node)
15
15
  end
16
16
 
@@ -32,6 +32,7 @@ module Asciidoctor
32
32
 
33
33
  def sectiontype(node, level = true)
34
34
  return nil if @amd
35
+
35
36
  super
36
37
  end
37
38
  end
@@ -3896,6 +3896,7 @@
3896
3896
 
3897
3897
 
3898
3898
 
3899
+
3899
3900
  <xsl:if test="ancestor::*[local-name() = 'tfoot']">
3900
3901
  <xsl:attribute name="border">solid black 0</xsl:attribute>
3901
3902
  </xsl:if>
@@ -6515,6 +6516,70 @@
6515
6516
  <xsl:value-of select="substring(.,1,1)"/>
6516
6517
  </xsl:template><xsl:template match="*[local-name() = 'title']" mode="title">
6517
6518
  <fo:inline><xsl:apply-templates/></fo:inline>
6519
+ </xsl:template><xsl:template match="*[local-name() = 'form']">
6520
+ <fo:block>
6521
+ <xsl:apply-templates/>
6522
+ </fo:block>
6523
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'label']">
6524
+ <fo:inline><xsl:apply-templates/></fo:inline>
6525
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'text' or @type = 'date' or @type = 'file' or @type = 'password']">
6526
+ <fo:inline>
6527
+ <xsl:call-template name="text_input"/>
6528
+ </fo:inline>
6529
+ </xsl:template><xsl:template name="text_input">
6530
+ <xsl:variable name="count">
6531
+ <xsl:choose>
6532
+ <xsl:when test="normalize-space(@maxlength) != ''"><xsl:value-of select="@maxlength"/></xsl:when>
6533
+ <xsl:when test="normalize-space(@size) != ''"><xsl:value-of select="@size"/></xsl:when>
6534
+ <xsl:otherwise>10</xsl:otherwise>
6535
+ </xsl:choose>
6536
+ </xsl:variable>
6537
+ <xsl:call-template name="repeat">
6538
+ <xsl:with-param name="char" select="'_'"/>
6539
+ <xsl:with-param name="count" select="$count"/>
6540
+ </xsl:call-template>
6541
+ <xsl:text> </xsl:text>
6542
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'button']">
6543
+ <xsl:variable name="caption">
6544
+ <xsl:choose>
6545
+ <xsl:when test="normalize-space(@value) != ''"><xsl:value-of select="@value"/></xsl:when>
6546
+ <xsl:otherwise>BUTTON</xsl:otherwise>
6547
+ </xsl:choose>
6548
+ </xsl:variable>
6549
+ <fo:inline>[<xsl:value-of select="$caption"/>]</fo:inline>
6550
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'checkbox']">
6551
+ <fo:inline padding-right="1mm">
6552
+ <fo:instream-foreign-object fox:alt-text="Box" baseline-shift="-10%">
6553
+ <xsl:attribute name="height">3.5mm</xsl:attribute>
6554
+ <xsl:attribute name="content-width">100%</xsl:attribute>
6555
+ <xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
6556
+ <xsl:attribute name="scaling">uniform</xsl:attribute>
6557
+ <svg xmlns="http://www.w3.org/2000/svg" width="80" height="80">
6558
+ <polyline points="0,0 80,0 80,80 0,80 0,0" stroke="black" stroke-width="5" fill="white"/>
6559
+ </svg>
6560
+ </fo:instream-foreign-object>
6561
+ </fo:inline>
6562
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'radio']">
6563
+ <fo:inline padding-right="1mm">
6564
+ <fo:instream-foreign-object fox:alt-text="Box" baseline-shift="-10%">
6565
+ <xsl:attribute name="height">3.5mm</xsl:attribute>
6566
+ <xsl:attribute name="content-width">100%</xsl:attribute>
6567
+ <xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
6568
+ <xsl:attribute name="scaling">uniform</xsl:attribute>
6569
+ <svg xmlns="http://www.w3.org/2000/svg" width="80" height="80">
6570
+ <circle cx="40" cy="40" r="30" stroke="black" stroke-width="5" fill="white"/>
6571
+ <circle cx="40" cy="40" r="15" stroke="black" stroke-width="5" fill="white"/>
6572
+ </svg>
6573
+ </fo:instream-foreign-object>
6574
+ </fo:inline>
6575
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'select']">
6576
+ <fo:inline>
6577
+ <xsl:call-template name="text_input"/>
6578
+ </fo:inline>
6579
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'textarea']">
6580
+ <fo:block-container border="1pt solid black" width="50%">
6581
+ <fo:block> </fo:block>
6582
+ </fo:block-container>
6518
6583
  </xsl:template><xsl:template name="convertDate">
6519
6584
  <xsl:param name="date"/>
6520
6585
  <xsl:param name="format" select="'short'"/>
@@ -3896,6 +3896,7 @@
3896
3896
 
3897
3897
 
3898
3898
 
3899
+
3899
3900
  <xsl:if test="ancestor::*[local-name() = 'tfoot']">
3900
3901
  <xsl:attribute name="border">solid black 0</xsl:attribute>
3901
3902
  </xsl:if>
@@ -6515,6 +6516,70 @@
6515
6516
  <xsl:value-of select="substring(.,1,1)"/>
6516
6517
  </xsl:template><xsl:template match="*[local-name() = 'title']" mode="title">
6517
6518
  <fo:inline><xsl:apply-templates/></fo:inline>
6519
+ </xsl:template><xsl:template match="*[local-name() = 'form']">
6520
+ <fo:block>
6521
+ <xsl:apply-templates/>
6522
+ </fo:block>
6523
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'label']">
6524
+ <fo:inline><xsl:apply-templates/></fo:inline>
6525
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'text' or @type = 'date' or @type = 'file' or @type = 'password']">
6526
+ <fo:inline>
6527
+ <xsl:call-template name="text_input"/>
6528
+ </fo:inline>
6529
+ </xsl:template><xsl:template name="text_input">
6530
+ <xsl:variable name="count">
6531
+ <xsl:choose>
6532
+ <xsl:when test="normalize-space(@maxlength) != ''"><xsl:value-of select="@maxlength"/></xsl:when>
6533
+ <xsl:when test="normalize-space(@size) != ''"><xsl:value-of select="@size"/></xsl:when>
6534
+ <xsl:otherwise>10</xsl:otherwise>
6535
+ </xsl:choose>
6536
+ </xsl:variable>
6537
+ <xsl:call-template name="repeat">
6538
+ <xsl:with-param name="char" select="'_'"/>
6539
+ <xsl:with-param name="count" select="$count"/>
6540
+ </xsl:call-template>
6541
+ <xsl:text> </xsl:text>
6542
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'button']">
6543
+ <xsl:variable name="caption">
6544
+ <xsl:choose>
6545
+ <xsl:when test="normalize-space(@value) != ''"><xsl:value-of select="@value"/></xsl:when>
6546
+ <xsl:otherwise>BUTTON</xsl:otherwise>
6547
+ </xsl:choose>
6548
+ </xsl:variable>
6549
+ <fo:inline>[<xsl:value-of select="$caption"/>]</fo:inline>
6550
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'checkbox']">
6551
+ <fo:inline padding-right="1mm">
6552
+ <fo:instream-foreign-object fox:alt-text="Box" baseline-shift="-10%">
6553
+ <xsl:attribute name="height">3.5mm</xsl:attribute>
6554
+ <xsl:attribute name="content-width">100%</xsl:attribute>
6555
+ <xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
6556
+ <xsl:attribute name="scaling">uniform</xsl:attribute>
6557
+ <svg xmlns="http://www.w3.org/2000/svg" width="80" height="80">
6558
+ <polyline points="0,0 80,0 80,80 0,80 0,0" stroke="black" stroke-width="5" fill="white"/>
6559
+ </svg>
6560
+ </fo:instream-foreign-object>
6561
+ </fo:inline>
6562
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'input'][@type = 'radio']">
6563
+ <fo:inline padding-right="1mm">
6564
+ <fo:instream-foreign-object fox:alt-text="Box" baseline-shift="-10%">
6565
+ <xsl:attribute name="height">3.5mm</xsl:attribute>
6566
+ <xsl:attribute name="content-width">100%</xsl:attribute>
6567
+ <xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
6568
+ <xsl:attribute name="scaling">uniform</xsl:attribute>
6569
+ <svg xmlns="http://www.w3.org/2000/svg" width="80" height="80">
6570
+ <circle cx="40" cy="40" r="30" stroke="black" stroke-width="5" fill="white"/>
6571
+ <circle cx="40" cy="40" r="15" stroke="black" stroke-width="5" fill="white"/>
6572
+ </svg>
6573
+ </fo:instream-foreign-object>
6574
+ </fo:inline>
6575
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'select']">
6576
+ <fo:inline>
6577
+ <xsl:call-template name="text_input"/>
6578
+ </fo:inline>
6579
+ </xsl:template><xsl:template match="*[local-name() = 'form']//*[local-name() = 'textarea']">
6580
+ <fo:block-container border="1pt solid black" width="50%">
6581
+ <fo:block> </fo:block>
6582
+ </fo:block-container>
6518
6583
  </xsl:template><xsl:template name="convertDate">
6519
6584
  <xsl:param name="date"/>
6520
6585
  <xsl:param name="format" select="'short'"/>
@@ -16,6 +16,7 @@ module IsoDoc
16
16
 
17
17
  def status_abbrev(stage, substage, iter, draft, doctype)
18
18
  return "" unless stage
19
+
19
20
  if %w(technical-report technical-specification).include?(doctype)
20
21
  stage = "DTS" if stage == "DIS"
21
22
  stage = "FDTS" if stage == "FDIS"
@@ -4,28 +4,25 @@ require "mn2sts"
4
4
  module IsoDoc
5
5
  module Iso
6
6
 
7
- # A {Converter} implementation that generates HTML output, and a document
8
- # schema encapsulation of the document for validation
9
- #
10
7
  class StsConvert < IsoDoc::XslfoPdfConvert
11
- def initialize(options)
8
+ def initialize(_options) # rubocop:disable Lint/MissingSuper
12
9
  @libdir = File.dirname(__FILE__)
13
10
  @format = :sts
14
11
  @suffix = "sts.xml"
15
12
  end
16
13
 
17
- def convert(input_filename, file = nil, debug = false, output_filename = nil)
18
- file = File.read(input_filename, encoding: "utf-8") if file.nil?
19
- docxml, filename, dir = convert_init(file, input_filename, debug)
20
- /\.xml$/.match(input_filename) or
21
- input_filename = Tempfile.open([filename, ".xml"], encoding: "utf-8") do |f|
22
- f.write file
23
- f.path
14
+ def convert(in_fname, file = nil, debug = false, out_fname = nil)
15
+ file = File.read(in_fname, encoding: "utf-8") if file.nil?
16
+ _docxml, filename, dir = convert_init(file, in_fname, debug)
17
+ unless /\.xml$/.match?(in_fname)
18
+ in_fname = Tempfile.open([filename, ".xml"], encoding: "utf-8") do |f|
19
+ f.write file
20
+ f.path
21
+ end
24
22
  end
25
23
  FileUtils.rm_rf dir
26
- Mn2sts.convert(input_filename, output_filename || "#{filename}.#{@suffix}")
24
+ Mn2sts.convert(in_fname, out_fname || "#{filename}.#{@suffix}")
27
25
  end
28
26
  end
29
27
  end
30
28
  end
31
-
@@ -4,24 +4,33 @@ module IsoDoc
4
4
  end
5
5
 
6
6
  class Xref < IsoDoc::Xref
7
- def initial_anchor_names(d)
8
- if @klass.amd(d)
9
- d.xpath(ns("//preface/*")).each { |c| c.element? and preface_names(c) }
10
- sequential_asset_names(d.xpath(ns("//preface/*")))
11
- d.xpath(ns("//sections/clause")).each { |c| c.element? and preface_names(c) }
12
- middle_section_asset_names(d)
13
- termnote_anchor_names(d)
14
- termexample_anchor_names(d)
7
+ def initial_anchor_names(doc)
8
+ if @klass.amd(doc)
9
+ initial_anchor_names_amd(doc)
15
10
  else
16
11
  super
17
12
  end
18
- introduction_names(d.at(ns("//introduction")))
13
+ introduction_names(doc.at(ns("//introduction")))
14
+ end
15
+
16
+ def initial_anchor_names_amd(doc)
17
+ doc.xpath(ns("//preface/*")).each do |c|
18
+ c.element? and preface_names(c)
19
+ end
20
+ sequential_asset_names(doc.xpath(ns("//preface/*")))
21
+ doc.xpath(ns("//sections/clause")).each do |c|
22
+ c.element? and preface_names(c)
23
+ end
24
+ middle_section_asset_names(doc)
25
+ termnote_anchor_names(doc)
26
+ termexample_anchor_names(doc)
19
27
  end
20
28
 
21
29
  # we can reference 0-number clauses in introduction
22
30
  def introduction_names(clause)
23
31
  return if clause.nil?
24
- clause.at(ns("./clause")) and @anchors[clause["id"]] =
32
+
33
+ clause.at(ns("./clause")) and @anchors[clause["id"]] =
25
34
  { label: "0", level: 1, xref: clause.at(ns("./title"))&.text, type: "clause" }
26
35
  i = Counter.new
27
36
  clause.xpath(ns("./clause")).each do |c|
@@ -35,17 +44,19 @@ module IsoDoc
35
44
  super
36
45
  end
37
46
 
38
- def appendix_names(clause, num)
47
+ def appendix_names(clause, _num)
39
48
  i = Counter.new
40
49
  clause.xpath(ns("./appendix")).each do |c|
41
50
  i.increment(c)
42
- @anchors[c["id"]] = anchor_struct(i.print, nil, @labels["appendix"], "clause")
51
+ @anchors[c["id"]] = anchor_struct(i.print, nil, @labels["appendix"],
52
+ "clause")
43
53
  @anchors[c["id"]][:level] = 2
44
54
  @anchors[c["id"]][:container] = clause["id"]
45
55
  j = Counter.new
46
56
  c.xpath(ns("./clause | ./references")).each do |c1|
47
57
  j.increment(c1)
48
- appendix_names1(c1, l10n("#{@labels["appendix"]} #{i.print}.#{j.print}"), 3, clause["id"])
58
+ lbl = "#{@labels['appendix']} #{i.print}.#{j.print}"
59
+ appendix_names1(c1, l10n(lbl), 3, clause["id"])
49
60
  end
50
61
  end
51
62
  end
@@ -73,7 +84,8 @@ module IsoDoc
73
84
  end
74
85
 
75
86
  def appendix_names1(clause, num, level, container)
76
- @anchors[clause["id"]] = { label: num, xref: num, level: level, container: container }
87
+ @anchors[clause["id"]] = { label: num, xref: num, level: level,
88
+ container: container }
77
89
  i = Counter.new
78
90
  clause.xpath(ns("./clause | ./references")).each do |c|
79
91
  i.increment(c)
@@ -96,7 +108,8 @@ module IsoDoc
96
108
  def figure_anchor(t, sublabel, label)
97
109
  @anchors[t["id"]] = anchor_struct(
98
110
  (sublabel ? "#{label} #{sublabel}" : label),
99
- nil, @labels["figure"], "figure", t["unnumbered"])
111
+ nil, @labels["figure"], "figure", t["unnumbered"]
112
+ )
100
113
  sublabel && t["unnumbered"] != "true" and
101
114
  @anchors[t["id"]][:label] = sublabel
102
115
  end
@@ -104,10 +117,10 @@ module IsoDoc
104
117
  def sequential_figure_names(clause)
105
118
  c = IsoDoc::XrefGen::Counter.new
106
119
  j = 0
107
- clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]")).
108
- each do |t|
120
+ clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
121
+ .each do |t|
109
122
  j = subfigure_increment(j, c, t)
110
- sublabel = j.zero? ? nil : "#{(j+96).chr})"
123
+ sublabel = j.zero? ? nil : "#{(j + 96).chr})"
111
124
  next if t["id"].nil? || t["id"].empty?
112
125
 
113
126
  figure_anchor(t, sublabel, c.print)
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ISO
3
- VERSION = "1.8.1".freeze
3
+ VERSION = "1.8.2".freeze
4
4
  end
5
5
  end
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
30
30
  spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
31
31
 
32
- spec.add_dependency "isodoc", "~> 1.6.0"
32
+ spec.add_dependency "isodoc", "~> 1.6.2"
33
33
  spec.add_dependency "metanorma-standoc", "~> 1.9.0"
34
34
  spec.add_dependency "mn2sts", "~> 1.5.0"
35
35
  spec.add_dependency "ruby-jing"
@@ -6,27 +6,33 @@ RSpec.describe Asciidoctor::ISO do
6
6
  end
7
7
 
8
8
  it "processes a blank document" do
9
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
9
+ input = <<~INPUT
10
10
  #{ASCIIDOC_BLANK_HDR}
11
11
  INPUT
12
+ output = <<~OUTPUT
12
13
  #{BLANK_HDR}
13
14
  <sections/>
14
15
  </iso-standard>
15
16
  OUTPUT
17
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
18
+ .to be_equivalent_to xmlpp(output)
16
19
  end
17
20
 
18
21
  it "converts a blank document" do
19
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
22
+ input = <<~INPUT
20
23
  = Document title
21
24
  Author
22
25
  :docfile: test.adoc
23
26
  :novalid:
24
27
  :no-isobib:
25
28
  INPUT
29
+ output = <<~OUTPUT
26
30
  #{BLANK_HDR}
27
31
  <sections/>
28
32
  </iso-standard>
29
33
  OUTPUT
34
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
35
+ .to be_equivalent_to xmlpp(output)
30
36
  expect(File.exist?("test_alt.html")).to be true
31
37
  expect(File.exist?("test.html")).to be true
32
38
  expect(File.exist?("test.doc")).to be true
@@ -35,7 +41,7 @@ RSpec.describe Asciidoctor::ISO do
35
41
  end
36
42
 
37
43
  it "converts a blank document in French" do
38
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
44
+ input = <<~INPUT
39
45
  = Document title
40
46
  Author
41
47
  :docfile: test.adoc
@@ -44,10 +50,13 @@ RSpec.describe Asciidoctor::ISO do
44
50
  :no-pdf:
45
51
  :language: fr
46
52
  INPUT
53
+ output = <<~OUTPUT
47
54
  #{BLANK_HDR_FR}
48
55
  <sections/>
49
56
  </iso-standard>
50
57
  OUTPUT
58
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
59
+ .to be_equivalent_to xmlpp(output)
51
60
  end
52
61
 
53
62
  it "processes default metadata" do
@@ -96,87 +105,88 @@ RSpec.describe Asciidoctor::ISO do
96
105
  :copyright-year: 2000
97
106
  :horizontal: true
98
107
  INPUT
99
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
100
- <?xml version="1.0" encoding="UTF-8"?>
101
- <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
102
- <bibdata type="standard">
103
- <title format="text/plain" language="en" type="main">Introduction — Main Title — Title — Title Part</title>
104
- <title format="text/plain" language="en" type="title-intro">Introduction</title>
105
- <title format="text/plain" language="en" type="title-main">Main Title — Title</title>
106
- <title format="text/plain" language="en" type="title-part">Title Part</title>
107
- <title format="text/plain" language="fr" type="main">Introduction Française — Titre Principal — Part du Titre</title>
108
- <title format="text/plain" language="fr" type="title-intro">Introduction Française</title>
109
- <title format="text/plain" language="fr" type="title-main">Titre Principal</title>
110
- <title format="text/plain" language="fr" type="title-part">Part du Titre</title>
111
- <docidentifier type="ISO">ISO/PreWD3 1000-1</docidentifier>
112
- <docidentifier type="iso-with-lang">ISO/PreWD3 1000-1(E)</docidentifier>
113
- <docidentifier type="iso-reference">ISO/PreWD3 1000-1:2000(E)</docidentifier>
114
- <docnumber>1000</docnumber>
115
- <contributor>
116
- <role type="author"/>
117
- <organization>
118
- <name>International Organization for Standardization</name>
119
- <abbreviation>ISO</abbreviation>
120
- </organization>
121
- </contributor>
122
- <contributor>
123
- <role type="publisher"/>
124
- <organization>
125
- <name>International Organization for Standardization</name>
126
- <abbreviation>ISO</abbreviation>
127
- </organization>
128
- </contributor>
129
- <edition>2</edition>
130
- <version>
131
- <revision-date>2000-01-01</revision-date>
132
- <draft>0.3.4</draft>
133
- </version>
134
- <language>en</language>
135
- <script>Latn</script>
136
- <status>
137
- <stage abbreviation="WD">20</stage>
138
- <substage>20</substage>
139
- <iteration>3</iteration>
140
- </status>
141
- <copyright>
142
- <from>2000</from>
143
- <owner>
108
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
109
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
110
+ <?xml version="1.0" encoding="UTF-8"?>
111
+ <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
112
+ <bibdata type="standard">
113
+ <title format="text/plain" language="en" type="main">Introduction — Main Title — Title — Title Part</title>
114
+ <title format="text/plain" language="en" type="title-intro">Introduction</title>
115
+ <title format="text/plain" language="en" type="title-main">Main Title — Title</title>
116
+ <title format="text/plain" language="en" type="title-part">Title Part</title>
117
+ <title format="text/plain" language="fr" type="main">Introduction Française — Titre Principal — Part du Titre</title>
118
+ <title format="text/plain" language="fr" type="title-intro">Introduction Française</title>
119
+ <title format="text/plain" language="fr" type="title-main">Titre Principal</title>
120
+ <title format="text/plain" language="fr" type="title-part">Part du Titre</title>
121
+ <docidentifier type="ISO">ISO/PreWD3 1000-1</docidentifier>
122
+ <docidentifier type="iso-with-lang">ISO/PreWD3 1000-1(E)</docidentifier>
123
+ <docidentifier type="iso-reference">ISO/PreWD3 1000-1:2000(E)</docidentifier>
124
+ <docnumber>1000</docnumber>
125
+ <contributor>
126
+ <role type="author"/>
144
127
  <organization>
145
128
  <name>International Organization for Standardization</name>
146
129
  <abbreviation>ISO</abbreviation>
147
130
  </organization>
148
- </owner>
149
- </copyright>
150
- <ext>
151
- <doctype>article</doctype>
152
- <horizontal>true</horizontal>
153
- <editorialgroup>
154
- <technical-committee number="1" type="A">TC</technical-committee>
155
- <technical-committee number="11" type="A1">TC1</technical-committee>
156
- <subcommittee number="2" type="B">SC</subcommittee>
157
- <subcommittee number="21" type="B1">SC1</subcommittee>
158
- <workgroup number="3" type="C">WG</workgroup>
159
- <workgroup number="31" type="C1">WG1</workgroup>
160
- <secretariat>SECRETARIAT</secretariat>
161
- </editorialgroup>
162
- <ics>
163
- <code>1</code>
164
- </ics>
165
- <ics>
166
- <code>2</code>
167
- </ics>
168
- <ics>
169
- <code>3</code>
170
- </ics>
171
- <structuredidentifier>
172
- <project-number part="1">ISO 1000</project-number>
173
- </structuredidentifier>
174
- <stagename>Third working draft</stagename>
175
- </ext>
176
- </bibdata>
177
- <sections/>
178
- </iso-standard>
179
- OUTPUT
131
+ </contributor>
132
+ <contributor>
133
+ <role type="publisher"/>
134
+ <organization>
135
+ <name>International Organization for Standardization</name>
136
+ <abbreviation>ISO</abbreviation>
137
+ </organization>
138
+ </contributor>
139
+ <edition>2</edition>
140
+ <version>
141
+ <revision-date>2000-01-01</revision-date>
142
+ <draft>0.3.4</draft>
143
+ </version>
144
+ <language>en</language>
145
+ <script>Latn</script>
146
+ <status>
147
+ <stage abbreviation="WD">20</stage>
148
+ <substage>20</substage>
149
+ <iteration>3</iteration>
150
+ </status>
151
+ <copyright>
152
+ <from>2000</from>
153
+ <owner>
154
+ <organization>
155
+ <name>International Organization for Standardization</name>
156
+ <abbreviation>ISO</abbreviation>
157
+ </organization>
158
+ </owner>
159
+ </copyright>
160
+ <ext>
161
+ <doctype>article</doctype>
162
+ <horizontal>true</horizontal>
163
+ <editorialgroup>
164
+ <technical-committee number="1" type="A">TC</technical-committee>
165
+ <technical-committee number="11" type="A1">TC1</technical-committee>
166
+ <subcommittee number="2" type="B">SC</subcommittee>
167
+ <subcommittee number="21" type="B1">SC1</subcommittee>
168
+ <workgroup number="3" type="C">WG</workgroup>
169
+ <workgroup number="31" type="C1">WG1</workgroup>
170
+ <secretariat>SECRETARIAT</secretariat>
171
+ </editorialgroup>
172
+ <ics>
173
+ <code>1</code>
174
+ </ics>
175
+ <ics>
176
+ <code>2</code>
177
+ </ics>
178
+ <ics>
179
+ <code>3</code>
180
+ </ics>
181
+ <structuredidentifier>
182
+ <project-number part="1">ISO 1000</project-number>
183
+ </structuredidentifier>
184
+ <stagename>Third working draft</stagename>
185
+ </ext>
186
+ </bibdata>
187
+ <sections/>
188
+ </iso-standard>
189
+ OUTPUT
180
190
  end
181
191
 
182
192
  it "processes complex metadata" do
@@ -203,131 +213,132 @@ RSpec.describe Asciidoctor::ISO do
203
213
  :pub-email: x@example.com
204
214
  :pub-uri: http://www.example.com
205
215
  INPUT
206
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
207
- <?xml version="1.0" encoding="UTF-8"?>
208
- <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
209
- <bibdata type="standard">
210
- <docidentifier type="ISO">ISO/IEC/IETF/TR 1000-1-1:2001</docidentifier>
211
- <docidentifier type="iso-with-lang">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
212
- <docidentifier type="iso-reference">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
213
- <docidentifier type="iso-tc">2000</docidentifier>
214
- <docidentifier type="iso-tc">2003</docidentifier>
215
- <docnumber>1000</docnumber>
216
- <contributor>
217
- <role type="author"/>
218
- <organization>
219
- <name>International Electrotechnical Commission</name>
220
- <abbreviation>IEC</abbreviation>
221
- </organization>
222
- </contributor>
223
- <contributor>
224
- <role type="author"/>
225
- <organization>
226
- <name>IETF</name>
227
- </organization>
228
- </contributor>
229
- <contributor>
230
- <role type="author"/>
231
- <organization>
232
- <name>International Organization for Standardization</name>
233
- <abbreviation>ISO</abbreviation>
234
- </organization>
235
- </contributor>
236
- <contributor>
237
- <role type="publisher"/>
238
- <organization>
239
- <name>International Electrotechnical Commission</name>
240
- <abbreviation>IEC</abbreviation>
241
- <address>
242
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
243
- </address>
244
- <phone>3333333</phone>
245
- <phone type='fax'>4444444</phone>
246
- <email>x@example.com</email>
247
- <uri>http://www.example.com</uri>
248
- </organization>
249
- </contributor>
250
- <contributor>
251
- <role type="publisher"/>
252
- <organization>
253
- <name>IETF</name>
254
- <address>
255
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
256
- </address>
257
- <phone>3333333</phone>
258
- <phone type='fax'>4444444</phone>
259
- <email>x@example.com</email>
260
- <uri>http://www.example.com</uri>
261
- </organization>
262
- </contributor>
263
- <contributor>
264
- <role type="publisher"/>
265
- <organization>
266
- <name>International Organization for Standardization</name>
267
- <abbreviation>ISO</abbreviation>
268
- <address>
269
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
270
- </address>
271
- <phone>3333333</phone>
272
- <phone type='fax'>4444444</phone>
273
- <email>x@example.com</email>
274
- <uri>http://www.example.com</uri>
275
- </organization>
276
- </contributor>
277
- <language>el</language>
278
- <script>Grek</script>
279
- <status>
280
- <stage abbreviation="IS">60</stage>
281
- <substage>60</substage>
282
- </status>
283
- <copyright>
284
- <from>2001</from>
285
- <owner>
286
- <organization>
287
- <name>International Organization for Standardization</name>
288
- <abbreviation>ISO</abbreviation>
289
- <address>
290
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
291
- </address>
292
- <phone>3333333</phone>
293
- <phone type='fax'>4444444</phone>
294
- <email>x@example.com</email>
295
- <uri>http://www.example.com</uri>
296
-
297
- </organization>
298
- </owner>
299
- </copyright>
300
- <copyright>
301
- <from>2001</from>
302
- <owner>
303
- <organization>
304
- <name>IETF</name>
305
- <address>
306
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
307
- </address>
308
- <phone>3333333</phone>
309
- <phone type='fax'>4444444</phone>
310
- <email>x@example.com</email>
311
- <uri>http://www.example.com</uri>
312
- </organization>
313
- </owner>
314
- </copyright>
315
- <ext>
316
- <doctype>technical-report</doctype>
317
- <editorialgroup>
318
- <technical-committee/>
319
- <subcommittee/>
320
- <workgroup/>
321
- </editorialgroup>
322
- <structuredidentifier>
323
- <project-number part="1" subpart="1">ISO/IEC/IETF 1000</project-number>
324
- </structuredidentifier>
325
- <stagename>International standard</stagename>
326
- </ext>
327
- </bibdata>
328
- <sections/>
329
- </iso-standard>
330
- OUTPUT
216
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
217
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
218
+ <?xml version="1.0" encoding="UTF-8"?>
219
+ <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
220
+ <bibdata type="standard">
221
+ <docidentifier type="ISO">ISO/IEC/IETF/TR 1000-1-1:2001</docidentifier>
222
+ <docidentifier type="iso-with-lang">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
223
+ <docidentifier type="iso-reference">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
224
+ <docidentifier type="iso-tc">2000</docidentifier>
225
+ <docidentifier type="iso-tc">2003</docidentifier>
226
+ <docnumber>1000</docnumber>
227
+ <contributor>
228
+ <role type="author"/>
229
+ <organization>
230
+ <name>International Electrotechnical Commission</name>
231
+ <abbreviation>IEC</abbreviation>
232
+ </organization>
233
+ </contributor>
234
+ <contributor>
235
+ <role type="author"/>
236
+ <organization>
237
+ <name>IETF</name>
238
+ </organization>
239
+ </contributor>
240
+ <contributor>
241
+ <role type="author"/>
242
+ <organization>
243
+ <name>International Organization for Standardization</name>
244
+ <abbreviation>ISO</abbreviation>
245
+ </organization>
246
+ </contributor>
247
+ <contributor>
248
+ <role type="publisher"/>
249
+ <organization>
250
+ <name>International Electrotechnical Commission</name>
251
+ <abbreviation>IEC</abbreviation>
252
+ <address>
253
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
254
+ </address>
255
+ <phone>3333333</phone>
256
+ <phone type='fax'>4444444</phone>
257
+ <email>x@example.com</email>
258
+ <uri>http://www.example.com</uri>
259
+ </organization>
260
+ </contributor>
261
+ <contributor>
262
+ <role type="publisher"/>
263
+ <organization>
264
+ <name>IETF</name>
265
+ <address>
266
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
267
+ </address>
268
+ <phone>3333333</phone>
269
+ <phone type='fax'>4444444</phone>
270
+ <email>x@example.com</email>
271
+ <uri>http://www.example.com</uri>
272
+ </organization>
273
+ </contributor>
274
+ <contributor>
275
+ <role type="publisher"/>
276
+ <organization>
277
+ <name>International Organization for Standardization</name>
278
+ <abbreviation>ISO</abbreviation>
279
+ <address>
280
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
281
+ </address>
282
+ <phone>3333333</phone>
283
+ <phone type='fax'>4444444</phone>
284
+ <email>x@example.com</email>
285
+ <uri>http://www.example.com</uri>
286
+ </organization>
287
+ </contributor>
288
+ <language>el</language>
289
+ <script>Grek</script>
290
+ <status>
291
+ <stage abbreviation="IS">60</stage>
292
+ <substage>60</substage>
293
+ </status>
294
+ <copyright>
295
+ <from>2001</from>
296
+ <owner>
297
+ <organization>
298
+ <name>International Organization for Standardization</name>
299
+ <abbreviation>ISO</abbreviation>
300
+ <address>
301
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
302
+ </address>
303
+ <phone>3333333</phone>
304
+ <phone type='fax'>4444444</phone>
305
+ <email>x@example.com</email>
306
+ <uri>http://www.example.com</uri>
307
+ #{' '}
308
+ </organization>
309
+ </owner>
310
+ </copyright>
311
+ <copyright>
312
+ <from>2001</from>
313
+ <owner>
314
+ <organization>
315
+ <name>IETF</name>
316
+ <address>
317
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
318
+ </address>
319
+ <phone>3333333</phone>
320
+ <phone type='fax'>4444444</phone>
321
+ <email>x@example.com</email>
322
+ <uri>http://www.example.com</uri>
323
+ </organization>
324
+ </owner>
325
+ </copyright>
326
+ <ext>
327
+ <doctype>technical-report</doctype>
328
+ <editorialgroup>
329
+ <technical-committee/>
330
+ <subcommittee/>
331
+ <workgroup/>
332
+ </editorialgroup>
333
+ <structuredidentifier>
334
+ <project-number part="1" subpart="1">ISO/IEC/IETF 1000</project-number>
335
+ </structuredidentifier>
336
+ <stagename>International standard</stagename>
337
+ </ext>
338
+ </bibdata>
339
+ <sections/>
340
+ </iso-standard>
341
+ OUTPUT
331
342
  end
332
343
 
333
344
  it "processes subdivisions" do
@@ -354,7 +365,8 @@ RSpec.describe Asciidoctor::ISO do
354
365
  :pub-email: x@example.com
355
366
  :pub-uri: http://www.example.com
356
367
  INPUT
357
- expect(xmlpp(strip_guid(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))))
368
+ expect(xmlpp(strip_guid(output
369
+ .sub(%r{<boilerplate>.*</boilerplate>}m, ""))))
358
370
  .to be_equivalent_to xmlpp(<<~"OUTPUT")
359
371
  <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
360
372
  <bibdata type='standard'>
@@ -449,12 +461,81 @@ RSpec.describe Asciidoctor::ISO do
449
461
  :doctype: international-standard
450
462
  :iteration: 2
451
463
  INPUT
452
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
453
- <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
464
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
465
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
466
+ <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
467
+ <bibdata type="standard">
468
+ <docidentifier type='ISO'>ISO/FDIS 1000.2</docidentifier>
469
+ <docidentifier type='iso-with-lang'>ISO/FDIS 1000.2(F)</docidentifier>
470
+ <docidentifier type='iso-reference'>ISO/FDIS 1000.2(F)</docidentifier>
471
+ <docnumber>1000</docnumber>
472
+ <contributor>
473
+ <role type="author"/>
474
+ <organization>
475
+ <name>International Organization for Standardization</name>
476
+ <abbreviation>ISO</abbreviation>
477
+ </organization>
478
+ </contributor>
479
+ <contributor>
480
+ <role type="publisher"/>
481
+ <organization>
482
+ <name>International Organization for Standardization</name>
483
+ <abbreviation>ISO</abbreviation>
484
+ </organization>
485
+ </contributor>
486
+ <language>fr</language>
487
+ <script>Latn</script>
488
+ <status>
489
+ <stage abbreviation="FDIS">50</stage>
490
+ <substage>00</substage>
491
+ <iteration>2</iteration>
492
+ </status>
493
+ <copyright>
494
+ <from>#{Date.today.year}</from>
495
+ <owner>
496
+ <organization>
497
+ <name>International Organization for Standardization</name>
498
+ <abbreviation>ISO</abbreviation>
499
+ </organization>
500
+ </owner>
501
+ </copyright>
502
+ <ext>
503
+ <doctype>international-standard</doctype>
504
+ <editorialgroup>
505
+ <technical-committee/>
506
+ <subcommittee/>
507
+ <workgroup/>
508
+ </editorialgroup>
509
+ <structuredidentifier>
510
+ <project-number>ISO 1000</project-number>
511
+ </structuredidentifier>
512
+ <stagename>Final draft</stagename>
513
+ </ext>
514
+ </bibdata>
515
+ <sections/>
516
+ </iso-standard>
517
+ OUTPUT
518
+ end
519
+
520
+ it "defaults substage for stage 60" do
521
+ output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
522
+ = Document title
523
+ Author
524
+ :docfile: test.adoc
525
+ :nodoc:
526
+ :novalid:
527
+ :no-isobib:
528
+ :docnumber: 1000
529
+ :docstage: 60
530
+ INPUT
531
+
532
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
533
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
534
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
454
535
  <bibdata type="standard">
455
- <docidentifier type='ISO'>ISO/FDIS 1000.2</docidentifier>
456
- <docidentifier type='iso-with-lang'>ISO/FDIS 1000.2(F)</docidentifier>
457
- <docidentifier type='iso-reference'>ISO/FDIS 1000.2(F)</docidentifier>
536
+ <docidentifier type="ISO">ISO 1000</docidentifier>
537
+ <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
538
+ <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
458
539
  <docnumber>1000</docnumber>
459
540
  <contributor>
460
541
  <role type="author"/>
@@ -470,12 +551,12 @@ RSpec.describe Asciidoctor::ISO do
470
551
  <abbreviation>ISO</abbreviation>
471
552
  </organization>
472
553
  </contributor>
473
- <language>fr</language>
554
+
555
+ <language>en</language>
474
556
  <script>Latn</script>
475
557
  <status>
476
- <stage abbreviation="FDIS">50</stage>
477
- <substage>00</substage>
478
- <iteration>2</iteration>
558
+ <stage abbreviation="IS">60</stage>
559
+ <substage>60</substage>
479
560
  </status>
480
561
  <copyright>
481
562
  <from>#{Date.today.year}</from>
@@ -487,7 +568,7 @@ RSpec.describe Asciidoctor::ISO do
487
568
  </owner>
488
569
  </copyright>
489
570
  <ext>
490
- <doctype>international-standard</doctype>
571
+ <doctype>article</doctype>
491
572
  <editorialgroup>
492
573
  <technical-committee/>
493
574
  <subcommittee/>
@@ -496,15 +577,15 @@ RSpec.describe Asciidoctor::ISO do
496
577
  <structuredidentifier>
497
578
  <project-number>ISO 1000</project-number>
498
579
  </structuredidentifier>
499
- <stagename>Final draft</stagename>
580
+ <stagename>International standard</stagename>
500
581
  </ext>
501
582
  </bibdata>
502
583
  <sections/>
503
- </iso-standard>
504
- OUTPUT
584
+ </iso-standard>
585
+ OUTPUT
505
586
  end
506
587
 
507
- it "defaults substage for stage 60" do
588
+ it "populates metadata for PRF" do
508
589
  output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
509
590
  = Document title
510
591
  Author
@@ -514,64 +595,65 @@ RSpec.describe Asciidoctor::ISO do
514
595
  :no-isobib:
515
596
  :docnumber: 1000
516
597
  :docstage: 60
598
+ :docsubstage: 00
517
599
  INPUT
600
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
601
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
602
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
603
+ <bibdata type="standard">
604
+ <docidentifier type="ISO">ISO 1000</docidentifier>
605
+ <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
606
+ <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
607
+ <docnumber>1000</docnumber>
608
+ <contributor>
609
+ <role type="author"/>
610
+ <organization>
611
+ <name>International Organization for Standardization</name>
612
+ <abbreviation>ISO</abbreviation>
613
+ </organization>
614
+ </contributor>
615
+ <contributor>
616
+ <role type="publisher"/>
617
+ <organization>
618
+ <name>International Organization for Standardization</name>
619
+ <abbreviation>ISO</abbreviation>
620
+ </organization>
621
+ </contributor>
518
622
 
519
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
520
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
521
- <bibdata type="standard">
522
- <docidentifier type="ISO">ISO 1000</docidentifier>
523
- <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
524
- <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
525
- <docnumber>1000</docnumber>
526
- <contributor>
527
- <role type="author"/>
528
- <organization>
529
- <name>International Organization for Standardization</name>
530
- <abbreviation>ISO</abbreviation>
531
- </organization>
532
- </contributor>
533
- <contributor>
534
- <role type="publisher"/>
535
- <organization>
536
- <name>International Organization for Standardization</name>
537
- <abbreviation>ISO</abbreviation>
538
- </organization>
539
- </contributor>
540
-
541
- <language>en</language>
542
- <script>Latn</script>
543
- <status>
544
- <stage abbreviation="IS">60</stage>
545
- <substage>60</substage>
546
- </status>
547
- <copyright>
548
- <from>#{Date.today.year}</from>
549
- <owner>
550
- <organization>
551
- <name>International Organization for Standardization</name>
552
- <abbreviation>ISO</abbreviation>
553
- </organization>
554
- </owner>
555
- </copyright>
556
- <ext>
557
- <doctype>article</doctype>
558
- <editorialgroup>
559
- <technical-committee/>
560
- <subcommittee/>
561
- <workgroup/>
562
- </editorialgroup>
563
- <structuredidentifier>
564
- <project-number>ISO 1000</project-number>
565
- </structuredidentifier>
566
- <stagename>International standard</stagename>
567
- </ext>
568
- </bibdata>
569
- <sections/>
570
- </iso-standard>
571
- OUTPUT
623
+ <language>en</language>
624
+ <script>Latn</script>
625
+ <status>
626
+ <stage abbreviation="PRF">60</stage>
627
+ <substage>00</substage>
628
+ </status>
629
+ <copyright>
630
+ <from>#{Date.today.year}</from>
631
+ <owner>
632
+ <organization>
633
+ <name>International Organization for Standardization</name>
634
+ <abbreviation>ISO</abbreviation>
635
+ </organization>
636
+ </owner>
637
+ </copyright>
638
+ <ext>
639
+ <doctype>article</doctype>
640
+ <editorialgroup>
641
+ <technical-committee/>
642
+ <subcommittee/>
643
+ <workgroup/>
644
+ </editorialgroup>
645
+ <structuredidentifier>
646
+ <project-number>ISO 1000</project-number>
647
+ </structuredidentifier>
648
+ <stagename>Proof</stagename>
649
+ </ext>
650
+ </bibdata>
651
+ <sections/>
652
+ </iso-standard>
653
+ OUTPUT
572
654
  end
573
655
 
574
- it "populates metadata for PRF" do
656
+ it "defaults metadata for DIR" do
575
657
  output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
576
658
  = Document title
577
659
  Author
@@ -580,62 +662,62 @@ RSpec.describe Asciidoctor::ISO do
580
662
  :novalid:
581
663
  :no-isobib:
582
664
  :docnumber: 1000
583
- :docstage: 60
584
- :docsubstage: 00
665
+ :doctype: directive
585
666
  INPUT
586
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
587
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
588
- <bibdata type="standard">
589
- <docidentifier type="ISO">ISO 1000</docidentifier>
590
- <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
591
- <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
592
- <docnumber>1000</docnumber>
593
- <contributor>
594
- <role type="author"/>
595
- <organization>
596
- <name>International Organization for Standardization</name>
597
- <abbreviation>ISO</abbreviation>
598
- </organization>
599
- </contributor>
600
- <contributor>
601
- <role type="publisher"/>
602
- <organization>
603
- <name>International Organization for Standardization</name>
604
- <abbreviation>ISO</abbreviation>
605
- </organization>
606
- </contributor>
607
667
 
608
- <language>en</language>
609
- <script>Latn</script>
610
- <status>
611
- <stage abbreviation="PRF">60</stage>
612
- <substage>00</substage>
613
- </status>
614
- <copyright>
615
- <from>#{Date.today.year}</from>
616
- <owner>
668
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
669
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
670
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
671
+ <bibdata type='standard'>
672
+ <docidentifier type='ISO'>ISO DIR 1000</docidentifier>
673
+ <docidentifier type='iso-with-lang'>ISO DIR 1000(E)</docidentifier>
674
+ <docidentifier type='iso-reference'>ISO DIR 1000(E)</docidentifier>
675
+ <docnumber>1000</docnumber>
676
+ <contributor>
677
+ <role type='author'/>
617
678
  <organization>
618
679
  <name>International Organization for Standardization</name>
619
680
  <abbreviation>ISO</abbreviation>
620
681
  </organization>
621
- </owner>
622
- </copyright>
623
- <ext>
624
- <doctype>article</doctype>
625
- <editorialgroup>
626
- <technical-committee/>
627
- <subcommittee/>
628
- <workgroup/>
629
- </editorialgroup>
630
- <structuredidentifier>
631
- <project-number>ISO 1000</project-number>
632
- </structuredidentifier>
633
- <stagename>Proof</stagename>
634
- </ext>
635
- </bibdata>
636
- <sections/>
637
- </iso-standard>
638
- OUTPUT
682
+ </contributor>
683
+ <contributor>
684
+ <role type='publisher'/>
685
+ <organization>
686
+ <name>International Organization for Standardization</name>
687
+ <abbreviation>ISO</abbreviation>
688
+ </organization>
689
+ </contributor>
690
+ <language>en</language>
691
+ <script>Latn</script>
692
+ <status>
693
+ <stage abbreviation='IS'>60</stage>
694
+ <substage>60</substage>
695
+ </status>
696
+ <copyright>
697
+ <from>2021</from>
698
+ <owner>
699
+ <organization>
700
+ <name>International Organization for Standardization</name>
701
+ <abbreviation>ISO</abbreviation>
702
+ </organization>
703
+ </owner>
704
+ </copyright>
705
+ <ext>
706
+ <doctype>directive</doctype>
707
+ <editorialgroup>
708
+ <technical-committee/>
709
+ <subcommittee/>
710
+ <workgroup/>
711
+ </editorialgroup>
712
+ <structuredidentifier>
713
+ <project-number>ISO 1000</project-number>
714
+ </structuredidentifier>
715
+ <stagename>International standard</stagename>
716
+ </ext>
717
+ </bibdata>
718
+ <sections> </sections>
719
+ </iso-standard>
720
+ OUTPUT
639
721
  end
640
722
 
641
723
  it "reads scripts into blank HTML document" do
@@ -661,9 +743,12 @@ RSpec.describe Asciidoctor::ISO do
661
743
  :no-pdf:
662
744
  INPUT
663
745
  html = File.read("test.html", encoding: "utf-8")
664
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
665
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Cambria", serif;]m)
666
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Cambria", serif;]m)
746
+ expect(html)
747
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
748
+ expect(html)
749
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Cambria", serif;]m)
750
+ expect(html)
751
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Cambria", serif;]m)
667
752
  end
668
753
 
669
754
  it "uses default fonts for alt doc" do
@@ -676,9 +761,12 @@ RSpec.describe Asciidoctor::ISO do
676
761
  :no-pdf:
677
762
  INPUT
678
763
  html = File.read("test_alt.html", encoding: "utf-8")
679
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Space Mono", monospace;]m)
680
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
681
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
764
+ expect(html)
765
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Space Mono", monospace;]m)
766
+ expect(html)
767
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
768
+ expect(html)
769
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
682
770
  end
683
771
 
684
772
  it "uses Chinese fonts" do
@@ -692,9 +780,12 @@ RSpec.describe Asciidoctor::ISO do
692
780
  :no-pdf:
693
781
  INPUT
694
782
  html = File.read("test.html", encoding: "utf-8")
695
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
696
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
697
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Source Han Sans", sans-serif;]m)
783
+ expect(html)
784
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
785
+ expect(html)
786
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
787
+ expect(html)
788
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Source Han Sans", sans-serif;]m)
698
789
  end
699
790
 
700
791
  it "uses specified fonts" do
@@ -712,7 +803,8 @@ RSpec.describe Asciidoctor::ISO do
712
803
  INPUT
713
804
  html = File.read("test.html", encoding: "utf-8")
714
805
  expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: Andale Mono;]m)
715
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: Zapf Chancery;]m)
806
+ expect(html)
807
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: Zapf Chancery;]m)
716
808
  expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: Comic Sans;]m)
717
809
  end
718
810