henshin 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/.yardoc/checksums +12 -0
  4. data/.yardoc/objects/Hash.dat +0 -0
  5. data/.yardoc/objects/Hash/to_options_i.dat +0 -0
  6. data/.yardoc/objects/Henshin.dat +0 -0
  7. data/.yardoc/objects/Henshin/CSSGenerator.dat +0 -0
  8. data/.yardoc/objects/Henshin/CSSGenerator/generate_i.dat +0 -0
  9. data/.yardoc/objects/Henshin/Defaults.dat +0 -0
  10. data/.yardoc/objects/Henshin/Gen.dat +0 -0
  11. data/.yardoc/objects/Henshin/Gen/config_3D_i.dat +0 -0
  12. data/.yardoc/objects/Henshin/Gen/config_i.dat +0 -0
  13. data/.yardoc/objects/Henshin/Gen/content_3D_i.dat +0 -0
  14. data/.yardoc/objects/Henshin/Gen/content_i.dat +0 -0
  15. data/.yardoc/objects/Henshin/Gen/date_3D_i.dat +0 -0
  16. data/.yardoc/objects/Henshin/Gen/date_i.dat +0 -0
  17. data/.yardoc/objects/Henshin/Gen/extension_3D_i.dat +0 -0
  18. data/.yardoc/objects/Henshin/Gen/extension_i.dat +0 -0
  19. data/.yardoc/objects/Henshin/Gen/initialize_i.dat +0 -0
  20. data/.yardoc/objects/Henshin/Gen/layout_3D_i.dat +0 -0
  21. data/.yardoc/objects/Henshin/Gen/layout_i.dat +0 -0
  22. data/.yardoc/objects/Henshin/Gen/override_i.dat +0 -0
  23. data/.yardoc/objects/Henshin/Gen/path_3D_i.dat +0 -0
  24. data/.yardoc/objects/Henshin/Gen/path_i.dat +0 -0
  25. data/.yardoc/objects/Henshin/Gen/payload_i.dat +0 -0
  26. data/.yardoc/objects/Henshin/Gen/process_i.dat +0 -0
  27. data/.yardoc/objects/Henshin/Gen/read_yaml_i.dat +0 -0
  28. data/.yardoc/objects/Henshin/Gen/render_i.dat +0 -0
  29. data/.yardoc/objects/Henshin/Gen/site_3D_i.dat +0 -0
  30. data/.yardoc/objects/Henshin/Gen/site_i.dat +0 -0
  31. data/.yardoc/objects/Henshin/Gen/title_3D_i.dat +0 -0
  32. data/.yardoc/objects/Henshin/Gen/title_i.dat +0 -0
  33. data/.yardoc/objects/Henshin/Gen/write_i.dat +0 -0
  34. data/.yardoc/objects/Henshin/HTMLGenerator.dat +0 -0
  35. data/.yardoc/objects/Henshin/HTMLGenerator/generate_i.dat +0 -0
  36. data/.yardoc/objects/Henshin/JSGenerator.dat +0 -0
  37. data/.yardoc/objects/Henshin/JSGenerator/generate_i.dat +0 -0
  38. data/.yardoc/objects/Henshin/LayoutParser.dat +0 -0
  39. data/.yardoc/objects/Henshin/LayoutParser/generate_i.dat +0 -0
  40. data/.yardoc/objects/Henshin/Post.dat +0 -0
  41. data/.yardoc/objects/Henshin/Post/author_3D_i.dat +0 -0
  42. data/.yardoc/objects/Henshin/Post/author_i.dat +0 -0
  43. data/.yardoc/objects/Henshin/Post/category_3D_i.dat +0 -0
  44. data/.yardoc/objects/Henshin/Post/category_i.dat +0 -0
  45. data/.yardoc/objects/Henshin/Post/date_3D_i.dat +0 -0
  46. data/.yardoc/objects/Henshin/Post/date_i.dat +0 -0
  47. data/.yardoc/objects/Henshin/Post/initialize_i.dat +0 -0
  48. data/.yardoc/objects/Henshin/Post/override_i.dat +0 -0
  49. data/.yardoc/objects/Henshin/Post/payload_i.dat +0 -0
  50. data/.yardoc/objects/Henshin/Post/permalink_i.dat +0 -0
  51. data/.yardoc/objects/Henshin/Post/process_i.dat +0 -0
  52. data/.yardoc/objects/Henshin/Post/read_name_i.dat +0 -0
  53. data/.yardoc/objects/Henshin/Post/read_yaml_i.dat +0 -0
  54. data/.yardoc/objects/Henshin/Post/tags_3D_i.dat +0 -0
  55. data/.yardoc/objects/Henshin/Post/tags_i.dat +0 -0
  56. data/.yardoc/objects/Henshin/Post/title_3D_i.dat +0 -0
  57. data/.yardoc/objects/Henshin/Post/title_i.dat +0 -0
  58. data/.yardoc/objects/Henshin/Post/write_i.dat +0 -0
  59. data/.yardoc/objects/Henshin/Site.dat +0 -0
  60. data/.yardoc/objects/Henshin/Site/archives_3D_i.dat +0 -0
  61. data/.yardoc/objects/Henshin/Site/archives_i.dat +0 -0
  62. data/.yardoc/objects/Henshin/Site/categories_3D_i.dat +0 -0
  63. data/.yardoc/objects/Henshin/Site/categories_i.dat +0 -0
  64. data/.yardoc/objects/Henshin/Site/config_3D_i.dat +0 -0
  65. data/.yardoc/objects/Henshin/Site/config_i.dat +0 -0
  66. data/.yardoc/objects/Henshin/Site/gens_3D_i.dat +0 -0
  67. data/.yardoc/objects/Henshin/Site/gens_i.dat +0 -0
  68. data/.yardoc/objects/Henshin/Site/initialize_i.dat +0 -0
  69. data/.yardoc/objects/Henshin/Site/layouts_3D_i.dat +0 -0
  70. data/.yardoc/objects/Henshin/Site/layouts_i.dat +0 -0
  71. data/.yardoc/objects/Henshin/Site/payload_i.dat +0 -0
  72. data/.yardoc/objects/Henshin/Site/plugins_3D_i.dat +0 -0
  73. data/.yardoc/objects/Henshin/Site/plugins_i.dat +0 -0
  74. data/.yardoc/objects/Henshin/Site/posts_3D_i.dat +0 -0
  75. data/.yardoc/objects/Henshin/Site/posts_i.dat +0 -0
  76. data/.yardoc/objects/Henshin/Site/process_i.dat +0 -0
  77. data/.yardoc/objects/Henshin/Site/read_i.dat +0 -0
  78. data/.yardoc/objects/Henshin/Site/read_layouts_i.dat +0 -0
  79. data/.yardoc/objects/Henshin/Site/read_others_i.dat +0 -0
  80. data/.yardoc/objects/Henshin/Site/read_posts_i.dat +0 -0
  81. data/.yardoc/objects/Henshin/Site/render_i.dat +0 -0
  82. data/.yardoc/objects/Henshin/Site/reset_i.dat +0 -0
  83. data/.yardoc/objects/Henshin/Site/statics_3D_i.dat +0 -0
  84. data/.yardoc/objects/Henshin/Site/statics_i.dat +0 -0
  85. data/.yardoc/objects/Henshin/Site/tags_3D_i.dat +0 -0
  86. data/.yardoc/objects/Henshin/Site/tags_i.dat +0 -0
  87. data/.yardoc/objects/Henshin/Site/write_i.dat +0 -0
  88. data/.yardoc/objects/Henshin/StandardPlugin.dat +0 -0
  89. data/.yardoc/objects/Henshin/configure_c.dat +0 -0
  90. data/.yardoc/objects/Henshin/extensions_c.dat +0 -0
  91. data/.yardoc/objects/Henshin/load_plugins_c.dat +0 -0
  92. data/.yardoc/objects/LiquidPlugin.dat +0 -0
  93. data/.yardoc/objects/LiquidPlugin/extensions_3D_i.dat +0 -0
  94. data/.yardoc/objects/LiquidPlugin/extensions_i.dat +0 -0
  95. data/.yardoc/objects/LiquidPlugin/generate_i.dat +0 -0
  96. data/.yardoc/objects/LiquidPlugin/initialize_i.dat +0 -0
  97. data/.yardoc/objects/LiquidPlugin/read_i.dat +0 -0
  98. data/.yardoc/objects/MarukuPlugin.dat +0 -0
  99. data/.yardoc/objects/MarukuPlugin/extensions_3D_i.dat +0 -0
  100. data/.yardoc/objects/MarukuPlugin/extensions_i.dat +0 -0
  101. data/.yardoc/objects/MarukuPlugin/generate_i.dat +0 -0
  102. data/.yardoc/objects/MarukuPlugin/initialize_i.dat +0 -0
  103. data/.yardoc/objects/PygmentsPlugin.dat +0 -0
  104. data/.yardoc/objects/PygmentsPlugin/extensions_3D_i.dat +0 -0
  105. data/.yardoc/objects/PygmentsPlugin/extensions_i.dat +0 -0
  106. data/.yardoc/objects/PygmentsPlugin/generate_i.dat +0 -0
  107. data/.yardoc/objects/PygmentsPlugin/initialize_i.dat +0 -0
  108. data/.yardoc/objects/SassPlugin.dat +0 -0
  109. data/.yardoc/objects/SassPlugin/extensions_3D_i.dat +0 -0
  110. data/.yardoc/objects/SassPlugin/extensions_i.dat +0 -0
  111. data/.yardoc/objects/SassPlugin/generate_i.dat +0 -0
  112. data/.yardoc/objects/SassPlugin/initialize_i.dat +0 -0
  113. data/.yardoc/objects/String.dat +0 -0
  114. data/.yardoc/objects/String/directory_i.dat +0 -0
  115. data/.yardoc/objects/String/extension_i.dat +0 -0
  116. data/.yardoc/objects/String/file_name_i.dat +0 -0
  117. data/.yardoc/objects/String/slugify_i.dat +0 -0
  118. data/.yardoc/objects/root.dat +0 -0
  119. data/.yardoc/proxy_types +2 -0
  120. data/LICENSE +20 -0
  121. data/README.markdown +73 -0
  122. data/Rakefile +53 -0
  123. data/VERSION +1 -0
  124. data/bin/henshin +31 -0
  125. data/doc/Hash.html +179 -0
  126. data/doc/Henshin.html +479 -0
  127. data/doc/Henshin/CSSGenerator.html +186 -0
  128. data/doc/Henshin/Gen.html +1225 -0
  129. data/doc/Henshin/HTMLGenerator.html +186 -0
  130. data/doc/Henshin/JSGenerator.html +182 -0
  131. data/doc/Henshin/LayoutParser.html +186 -0
  132. data/doc/Henshin/Post.html +1159 -0
  133. data/doc/Henshin/Site.html +1462 -0
  134. data/doc/Henshin/StandardPlugin.html +99 -0
  135. data/doc/LiquidPlugin.html +399 -0
  136. data/doc/MarukuPlugin.html +325 -0
  137. data/doc/PygmentsPlugin.html +325 -0
  138. data/doc/SassPlugin.html +325 -0
  139. data/doc/String.html +371 -0
  140. data/doc/_index.html +239 -0
  141. data/doc/class_list.html +36 -0
  142. data/doc/css/common.css +1 -0
  143. data/doc/css/full_list.css +50 -0
  144. data/doc/css/style.css +273 -0
  145. data/doc/file.README.html +131 -0
  146. data/doc/file_list.html +38 -0
  147. data/doc/frames.html +13 -0
  148. data/doc/index.html +131 -0
  149. data/doc/js/app.js +111 -0
  150. data/doc/js/full_list.js +117 -0
  151. data/doc/js/jquery.js +19 -0
  152. data/doc/method_list.html +611 -0
  153. data/doc/top-level-namespace.html +89 -0
  154. data/henshin.gemspec +224 -0
  155. data/lib/henshin.rb +74 -0
  156. data/lib/henshin/ext.rb +42 -0
  157. data/lib/henshin/gen.rb +89 -0
  158. data/lib/henshin/plugin.rb +43 -0
  159. data/lib/henshin/plugins/liquid.rb +27 -0
  160. data/lib/henshin/plugins/maruku.rb +16 -0
  161. data/lib/henshin/plugins/pygments.rb +15 -0
  162. data/lib/henshin/plugins/sass.rb +16 -0
  163. data/lib/henshin/post.rb +127 -0
  164. data/lib/henshin/site.rb +112 -0
  165. data/test/helper.rb +10 -0
  166. data/test/site/_site/2010/10/20-testing-stuff/index.html +24 -0
  167. data/test/site/_site/2010/5/15-lorem-ipsum/index.html +24 -0
  168. data/test/site/_site/index.html +29 -0
  169. data/test/site/index.html +12 -0
  170. data/test/site/layouts/main.html +15 -0
  171. data/test/site/layouts/post.html +24 -0
  172. data/test/site/options.yaml +11 -0
  173. data/test/site/posts/Testing-Stuff.markdown +7 -0
  174. data/test/site/posts/lorem-ipsum.markdown +7 -0
  175. data/test/test_henshin.rb +7 -0
  176. metadata +261 -0
@@ -0,0 +1,43 @@
1
+ module Henshin
2
+ class StandardPlugin
3
+ # the main class for plugins to inherit from eg
4
+ #
5
+ # class MyPlugin < NoName::StandardPlugin
6
+ #
7
+ # or it can inherit a subclass from below
8
+ end
9
+
10
+ class HTMLGenerator < StandardPlugin
11
+ # a plugin which returns html
12
+
13
+ def generate( content )
14
+ #return html
15
+ end
16
+ end
17
+
18
+ class CSSGenerator < StandardPlugin
19
+ # a plugin which returns css
20
+
21
+ def generate( content )
22
+ #return css
23
+ end
24
+ end
25
+
26
+ class JSGenerator < StandardPlugin
27
+ # a plugin which returns javascript
28
+
29
+ def generate( content )
30
+ #return javascript
31
+ end
32
+ end
33
+
34
+ class LayoutParser < StandardPlugin
35
+ # a plugin which returns html
36
+ # given a layout and data to insert
37
+
38
+ def generate( layout, data )
39
+ #return html
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,27 @@
1
+ require 'henshin/plugin'
2
+ require 'liquid'
3
+
4
+ class LiquidPlugin < Henshin::LayoutParser
5
+
6
+ attr_accessor :extensions
7
+
8
+ def initialize
9
+ @extensions = ['html']
10
+ end
11
+
12
+ def generate( layout, data )
13
+ t = Liquid::Template.parse( read(layout) )
14
+ t.render(data)
15
+ end
16
+
17
+ # returns the layout as a string
18
+ def read( file )
19
+ f = File.open(file, "r")
20
+ r = ""
21
+ f.each do |l|
22
+ r << l
23
+ end
24
+ r
25
+ end
26
+
27
+ end
@@ -0,0 +1,16 @@
1
+ require 'henshin/plugin'
2
+ require 'maruku'
3
+
4
+ class MarukuPlugin < Henshin::HTMLGenerator
5
+
6
+ attr_accessor :extensions
7
+
8
+ def initialize
9
+ @extensions = ['markdown', 'mkdwn', 'md']
10
+ end
11
+
12
+ def generate( content )
13
+ Maruku.new(content).to_html
14
+ end
15
+
16
+ end
@@ -0,0 +1,15 @@
1
+ require 'henshin/plugin'
2
+
3
+ class PygmentsPlugin < Henshin::HTMLGenerator
4
+
5
+ attr_accessor :extensions
6
+
7
+ def initialize
8
+ @extensions = ['hmm']
9
+ end
10
+
11
+ def generate( content )
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,16 @@
1
+ require 'henshin/plugin'
2
+ require 'sass'
3
+
4
+ class SassPlugin < Henshin::CSSGenerator
5
+
6
+ attr_accessor :extensions
7
+
8
+ def initialize
9
+ @extensions = ['sass', 'scss']
10
+ end
11
+
12
+ def generate( content )
13
+ # need to override this
14
+ end
15
+
16
+ end
@@ -0,0 +1,127 @@
1
+ module Henshin
2
+
3
+ class Post < Gen
4
+
5
+ attr_accessor :title, :author, :tags, :category, :date
6
+
7
+ def initialize( path, site )
8
+ @path = path
9
+ @site = site
10
+ @config = site.config
11
+ @extension = path.extension
12
+ @layout = site.layouts[ site.config[:layout] ]
13
+ end
14
+
15
+
16
+ ##
17
+ # Processes the file
18
+ def process
19
+ self.read_name
20
+ self.read_yaml
21
+ end
22
+
23
+ # Reads the filename and extracts information from it
24
+ def read_name
25
+ parser = {'title' => '([a-zA-Z0-9 ]+)',
26
+ 'title-with-dashes' => '([a-zA-Z0-9-]+)',
27
+ 'date' => '(\d{4}-\d{2}-\d{2})',
28
+ 'date-time' => '(\d{4}-\d{2}-\d{2} at \d{2}:\d{2})',
29
+ 'xml-date-time' => '(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2})?((\+|-)\d{2}:\d{2})?)',
30
+ 'extension' => "(#{ site.config[:extensions].join('|') })"}
31
+
32
+ file_parser = config[:file_name]
33
+ # create string regex and keep order of info
34
+ data_order = []
35
+ m = file_parser.gsub(/\{([a-z-]+)\}/) do
36
+ data_order << $1
37
+ parser[$1]
38
+ end
39
+ # convert string to actual regex
40
+ matcher = Regexp.new(m)
41
+
42
+ override = {}
43
+ # extract data from filename
44
+ file_data = path.file_name.match( matcher ).captures
45
+ file_data.each_with_index do |data, i|
46
+ if data_order[i].include? 'title'
47
+ if data_order[i].include? 'dashes'
48
+ override[:title] = data.gsub(/-/, ' ')
49
+ else
50
+ override[:title] = data
51
+ end
52
+ elsif data_order[i].include? 'date'
53
+ override[:date] = data
54
+ elsif data_order[i].include? 'extension'
55
+ override[:extension] = data
56
+ end
57
+ end
58
+ self.override( override )
59
+ end
60
+
61
+ # Reads the files yaml frontmatter and uses it to override some settings, then grabs content
62
+ def read_yaml
63
+ file = File.read(self.path)
64
+
65
+ if file =~ /^(---\s*\n.*?\n?^---\s*$\n?)/m
66
+ override = YAML.load_file(@path).to_options
67
+ self.override(override)
68
+ @content = file[$1.size..-1]
69
+ else
70
+ @content = file
71
+ end
72
+ end
73
+
74
+ # Uses the loaded data to override settings
75
+ #
76
+ # @param [Hash] override data to override settings with
77
+ def override( override )
78
+ @title ||= override[:title]
79
+ @layout ||= @site.layouts[ override[:layout] ]
80
+ @date ||= Time.parse( override[:date] ) unless override[:date].nil?
81
+ @tags ||= override[:tags]
82
+ @category ||= override[:category]
83
+ @author ||= override[:author]
84
+ @extension ||= override[:extension]
85
+ end
86
+
87
+
88
+ # Creates the data to be sent to the layout engine
89
+ #
90
+ # @return [Hash] the payload for the layout engine
91
+ def payload
92
+ {
93
+ 'yield' => @content,
94
+ 'site' => @site.payload['site'],
95
+ 'post' => {'title' => @title,
96
+ 'author' => @author,
97
+ 'date' => @date,
98
+ 'tags' => @tags,
99
+ 'category' => @category}
100
+ }
101
+ end
102
+
103
+
104
+ ##
105
+ # Writes the file to the correct place
106
+ def write
107
+ write_path = File.join( config[:root], config[:target], permalink )
108
+ FileUtils.mkdir_p File.join( write_path.directory )
109
+ file = File.new( File.join( write_path ), "w" )
110
+ file.puts( @content )
111
+ end
112
+
113
+ # Creates the permalink for the post
114
+ def permalink
115
+ partials = {'year' => self.date.year,
116
+ 'month' => self.date.month,
117
+ 'date' => self.date.day,
118
+ 'title' => self.title.slugify}
119
+
120
+ config[:permalink].gsub(/\{([a-z-]+)\}/) do
121
+ partials[$1]
122
+ end
123
+ end
124
+
125
+ end
126
+
127
+ end
@@ -0,0 +1,112 @@
1
+ module Henshin
2
+
3
+ class Site
4
+
5
+ attr_accessor :posts, :gens, :statics, :archives, :tags, :categories, :plugins
6
+ attr_accessor :layouts, :config
7
+
8
+ def initialize( config )
9
+ self.reset
10
+ @config = config
11
+ end
12
+
13
+ # Resets everything
14
+ def reset
15
+ @posts = []
16
+ @gens = []
17
+ @statics = []
18
+ @archives = {}
19
+ @tags = {}
20
+ @categories = {}
21
+ @layouts = {}
22
+ end
23
+
24
+
25
+ ##
26
+ # Reads all necessary files and puts them into the necessary arrays
27
+ #
28
+ def read
29
+ self.read_layouts
30
+ self.read_posts
31
+ self.read_others
32
+ end
33
+
34
+ # Adds all items in 'layouts' to the layouts array
35
+ def read_layouts
36
+ path = File.join(config[:root], 'layouts')
37
+ Dir.glob(path + '/*.*').each do |layout|
38
+ layout =~ /([a-zA-Z0-9 _-]+)\.([a-zA-Z0-9-]+)/
39
+ @layouts[$1] = layout
40
+ end
41
+ end
42
+
43
+ # Adds all items in 'posts' to the posts array
44
+ def read_posts
45
+ path = File.join(config[:root], 'posts')
46
+ Dir.glob(path + '/*.*').each do |post|
47
+ # should really create a new post object but I haven't made one yet
48
+ @posts << Post.new(post, self)
49
+ end
50
+ end
51
+
52
+ # Gets all other items, and determines whether it's static or needs to be converted
53
+ def read_others
54
+ path = File.join(config[:root], '**', '*.*')
55
+ items = Dir.glob(path)
56
+ items = items.select {|i| !i.include?(config[:root] + '/_site')}
57
+
58
+ gens = items.select {|i| config[:extensions].include?(i.extension)}
59
+ gens -= @posts.collect {|i| i.path}
60
+ gens -= @layouts.collect {|k, v| v}
61
+
62
+ gens.each do |g|
63
+ @gens << Gen.new(g, self)
64
+ end
65
+
66
+ static = items - @gens
67
+ static.each do |s|
68
+ #@statics << Static.new(s, self)
69
+ end
70
+ end
71
+
72
+
73
+ ##
74
+ # Processes all of the necessary files
75
+ def process
76
+ @posts.each {|p| p.process}
77
+ @gens.each {|g| g.process}
78
+ #@static.each {|s| s.process}
79
+ end
80
+
81
+ # Creates the data to be sent to the layout engine
82
+ #
83
+ # @return [Hash] the payload for the layout engine
84
+ def payload
85
+ {'site' => {'author' => self.config[:author],
86
+ 'title' => self.config[:title],
87
+ 'description' => self.config[:description],
88
+ 'time_zone' => self.config[:time_zone],
89
+ 'created_at' => Time.now} }
90
+ end
91
+
92
+
93
+ ##
94
+ # Renders the files
95
+ def render
96
+ @posts.each {|p| p.render}
97
+ @gens.each {|g| g.render}
98
+ #@static.each {|s| s.render}
99
+ end
100
+
101
+
102
+ ##
103
+ # Writes the files
104
+ def write
105
+ @posts.each {|p| p.write}
106
+ @gens.each {|g| g.write}
107
+ #@static.each {|s| s.write}
108
+ end
109
+
110
+ end
111
+
112
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'henshin'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title></title>
6
+ <link rel="stylesheet" href="" type="text/css" />
7
+ </head>
8
+ <body>
9
+
10
+ <header>
11
+ <h1>Testing Stuff</h1>
12
+ <time>2010-10-20 17:33:23 +0100</time>
13
+ <ul>
14
+ <li>tags</li>
15
+ <li>should</li>
16
+ <li>be loopable</li>
17
+ </ul>
18
+ </header>
19
+
20
+ <p>So Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
21
+
22
+ <span>Copyright &copy; </span>
23
+ </body>
24
+ </html>
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title></title>
6
+ <link rel="stylesheet" href="" type="text/css" />
7
+ </head>
8
+ <body>
9
+
10
+ <header>
11
+ <h1>lorem ipsum</h1>
12
+ <time>2010-05-15 13:23:47 +0100</time>
13
+ <ul>
14
+ <li>tags</li>
15
+ <li>should</li>
16
+ <li>be loopable</li>
17
+ </ul>
18
+ </header>
19
+
20
+ <p>So Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
21
+
22
+ <span>Copyright &copy; </span>
23
+ </body>
24
+ </html>
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title></title>
6
+ <link rel="stylesheet" href="" type="text/css" />
7
+ </head>
8
+ <body>
9
+
10
+ <header>
11
+ <h1></h1>
12
+ <time></time>
13
+ <ul>
14
+ <li>tags</li>
15
+ <li>should</li>
16
+ <li>be loopable</li>
17
+ </ul>
18
+ </header>
19
+
20
+ <header>
21
+ <h1>Joshua Hawxwell</h1>
22
+ </header>
23
+
24
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
25
+
26
+
27
+ <span>Copyright &copy; </span>
28
+ </body>
29
+ </html>