docubot 0.3 → 0.3.2
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.
- data/bin/docubot +0 -0
- data/lib/docubot/bundle.rb +75 -11
- data/lib/docubot/glossary.rb +19 -14
- data/lib/docubot/page.rb +114 -56
- data/lib/docubot/shells/nvphysx/0_License.md +3 -0
- data/lib/docubot/shells/nvphysx/1_Getting_Started.haml +51 -0
- data/lib/docubot/shells/nvphysx/Appendix/Glossary.md +7 -0
- data/lib/docubot/shells/nvphysx/_glossary/APEX.md +1 -0
- data/lib/docubot/shells/nvphysx/_glossary/NVIDIA.md +1 -0
- data/lib/docubot/shells/nvphysx/_glossary/PhysX.textile +3 -0
- data/lib/docubot/shells/nvphysx/_static/NVBadge_3D.png +0 -0
- data/lib/docubot/shells/nvphysx/_static/PhysXbyNV_Black.png +0 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/bg_green_bar_revised.gif +0 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/close.png +0 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/common.css +264 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/glossary.css +4 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/glossary.js +24 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/nvdevtools.js +31 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/nvidia-logo.gif +0 -0
- data/lib/docubot/shells/nvphysx/_templates/_root/right-sidebar.png +0 -0
- data/lib/docubot/shells/nvphysx/_templates/top.haml +28 -0
- data/lib/docubot/shells/nvphysx/index.txt +5 -0
- data/lib/docubot/snippet.rb +1 -0
- data/lib/docubot/snippets/glossary.rb +1 -0
- data/lib/docubot/templates/_root/glossary.css +4 -0
- data/lib/docubot/templates/_root/glossary.js +58 -0
- data/lib/docubot/templates/glossary.haml +3 -2
- data/lib/docubot/templates/top.haml +4 -0
- data/lib/docubot/writers/chm.rb +6 -3
- data/lib/docubot/writers/html.rb +1 -1
- data/spec/_all.rb +12 -0
- data/spec/_helper.rb +6 -0
- data/spec/bundle.rb +142 -0
- data/spec/command.rb +3 -0
- data/spec/converters.rb +2 -0
- data/spec/glossary.rb +93 -0
- data/spec/index.rb +2 -0
- data/spec/page.rb +24 -0
- data/spec/samples/glossary/Glossary.txt +5 -0
- data/spec/samples/glossary/Some Page.md +3 -0
- data/spec/samples/glossary/_glossary/Simple Term.md +3 -0
- data/spec/samples/glossary/_glossary/complex.haml +8 -0
- data/spec/samples/glossary/_glossary/project_x.md +4 -0
- data/spec/samples/link_test/index.txt +11 -0
- data/spec/samples/link_test/root.md +14 -0
- data/spec/samples/link_test/sub1/inner1.md +11 -0
- data/spec/samples/link_test/sub2.md +3 -0
- data/{test/site1_html/toc.css → spec/samples/link_test/sub2/bozo.bin} +0 -0
- data/spec/samples/link_test/sub2/inner2.md +7 -0
- data/spec/samples/simplest/HTML.html +10 -0
- data/spec/samples/simplest/Haml.haml +13 -0
- data/spec/samples/simplest/Markdown.md +10 -0
- data/spec/samples/simplest/Text.txt +10 -0
- data/spec/samples/simplest/Textile.textile +10 -0
- data/test/site1_html/toc.js b/data/spec/samples/titletest/1 First → One.txt +0 -0
- data/spec/samples/titletest/2_Second_One.txt +0 -0
- data/spec/samples/titletest/3_renamed.txt +2 -0
- data/spec/samples/titletest/4 Fourth_One.txt b/data/spec/samples/titletest/4 → Fourth_One.txt +0 -0
- data/spec/samples/titletest/5_Fifth One.txt b/data/spec/samples/titletest/5_Fifth → One.txt +0 -0
- data/spec/samples/titletest/index.txt +2 -0
- data/spec/templates.rb +2 -0
- data/spec/toc.rb +73 -0
- data/spec/writer/chm.rb +2 -0
- data/spec/writer/html.rb +2 -0
- metadata +74 -35
- data/test/all.rb +0 -8
- data/test/site1/A Slight Change of Heart/1 Ze First Page in Ze Section.md +0 -1
- data/test/site1/A Slight Change of Heart/2 Another Page in the Section.md +0 -1
- data/test/site1/A Slight Change of Heart/3_more_crap.haml +0 -17
- data/test/site1/appendices/gkheadftw.html +0 -2
- data/test/site1/appendices/index.md +0 -2
- data/test/site1/headers.md +0 -10
- data/test/site1/preamble.haml +0 -4
- data/test/site1/raw.textile +0 -10
- data/test/site1_html/A Slight Change of Heart/1 Ze First Page in Ze Section.html +0 -30
- data/test/site1_html/A Slight Change of Heart/2 Another Page in the Section.html +0 -30
- data/test/site1_html/A Slight Change of Heart/3_more_crap.html +0 -42
- data/test/site1_html/A Slight Change of Heart/3_more_crap.html#frist-post +0 -29
- data/test/site1_html/A Slight Change of Heart/3_more_crap.html#moar +0 -29
- data/test/site1_html/A Slight Change of Heart/index.html +0 -28
- data/test/site1_html/_index.html +0 -17
- data/test/site1_html/_toc.html +0 -73
- data/test/site1_html/appendices/gkheadftw.html +0 -32
- data/test/site1_html/appendices/index.html +0 -28
- data/test/site1_html/common.css +0 -108
- data/test/site1_html/glossary-terms.js +0 -1
- data/test/site1_html/headers.html +0 -42
- data/test/site1_html/preamble.html +0 -36
- data/test/site1_html/raw.html +0 -33
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
%head
|
|
4
4
|
%meta(http-equiv='Content-Type' content='text/html; charset=utf-8')
|
|
5
5
|
%link{:rel=>'stylesheet', :type=>'text/css', :href=>"#{root}common.css", :media=>'all'}
|
|
6
|
+
%link{:rel=>'stylesheet', :type=>'text/css', :href=>"#{root}glossary.css", :media=>'all'}
|
|
7
|
+
%script{:type=>'text/javascript', :src=>"#{root}glossary-terms.js"}
|
|
8
|
+
%script{:type=>'text/javascript', :src=>"#{root}glossary.js"}
|
|
6
9
|
%title= page.title
|
|
7
10
|
%body{ :class=>page.style }
|
|
8
11
|
#content
|
|
@@ -19,6 +22,7 @@
|
|
|
19
22
|
- if page.author?
|
|
20
23
|
#author= page.author
|
|
21
24
|
#pagebody
|
|
25
|
+
#glossary-box
|
|
22
26
|
#mainbody= contents
|
|
23
27
|
#pagefooter
|
|
24
28
|
Copyright ©#{Time.now.year}#{ " #{global.company}" if global.company? }.
|
data/lib/docubot/writers/chm.rb
CHANGED
|
@@ -14,7 +14,8 @@ class DocuBot::CHMWriter < DocuBot::HTMLWriter
|
|
|
14
14
|
write_hhc
|
|
15
15
|
write_hhk
|
|
16
16
|
write_hhp
|
|
17
|
-
puts "...%.2fs to write the CHM support files" % (
|
|
17
|
+
puts "...%.2fs to write the CHM support files" % (Time.now-lap)
|
|
18
|
+
lap = Time.now
|
|
18
19
|
|
|
19
20
|
# This will fail if a handle is open to it on Windows
|
|
20
21
|
begin
|
|
@@ -26,12 +27,14 @@ class DocuBot::CHMWriter < DocuBot::HTMLWriter
|
|
|
26
27
|
end
|
|
27
28
|
end
|
|
28
29
|
`hhc.exe "#{FileUtils.win_path @hhp}"`.gsub( /[\r\n]+/, "\n" )
|
|
29
|
-
puts "...%.2fs to create the CHM" % (
|
|
30
|
+
puts "...%.2fs to create the CHM" % (Time.now-lap)
|
|
31
|
+
lap = Time.now
|
|
30
32
|
|
|
31
33
|
# Clean out the intermediary files
|
|
32
34
|
FileUtils.rm( [ @hhc, @hhp, @hhk ] )
|
|
33
35
|
FileUtils.rm_r( @html_path )
|
|
34
|
-
puts "...%.2fs to clean up temporary files" % (
|
|
36
|
+
puts "...%.2fs to clean up temporary files" % (Time.now-lap)
|
|
37
|
+
lap = Time.now
|
|
35
38
|
|
|
36
39
|
# Spin a new thread so it doesn't hold up the Ruby process, but sleep long enough for it to get going.
|
|
37
40
|
Thread.new{ `hh.exe "#{FileUtils.win_path @chm_path}"` }
|
data/lib/docubot/writers/html.rb
CHANGED
|
@@ -37,7 +37,7 @@ class DocuBot::HTMLWriter < DocuBot::Writer
|
|
|
37
37
|
template = Haml::Engine.new( IO.read( template ), HAML_OPTIONS )
|
|
38
38
|
@bundle.toc.descendants.each do |page|
|
|
39
39
|
next if page.sublink?
|
|
40
|
-
contents = page.to_html
|
|
40
|
+
contents = page.to_html
|
|
41
41
|
root = "../" * page.depth
|
|
42
42
|
html = template.render( o, :page=>page, :contents=>contents, :global=>@bundle.toc, :root=>root )
|
|
43
43
|
FileUtils.mkdir_p( File.dirname( page.html_path ) )
|
data/spec/_all.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#encoding: UTF-8
|
|
2
|
+
$: << '..'
|
|
3
|
+
require 'spec/bundle'
|
|
4
|
+
require 'spec/toc'
|
|
5
|
+
require 'spec/converters'
|
|
6
|
+
require 'spec/page'
|
|
7
|
+
require 'spec/glossary'
|
|
8
|
+
require 'spec/index'
|
|
9
|
+
require 'spec/templates'
|
|
10
|
+
require 'spec/command'
|
|
11
|
+
require 'spec/writer/html'
|
|
12
|
+
require 'spec/writer/chm'
|
data/spec/_helper.rb
ADDED
data/spec/bundle.rb
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#encoding: UTF-8
|
|
2
|
+
require File.join(File.dirname(__FILE__), "_helper")
|
|
3
|
+
|
|
4
|
+
describe "AbusedBundle" do
|
|
5
|
+
it 'requires a valid path' do
|
|
6
|
+
proc{ DocuBot::Bundle.new }.must_raise(ArgumentError)
|
|
7
|
+
proc{ DocuBot::Bundle.new "does not exist" }.must_raise(RuntimeError)
|
|
8
|
+
DocuBot::Bundle.new(SAMPLES/'empty').wont_be_nil
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "Bundle from empty directory" do
|
|
13
|
+
before do
|
|
14
|
+
@out, @err = capture_io do
|
|
15
|
+
@bundle = DocuBot::Bundle.new SAMPLES/'empty'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should have an empty TOC" do
|
|
20
|
+
@bundle.toc.wont_be_nil
|
|
21
|
+
@bundle.toc.pages.must_be_empty
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should have an empty index" do
|
|
25
|
+
@bundle.index.wont_be_nil
|
|
26
|
+
@bundle.index.entries.must_be_empty
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should have an empty glossary" do
|
|
30
|
+
@bundle.glossary.wont_be_nil
|
|
31
|
+
@bundle.glossary.entries.must_be_empty
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should have an empty external link list" do
|
|
35
|
+
@bundle.external_links.wont_be_nil
|
|
36
|
+
@bundle.external_links.must_be_empty
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should have an empty internal link list" do
|
|
40
|
+
@bundle.internal_links.wont_be_nil
|
|
41
|
+
@bundle.internal_links.must_be_empty
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should have an empty file link list" do
|
|
45
|
+
@bundle.file_links.wont_be_nil
|
|
46
|
+
@bundle.file_links.must_be_empty
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should have an empty broken link list" do
|
|
50
|
+
@bundle.broken_links.wont_be_nil
|
|
51
|
+
@bundle.broken_links.must_be_empty
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should produce no warnings" do
|
|
55
|
+
@err.must_be_empty
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
describe "Gathering links" do
|
|
62
|
+
before do
|
|
63
|
+
@out, @err = capture_io do
|
|
64
|
+
@bundle = DocuBot::Bundle.new SAMPLES/'link_test'
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should have link collections be pages hashed to arrays of strings" do
|
|
69
|
+
%w[ external_links internal_links file_links broken_links ].each do |method|
|
|
70
|
+
collection = @bundle.send(method)
|
|
71
|
+
collection.must_be_kind_of Hash
|
|
72
|
+
collection.keys.each do |key|
|
|
73
|
+
key.must_be_kind_of DocuBot::Page
|
|
74
|
+
end
|
|
75
|
+
collection.values.each do |value|
|
|
76
|
+
value.must_be_kind_of Array
|
|
77
|
+
value.each do |item|
|
|
78
|
+
item.must_be_kind_of String
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should identify (but not validate) external links" do
|
|
85
|
+
known_external = %w[ http://www.google.com/ http://phrogz.net http://phrogz.net/tmp/gkhead.jpg HTTP://NONEXISTENT.SITE ]
|
|
86
|
+
all_external = @bundle.external_links.values.flatten
|
|
87
|
+
known_external.each do |link|
|
|
88
|
+
all_external.must_include link
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should identify and warn about broken internal links" do
|
|
93
|
+
known_broken = %w[
|
|
94
|
+
fork.html sub1.html root.md sub1/inner1.md
|
|
95
|
+
inner2.html ../sub1 sub1/inner1.md
|
|
96
|
+
../index.html ../sub1 ../index.md
|
|
97
|
+
sub2/GORKBO.bin
|
|
98
|
+
]
|
|
99
|
+
all_broken = @bundle.broken_links.values.flatten
|
|
100
|
+
known_broken.each do |link|
|
|
101
|
+
all_broken.must_include link
|
|
102
|
+
@err.must_include link
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should identify valid links to pages or sections" do
|
|
107
|
+
known_internal = %w[
|
|
108
|
+
sub1/inner1.html sub2.html sub2/inner2.html sub1/../sub2/inner2.html
|
|
109
|
+
../root.html inner1.html ../sub2.html ../sub2/inner2.html
|
|
110
|
+
../sub1/index.html index.html
|
|
111
|
+
]
|
|
112
|
+
all_internal = @bundle.internal_links.values.flatten
|
|
113
|
+
known_internal.each do |link|
|
|
114
|
+
all_internal.must_include link
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "should identify valid links to internal files" do
|
|
119
|
+
known_file_links = %w[ ../sub2/bozo.bin bozo.bin sub2/bozo.bin ]
|
|
120
|
+
all_file_links = @bundle.file_links.values.flatten
|
|
121
|
+
known_file_links.each do |link|
|
|
122
|
+
all_file_links.must_include link
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should identify and warn about invalid sub-page anchors" do
|
|
127
|
+
known_broken = %w[ #GORKBO ../root.html#GORKBO ]
|
|
128
|
+
all_broken = @bundle.broken_links.values.flatten
|
|
129
|
+
known_broken.each do |link|
|
|
130
|
+
all_broken.must_include link
|
|
131
|
+
@err.must_include link
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should identify valid sub-page anchors" do
|
|
136
|
+
known_internal = %w[ #sub-id root.html#sub-id ../root.html#sub-id ]
|
|
137
|
+
all_internal = @bundle.internal_links.values.flatten
|
|
138
|
+
known_internal.each do |link|
|
|
139
|
+
all_internal.must_include link
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
data/spec/command.rb
ADDED
data/spec/converters.rb
ADDED
data/spec/glossary.rb
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#encoding: UTF-8
|
|
2
|
+
require File.join(File.dirname(__FILE__), "_helper")
|
|
3
|
+
|
|
4
|
+
describe "Glossary Scanner" do
|
|
5
|
+
before do
|
|
6
|
+
@public_terms = [ "Simple Term", "Complex Term" ]
|
|
7
|
+
@hidden_terms = [ "Secret Term"]
|
|
8
|
+
@all_terms = @public_terms + @hidden_terms
|
|
9
|
+
@expected_paragraphs = {
|
|
10
|
+
"Simple Term" => 2,
|
|
11
|
+
"Complex Term" => 3
|
|
12
|
+
}
|
|
13
|
+
@out, @err = capture_io do
|
|
14
|
+
@bundle = DocuBot::Bundle.new SAMPLES/'glossary'
|
|
15
|
+
@glossary = @bundle.glossary
|
|
16
|
+
@page = @bundle.toc.every_page.find{ |page| page.title=='Glossary' }
|
|
17
|
+
@fulldoc = Nokogiri::HTML( @page.to_html )
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# No _glossary folder handled in the Bundle spec for empty site
|
|
22
|
+
|
|
23
|
+
it "should have one internal entry for each term defined in _glossary" do
|
|
24
|
+
@glossary.entries.size.must_equal @all_terms.length
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should honor page titles as terms" do
|
|
28
|
+
@all_terms.each do |term|
|
|
29
|
+
@glossary.entries[term].wont_be_nil
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "uses DocuBot::Page instances for the definitions" do
|
|
34
|
+
@glossary.entries.values.each do |defn|
|
|
35
|
+
defn.must_be_kind_of DocuBot::Page
|
|
36
|
+
end
|
|
37
|
+
@glossary.entries["Secret Term"].hide.must_equal true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "supports iterating over the entries with each" do
|
|
41
|
+
count = 0
|
|
42
|
+
@glossary.each do |page,defn|
|
|
43
|
+
page.must_be_kind_of String
|
|
44
|
+
defn.must_be_kind_of DocuBot::Page
|
|
45
|
+
count += 1
|
|
46
|
+
end
|
|
47
|
+
count.must_equal @all_terms.length
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
it "uses converters for page content" do
|
|
52
|
+
@expected_paragraphs.each do |term,paras|
|
|
53
|
+
@glossary.entries[term].nokodoc.xpath('//p').length.must_equal paras
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "supports a glossary template that generates HTML for terms" do
|
|
58
|
+
definitions = @fulldoc.xpath('//dt')
|
|
59
|
+
@expected_paragraphs.each do |term,paras|
|
|
60
|
+
dt = definitions.find{ |node| node.inner_text==term }
|
|
61
|
+
dt.wont_be_nil
|
|
62
|
+
dt.next_element.xpath('.//p').length.must_equal paras
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "does not include hidden pages in the output" do
|
|
67
|
+
definitions = @fulldoc.xpath('//dt')
|
|
68
|
+
@hidden_terms.each do |term|
|
|
69
|
+
@fulldoc.at_xpath("//dt[text()='#{term}']").must_be_nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "Glossary Snippet" do
|
|
75
|
+
before do
|
|
76
|
+
@out, @err = capture_io do
|
|
77
|
+
@bundle = DocuBot::Bundle.new SAMPLES/'glossary'
|
|
78
|
+
@glossary = @bundle.glossary
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should know about missing terms" do
|
|
83
|
+
@glossary.missing_terms.must_include "crazy term"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should not mistake alternate text for a missing term" do
|
|
87
|
+
@glossary.missing_terms.wont_include "more complex term"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should warn about missing terms" do
|
|
91
|
+
@err.must_include "crazy term"
|
|
92
|
+
end
|
|
93
|
+
end
|
data/spec/index.rb
ADDED
data/spec/page.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#encoding: UTF-8
|
|
2
|
+
require File.join(File.dirname(__FILE__), "_helper")
|
|
3
|
+
|
|
4
|
+
describe "Pages from 'titletest'" do
|
|
5
|
+
before do
|
|
6
|
+
@bundle = DocuBot::Bundle.new( SAMPLES/'titletest' )
|
|
7
|
+
@toc = @bundle.toc
|
|
8
|
+
end
|
|
9
|
+
it "knows who its bundle is" do
|
|
10
|
+
@toc.pages.each{ |page| page.bundle.must_equal @bundle }
|
|
11
|
+
end
|
|
12
|
+
it "ignores leading numbers for the titles" do
|
|
13
|
+
@toc.pages.each{ |page| page.title.must_match /^\D/ }
|
|
14
|
+
end
|
|
15
|
+
it "honors pages specifying their title" do
|
|
16
|
+
@toc.pages.find{ |page| page.title =~ /renamed/i }.must_be_nil
|
|
17
|
+
@toc.pages.find{ |page| page.title == 'Third One' }.wont_be_nil
|
|
18
|
+
end
|
|
19
|
+
it "replaces underscores with spaces in the title" do
|
|
20
|
+
%w[ First Second Third Fourth Fifth ].each_with_index do |name,i|
|
|
21
|
+
@toc.pages[i].title.must_equal "#{name} One"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
The global root of the site is not a valid link.
|
|
2
|
+
|
|
3
|
+
| external | valid | file | broken |
|
|
4
|
+
-----------------+----------+-------+------+--------+
|
|
5
|
+
| root.md | 1 | 6 | 0 | 5 |
|
|
6
|
+
| sub1/inner1.md | 1 | 5 | 1 | 4 |
|
|
7
|
+
| sub2/inner2.md | 1 | 2 | 1 | 3 |
|
|
8
|
+
| sub2.md | 1 | 0 | 1 | 1 |
|
|
9
|
+
-----------------+----------+-------+------+--------+
|
|
10
|
+
TOTALS | 4 | 13 | 3 | 13 |
|
|
11
|
+
+----------+-------+------+--------+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
[External](http://www.google.com/)
|
|
2
|
+
[Internal](#sub-id)
|
|
3
|
+
[Internal](root.html#sub-id)
|
|
4
|
+
[Internal](sub1/inner1.html)
|
|
5
|
+
[Internal](sub2.html)
|
|
6
|
+
[Internal](sub2/inner2.html)
|
|
7
|
+
[Internal](sub1/../sub2/inner2.html)
|
|
8
|
+
[BROKEN](fork.html)
|
|
9
|
+
[BROKEN](sub1.html)
|
|
10
|
+
[BROKEN](root.md)
|
|
11
|
+
[BROKEN](sub1/inner1.md)
|
|
12
|
+
[BROKEN](#GORKBO)
|
|
13
|
+
|
|
14
|
+
<div id="sub-id">Just in case</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
[External](http://phrogz.net)
|
|
2
|
+
[Internal](../root.html)
|
|
3
|
+
[Internal](../root.html#sub-id)
|
|
4
|
+
[Internal](inner1.html)
|
|
5
|
+
[Internal](../sub2.html)
|
|
6
|
+
[Internal](../sub2/inner2.html)
|
|
7
|
+
[File](../sub2/bozo.bin)
|
|
8
|
+
[BROKEN](inner2.html)
|
|
9
|
+
[BROKEN](../sub1)
|
|
10
|
+
[BROKEN](sub1/inner1.md)
|
|
11
|
+
[BROKEN](../root.html#GORKBO)
|
|
File without changes
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
[External](http://phrogz.net/tmp/gkhead.jpg)
|
|
2
|
+
[Internal](../sub1/index.html) Even though there isn't an index.md file.
|
|
3
|
+
[Internal](index.html) Even though there isn't an index.md file.
|
|
4
|
+
[File](bozo.bin)
|
|
5
|
+
[BROKEN](../index.html) Because the global root is not a valid link.
|
|
6
|
+
[BROKEN](../sub1)
|
|
7
|
+
[BROKEN](../index.md)
|