metanorma-iso 1.10.0 → 1.10.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ubuntu.yml +41 -0
  3. data/Gemfile +3 -4
  4. data/Makefile +44 -0
  5. data/Rakefile +1 -1
  6. data/bin/rspec +1 -2
  7. data/lib/asciidoctor/iso/base.rb +1 -1
  8. data/lib/asciidoctor/iso/cleanup.rb +7 -6
  9. data/lib/asciidoctor/iso/front.rb +2 -2
  10. data/lib/asciidoctor/iso/isodoc.rng +68 -18
  11. data/lib/asciidoctor/iso/isostandard.rng +14 -0
  12. data/lib/asciidoctor/iso/section.rb +1 -1
  13. data/lib/asciidoctor/iso/validate.rb +1 -1
  14. data/lib/asciidoctor/iso/validate_section.rb +1 -1
  15. data/lib/isodoc/iso/html/isodoc.css +0 -1
  16. data/lib/isodoc/iso/html/isodoc.scss +0 -1
  17. data/lib/isodoc/iso/html/style-human.css +21 -1
  18. data/lib/isodoc/iso/html/style-human.scss +26 -1
  19. data/lib/isodoc/iso/html/style-iso.css +21 -1
  20. data/lib/isodoc/iso/html/style-iso.scss +26 -1
  21. data/lib/isodoc/iso/html_convert.rb +81 -22
  22. data/lib/isodoc/iso/i18n.rb +10 -9
  23. data/lib/isodoc/iso/iso.amendment.xsl +304 -118
  24. data/lib/isodoc/iso/iso.international-standard.xsl +304 -118
  25. data/lib/isodoc/iso/isosts_convert.rb +6 -2
  26. data/lib/isodoc/iso/presentation_xml_convert.rb +19 -9
  27. data/lib/isodoc/iso/sections.rb +2 -0
  28. data/lib/isodoc/iso/sts_convert.rb +5 -2
  29. data/lib/isodoc/iso/word_cleanup.rb +94 -0
  30. data/lib/isodoc/iso/word_convert.rb +12 -91
  31. data/lib/metanorma/iso/processor.rb +2 -2
  32. data/lib/metanorma/iso/version.rb +1 -1
  33. data/metanorma-iso.gemspec +3 -3
  34. data/spec/asciidoctor/base_spec.rb +543 -209
  35. data/spec/asciidoctor/blocks_spec.rb +4 -43
  36. data/spec/asciidoctor/cleanup_spec.rb +15 -12
  37. data/spec/asciidoctor/refs_spec.rb +174 -88
  38. data/spec/isodoc/i18n_spec.rb +32 -18
  39. data/spec/isodoc/inline_spec.rb +4 -4
  40. data/spec/isodoc/postproc_spec.rb +111 -28
  41. data/spec/isodoc/section_spec.rb +3 -3
  42. data/spec/isodoc/table_spec.rb +6 -8
  43. data/spec/isodoc/terms_spec.rb +30 -37
  44. data/spec/isodoc/xref_spec.rb +3 -3
  45. data/spec/metanorma/processor_spec.rb +110 -14
  46. data/spec/vcr_cassettes/docrels.yml +783 -0
  47. data/spec/vcr_cassettes/sortrefs.yml +599 -0
  48. metadata +12 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80f036674b2fadf0f45d564dee4050674cf69babf4d88c6ee84986e82ed8a5ce
4
- data.tar.gz: 491de6c6a6b92a4ce05212833f6acd5e2de4094973e4f8e3c44e2981ca983fce
3
+ metadata.gz: abbf367b7ec988ab0de353fe50309648657bc86b3d7a1495c4ac6722b4653b5b
4
+ data.tar.gz: 365546239553eb27bb0dcdc1e4920234922b93dcb235027f42f7f1a682f3fd18
5
5
  SHA512:
6
- metadata.gz: d08a1c0909b6c0c0fafa0748132851eea415c110d6ce6bac821364df0a5c257adf30d3a86649ee2ed9d92a8dec6f1986fccfa39414aaf1a376f1a9e057ea6659
7
- data.tar.gz: 21fda2fe4ceec7d933d3f960dc19b4a2758e4e8cf4aa713e65da4e66d1447d55b34e08fe150dea6abd4d0c2c5e18d1d4acd961fc5200d3c632167278fe62348f
6
+ metadata.gz: bbbdb1ad0d1b86c34f437af1ad664c2c6d19d706a28fa01a25cb5b677d1fddaec5d2eec0fdc4eb5846e5254777b3ea0d868ae31ee5c9e59c58f40f67bd17b339
7
+ data.tar.gz: eb62b3b9ab796aba24059a9c45c8432a7fc5a7ee0a3b30c6893fda63bbce62452270ee13f93c66d3f16b054dd9cf92887cca868a849f42c248b5f8c37efbfdfa
@@ -0,0 +1,41 @@
1
+ name: ubuntu
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+
15
+ - name: Setup prerequisites
16
+ run: |
17
+ sudo apt-get update
18
+ sudo apt-get -y install xsltproc
19
+
20
+ - run: make xsd_doc
21
+ env:
22
+ GITHUB_USERNAME: ${{ github.actor }}
23
+ GITHUB_TOKEN: ${{ github.token }}
24
+
25
+ - uses: actions/upload-artifact@master
26
+ with:
27
+ name: xsd_doc
28
+ path: xsd_doc
29
+
30
+ deploy-gh-pages:
31
+ if: github.ref == 'refs/heads/main'
32
+ runs-on: ubuntu-latest
33
+ needs: build
34
+ steps:
35
+ - uses: actions/checkout@master
36
+
37
+ - uses: actions/download-artifact@master
38
+ with:
39
+ name: xsd_doc-ubuntu
40
+ path: xsd_doc
41
+
data/Gemfile CHANGED
@@ -4,11 +4,10 @@ Encoding.default_internal = Encoding::UTF_8
4
4
  source "https://rubygems.org"
5
5
  git_source(:github) { |repo| "https://github.com/#{repo}" }
6
6
 
7
- #gem "asciimath", git: "https://github.com/asciidoctor/asciimath"
7
+ gem "relaton", git: "https://github.com/relaton/relaton"
8
8
 
9
9
  gemspec
10
10
 
11
- if File.exist? 'Gemfile.devel'
12
- eval File.read('Gemfile.devel'), nil, 'Gemfile.devel' # rubocop:disable Security/Eval
11
+ if File.exist? "Gemfile.devel"
12
+ eval File.read("Gemfile.devel"), nil, "Gemfile.devel" # rubocop:disable Security/Eval
13
13
  end
14
-
data/Makefile CHANGED
@@ -8,6 +8,15 @@ SHELL := /bin/bash
8
8
  # Ensure the xml2rfc cache directory exists locally
9
9
  IGNORE := $(shell mkdir -p $(HOME)/.cache/xml2rfc)
10
10
 
11
+ TRANG_RELEASE := https://github.com/relaxng/jing-trang/releases/download/V20181222/trang-20181222.zip
12
+ TOOLS_DIR := ${CURDIR}/tools
13
+ TRANG_JAR := $(TOOLS_DIR)/trang.jar
14
+ XSDVIPATH := $(TOOLS_DIR)/xsdvi.jar
15
+ XSLT_FILE := $(TOOLS_DIR)/xs3pxsl
16
+ XSLT_FILE_MERGE := $(TOOLS_DIR)/xsdmerge.xsl
17
+ RNG_FILE_SRC := lib/asciidoctor/iso/isostandard.rng
18
+ XSD_FILE_DEST := ${CURDIR}/xsd_doc/isostandard.xsd
19
+
11
20
  all: $(TXT) $(HTML) $(XML) $(NITS)
12
21
 
13
22
  clean:
@@ -37,3 +46,38 @@ clean:
37
46
  open:
38
47
  open *.txt
39
48
 
49
+
50
+ $(XSDVIPATH):
51
+ mkdir -p $(dir $@); \
52
+ curl -sSL https://sourceforge.net/projects/xsdvi/files/latest/download > $(dir $@)/xsdvi.zip; \
53
+ unzip -p $(dir $@)/xsdvi.zip dist/lib/xercesImpl.jar > $(dir $@)/xercesImpl.jar; \
54
+ curl -sSL https://github.com/metanorma/xsdvi/releases/download/v1.0/xsdvi-1.0.jar > $@
55
+
56
+ $(XSLT_FILE):
57
+ mkdir -p $(dir $@)
58
+ curl -sSL https://raw.githubusercontent.com/metanorma/xs3p/main/xsl/xs3p.xsl > $@
59
+
60
+ $(XSLT_FILE_MERGE):
61
+ mkdir -p $(dir $@)
62
+ curl -sSL https://raw.githubusercontent.com/metanorma/xs3p/main/xsl/xsdmerge.xsl > $@
63
+
64
+ $(TRANG_JAR):
65
+ mkdir -p $(dir $@); \
66
+ cd $(dir $@); \
67
+ curl -sSL $(TRANG_RELEASE) > trang.zip; \
68
+ unzip -p trang.zip trang-20181222/trang.jar > $@
69
+
70
+
71
+ $(XSD_FILE_DEST): $(TRANG_JAR)
72
+ mkdir -p $(dir $@); \
73
+ java -jar $< $(RNG_FILE_SRC) $@
74
+
75
+ xsd_doc: $(XSD_FILE_DEST) $(XSDVIPATH) $(XSLT_FILE) $(XSLT_FILE_MERGE)
76
+ mkdir -p $@/diagrams; \
77
+ cd $@; \
78
+ java -jar $(XSDVIPATH) $< -rootNodeName all -oneNodeOnly -outputPath diagrams; \
79
+ xsltproc --nonet --stringparam rootxsd iso-standard --output $@.tmp $(XSLT_FILE_MERGE) $<;\
80
+ xsltproc --nonet --param title "'Metanorma XML Schema Documentation, ISO Standard'" \
81
+ --output index.html $(XSLT_FILE) $@.tmp;\
82
+ rm $@.tmp
83
+
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
- require 'isodoc/gem_tasks'
3
+ require "isodoc/gem_tasks"
4
4
 
5
5
  IsoDoc::GemTasks.install
6
6
  RSpec::Core::RakeTask.new(:spec)
data/bin/rspec CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
-
2
+
3
3
  # This file was generated by Bundler.
4
4
  #
5
5
  # The application 'rspec' is installed as part of a gem, and
@@ -15,4 +15,3 @@ require "rubygems"
15
15
  require "bundler/setup"
16
16
 
17
17
  load Gem.bin_path("rspec-core", "rspec")
18
-
@@ -28,7 +28,7 @@ module Asciidoctor
28
28
  def pdf_converter(node)
29
29
  return nil if node.attr("no-pdf")
30
30
 
31
- IsoDoc::Iso::PdfConvert.new(doc_extract_attributes(node))
31
+ IsoDoc::Iso::PdfConvert.new(pdf_extract_attributes(node))
32
32
  end
33
33
 
34
34
  def sts_converter(node)
@@ -8,7 +8,7 @@ module Asciidoctor
8
8
  module ISO
9
9
  class Converter < Standoc::Converter
10
10
  PRE_NORMREF_FOOTNOTES = "//preface//fn | "\
11
- "//clause[@type = 'scope']//fn".freeze
11
+ "//clause[@type = 'scope']//fn".freeze
12
12
 
13
13
  NORMREF_FOOTNOTES =
14
14
  "//references[@normative = 'true']//fn".freeze
@@ -41,7 +41,7 @@ module Asciidoctor
41
41
  xmldoc.xpath("//bibdata/contributor[role/@type = 'publisher']"\
42
42
  "/organization").each do |x|
43
43
  x1 = x.at("abbreviation")&.text || x.at("name")&.text
44
- x1 == "ISO" and prefix.unshift("ISO") or prefix << x1
44
+ (x1 == "ISO" and prefix.unshift("ISO")) or prefix << x1
45
45
  end
46
46
  prefix
47
47
  end
@@ -64,14 +64,15 @@ module Asciidoctor
64
64
  super
65
65
  end
66
66
 
67
- TERM_CLAUSE = "//sections//terms | "\
67
+ TERM_CLAUSE =
68
+ "//sections//terms | "\
68
69
  "//sections//clause[descendant::terms][not(descendant::definitions)]"
69
- .freeze
70
+ .freeze
70
71
 
71
72
  PUBLISHER = "./contributor[role/@type = 'publisher']/organization".freeze
72
73
 
73
74
  OTHERIDS = "@type = 'DOI' or @type = 'metanorma' or @type = 'ISSN' or "\
74
- "@type = 'ISBN'".freeze
75
+ "@type = 'ISBN'".freeze
75
76
 
76
77
  def pub_class(bib)
77
78
  return 1 if bib.at("#{PUBLISHER}[abbreviation = 'ISO']")
@@ -111,7 +112,7 @@ module Asciidoctor
111
112
  bib&.at("./title")&.text || bib&.at("./formattedref")&.text
112
113
  "#{pubclass} :: #{type} :: "\
113
114
  "#{num.nil? ? abbrid : sprintf('%09d', num.to_i)} :: "\
114
- "#{partid} :: #{id&.text} :: #{title}"
115
+ "#{sprintf('%09d', partid.to_i)} :: #{id&.text} :: #{title}"
115
116
  end
116
117
 
117
118
  def sections_cleanup(xml)
@@ -18,8 +18,8 @@ module Asciidoctor
18
18
  xml.updates_document_type a
19
19
  end
20
20
 
21
- def metadata_doctype(node, xml)
22
- xml.doctype doctype(node)
21
+ def metadata_subdoctype(node, xml)
22
+ super
23
23
  a = node.attr("horizontal") and xml.horizontal a
24
24
  end
25
25
 
@@ -58,7 +58,7 @@
58
58
  <attribute name="alt"/>
59
59
  </optional>
60
60
  <optional>
61
- <attribute name="updatetype">
61
+ <attribute name="update-type">
62
62
  <data type="boolean"/>
63
63
  </attribute>
64
64
  </optional>
@@ -1796,6 +1796,20 @@
1796
1796
  <data type="ID"/>
1797
1797
  </attribute>
1798
1798
  </optional>
1799
+ <optional>
1800
+ <attribute name="language"/>
1801
+ </optional>
1802
+ <optional>
1803
+ <attribute name="script"/>
1804
+ </optional>
1805
+ <optional>
1806
+ <attribute name="tag"/>
1807
+ </optional>
1808
+ <optional>
1809
+ <attribute name="multilingual-rendering">
1810
+ <ref name="MultilingualRenderingType"/>
1811
+ </attribute>
1812
+ </optional>
1799
1813
  <oneOrMore>
1800
1814
  <ref name="preferred"/>
1801
1815
  </oneOrMore>
@@ -1814,9 +1828,6 @@
1814
1828
  <optional>
1815
1829
  <ref name="termsubject"/>
1816
1830
  </optional>
1817
- <optional>
1818
- <ref name="termusage"/>
1819
- </optional>
1820
1831
  <oneOrMore>
1821
1832
  <ref name="termdefinition"/>
1822
1833
  </oneOrMore>
@@ -1880,17 +1891,37 @@
1880
1891
  </attribute>
1881
1892
  </optional>
1882
1893
  <optional>
1883
- <attribute name="geographicArea"/>
1894
+ <attribute name="geographic-area"/>
1884
1895
  </optional>
1885
1896
  <choice>
1886
1897
  <ref name="expression_designation"/>
1887
1898
  <ref name="letter_symbol_designation"/>
1888
1899
  <ref name="graphical_symbol_designation"/>
1889
1900
  </choice>
1901
+ <optional>
1902
+ <ref name="fieldofapplication"/>
1903
+ </optional>
1904
+ <optional>
1905
+ <ref name="usageinfo"/>
1906
+ </optional>
1890
1907
  <zeroOrMore>
1891
1908
  <ref name="termsource"/>
1892
1909
  </zeroOrMore>
1893
1910
  </define>
1911
+ <define name="fieldofapplication">
1912
+ <element name="field-of-application">
1913
+ <oneOrMore>
1914
+ <ref name="PureTextElement"/>
1915
+ </oneOrMore>
1916
+ </element>
1917
+ </define>
1918
+ <define name="usageinfo">
1919
+ <element name="usage-info">
1920
+ <oneOrMore>
1921
+ <ref name="PureTextElement"/>
1922
+ </oneOrMore>
1923
+ </element>
1924
+ </define>
1894
1925
  <define name="letter_symbol_designation">
1895
1926
  <element name="letter-symbol">
1896
1927
  <optional>
@@ -1946,7 +1977,7 @@
1946
1977
  </zeroOrMore>
1947
1978
  </element>
1948
1979
  <optional>
1949
- <element name="abbreviationType">
1980
+ <element name="abbreviation-type">
1950
1981
  <ref name="AbbreviationType"/>
1951
1982
  </element>
1952
1983
  </optional>
@@ -1956,7 +1987,7 @@
1956
1987
  </element>
1957
1988
  </optional>
1958
1989
  <optional>
1959
- <element name="grammarInfo">
1990
+ <element name="grammar-info">
1960
1991
  <ref name="Grammar"/>
1961
1992
  </element>
1962
1993
  </optional>
@@ -1983,6 +2014,11 @@
1983
2014
  <ref name="GrammarGender"/>
1984
2015
  </element>
1985
2016
  </zeroOrMore>
2017
+ <zeroOrMore>
2018
+ <element name="number">
2019
+ <ref name="GrammarNumber"/>
2020
+ </element>
2021
+ </zeroOrMore>
1986
2022
  <optional>
1987
2023
  <element name="isPreposition">
1988
2024
  <data type="boolean"/>
@@ -2014,7 +2050,7 @@
2014
2050
  </element>
2015
2051
  </optional>
2016
2052
  <zeroOrMore>
2017
- <element name="grammarvalue">
2053
+ <element name="grammar-value">
2018
2054
  <text/>
2019
2055
  </element>
2020
2056
  </zeroOrMore>
@@ -2027,6 +2063,13 @@
2027
2063
  <value>common</value>
2028
2064
  </choice>
2029
2065
  </define>
2066
+ <define name="GrammarNumber">
2067
+ <choice>
2068
+ <value>singular</value>
2069
+ <value>dual</value>
2070
+ <value>plural</value>
2071
+ </choice>
2072
+ </define>
2030
2073
  <define name="termdomain">
2031
2074
  <element name="domain">
2032
2075
  <oneOrMore>
@@ -2041,13 +2084,6 @@
2041
2084
  </oneOrMore>
2042
2085
  </element>
2043
2086
  </define>
2044
- <define name="termusage">
2045
- <element name="usageinfo">
2046
- <oneOrMore>
2047
- <ref name="BasicBlock"/>
2048
- </oneOrMore>
2049
- </element>
2050
- </define>
2051
2087
  <define name="termdefinition">
2052
2088
  <element name="definition">
2053
2089
  <choice>
@@ -2061,9 +2097,17 @@
2061
2097
  </element>
2062
2098
  </define>
2063
2099
  <define name="verbaldefinition">
2064
- <element name="verbaldefinition">
2100
+ <element name="verbal-definition">
2065
2101
  <oneOrMore>
2066
- <ref name="paragraph"/>
2102
+ <choice>
2103
+ <ref name="paragraph"/>
2104
+ <ref name="dl"/>
2105
+ <ref name="ol"/>
2106
+ <ref name="ul"/>
2107
+ <ref name="table"/>
2108
+ <ref name="figure"/>
2109
+ <ref name="formula"/>
2110
+ </choice>
2067
2111
  </oneOrMore>
2068
2112
  <zeroOrMore>
2069
2113
  <ref name="termsource"/>
@@ -2071,7 +2115,7 @@
2071
2115
  </element>
2072
2116
  </define>
2073
2117
  <define name="nonverbalrep">
2074
- <element name="nonverbalrepresentation">
2118
+ <element name="non-verbal-representation">
2075
2119
  <oneOrMore>
2076
2120
  <choice>
2077
2121
  <ref name="table"/>
@@ -2163,6 +2207,12 @@
2163
2207
  <value>modified</value>
2164
2208
  </choice>
2165
2209
  </attribute>
2210
+ <attribute name="type">
2211
+ <choice>
2212
+ <value>authoritative</value>
2213
+ <value>lineage</value>
2214
+ </choice>
2215
+ </attribute>
2166
2216
  <ref name="origin"/>
2167
2217
  <optional>
2168
2218
  <ref name="modification"/>
@@ -159,6 +159,20 @@
159
159
  <data type="ID"/>
160
160
  </attribute>
161
161
  </optional>
162
+ <optional>
163
+ <attribute name="language"/>
164
+ </optional>
165
+ <optional>
166
+ <attribute name="script"/>
167
+ </optional>
168
+ <optional>
169
+ <attribute name="tag"/>
170
+ </optional>
171
+ <optional>
172
+ <attribute name="multilingual-rendering">
173
+ <ref name="MultilingualRenderingType"/>
174
+ </attribute>
175
+ </optional>
162
176
  <ref name="preferred"/>
163
177
  <zeroOrMore>
164
178
  <ref name="admitted"/>
@@ -1,5 +1,5 @@
1
1
  require "htmlentities"
2
- require "uri"
2
+ require "uri" if /^2\./.match?(RUBY_VERSION)
3
3
 
4
4
  module Asciidoctor
5
5
  module ISO
@@ -78,7 +78,7 @@ module Asciidoctor
78
78
  # ISO/IEC DIR 2, 16.5.6
79
79
  def termdef_style(xmldoc)
80
80
  xmldoc.xpath("//term").each do |t|
81
- para = t.at("./definition/verbaldefinition") || return
81
+ para = t.at("./definition/verbal-definition") || return
82
82
  term = t.at("./preferred//name").text
83
83
  termdef_warn(para.text, /\A(the|a)\b/i, t, term,
84
84
  "term definition starts with article")
@@ -216,7 +216,7 @@ module Asciidoctor
216
216
 
217
217
  def asset_style(root)
218
218
  root.xpath("//example | //termexample").each { |e| example_style(e) }
219
- root.xpath("//definition/verbaldefinition").each { |e| definition_style(e) }
219
+ root.xpath("//definition/verbal-definition").each { |e| definition_style(e) }
220
220
  root.xpath("//note").each { |e| note_style(e) }
221
221
  root.xpath("//fn").each { |e| footnote_style(e) }
222
222
  root.xpath(ASSETS_TO_STYLE).each { |e| style(e, extract_text(e)) }
@@ -689,7 +689,6 @@ p.Terms, li.Terms, div.Terms {
689
689
  mso-fareast-font-family: "SimHei",serif;
690
690
  mso-bidi-font-family: {{headerfont}};
691
691
  mso-ansi-language: EN-GB;
692
- font-weight: bold;
693
692
  mso-bidi-font-weight: normal; }
694
693
 
695
694
  p.AltTerms, li.AltTerms, div.AltTerms {
@@ -658,7 +658,6 @@ p.Terms, li.Terms, div.Terms
658
658
  mso-fareast-font-family:"SimHei",serif;
659
659
  mso-bidi-font-family:$headerfont;
660
660
  mso-ansi-language:EN-GB;
661
- font-weight:bold;
662
661
  mso-bidi-font-weight:normal;}
663
662
  p.AltTerms, li.AltTerms, div.AltTerms
664
663
  {mso-style-name:"AltTerm\(s\)";
@@ -429,7 +429,6 @@ p.AltTerms {
429
429
  margin-left: 2em; }
430
430
 
431
431
  p.Terms {
432
- font-weight: bold;
433
432
  margin-top: 0em; }
434
433
 
435
434
  /* Navigation*/
@@ -977,3 +976,24 @@ span.keyword {
977
976
  .Admonition p,
978
977
  .admonition p {
979
978
  margin: 0; }
979
+
980
+ /* Collapse TOC */
981
+ .collapse-group {
982
+ display: flex;
983
+ align-items: center;
984
+ position: relative; }
985
+
986
+ .collapse-button {
987
+ position: absolute;
988
+ right: 0;
989
+ display: inline-block;
990
+ height: 20px;
991
+ width: 20px;
992
+ cursor: pointer;
993
+ background-image: url('data:image/svg+xml,<svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="rgba(0,0,0,.54)" d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></path></svg>'); }
994
+
995
+ .collapse {
996
+ display: none; }
997
+
998
+ .expand {
999
+ transform: rotateZ(-180deg); }
@@ -252,7 +252,6 @@ p.AltTerms {
252
252
  }
253
253
 
254
254
  p.Terms {
255
- font-weight: bold;
256
255
  margin-top: 0em;
257
256
  }
258
257
 
@@ -693,3 +692,29 @@ span.keyword {
693
692
  .admonition p {
694
693
  margin: 0;
695
694
  }
695
+
696
+ /* Collapse TOC */
697
+
698
+ .collapse-group {
699
+ display: flex;
700
+ align-items: center;
701
+ position: relative;
702
+ }
703
+
704
+ .collapse-button {
705
+ position: absolute;
706
+ right: 0;
707
+ display: inline-block;
708
+ height: 20px;
709
+ width: 20px;
710
+ cursor: pointer;
711
+ background-image: url('data:image/svg+xml,<svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="rgba(0,0,0,.54)" d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></path></svg>');
712
+ }
713
+
714
+ .collapse {
715
+ display: none;
716
+ }
717
+
718
+ .expand {
719
+ transform: rotateZ(-180deg);
720
+ }
@@ -378,7 +378,6 @@ p.AltTerms {
378
378
  margin-left: 2em; }
379
379
 
380
380
  p.Terms {
381
- font-weight: bold;
382
381
  margin-top: 0em; }
383
382
 
384
383
  /* Navigation*/
@@ -1005,3 +1004,24 @@ span.keyword {
1005
1004
 
1006
1005
  .Admonition p, .admonition p {
1007
1006
  margin: 0; }
1007
+
1008
+ /* Collapse TOC */
1009
+ .collapse-group {
1010
+ display: flex;
1011
+ align-items: center;
1012
+ position: relative; }
1013
+
1014
+ .collapse-button {
1015
+ position: absolute;
1016
+ right: 0;
1017
+ display: inline-block;
1018
+ height: 20px;
1019
+ width: 20px;
1020
+ cursor: pointer;
1021
+ background-image: url('data:image/svg+xml,<svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="rgba(0,0,0,.54)" d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></path></svg>'); }
1022
+
1023
+ .collapse {
1024
+ display: none; }
1025
+
1026
+ .expand {
1027
+ transform: rotateZ(-180deg); }
@@ -193,7 +193,6 @@ p.AltTerms {
193
193
  }
194
194
 
195
195
  p.Terms {
196
- font-weight: bold;
197
196
  margin-top: 0em;
198
197
  }
199
198
 
@@ -710,3 +709,29 @@ font-weight: 600;
710
709
  .Admonition p, .admonition p {
711
710
  margin: 0;
712
711
  }
712
+
713
+ /* Collapse TOC */
714
+
715
+ .collapse-group {
716
+ display: flex;
717
+ align-items: center;
718
+ position: relative;
719
+ }
720
+
721
+ .collapse-button {
722
+ position: absolute;
723
+ right: 0;
724
+ display: inline-block;
725
+ height: 20px;
726
+ width: 20px;
727
+ cursor: pointer;
728
+ background-image: url('data:image/svg+xml,<svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="rgba(0,0,0,.54)" d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></path></svg>');
729
+ }
730
+
731
+ .collapse {
732
+ display: none;
733
+ }
734
+
735
+ .expand {
736
+ transform: rotateZ(-180deg);
737
+ }