<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/jekyll/archive.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -9,7 +9,13 @@ Gem::Specification.new do |s|
   s.email = [&quot;tom@mojombo.com&quot;]
   s.executables = [&quot;jekyll&quot;]
   s.extra_rdoc_files = [&quot;History.txt&quot;, &quot;Manifest.txt&quot;]
-  s.files = [&quot;History.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.textile&quot;, &quot;Rakefile&quot;, &quot;bin/jekyll&quot;, &quot;jekyll.gemspec&quot;, &quot;lib/jekyll.rb&quot;, &quot;lib/jekyll/albino.rb&quot;, &quot;lib/jekyll/converters/csv.rb&quot;, &quot;lib/jekyll/converters/mephisto.rb&quot;, &quot;lib/jekyll/convertible.rb&quot;, &quot;lib/jekyll/filters.rb&quot;, &quot;lib/jekyll/layout.rb&quot;, &quot;lib/jekyll/page.rb&quot;, &quot;lib/jekyll/post.rb&quot;, &quot;lib/jekyll/site.rb&quot;, &quot;lib/jekyll/tags/highlight.rb&quot;, &quot;lib/jekyll/tags/include.rb&quot;, &quot;test/helper.rb&quot;, &quot;test/source/_includes/sig.markdown&quot;, &quot;test/source/_layouts/default.html&quot;, &quot;test/source/_layouts/simple.html&quot;, &quot;test/source/_posts/2008-10-18-foo-bar.textile&quot;, &quot;test/source/_posts/2008-11-21-complex.textile&quot;, &quot;test/source/_posts/2008-12-13-include.markdown&quot;, &quot;test/source/css/screen.css&quot;, &quot;test/source/index.html&quot;, &quot;test/source/posts/2008-12-03-permalinked-post.textile&quot;, &quot;test/suite.rb&quot;, &quot;test/test_jekyll.rb&quot;, &quot;test/test_post.rb&quot;, &quot;test/test_site.rb&quot;]
+  s.files = [&quot;History.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.textile&quot;,
+  &quot;Rakefile&quot;, &quot;bin/jekyll&quot;, &quot;jekyll.gemspec&quot;, &quot;lib/jekyll.rb&quot;,
+  &quot;lib/jekyll/albino.rb&quot;, &quot;lib/jekyll/converters/csv.rb&quot;,
+  &quot;lib/jekyll/converters/mephisto.rb&quot;, &quot;lib/jekyll/convertible.rb&quot;,
+  &quot;lib/jekyll/filters.rb&quot;, &quot;lib/jekyll/layout.rb&quot;,
+  &quot;lib/jekyll/page.rb&quot;, &quot;lib/jekyll/post.rb&quot;, &quot;lib/jekyll/archive.rb&quot;,
+  &quot;lib/jekyll/site.rb&quot;, &quot;lib/jekyll/tags/highlight.rb&quot;, &quot;lib/jekyll/tags/include.rb&quot;, &quot;test/helper.rb&quot;, &quot;test/source/_includes/sig.markdown&quot;, &quot;test/source/_layouts/default.html&quot;, &quot;test/source/_layouts/simple.html&quot;, &quot;test/source/_posts/2008-10-18-foo-bar.textile&quot;, &quot;test/source/_posts/2008-11-21-complex.textile&quot;, &quot;test/source/_posts/2008-12-13-include.markdown&quot;, &quot;test/source/css/screen.css&quot;, &quot;test/source/index.html&quot;, &quot;test/source/posts/2008-12-03-permalinked-post.textile&quot;, &quot;test/suite.rb&quot;, &quot;test/test_jekyll.rb&quot;, &quot;test/test_post.rb&quot;, &quot;test/test_site.rb&quot;]
   s.has_rdoc = true
   s.rdoc_options = [&quot;--main&quot;, &quot;README.txt&quot;]
   s.require_paths = [&quot;lib&quot;]</diff>
      <filename>jekyll.gemspec</filename>
    </modified>
    <modified>
      <diff>@@ -21,6 +21,7 @@ require 'jekyll/convertible'
 require 'jekyll/layout'
 require 'jekyll/page'
 require 'jekyll/post'
+require 'jekyll/archive'
 require 'jekyll/filters'
 require 'jekyll/tags/highlight'
 require 'jekyll/tags/include'</diff>
      <filename>lib/jekyll.rb</filename>
    </modified>
    <modified>
      <diff>@@ -24,5 +24,13 @@ module Jekyll
       doc = Hpricot.parse(input)
       (doc/:&quot;text()&quot;).to_s.split[0..words].join(' ') + truncate_string
     end
+
+    def to_month(input)
+      return Date::MONTHNAMES[input.to_i]
+    end
+
+    def to_month_abbr(input)
+      return Date::ABBR_MONTHNAMES[input.to_i]
+    end
   end
 end</diff>
      <filename>lib/jekyll/filters.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module Jekyll
   
   class Site
     attr_accessor :source, :dest
-    attr_accessor :layouts, :posts
+    attr_accessor :layouts, :posts, :collated
     
     # Initialize the site
     #   +source+ is String path to the source directory containing
@@ -16,6 +16,7 @@ module Jekyll
       self.dest = dest
       self.layouts = {}
       self.posts = []
+      self.collated = {}
     end
     
     # Do the actual work of processing the site and generating the
@@ -26,6 +27,7 @@ module Jekyll
       self.read_layouts
       self.read_posts
       self.write_posts
+      self.write_archives
       self.transform_pages
     end
     
@@ -58,8 +60,23 @@ module Jekyll
       entries.each do |f|
         self.posts &lt;&lt; Post.new(self.source, f) if Post.valid?(f)
       end
-      
+
       self.posts.sort!
+
+      # build collated post structure for archives
+      self.posts.reverse.each do |post|
+        y, m, d = post.date.year, post.date.month, post.date.day
+        unless self.collated.key? y
+          self.collated[y] = {}
+        end
+        unless self.collated[y].key? m
+          self.collated[y][m] = {}
+        end
+        unless self.collated[y][m].key? d
+          self.collated[y][m][d] = []
+        end
+        self.collated[y][m][d] += [post]
+      end
     rescue Errno::ENOENT =&gt; e
       # ignore missing layout dir
     end
@@ -73,7 +90,41 @@ module Jekyll
         post.write(self.dest)
       end
     end
-    
+
+    def write_archive(dir, type)
+      archive = Archive.new(self.source, dir, type)
+      archive.add_layout(self.layouts, site_payload)
+      archive.write(self.dest)
+    end
+
+    # Write out archive pages based on special layouts.  Yearly,
+    # monthly, and daily archives will be written if layouts exist.
+    # Yearly archives will be in &lt;dest&gt;/&lt;year&gt;/index.html and other archives
+    # will be generated similarly.
+    #
+    # Returns nothing.
+    def write_archives
+      self.collated.keys.each do |year|
+        if self.layouts.key? 'archive_yearly'
+          self.write_archive(year.to_s, 'archive_yearly')
+        end
+
+        self.collated[year].keys.each do |month|
+          if self.layouts.key? 'archive_monthly'
+            self.write_archive(File.join(year.to_s, month.to_s),
+                               'archive_monthly')
+          end
+
+          self.collated[year][month].keys.each do |day|
+            if self.layouts.key? 'archive_daily'
+              self.write_archive(File.join(year.to_s, month.to_s, day.to_s),
+                                 'archive_daily')
+            end
+          end
+        end
+      end
+    end
+
     # Copy all regular files from &lt;source&gt; to &lt;dest&gt;/ ignoring
     # any files/directories that are hidden (start with &quot;.&quot;) or contain
     # site content (start with &quot;_&quot;)
@@ -106,12 +157,14 @@ module Jekyll
         end
       end
     end
-    
+
     # The Hash payload containing site-wide data
     #
     # Returns {&quot;site&quot; =&gt; {&quot;time&quot; =&gt; &lt;Time&gt;, &quot;posts&quot; =&gt; [&lt;Post&gt;]}}
     def site_payload
-      {&quot;site&quot; =&gt; {&quot;time&quot; =&gt; Time.now, &quot;posts&quot; =&gt; self.posts.sort.reverse}}
+      {&quot;site&quot; =&gt; {&quot;time&quot; =&gt; Time.now,
+          &quot;posts&quot; =&gt; self.posts.sort.reverse,
+          &quot;collated_posts&quot; =&gt; self.collated}}
     end
   end
 </diff>
      <filename>lib/jekyll/site.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>1367932e37f0d7e4757f85061ec6a3c56fccfd12</id>
    </parent>
  </parents>
  <author>
    <name>Jack Moffitt</name>
    <email>jack@metajack.im</email>
  </author>
  <url>http://github.com/metajack/jekyll/commit/c8a1986d4c43e4ce8bf04e6ea3e3762840a96bfe</url>
  <id>c8a1986d4c43e4ce8bf04e6ea3e3762840a96bfe</id>
  <committed-date>2008-12-29T14:58:08-08:00</committed-date>
  <authored-date>2008-12-29T14:14:55-08:00</authored-date>
  <message>Added archive support to Jekyll.

This add special _layouts to generate archive pages yearly, monthly,
and daily.  It also adds site.collated_posts which provides all posts
in a collated form for use in these and other layouts.</message>
  <tree>10e15df7e5875e1a67dd2eadb2f3f35b57ac7ec4</tree>
  <committer>
    <name>Jack Moffitt</name>
    <email>jack@metajack.im</email>
  </committer>
</commit>
