metanorma-bsi 0.0.1 → 0.1.0
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.
Potentially problematic release.
This version of metanorma-bsi might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +43 -0
- data/.github/workflows/release_github_packages.yml +49 -0
- data/.hound.yml +3 -1
- data/.rubocop.yml +4 -8
- data/README.adoc +95 -11
- data/lib/asciidoctor/bsi/biblio.rng +1 -0
- data/lib/asciidoctor/bsi/bsi.rng +32 -4
- data/lib/asciidoctor/bsi/bsi_intro_en.xml +87 -61
- data/lib/asciidoctor/bsi/cleanup.rb +15 -8
- data/lib/asciidoctor/bsi/cleanup_ref.rb +10 -21
- data/lib/asciidoctor/bsi/converter.rb +7 -5
- data/lib/asciidoctor/bsi/front.rb +26 -5
- data/lib/asciidoctor/bsi/isodoc.rng +191 -3
- data/lib/asciidoctor/bsi/isostandard.rng +12 -0
- data/lib/asciidoctor/bsi/validate.rb +5 -6
- data/lib/asciidoctor/bsi/validate_list.rb +2 -2
- data/lib/isodoc/bsi/base_convert.rb +2 -1
- data/lib/isodoc/bsi/bsi.international-standard.xsl +3380 -2349
- data/lib/isodoc/bsi/html/htmlstyle.css +43 -22
- data/lib/isodoc/bsi/html/htmlstyle.scss +46 -22
- data/lib/isodoc/bsi/html_convert.rb +2 -2
- data/lib/isodoc/bsi/i18n-en.yaml +4 -4
- data/lib/isodoc/bsi/metadata.rb +2 -2
- data/lib/isodoc/bsi/presentation_xml_convert.rb +26 -5
- data/lib/isodoc/bsi/xref.rb +11 -4
- data/lib/metanorma/bsi/version.rb +1 -1
- data/metanorma-bsi.gemspec +2 -2
- data/spec/asciidoctor/base_spec.rb +564 -494
- data/spec/asciidoctor/blocks_spec.rb +192 -195
- data/spec/asciidoctor/cleanup_spec.rb +361 -361
- data/spec/asciidoctor/refs_spec.rb +8 -78
- data/spec/asciidoctor/section_spec.rb +227 -227
- data/spec/asciidoctor/validate_spec.rb +26 -1
- data/spec/isodoc/blocks_spec.rb +56 -21
- data/spec/isodoc/i18n_spec.rb +156 -234
- data/spec/isodoc/inline_spec.rb +7 -7
- data/spec/isodoc/iso_spec.rb +4 -4
- data/spec/isodoc/metadata_spec.rb +0 -1
- data/spec/isodoc/ref_spec.rb +7 -7
- data/spec/isodoc/section_spec.rb +400 -343
- data/spec/isodoc/terms_spec.rb +224 -225
- data/spec/isodoc/xref_spec.rb +1347 -1360
- data/spec/metanorma/processor_spec.rb +37 -40
- data/spec/spec_helper.rb +6 -4
- data/spec/vcr_cassettes/iso-639.yml +19 -19
- data/spec/vcr_cassettes/isobib_get_639_1967.yml +17 -17
- data/spec/vcr_cassettes/multistandard.yml +15 -193
- metadata +7 -5
@@ -22,16 +22,18 @@ module Asciidoctor
|
|
22
22
|
|
23
23
|
def note(node)
|
24
24
|
return commentary(node) if node.attr("type") == "commentary"
|
25
|
+
|
25
26
|
super
|
26
27
|
end
|
27
28
|
|
28
29
|
def commentary_attrs(node)
|
30
|
+
b = node.attr("beforeclauses") == "true" ? "true" : nil
|
29
31
|
attr_code(keep_attrs(node).merge(
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
id: Metanorma::Utils::anchor_or_uuid(node),
|
33
|
+
type: "commentary",
|
34
|
+
target: node.attr("target"),
|
35
|
+
beforeclauses: b,
|
36
|
+
))
|
35
37
|
end
|
36
38
|
|
37
39
|
def commentary(node)
|
@@ -2,7 +2,7 @@ module Asciidoctor
|
|
2
2
|
module BSI
|
3
3
|
class Converter < ISO::Converter
|
4
4
|
def org_abbrev
|
5
|
-
super.merge("British Standards
|
5
|
+
super.merge("British Standards Institution" => "BSI")
|
6
6
|
end
|
7
7
|
|
8
8
|
def metadata_author(node, xml)
|
@@ -11,7 +11,7 @@ module Asciidoctor
|
|
11
11
|
xml.contributor do |c|
|
12
12
|
c.role **{ type: "author" }
|
13
13
|
c.organization do |a|
|
14
|
-
organization(a, p, node, !node.attr("publisher"))
|
14
|
+
organization(a, p, false, node, !node.attr("publisher"))
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -23,7 +23,7 @@ module Asciidoctor
|
|
23
23
|
xml.contributor do |c|
|
24
24
|
c.role **{ type: "publisher" }
|
25
25
|
c.organization do |a|
|
26
|
-
organization(a, p, node, !node.attr("publisher"))
|
26
|
+
organization(a, p, true, node, !node.attr("publisher"))
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -36,7 +36,7 @@ module Asciidoctor
|
|
36
36
|
c.from (node.attr("copyright-year") || Date.today.year)
|
37
37
|
c.owner do |owner|
|
38
38
|
owner.organization do |o|
|
39
|
-
organization(o, p, node, !node.attr("copyright-holder") ||
|
39
|
+
organization(o, p, true, node, !node.attr("copyright-holder") ||
|
40
40
|
node.attr("publisher"))
|
41
41
|
end
|
42
42
|
end
|
@@ -58,7 +58,28 @@ module Asciidoctor
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def relaton_relations
|
61
|
-
super + %w(obsoletes adopted-from)
|
61
|
+
super + %w(obsoletes adopted-from bsi-related)
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_typeabbr(node, amd = false)
|
65
|
+
case doctype(node)
|
66
|
+
when "publicly-available-specification" then "PAS "
|
67
|
+
when "british-standard" then "BS "
|
68
|
+
when "draft-for-development" then "DD "
|
69
|
+
when "privately-subscribed-standard" then "PSS "
|
70
|
+
when "flex-standard" then "Flex "
|
71
|
+
else
|
72
|
+
super
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def id_stage_abbr(stage, substage, node, bare = false)
|
77
|
+
ret = super
|
78
|
+
if %w(publicly-available-specification).include?(doctype(node)) &&
|
79
|
+
!%w(D FD).include?(ret)
|
80
|
+
ret = "#{ret} "
|
81
|
+
end
|
82
|
+
ret
|
62
83
|
end
|
63
84
|
|
64
85
|
# TODO: not yet implemented prefixes for subsectors explicitly, Rules for Structure Annex F
|
@@ -45,6 +45,11 @@
|
|
45
45
|
<optional>
|
46
46
|
<attribute name="alt"/>
|
47
47
|
</optional>
|
48
|
+
<optional>
|
49
|
+
<attribute name="updatetype">
|
50
|
+
<data type="boolean"/>
|
51
|
+
</attribute>
|
52
|
+
</optional>
|
48
53
|
<text/>
|
49
54
|
</element>
|
50
55
|
</define>
|
@@ -543,6 +548,9 @@
|
|
543
548
|
</define>
|
544
549
|
<define name="BibDataExtensionType">
|
545
550
|
<ref name="doctype"/>
|
551
|
+
<optional>
|
552
|
+
<ref name="docsubtype"/>
|
553
|
+
</optional>
|
546
554
|
<optional>
|
547
555
|
<ref name="editorialgroup"/>
|
548
556
|
</optional>
|
@@ -876,8 +884,28 @@
|
|
876
884
|
</zeroOrMore>
|
877
885
|
</element>
|
878
886
|
</define>
|
887
|
+
<define name="pagebreak">
|
888
|
+
<element name="pagebreak">
|
889
|
+
<optional>
|
890
|
+
<attribute name="orientation">
|
891
|
+
<choice>
|
892
|
+
<value>landscape</value>
|
893
|
+
<value>portrait</value>
|
894
|
+
</choice>
|
895
|
+
</attribute>
|
896
|
+
</optional>
|
897
|
+
</element>
|
898
|
+
</define>
|
879
899
|
</include>
|
880
900
|
<!-- end overrides -->
|
901
|
+
<define name="docsubtype">
|
902
|
+
<element name="docsubtype">
|
903
|
+
<ref name="DocumentSubtype"/>
|
904
|
+
</element>
|
905
|
+
</define>
|
906
|
+
<define name="DocumentSubtype">
|
907
|
+
<text/>
|
908
|
+
</define>
|
881
909
|
<define name="colgroup">
|
882
910
|
<element name="colgroup">
|
883
911
|
<oneOrMore>
|
@@ -943,8 +971,170 @@
|
|
943
971
|
<ref name="permission"/>
|
944
972
|
<ref name="imagemap"/>
|
945
973
|
<ref name="svgmap"/>
|
974
|
+
<ref name="inputform"/>
|
975
|
+
</choice>
|
976
|
+
</define>
|
977
|
+
<define name="inputform">
|
978
|
+
<element name="form">
|
979
|
+
<attribute name="id">
|
980
|
+
<data type="ID"/>
|
981
|
+
</attribute>
|
982
|
+
<attribute name="name"/>
|
983
|
+
<attribute name="action"/>
|
984
|
+
<zeroOrMore>
|
985
|
+
<choice>
|
986
|
+
<ref name="TextElement"/>
|
987
|
+
<ref name="FormInput"/>
|
988
|
+
</choice>
|
989
|
+
</zeroOrMore>
|
990
|
+
</element>
|
991
|
+
</define>
|
992
|
+
<define name="FormInput">
|
993
|
+
<choice>
|
994
|
+
<ref name="input"/>
|
995
|
+
<ref name="formlabel"/>
|
996
|
+
<ref name="select"/>
|
997
|
+
<ref name="textarea"/>
|
998
|
+
</choice>
|
999
|
+
</define>
|
1000
|
+
<define name="InputType">
|
1001
|
+
<choice>
|
1002
|
+
<value>button</value>
|
1003
|
+
<value>checkbox</value>
|
1004
|
+
<value>date</value>
|
1005
|
+
<value>file</value>
|
1006
|
+
<value>password</value>
|
1007
|
+
<value>radio</value>
|
1008
|
+
<value>submit</value>
|
1009
|
+
<value>text</value>
|
946
1010
|
</choice>
|
947
1011
|
</define>
|
1012
|
+
<define name="input">
|
1013
|
+
<element name="input">
|
1014
|
+
<attribute name="type">
|
1015
|
+
<ref name="InputType"/>
|
1016
|
+
</attribute>
|
1017
|
+
<optional>
|
1018
|
+
<attribute name="checked">
|
1019
|
+
<data type="boolean"/>
|
1020
|
+
</attribute>
|
1021
|
+
</optional>
|
1022
|
+
<optional>
|
1023
|
+
<attribute name="disabled">
|
1024
|
+
<data type="boolean"/>
|
1025
|
+
</attribute>
|
1026
|
+
</optional>
|
1027
|
+
<optional>
|
1028
|
+
<attribute name="readonly">
|
1029
|
+
<data type="boolean"/>
|
1030
|
+
</attribute>
|
1031
|
+
</optional>
|
1032
|
+
<optional>
|
1033
|
+
<attribute name="maxlength">
|
1034
|
+
<data type="int"/>
|
1035
|
+
</attribute>
|
1036
|
+
</optional>
|
1037
|
+
<optional>
|
1038
|
+
<attribute name="minlength">
|
1039
|
+
<data type="int"/>
|
1040
|
+
</attribute>
|
1041
|
+
</optional>
|
1042
|
+
<optional>
|
1043
|
+
<attribute name="name"/>
|
1044
|
+
</optional>
|
1045
|
+
<optional>
|
1046
|
+
<attribute name="value"/>
|
1047
|
+
</optional>
|
1048
|
+
<optional>
|
1049
|
+
<attribute name="id">
|
1050
|
+
<data type="ID"/>
|
1051
|
+
</attribute>
|
1052
|
+
</optional>
|
1053
|
+
</element>
|
1054
|
+
</define>
|
1055
|
+
<define name="formlabel">
|
1056
|
+
<element name="label">
|
1057
|
+
<attribute name="for">
|
1058
|
+
<data type="IDREF"/>
|
1059
|
+
</attribute>
|
1060
|
+
<zeroOrMore>
|
1061
|
+
<ref name="PureTextElement"/>
|
1062
|
+
</zeroOrMore>
|
1063
|
+
</element>
|
1064
|
+
</define>
|
1065
|
+
<define name="select">
|
1066
|
+
<element name="select">
|
1067
|
+
<optional>
|
1068
|
+
<attribute name="name"/>
|
1069
|
+
</optional>
|
1070
|
+
<optional>
|
1071
|
+
<attribute name="value"/>
|
1072
|
+
</optional>
|
1073
|
+
<optional>
|
1074
|
+
<attribute name="id">
|
1075
|
+
<data type="ID"/>
|
1076
|
+
</attribute>
|
1077
|
+
</optional>
|
1078
|
+
<optional>
|
1079
|
+
<attribute name="disabled">
|
1080
|
+
<data type="boolean"/>
|
1081
|
+
</attribute>
|
1082
|
+
</optional>
|
1083
|
+
<optional>
|
1084
|
+
<attribute name="multiple">
|
1085
|
+
<data type="boolean"/>
|
1086
|
+
</attribute>
|
1087
|
+
</optional>
|
1088
|
+
<optional>
|
1089
|
+
<attribute name="size">
|
1090
|
+
<data type="int"/>
|
1091
|
+
</attribute>
|
1092
|
+
</optional>
|
1093
|
+
<oneOrMore>
|
1094
|
+
<ref name="option"/>
|
1095
|
+
</oneOrMore>
|
1096
|
+
</element>
|
1097
|
+
</define>
|
1098
|
+
<define name="option">
|
1099
|
+
<element name="option">
|
1100
|
+
<optional>
|
1101
|
+
<attribute name="disabled">
|
1102
|
+
<data type="boolean"/>
|
1103
|
+
</attribute>
|
1104
|
+
</optional>
|
1105
|
+
<optional>
|
1106
|
+
<attribute name="value"/>
|
1107
|
+
</optional>
|
1108
|
+
<zeroOrMore>
|
1109
|
+
<ref name="PureTextElement"/>
|
1110
|
+
</zeroOrMore>
|
1111
|
+
</element>
|
1112
|
+
</define>
|
1113
|
+
<define name="textarea">
|
1114
|
+
<element name="textarea">
|
1115
|
+
<optional>
|
1116
|
+
<attribute name="name"/>
|
1117
|
+
</optional>
|
1118
|
+
<optional>
|
1119
|
+
<attribute name="value"/>
|
1120
|
+
</optional>
|
1121
|
+
<optional>
|
1122
|
+
<attribute name="id">
|
1123
|
+
<data type="ID"/>
|
1124
|
+
</attribute>
|
1125
|
+
</optional>
|
1126
|
+
<optional>
|
1127
|
+
<attribute name="rows">
|
1128
|
+
<data type="int"/>
|
1129
|
+
</attribute>
|
1130
|
+
</optional>
|
1131
|
+
<optional>
|
1132
|
+
<attribute name="cols">
|
1133
|
+
<data type="int"/>
|
1134
|
+
</attribute>
|
1135
|
+
</optional>
|
1136
|
+
</element>
|
1137
|
+
</define>
|
948
1138
|
<define name="bibliography">
|
949
1139
|
<element name="bibliography">
|
950
1140
|
<oneOrMore>
|
@@ -1017,9 +1207,7 @@
|
|
1017
1207
|
</define>
|
1018
1208
|
<define name="IsoWorkgroup">
|
1019
1209
|
<optional>
|
1020
|
-
<attribute name="number"
|
1021
|
-
<data type="int"/>
|
1022
|
-
</attribute>
|
1210
|
+
<attribute name="number"/>
|
1023
1211
|
</optional>
|
1024
1212
|
<optional>
|
1025
1213
|
<attribute name="type"/>
|
@@ -38,6 +38,9 @@
|
|
38
38
|
</define>
|
39
39
|
<define name="BibDataExtensionType">
|
40
40
|
<ref name="doctype"/>
|
41
|
+
<optional>
|
42
|
+
<ref name="docsubtype"/>
|
43
|
+
</optional>
|
41
44
|
<optional>
|
42
45
|
<ref name="horizontal"/>
|
43
46
|
</optional>
|
@@ -256,6 +259,15 @@
|
|
256
259
|
<value>guide</value>
|
257
260
|
<value>amendment</value>
|
258
261
|
<value>technical-corrigendum</value>
|
262
|
+
<value>directive</value>
|
263
|
+
</choice>
|
264
|
+
</define>
|
265
|
+
<define name="DocumentSubtype">
|
266
|
+
<choice>
|
267
|
+
<value>specification</value>
|
268
|
+
<value>method-of-test</value>
|
269
|
+
<value>vocabulary</value>
|
270
|
+
<value>code-of-practice</value>
|
259
271
|
</choice>
|
260
272
|
</define>
|
261
273
|
<define name="structuredidentifier">
|
@@ -105,10 +105,10 @@ module Asciidoctor
|
|
105
105
|
# Rules for Structure 20.4
|
106
106
|
def annex_ordering_validate(root)
|
107
107
|
ids = citation_order(root.xpath("//annex"))
|
108
|
-
cite_order = ids.keys.
|
108
|
+
cite_order = ids.keys.sort_by { |a| ids[a] || 999999 }
|
109
109
|
annex_order = root.xpath("//annex").map { |x| x["id"] }
|
110
110
|
cite_order.each_with_index do |a, i|
|
111
|
-
next if annex_order[i] == a
|
111
|
+
next if annex_order[i] == a || ids[a].nil?
|
112
112
|
|
113
113
|
annex = root.at("//annex[@id = '#{a}']")
|
114
114
|
title = annex&.at("./title")&.text || "Annex #{a}"
|
@@ -134,10 +134,9 @@ module Asciidoctor
|
|
134
134
|
/^9.$/.match?(status) and
|
135
135
|
@log.add("Style", b,
|
136
136
|
"Do not cite withdrawn standards as normative: #{b.text}")
|
137
|
-
/^[0-5].$/.match?(status) and
|
138
|
-
"Style", b,
|
139
|
-
|
140
|
-
)
|
137
|
+
/^[0-5].$/.match?(status) and
|
138
|
+
@log.add("Style", b, "Do not cite unpublished standards "\
|
139
|
+
"as normative: #{b.text}")
|
141
140
|
end
|
142
141
|
end
|
143
142
|
|
@@ -25,13 +25,13 @@ module Asciidoctor
|
|
25
25
|
prec&.name == "p" or
|
26
26
|
style_warning(list, "All lists must be preceded by "\
|
27
27
|
"introductory phrase", nil)
|
28
|
-
list_punctuation1(list, prec
|
28
|
+
list_punctuation1(list, prec&.text)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
def list_punctuation1(list, prectext)
|
33
33
|
entries = list.xpath(".//li")
|
34
|
-
case prectext
|
34
|
+
case prectext&.sub(/^.*?(\S)\s*$/, "\\1")
|
35
35
|
when ":"
|
36
36
|
list.xpath(".//li").each_with_index do |li, i|
|
37
37
|
list_semicolon_phrase(li, i == entries.size - 1)
|