docubot 0.2.2 → 0.3
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 +4 -0
- data/lib/docubot.rb +5 -1
- data/lib/docubot/bundle.rb +10 -5
- data/lib/docubot/index.rb +5 -4
- data/lib/docubot/page.rb +25 -4
- data/lib/docubot/templates/index.haml +20 -13
- data/lib/docubot/templates/toc.haml +2 -0
- data/lib/docubot/writers/chm.rb +5 -1
- data/lib/docubot/writers/html.rb +3 -0
- data/test/site1_html/A Slight Change of Heart/1 Ze First Page in Ze Section.html +30 -0
- data/test/site1_html/A Slight Change of Heart/2 Another Page in the Section.html +30 -0
- data/test/site1_html/A Slight Change of Heart/3_more_crap.html +42 -0
- data/test/site1_html/A Slight Change of Heart/3_more_crap.html#frist-post +29 -0
- data/test/site1_html/A Slight Change of Heart/3_more_crap.html#moar +29 -0
- data/test/site1_html/A Slight Change of Heart/index.html +28 -0
- data/test/site1_html/_index.html +17 -0
- data/test/site1_html/_toc.html +73 -0
- data/test/site1_html/appendices/gkheadftw.html +32 -0
- data/test/site1_html/appendices/index.html +28 -0
- data/test/site1_html/common.css +108 -0
- data/test/site1_html/glossary-terms.js +1 -0
- data/test/site1_html/headers.html +42 -0
- data/test/site1_html/preamble.html +36 -0
- data/test/site1_html/raw.html +33 -0
- data/test/site1_html/toc.css +0 -0
- data/test/site1_html/toc.js +0 -0
- metadata +38 -28
- data/lib/docubot/shells/nvphysx/0_License.md +0 -3
- data/lib/docubot/shells/nvphysx/1_Getting_Started.haml +0 -51
- data/lib/docubot/shells/nvphysx/Appendix/Glossary.md +0 -7
- data/lib/docubot/shells/nvphysx/_glossary/APEX.md +0 -1
- data/lib/docubot/shells/nvphysx/_glossary/NVIDIA.md +0 -1
- data/lib/docubot/shells/nvphysx/_glossary/PhysX.textile +0 -3
- 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 +0 -264
- data/lib/docubot/shells/nvphysx/_templates/_root/glossary.css +0 -4
- data/lib/docubot/shells/nvphysx/_templates/_root/glossary.js +0 -24
- data/lib/docubot/shells/nvphysx/_templates/_root/nvdevtools.js +0 -31
- 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 +0 -28
- data/lib/docubot/shells/nvphysx/index.txt +0 -5
data/bin/docubot
CHANGED
@@ -99,7 +99,11 @@ if ARGS[:create]
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
else
|
102
|
+
start = Time.now
|
102
103
|
bundle = DocuBot::Bundle.new( ARGS[:directory] )
|
104
|
+
lap = Time.now
|
105
|
+
puts "%.2fs to prepare the bundle..." % (lap-start)
|
103
106
|
bundle.write( ARGS[:writer], ARGS[:output] )
|
107
|
+
puts "%.2fs to write everything." % (Time.now-lap)
|
104
108
|
end
|
105
109
|
|
data/lib/docubot.rb
CHANGED
@@ -20,12 +20,16 @@ module FileUtils
|
|
20
20
|
end
|
21
21
|
|
22
22
|
module DocuBot
|
23
|
-
VERSION = '0.
|
23
|
+
VERSION = '0.3'
|
24
24
|
DIR = File.expand_path( File.dirname( __FILE__ ) )
|
25
25
|
|
26
26
|
TEMPLATE_DIR = DIR / 'docubot/templates'
|
27
27
|
SHELL_DIR = DIR / 'docubot/shells'
|
28
28
|
Dir.chdir( SHELL_DIR ){ SHELLS = Dir['*'] }
|
29
|
+
|
30
|
+
def self.id_from_text( text )
|
31
|
+
text.strip.gsub(/[^\w.:-]+/,'-').gsub(/^-|-$/,'')
|
32
|
+
end
|
29
33
|
end
|
30
34
|
|
31
35
|
require 'docubot/snippet'
|
data/lib/docubot/bundle.rb
CHANGED
@@ -34,11 +34,16 @@ class DocuBot::Bundle
|
|
34
34
|
|
35
35
|
# TODO: Move this bloat elsewhere.
|
36
36
|
if page.toc?
|
37
|
-
|
38
|
-
page.toc
|
39
|
-
|
40
|
-
|
41
|
-
|
37
|
+
ndoc = page.nokodoc
|
38
|
+
toc = page.toc
|
39
|
+
ids = if toc[','] # Comma-delimited toc interpreted as generated ids
|
40
|
+
toc.split(/,\s*/).map{ |title| DocuBot.id_from_text(title) }
|
41
|
+
else
|
42
|
+
toc.scan /[a-z][\w.:-]*/i
|
43
|
+
end
|
44
|
+
ids.each do |id|
|
45
|
+
if ele = ndoc.at_css("##{id}")
|
46
|
+
page << DocuBot::SubLink.new( page, ele.inner_text, id )
|
42
47
|
else
|
43
48
|
warn "Could not find requested toc anchor '##{id}' on #{page.html_path}"
|
44
49
|
end
|
data/lib/docubot/index.rb
CHANGED
@@ -29,14 +29,15 @@ class DocuBot::Index
|
|
29
29
|
def process_page( page )
|
30
30
|
page.keywords.split(/,\s*/).each{ |key| add( key, page ) } if page.keywords?
|
31
31
|
|
32
|
-
|
32
|
+
# FIXME: This is substantially slower (but way more correct) than regexp only.
|
33
33
|
unless page['no-index'] && page['no-index'].include?( 'headings' )
|
34
|
-
|
35
|
-
|
34
|
+
%w[h1 h2 h3 h4 h5 h6].each do |hn|
|
35
|
+
page.nokodoc.css(hn).each{ |head| add( head.inner_text, page ) }
|
36
|
+
end
|
36
37
|
end
|
37
38
|
|
38
39
|
unless page['no-index'] && page['no-index'].include?( 'definitions' )
|
39
|
-
|
40
|
+
page.nokodoc.css("dt").each{ |defn| add( defn.inner_text, page ) }
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
data/lib/docubot/page.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require 'yaml'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
3
5
|
class DocuBot::Page
|
4
6
|
META_SEPARATOR = /^\+\+\+\s*$/ # Sort of like +++ATH0
|
7
|
+
AUTO_ID_ELEMENTS = %w[ h1 h2 h3 h4 h5 h6 legend caption dt ].join(',')
|
5
8
|
|
6
9
|
attr_reader :pages, :type, :folder, :file, :meta
|
7
10
|
attr_accessor :parent, :bundle
|
@@ -32,7 +35,9 @@ class DocuBot::Page
|
|
32
35
|
end
|
33
36
|
|
34
37
|
# Raw markup, untransformed
|
35
|
-
@raw = parts.last
|
38
|
+
if @raw = parts.last && parts.last.strip
|
39
|
+
@raw = @raw
|
40
|
+
end
|
36
41
|
end
|
37
42
|
end
|
38
43
|
def []( key )
|
@@ -89,8 +94,9 @@ class DocuBot::Page
|
|
89
94
|
def to_html
|
90
95
|
return @cached_html if @cached_html
|
91
96
|
|
92
|
-
contents = if @raw
|
97
|
+
contents = if @raw && !@raw.empty?
|
93
98
|
# Directories with no index.* file will not have any @raw
|
99
|
+
# TODO: Swap the order of these once we're sure that all converters will pass raw HTML through.
|
94
100
|
html = DocuBot::convert_to_html( self, @raw, @type )
|
95
101
|
DocuBot::process_snippets( self, html )
|
96
102
|
end
|
@@ -104,14 +110,29 @@ class DocuBot::Page
|
|
104
110
|
haml = master_templates / "#{template}.haml" unless File.exists?( haml )
|
105
111
|
haml = master_templates / "page.haml" unless File.exists?( haml )
|
106
112
|
haml = Haml::Engine.new( IO.read( haml ), DocuBot::Writer::HAML_OPTIONS )
|
107
|
-
|
113
|
+
html = haml.render( Object.new, :contents=>contents, :page=>self, :global=>@bundle.toc, :root=>root )
|
114
|
+
|
115
|
+
# Add IDs to elements, only if a toc entry might reference one.
|
116
|
+
if @raw && @meta['toc'] && @meta['toc'][',']
|
117
|
+
nokodoc( html ).css( AUTO_ID_ELEMENTS ).each do |node|
|
118
|
+
next if node.has_attribute?('id')
|
119
|
+
node['id'] = DocuBot.id_from_text(node.inner_text)
|
120
|
+
end
|
121
|
+
html = @nokodoc.at_css('body').children.to_html
|
122
|
+
end
|
108
123
|
|
109
|
-
@cached_html =
|
124
|
+
@cached_html = html
|
110
125
|
end
|
111
126
|
def to_html!
|
112
127
|
@cached_html=nil
|
113
128
|
to_html
|
114
129
|
end
|
130
|
+
def nokodoc( html=nil )
|
131
|
+
@nokodoc ||= Nokogiri::HTML(html || to_html)
|
132
|
+
end
|
133
|
+
def nokodoc!
|
134
|
+
@nokodoc = Nokogiri::HTML(to_html!)
|
135
|
+
end
|
115
136
|
end
|
116
137
|
|
117
138
|
class DocuBot::SubLink
|
@@ -1,14 +1,21 @@
|
|
1
|
-
|
2
|
-
%
|
3
|
-
|
4
|
-
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
!!! Strict
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%meta(http-equiv='Content-Type' content='text/html; charset=utf-8')
|
5
|
+
%title= global.title + " Index"
|
6
|
+
%link{:rel=>'stylesheet', :type=>'text/css', :href=>"#{root}common.css", :media=>'all'}
|
7
|
+
%body
|
8
|
+
-# TODO: Breakdown by letter.
|
9
|
+
%ul#index
|
10
|
+
- global.index.entries.sort_by{ |k,p| k.downcase }.each do |keyword,pages|
|
11
|
+
- if pages.length == 1
|
12
|
+
%li
|
13
|
+
%a{ :href => pages.first.html_path }= keyword
|
14
|
+
- else
|
15
|
+
%li
|
16
|
+
= keyword
|
17
|
+
%ul
|
18
|
+
- pages.each do |page|
|
19
|
+
%li
|
20
|
+
%a{ :href => page.html_path }= page.title
|
14
21
|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
!!! Strict
|
2
2
|
%html
|
3
3
|
%head
|
4
|
+
%meta(http-equiv='Content-Type' content='text/html; charset=utf-8')
|
4
5
|
%title= global.title
|
6
|
+
%link{:rel=>'stylesheet', :type=>'text/css', :href=>"#{root}common.css", :media=>'all'}
|
5
7
|
%link{:rel=>'stylesheet', :type=>'text/css', :href=>"#{root}toc.css", :media=>'all'}
|
6
8
|
%script{:type=>'text/javascript', :src=>"#{root}toc.js"}
|
7
9
|
%body
|
data/lib/docubot/writers/chm.rb
CHANGED
@@ -8,11 +8,14 @@ class DocuBot::CHMWriter < DocuBot::HTMLWriter
|
|
8
8
|
|
9
9
|
def write( destination=nil )
|
10
10
|
super( nil )
|
11
|
+
lap = Time.now
|
11
12
|
@chm_path = destination || "#{@bundle.source}.chm"
|
12
13
|
@toc = @bundle.toc
|
13
14
|
write_hhc
|
14
15
|
write_hhk
|
15
16
|
write_hhp
|
17
|
+
puts "...%.2fs to write the CHM support files" % ((lap=Time.now)-lap)
|
18
|
+
|
16
19
|
# This will fail if a handle is open to it on Windows
|
17
20
|
begin
|
18
21
|
FileUtils.rm( @chm_path ) if File.exists?( @chm_path )
|
@@ -22,12 +25,13 @@ class DocuBot::CHMWriter < DocuBot::HTMLWriter
|
|
22
25
|
process.Terminate if process.CommandLine.include? @chm_path.gsub('/','\\')
|
23
26
|
end
|
24
27
|
end
|
25
|
-
# TODO: output timing and progress results
|
26
28
|
`hhc.exe "#{FileUtils.win_path @hhp}"`.gsub( /[\r\n]+/, "\n" )
|
29
|
+
puts "...%.2fs to create the CHM" % ((lap=Time.now)-lap)
|
27
30
|
|
28
31
|
# Clean out the intermediary files
|
29
32
|
FileUtils.rm( [ @hhc, @hhp, @hhk ] )
|
30
33
|
FileUtils.rm_r( @html_path )
|
34
|
+
puts "...%.2fs to clean up temporary files" % ((lap=Time.now)-lap)
|
31
35
|
|
32
36
|
# Spin a new thread so it doesn't hold up the Ruby process, but sleep long enough for it to get going.
|
33
37
|
Thread.new{ `hh.exe "#{FileUtils.win_path @chm_path}"` }
|
data/lib/docubot/writers/html.rb
CHANGED
@@ -3,6 +3,8 @@ class DocuBot::HTMLWriter < DocuBot::Writer
|
|
3
3
|
|
4
4
|
# Specify nil for destination to place "<source>_html" next to the source.
|
5
5
|
def write( destination=nil )
|
6
|
+
start = Time.now
|
7
|
+
|
6
8
|
source = @bundle.source
|
7
9
|
@html_path = destination || File.dirname(source)/"#{File.basename source}_html"
|
8
10
|
FileUtils.rm_rf(@html_path) if File.exists?(@html_path)
|
@@ -54,6 +56,7 @@ class DocuBot::HTMLWriter < DocuBot::Writer
|
|
54
56
|
File.open( 'glossary-terms.js', 'w' ){ |f| f << @bundle.glossary.to_js }
|
55
57
|
end
|
56
58
|
|
59
|
+
puts "...%.2fs to write the HTML" % (Time.now - start)
|
57
60
|
end
|
58
61
|
end
|
59
62
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
5
|
+
<link href='../common.css' media='all' rel='stylesheet' type='text/css'>
|
6
|
+
<title>Ze First Page in Ze Section</title>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id='content'>
|
10
|
+
<div id='pagetop'>
|
11
|
+
<div id='breadcrumb'>
|
12
|
+
Table of Contents
|
13
|
+
<span class='sep'>></span>
|
14
|
+
<a href='../A Slight Change of Heart/index.html'>A Slight Change of Heart</a>
|
15
|
+
<span class='sep'>></span>
|
16
|
+
Ze First Page in Ze Section
|
17
|
+
</div>
|
18
|
+
<h1 id='title'>Ze First Page in Ze Section</h1>
|
19
|
+
</div>
|
20
|
+
<div id='pagebody'>
|
21
|
+
<div id='mainbody'><p>The title of this should be "Ze First Page in Ze Section"</p>
|
22
|
+
</div>
|
23
|
+
<div id='pagefooter'>
|
24
|
+
Copyright ©2010.
|
25
|
+
All Rights Reserved.
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</body>
|
30
|
+
</html>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
5
|
+
<link href='../common.css' media='all' rel='stylesheet' type='text/css'>
|
6
|
+
<title>Another Page in the Section</title>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id='content'>
|
10
|
+
<div id='pagetop'>
|
11
|
+
<div id='breadcrumb'>
|
12
|
+
Table of Contents
|
13
|
+
<span class='sep'>></span>
|
14
|
+
<a href='../A Slight Change of Heart/index.html'>A Slight Change of Heart</a>
|
15
|
+
<span class='sep'>></span>
|
16
|
+
Another Page in the Section
|
17
|
+
</div>
|
18
|
+
<h1 id='title'>Another Page in the Section</h1>
|
19
|
+
</div>
|
20
|
+
<div id='pagebody'>
|
21
|
+
<div id='mainbody'><p>The title of this page should be "Another Page in the Section".</p>
|
22
|
+
</div>
|
23
|
+
<div id='pagefooter'>
|
24
|
+
Copyright ©2010.
|
25
|
+
All Rights Reserved.
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</body>
|
30
|
+
</html>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
5
|
+
<link href='../common.css' media='all' rel='stylesheet' type='text/css'>
|
6
|
+
<title>Additional Helpful Information</title>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id='content'>
|
10
|
+
<div id='pagetop'>
|
11
|
+
<div id='breadcrumb'>
|
12
|
+
Table of Contents
|
13
|
+
<span class='sep'>></span>
|
14
|
+
<a href='../A Slight Change of Heart/index.html'>A Slight Change of Heart</a>
|
15
|
+
<span class='sep'>></span>
|
16
|
+
Additional Helpful Information
|
17
|
+
</div>
|
18
|
+
<h1 id='title'>Additional Helpful Information</h1>
|
19
|
+
<div id='author'>Gavin Kistner</div>
|
20
|
+
</div>
|
21
|
+
<div id='pagebody'>
|
22
|
+
<div id='mainbody'><h2 id='frist-post'>Title Verification</h2>
|
23
|
+
<p>The title of this page should be "Additional Helpful Information", not "More Crap".</p>
|
24
|
+
<h2 id='moar'>TOC Verification</h2>
|
25
|
+
<p>The TOC for this page should have sub-entries for the referenced headings.</p>
|
26
|
+
|
27
|
+
<ul>
|
28
|
+
<li>The links should be named for the headings.</li>
|
29
|
+
<li>The links should link to the headings.</li>
|
30
|
+
</ul>
|
31
|
+
<h2 id='dumb'>Exclusivity</h2>
|
32
|
+
<p>The TOC should not, however, have this last heading.</p>
|
33
|
+
|
34
|
+
</div>
|
35
|
+
<div id='pagefooter'>
|
36
|
+
Copyright ©2010.
|
37
|
+
All Rights Reserved.
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
</body>
|
42
|
+
</html>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
5
|
+
<link href='../common.css' media='all' rel='stylesheet' type='text/css'>
|
6
|
+
<title>Title Verification</title>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id='content'>
|
10
|
+
<div id='pagetop'>
|
11
|
+
<div id='breadcrumb'>
|
12
|
+
Table of Contents
|
13
|
+
<span class='sep'>></span>
|
14
|
+
<a href='../A Slight Change of Heart/index.html'>A Slight Change of Heart</a>
|
15
|
+
<span class='sep'>></span>
|
16
|
+
Title Verification
|
17
|
+
</div>
|
18
|
+
<h1 id='title'>Title Verification</h1>
|
19
|
+
</div>
|
20
|
+
<div id='pagebody'>
|
21
|
+
<div id='mainbody'></div>
|
22
|
+
<div id='pagefooter'>
|
23
|
+
Copyright ©2010.
|
24
|
+
All Rights Reserved.
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</body>
|
29
|
+
</html>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
5
|
+
<link href='../common.css' media='all' rel='stylesheet' type='text/css'>
|
6
|
+
<title>TOC Verification</title>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id='content'>
|
10
|
+
<div id='pagetop'>
|
11
|
+
<div id='breadcrumb'>
|
12
|
+
Table of Contents
|
13
|
+
<span class='sep'>></span>
|
14
|
+
<a href='../A Slight Change of Heart/index.html'>A Slight Change of Heart</a>
|
15
|
+
<span class='sep'>></span>
|
16
|
+
TOC Verification
|
17
|
+
</div>
|
18
|
+
<h1 id='title'>TOC Verification</h1>
|
19
|
+
</div>
|
20
|
+
<div id='pagebody'>
|
21
|
+
<div id='mainbody'></div>
|
22
|
+
<div id='pagefooter'>
|
23
|
+
Copyright ©2010.
|
24
|
+
All Rights Reserved.
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</body>
|
29
|
+
</html>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
5
|
+
<link href='../common.css' media='all' rel='stylesheet' type='text/css'>
|
6
|
+
<title>A Slight Change of Heart</title>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id='content'>
|
10
|
+
<div id='pagetop'>
|
11
|
+
<div id='breadcrumb'>
|
12
|
+
Table of Contents
|
13
|
+
<span class='sep'>></span>
|
14
|
+
A Slight Change of Heart
|
15
|
+
</div>
|
16
|
+
<h1 id='title'>A Slight Change of Heart</h1>
|
17
|
+
</div>
|
18
|
+
<div id='pagebody'>
|
19
|
+
<div id='mainbody'>
|
20
|
+
</div>
|
21
|
+
<div id='pagefooter'>
|
22
|
+
Copyright ©2010.
|
23
|
+
All Rights Reserved.
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</body>
|
28
|
+
</html>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<ul id='index'>
|
2
|
+
<li>
|
3
|
+
<a href='headers.html'>Delivery Options</a>
|
4
|
+
</li>
|
5
|
+
<li>
|
6
|
+
<a href='A Slight Change of Heart/3_more_crap.html'>Exclusivity</a>
|
7
|
+
</li>
|
8
|
+
<li>
|
9
|
+
<a href='headers.html'>I like Chicken, I like Liver</a>
|
10
|
+
</li>
|
11
|
+
<li>
|
12
|
+
<a href='A Slight Change of Heart/3_more_crap.html'>Title Verification</a>
|
13
|
+
</li>
|
14
|
+
<li>
|
15
|
+
<a href='A Slight Change of Heart/3_more_crap.html'>TOC Verification</a>
|
16
|
+
</li>
|
17
|
+
</ul>
|