metanorma-standoc 3.4.7 → 3.4.8

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: b1dfc55e13dc35cba30f131721a669b4d8f4373d9afea12d2a1fd19c178ab9b1
4
- data.tar.gz: b1c07c99802d3018f9205e3b68574d2e6557380d81b51f6d33fec5026da355d4
3
+ metadata.gz: 8cbc11c6b0e55ec1404d12dd309d0f711c1d4918d079375716d0b0406f6bce2f
4
+ data.tar.gz: 016b74cca05a97b06809a7e9af8d48b97b07c39e3d98fe0bd575da362f1bed57
5
5
  SHA512:
6
- metadata.gz: 501724517b1124aab3b9be9dc9eece4c4da9671e8ca13b6c4a86f52e45487772ed50b51418cc334280f183241c0d244acc4b7f63040a6b8ecf0ac5e48676e458
7
- data.tar.gz: 3b6a32f1e821f68243cc01f3833f6f8fa26f14ac5f6b686e10cf872c6f4cdd968324579540dea0ee481d06ecaa04695390a601888d72977ea1375dabb1b4b789
6
+ metadata.gz: 7510bd34addc7e4e2f6d123aa19c89dffe555f1a2f06ff572824136b2269e073721bc7ac8df2f4a94ed09180bd724dbcdb2d5f6d29dc076c71650fe6d5f3c597
7
+ data.tar.gz: d575b92f788e95d9754b9d0d2cf6af1f670d82d2f3710d82b165a6e453f8d8ec884fc407926bbf1f86594c61f2992ee3728e9fc3455e0eeb459a2dd4b1f5bcb1
data/.rubocop.yml CHANGED
@@ -3,8 +3,20 @@
3
3
  inherit_from:
4
4
  - https://raw.githubusercontent.com/riboseinc/oss-guides/main/ci/rubocop.yml
5
5
 
6
+ # Rubocop plugins enabled centrally so every metanorma-org gem picks them up
7
+ # on cimas sync — best practice belongs at the shared-template layer, not
8
+ # per-repo. Per ronaldtse feedback on metanorma/ci#332.
9
+ plugins:
10
+ - rubocop-rspec
11
+ - rubocop-performance
12
+ - rubocop-rake
13
+
6
14
  # local repo-specific modifications
7
15
  # ...
8
16
 
9
17
  AllCops:
10
- TargetRubyVersion: 3.4
18
+ # 3.3 matches the org-wide minimum being pushed via #274 (Raise minimum
19
+ # Ruby version to 3.3 due to EOL of 3.2 on 2026-03-31). Was 3.4 before
20
+ # this commit — 3.4 was above the org's stated minimum and would have
21
+ # applied Rubocop rules that fail-close on gems still targeting 3.3.
22
+ TargetRubyVersion: 3.3
@@ -116,6 +116,7 @@ module Metanorma
116
116
  .merge(align: node.attr("align"),
117
117
  variant_title: node.role == "variant-title" ? true : nil,
118
118
  key: node.option?("key") ? "true" : nil,
119
+ class: node.attr("class"),
119
120
  type: node.attr("type"))))
120
121
  end
121
122
 
@@ -134,7 +135,7 @@ module Metanorma
134
135
 
135
136
  def quote_attrs(node)
136
137
  attr_code(id_attr(node).merge(keep_attrs(node))
137
- .merge(align: node.attr("align")))
138
+ .merge(align: node.attr("align"), class: node.attr("class")))
138
139
  end
139
140
 
140
141
  def quote_attribution(node, out)
@@ -164,6 +165,7 @@ module Metanorma
164
165
  linenums: linenums ? "true" : nil,
165
166
  unnumbered: node.option?("unnumbered") ? "true" : nil,
166
167
  number: node.attr("number"),
168
+ class: node.attr("class"),
167
169
  filename: node.attr("filename"))))
168
170
  end
169
171
 
@@ -41,7 +41,8 @@ module Metanorma
41
41
  def pseudocode_example(node)
42
42
  node.blocks.each { |b| b.remove_sub(:replacements) }
43
43
  noko do |xml|
44
- xml.figure **example_attrs(node).merge(class: "pseudocode") do |ex|
44
+ klass = (["pseudocode"] + (node.attr("class")&.split || [])).uniq
45
+ xml.figure **example_attrs(node).merge(class: klass.join(" ")) do |ex|
45
46
  block_title(node, ex)
46
47
  wrap_in_para(node, ex)
47
48
  end
@@ -50,7 +51,8 @@ module Metanorma
50
51
 
51
52
  def example_attrs(node)
52
53
  attr_code(id_unnum_attrs(node).merge(keep_attrs(node))
53
- .merge(collapsible: node.option?("collapsible") ? "true" : nil))
54
+ .merge(collapsible: node.option?("collapsible") ? "true" : nil,
55
+ class: node.attr("class")))
54
56
  end
55
57
 
56
58
  def example_proper(node)
@@ -12,7 +12,7 @@ module Metanorma
12
12
 
13
13
  def note_attrs(node)
14
14
  attr_code(termnote_attrs(node).merge(admonition_core_attrs(node)
15
- .merge(type: node.attr("type"))))
15
+ .merge(type: node.attr("type"), class: node.attr("class"))))
16
16
  end
17
17
 
18
18
  def sidebar(node)
@@ -86,7 +86,7 @@ module Metanorma
86
86
  def admonition_attrs(node)
87
87
  attr_code(keep_attrs(node).merge(id_attr(node)
88
88
  .merge(admonition_core_attrs(node)
89
- .merge(type: admonition_name(node)))))
89
+ .merge(type: admonition_name(node), class: node.attr("class")))))
90
90
  end
91
91
 
92
92
  def admonition_core_attrs(node)
@@ -40,11 +40,16 @@ module Metanorma
40
40
  preprocessor Metanorma::Standoc::EmbedIncludeProcessor
41
41
  preprocessor Metanorma::Standoc::LinkProtectPreprocessor
42
42
  preprocessor Metanorma::Standoc::PassProtectPreprocessor
43
- preprocessor Metanorma::Standoc::MonospaceProtectPreprocessor
44
43
  preprocessor Metanorma::Plugin::Lutaml::Json2TextPreprocessor
45
44
  preprocessor Metanorma::Plugin::Lutaml::Yaml2TextPreprocessor
46
45
  preprocessor Metanorma::Plugin::Lutaml::Data2TextPreprocessor
47
46
  preprocessor Metanorma::Plugin::Lutaml::LutamlXmiUmlPreprocessor
47
+ # MonospaceProtect must run AFTER the content-injecting preprocessors
48
+ # (json2text/yaml2text/data2text, XMI) so that monospace in their
49
+ # injected content is protected from Asciidoctor character
50
+ # substitution too, consistently with hand-authored adoc.
51
+ # metanorma/iso-10303#208
52
+ preprocessor Metanorma::Standoc::MonospaceProtectPreprocessor
48
53
  preprocessor Metanorma::Plugin::Glossarist::DatasetPreprocessor
49
54
  preprocessor Metanorma::Standoc::NamedEscapePreprocessor
50
55
  inline_macro Metanorma::Standoc::PreferredTermInlineMacro
@@ -197,6 +197,15 @@ module Metanorma
197
197
  end
198
198
 
199
199
  def biblio_cutoff(node)
200
+ # An explicit :bibliography-cutoff-date: overrides the date derived from
201
+ # the document's own dates, and a sentinel (none/false/no/off) disables
202
+ # the cutoff entirely. metanorma/metanorma-standoc#941.
203
+ if (override = node.attr("bibliography-cutoff-date"))
204
+ override = override.strip
205
+ return nil if %w(none false no off).include?(override.downcase)
206
+
207
+ return complete_and_compare_dates([override])
208
+ end
200
209
  dates = %w(revdate published-date accessed-date created-date
201
210
  implemented-date confirmed-date updated-date issued-date
202
211
  circulated-date unchanged-date copyright-year)
@@ -24,6 +24,7 @@ module Metanorma
24
24
  def ul_attrs(node)
25
25
  attr_code(id_attr(node).merge(keep_attrs(node)
26
26
  .merge(display: node.attr("display"),
27
+ class: node.attr("class"),
27
28
  "display-directives": node.attr("display-directives"))))
28
29
  end
29
30
 
@@ -63,6 +64,7 @@ module Metanorma
63
64
  .merge(type: olist_style(node.style),
64
65
  start: node.attr("start"),
65
66
  display: node.attr("display"),
67
+ class: node.attr("class"),
66
68
  "display-directives": node.attr("display-directives"),
67
69
  "explicit-type": olist_style(node.attributes[1]))))
68
70
  end
@@ -9,7 +9,11 @@ module Metanorma
9
9
  plain: node.option?("plain") ? "true" : nil,
10
10
  style: node.attr("css-style"),
11
11
  summary: node.attr("summary"),
12
- width: node.attr("width"))
12
+ width: node.attr("width"),
13
+ # Custom CSS class(es) passed through to HTML output, via the
14
+ # `[class="..."]` named attribute (NOT role, which is reserved
15
+ # for block dispatch). metanorma/metanorma-pdfa#33
16
+ class: node.attr("class"))
13
17
  end
14
18
 
15
19
  def table(node)
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "3.4.7".freeze
22
+ VERSION = "3.4.8".freeze
23
23
  end
24
24
  end
@@ -1902,15 +1902,40 @@ or as the string "auto"</a:documentation>
1902
1902
  <a:documentation>Mathematically formatted text</a:documentation>
1903
1903
  <element name="stem">
1904
1904
  <ref name="StemAttributes"/>
1905
- <oneOrMore>
1906
- <choice>
1905
+ <optional>
1906
+ <text>
1907
1907
  <a:documentation>The content of the mathematically formatted text</a:documentation>
1908
- <text/>
1909
- <ref name="AnyElement"/>
1910
- </choice>
1911
- </oneOrMore>
1908
+ </text>
1909
+ </optional>
1910
+ <optional>
1911
+ <ref name="mathml"/>
1912
+ </optional>
1913
+ <optional>
1914
+ <ref name="asciimath"/>
1915
+ </optional>
1916
+ <optional>
1917
+ <ref name="latexmath"/>
1918
+ </optional>
1912
1919
  </element>
1913
1920
  </define>
1921
+ <define name="latexmath">
1922
+ <a:documentation>Encoding of LatexMath</a:documentation>
1923
+ <element name="latexmath">
1924
+ <text/>
1925
+ </element>
1926
+ </define>
1927
+ <define name="asciimath">
1928
+ <a:documentation>Encoding of AsciiMath</a:documentation>
1929
+ <element name="asciimath">
1930
+ <text/>
1931
+ </element>
1932
+ </define>
1933
+ <define name="mathml">
1934
+ <a:documentation>Encoding of MathML: the official W3C MathML 3.0 grammar (namespace
1935
+ http://www.w3.org/1998/Math/MathML), via the metanorma wrapper in
1936
+ grammars/mathml/. See grammars/mathml/README.adoc and basicdoc-models#35.</a:documentation>
1937
+ <externalRef href="metanorma-mathml.rng"/>
1938
+ </define>
1914
1939
  <define name="StemAttributes">
1915
1940
  <attribute name="type">
1916
1941
  <a:documentation>The notation used to mathematically format the text</a:documentation>
@@ -852,7 +852,7 @@ titlecase, or lowercase</a:documentation>
852
852
  <a:documentation>Width of the figure block in rendering</a:documentation>
853
853
  </attribute>
854
854
  </optional>
855
- <ref name="BlockAttributes"/>
855
+ <ref name="BlockAttributesCore"/>
856
856
  </define>
857
857
  <define name="SourceAttributes" combine="interleave">
858
858
  <ref name="BlockAttributes"/>
@@ -1283,7 +1283,11 @@ That concept may be defined as a term within the current document, or it may be
1283
1283
  <a:documentation>Class of input form</a:documentation>
1284
1284
  </attribute>
1285
1285
  </optional>
1286
- <ref name="BlockAttributes"/>
1286
+ <ref name="BlockAttributesCore">
1287
+ <a:documentation>form declares its own class above, so it uses BlockAttributesCore to
1288
+ avoid duplicating the custom-class slot in BlockAttributes. Treated like
1289
+ figure. See metanorma/metanorma-standoc#1197</a:documentation>
1290
+ </ref>
1287
1291
  <zeroOrMore>
1288
1292
  <!-- Input form contents -->
1289
1293
  <choice>
@@ -2768,7 +2772,11 @@ links within an SVG file, so that the SVG file can hyperlink to anchors within t
2768
2772
  </oneOrMore>
2769
2773
  </element>
2770
2774
  </define>
2771
- <define name="BlockAttributes">
2775
+ <define name="BlockAttributesCore">
2776
+ <a:documentation>Block attributes excluding the custom CSS class. Blocks that already carry
2777
+ their own `class` attribute (e.g. figure, via basicdoc FigureAttributes)
2778
+ include this directly, to avoid a duplicate-attribute collision with the
2779
+ `class` added in BlockAttributes. See metanorma/metanorma-standoc#1197</a:documentation>
2772
2780
  <optional>
2773
2781
  <attribute name="keep-with-next">
2774
2782
  <a:documentation>Keep this block on the same page as the following block in paged media</a:documentation>
@@ -2800,6 +2808,17 @@ to span across both columns</a:documentation>
2800
2808
  </attribute>
2801
2809
  </optional>
2802
2810
  </define>
2811
+ <define name="BlockAttributes">
2812
+ <a:documentation>Universal block attributes, including a custom CSS class (space-separated,
2813
+ appended additively to the block's built-in HTML class, HTML output only).
2814
+ See metanorma/metanorma-standoc#1197</a:documentation>
2815
+ <ref name="BlockAttributesCore"/>
2816
+ <optional>
2817
+ <attribute name="class">
2818
+ <a:documentation>Custom CSS class(es) for the block in HTML output</a:documentation>
2819
+ </attribute>
2820
+ </optional>
2821
+ </define>
2803
2822
  <define name="DisplayDirective">
2804
2823
  <a:documentation>Directive on how to render a block in Presentation XML </a:documentation>
2805
2824
  <optional>
@@ -0,0 +1,257 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ This is the Mathematical Markup Language (MathML) 3.0, an XML
4
+ application for describing mathematical notation and capturing
5
+ both its structure and content.
6
+
7
+ Copyright 1998-2014 W3C (MIT, ERCIM, Keio, Beihang)
8
+
9
+ Use and distribution of this code are permitted under the terms
10
+ W3C Software Notice and License
11
+ http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
12
+ -->
13
+ <grammar ns="http://www.w3.org/1998/Math/MathML" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
14
+ <start>
15
+ <ref name="math"/>
16
+ </start>
17
+ <define name="math">
18
+ <element name="math">
19
+ <ref name="math.attributes"/>
20
+ <zeroOrMore>
21
+ <ref name="MathExpression"/>
22
+ </zeroOrMore>
23
+ </element>
24
+ </define>
25
+ <define name="MathExpression">
26
+ <ref name="semantics"/>
27
+ </define>
28
+ <define name="NonMathMLAtt">
29
+ <attribute>
30
+ <anyName>
31
+ <except>
32
+ <nsName ns=""/>
33
+ <nsName/>
34
+ </except>
35
+ </anyName>
36
+ <data type="string"/>
37
+ </attribute>
38
+ </define>
39
+ <define name="CommonDeprecatedAtt">
40
+ <optional>
41
+ <attribute name="other"/>
42
+ </optional>
43
+ </define>
44
+ <define name="CommonAtt">
45
+ <optional>
46
+ <attribute name="id">
47
+ <data type="ID"/>
48
+ </attribute>
49
+ </optional>
50
+ <optional>
51
+ <attribute name="xref"/>
52
+ </optional>
53
+ <optional>
54
+ <attribute name="class">
55
+ <data type="NMTOKENS"/>
56
+ </attribute>
57
+ </optional>
58
+ <optional>
59
+ <attribute name="style">
60
+ <data type="string"/>
61
+ </attribute>
62
+ </optional>
63
+ <optional>
64
+ <attribute name="href">
65
+ <data type="anyURI"/>
66
+ </attribute>
67
+ </optional>
68
+ <ref name="CommonDeprecatedAtt"/>
69
+ <zeroOrMore>
70
+ <ref name="NonMathMLAtt"/>
71
+ </zeroOrMore>
72
+ </define>
73
+ <define name="math.attributes">
74
+ <ref name="CommonAtt"/>
75
+ <optional>
76
+ <attribute name="display">
77
+ <choice>
78
+ <value>block</value>
79
+ <value>inline</value>
80
+ </choice>
81
+ </attribute>
82
+ </optional>
83
+ <optional>
84
+ <attribute name="maxwidth">
85
+ <ref name="length"/>
86
+ </attribute>
87
+ </optional>
88
+ <optional>
89
+ <attribute name="overflow">
90
+ <choice>
91
+ <value>linebreak</value>
92
+ <value>scroll</value>
93
+ <value>elide</value>
94
+ <value>truncate</value>
95
+ <value>scale</value>
96
+ </choice>
97
+ </attribute>
98
+ </optional>
99
+ <optional>
100
+ <attribute name="altimg">
101
+ <data type="anyURI"/>
102
+ </attribute>
103
+ </optional>
104
+ <optional>
105
+ <attribute name="altimg-width">
106
+ <ref name="length"/>
107
+ </attribute>
108
+ </optional>
109
+ <optional>
110
+ <attribute name="altimg-height">
111
+ <ref name="length"/>
112
+ </attribute>
113
+ </optional>
114
+ <optional>
115
+ <attribute name="altimg-valign">
116
+ <choice>
117
+ <ref name="length"/>
118
+ <value>top</value>
119
+ <value>middle</value>
120
+ <value>bottom</value>
121
+ </choice>
122
+ </attribute>
123
+ </optional>
124
+ <optional>
125
+ <attribute name="alttext"/>
126
+ </optional>
127
+ <optional>
128
+ <attribute name="cdgroup">
129
+ <data type="anyURI"/>
130
+ </attribute>
131
+ </optional>
132
+ <ref name="math.deprecatedattributes"/>
133
+ </define>
134
+ <!--
135
+ the mathml3-presentation schema adds additional attributes
136
+ to the math element, all those valid on mstyle
137
+ -->
138
+ <define name="math.deprecatedattributes">
139
+ <optional>
140
+ <attribute name="mode">
141
+ <data type="string"/>
142
+ </attribute>
143
+ </optional>
144
+ <optional>
145
+ <attribute name="macros">
146
+ <data type="string"/>
147
+ </attribute>
148
+ </optional>
149
+ </define>
150
+ <define name="name">
151
+ <attribute name="name">
152
+ <data type="NCName"/>
153
+ </attribute>
154
+ </define>
155
+ <define name="cd">
156
+ <attribute name="cd">
157
+ <data type="NCName"/>
158
+ </attribute>
159
+ </define>
160
+ <define name="src">
161
+ <optional>
162
+ <attribute name="src">
163
+ <data type="anyURI"/>
164
+ </attribute>
165
+ </optional>
166
+ </define>
167
+ <define name="annotation">
168
+ <element name="annotation">
169
+ <ref name="annotation.attributes"/>
170
+ <text/>
171
+ </element>
172
+ </define>
173
+ <define name="annotation-xml.model">
174
+ <zeroOrMore>
175
+ <choice>
176
+ <ref name="MathExpression"/>
177
+ <ref name="anyElement"/>
178
+ </choice>
179
+ </zeroOrMore>
180
+ </define>
181
+ <define name="anyElement">
182
+ <element>
183
+ <anyName>
184
+ <except>
185
+ <nsName/>
186
+ </except>
187
+ </anyName>
188
+ <zeroOrMore>
189
+ <choice>
190
+ <attribute>
191
+ <anyName/>
192
+ </attribute>
193
+ <text/>
194
+ <ref name="anyElement"/>
195
+ </choice>
196
+ </zeroOrMore>
197
+ </element>
198
+ </define>
199
+ <define name="annotation-xml">
200
+ <element name="annotation-xml">
201
+ <ref name="annotation.attributes"/>
202
+ <ref name="annotation-xml.model"/>
203
+ </element>
204
+ </define>
205
+ <define name="annotation.attributes">
206
+ <ref name="CommonAtt"/>
207
+ <optional>
208
+ <ref name="cd"/>
209
+ </optional>
210
+ <optional>
211
+ <ref name="name"/>
212
+ </optional>
213
+ <ref name="DefEncAtt"/>
214
+ <optional>
215
+ <ref name="src"/>
216
+ </optional>
217
+ </define>
218
+ <define name="DefEncAtt">
219
+ <optional>
220
+ <attribute name="encoding">
221
+ <data type="string"/>
222
+ </attribute>
223
+ </optional>
224
+ <optional>
225
+ <attribute name="definitionURL">
226
+ <data type="anyURI"/>
227
+ </attribute>
228
+ </optional>
229
+ </define>
230
+ <define name="semantics">
231
+ <element name="semantics">
232
+ <ref name="semantics.attributes"/>
233
+ <ref name="MathExpression"/>
234
+ <zeroOrMore>
235
+ <choice>
236
+ <ref name="annotation"/>
237
+ <ref name="annotation-xml"/>
238
+ </choice>
239
+ </zeroOrMore>
240
+ </element>
241
+ </define>
242
+ <define name="semantics.attributes">
243
+ <ref name="CommonAtt"/>
244
+ <ref name="DefEncAtt"/>
245
+ <optional>
246
+ <ref name="cd"/>
247
+ </optional>
248
+ <optional>
249
+ <ref name="name"/>
250
+ </optional>
251
+ </define>
252
+ <define name="length">
253
+ <data type="string">
254
+ <param name="pattern">\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(e[mx]|in|cm|mm|p[xtc]|%)?)|(negative)?((very){0,2}thi(n|ck)|medium)mathspace)\s*</param>
255
+ </data>
256
+ </define>
257
+ </grammar>