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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f7861239c1f4e7838cbc7d20c8ef140bca08b5041faa586a4fa27730a5133ecb
4
- data.tar.gz: 650181b76786a892c9327d1f88d4e925836b96badb255142f57236350eacce84
3
+ metadata.gz: 868dc6938ff146d001b5510963acea058cefe084d7a0b9d68e9d78916a6f122c
4
+ data.tar.gz: 4fce9933efebce96fb0b6c034c2297aeba957c1e7ad490f396f0f12dd04d415b
5
5
  SHA512:
6
- metadata.gz: ddd4e2f8fa8fc49e5025eefc97cebba4bbff58dbd05e3748b9da5385e6901043d8e67cba3b09091c1b7e25d26d14f3a84f360de7fae6abd2634f1828ef2ab99a
7
- data.tar.gz: 99311ec02dd10b3c750f5af2ba48d457a7ffc0d74a2595a64fa7ffe805809acb93a404e85a28a263fda3fb42499a78e543e6dd1e36149db7dc0019d1a13af791
6
+ metadata.gz: 3d15e4958895e014be50a293e945fc2abb0b21548803621663fde417235de6e4719c221689338e4e7de806dbfd7d94f5a08d32dc4dd8834343e8610638a297dc
7
+ data.tar.gz: 1f9566897b6ae34a99077f0ce09d5c8b36ab73ecb2e47ddb21aa3cdc75cd606e851243741641419f5ae9b3878798f45b59f20191ac015b0662750d33c8cc5b00
@@ -1,12 +1,11 @@
1
- # Auto-generated !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
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 !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
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 !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
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
@@ -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://travis-ci.com/metanorma/metanorma-ogc.svg["Build Status", link="https://travis-ci.com/metanorma/metanorma-ogc"]
5
- image:https://ci.appveyor.com/api/projects/status/skjvy856hpon74tj?svg=true["Appveyor Build Status", link="https://ci.appveyor.com/project/metanorma/metanorma-ogc"]
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
- <define name="TitleType">
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 align="center">Copyright
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. This Agreement is
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 an OGC Discussion Paper and is therefore <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. Further, an OGC Discussion Paper should not be referenced as required or mandatory technology in procurements.
99
- </p>
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. Further, any OGC Engineering Report should not be referenced as required or mandatory technology in procurements.
107
- </p>
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 Practices 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.
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
- {% elsif doctype == "Policy" %}
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
- {% else %}
131
+ {% elsif doctype == "Release Notes" %}
133
132
  <clause>
134
- <title>Warning for Drafts</title>
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
- {% else %}
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
@@ -101,9 +101,7 @@
101
101
  <ref name="structuredidentifier"/>
102
102
  </zeroOrMore>
103
103
  </define>
104
- <define name="TitleType">
105
- <text/>
106
- </define>
104
+ <!-- TitleType = text -->
107
105
  <define name="sections">
108
106
  <element name="sections">
109
107
  <oneOrMore>
@@ -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 abstract(isoxml, out)
142
- f = isoxml.at(ns("//preface/abstract")) || return
143
- @prefacenum += 1
144
- page_break(out)
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 foreword(isoxml, out)
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 acknowledgements(isoxml, out)
164
- f = isoxml.at(ns("//acknowledgements")) || return
165
- @prefacenum += 1
166
- out.div **{ class: "Section3", id: f["id"] } do |div|
167
- clause_name(anchor(f["id"], :label), f&.at(ns("./title")), div,
168
- class: "IntroTitle")
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 << "&nbsp;&mdash; "
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
@@ -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(bibitem_ref_code(b))
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, $textLength: 150px, $offset: 180px);
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);
@@ -5,3 +5,6 @@ permissiontest: Permission Test
5
5
  recommendationclass: Recommendation Class
6
6
  requirementclass: Requirement Class
7
7
  permissionclass: Permission Class
8
+ abstracttest: Abstract Test
9
+ conformanceclass: Conformance Class
10
+ example: Example
@@ -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)
@@ -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"] == "verification" ?
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
- out << [node["type"] == "class" ? "Target Type" : "Subject", subj]
52
- node.xpath(ns("./inherit")).each { |i| out << ["Dependency", i.text] }
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
- tag = c.at(ns("./tag")) or next
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 i[0], **REQ_TBL_ATTR
67
- tr.td i[1], **REQ_TBL_ATTR
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
- sequential_permission_names1(t, id, "permission[not(@type = 'verification' or @type = 'class')]", @permission_lbl)
164
- sequential_permission_names1(t, id, "requirement[not(@type = 'verification' or @type = 'class')]", @requirement_lbl)
165
- sequential_permission_names1(t, id, "recommendation[not(@type = 'verification' or @type = 'class')]", @recommendation_lbl)
166
- sequential_permission_names1(t, id, "permission[@type = 'verification']", @labels["permissiontest"])
167
- sequential_permission_names1(t, id, "requirement[@type = 'verification']", @labels["requirementtest"])
168
- sequential_permission_names1(t, id, "recommendation[@type = 'verification']", @labels["recommendationtest"])
169
- sequential_permission_names1(t, id, "permission[@type = 'class']", @labels["permissionclass"])
170
- sequential_permission_names1(t, id, "requirement[@type = 'class']", @labels["requirementclass"])
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
- sequential_permission_names(clause, "permission[not(@type = 'verification' or @type = 'class')]", @permission_lbl)
189
- sequential_permission_names(clause, "requirement[not(@type = 'verification' or @type = 'class')]", @requirement_lbl)
190
- sequential_permission_names(clause, "recommendation[not(@type = 'verification' or @type = 'class')]", @recommendation_lbl)
191
- sequential_permission_names(clause, "permission[@type = 'verification']", @labels["permissiontest"])
192
- sequential_permission_names(clause, "requirement[@type = 'verification']", @labels["requirementtest"])
193
- sequential_permission_names(clause, "recommendation[@type = 'verification']", @labels["recommendationtest"])
194
- sequential_permission_names(clause, "permission[@type = 'class']", @labels["permissionclass"])
195
- sequential_permission_names(clause, "requirement[@type = 'class']", @labels["requirementclass"])
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
- hierarchical_permission_names(clause, num, "permission[not(@type = 'verification' or @type = 'class')]", @permission_lbl)
204
- hierarchical_permission_names(clause, num, "requirement[not(@type = 'verification' or @type = 'class')]", @requirement_lbl)
205
- hierarchical_permission_names(clause, num, "recommendation[not(@type = 'verification' or @type = 'class')]", @recommendation_lbl)
206
- hierarchical_permission_names(clause, num, "permission[@type = 'verification']", @labels["permissiontest"])
207
- hierarchical_permission_names(clause, num, "requirement[@type = 'verification']", @labels["requirementtest"])
208
- hierarchical_permission_names(clause, num, "recommendation[@type = 'verification']", @labels["recommendationtest"])
209
- hierarchical_permission_names(clause, num, "permission[@type = 'class']", @labels["permissionclass"])
210
- hierarchical_permission_names(clause, num, "requirement[@type = 'class']", @labels["requirementclass"])
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' : '"Times New Roman",serif'),
21
- headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' : '"Times New Roman",serif'),
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
- docxml.xpath("//div[@class = 'boilerplate-license']//p[not(@class)]").each do |p|
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)
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Ogc
3
- VERSION = "1.0.3"
3
+ VERSION = "1.0.4"
4
4
  end
5
5
  end
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.3
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-20 00:00:00.000000000 Z
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