metanorma-standoc 1.11.2 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +3 -31
  3. data/.gitignore +23 -0
  4. data/Gemfile +1 -0
  5. data/lib/asciidoctor/standoc/base.rb +2 -241
  6. data/lib/asciidoctor/standoc/blocks.rb +2 -238
  7. data/lib/asciidoctor/standoc/blocks_notes.rb +2 -100
  8. data/lib/asciidoctor/standoc/cleanup.rb +2 -207
  9. data/lib/asciidoctor/standoc/cleanup_amend.rb +2 -53
  10. data/lib/asciidoctor/standoc/cleanup_block.rb +2 -173
  11. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +2 -212
  12. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +2 -108
  13. data/lib/asciidoctor/standoc/cleanup_image.rb +2 -69
  14. data/lib/asciidoctor/standoc/cleanup_inline.rb +2 -179
  15. data/lib/asciidoctor/standoc/cleanup_maths.rb +2 -221
  16. data/lib/asciidoctor/standoc/cleanup_ref.rb +2 -169
  17. data/lib/asciidoctor/standoc/cleanup_ref_dl.rb +2 -103
  18. data/lib/asciidoctor/standoc/cleanup_reqt.rb +2 -110
  19. data/lib/asciidoctor/standoc/cleanup_section.rb +2 -184
  20. data/lib/asciidoctor/standoc/cleanup_section_names.rb +2 -91
  21. data/lib/asciidoctor/standoc/cleanup_symbols.rb +2 -47
  22. data/lib/asciidoctor/standoc/cleanup_table.rb +2 -67
  23. data/lib/asciidoctor/standoc/cleanup_terms.rb +2 -117
  24. data/lib/asciidoctor/standoc/cleanup_terms_designations.rb +2 -178
  25. data/lib/asciidoctor/standoc/cleanup_text.rb +2 -95
  26. data/lib/asciidoctor/standoc/cleanup_toc.rb +3 -0
  27. data/lib/asciidoctor/standoc/cleanup_xref.rb +2 -106
  28. data/lib/asciidoctor/standoc/converter.rb +2 -123
  29. data/lib/asciidoctor/standoc/datamodel/attributes_table_preprocessor.rb +2 -56
  30. data/lib/asciidoctor/standoc/datamodel/diagram_preprocessor.rb +2 -102
  31. data/lib/asciidoctor/standoc/datamodel/plantuml_renderer.rb +3 -404
  32. data/lib/asciidoctor/standoc/deprecated.rb +5 -0
  33. data/lib/asciidoctor/standoc/front.rb +2 -219
  34. data/lib/asciidoctor/standoc/front_contributor.rb +2 -191
  35. data/lib/asciidoctor/standoc/inline.rb +2 -231
  36. data/lib/asciidoctor/standoc/lists.rb +2 -119
  37. data/lib/asciidoctor/standoc/macros.rb +2 -203
  38. data/lib/asciidoctor/standoc/macros_form.rb +2 -62
  39. data/lib/asciidoctor/standoc/macros_note.rb +2 -44
  40. data/lib/asciidoctor/standoc/macros_plantuml.rb +2 -112
  41. data/lib/asciidoctor/standoc/macros_terms.rb +2 -180
  42. data/lib/asciidoctor/standoc/ref.rb +2 -251
  43. data/lib/asciidoctor/standoc/ref_sect.rb +2 -153
  44. data/lib/asciidoctor/standoc/ref_utility.rb +2 -0
  45. data/lib/asciidoctor/standoc/render.rb +3 -0
  46. data/lib/asciidoctor/standoc/reqt.rb +2 -89
  47. data/lib/asciidoctor/standoc/section.rb +2 -190
  48. data/lib/asciidoctor/standoc/table.rb +2 -84
  49. data/lib/asciidoctor/standoc/term_lookup_cleanup.rb +2 -178
  50. data/lib/asciidoctor/standoc/terms.rb +2 -153
  51. data/lib/asciidoctor/standoc/utils.rb +2 -116
  52. data/lib/asciidoctor/standoc/validate.rb +2 -157
  53. data/lib/asciidoctor/standoc/validate_section.rb +2 -54
  54. data/lib/isodoc/html/htmlstyle.css +44 -29
  55. data/lib/isodoc/html/htmlstyle.scss +17 -12
  56. data/lib/metanorma/standoc/base.rb +163 -0
  57. data/lib/{asciidoctor → metanorma}/standoc/basicdoc.rng +0 -0
  58. data/lib/{asciidoctor → metanorma}/standoc/biblio.rng +0 -0
  59. data/lib/metanorma/standoc/blocks.rb +239 -0
  60. data/lib/metanorma/standoc/blocks_notes.rb +101 -0
  61. data/lib/metanorma/standoc/cleanup.rb +157 -0
  62. data/lib/metanorma/standoc/cleanup_amend.rb +54 -0
  63. data/lib/metanorma/standoc/cleanup_block.rb +173 -0
  64. data/lib/metanorma/standoc/cleanup_boilerplate.rb +213 -0
  65. data/lib/metanorma/standoc/cleanup_footnotes.rb +109 -0
  66. data/lib/metanorma/standoc/cleanup_image.rb +70 -0
  67. data/lib/metanorma/standoc/cleanup_inline.rb +190 -0
  68. data/lib/metanorma/standoc/cleanup_maths.rb +222 -0
  69. data/lib/metanorma/standoc/cleanup_ref.rb +170 -0
  70. data/lib/metanorma/standoc/cleanup_ref_dl.rb +104 -0
  71. data/lib/metanorma/standoc/cleanup_reqt.rb +111 -0
  72. data/lib/metanorma/standoc/cleanup_section.rb +212 -0
  73. data/lib/metanorma/standoc/cleanup_section_names.rb +92 -0
  74. data/lib/metanorma/standoc/cleanup_symbols.rb +48 -0
  75. data/lib/metanorma/standoc/cleanup_table.rb +68 -0
  76. data/lib/metanorma/standoc/cleanup_terms.rb +140 -0
  77. data/lib/metanorma/standoc/cleanup_terms_designations.rb +199 -0
  78. data/lib/metanorma/standoc/cleanup_text.rb +96 -0
  79. data/lib/metanorma/standoc/cleanup_toc.rb +98 -0
  80. data/lib/metanorma/standoc/cleanup_xref.rb +107 -0
  81. data/lib/metanorma/standoc/converter.rb +125 -0
  82. data/lib/metanorma/standoc/datamodel/attributes_table_preprocessor.rb +57 -0
  83. data/lib/metanorma/standoc/datamodel/diagram_preprocessor.rb +103 -0
  84. data/lib/metanorma/standoc/datamodel/plantuml_renderer.rb +409 -0
  85. data/lib/metanorma/standoc/front.rb +224 -0
  86. data/lib/metanorma/standoc/front_contributor.rb +192 -0
  87. data/lib/metanorma/standoc/inline.rb +232 -0
  88. data/lib/{asciidoctor → metanorma}/standoc/isodoc.rng +49 -2
  89. data/lib/metanorma/standoc/lists.rb +120 -0
  90. data/lib/metanorma/standoc/macros.rb +204 -0
  91. data/lib/metanorma/standoc/macros_form.rb +63 -0
  92. data/lib/metanorma/standoc/macros_note.rb +45 -0
  93. data/lib/metanorma/standoc/macros_plantuml.rb +113 -0
  94. data/lib/metanorma/standoc/macros_terms.rb +194 -0
  95. data/lib/metanorma/standoc/ref.rb +243 -0
  96. data/lib/metanorma/standoc/ref_sect.rb +153 -0
  97. data/lib/{asciidoctor/standoc/ref_date_id.rb → metanorma/standoc/ref_utility.rb} +43 -5
  98. data/lib/metanorma/standoc/render.rb +115 -0
  99. data/lib/metanorma/standoc/reqt.rb +90 -0
  100. data/lib/{asciidoctor → metanorma}/standoc/reqt.rng +0 -0
  101. data/lib/metanorma/standoc/section.rb +209 -0
  102. data/lib/metanorma/standoc/table.rb +85 -0
  103. data/lib/metanorma/standoc/term_lookup_cleanup.rb +179 -0
  104. data/lib/metanorma/standoc/terms.rb +160 -0
  105. data/lib/metanorma/standoc/utils.rb +101 -0
  106. data/lib/metanorma/standoc/validate.rb +158 -0
  107. data/lib/metanorma/standoc/validate_section.rb +55 -0
  108. data/lib/metanorma/standoc/version.rb +1 -1
  109. data/lib/{asciidoctor → metanorma}/standoc/views/datamodel/model_representation.adoc.erb +0 -0
  110. data/lib/{asciidoctor → metanorma}/standoc/views/datamodel/plantuml_representation.adoc.erb +0 -0
  111. data/lib/metanorma-standoc.rb +1 -1
  112. data/metanorma-standoc.gemspec +2 -2
  113. data/spec/{asciidoctor → metanorma}/base_spec.rb +499 -407
  114. data/spec/{asciidoctor → metanorma}/blank_spec.rb +1 -1
  115. data/spec/{asciidoctor → metanorma}/blocks_spec.rb +34 -5
  116. data/spec/{asciidoctor → metanorma}/cleanup_blocks_spec.rb +25 -1
  117. data/spec/{asciidoctor → metanorma}/cleanup_sections_spec.rb +1 -1
  118. data/spec/{asciidoctor → metanorma}/cleanup_spec.rb +5 -5
  119. data/spec/{asciidoctor → metanorma}/cleanup_terms_spec.rb +281 -29
  120. data/spec/{asciidoctor → metanorma}/datamodel/attributes_table_preprocessor_spec.rb +1 -1
  121. data/spec/{asciidoctor → metanorma}/datamodel/diagram_preprocessor_spec.rb +1 -1
  122. data/spec/{asciidoctor → metanorma}/inline_spec.rb +170 -1
  123. data/spec/{asciidoctor → metanorma}/isobib_cache_spec.rb +1 -1
  124. data/spec/{asciidoctor → metanorma}/lists_spec.rb +1 -1
  125. data/spec/{asciidoctor → metanorma}/macros_json2text_spec.rb +0 -0
  126. data/spec/{asciidoctor → metanorma}/macros_plantuml_spec.rb +3 -3
  127. data/spec/{asciidoctor → metanorma}/macros_spec.rb +8 -6
  128. data/spec/{asciidoctor → metanorma}/macros_yaml2text_spec.rb +0 -0
  129. data/spec/metanorma/refs_dl_spec.rb +863 -0
  130. data/spec/{asciidoctor → metanorma}/refs_spec.rb +522 -15
  131. data/spec/{asciidoctor → metanorma}/section_spec.rb +88 -1
  132. data/spec/{asciidoctor → metanorma}/table_spec.rb +1 -1
  133. data/spec/{asciidoctor → metanorma}/validate_spec.rb +2 -2
  134. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +53 -53
  135. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +14 -14
  136. data/spec/vcr_cassettes/hide_refs.yml +599 -0
  137. data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
  138. data/spec/vcr_cassettes/isobib_get_123_1.yml +99 -99
  139. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +109 -109
  140. data/spec/vcr_cassettes/isobib_get_123_2001.yml +13 -13
  141. data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
  142. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
  143. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +46 -46
  144. metadata +87 -35
  145. data/spec/asciidoctor/refs_dl_spec.rb +0 -864
@@ -1,117 +1,3 @@
1
- require "date"
2
- require "nokogiri"
3
- require "htmlentities"
4
- require "json"
5
- require "pathname"
6
- require "uuidtools"
1
+ require "asciidoctor/standoc/deprecated"
2
+ require "metanorma/standoc/utils"
7
3
 
8
- module Asciidoctor
9
- module Standoc
10
- module Utils
11
- def convert(node, transform = nil, opts = {})
12
- transform ||= node.node_name
13
- opts.empty? ? (send transform, node) : (send transform, node, opts)
14
- end
15
-
16
- def document_ns_attributes(_doc)
17
- nil
18
- end
19
-
20
- NOKOHEAD = <<~HERE.freeze
21
- <!DOCTYPE html SYSTEM
22
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
23
- <html xmlns="http://www.w3.org/1999/xhtml">
24
- <head> <title></title> <meta charset="UTF-8" /> </head>
25
- <body> </body> </html>
26
- HERE
27
-
28
- # block for processing XML document fragments as XHTML,
29
- # to allow for HTMLentities
30
- # Unescape special chars used in Asciidoctor substitution processing
31
- def noko(&block)
32
- doc = ::Nokogiri::XML.parse(NOKOHEAD)
33
- fragment = doc.fragment("")
34
- ::Nokogiri::XML::Builder.with fragment, &block
35
- fragment.to_xml(encoding: "US-ASCII", indent: 0).lines.map do |l|
36
- l.gsub(/>\n$/, ">").gsub(/\s*\n$/m, " ").gsub("&#150;", "\u0096")
37
- .gsub("&#151;", "\u0097").gsub("&#x96;", "\u0096")
38
- .gsub("&#x97;", "\u0097")
39
- end
40
- end
41
-
42
- def attr_code(attributes)
43
- attributes.compact.transform_values do |v|
44
- v.is_a?(String) ? HTMLEntities.new.decode(v) : v
45
- end
46
- end
47
-
48
- # if the contents of node are blocks, output them to out;
49
- # else, wrap them in <p>
50
- def wrap_in_para(node, out)
51
- if node.blocks? then out << node.content
52
- else
53
- out.p { |p| p << node.content }
54
- end
55
- end
56
-
57
- SUBCLAUSE_XPATH = "//clause[not(parent::sections)]"\
58
- "[not(ancestor::boilerplate)]".freeze
59
-
60
- def isodoc(lang, script, i18nyaml = nil)
61
- conv = html_converter(EmptyAttr.new)
62
- i18n = conv.i18n_init(lang, script, i18nyaml)
63
- conv.metadata_init(lang, script, i18n)
64
- conv
65
- end
66
-
67
- def default_script(lang)
68
- case lang
69
- when "ar", "fa" then "Arab"
70
- when "ur" then "Aran"
71
- when "ru", "bg" then "Cyrl"
72
- when "hi" then "Deva"
73
- when "el" then "Grek"
74
- when "zh" then "Hans"
75
- when "ko" then "Kore"
76
- when "he" then "Hebr"
77
- when "ja" then "Jpan"
78
- else
79
- "Latn"
80
- end
81
- end
82
-
83
- def dl_to_attrs(elem, dlist, name)
84
- e = dlist.at("./dt[text()='#{name}']") or return
85
- val = e.at("./following::dd/p") || e.at("./following::dd") or return
86
- elem[name] = val.text
87
- end
88
-
89
- def dl_to_elems(ins, elem, dlist, name)
90
- a = elem.at("./#{name}[last()]")
91
- ins = a if a
92
- dlist.xpath("./dt[text()='#{name}']").each do |e|
93
- v = e.at("./following::dd")
94
- e = v.elements and e.size == 1 && e.first.name == "p" and v = e.first
95
- v.name = name
96
- ins.next = v
97
- ins = ins.next
98
- end
99
- ins
100
- end
101
-
102
- def term_expr(elem)
103
- "<expression><name>#{elem}</name></expression>"
104
- end
105
-
106
- class EmptyAttr
107
- def attr(_any_attribute)
108
- nil
109
- end
110
-
111
- def attributes
112
- {}
113
- end
114
- end
115
- end
116
- end
117
- end
@@ -1,158 +1,3 @@
1
- require "asciidoctor/standoc/utils"
2
- require_relative "./validate_section"
3
- require "nokogiri"
4
- require "jing"
5
- require "iev"
1
+ require "asciidoctor/standoc/deprecated"
2
+ require "metanorma/standoc/validate"
6
3
 
7
- module Asciidoctor
8
- module Standoc
9
- module Validate
10
- SOURCELOCALITY = "./origin//locality[@type = 'clause']/"\
11
- "referenceFrom".freeze
12
-
13
- def init_iev
14
- return nil if @no_isobib
15
- return @iev if @iev
16
-
17
- @iev = Iev::Db.new(@iev_globalname, @iev_localname) unless @no_isobib
18
- @iev
19
- end
20
-
21
- def iev_validate(xmldoc)
22
- @iev = init_iev or return
23
- xmldoc.xpath("//term").each do |t|
24
- t.xpath(".//termsource").each do |src|
25
- (/^IEC 60050-/.match(src&.at("./origin/@citeas")&.text) &&
26
- loc = src.xpath(SOURCELOCALITY)&.text) or next
27
- iev_validate1(t, loc, xmldoc)
28
- end
29
- end
30
- end
31
-
32
- def iev_validate1(term, loc, xmldoc)
33
- iev = @iev.fetch(loc,
34
- xmldoc&.at("//language")&.text || "en") or return
35
- pref = term.xpath("./preferred//name").inject([]) do |m, x|
36
- m << x&.text&.downcase
37
- end
38
- pref.include?(iev.downcase) or
39
- @log.add("Bibliography", term, %(Term "#{pref[0]}" does not match ) +
40
- %(IEV #{loc} "#{iev}"))
41
- end
42
-
43
- def content_validate(doc)
44
- @fatalerror = []
45
- xref_validate(doc)
46
- section_validate(doc)
47
- norm_ref_validate(doc)
48
- repeat_id_validate(doc.root)
49
- iev_validate(doc.root)
50
- concept_validate(doc, "concept", "refterm")
51
- concept_validate(doc, "related", "preferred//name")
52
- @fatalerror.empty? or clean_abort(@fatalerror.join("\n"), doc.to_xml)
53
- end
54
-
55
- def norm_ref_validate(doc)
56
- found = false
57
- doc.xpath("//references[@normative = 'true']/bibitem").each do |b|
58
- next unless docid = b.at("./docidentifier[@type = 'metanorma']")
59
- next unless /^\[\d+\]$/.match?(docid.text)
60
-
61
- @log.add("Bibliography", b,
62
- "Numeric reference in normative references")
63
- found = true
64
- end
65
- found and @fatalerror << "Numeric reference in normative references"
66
- end
67
-
68
- def concept_validate(doc, tag, refterm)
69
- found = false
70
- doc.xpath("//#{tag}/xref").each do |x|
71
- next if doc.at("//term[@id = '#{x['target']}']")
72
- next if doc.at("//definitions//dt[@id = '#{x['target']}']")
73
-
74
- ref = x&.at("../#{refterm}")&.text
75
- @log.add("Anchors", x,
76
- "#{tag.capitalize} #{ref} is pointing to "\
77
- "#{x['target']}, which is not a term or symbol")
78
- found = true
79
- end
80
- found and
81
- @fatalerror << "#{tag.capitalize} not cross-referencing term or symbol"
82
- end
83
-
84
- def repeat_id_validate1(ids, elem)
85
- if ids[elem["id"]]
86
- @log.add("Anchors", elem, "Anchor #{elem['id']} has already been "\
87
- "used at line #{ids[elem['id']]}")
88
- @fatalerror << "Multiple instances of same ID: #{elem['id']}"
89
- else
90
- ids[elem["id"]] = elem.line
91
- end
92
- ids
93
- end
94
-
95
- def repeat_id_validate(doc)
96
- ids = {}
97
- doc.xpath("//*[@id]").each do |x|
98
- ids = repeat_id_validate1(ids, x)
99
- end
100
- end
101
-
102
- def schema_validate(doc, schema)
103
- Tempfile.open(["tmp", ".xml"], encoding: "UTF-8") do |f|
104
- schema_validate1(f, doc, schema)
105
- rescue Jing::Error => e
106
- clean_abort("Jing failed with error: #{e}", doc.to_xml)
107
- ensure
108
- f.close!
109
- end
110
- end
111
-
112
- def schema_validate1(file, doc, schema)
113
- file.write(doc.to_xml)
114
- file.close
115
- errors = Jing.new(schema, encoding: "UTF-8").validate(file.path)
116
- warn "Syntax Valid!" if errors.none?
117
- errors.each do |e|
118
- @log.add("Metanorma XML Syntax",
119
- "XML Line #{'%06d' % e[:line]}:#{e[:column]}", e[:message])
120
- end
121
- end
122
-
123
- # RelaxNG cannot cope well with wildcard attributes. So we strip
124
- # any attributes from FormattedString instances (which can contain
125
- # xs:any markup, and are signalled with @format) before validation.
126
- def formattedstr_strip(doc)
127
- doc.xpath("//*[@format] | //stem | //bibdata//description | "\
128
- "//formattedref | //bibdata//note | //bibdata/abstract | "\
129
- "//bibitem/abstract | //bibitem/note | //misc-container")
130
- .each do |n|
131
- n.elements.each do |e|
132
- e.traverse do |e1|
133
- e1.element? and e1.each { |k, _v| e1.delete(k) }
134
- end
135
- end
136
- end
137
- doc
138
- end
139
-
140
- # manually check for xref/@target, xref/@to integrity
141
- def xref_validate(doc)
142
- ids = doc.xpath("//*/@id").each_with_object({}) { |x, m| m[x.text] = 1 }
143
- doc.xpath("//xref/@target | //xref/@to").each do |x|
144
- next if ids[x.text]
145
-
146
- @log.add("Anchors", x.parent,
147
- "Crossreference target #{x.text} is undefined")
148
- end
149
- end
150
-
151
- def validate(doc)
152
- content_validate(doc)
153
- schema_validate(formattedstr_strip(doc.dup),
154
- File.join(File.dirname(__FILE__), "isodoc.rng"))
155
- end
156
- end
157
- end
158
- end
@@ -1,55 +1,3 @@
1
- require "nokogiri"
1
+ require "asciidoctor/standoc/deprecated"
2
+ require "metanorma/standoc/validate_section"
2
3
 
3
- module Asciidoctor
4
- module Standoc
5
- module Validate
6
- def section_validate(doc)
7
- sourcecode_style(doc.root)
8
- hanging_para_style(doc.root)
9
- asset_style(doc.root)
10
- end
11
-
12
- def sourcecode_style(root)
13
- root.xpath("//sourcecode").each do |x|
14
- callouts = x.elements.select { |e| e.name == "callout" }
15
- annotations = x.elements.select { |e| e.name == "annotation" }
16
- if callouts.size != annotations.size
17
- @log.add("AsciiDoc Input", x,
18
- "mismatch of callouts and annotations")
19
- end
20
- end
21
- end
22
-
23
- def style_warning(node, msg, text = nil)
24
- w = msg
25
- w += ": #{text}" if text
26
- @log.add("Metanorma XML Style Warning", node, w)
27
- end
28
-
29
- def asset_title_style(root)
30
- root.xpath("//figure[image][not(name)]").each do |node|
31
- style_warning(node, "Figure should have title", nil)
32
- end
33
- root.xpath("//table[not(name)]").each do |node|
34
- style_warning(node, "Table should have title", nil)
35
- end
36
- end
37
-
38
- def asset_style(root)
39
- asset_title_style(root)
40
- end
41
-
42
- def hanging_para_style(root)
43
- root.xpath("//clause | //annex | //foreword | //introduction | "\
44
- "//acknowledgements").each do |c|
45
- next unless c.at("./clause")
46
- next if c.elements.reject do |n|
47
- %w(clause title).include? n.name
48
- end.empty?
49
-
50
- style_warning(c, "Hanging paragraph in clause")
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -76,6 +76,12 @@ code *, pre *, tt *, kbd *, samp * {
76
76
  font-family: {{monospacefont}} !important;
77
77
  font-variant-ligatures: none; }
78
78
 
79
+ p code, dt code, li code, label code, legend code, caption code, th code, td code,
80
+ p tt, dt tt, li tt, label tt, legend tt, caption tt, th tt, td tt,
81
+ p kbd, dt kbd, li kbd, label kbd, legend kbd, caption kbd, th kbd, td kbd,
82
+ p samp, dt samp, li samp, label samp, legend samp, caption samp, th samp, td samp {
83
+ font-size: {{monospacefontsize}}; }
84
+
79
85
  article, aside, details, figcaption, figure,
80
86
  footer, header, hgroup, menu, nav, section {
81
87
  display: block; }
@@ -87,6 +93,9 @@ table {
87
93
  h1, h2, h3, h4, h5, h6 {
88
94
  font-family: {{headerfont}}; }
89
95
 
96
+ .h1, .h2, .h3, .h4, .h5, .h6 {
97
+ font-family: {{headerfont}}; }
98
+
90
99
  blockquote, q {
91
100
  quotes: none; }
92
101
  blockquote:before, blockquote:after, q:before, q:after {
@@ -234,59 +243,65 @@ body {
234
243
  /*
235
244
  2. Responsive navigation layout
236
245
  */
237
- #toc {
246
+ #toc, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) {
238
247
  font-family: {{bodyfont}};
239
248
  font-weight: 400; }
240
- #toc ul {
249
+ #toc ul, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) ul {
241
250
  margin: 0;
242
251
  padding: 0;
243
252
  list-style: none; }
244
- #toc ul li a {
253
+ #toc ul li a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) ul li a {
245
254
  padding: 5px 10px; }
246
- #toc ul a {
255
+ #toc ul a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) ul a {
247
256
  color: #485094;
248
257
  text-decoration: none;
249
258
  display: block; }
250
- #toc ul a:hover {
259
+ #toc ul a:hover, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) ul a:hover {
251
260
  box-shadow: none;
252
261
  color: #485094; }
253
- #toc .h2 {
262
+ #toc .h2, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .h2 {
254
263
  padding-left: 30px; }
255
- #toc .h3 {
264
+ #toc .h3, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .h3 {
256
265
  padding-left: 50px; }
257
- #toc .toc-active, #toc li:hover {
266
+ #toc .toc-active, #toc li:hover, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .toc-active, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) li:hover {
258
267
  background: #C70039;
259
268
  box-shadow: inset -5px 0px 10px -5px #C70039 !important; }
260
- #toc .toc-active a, #toc li:hover a {
269
+ #toc .toc-active a, #toc li:hover a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .toc-active a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) li:hover a {
261
270
  color: #485094; }
262
271
  @media print {
263
- #toc .toc-active, #toc li:hover {
272
+ #toc .toc-active, #toc li:hover, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .toc-active, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) li:hover {
264
273
  background: white;
265
274
  box-shadow: none !important; }
266
- #toc .toc-active a {
275
+ #toc .toc-active a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .toc-active a {
267
276
  color: #485094; }
268
- #toc li:hover a {
277
+ #toc li:hover a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) li:hover a {
269
278
  color: black; } }
270
279
  @media screen and (max-width: 768px) {
271
- #toc {
280
+ #toc, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) {
272
281
  padding: 0 1.5em;
273
282
  overflow: visible; } }
274
- #toc .toc-active a {
283
+ #toc .toc-active a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .toc-active a {
275
284
  color: white; }
276
285
  #toc .toc-active,
277
- #toc li:hover {
286
+ #toc li:hover, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .toc-active,
287
+ #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) li:hover {
278
288
  box-shadow: none !important; }
279
289
  #toc .toc-active a,
280
- #toc li:hover a {
290
+ #toc li:hover a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) .toc-active a,
291
+ #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) li:hover a {
281
292
  color: white;
282
293
  background: none;
283
294
  box-shadow: none; }
284
- #toc li a {
295
+ #toc li a, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) li a {
285
296
  text-transform: uppercase; }
286
- #toc ul a:hover {
297
+ #toc ul a:hover, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) ul a:hover {
287
298
  box-shadow: none;
288
299
  color: white; }
289
300
 
301
+ #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) {
302
+ margin-top: 0;
303
+ margin-bottom: 0; }
304
+
290
305
  @media screen and (min-width: 768px) {
291
306
  nav {
292
307
  position: fixed;
@@ -340,7 +355,7 @@ body {
340
355
  display: none; }
341
356
  h1.toc-contents {
342
357
  margin-top: 1em; }
343
- ul#toc-list {
358
+ ul#toc-list, ul#toc-list > :is(.h1, .h2, .h3, .h4, .h5, .h6) {
344
359
  padding: 0;
345
360
  margin: 0; } }
346
361
 
@@ -467,27 +482,27 @@ p.document-stage {
467
482
  /*
468
483
  3.1 Titles
469
484
  */
470
- h1, h2, h3, h4, h5, h6 {
485
+ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
471
486
  font-family: {{headerfont}};
472
487
  color: #C70039;
473
488
  font-weight: 300;
474
489
  margin-top: 1.6em;
475
490
  margin-bottom: 0.3em; }
476
491
 
477
- h1 {
492
+ h1, .h1 {
478
493
  font-size: 1.6em;
479
494
  text-transform: uppercase;
480
495
  margin-top: 2em; }
481
496
 
482
- h1#content {
497
+ h1#content, #content.h1 {
483
498
  margin-top: 2em; }
484
499
 
485
- h2 {
500
+ h2, .h2 {
486
501
  margin-top: 1.3em;
487
502
  font-size: 1.3em;
488
503
  font-weight: 400; }
489
504
 
490
- h3 {
505
+ h3, .h3 {
491
506
  margin-top: 1.1em;
492
507
  font-size: 1.1em;
493
508
  font-weight: 100; }
@@ -791,7 +806,7 @@ p {
791
806
  margin-top: 1em;
792
807
  margin-bottom: 1em; }
793
808
 
794
- h2 p {
809
+ h2 p, .h2 p {
795
810
  display: inline; }
796
811
 
797
812
  /*
@@ -942,7 +957,7 @@ To top button
942
957
  @media print {
943
958
  .document-info, nav, .copyright {
944
959
  page-break-before: always; }
945
- h1, h2, h3, h4 {
960
+ h1, h2, h3, h4, .h1, .h2, .h3, .h4 {
946
961
  page-break-after: avoid;
947
962
  margin-top: 1.2em; }
948
963
  .note, .figure, pre, .pseudocode, table {
@@ -965,12 +980,12 @@ To top button
965
980
  h1.content {
966
981
  margin-top: 2em;
967
982
  line-height: 2.5em; }
968
- h1 {
983
+ h1, .h1 {
969
984
  font-size: 1.5em;
970
985
  line-height: 1.5; }
971
- h2 {
986
+ h2, .h2 {
972
987
  font-size: 1.2em; }
973
- h3 {
988
+ h3, .h3 {
974
989
  font-size: 1em; }
975
990
  .Note {
976
991
  background-color: #fff495;
@@ -48,7 +48,7 @@ body {
48
48
  2. Responsive navigation layout
49
49
  */
50
50
 
51
- #toc {
51
+ #toc, #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) {
52
52
  @include toc(#485094, #C70039, #485094);
53
53
  @include sidebarToc();
54
54
 
@@ -79,6 +79,11 @@ body {
79
79
  }
80
80
  }
81
81
 
82
+ #toc > ul > :is(.h1, .h2, .h3, .h4, .h5, .h6) {
83
+ margin-top: 0;
84
+ margin-bottom: 0;
85
+ }
86
+
82
87
  nav {
83
88
  @include sidebarNav(#f7f7f7, 323px, 45px);
84
89
  }
@@ -100,7 +105,7 @@ nav {
100
105
  margin-top: 1em;
101
106
  }
102
107
 
103
- ul#toc-list {
108
+ ul#toc-list, ul#toc-list > :is(.h1, .h2, .h3, .h4, .h5, .h6) {
104
109
  padding: 0;
105
110
  margin: 0;
106
111
  }
@@ -155,7 +160,7 @@ p.document-stage {
155
160
  3.1 Titles
156
161
  */
157
162
 
158
- h1,h2,h3,h4,h5,h6 {
163
+ h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6 {
159
164
  font-family: $headerfont;
160
165
  color: #C70039;
161
166
  font-weight: 300;
@@ -163,23 +168,23 @@ p.document-stage {
163
168
  margin-bottom: 0.3em;
164
169
  }
165
170
 
166
- h1 {
171
+ h1,.h1 {
167
172
  font-size: 1.6em;
168
173
  text-transform: uppercase;
169
174
  margin-top: 2em;
170
175
  }
171
176
 
172
- h1#content {
177
+ h1#content,.h1#content {
173
178
  margin-top: 2em;
174
179
  }
175
180
 
176
- h2 {
181
+ h2,.h2 {
177
182
  margin-top: 1.3em;
178
183
  font-size: 1.3em;
179
184
  font-weight: 400;
180
185
  }
181
186
 
182
- h3 {
187
+ h3,.h3 {
183
188
  margin-top: 1.1em;
184
189
  font-size: 1.1em;
185
190
  font-weight: 100;
@@ -471,7 +476,7 @@ p {
471
476
  margin-bottom: 1em;
472
477
  }
473
478
 
474
- h2 p {
479
+ h2 p, .h2 p {
475
480
  display: inline;
476
481
  }
477
482
 
@@ -643,7 +648,7 @@ To top button
643
648
  page-break-before: always;
644
649
  }
645
650
 
646
- h1, h2, h3, h4 {
651
+ h1, h2, h3, h4, .h1, .h2, .h3, .h4 {
647
652
  page-break-after: avoid;
648
653
  margin-top: 1.2em;
649
654
  }
@@ -685,16 +690,16 @@ To top button
685
690
  line-height: 2.5em;
686
691
  }
687
692
 
688
- h1 {
693
+ h1, .h1 {
689
694
  font-size: 1.5em;
690
695
  line-height: 1.5;
691
696
  }
692
697
 
693
- h2 {
698
+ h2, .h2 {
694
699
  font-size: 1.2em
695
700
  }
696
701
 
697
- h3 {
702
+ h3, .h3 {
698
703
  font-size: 1em;
699
704
  }
700
705