TwP-webby 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/History.txt +13 -0
  2. data/Manifest.txt +44 -34
  3. data/Rakefile +2 -2
  4. data/bin/webby +33 -0
  5. data/bin/webby-gen +33 -0
  6. data/examples/presentation/content/presentation/s5/bodybg.gif +0 -0
  7. data/examples/presentation/content/presentation/s5/print.css +25 -1
  8. data/examples/webby/content/release-notes/rel-0-9-3/index.txt +47 -0
  9. data/lib/webby/apps/generator.rb +41 -48
  10. data/lib/webby/apps/main.rb +22 -0
  11. data/lib/webby/auto_builder.rb +78 -6
  12. data/lib/webby/builder.rb +9 -9
  13. data/lib/webby/core_ext/kernel.rb +5 -0
  14. data/lib/webby/filters/wiki_words.rb +14 -0
  15. data/lib/webby/helpers/url_helper.rb +6 -0
  16. data/lib/webby/journal.rb +126 -0
  17. data/lib/webby/renderer.rb +11 -6
  18. data/lib/webby/resources/meta_file.rb +8 -5
  19. data/lib/webby/stelan/paginator.rb +2 -2
  20. data/lib/webby/tasks/growl.rake +4 -3
  21. data/lib/webby.rb +3 -10
  22. data/spec/data/outline/basic.out +81 -0
  23. data/spec/data/outline/basic.txt +25 -0
  24. data/spec/data/outline/no_clobber.out +86 -0
  25. data/spec/data/outline/numbering.out +81 -0
  26. data/spec/data/outline/numbering_only.out +21 -0
  27. data/spec/data/outline/toc_range_1.out +66 -0
  28. data/spec/data/outline/toc_range_2.out +55 -0
  29. data/spec/data/outline/toc_style.out +81 -0
  30. data/spec/data/{Sitefile → site/Sitefile} +0 -0
  31. data/spec/data/{content → site/content}/_partial.txt +0 -0
  32. data/spec/data/{content → site/content}/css/coderay.css +0 -0
  33. data/spec/data/{content → site/content}/css/site.css +0 -0
  34. data/spec/data/{content → site/content}/css/tumblog.css +0 -0
  35. data/spec/data/{content → site/content}/images/tumblog/permalink.gif +0 -0
  36. data/spec/data/{content → site/content}/images/tumblog/rss.gif +0 -0
  37. data/spec/data/{content → site/content}/index.txt +0 -0
  38. data/spec/data/{content → site/content}/photos.txt +0 -0
  39. data/spec/data/{content → site/content}/tumblog/200806/the-noble-chicken/index.txt +0 -0
  40. data/spec/data/{content → site/content}/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +0 -0
  41. data/spec/data/{content → site/content}/tumblog/200807/mad-city-chickens/index.txt +0 -0
  42. data/spec/data/{content → site/content}/tumblog/200807/the-wisdom-of-the-dutch/index.txt +0 -0
  43. data/spec/data/{content → site/content}/tumblog/200807/up-a-tree/index.txt +0 -0
  44. data/spec/data/{content → site/content}/tumblog/index.txt +0 -0
  45. data/spec/data/{content → site/content}/tumblog/rss.txt +0 -0
  46. data/spec/data/{layouts → site/layouts}/default.txt +0 -0
  47. data/spec/data/{layouts → site/layouts}/tumblog/default.txt +0 -0
  48. data/spec/data/{layouts → site/layouts}/tumblog/post.txt +0 -0
  49. data/spec/data/{lib → site/lib}/breadcrumbs.rb +0 -0
  50. data/spec/data/{lib → site/lib}/tumblog_helper.rb +0 -0
  51. data/spec/data/{tasks → site/tasks}/tumblog.rake +0 -0
  52. data/spec/data/{templates → site/templates}/_partial.erb +0 -0
  53. data/spec/data/{templates → site/templates}/atom_feed.erb +0 -0
  54. data/spec/data/{templates → site/templates}/page.erb +0 -0
  55. data/{examples/website → spec/data/site}/templates/presentation.erb +0 -0
  56. data/spec/data/{templates → site/templates}/tumblog/conversation.erb +0 -0
  57. data/spec/data/{templates → site/templates}/tumblog/link.erb +0 -0
  58. data/spec/data/{templates → site/templates}/tumblog/photo.erb +0 -0
  59. data/spec/data/{templates → site/templates}/tumblog/post.erb +0 -0
  60. data/spec/data/{templates → site/templates}/tumblog/quote.erb +0 -0
  61. data/spec/spec_helper.rb +4 -4
  62. data/spec/webby/apps/generator_spec.rb +3 -2
  63. data/spec/webby/filters/basepath_spec.rb +167 -0
  64. data/spec/webby/filters/outline_spec.rb +92 -0
  65. data/spec/webby/renderer_spec.rb +1 -1
  66. data/spec/webby/resources/db_spec.rb +1 -1
  67. data/spec/webby/resources/layout_spec.rb +1 -1
  68. data/spec/webby/resources/meta_file_spec.rb +27 -13
  69. data/spec/webby/resources/page_spec.rb +1 -1
  70. data/spec/webby/resources/resource_spec.rb +1 -1
  71. data/spec/webby/resources_spec.rb +1 -1
  72. data/tasks/gem.rake +93 -32
  73. data/tasks/manifest.rake +3 -4
  74. data/tasks/rubyforge.rake +2 -4
  75. metadata +67 -57
  76. data/lib/webby/stelan/spawner.rb +0 -339
  77. data/lib/webby/tasks/heel.rake +0 -28
  78. data/spec/data/templates/presentation.erb +0 -40
data/lib/webby/builder.rb CHANGED
@@ -82,7 +82,6 @@ class Builder
82
82
  [args.page, args.title, args.dir]
83
83
  end
84
84
 
85
-
86
85
  private
87
86
 
88
87
  # Returns the binding in the scope of the Builder class object.
@@ -98,7 +97,7 @@ class Builder
98
97
  # layout directories.
99
98
  #
100
99
  def initialize
101
- @log = Logging::Logger[self]
100
+ @logger = Logging::Logger[self]
102
101
  end
103
102
 
104
103
  # call-seq:
@@ -125,24 +124,25 @@ class Builder
125
124
  #
126
125
  def run( opts = {} )
127
126
  opts[:load_files] = true unless opts.has_key?(:load_files)
127
+ verbose = opts.getopt(:verbose, true)
128
128
 
129
129
  unless test(?d, output_dir)
130
- @log.info "creating #{output_dir}"
130
+ journal.create output_dir
131
131
  FileUtils.mkdir output_dir
132
132
  end
133
133
 
134
134
  load_files if opts[:load_files]
135
135
 
136
136
  Resources.pages.each do |page|
137
- next unless page.dirty? or opts[:rebuild]
138
-
139
- @log.info "creating #{page.destination}"
140
-
141
- # make sure the directory exists
142
- FileUtils.mkdir_p ::File.dirname(page.destination)
137
+ unless page.dirty? or opts[:rebuild]
138
+ journal.identical(page.destination) if verbose
139
+ next
140
+ end
143
141
 
144
142
  # copy the resource to the output directory if it is static
145
143
  if page.instance_of? Resources::Static
144
+ FileUtils.mkdir_p ::File.dirname(page.destination)
145
+ journal.create_or_update(page)
146
146
  FileUtils.cp page.path, page.destination
147
147
  FileUtils.chmod 0644, page.destination
148
148
 
@@ -16,6 +16,11 @@ module Kernel
16
16
  STDERR.reopen io.last
17
17
  $stdout, $stderr = STDOUT, STDERR
18
18
  end
19
+
20
+ def journal
21
+ @journal ||= ::Webby::Journal.new
22
+ end
23
+
19
24
  end # module Kernel
20
25
 
21
26
  # EOF
@@ -0,0 +1,14 @@
1
+
2
+ Webby::Filters.register :wikiwords do |input, cursor|
3
+
4
+ renderer = cursor.renderer
5
+ input.gsub %r/\[\[([^\]]+)\]\]/ do
6
+ name = $1
7
+ renderer.link_to_page(name) {
8
+ %Q(<a class="missing internal">#{name}</a>)
9
+ }
10
+ end
11
+
12
+ end
13
+
14
+ # EOF
@@ -159,6 +159,9 @@ module UrlHelper
159
159
  #
160
160
  def link_to_page( *args )
161
161
  self.link_to(*_find_page(args))
162
+ rescue ::Webby::Error => err
163
+ return yield if block_given?
164
+ raise err
162
165
  end
163
166
 
164
167
  # call-seq:
@@ -184,6 +187,9 @@ module UrlHelper
184
187
  return name if @page == page
185
188
 
186
189
  self.link_to(name, page, link_opts)
190
+ rescue ::Webby::Error => err
191
+ return yield if block_given?
192
+ raise err
187
193
  end
188
194
 
189
195
 
@@ -0,0 +1,126 @@
1
+
2
+ module Webby
3
+
4
+ # The Journal class is used to output simple messages regarding the creation
5
+ # and updating of files when webby applications are run. The output messages
6
+ # will be color coded if the terminal supports the ANSI codes.
7
+ #
8
+ class Journal
9
+
10
+ attr_accessor :colorize
11
+ attr_reader :logger
12
+
13
+ # Create a new journal
14
+ #
15
+ def initialize
16
+ @logger = ::Logging::Logger[self]
17
+ @colorize = ENV.has_key?('TERM')
18
+ end
19
+
20
+ # Output a message of the given _type_ using the option _color_ code. The
21
+ # available codes are as follows:
22
+ #
23
+ # * black
24
+ # * red
25
+ # * green
26
+ # * yellow
27
+ # * blue
28
+ # * magenta
29
+ # * cyan
30
+ # * white
31
+ #
32
+ # The color is specified as a string or a symbol.
33
+ #
34
+ def typed_message( type, msg, color = nil )
35
+ type = type.to_s.rjust(13)
36
+ type = self.send(color, type) unless color.nil?
37
+ logger.info "#{type} #{msg.to_s}"
38
+ end
39
+
40
+ # Output a "create" message or an "update" message depending on whether
41
+ # the given _page_ already has a generated output file or not.
42
+ #
43
+ def create_or_update( page )
44
+ if test(?e, page.destination)
45
+ update(page.destination)
46
+ else
47
+ create(page.destination)
48
+ end
49
+ end
50
+
51
+ # Output a create message.
52
+ #
53
+ def create( msg )
54
+ typed_message('create', msg, (colorize ? :green : nil))
55
+ end
56
+
57
+ # Output an update message.
58
+ #
59
+ def update( msg )
60
+ typed_message('update', msg, (colorize ? :yellow : nil))
61
+ end
62
+
63
+ # Output a force message.
64
+ #
65
+ def force( msg )
66
+ typed_message('force', msg, (colorize ? :red : nil))
67
+ end
68
+
69
+ # Output a skip message.
70
+ #
71
+ def skip( msg )
72
+ typed_message('skip', msg, (colorize ? :yellow : nil))
73
+ end
74
+
75
+ # Output an exists message.
76
+ #
77
+ def exists( msg )
78
+ typed_message('exists', msg, (colorize ? :cyan : nil))
79
+ end
80
+
81
+ # Output an identical message.
82
+ #
83
+ def identical( msg )
84
+ typed_message('identical', msg, (colorize ? :cyan : nil))
85
+ end
86
+
87
+ [ [ :clear , 0 ],
88
+ [ :reset , 0 ], # synonym for :clear
89
+ [ :bold , 1 ],
90
+ [ :dark , 2 ],
91
+ [ :italic , 3 ], # not widely implemented
92
+ [ :underline , 4 ],
93
+ [ :underscore , 4 ], # synonym for :underline
94
+ [ :blink , 5 ],
95
+ [ :rapid_blink , 6 ], # not widely implemented
96
+ [ :negative , 7 ], # no reverse because of String#reverse
97
+ [ :concealed , 8 ],
98
+ [ :strikethrough, 9 ], # not widely implemented
99
+ [ :black , 30 ],
100
+ [ :red , 31 ],
101
+ [ :green , 32 ],
102
+ [ :yellow , 33 ],
103
+ [ :blue , 34 ],
104
+ [ :magenta , 35 ],
105
+ [ :cyan , 36 ],
106
+ [ :white , 37 ],
107
+ [ :on_black , 40 ],
108
+ [ :on_red , 41 ],
109
+ [ :on_green , 42 ],
110
+ [ :on_yellow , 43 ],
111
+ [ :on_blue , 44 ],
112
+ [ :on_magenta , 45 ],
113
+ [ :on_cyan , 46 ],
114
+ [ :on_white , 47 ] ].each do |name,code|
115
+
116
+ class_eval <<-CODE
117
+ def #{name.to_s}( str )
118
+ "\e[#{code}m\#{str}\e[0m"
119
+ end
120
+ CODE
121
+ end
122
+
123
+ end # class Journal
124
+ end # module Webby
125
+
126
+ # EOF
@@ -36,6 +36,9 @@ class Renderer
36
36
  renderer = self.new(page)
37
37
 
38
38
  loop {
39
+ FileUtils.mkdir_p ::File.dirname(page.destination)
40
+ journal.create_or_update(page)
41
+
39
42
  ::File.open(page.destination, 'w') do |fd|
40
43
  fd.write(renderer._layout_page)
41
44
  end
@@ -43,6 +46,8 @@ class Renderer
43
46
  }
44
47
  end
45
48
 
49
+ attr_reader :logger
50
+
46
51
  # call-seq:
47
52
  # Renderer.new( page )
48
53
  #
@@ -64,7 +69,7 @@ class Renderer
64
69
 
65
70
  @_bindings = []
66
71
  @_content_for = {}
67
- @log = Logging::Logger[self]
72
+ @logger = Logging::Logger[self]
68
73
  end
69
74
 
70
75
  # call-seq:
@@ -227,11 +232,11 @@ class Renderer
227
232
 
228
233
  @content
229
234
  rescue ::Webby::Error => err
230
- @log.error "while rendering page '#{@page.path}'"
231
- @log.error err.message
235
+ logger.error "while rendering page '#{@page.path}'"
236
+ logger.error err.message
232
237
  rescue => err
233
- @log.error "while rendering page '#{@page.path}'"
234
- @log.fatal err
238
+ logger.error "while rendering page '#{@page.path}'"
239
+ logger.fatal err
235
240
  exit 1
236
241
  ensure
237
242
  @content = nil
@@ -271,7 +276,7 @@ class Renderer
271
276
  @_content_for.clear
272
277
  @_bindings.clear
273
278
  else
274
- @pager.pager.done
279
+ @pager.pager.reset
275
280
  @pager = nil
276
281
  return false
277
282
  end
@@ -74,7 +74,9 @@ class MetaFile
74
74
  # found at the beginning of the stream.
75
75
  #
76
76
  def read
77
- @io.seek(meta_end || 0)
77
+ count = meta_end
78
+ @io.seek 0
79
+ count.times {@io.gets} unless count.nil?
78
80
  @io.read
79
81
  end
80
82
 
@@ -188,12 +190,13 @@ class MetaFile
188
190
  return unless META_SEP =~ line
189
191
 
190
192
  @io.seek 0
191
- pos = nil
192
- buffer = @io.gets.length
193
+ @io.gets
194
+ pos, count = nil, 1
195
+
193
196
  while line = @io.gets
194
- buffer += line.length
197
+ count += 1
195
198
  if META_SEP =~ line
196
- pos = buffer
199
+ pos = count
197
200
  @meta_count += 1
198
201
  end
199
202
  end
@@ -73,7 +73,7 @@ class Paginator
73
73
  end
74
74
 
75
75
  # Finalizer method that should be called when the paginator is finished
76
- def done
76
+ def reset
77
77
  resource._reset(@meta_data)
78
78
  end
79
79
 
@@ -92,7 +92,7 @@ class Paginator
92
92
  @offset = (number - 1) * pager.per_page
93
93
  @select = select
94
94
 
95
- @pager.resource._reset
95
+ @pager.reset
96
96
  if number > 1
97
97
  if ::Webby.site.create_mode == 'directory'
98
98
  @pager.resource['directory'] = File.join(@pager.directory, number.to_s)
@@ -2,12 +2,13 @@
2
2
  unless WINDOWS
3
3
 
4
4
  task :growl do
5
- Logging::Logger['Webby'].add_appenders(Logging::Appenders::Growl.new(
6
- "Webby",
5
+ growl = Logging::Appenders::Growl.new('growl',
7
6
  :layout => Logging::Layouts::Pattern.new(:pattern => "%5l - Webby\000%m"),
8
7
  :coalesce => true,
9
8
  :separator => "\000"
10
- ))
9
+ )
10
+ Logging::Logger['Webby'].add_appenders(growl)
11
+ Logging::Logger['Webby::Journal'].add_appenders(growl)
11
12
  end
12
13
 
13
14
  end # unless WINDOWS
data/lib/webby.rb CHANGED
@@ -7,18 +7,10 @@ require 'logging'
7
7
  require 'ostruct'
8
8
  require 'date'
9
9
 
10
- # Configure Webby to log to STDOUT at the 'info' level
11
- Logging::Logger['Webby'].level = :info
12
- Logging::Logger['Webby'].add_appenders(Logging::Appender.stdout)
13
- Logging::Appender.stdout.layout = Logging::Layouts::Pattern.new(
14
- :pattern => "[%d] %5l: %m\n", # [date] LEVEL: message
15
- :date_pattern => "%H:%M:%S" # date == HH:MM:SS
16
- )
17
-
18
10
  module Webby
19
11
 
20
12
  # :stopdoc:
21
- VERSION = '0.9.2' # :nodoc:
13
+ VERSION = '0.9.3' # :nodoc:
22
14
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
23
15
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
24
16
  YAML_SEP = '---'
@@ -51,7 +43,8 @@ module Webby
51
43
  :tumblog_dir => 'tumblog',
52
44
 
53
45
  # Items for running the heel webserver
54
- :heel_port => 4331,
46
+ :use_web_server => true,
47
+ :heel_port => 4331,
55
48
 
56
49
  # Items used to deploy the website
57
50
  :user => ENV['USER'] || ENV['USERNAME'],
@@ -0,0 +1,81 @@
1
+ <ol>
2
+ <li>
3
+ <a href="#h1">First Header</a>
4
+ <ol>
5
+ <li>
6
+ <a href="#h1_1">Second Header</a>
7
+ </li>
8
+ <li>
9
+ <a href="#h1_2">Third Header</a>
10
+ </li>
11
+ </ol>
12
+ </li>
13
+ <li>
14
+ <a href="#h2">Fourth Header</a>
15
+ </li>
16
+ <li>
17
+ <a href="#h3">Fifth Header</a>
18
+ <ol>
19
+ <li>
20
+ <a href="#h3_1">Sixth Header</a>
21
+ <ol>
22
+ <li>
23
+ <a href="#h3_1_1">Seventh Header</a>
24
+ <ol>
25
+ <li>
26
+ <a href="#h3_1_1_1">Eighth Header</a>
27
+ <ol>
28
+ <li>
29
+ <a href="#h3_1_1_1_1">Ninth Header</a>
30
+ <ol>
31
+ <li>
32
+ <a href="#h3_1_1_1_1_1">Tenth Header</a>
33
+ </li>
34
+ </ol>
35
+ </li>
36
+ </ol>
37
+ </li>
38
+ </ol>
39
+ </li>
40
+ </ol>
41
+ </li>
42
+ <li>
43
+ <a href="#h3_2">Eleventh Header</a>
44
+ <ol>
45
+ <li>
46
+ <a href="#h3_2_1">Twelfth Header</a>
47
+ </li>
48
+ <li>
49
+ <a href="#h3_2_2">Thirteenth Header</a>
50
+ </li>
51
+ </ol>
52
+ </li>
53
+ </ol>
54
+ </li>
55
+ <li>
56
+ <a href="#h4">Fourteenth Header</a>
57
+ <ol>
58
+ <li>
59
+ <a href="#h4_1">Fifteenth Header</a>
60
+ </li>
61
+ </ol></li></ol>
62
+
63
+ <h1 id="h1"><span class="heading-num">1</span>First Header</h1>
64
+ <h2 id="h1_1"><span class="heading-num">1.1</span>Second Header</h2>
65
+ <h2 id="h1_2"><span class="heading-num">1.2</span>Third Header</h2>
66
+
67
+ <h1 id="h2"><span class="heading-num">2</span>Fourth Header</h1>
68
+
69
+ <h1 id="h3"><span class="heading-num">3</span>Fifth Header</h1>
70
+ <h2 id="h3_1"><span class="heading-num">3.1</span>Sixth Header</h2>
71
+ <h3 id="h3_1_1"><span class="heading-num">3.1.1</span>Seventh Header</h3>
72
+ <h4 id="h3_1_1_1"><span class="heading-num">3.1.1.1</span>Eighth Header</h4>
73
+ <h5 id="h3_1_1_1_1"><span class="heading-num">3.1.1.1.1</span>Ninth Header</h5>
74
+ <h6 id="h3_1_1_1_1_1"><span class="heading-num">3.1.1.1.1.1</span>Tenth Header</h6>
75
+
76
+ <h2 id="h3_2"><span class="heading-num">3.2</span>Eleventh Header</h2>
77
+ <h3 id="h3_2_1"><span class="heading-num">3.2.1</span>Twelfth Header</h3>
78
+ <h3 id="h3_2_2"><span class="heading-num">3.2.2</span>Thirteenth Header</h3>
79
+
80
+ <h1 id="h4"><span class="heading-num">4</span>Fourteenth Header</h1>
81
+ <h2 id="h4_1"><span class="heading-num">4.1</span>Fifteenth Header</h2>
@@ -0,0 +1,25 @@
1
+ ---
2
+ title: Outline Test
3
+ filter: outline
4
+ ---
5
+ <toc />
6
+
7
+ <h1>First Header</h1>
8
+ <h2>Second Header</h2>
9
+ <h2>Third Header</h2>
10
+
11
+ <h1>Fourth Header</h1>
12
+
13
+ <h1>Fifth Header</h1>
14
+ <h2>Sixth Header</h2>
15
+ <h3>Seventh Header</h3>
16
+ <h4>Eighth Header</h4>
17
+ <h5>Ninth Header</h5>
18
+ <h6>Tenth Header</h6>
19
+
20
+ <h2>Eleventh Header</h2>
21
+ <h3>Twelfth Header</h3>
22
+ <h3>Thirteenth Header</h3>
23
+
24
+ <h1>Fourteenth Header</h1>
25
+ <h2>Fifteenth Header</h2>
@@ -0,0 +1,86 @@
1
+ <div>
2
+ <p>This is the title</p>
3
+ <ol>
4
+ <li>
5
+ <a href="#h1">First Header</a>
6
+ <ol>
7
+ <li>
8
+ <a href="#h1_1">Second Header</a>
9
+ </li>
10
+ <li>
11
+ <a href="#h1_2">Third Header</a>
12
+ </li>
13
+ </ol>
14
+ </li>
15
+ <li>
16
+ <a href="#h2">Fourth Header</a>
17
+ </li>
18
+ <li>
19
+ <a href="#h3">Fifth Header</a>
20
+ <ol>
21
+ <li>
22
+ <a href="#h3_1">Sixth Header</a>
23
+ <ol>
24
+ <li>
25
+ <a href="#h3_1_1">Seventh Header</a>
26
+ <ol>
27
+ <li>
28
+ <a href="#h3_1_1_1">Eighth Header</a>
29
+ <ol>
30
+ <li>
31
+ <a href="#h3_1_1_1_1">Ninth Header</a>
32
+ <ol>
33
+ <li>
34
+ <a href="#h3_1_1_1_1_1">Tenth Header</a>
35
+ </li>
36
+ </ol>
37
+ </li>
38
+ </ol>
39
+ </li>
40
+ </ol>
41
+ </li>
42
+ </ol>
43
+ </li>
44
+ <li>
45
+ <a href="#h3_2">Eleventh Header</a>
46
+ <ol>
47
+ <li>
48
+ <a href="#h3_2_1">Twelfth Header</a>
49
+ </li>
50
+ <li>
51
+ <a href="#h3_2_2">Thirteenth Header</a>
52
+ </li>
53
+ </ol>
54
+ </li>
55
+ </ol>
56
+ </li>
57
+ <li>
58
+ <a href="#h4">Fourteenth Header</a>
59
+ <ol>
60
+ <li>
61
+ <a href="#h4_1">Fifteenth Header</a>
62
+ </li>
63
+ </ol></li></ol>
64
+ <p>And some sampler text</p>
65
+ </div>
66
+
67
+
68
+ <h1 id="h1"><span class="heading-num">1</span>First Header</h1>
69
+ <h2 id="h1_1"><span class="heading-num">1.1</span>Second Header</h2>
70
+ <h2 id="h1_2"><span class="heading-num">1.2</span>Third Header</h2>
71
+
72
+ <h1 id="h2"><span class="heading-num">2</span>Fourth Header</h1>
73
+
74
+ <h1 id="h3"><span class="heading-num">3</span>Fifth Header</h1>
75
+ <h2 id="h3_1"><span class="heading-num">3.1</span>Sixth Header</h2>
76
+ <h3 id="h3_1_1"><span class="heading-num">3.1.1</span>Seventh Header</h3>
77
+ <h4 id="h3_1_1_1"><span class="heading-num">3.1.1.1</span>Eighth Header</h4>
78
+ <h5 id="h3_1_1_1_1"><span class="heading-num">3.1.1.1.1</span>Ninth Header</h5>
79
+ <h6 id="h3_1_1_1_1_1"><span class="heading-num">3.1.1.1.1.1</span>Tenth Header</h6>
80
+
81
+ <h2 id="h3_2"><span class="heading-num">3.2</span>Eleventh Header</h2>
82
+ <h3 id="h3_2_1"><span class="heading-num">3.2.1</span>Twelfth Header</h3>
83
+ <h3 id="h3_2_2"><span class="heading-num">3.2.2</span>Thirteenth Header</h3>
84
+
85
+ <h1 id="h4"><span class="heading-num">4</span>Fourteenth Header</h1>
86
+ <h2 id="h4_1"><span class="heading-num">4.1</span>Fifteenth Header</h2>
@@ -0,0 +1,81 @@
1
+ <ol start="3">
2
+ <li>
3
+ <a href="#h3">First Header</a>
4
+ <ol>
5
+ <li>
6
+ <a href="#h3_1">Second Header</a>
7
+ </li>
8
+ <li>
9
+ <a href="#h3_2">Third Header</a>
10
+ </li>
11
+ </ol>
12
+ </li>
13
+ <li>
14
+ <a href="#h4">Fourth Header</a>
15
+ </li>
16
+ <li>
17
+ <a href="#h5">Fifth Header</a>
18
+ <ol>
19
+ <li>
20
+ <a href="#h5_1">Sixth Header</a>
21
+ <ol>
22
+ <li>
23
+ <a href="#h5_1_1">Seventh Header</a>
24
+ <ol>
25
+ <li>
26
+ <a href="#h5_1_1_1">Eighth Header</a>
27
+ <ol>
28
+ <li>
29
+ <a href="#h5_1_1_1_1">Ninth Header</a>
30
+ <ol>
31
+ <li>
32
+ <a href="#h5_1_1_1_1_1">Tenth Header</a>
33
+ </li>
34
+ </ol>
35
+ </li>
36
+ </ol>
37
+ </li>
38
+ </ol>
39
+ </li>
40
+ </ol>
41
+ </li>
42
+ <li>
43
+ <a href="#h5_2">Eleventh Header</a>
44
+ <ol>
45
+ <li>
46
+ <a href="#h5_2_1">Twelfth Header</a>
47
+ </li>
48
+ <li>
49
+ <a href="#h5_2_2">Thirteenth Header</a>
50
+ </li>
51
+ </ol>
52
+ </li>
53
+ </ol>
54
+ </li>
55
+ <li>
56
+ <a href="#h6">Fourteenth Header</a>
57
+ <ol>
58
+ <li>
59
+ <a href="#h6_1">Fifteenth Header</a>
60
+ </li>
61
+ </ol></li></ol>
62
+
63
+ <h1 id="h3"><span class="heading-num">3</span>First Header</h1>
64
+ <h2 id="h3_1"><span class="heading-num">3.1</span>Second Header</h2>
65
+ <h2 id="h3_2"><span class="heading-num">3.2</span>Third Header</h2>
66
+
67
+ <h1 id="h4"><span class="heading-num">4</span>Fourth Header</h1>
68
+
69
+ <h1 id="h5"><span class="heading-num">5</span>Fifth Header</h1>
70
+ <h2 id="h5_1"><span class="heading-num">5.1</span>Sixth Header</h2>
71
+ <h3 id="h5_1_1"><span class="heading-num">5.1.1</span>Seventh Header</h3>
72
+ <h4 id="h5_1_1_1"><span class="heading-num">5.1.1.1</span>Eighth Header</h4>
73
+ <h5 id="h5_1_1_1_1"><span class="heading-num">5.1.1.1.1</span>Ninth Header</h5>
74
+ <h6 id="h5_1_1_1_1_1"><span class="heading-num">5.1.1.1.1.1</span>Tenth Header</h6>
75
+
76
+ <h2 id="h5_2"><span class="heading-num">5.2</span>Eleventh Header</h2>
77
+ <h3 id="h5_2_1"><span class="heading-num">5.2.1</span>Twelfth Header</h3>
78
+ <h3 id="h5_2_2"><span class="heading-num">5.2.2</span>Thirteenth Header</h3>
79
+
80
+ <h1 id="h6"><span class="heading-num">6</span>Fourteenth Header</h1>
81
+ <h2 id="h6_1"><span class="heading-num">6.1</span>Fifteenth Header</h2>
@@ -0,0 +1,21 @@
1
+
2
+
3
+ <h1 id="h1"><span class="heading-num">1</span>First Header</h1>
4
+ <h2 id="h1_1"><span class="heading-num">1.1</span>Second Header</h2>
5
+ <h2 id="h1_2"><span class="heading-num">1.2</span>Third Header</h2>
6
+
7
+ <h1 id="h2"><span class="heading-num">2</span>Fourth Header</h1>
8
+
9
+ <h1 id="h3"><span class="heading-num">3</span>Fifth Header</h1>
10
+ <h2 id="h3_1"><span class="heading-num">3.1</span>Sixth Header</h2>
11
+ <h3 id="h3_1_1"><span class="heading-num">3.1.1</span>Seventh Header</h3>
12
+ <h4 id="h3_1_1_1"><span class="heading-num">3.1.1.1</span>Eighth Header</h4>
13
+ <h5 id="h3_1_1_1_1"><span class="heading-num">3.1.1.1.1</span>Ninth Header</h5>
14
+ <h6 id="h3_1_1_1_1_1"><span class="heading-num">3.1.1.1.1.1</span>Tenth Header</h6>
15
+
16
+ <h2 id="h3_2"><span class="heading-num">3.2</span>Eleventh Header</h2>
17
+ <h3 id="h3_2_1"><span class="heading-num">3.2.1</span>Twelfth Header</h3>
18
+ <h3 id="h3_2_2"><span class="heading-num">3.2.2</span>Thirteenth Header</h3>
19
+
20
+ <h1 id="h4"><span class="heading-num">4</span>Fourteenth Header</h1>
21
+ <h2 id="h4_1"><span class="heading-num">4.1</span>Fifteenth Header</h2>