metanorma-iho 0.2.2 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 230c4f5b1dc54f38626964d1c566b3b7075de0242981bcb822df9bf8d2f3a520
4
- data.tar.gz: aa34f761d872455e1c0ce4110b305cb9502fa9a7c90d5f8e834f48dd7d8b1f16
3
+ metadata.gz: 326df847e98d1f1930b6018faadc68478e3e5067c1db20ed1dc65e8d6495be26
4
+ data.tar.gz: 38541be83ac036ec00baf1e7920757b69c8a87a48b504af8ff69fb22bb0c6e1e
5
5
  SHA512:
6
- metadata.gz: e6e8f57daa7026e6b7c06a85af9265a7292ca1c57b9bda45d247f7575c02e281424fda42ee42be3d33ca99890bde00980307b64bc7b6244413508cc89c6e42c0
7
- data.tar.gz: 1e32207b9ea840768639bf095e87efd04e3ab5b2778bdc84f63c0a6676f925cceea42a5479ec6edbd26789c93b81ef65942aaebb6a17a3a76c2ca5561f6482a8
6
+ metadata.gz: 0e753f2f4b3cac28f5a429f2231dc91fc54915f067a9f4be6959e701c50dbe360c8ebfb9d96832154365068fa647d8e3a0c83e1a2349d6f62ef558847ffc272c
7
+ data.tar.gz: 1aa3d3a11f9e85f48f4b992787f034a8392d05f06fa76bacb953d7dfa310b6990fa64ed6d53ca52ee06e841836ff7d35d001276fe374ad2700ffd62ea5d7deda
@@ -0,0 +1,66 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: rake
4
+
5
+ on:
6
+ push:
7
+ branches: [ master, main ]
8
+ tags: [ v* ]
9
+ pull_request:
10
+
11
+ jobs:
12
+ rake:
13
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
14
+ runs-on: ${{ matrix.os }}
15
+ continue-on-error: ${{ matrix.experimental }}
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ ruby: [ '2.6', '2.5', '2.4' ]
20
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
21
+ experimental: [ false ]
22
+ include:
23
+ - ruby: '2.7'
24
+ os: 'ubuntu-latest'
25
+ experimental: true
26
+ - ruby: '2.7'
27
+ os: 'windows-latest'
28
+ experimental: true
29
+ - ruby: '2.7'
30
+ os: 'macos-latest'
31
+ experimental: true
32
+ steps:
33
+ - uses: actions/checkout@master
34
+
35
+ - uses: ruby/setup-ruby@v1
36
+ with:
37
+ ruby-version: ${{ matrix.ruby }}
38
+
39
+ - uses: actions/cache@v1
40
+ with:
41
+ path: vendor/bundle
42
+ key: bundle-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/*.gemspec') }}
43
+ restore-keys: bundle-${{ matrix.os }}-${{ matrix.ruby }}
44
+
45
+ - run: bundle config set path 'vendor/bundle'
46
+
47
+ - run: bundle install --jobs 4 --retry 3
48
+
49
+ - name: install plantuml ubuntu
50
+ if: matrix.os == 'ubuntu-latest'
51
+ uses: nick-invision/retry@v1
52
+ with:
53
+ polling_interval_seconds: 5
54
+ timeout_minutes: 5
55
+ max_attempts: 3
56
+ command: >
57
+ sudo apt-get update -y && sudo bash -c
58
+ "curl -L https://github.com/metanorma/plantuml-install/raw/master/ubuntu.sh | bash"
59
+
60
+ - if: matrix.os == 'macos-latest'
61
+ run: brew install plantuml
62
+
63
+ - if: matrix.os == 'windows-latest'
64
+ run: cinst -y plantuml
65
+
66
+ - run: bundle exec rake
@@ -1,13 +1,15 @@
1
1
  = metanorma-iho: Metanorma for IHO
2
2
 
3
3
  image:https://img.shields.io/gem/v/metanorma-iho.svg["Gem Version", link="https://rubygems.org/gems/metanorma-iho"]
4
+ image:https://github.com/metanorma/metanorma-iso/workflows/rake/badge.svg["Build Status", link="https://github.com/metanorma/metanorma-iso/actions?workflow=rake"]
4
5
  image:https://codeclimate.com/github/metanorma/metanorma-iho/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/metanorma-iho"]
5
6
  image:https://img.shields.io/github/issues-pr-raw/metanorma/metanorma-iho.svg["Pull Requests", link="https://github.com/metanorma/metanorma-iho/pulls"]
6
7
  image:https://img.shields.io/github/commits-since/metanorma/metanorma-iho/latest.svg["Commits since latest",link="https://github.com/metanorma/metanorma-iho/releases"]
7
8
 
8
9
  == Functionality
9
10
 
10
- This gem processes Metanorma input for generating IHO documents.
11
+ This gem processes https://www.metanorma.com[Metanorma documents] following
12
+ a template for generating IHO standards.
11
13
 
12
14
  The implementation inherits from https://github.com/metanorma/metanorma-standoc.
13
15
 
@@ -402,6 +402,16 @@
402
402
  </choice>
403
403
  </attribute>
404
404
  </optional>
405
+ <optional>
406
+ <attribute name="valign">
407
+ <choice>
408
+ <value>top</value>
409
+ <value>middle</value>
410
+ <value>bottom</value>
411
+ <value>baseline</value>
412
+ </choice>
413
+ </attribute>
414
+ </optional>
405
415
  <choice>
406
416
  <zeroOrMore>
407
417
  <ref name="TextElement"/>
@@ -429,6 +439,16 @@
429
439
  </choice>
430
440
  </attribute>
431
441
  </optional>
442
+ <optional>
443
+ <attribute name="valign">
444
+ <choice>
445
+ <value>top</value>
446
+ <value>middle</value>
447
+ <value>bottom</value>
448
+ <value>baseline</value>
449
+ </choice>
450
+ </attribute>
451
+ </optional>
432
452
  <choice>
433
453
  <zeroOrMore>
434
454
  <ref name="TextElement"/>
@@ -998,6 +1018,9 @@
998
1018
  <value>alphabet_upper</value>
999
1019
  </choice>
1000
1020
  </attribute>
1021
+ <optional>
1022
+ <attribute name="start"/>
1023
+ </optional>
1001
1024
  <oneOrMore>
1002
1025
  <ref name="li"/>
1003
1026
  </oneOrMore>
@@ -148,6 +148,13 @@
148
148
  </define>
149
149
  <define name="iho-standard">
150
150
  <element name="iho-standard">
151
+ <attribute name="version"/>
152
+ <attribute name="type">
153
+ <choice>
154
+ <value>semantic</value>
155
+ <value>presentation</value>
156
+ </choice>
157
+ </attribute>
151
158
  <ref name="bibdata"/>
152
159
  <zeroOrMore>
153
160
  <ref name="termdocsource"/>
@@ -24,6 +24,14 @@
24
24
  <start>
25
25
  <ref name="standard-document"/>
26
26
  </start>
27
+ <define name="doctype">
28
+ <element name="doctype">
29
+ <optional>
30
+ <attribute name="abbreviation"/>
31
+ </optional>
32
+ <ref name="DocumentType"/>
33
+ </element>
34
+ </define>
27
35
  <define name="hyperlink">
28
36
  <element name="link">
29
37
  <attribute name="target">
@@ -42,7 +50,6 @@
42
50
  </define>
43
51
  <define name="xref">
44
52
  <element name="xref">
45
- <!-- attribute target { xsd:IDREF }, -->
46
53
  <attribute name="target">
47
54
  <data type="string">
48
55
  <param name="pattern">\i\c*|\c+#\c+</param>
@@ -64,6 +71,11 @@
64
71
  </choice>
65
72
  </attribute>
66
73
  </optional>
74
+ <optional>
75
+ <attribute name="droploc">
76
+ <data type="boolean"/>
77
+ </attribute>
78
+ </optional>
67
79
  <text/>
68
80
  </element>
69
81
  </define>
@@ -137,6 +149,11 @@
137
149
  <data type="boolean"/>
138
150
  </attribute>
139
151
  </optional>
152
+ <optional>
153
+ <attribute name="key">
154
+ <data type="boolean"/>
155
+ </attribute>
156
+ </optional>
140
157
  <oneOrMore>
141
158
  <ref name="dt"/>
142
159
  <ref name="dd"/>
@@ -581,6 +598,8 @@
581
598
  <ref name="ol"/>
582
599
  <ref name="dl"/>
583
600
  <ref name="formula"/>
601
+ <ref name="quote"/>
602
+ <ref name="sourcecode"/>
584
603
  </choice>
585
604
  </oneOrMore>
586
605
  </element>
@@ -664,6 +683,16 @@
664
683
  </choice>
665
684
  </attribute>
666
685
  </optional>
686
+ <optional>
687
+ <attribute name="valign">
688
+ <choice>
689
+ <value>top</value>
690
+ <value>middle</value>
691
+ <value>bottom</value>
692
+ <value>baseline</value>
693
+ </choice>
694
+ </attribute>
695
+ </optional>
667
696
  <choice>
668
697
  <zeroOrMore>
669
698
  <choice>
@@ -700,6 +729,16 @@
700
729
  </choice>
701
730
  </attribute>
702
731
  </optional>
732
+ <optional>
733
+ <attribute name="valign">
734
+ <choice>
735
+ <value>top</value>
736
+ <value>middle</value>
737
+ <value>bottom</value>
738
+ <value>baseline</value>
739
+ </choice>
740
+ </attribute>
741
+ </optional>
703
742
  <choice>
704
743
  <zeroOrMore>
705
744
  <choice>
@@ -837,6 +876,13 @@
837
876
  </define>
838
877
  <define name="standard-document">
839
878
  <element name="standard-document">
879
+ <attribute name="version"/>
880
+ <attribute name="type">
881
+ <choice>
882
+ <value>semantic</value>
883
+ <value>presentation</value>
884
+ </choice>
885
+ </attribute>
840
886
  <ref name="bibdata"/>
841
887
  <optional>
842
888
  <ref name="boilerplate"/>
@@ -858,7 +904,7 @@
858
904
  <oneOrMore>
859
905
  <choice>
860
906
  <ref name="content"/>
861
- <ref name="preface_abstract"/>
907
+ <ref name="abstract"/>
862
908
  <ref name="foreword"/>
863
909
  <ref name="introduction"/>
864
910
  <ref name="acknowledgements"/>
@@ -1052,14 +1098,17 @@
1052
1098
  <ref name="section-title"/>
1053
1099
  </optional>
1054
1100
  <group>
1055
- <group>
1056
- <zeroOrMore>
1057
- <ref name="BasicBlock"/>
1058
- </zeroOrMore>
1059
- <zeroOrMore>
1060
- <ref name="note"/>
1061
- </zeroOrMore>
1062
- </group>
1101
+ <choice>
1102
+ <group>
1103
+ <zeroOrMore>
1104
+ <ref name="BasicBlock"/>
1105
+ </zeroOrMore>
1106
+ <zeroOrMore>
1107
+ <ref name="note"/>
1108
+ </zeroOrMore>
1109
+ </group>
1110
+ <ref name="amend"/>
1111
+ </choice>
1063
1112
  <zeroOrMore>
1064
1113
  <choice>
1065
1114
  <ref name="clause-subsection"/>
@@ -1128,49 +1177,7 @@
1128
1177
  </define>
1129
1178
  <define name="annex">
1130
1179
  <element name="annex">
1131
- <optional>
1132
- <attribute name="id">
1133
- <data type="ID"/>
1134
- </attribute>
1135
- </optional>
1136
- <optional>
1137
- <attribute name="language"/>
1138
- </optional>
1139
- <optional>
1140
- <attribute name="script"/>
1141
- </optional>
1142
- <optional>
1143
- <attribute name="inline-header">
1144
- <data type="boolean"/>
1145
- </attribute>
1146
- </optional>
1147
- <attribute name="obligation">
1148
- <choice>
1149
- <value>normative</value>
1150
- <value>informative</value>
1151
- </choice>
1152
- </attribute>
1153
- <optional>
1154
- <ref name="section-title"/>
1155
- </optional>
1156
- <group>
1157
- <group>
1158
- <zeroOrMore>
1159
- <ref name="BasicBlock"/>
1160
- </zeroOrMore>
1161
- <zeroOrMore>
1162
- <ref name="note"/>
1163
- </zeroOrMore>
1164
- </group>
1165
- <zeroOrMore>
1166
- <choice>
1167
- <ref name="annex-subsection"/>
1168
- <ref name="terms"/>
1169
- <ref name="definitions"/>
1170
- <ref name="references"/>
1171
- </choice>
1172
- </zeroOrMore>
1173
- </group>
1180
+ <ref name="Annex-Section"/>
1174
1181
  </element>
1175
1182
  </define>
1176
1183
  <define name="terms">
@@ -1456,11 +1463,6 @@
1456
1463
  </optional>
1457
1464
  </element>
1458
1465
  </define>
1459
- <define name="preface_abstract">
1460
- <element name="abstract">
1461
- <ref name="Basic-Section"/>
1462
- </element>
1463
- </define>
1464
1466
  <define name="term-clause">
1465
1467
  <element name="clause">
1466
1468
  <optional>
@@ -1510,4 +1512,79 @@
1510
1512
  <ref name="CitationType"/>
1511
1513
  </element>
1512
1514
  </define>
1515
+ <define name="amend">
1516
+ <element name="amend">
1517
+ <optional>
1518
+ <attribute name="id">
1519
+ <data type="ID"/>
1520
+ </attribute>
1521
+ </optional>
1522
+ <attribute name="change">
1523
+ <choice>
1524
+ <value>add</value>
1525
+ <value>modify</value>
1526
+ <value>delete</value>
1527
+ </choice>
1528
+ </attribute>
1529
+ <optional>
1530
+ <attribute name="path"/>
1531
+ </optional>
1532
+ <optional>
1533
+ <attribute name="path_end"/>
1534
+ </optional>
1535
+ <optional>
1536
+ <attribute name="title"/>
1537
+ </optional>
1538
+ <optional>
1539
+ <element name="location">
1540
+ <zeroOrMore>
1541
+ <ref name="locality"/>
1542
+ </zeroOrMore>
1543
+ </element>
1544
+ </optional>
1545
+ <zeroOrMore>
1546
+ <ref name="autonumber"/>
1547
+ </zeroOrMore>
1548
+ <optional>
1549
+ <element name="description">
1550
+ <zeroOrMore>
1551
+ <ref name="BasicBlock"/>
1552
+ </zeroOrMore>
1553
+ </element>
1554
+ </optional>
1555
+ <optional>
1556
+ <element name="newcontent">
1557
+ <zeroOrMore>
1558
+ <ref name="BasicBlock"/>
1559
+ </zeroOrMore>
1560
+ </element>
1561
+ </optional>
1562
+ <optional>
1563
+ <element name="description">
1564
+ <zeroOrMore>
1565
+ <ref name="BasicBlock"/>
1566
+ </zeroOrMore>
1567
+ </element>
1568
+ </optional>
1569
+ </element>
1570
+ </define>
1571
+ <define name="autonumber">
1572
+ <element name="autonumber">
1573
+ <attribute name="type">
1574
+ <choice>
1575
+ <value>requirement</value>
1576
+ <value>recommendation</value>
1577
+ <value>permission</value>
1578
+ <value>table</value>
1579
+ <value>figure</value>
1580
+ <value>admonition</value>
1581
+ <value>formula</value>
1582
+ <value>sourcecode</value>
1583
+ <value>example</value>
1584
+ <value>note</value>
1585
+ </choice>
1586
+ </attribute>
1587
+ <text/>
1588
+ </element>
1589
+ </define>
1513
1590
  </grammar>
@@ -12,9 +12,129 @@ module IsoDoc
12
12
 
13
13
  def info(isoxml, out)
14
14
  @meta.series isoxml, out
15
- @meta.commentperiod isoxml, out
16
15
  super
17
16
  end
17
+
18
+ def std_bibitem_entry(list, b, ordinal, biblio)
19
+ list.p **attr_code(iso_bibitem_entry_attrs(b, biblio)) do |ref|
20
+ prefix_bracketed_ref(ref, "[#{ordinal}]")
21
+ standard_citation(ref, b)
22
+ end
23
+ end
24
+
25
+ def nodes_to_span(n)
26
+ noko do |xml|
27
+ xml.span do |s|
28
+ n&.children&.each { |x| parse(x, s) }
29
+ end
30
+ end.join("")
31
+ end
32
+
33
+ def multiplenames_and(names)
34
+ return "" if names.length == 0
35
+ return names[0] if names.length == 1
36
+ return "#{names[0]} and #{names[1]}" if names.length == 2
37
+ names[0..-2].join(", ") + " and #{names[-1]}"
38
+ end
39
+
40
+ def extract_publisher(b)
41
+ c = b.xpath(ns("./contributor[role/@type = 'publisher'][organization]"))
42
+ abbrs = []
43
+ names = []
44
+ c&.each do |c1|
45
+ n = c1.at(ns("./organization/name")) or next
46
+ abbrs << (c1.at(ns("./organization/abbreviation")) || n)
47
+ names << nodes_to_span(n)
48
+ end
49
+ return [nil, nil] if names.empty?
50
+ return [multiplenames_and(names), (abbrs.map { |x| x.text }).join("/")]
51
+ end
52
+
53
+ def inline_bibitem_ref_code(b)
54
+ id = b.at(ns("./docidentifier[not(@type = 'DOI' or @type = 'metanorma' "\
55
+ "or @type = 'ISSN' or @type = 'ISBN' or @type = 'rfc-anchor')]"))
56
+ id ||= b.at(ns("./docidentifier[not(@type = 'metanorma')]"))
57
+ return [nil, id, nil] if id
58
+ id = Nokogiri::XML::Node.new("docidentifier", b.document)
59
+ id << "(NO ID)"
60
+ [nil, id, nil]
61
+ end
62
+
63
+ def extract_edition(b)
64
+ b&.at(ns("./edition"))&.text
65
+ end
66
+
67
+ def extract_uri(b)
68
+ b.at(ns("./uri"))
69
+ end
70
+
71
+ def omit_docid_prefix(prefix)
72
+ return true if prefix == "IHO"
73
+ super
74
+ end
75
+
76
+ def render_identifier(id)
77
+ if !id[1].nil? and id[1]["type"] == "IHO"
78
+ id[1].children = id[1].text.sub(/^IHO /, "")
79
+ end
80
+ super
81
+ end
82
+
83
+ def extract_publisher(b)
84
+ c = b.xpath(ns("./contributor[role/@type = 'publisher'][organization]"))
85
+ abbrs = []
86
+ names = []
87
+ c&.each do |c1|
88
+ n = c1.at(ns("./organization/name")) or next
89
+ abbrs << (c1.at(ns("./organization/abbreviation")) || n)
90
+ names << nodes_to_span(n)
91
+ end
92
+ return [nil, nil] if names.empty?
93
+ return [multiplenames_and(names), (abbrs.map { |x| x.text }).join("/")]
94
+ end
95
+
96
+ def extract_author(b)
97
+ c = b.xpath(ns("./contributor[role/@type = 'author']"))
98
+ c = b.xpath(ns("./contributor[role/@type = 'editor']")) if c.empty?
99
+ return extract_publisher(b)[0] if c.empty?
100
+ c.map do |c1|
101
+ c1&.at(ns("./organization/name"))&.text || extract_person_name(c1)
102
+ end.reject { |e| e.nil? || e.empty? }.join(", ")
103
+ end
104
+
105
+ def extract_person_name(b)
106
+ p = b.at(ns("./person/name")) or return
107
+ c = p.at(ns("./completename")) and return c.text
108
+ s = p&.at(ns("./surname"))&.text or return
109
+ i = p.xpath(ns("./initial")) and
110
+ front = i.map { |e| e.text.gsub(/[^[:upper:]]/, "") }.join("")
111
+ i.empty? and f = p.xpath(ns("./forename")) and
112
+ front = f.map { |e| e.text[0].upcase }.join("")
113
+ front ? "#{s} #{front}" : s
114
+ end
115
+
116
+ def is_iho?(b)
117
+ extract_publisher(b)[1] == "IHO"
118
+ end
119
+
120
+ # [{number}] {docID} edition {edition}: {title}, {author/organization}
121
+ def standard_citation(out, b)
122
+ if ftitle = b.at(ns("./formattedref"))
123
+ ftitle&.children&.each { |n| parse(n, out) }
124
+ else
125
+ id = render_identifier(inline_bibitem_ref_code(b))
126
+ out << id[1] if id[1]
127
+ ed = extract_edition(b) if is_iho?(b)
128
+ out << " edition #{ed}" if ed
129
+ out << ": " if id[1] || ed
130
+ iso_title(b)&.children&.each { |n| parse(n, out) }
131
+ out << ", "
132
+ author = extract_author(b)
133
+ out << author
134
+ u = extract_uri(b)
135
+ out << " (<a href='#{u.text}'>#{u.text}</a>)" if u
136
+ end
137
+ end
18
138
  end
19
139
  end
20
140
  end