metanorma-ogc 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/macos.yml +2 -3
- data/.github/workflows/ubuntu.yml +15 -4
- data/.github/workflows/windows.yml +3 -4
- data/README.adoc +3 -2
- data/lib/asciidoctor/ogc/biblio.rng +2 -12
- data/lib/asciidoctor/ogc/boilerplate.xml +33 -50
- data/lib/asciidoctor/ogc/converter.rb +1 -1
- data/lib/asciidoctor/ogc/isodoc.rng +1 -3
- data/lib/isodoc/ogc/base_convert.rb +12 -107
- data/lib/isodoc/ogc/biblio.rb +11 -1
- data/lib/isodoc/ogc/html/htmlstyle.scss +11 -1
- data/lib/isodoc/ogc/i18n-en.yaml +3 -0
- data/lib/isodoc/ogc/metadata.rb +1 -23
- data/lib/isodoc/ogc/reqt.rb +77 -36
- data/lib/isodoc/ogc/sections.rb +111 -0
- data/lib/isodoc/ogc/word_convert.rb +15 -5
- data/lib/metanorma/ogc/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 868dc6938ff146d001b5510963acea058cefe084d7a0b9d68e9d78916a6f122c
|
4
|
+
data.tar.gz: 4fce9933efebce96fb0b6c034c2297aeba957c1e7ad490f396f0f12dd04d415b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d15e4958895e014be50a293e945fc2abb0b21548803621663fde417235de6e4719c221689338e4e7de806dbfd7d94f5a08d32dc4dd8834343e8610638a297dc
|
7
|
+
data.tar.gz: 1f9566897b6ae34a99077f0ce09d5c8b36ab73ecb2e47ddb21aa3cdc75cd606e851243741641419f5ae9b3878798f45b59f20191ac015b0662750d33c8cc5b00
|
data/.github/workflows/macos.yml
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
# Auto-generated
|
2
|
-
#
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
3
|
name: macos
|
4
4
|
|
5
5
|
on:
|
6
6
|
push:
|
7
7
|
branches: [ master ]
|
8
8
|
pull_request:
|
9
|
-
branches: [ '**' ]
|
10
9
|
|
11
10
|
jobs:
|
12
11
|
test-macos:
|
@@ -1,12 +1,11 @@
|
|
1
|
-
# Auto-generated
|
2
|
-
#
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
3
|
name: ubuntu
|
4
4
|
|
5
5
|
on:
|
6
6
|
push:
|
7
7
|
branches: [ master ]
|
8
8
|
pull_request:
|
9
|
-
branches: [ '**' ]
|
10
9
|
|
11
10
|
jobs:
|
12
11
|
test-linux:
|
@@ -25,7 +24,7 @@ jobs:
|
|
25
24
|
architecture: 'x64'
|
26
25
|
- name: Update gems
|
27
26
|
run: |
|
28
|
-
gem install bundler
|
27
|
+
gem install bundler
|
29
28
|
bundle install --jobs 4 --retry 3
|
30
29
|
- name: Use Node
|
31
30
|
uses: actions/setup-node@v1
|
@@ -37,3 +36,15 @@ jobs:
|
|
37
36
|
- name: Run specs
|
38
37
|
run: |
|
39
38
|
bundle exec rake
|
39
|
+
- name: Trigger dependent repositories
|
40
|
+
if: github.ref == 'refs/heads/master'
|
41
|
+
env:
|
42
|
+
GH_USERNAME: ${{ secrets.PAT_USERNAME }}
|
43
|
+
GH_ACCESS_TOKEN: ${{ secrets.PAT_TOKEN }}
|
44
|
+
run: |
|
45
|
+
curl -LO --retry 3 https://raw.githubusercontent.com/metanorma/metanorma-build-scripts/master/trigger-gh-actions.sh
|
46
|
+
[[ -f ".github/workflows/dependent_repos.env" ]] && source .github/workflows/dependent_repos.env
|
47
|
+
for repo in $DEPENDENT_REPOS
|
48
|
+
do
|
49
|
+
sh trigger-gh-actions.sh $ORGANISATION $repo $GH_USERNAME $GH_ACCESS_TOKEN $GITHUB_REPOSITORY
|
50
|
+
done
|
@@ -1,12 +1,11 @@
|
|
1
|
-
# Auto-generated
|
2
|
-
#
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
3
|
name: windows
|
4
4
|
|
5
5
|
on:
|
6
6
|
push:
|
7
7
|
branches: [ master ]
|
8
8
|
pull_request:
|
9
|
-
branches: [ '**' ]
|
10
9
|
|
11
10
|
jobs:
|
12
11
|
test-windows:
|
@@ -26,7 +25,7 @@ jobs:
|
|
26
25
|
- name: Update gems
|
27
26
|
shell: pwsh
|
28
27
|
run: |
|
29
|
-
gem install bundler
|
28
|
+
gem install bundler
|
30
29
|
bundle config --local path vendor/bundle
|
31
30
|
bundle update
|
32
31
|
bundle install --jobs 4 --retry 3
|
data/README.adoc
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
= metanorma-ogc: Metanorma processor for the Open Geospatial Consortium document class
|
2
2
|
|
3
3
|
image:https://img.shields.io/gem/v/metanorma-ogc.svg["Gem Version", link="https://rubygems.org/gems/metanorma-ogc"]
|
4
|
-
image:https://
|
5
|
-
image:https://
|
4
|
+
image:https://github.com/metanorma/metanorma-ogc/workflows/macos/badge.svg["Build Status (macOS)", link="https://github.com/metanorma/metanorma-ogc/actions?workflow=macos"]
|
5
|
+
image:https://github.com/metanorma/metanorma-ogc/workflows/ubuntu/badge.svg["Build Status (ubuntu)", link="https://github.com/metanorma/metanorma-ogc/actions?workflow=ubuntu"]
|
6
|
+
image:https://github.com/metanorma/metanorma-ogc/workflows/windows/badge.svg["Build Status (Windows)", link="https://github.com/metanorma/metanorma-ogc/actions?workflow=windows"]
|
6
7
|
image:https://codeclimate.com/github/metanorma/metanorma-ogc/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/metanorma-ogc"]
|
7
8
|
image:https://img.shields.io/github/issues-pr-raw/metanorma/metanorma-ogc.svg["Pull Requests", link="https://github.com/metanorma/metanorma-ogc/pulls"]
|
8
9
|
image:https://img.shields.io/github/commits-since/metanorma/metanorma-ogc/latest.svg["Commits since latest",link="https://github.com/metanorma/metanorma-ogc/releases"]
|
@@ -703,21 +703,11 @@
|
|
703
703
|
</define>
|
704
704
|
<define name="TypedTitleString">
|
705
705
|
<optional>
|
706
|
-
<attribute name="type"
|
707
|
-
<ref name="TitleType"/>
|
708
|
-
</attribute>
|
706
|
+
<attribute name="type"/>
|
709
707
|
</optional>
|
710
708
|
<ref name="FormattedString"/>
|
711
709
|
</define>
|
712
|
-
|
713
|
-
<choice>
|
714
|
-
<value>alternative</value>
|
715
|
-
<value>original</value>
|
716
|
-
<value>unofficial</value>
|
717
|
-
<value>subtitle</value>
|
718
|
-
<value>main</value>
|
719
|
-
</choice>
|
720
|
-
</define>
|
710
|
+
<!-- TitleType = ( "alternative" | "original" | "unofficial" | "subtitle" | "main" ) -->
|
721
711
|
<define name="TypedUri">
|
722
712
|
<optional>
|
723
713
|
<attribute name="type"/>
|
@@ -3,11 +3,17 @@
|
|
3
3
|
<clause>
|
4
4
|
<title>Copyright notice</title>
|
5
5
|
|
6
|
-
<p
|
6
|
+
<p>Copyright
|
7
7
|
© {{ docyear }} Open Geospatial Consortium<br/>
|
8
8
|
To obtain additional rights of use, visit
|
9
9
|
<link target="http://www.opengeospatial.org/legal/">http://www.opengeospatial.org/legal/</link></p>
|
10
10
|
</clause>
|
11
|
+
<clause>
|
12
|
+
<title>Note</title>
|
13
|
+
<p>Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.</p>
|
14
|
+
|
15
|
+
<p>Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.</p>
|
16
|
+
</clause>
|
11
17
|
</copyright-statement>
|
12
18
|
<license-statement>
|
13
19
|
<clause>
|
@@ -71,7 +77,9 @@
|
|
71
77
|
authorization of LICENSOR or such copyright holder. LICENSOR is and shall at
|
72
78
|
all times be the sole entity that may authorize you or any third party to use
|
73
79
|
certification marks, trademarks or other special designations to indicate
|
74
|
-
compliance with any LICENSOR standards or specifications
|
80
|
+
compliance with any LICENSOR standards or specifications.</p>
|
81
|
+
|
82
|
+
<p> This Agreement is
|
75
83
|
governed by the laws of the Commonwealth of Massachusetts. The application to
|
76
84
|
this Agreement of the United Nations Convention on Contracts for the
|
77
85
|
International Sale of Goods is hereby expressly excluded. In the event any
|
@@ -80,88 +88,63 @@
|
|
80
88
|
modified the entire Agreement shall remain in full force and effect. No
|
81
89
|
decision, action or inaction by LICENSOR shall be construed to be a waiver of
|
82
90
|
any rights or remedies available to it.</p>
|
91
|
+
|
92
|
+
<p>None of the Intellectual Property or underlying information or technology may be downloaded or otherwise exported or reexported in violation of U.S. export laws and regulations. In addition, you are responsible for complying with any local laws in your jurisdiction which may impact your right to import, export or use the Intellectual Property, and you represent that you have complied with any regulations or registration procedures required by applicable law to make this license enforceable.</p>
|
83
93
|
</clause>
|
84
94
|
</license-statement>
|
85
95
|
|
86
96
|
<legal-statement>
|
87
|
-
{% if stage == "Published" or stage == "Withdrawn" %}
|
88
97
|
{% if doctype == "Standard" or doctype == "Community Standard" %}
|
98
|
+
{% if stage == "Published" or stage == "Withdrawn" %}
|
89
99
|
<clause>
|
90
100
|
<title>Warning</title>
|
91
101
|
<p>This document is an OGC Member approved international standard. This document is available on a royalty free, non-discriminatory basis. Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.
|
92
102
|
</p>
|
93
103
|
</clause>
|
94
|
-
|
95
|
-
{% elsif doctype == "Discussion Paper" %}
|
104
|
+
{% else %}
|
96
105
|
<clause>
|
97
|
-
<title>Warning</title>
|
98
|
-
<p>This document is not an OGC Standard. This document is
|
99
|
-
|
106
|
+
<title>Warning for Drafts</title>
|
107
|
+
<p>This document is not an OGC Standard. This document is distributed for review and comment. This document is subject to change without notice and may not be referred to as an OGC Standard.</p>
|
108
|
+
|
109
|
+
<p>Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
|
100
110
|
</clause>
|
111
|
+
{% endif %}
|
101
112
|
|
102
113
|
|
103
114
|
{% elsif doctype == "Engineering Report" %}
|
104
115
|
<clause>
|
105
116
|
<title>Warning</title>
|
106
|
-
<p>This document is not an OGC Standard. This document is an OGC Public Engineering Report created as a deliverable in an OGC Interoperability Initiative and is <em>not an official position</em> of the OGC membership. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an OGC Standard
|
107
|
-
|
117
|
+
<p>This document is not an OGC Standard. This document is an OGC Public Engineering Report created as a deliverable in an OGC Interoperability Initiative and is <em>not an official position</em> of the OGC membership. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an OGC Standard.</p>
|
118
|
+
|
119
|
+
<p>Further, any OGC Engineering Report should not be referenced as required or mandatory technology in procurements. However, the discussions in this document could very well lead to the definition of an OGC Standard.</p>
|
108
120
|
</clause>
|
109
121
|
|
110
122
|
|
111
123
|
{% elsif doctype == "Best Practice" %}
|
112
124
|
<clause>
|
113
125
|
<title>Warning</title>
|
114
|
-
<p>This document defines an OGC Best
|
115
|
-
</p>
|
116
|
-
</clause>
|
126
|
+
<p>This document defines an OGC Best Practice on a particular technology or approach related to an OGC standard. This document is <em>not</em> an OGC Standard and may not be referred to as an OGC Standard. It is subject to change without notice. However, this document is an <em>official</em> position of the OGC membership on this particular technology topic.</p>
|
117
127
|
|
118
|
-
|
119
|
-
<clause>
|
120
|
-
<title>Warning</title>
|
121
|
-
<p>This document is an OGC Policies and Procedures Document. The document is subject to change based on membership requirements and motions. Please note that the OGC <link target="http://www.opengeospatial.org/ogc/policies/directives">Policies Related to OGC Standards</link> should be also be read.
|
122
|
-
</p>
|
123
|
-
</clause>
|
124
|
-
{% else %}
|
125
|
-
<clause>
|
126
|
-
<title>Warning</title>
|
127
|
-
<p>This document is published by OGC.
|
128
|
-
</p>
|
128
|
+
<p>Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
|
129
129
|
</clause>
|
130
|
-
{% endif %}
|
131
130
|
|
132
|
-
{%
|
131
|
+
{% elsif doctype == "Release Notes" %}
|
133
132
|
<clause>
|
134
|
-
<title>Warning
|
135
|
-
|
136
|
-
{% if doctype == "Standard" or doctype == "Standard With Suite" %}
|
137
|
-
<p>This document is not an OGC Standard. This document is distributed for review and comment. This document is subject to change without notice and may not be referred to as an OGC Standard.</p>
|
138
|
-
|
139
|
-
<p>Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
|
140
|
-
|
141
|
-
{% elsif doctype == "Best Practice" %}
|
142
|
-
<p>This document defines an OGC Best Practice on a particular technology or approach related to an OGC standard. This document is not an OGC Standard and may not be referred to as an OGC Standard. It is subject to change without notice. However, this document is an official position of the OGC membership on this particular technology topic.</p>
|
143
|
-
|
144
|
-
<p>Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
|
145
|
-
|
146
|
-
{% elsif doctype == "Discussion Paper" %}
|
147
|
-
<p>This document is not an OGC Standard. This document is an OGC Discussion Paper and is therefore not an official position of the OGC membership. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an OGC Standard. Further, an OGC Discussion Paper should not be referenced as required or mandatory technology in procurements.</p>
|
148
|
-
|
149
|
-
{% elsif doctype == "White Paper" %}
|
150
|
-
<p>This document is not an OGC Standard. This document is an OGC White Paper and is therefore not an official position of the OGC membership. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an OGC Standard. Further, an OGC White Paper should not be referenced as required or mandatory technology in procurements.</p>
|
151
|
-
|
152
|
-
{% elsif doctype == "Release Notes" %}
|
133
|
+
<title>Warning</title>
|
153
134
|
<p>This document is not an OGC standard. This document provides release notes for an OGC standard. This document is subject to change without notice and may not be referred to as an OGC Standard.</p>
|
154
135
|
|
155
136
|
<p>Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
|
156
137
|
|
157
|
-
|
158
|
-
<p>This document is not an OGC Standard. This document is distributed for review and comment. This document is subject to change without notice and may not be referred to as an OGC Standard.</p>
|
159
|
-
|
160
|
-
<p>Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
|
161
|
-
{% endif %}
|
138
|
+
</clause>
|
162
139
|
|
140
|
+
{% else %}
|
141
|
+
<clause>
|
142
|
+
<title>Warning</title>
|
143
|
+
<p>This document is not an OGC Standard. This document is an OGC {{ doctype }} and is therefore not an official position of the OGC membership. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an OGC Standard.</p>
|
144
|
+
<p>Further, an OGC {{ doctype }} should not be referenced as required or mandatory technology in procurements.</p>
|
163
145
|
</clause>
|
164
146
|
{% endif %}
|
147
|
+
|
165
148
|
</legal-statement>
|
166
149
|
|
167
150
|
|
@@ -62,7 +62,7 @@ module Asciidoctor
|
|
62
62
|
word_converter(node).convert filename unless node.attr("nodoc")
|
63
63
|
pdf_converter(node).convert filename unless node.attr("nodoc")
|
64
64
|
end
|
65
|
-
@log.write(@filename + ".err") unless @novalid
|
65
|
+
@log.write(@localdir + @filename + ".err") unless @novalid
|
66
66
|
@files_to_delete.each { |f| FileUtils.rm f }
|
67
67
|
ret
|
68
68
|
end
|
@@ -2,21 +2,12 @@ require "isodoc"
|
|
2
2
|
require_relative "metadata"
|
3
3
|
require_relative "reqt"
|
4
4
|
require_relative "biblio"
|
5
|
+
require_relative "sections"
|
5
6
|
require "fileutils"
|
6
7
|
|
7
8
|
module IsoDoc
|
8
9
|
module Ogc
|
9
10
|
module BaseConvert
|
10
|
-
def annex_name(annex, name, div)
|
11
|
-
div.h1 **{ class: "Annex" } do |t|
|
12
|
-
t << "#{anchor(annex['id'], :label)} "
|
13
|
-
t.br
|
14
|
-
t.b do |b|
|
15
|
-
name&.children&.each { |c2| parse(c2, b) }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
11
|
def fileloc(loc)
|
21
12
|
File.join(File.dirname(__FILE__), loc)
|
22
13
|
end
|
@@ -63,68 +54,12 @@ module IsoDoc
|
|
63
54
|
|
64
55
|
def load_yaml(lang, script)
|
65
56
|
y = if @i18nyaml then YAML.load_file(@i18nyaml)
|
66
|
-
elsif lang == "en"
|
67
|
-
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
|
68
57
|
else
|
69
58
|
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
|
70
59
|
end
|
71
60
|
super.merge(y)
|
72
61
|
end
|
73
62
|
|
74
|
-
def keywords(_docxml, out)
|
75
|
-
kw = @meta.get[:keywords]
|
76
|
-
kw.empty? and return
|
77
|
-
@prefacenum += 1
|
78
|
-
out.div **{ class: "Section3" } do |div|
|
79
|
-
clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
|
80
|
-
"Keywords", div, class: "IntroTitle")
|
81
|
-
div.p "The following are keywords to be used by search engines and "\
|
82
|
-
"document catalogues."
|
83
|
-
div.p kw.join(", ")
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
SUBMITTINGORGS =
|
88
|
-
"//bibdata/contributor[role/@type = 'author']/organization/name".freeze
|
89
|
-
|
90
|
-
def submittingorgs(docxml, out)
|
91
|
-
orgs = []
|
92
|
-
docxml.xpath(ns(SUBMITTINGORGS)).each { |org| orgs << org.text }
|
93
|
-
return if orgs.empty?
|
94
|
-
@prefacenum += 1
|
95
|
-
out.div **{ class: "Section3" } do |div|
|
96
|
-
clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
|
97
|
-
"Submitting Organizations", div, class: "IntroTitle")
|
98
|
-
div.p "The following organizations submitted this Document to the "\
|
99
|
-
"Open Geospatial Consortium (OGC):"
|
100
|
-
div.ul do |ul|
|
101
|
-
orgs.each { |org| ul.li org }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def submitters(docxml, out)
|
107
|
-
f = docxml.at(ns("//submitters")) || return
|
108
|
-
@prefacenum += 1
|
109
|
-
out.div **{ class: "Section3" } do |div|
|
110
|
-
clause_name(anchor(f['id'], :label), "Submitters", div,
|
111
|
-
class: "IntroTitle")
|
112
|
-
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def preface(isoxml, out)
|
117
|
-
title_attr = { class: "IntroTitle" }
|
118
|
-
isoxml.xpath(ns("//preface/clause")).each do |f|
|
119
|
-
@prefacenum += 1
|
120
|
-
out.div **{ class: "Section3", id: f["id"] } do |div|
|
121
|
-
clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
|
122
|
-
f&.at(ns("./title")), div, title_attr)
|
123
|
-
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
63
|
def preface_names_numbered(clause)
|
129
64
|
return if clause.nil?
|
130
65
|
@prefacenum += 1
|
@@ -138,44 +73,24 @@ module IsoDoc
|
|
138
73
|
end
|
139
74
|
end
|
140
75
|
|
141
|
-
def
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
out.div **attr_code(id: f["id"]) do |s|
|
146
|
-
clause_name(anchor(f["id"], :label), @abstract_lbl, s,
|
147
|
-
class: "AbstractTitle")
|
148
|
-
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
149
|
-
end
|
76
|
+
def example_parse(node, out)
|
77
|
+
name = node.at(ns("./name"))
|
78
|
+
example_name_parse(node, out, name) #if name
|
79
|
+
super
|
150
80
|
end
|
151
81
|
|
152
|
-
def
|
153
|
-
f = isoxml.at(ns("//foreword")) || return
|
154
|
-
@prefacenum += 1
|
155
|
-
page_break(out)
|
156
|
-
out.div **attr_code(id: f["id"]) do |s|
|
157
|
-
clause_name(anchor(f["id"], :label), @foreword_lbl, s,
|
158
|
-
class: "ForewordTitle")
|
159
|
-
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
160
|
-
end
|
82
|
+
def example_label(node, div, name)
|
161
83
|
end
|
162
84
|
|
163
|
-
def
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
85
|
+
def example_name_parse(node, div, name)
|
86
|
+
lbl = anchor(node['id'], :label, false)
|
87
|
+
div.p **{ class: "SourceTitle", style: "text-align:center;" } do |p|
|
88
|
+
lbl.nil? or p << l10n("#{@example_lbl} #{lbl}")
|
89
|
+
name and !lbl.nil? and p << " — "
|
90
|
+
name&.children&.each { |n| parse(n, p) }
|
170
91
|
end
|
171
92
|
end
|
172
93
|
|
173
|
-
def example_parse(node, out)
|
174
|
-
name = node.at(ns("./name"))
|
175
|
-
sourcecode_name_parse(node, out, name) if name
|
176
|
-
super
|
177
|
-
end
|
178
|
-
|
179
94
|
def initial_anchor_names(d)
|
180
95
|
@prefacenum = 0
|
181
96
|
preface_names_numbered(d.at(ns("//preface/abstract")))
|
@@ -220,16 +135,6 @@ module IsoDoc
|
|
220
135
|
sequential_asset_names(d.xpath(ns(middle_sections)))
|
221
136
|
end
|
222
137
|
|
223
|
-
def conformance(isoxml, out, num)
|
224
|
-
f = isoxml.at(ns("//clause[title = 'Conformance']")) or return num
|
225
|
-
out.div **attr_code(id: f["id"]) do |div|
|
226
|
-
num = num + 1
|
227
|
-
clause_name(num, "Conformance", div, nil)
|
228
|
-
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
229
|
-
end
|
230
|
-
num
|
231
|
-
end
|
232
|
-
|
233
138
|
def middle(isoxml, out)
|
234
139
|
middle_title(out)
|
235
140
|
i = scope isoxml, out, 0
|
data/lib/isodoc/ogc/biblio.rb
CHANGED
@@ -91,7 +91,7 @@ module IsoDoc
|
|
91
91
|
c = extract_city(b)
|
92
92
|
y = extract_year(b)
|
93
93
|
out << "#{pub_abbrev}: " if pub_abbrev
|
94
|
-
out << render_identifier(
|
94
|
+
out << render_identifier(inline_bibitem_ref_code(b))
|
95
95
|
out << ", "
|
96
96
|
out.i do |i|
|
97
97
|
iso_title(b)&.children&.each { |n| parse(n, i) }
|
@@ -104,6 +104,16 @@ module IsoDoc
|
|
104
104
|
out << "(#{y})." if y
|
105
105
|
end
|
106
106
|
end
|
107
|
+
|
108
|
+
def inline_bibitem_ref_code(b)
|
109
|
+
id = b.at(ns("./docidentifier[not(@type = 'DOI' or @type = 'metanorma' "\
|
110
|
+
"or @type = 'ISSN' or @type = 'ISBN')]"))
|
111
|
+
id ||= b.at(ns("./docidentifier[not(@type = 'metanorma')]"))
|
112
|
+
return id if id
|
113
|
+
id = Nokogiri::XML::Node.new("docidentifier", b.document)
|
114
|
+
id << "(NO ID)"
|
115
|
+
id
|
116
|
+
end
|
107
117
|
end
|
108
118
|
end
|
109
119
|
end
|
@@ -135,7 +135,10 @@ nav {
|
|
135
135
|
}
|
136
136
|
|
137
137
|
.document-type-band {
|
138
|
-
@include docBand($order: 2, $
|
138
|
+
@include docBand($order: 2, $offset: 180px);
|
139
|
+
.document-type {
|
140
|
+
top: 20px;
|
141
|
+
}
|
139
142
|
}
|
140
143
|
|
141
144
|
#governance-band p.document-type {
|
@@ -295,6 +298,13 @@ table {
|
|
295
298
|
font-weight: 400;
|
296
299
|
}
|
297
300
|
}
|
301
|
+
.docstage-box {
|
302
|
+
table,
|
303
|
+
table th,
|
304
|
+
table td {
|
305
|
+
border: none
|
306
|
+
}
|
307
|
+
}
|
298
308
|
|
299
309
|
table.recommendtest {
|
300
310
|
@include table($border: none !important);
|
data/lib/isodoc/ogc/i18n-en.yaml
CHANGED
data/lib/isodoc/ogc/metadata.rb
CHANGED
@@ -54,6 +54,7 @@ module IsoDoc
|
|
54
54
|
set(:authors, extract_person_names(authors))
|
55
55
|
editors = isoxml.xpath(ns("//bibdata/contributor[role/@type = 'editor']/person"))
|
56
56
|
set(:editors, extract_person_names(editors))
|
57
|
+
agency(isoxml)
|
57
58
|
end
|
58
59
|
|
59
60
|
def docid(isoxml, _out)
|
@@ -75,34 +76,11 @@ module IsoDoc
|
|
75
76
|
|
76
77
|
def version(isoxml, _out)
|
77
78
|
super
|
78
|
-
revdate = get[:revdate]
|
79
|
-
set(:revdate_monthyear, monthyr(revdate))
|
80
79
|
set(:edition, isoxml&.at(ns("//bibdata/edition"))&.text)
|
81
80
|
lg = ISO_639.find_by_code(isoxml&.at(ns("//bibdata/language"))&.text)
|
82
81
|
set(:doclanguage, lg ? lg[3] : "English")
|
83
82
|
end
|
84
83
|
|
85
|
-
MONTHS = {
|
86
|
-
"01": "January",
|
87
|
-
"02": "February",
|
88
|
-
"03": "March",
|
89
|
-
"04": "April",
|
90
|
-
"05": "May",
|
91
|
-
"06": "June",
|
92
|
-
"07": "July",
|
93
|
-
"08": "August",
|
94
|
-
"09": "September",
|
95
|
-
"10": "October",
|
96
|
-
"11": "November",
|
97
|
-
"12": "December",
|
98
|
-
}.freeze
|
99
|
-
|
100
|
-
def monthyr(isodate)
|
101
|
-
m = /(?<yr>\d\d\d\d)-(?<mo>\d\d)/.match isodate
|
102
|
-
return isodate unless m && m[:yr] && m[:mo]
|
103
|
-
return "#{MONTHS[m[:mo].to_sym]} #{m[:yr]}"
|
104
|
-
end
|
105
|
-
|
106
84
|
def url(xml, _out)
|
107
85
|
super
|
108
86
|
a = xml.at(ns("//bibdata/uri[@type = 'previous']")) and set(:previousuri, a.text)
|
data/lib/isodoc/ogc/reqt.rb
CHANGED
@@ -7,7 +7,9 @@ module IsoDoc
|
|
7
7
|
module BaseConvert
|
8
8
|
def recommend_class(node)
|
9
9
|
return "recommendtest" if node["type"] == "verification"
|
10
|
+
return "recommendtest" if node["type"] == "abstracttest"
|
10
11
|
return "recommendclass" if node["type"] == "class"
|
12
|
+
return "recommendclass" if node["type"] == "conformanceclass"
|
11
13
|
"recommend"
|
12
14
|
end
|
13
15
|
|
@@ -22,7 +24,7 @@ module IsoDoc
|
|
22
24
|
|
23
25
|
def recommendation_name(node, out, type)
|
24
26
|
label, title, lbl = recommendation_labels(node)
|
25
|
-
out.p **{ class: node["type"]
|
27
|
+
out.p **{ class: %w(verification abstracttest).include?(node["type"]) ?
|
26
28
|
"RecommendationTestTitle" : "RecommendationTitle" } do |b|
|
27
29
|
lbl = anchor(node['id'], :label, false)
|
28
30
|
b << (lbl.nil? ? l10n("#{type}:") : l10n("#{type} #{lbl}:"))
|
@@ -47,24 +49,45 @@ module IsoDoc
|
|
47
49
|
def recommendation_attributes1(node)
|
48
50
|
out = []
|
49
51
|
oblig = node["obligation"] and out << ["Obligation", oblig]
|
50
|
-
subj = node&.at(ns("./subject"))&.text and
|
51
|
-
|
52
|
-
|
52
|
+
subj = node&.at(ns("./subject"))&.text and out << [rec_subj(node), subj]
|
53
|
+
node.xpath(ns("./inherit")).each do |i|
|
54
|
+
out << recommendation_attr_parse(i, "Dependency")
|
55
|
+
end
|
53
56
|
node.xpath(ns("./classification")).each do |c|
|
54
|
-
|
55
|
-
value = c.at(ns("./value")) or next
|
56
|
-
out << [tag.text.capitalize, value.text]
|
57
|
+
line = recommendation_attr_keyvalue(c, "tag", "value") and out << line
|
57
58
|
end
|
58
59
|
out
|
59
60
|
end
|
60
61
|
|
62
|
+
def rec_subj(node)
|
63
|
+
%w(class conformanceclass).include?(node["type"]) ?
|
64
|
+
"Target Type" : "Subject"
|
65
|
+
end
|
66
|
+
|
67
|
+
def recommendation_attr_parse(node, label)
|
68
|
+
text = noko do |xml|
|
69
|
+
node.children.each { |n| parse(n, xml) }
|
70
|
+
end.join
|
71
|
+
[label, text]
|
72
|
+
end
|
73
|
+
|
74
|
+
def recommendation_attr_keyvalue(node, key, value)
|
75
|
+
tag = node.at(ns("./#{key}")) or return nil
|
76
|
+
value = node.at(ns("./#{value}")) or return nil
|
77
|
+
[tag.text.capitalize, value.text]
|
78
|
+
end
|
79
|
+
|
61
80
|
def recommendation_attributes(node, out)
|
62
81
|
ret = recommendation_attributes1(node)
|
63
82
|
return if ret.empty?
|
64
83
|
ret.each do |i|
|
65
84
|
out.tr do |tr|
|
66
|
-
tr.td
|
67
|
-
|
85
|
+
tr.td **REQ_TBL_ATTR do |td|
|
86
|
+
td << i[0]
|
87
|
+
end
|
88
|
+
tr.td **REQ_TBL_ATTR do |td|
|
89
|
+
td << i[1]
|
90
|
+
end
|
68
91
|
end
|
69
92
|
end
|
70
93
|
end
|
@@ -121,6 +144,8 @@ module IsoDoc
|
|
121
144
|
label = case node["type"]
|
122
145
|
when "verification" then @labels["recommendationtest"]
|
123
146
|
when "class" then @labels["recommendationclass"]
|
147
|
+
when "abstracttest" then @labels["abstracttest"]
|
148
|
+
when "conformanceclass" then @labels["conformanceclass"]
|
124
149
|
else
|
125
150
|
@recommendation_lbl
|
126
151
|
end
|
@@ -131,6 +156,8 @@ module IsoDoc
|
|
131
156
|
label = case node["type"]
|
132
157
|
when "verification" then @labels["requirementtest"]
|
133
158
|
when "class" then @labels["requirementclass"]
|
159
|
+
when "abstracttest" then @labels["abstracttest"]
|
160
|
+
when "conformanceclass" then @labels["conformanceclass"]
|
134
161
|
else
|
135
162
|
@requirement_lbl
|
136
163
|
end
|
@@ -141,6 +168,8 @@ module IsoDoc
|
|
141
168
|
label = case node["type"]
|
142
169
|
when "verification" then @labels["permissiontest"]
|
143
170
|
when "class" then @labels["permissionclass"]
|
171
|
+
when "abstracttest" then @labels["abstracttest"]
|
172
|
+
when "conformanceclass" then @labels["conformanceclass"]
|
144
173
|
else
|
145
174
|
@permission_lbl
|
146
175
|
end
|
@@ -159,16 +188,30 @@ module IsoDoc
|
|
159
188
|
end
|
160
189
|
end
|
161
190
|
|
191
|
+
def req_class_paths
|
192
|
+
{
|
193
|
+
"class" => "@type = 'class'",
|
194
|
+
"test" => "@type = 'verification'",
|
195
|
+
"" => "not(@type = 'verification' or @type = 'class' or @type = 'abstracttest' or @type = 'conformanceclass')",
|
196
|
+
}
|
197
|
+
end
|
198
|
+
|
199
|
+
def req_class_paths2
|
200
|
+
{
|
201
|
+
"abstracttest" => "@type = 'abstracttest'",
|
202
|
+
"conformanceclass" => "@type = 'conformanceclass'",
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
162
206
|
def sequential_permission_children(t, id)
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
sequential_permission_names1(t, id, "recommendation[@type = 'class']", @labels["recommendationclass"])
|
207
|
+
req_class_paths.each do |k, v|
|
208
|
+
sequential_permission_names1(t, id, "permission[#{v}]", @labels["permission#{k}"])
|
209
|
+
sequential_permission_names1(t, id, "requirement[#{v}]", @labels["requirement#{k}"])
|
210
|
+
sequential_permission_names1(t, id, "recommendation[#{v}]", @labels["recommendation#{k}"])
|
211
|
+
end
|
212
|
+
req_class_paths2.each do |k, v|
|
213
|
+
sequential_permission_names1(t, id, "*[#{v}]", @labels[k])
|
214
|
+
end
|
172
215
|
end
|
173
216
|
|
174
217
|
def sequential_permission_names1(block, lbl, klass, label)
|
@@ -185,30 +228,28 @@ module IsoDoc
|
|
185
228
|
sequential_table_names(clause)
|
186
229
|
sequential_figure_names(clause)
|
187
230
|
sequential_formula_names(clause)
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
sequential_permission_names(clause, "recommendation[@type = 'class']", @labels["recommendationclass"])
|
231
|
+
req_class_paths.each do |k, v|
|
232
|
+
sequential_permission_names(clause, "permission[#{v}]", @labels["permission#{k}"])
|
233
|
+
sequential_permission_names(clause, "requirement[#{v}]", @labels["requirement#{k}"])
|
234
|
+
sequential_permission_names(clause, "recommendation[#{v}]", @labels["recommendation#{k}"])
|
235
|
+
end
|
236
|
+
req_class_paths2.each do |k, v|
|
237
|
+
sequential_permission_names(clause, "*[#{v}]", @labels[k])
|
238
|
+
end
|
197
239
|
end
|
198
240
|
|
199
241
|
def hierarchical_asset_names(clause, num)
|
200
242
|
hierarchical_table_names(clause, num)
|
201
243
|
hierarchical_figure_names(clause, num)
|
202
244
|
hierarchical_formula_names(clause, num)
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
hierarchical_permission_names(clause, num, "recommendation[@type = 'class']", @labels["recommendationclass"])
|
245
|
+
req_class_paths.each do |k, v|
|
246
|
+
hierarchical_permission_names(clause, num, "permission[#{v}]", @labels["permission#{k}"])
|
247
|
+
hierarchical_permission_names(clause, num, "requirement[#{v}]", @labels["requirement#{k}"])
|
248
|
+
hierarchical_permission_names(clause, num, "recommendation[#{v}]", @labels["recommendation#{k}"])
|
249
|
+
end
|
250
|
+
req_class_paths2.each do |k, v|
|
251
|
+
hierarchical_permission_names(clause, num, "*[#{v}]", @labels[k])
|
252
|
+
end
|
212
253
|
end
|
213
254
|
|
214
255
|
def hierarchical_permission_names(clause, num, klass, label)
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module Ogc
|
3
|
+
module BaseConvert
|
4
|
+
def annex_name(annex, name, div)
|
5
|
+
div.h1 **{ class: "Annex" } do |t|
|
6
|
+
t << "#{anchor(annex['id'], :label)} "
|
7
|
+
t.br
|
8
|
+
t.b do |b|
|
9
|
+
name&.children&.each { |c2| parse(c2, b) }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def keywords(_docxml, out)
|
15
|
+
kw = @meta.get[:keywords]
|
16
|
+
kw.empty? and return
|
17
|
+
@prefacenum += 1
|
18
|
+
out.div **{ class: "Section3" } do |div|
|
19
|
+
clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
|
20
|
+
"Keywords", div, class: "IntroTitle")
|
21
|
+
div.p "The following are keywords to be used by search engines and "\
|
22
|
+
"document catalogues."
|
23
|
+
div.p kw.join(", ")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
SUBMITTINGORGS =
|
28
|
+
"//bibdata/contributor[role/@type = 'author']/organization/name".freeze
|
29
|
+
|
30
|
+
def submittingorgs(docxml, out)
|
31
|
+
orgs = []
|
32
|
+
docxml.xpath(ns(SUBMITTINGORGS)).each { |org| orgs << org.text }
|
33
|
+
return if orgs.empty?
|
34
|
+
@prefacenum += 1
|
35
|
+
out.div **{ class: "Section3" } do |div|
|
36
|
+
clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
|
37
|
+
"Submitting Organizations", div, class: "IntroTitle")
|
38
|
+
div.p "The following organizations submitted this Document to the "\
|
39
|
+
"Open Geospatial Consortium (OGC):"
|
40
|
+
div.ul do |ul|
|
41
|
+
orgs.each { |org| ul.li org }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def submitters(docxml, out)
|
47
|
+
f = docxml.at(ns("//submitters")) || return
|
48
|
+
@prefacenum += 1
|
49
|
+
out.div **{ class: "Section3" } do |div|
|
50
|
+
clause_name(anchor(f['id'], :label), "Submitters", div,
|
51
|
+
class: "IntroTitle")
|
52
|
+
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def preface(isoxml, out)
|
57
|
+
title_attr = { class: "IntroTitle" }
|
58
|
+
isoxml.xpath(ns("//preface/clause")).each do |f|
|
59
|
+
@prefacenum += 1
|
60
|
+
out.div **{ class: "Section3", id: f["id"] } do |div|
|
61
|
+
clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
|
62
|
+
f&.at(ns("./title")), div, title_attr)
|
63
|
+
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def abstract(isoxml, out)
|
69
|
+
f = isoxml.at(ns("//preface/abstract")) || return
|
70
|
+
@prefacenum += 1
|
71
|
+
page_break(out)
|
72
|
+
out.div **attr_code(id: f["id"]) do |s|
|
73
|
+
clause_name(anchor(f["id"], :label), @abstract_lbl, s,
|
74
|
+
class: "AbstractTitle")
|
75
|
+
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def foreword(isoxml, out)
|
80
|
+
f = isoxml.at(ns("//foreword")) || return
|
81
|
+
@prefacenum += 1
|
82
|
+
page_break(out)
|
83
|
+
out.div **attr_code(id: f["id"]) do |s|
|
84
|
+
clause_name(anchor(f["id"], :label), @foreword_lbl, s,
|
85
|
+
class: "ForewordTitle")
|
86
|
+
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def acknowledgements(isoxml, out)
|
91
|
+
f = isoxml.at(ns("//acknowledgements")) || return
|
92
|
+
@prefacenum += 1
|
93
|
+
out.div **{ class: "Section3", id: f["id"] } do |div|
|
94
|
+
clause_name(anchor(f["id"], :label), f&.at(ns("./title")), div,
|
95
|
+
class: "IntroTitle")
|
96
|
+
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def conformance(isoxml, out, num)
|
101
|
+
f = isoxml.at(ns("//clause[title = 'Conformance']")) or return num
|
102
|
+
out.div **attr_code(id: f["id"]) do |div|
|
103
|
+
num = num + 1
|
104
|
+
clause_name(num, "Conformance", div, nil)
|
105
|
+
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
106
|
+
end
|
107
|
+
num
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -12,13 +12,14 @@ module IsoDoc
|
|
12
12
|
def initialize(options)
|
13
13
|
@libdir = File.dirname(__FILE__)
|
14
14
|
super
|
15
|
-
#FileUtils.cp html_doc_path('logo.jpg'), "logo.jpg"
|
16
15
|
end
|
17
16
|
|
18
17
|
def default_fonts(options)
|
19
18
|
{
|
20
|
-
bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' :
|
21
|
-
|
19
|
+
bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' :
|
20
|
+
'"Times New Roman",serif'),
|
21
|
+
headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' :
|
22
|
+
'"Times New Roman",serif'),
|
22
23
|
monospacefont: '"Courier New",monospace'
|
23
24
|
}
|
24
25
|
end
|
@@ -35,7 +36,6 @@ module IsoDoc
|
|
35
36
|
}
|
36
37
|
end
|
37
38
|
|
38
|
-
|
39
39
|
def metadata_init(lang, script, labels)
|
40
40
|
@meta = Metadata.new(lang, script, labels)
|
41
41
|
end
|
@@ -144,17 +144,27 @@ module IsoDoc
|
|
144
144
|
def word_cleanup(docxml)
|
145
145
|
super
|
146
146
|
word_recommend_cleanup(docxml)
|
147
|
+
word_copyright_cleanup(docxml)
|
147
148
|
word_license_cleanup(docxml)
|
148
149
|
word_term_cleanup(docxml)
|
149
150
|
docxml
|
150
151
|
end
|
151
152
|
|
152
153
|
def word_license_cleanup(docxml)
|
153
|
-
|
154
|
+
x = "//div[@class = 'boilerplate-license']//p[not(@class)]"
|
155
|
+
docxml.xpath(x).each do |p|
|
154
156
|
p["class"] = "license"
|
155
157
|
end
|
156
158
|
end
|
157
159
|
|
160
|
+
# center only the Copyright notice
|
161
|
+
def word_copyright_cleanup(docxml)
|
162
|
+
x = "//div[@class = 'boilerplate-copyright']/div[1]/p[not(@class)]"
|
163
|
+
docxml.xpath(x).each do |p|
|
164
|
+
p["align"] = "center"
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
158
168
|
def word_term_cleanup(docxml)
|
159
169
|
docxml.xpath("//p[@class = 'TermNum']//p[@class = 'Terms']").each do |p|
|
160
170
|
p.replace(p.children)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-ogc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03
|
11
|
+
date: 2020-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: htmlentities
|
@@ -259,6 +259,7 @@ files:
|
|
259
259
|
- lib/isodoc/ogc/metadata.rb
|
260
260
|
- lib/isodoc/ogc/pdf_convert.rb
|
261
261
|
- lib/isodoc/ogc/reqt.rb
|
262
|
+
- lib/isodoc/ogc/sections.rb
|
262
263
|
- lib/isodoc/ogc/word_convert.rb
|
263
264
|
- lib/metanorma-ogc.rb
|
264
265
|
- lib/metanorma/ogc.rb
|