aspec_rb 0.0.1
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 +7 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +3 -0
- data/.travis.yml +5 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +26 -0
- data/README.md +40 -0
- data/Rakefile +13 -0
- data/aspec_rb.gemspec +34 -0
- data/bin/console +8 -0
- data/bin/setup +8 -0
- data/lib/aspec_rb/version.rb +6 -0
- data/lib/aspec_rb.rb +14 -0
- data/lib/extensions/autoxrefs.rb +183 -0
- data/lib/extensions/definition_block.rb +49 -0
- data/lib/extensions/inline_callout_macro.rb +14 -0
- data/lib/extensions/inline_cwiki_macro.rb +31 -0
- data/lib/extensions/inline_repo_macro.rb +96 -0
- data/lib/extensions/inline_task_macro.rb +47 -0
- data/lib/extensions/postprocessor.rb +18 -0
- data/lib/extensions/req_refs.rb +191 -0
- data/lib/extensions/requirement_appendix.rb +108 -0
- data/lib/extensions/requirement_block.rb +50 -0
- data/lib/extensions/todo_block.rb +16 -0
- data/lib/extensions/utils/block.rb +36 -0
- data/lib/extensions/utils/labels.rb +18 -0
- data/lib/extensions/utils/scanner.rb +20 -0
- data/lib/html_chunker.rb +107 -0
- data/lib/postprocessors/fulltext_search.rb +48 -0
- data/lib/postprocessors/generate_toc.rb +104 -0
- metadata +133 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
Encoding.default_external = Encoding::UTF_8
|
5
|
+
Encoding.default_internal = Encoding::UTF_8
|
6
|
+
|
7
|
+
# This marker should be in the target document where the TOC will be placed.
|
8
|
+
marker = '---TOC---'
|
9
|
+
gendir = 'generated-docs' # TODO: - do not hardcode
|
10
|
+
|
11
|
+
# Open a <ul> element
|
12
|
+
toc = %{<input type="text" id="pagesearch" onkeyup="search()" placeholder="Filter chapters"
|
13
|
+
style="margin-left: 18px;">
|
14
|
+
<i class="fa fa-times" aria-hidden="true" style="display:none;" id="clear"></i>
|
15
|
+
<ul class="nav" id="treeview">
|
16
|
+
|
17
|
+
}
|
18
|
+
|
19
|
+
html_files = Dir.glob("#{gendir}/**/*.html")
|
20
|
+
anchors, sections, appendices = [], [], []
|
21
|
+
|
22
|
+
html_files.each do |file|
|
23
|
+
next if file == "#{gendir}/search.html" || file[%r{^#{gendir}\/index}]
|
24
|
+
page = Nokogiri::HTML(open(file))
|
25
|
+
filename = file.sub(%r{^#{gendir}\/}, '')
|
26
|
+
|
27
|
+
# All Asciidoc files will have a <h2> element as the document name
|
28
|
+
# when sectnums attribute is enabled, this can be used for sorting
|
29
|
+
pagetitle = page.xpath('//h2').text
|
30
|
+
|
31
|
+
# Collect all heading elements, exclude 'panel-title' class used in Requirements
|
32
|
+
# TODO - check for other heading elements that are not section titles.
|
33
|
+
# It may be wise to search by xpath for heading elements directly after 'sect1-6' class divs
|
34
|
+
hs = page.xpath("//h2 | //h3[not(@class='panel-title')] | //h4 | //h5").collect
|
35
|
+
|
36
|
+
if pagetitle[/^Appendix/]
|
37
|
+
# Create an array of appendices
|
38
|
+
appendices.push([hs, pagetitle, filename])
|
39
|
+
elsif pagetitle[/^\d+/]
|
40
|
+
# Create an array of section titles by chapter number
|
41
|
+
sections.push([hs, pagetitle, filename])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Sort Sections by number
|
46
|
+
sections.sort_by! { |_content, title| title.scan(/^\d+/).first.to_i }
|
47
|
+
|
48
|
+
# Sort Appendices Array
|
49
|
+
appendices.sort_by! { |_content, title| title }
|
50
|
+
|
51
|
+
# Push Appendices to end of Sections array
|
52
|
+
appendices.each do |content, title, filename|
|
53
|
+
sections.push([content, title, filename])
|
54
|
+
end
|
55
|
+
|
56
|
+
# For each Section (HTML page), create an array of anchors
|
57
|
+
sections.each do |sect, _title, filename|
|
58
|
+
sect.each do |content|
|
59
|
+
anchors.push([filename, content.attributes['id'].to_s, content.content.to_s, content.name.delete('h').to_i])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
i = 0
|
64
|
+
prev_level = 0
|
65
|
+
|
66
|
+
# For each anchor, create a html list element
|
67
|
+
anchors.each do |file, id, text, level|
|
68
|
+
li = "<li><a href=\"#{file}##{id}\">#{text}</a></li>\n"
|
69
|
+
|
70
|
+
# If there are subsections, add a nested <ul> element
|
71
|
+
if level > prev_level
|
72
|
+
if i != 0
|
73
|
+
toc = toc.chomp("</li>\n")
|
74
|
+
toc += " <a href=\"#\" data-toggle=\"collapse\" data-target=\"#tocnav_#{id}\"><i class=\"fa fa-plus-square\"
|
75
|
+
aria-hidden=\"true\"></i></a>
|
76
|
+
<ul>
|
77
|
+
<div id=\"tocnav_#{id}\" class=\"collapse\">
|
78
|
+
<li><a href=\"#{file}##{id}\">#{text}</a></li>\n"
|
79
|
+
li = ''
|
80
|
+
end
|
81
|
+
|
82
|
+
# Close nested <ul> elements
|
83
|
+
elsif level < prev_level
|
84
|
+
diff = prev_level - level
|
85
|
+
diff.times { toc += "</div></ul>\n" }
|
86
|
+
end
|
87
|
+
i += 1
|
88
|
+
toc += li
|
89
|
+
# assign a variable with current level to compare in next iteration
|
90
|
+
prev_level = level
|
91
|
+
end
|
92
|
+
|
93
|
+
# Close the toc
|
94
|
+
toc += '</ul>'
|
95
|
+
|
96
|
+
html_files.each do |fi|
|
97
|
+
file = fi.sub(%r{#{gendir}\/}, '')
|
98
|
+
thistoc = toc.gsub(/#{file}/, '')
|
99
|
+
data = File.read(fi)
|
100
|
+
File.open(fi, 'w') do |f|
|
101
|
+
modified = data.sub(marker, thistoc)
|
102
|
+
f.write(modified)
|
103
|
+
end
|
104
|
+
end
|
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aspec_rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- bsmith-n4
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-02-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.15.4
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.15.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 12.1.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 12.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.2.6
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.2.6
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: asciidoctor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.5.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.5.0
|
69
|
+
description: |-
|
70
|
+
This plugin is a group of Asciidoctor extensions that perform directory walking,
|
71
|
+
resolving the location of titles and anchors in all adoc files so that inter-document
|
72
|
+
cross-references in a Jekyll project are resolved automatically. Also included are some
|
73
|
+
custom macros and blocks that are useful for techinical writing.
|
74
|
+
email:
|
75
|
+
- brian.smith@numberfour.eu
|
76
|
+
executables: []
|
77
|
+
extensions: []
|
78
|
+
extra_rdoc_files: []
|
79
|
+
files:
|
80
|
+
- ".gitignore"
|
81
|
+
- ".rubocop.yml"
|
82
|
+
- ".travis.yml"
|
83
|
+
- Gemfile
|
84
|
+
- Gemfile.lock
|
85
|
+
- README.md
|
86
|
+
- Rakefile
|
87
|
+
- aspec_rb.gemspec
|
88
|
+
- bin/console
|
89
|
+
- bin/setup
|
90
|
+
- lib/aspec_rb.rb
|
91
|
+
- lib/aspec_rb/version.rb
|
92
|
+
- lib/extensions/autoxrefs.rb
|
93
|
+
- lib/extensions/definition_block.rb
|
94
|
+
- lib/extensions/inline_callout_macro.rb
|
95
|
+
- lib/extensions/inline_cwiki_macro.rb
|
96
|
+
- lib/extensions/inline_repo_macro.rb
|
97
|
+
- lib/extensions/inline_task_macro.rb
|
98
|
+
- lib/extensions/postprocessor.rb
|
99
|
+
- lib/extensions/req_refs.rb
|
100
|
+
- lib/extensions/requirement_appendix.rb
|
101
|
+
- lib/extensions/requirement_block.rb
|
102
|
+
- lib/extensions/todo_block.rb
|
103
|
+
- lib/extensions/utils/block.rb
|
104
|
+
- lib/extensions/utils/labels.rb
|
105
|
+
- lib/extensions/utils/scanner.rb
|
106
|
+
- lib/html_chunker.rb
|
107
|
+
- lib/postprocessors/fulltext_search.rb
|
108
|
+
- lib/postprocessors/generate_toc.rb
|
109
|
+
homepage: https://github.com/bsmith-n4/aspec_rb
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '2.0'
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.6.12
|
130
|
+
signing_key:
|
131
|
+
specification_version: 4
|
132
|
+
summary: Asciidoctor extensions for use as a Jekyll plugin
|
133
|
+
test_files: []
|