aspec_rb 0.0.16 → 0.0.18
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 +4 -4
- data/Gemfile.lock +2 -2
- data/lib/aspec_rb/version.rb +1 -1
- data/lib/extensions/autoxrefs.rb +41 -36
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 427cbb8b59cafd0a51f3253e03a53c29a9893699cb7607a95815cdb384d57d45
|
4
|
+
data.tar.gz: 25d2bcc8d6bcb9a528b153cdba5a6286ff47fa4adfafbf8f5a000859f61be18c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70f61d330bcddef4927e4cc5c7d3ca1ef19757a3b49418e698ae40d3c671a3e1efa59e0bdfdc67476b4829fcaa6f406755963aa8f73b82a5d3d7bb8a097bc748
|
7
|
+
data.tar.gz: 3a7b1ffabfd31002e268abaa8bab909e46897794afc383bf094c0b3ec49fc13ebc90775993cb59433207a81d3391281f9e49282895bf8b7725cf4453a8cade54
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
aspec_rb (0.0.
|
4
|
+
aspec_rb (0.0.18)
|
5
5
|
asciidoctor
|
6
6
|
|
7
7
|
GEM
|
@@ -10,7 +10,7 @@ GEM
|
|
10
10
|
asciidoctor (1.5.7.1)
|
11
11
|
docile (1.3.1)
|
12
12
|
json (2.1.0)
|
13
|
-
power_assert (1.1.
|
13
|
+
power_assert (1.1.2)
|
14
14
|
rake (12.3.1)
|
15
15
|
simplecov (0.16.1)
|
16
16
|
docile (~> 1.1)
|
data/lib/aspec_rb/version.rb
CHANGED
data/lib/extensions/autoxrefs.rb
CHANGED
@@ -9,28 +9,29 @@ include ::Asciidoctor
|
|
9
9
|
$srcdir = 'chapters'
|
10
10
|
|
11
11
|
AnchorRx = /\[\[(?:|([\w+?_:][\w+?:.-]*)(?:, *(.+))?)\]\]/
|
12
|
+
ImageRx = /^(\.\S\w+)/
|
13
|
+
SectitleRx = /^(\=+\s+?\S+.+)/
|
14
|
+
XrefRx = /\<\<(?!Req)(.+?)\>\>/
|
12
15
|
|
13
16
|
ni_includes, includes, doclinks, anchorfixes, intrachapter, interchapter, anchors, xrefs = Array.new(9) { [] }
|
14
17
|
|
15
|
-
# Don't do this!
|
16
18
|
adoc_files = Dir.glob("#{$srcdir}/**/*.adoc")
|
17
19
|
|
18
20
|
indexincludes = Index.includes
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
+
# Scan adoc files and store some arrays of xrefs and anchors
|
23
|
+
adoc_files.each do |filename, main=false|
|
22
24
|
path = Sform.trim(filename)
|
23
25
|
chapter = path.match(/.+?(?=\/)/).to_s
|
24
26
|
|
25
|
-
#
|
26
|
-
indexincludes.each
|
27
|
-
main = true if inc == filename
|
28
|
-
end
|
27
|
+
# If the current document is an include within the index.adoc
|
28
|
+
indexincludes.each { |inc| main = true if inc == filename }
|
29
29
|
|
30
30
|
File.read(filename).each_line do |li|
|
31
31
|
h1 = false
|
32
32
|
|
33
|
-
|
33
|
+
# Look for xrefs
|
34
|
+
if li[XrefRx]
|
34
35
|
# Handle multiple cross refs per line
|
35
36
|
li.scan(/(?=\<\<(?!Req)(.+?)\>\>)/) do |xref|
|
36
37
|
text = ''
|
@@ -50,20 +51,22 @@ adoc_files.each do |filename|
|
|
50
51
|
xrefs.push([xref, path, filename, text, target, chapter])
|
51
52
|
end
|
52
53
|
|
53
|
-
|
54
|
+
# Section Titles
|
55
|
+
elsif li[SectitleRx]
|
54
56
|
h1 = true if li[/^=\s+?\S+.+/]
|
55
57
|
title = li.chop.match(/(?!=+\s)(\S+.+?)$/i).captures[0].strip
|
56
58
|
title.sub!(/\.(?=\w+?)/, '') if title[/\.(?=\w+?)/]
|
57
59
|
link = Sform.underscorify(title)
|
58
60
|
anchors.push([title, path, filename, link, chapter, main, h1])
|
59
61
|
|
60
|
-
#
|
61
|
-
elsif li[
|
62
|
+
# Images
|
63
|
+
elsif li[ImageRx]
|
62
64
|
title = li.chop.match(/(?!=+\s)(\S+.+?)$/i).captures[0].strip
|
63
65
|
title.sub!(/\.(?=\w+?)/, '') if title[/\.(?=\w+?)/]
|
64
66
|
anchors.push([title, path, filename, title, chapter, main, h1])
|
65
67
|
|
66
|
-
|
68
|
+
# Anchors
|
69
|
+
elsif li[AnchorRx]
|
67
70
|
anchor = li.chop.match(/(?<=\[\[).+?(?=\]\])/).to_s
|
68
71
|
|
69
72
|
if anchor[/,/]
|
@@ -76,36 +79,37 @@ adoc_files.each do |filename|
|
|
76
79
|
|
77
80
|
anchors.push([anchor, path, filename, text, chapter, main, h1, true])
|
78
81
|
|
79
|
-
# Match for
|
82
|
+
# Match for includes
|
80
83
|
elsif li[IncludeDirectiveRx]
|
81
84
|
child = li.match(/(?<=^include::).+?\.adoc(?=\[\])/).to_s
|
82
85
|
child = child.sub(/^\{find\}/, '')
|
83
86
|
childpath = "#{filename.sub(/[^\/]+?\.adoc/, '')}#{child}"
|
84
|
-
|
87
|
+
trim_childpath = Sform.trim(childpath)
|
88
|
+
trim_parent = Sform.trim(filename)
|
89
|
+
includes.push([filename, child, childpath, trim_childpath, trim_parent])
|
85
90
|
|
86
91
|
end
|
87
92
|
end
|
88
93
|
end
|
89
94
|
|
90
|
-
# Create array of non-
|
95
|
+
# Create array of non-index includes
|
91
96
|
adoc_files.each do |filename|
|
92
|
-
includes.each do |parent, child, childpath|
|
97
|
+
includes.each do |parent, child, childpath, trim_childpath, trim_parent|
|
93
98
|
next unless childpath == filename
|
94
|
-
ni_includes.push([parent, child, filename])
|
99
|
+
ni_includes.push([parent, child, filename, trim_childpath, trim_parent])
|
95
100
|
end
|
96
101
|
end
|
97
102
|
|
98
|
-
|
99
|
-
#
|
103
|
+
# For each "main" include, store a target link
|
104
|
+
# This is where the generated HTML for each chapter will live
|
100
105
|
anchors.each do |_anchor, full, _filename, link, chapter, main, h1|
|
101
106
|
next unless main && h1
|
102
107
|
doc = full.gsub(/^#{chapter}\//, '')
|
103
108
|
doclinks.push([doc, link, chapter])
|
104
109
|
end
|
105
110
|
|
106
|
-
o_anchors = []
|
107
|
-
|
108
111
|
# If a section title has an overriding anchor on the previous line, perform the following fix
|
112
|
+
o_anchors = []
|
109
113
|
doclinks.delete_if do |doc, _link, mchapter|
|
110
114
|
topleveldoc = "#{$srcdir}/#{mchapter}/#{doc}.adoc"
|
111
115
|
lines = File.foreach(topleveldoc).first(10).join
|
@@ -118,25 +122,30 @@ end
|
|
118
122
|
doclinks += o_anchors
|
119
123
|
doclinks.uniq!
|
120
124
|
|
121
|
-
# Edit the array of Anchors to point to the parent document
|
122
|
-
# TODO use a while loop, repeat until no changes made
|
125
|
+
# Edit the array of Anchors to point to the parent document if it is included.
|
123
126
|
tempanchors = []
|
124
127
|
3.times do
|
125
128
|
tempanchors.clear
|
126
129
|
|
127
130
|
# Loop through all includes, if the anchor is contained in an include,
|
128
131
|
# edit the anchors array to point to its parent instead
|
129
|
-
includes.each do |parent, _child, childpath|
|
132
|
+
includes.each do |parent, _child, childpath, trim_childpath, trim_parent|
|
130
133
|
anchors.delete_if do |anchor, path, filename, text, chapter, main, _h1|
|
131
|
-
|
132
|
-
|
134
|
+
# TODO - this is a huge bottleneck!
|
135
|
+
# remove string operations inside iterators!!!
|
136
|
+
next unless trim_childpath == Sform.trim(filename)
|
137
|
+
tempanchors.push([anchor, path, trim_parent, text, chapter, main])
|
133
138
|
true
|
134
139
|
end
|
135
140
|
end
|
141
|
+
|
136
142
|
anchors += tempanchors
|
137
143
|
anchors.uniq!
|
144
|
+
|
138
145
|
end
|
139
146
|
|
147
|
+
tempanchors.clear
|
148
|
+
|
140
149
|
anchors.delete_if do |anchor, apath, trim_parent, parent, amain, achapter|
|
141
150
|
doclinks.each do |doc, link, dchapter|
|
142
151
|
next unless apath == "#{dchapter}/#{doc}" || trim_parent == "#{dchapter}/#{doc}"
|
@@ -145,31 +154,29 @@ anchors.delete_if do |anchor, apath, trim_parent, parent, amain, achapter|
|
|
145
154
|
end
|
146
155
|
end
|
147
156
|
|
148
|
-
|
149
|
-
tempanchors.uniq!
|
150
157
|
anchors += tempanchors
|
151
158
|
anchors.uniq!
|
152
159
|
|
153
160
|
# For all requirements, check which chapter they should finally be in with includes catered for
|
154
161
|
# match with a main document name - should be a main chapter title
|
155
|
-
xrefs.each do |xref, xpath, _xfilename,
|
162
|
+
xrefs.each do |xref, xpath, _xfilename, xtext, xtarget, _xchapter|
|
156
163
|
anchors.each do |anchor, apath, afilename, atext, _achapter, _amain, _h1|
|
157
164
|
next unless xref == anchor
|
158
165
|
# if in same chapter, dont link to other HTML file
|
159
166
|
afilename = '' if xpath == apath
|
160
167
|
# xtext = xref if xtext.empty?
|
161
168
|
afilename.sub!(/^_/, '') if afilename[/^_/]
|
162
|
-
fix = "#{afilename}##{atext},#{
|
169
|
+
fix = "#{afilename}##{atext},#{xtext}"
|
163
170
|
anchorfixes.push([anchor, fix, xref])
|
164
171
|
end
|
165
172
|
end
|
166
173
|
|
174
|
+
anchorfixes.uniq!
|
175
|
+
|
167
176
|
Extensions.register do
|
168
177
|
preprocessor do
|
169
178
|
process do |_document, reader|
|
170
|
-
|
171
|
-
|
172
|
-
replacement_lines = reader.read_lines.map do |line|
|
179
|
+
Reader.new reader.readlines.map { |line|
|
173
180
|
if line[/\<\<(?!Req)(.+?)\>\>/]
|
174
181
|
anchorfixes.each do |original, fix|
|
175
182
|
next unless line[/\<\<#{original}(,.+?)?\>\>/]
|
@@ -183,9 +190,7 @@ Extensions.register do
|
|
183
190
|
2.times { line.sub!(/`/, '') }
|
184
191
|
end
|
185
192
|
line
|
186
|
-
|
187
|
-
reader.unshift_lines replacement_lines
|
188
|
-
reader
|
193
|
+
}
|
189
194
|
end
|
190
195
|
end
|
191
196
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aspec_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tcob
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|