[DRE-commits] [jekyll] 01/01: Imported Upstream version 2.2.0+dfsg

Youhei SASAKI uwabami-guest at moszumanska.debian.org
Wed Jul 30 09:43:16 UTC 2014


This is an automated email from the git hooks/post-receive script.

uwabami-guest pushed a commit to tag upstream/2.2.0+dfsg
in repository jekyll.

commit 3b62e27865f56274bad10772665a0199315babd9
Author: Youhei SASAKI <uwabami at gfd-dennou.org>
Date:   Wed Jul 30 17:43:34 2014 +0900

    Imported Upstream version 2.2.0+dfsg
    
    Signed-off-by: Youhei SASAKI <uwabami at gfd-dennou.org>
---
 .gitignore                                         |   15 +
 .travis.yml                                        |   27 +
 CONTRIBUTING.markdown                              |   18 +-
 History.markdown                                   |  499 +++++++++-
 LICENSE                                            |    4 +-
 README.markdown                                    |   47 +-
 Rakefile                                           |   98 +-
 bin/jekyll                                         |  164 +--
 checksums.yaml.gz                                  |  Bin 266 -> 271 bytes
 docs/jp/CONTRIBUTING.jp.markdown                   |   93 ++
 docs/jp/README.jp.markdown                         |   68 ++
 features/collections.feature                       |  145 +++
 features/create_sites.feature                      |   69 +-
 features/data.feature                              |   50 +-
 features/drafts.feature                            |   29 +-
 features/embed_filters.feature                     |   67 +-
 features/frontmatter_defaults.feature              |  136 +++
 features/include_tag.feature                       |   31 +-
 features/markdown.feature                          |   26 +-
 features/pagination.feature                        |   10 +-
 features/permalinks.feature                        |   30 +-
 features/post_data.feature                         |  129 ++-
 features/post_excerpts.feature                     |   18 +-
 features/rendering.feature                         |   34 +
 features/site_configuration.feature                |  116 ++-
 features/site_data.feature                         |   52 +-
 features/step_definitions/jekyll_steps.rb          |  106 +-
 features/support/env.rb                            |   54 +-
 jekyll.gemspec                                     |  305 +-----
 lib/jekyll.rb                                      |  117 ++-
 lib/jekyll/cleaner.rb                              |   32 +-
 lib/jekyll/collection.rb                           |  154 +++
 lib/jekyll/command.rb                              |  104 +-
 lib/jekyll/commands/build.rb                       |  105 +-
 lib/jekyll/commands/docs.rb                        |   30 +
 lib/jekyll/commands/doctor.rb                      |   21 +-
 lib/jekyll/commands/new.rb                         |   27 +-
 lib/jekyll/commands/serve.rb                       |  150 ++-
 lib/jekyll/configuration.rb                        |   56 +-
 lib/jekyll/converter.rb                            |   32 +-
 lib/jekyll/converters/markdown.rb                  |   64 +-
 lib/jekyll/converters/markdown/kramdown_parser.rb  |    4 +-
 lib/jekyll/converters/markdown/maruku_parser.rb    |   11 +-
 lib/jekyll/converters/markdown/rdiscount_parser.rb |    6 +-
 lib/jekyll/converters/markdown/redcarpet_parser.rb |   71 +-
 lib/jekyll/converters/textile.rb                   |    8 +-
 lib/jekyll/convertible.rb                          |  128 ++-
 lib/jekyll/core_ext.rb                             |   90 --
 lib/jekyll/deprecator.rb                           |   26 +-
 lib/jekyll/document.rb                             |  260 +++++
 lib/jekyll/draft.rb                                |    5 +
 lib/jekyll/entry_filter.rb                         |   87 +-
 lib/jekyll/errors.rb                               |    7 +-
 lib/jekyll/excerpt.rb                              |   23 +-
 lib/jekyll/filters.rb                              |   92 +-
 lib/jekyll/frontmatter_defaults.rb                 |  146 +++
 lib/jekyll/generators/pagination.rb                |  217 ----
 lib/jekyll/layout.rb                               |    4 +-
 lib/jekyll/layout_reader.rb                        |   53 +
 lib/jekyll/liquid_extensions.rb                    |   22 +
 lib/jekyll/{stevenson.rb => log_adapter.rb}        |   57 +-
 lib/jekyll/mime.types                              |   28 +-
 lib/jekyll/page.rb                                 |   43 +-
 lib/jekyll/plugin.rb                               |   23 +-
 lib/jekyll/plugin_manager.rb                       |   76 ++
 lib/jekyll/post.rb                                 |   94 +-
 lib/jekyll/publisher.rb                            |   21 +
 lib/jekyll/related_posts.rb                        |   10 +-
 lib/jekyll/renderer.rb                             |  148 +++
 lib/jekyll/site.rb                                 |  323 +++---
 lib/jekyll/static_file.rb                          |   18 +-
 lib/jekyll/stevenson.rb                            |  139 +--
 lib/jekyll/tags/gist.rb                            |   48 -
 lib/jekyll/tags/highlight.rb                       |  105 +-
 lib/jekyll/tags/include.rb                         |   40 +-
 lib/jekyll/tags/post_url.rb                        |   11 +-
 lib/jekyll/url.rb                                  |   46 +-
 lib/jekyll/utils.rb                                |   87 ++
 lib/jekyll/version.rb                              |    3 +
 lib/site_template/_config.yml                      |   15 +-
 lib/site_template/_includes/footer.html            |   61 ++
 lib/site_template/_includes/head.html              |   12 +
 lib/site_template/_includes/header.html            |   28 +
 lib/site_template/_layouts/default.html            |   43 +-
 lib/site_template/_layouts/page.html               |   14 +
 lib/site_template/_layouts/post.html               |   16 +-
 .../0000-00-00-welcome-to-jekyll.markdown.erb      |    2 +-
 lib/site_template/about.md                         |   11 +
 lib/site_template/css/main.css                     |  436 ++++++--
 lib/site_template/css/syntax.css                   |   60 --
 lib/site_template/feed.xml                         |   30 +
 lib/site_template/index.html                       |   17 +-
 metadata.yml                                       |  407 ++++++--
 script/bootstrap                                   |    2 +
 script/branding                                    |   11 +
 script/cibuild                                     |    7 +
 script/console                                     |   38 +
 script/proof                                       |   22 +
 script/rebund                                      |  140 +++
 script/test                                        |   17 +
 site/_config.yml                                   |    7 +-
 site/_data/docs.yml                                |   46 +
 site/_includes/analytics.html                      |   22 +-
 site/_includes/anchor_links.html                   |   32 +
 site/_includes/css/font-awesome.css                |   44 +
 site/{ => _includes}/css/gridism.css               |    0
 site/{ => _includes}/css/pygments.css              |    2 +
 site/_includes/css/style.css                       | 1045 ++++++++++++++++++++
 site/_includes/docs_contents.html                  |   16 +-
 site/_includes/docs_contents_mobile.html           |   21 +-
 site/_includes/docs_option.html                    |    4 +-
 site/_includes/docs_ul.html                        |   10 +-
 site/_includes/footer.html                         |    4 +-
 site/_includes/header.html                         |    4 +-
 site/_includes/news_contents.html                  |   12 +-
 site/_includes/news_item.html                      |    8 +-
 site/_includes/primary-nav-items.html              |   11 +-
 site/_includes/section_nav.html                    |    4 +-
 site/_includes/top.html                            |   20 +-
 site/_layouts/default.html                         |    1 +
 site/_layouts/news_item.html                       |   12 +-
 .../2013-05-06-jekyll-1-0-0-released.markdown      |    2 +-
 .../2013-05-08-jekyll-1-0-1-released.markdown      |    2 +-
 .../2013-05-12-jekyll-1-0-2-released.markdown      |    2 +-
 .../2013-06-07-jekyll-1-0-3-released.markdown      |    2 +-
 .../2013-07-24-jekyll-1-1-1-released.markdown      |    8 +-
 .../2013-07-25-jekyll-1-0-4-released.markdown      |    4 +-
 .../2013-07-25-jekyll-1-1-2-released.markdown      |    4 +-
 .../2013-09-14-jekyll-1-2-1-released.markdown      |    4 +-
 .../2013-10-28-jekyll-1-3-0-rc1-released.markdown  |    2 +-
 .../2013-12-09-jekyll-1-4-1-released.markdown      |   20 +
 .../2014-01-13-jekyll-1-4-3-released.markdown      |    3 +-
 .../2014-03-24-jekyll-1-5-0-released.markdown      |    2 +-
 .../2014-03-27-jekyll-1-5-1-released.markdown      |    2 +-
 site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown |   31 +
 .../2014-05-08-jekyll-2-0-3-released.markdown      |   18 +
 ...4-jekyll-stickers-1-dollar-stickermule.markdown |   19 +
 ...014-06-28-jekyll-turns-21-i-mean-2-1-0.markdown |   31 +
 .../2014-07-01-jekyll-2-1-1-released.markdown      |   30 +
 .../2014-07-29-jekyll-2-2-0-released.markdown      |   19 +
 site/css/normalize.css                             |    1 -
 site/css/screen.css                                |   31 +
 site/css/style.css                                 |  946 ------------------
 site/docs/assets.md                                |   66 ++
 site/docs/collections.md                           |  259 +++++
 site/docs/configuration.md                         |  293 ++++--
 site/docs/continuous-integration.md                |  177 ++++
 site/docs/contributing.md                          |   17 +-
 site/docs/datafiles.md                             |   63 +-
 site/docs/deployment-methods.md                    |   28 +-
 site/docs/extras.md                                |   46 +-
 site/docs/frontmatter.md                           |   13 +-
 site/docs/github-pages.md                          |    4 +-
 site/docs/heroku.md                                |    9 -
 site/docs/history.md                               |  712 ++++++++++++-
 site/docs/index.md                                 |   10 +-
 site/docs/installation.md                          |   46 +-
 site/docs/migrations.md                            |    4 +-
 site/docs/pagination.md                            |    3 +-
 site/docs/permalinks.md                            |   16 +-
 site/docs/plugins.md                               |   37 +-
 site/docs/posts.md                                 |   42 +-
 site/docs/quickstart.md                            |    6 -
 site/docs/resources.md                             |    9 +-
 site/docs/sites.md                                 |    6 +-
 site/docs/structure.md                             |    8 +-
 site/docs/templates.md                             |  169 ++--
 site/docs/troubleshooting.md                       |   31 +-
 site/docs/upgrading.md                             |   12 +-
 site/docs/usage.md                                 |   11 +
 site/docs/variables.md                             |   62 +-
 site/docs/windows.md                               |   44 +
 site/favicon.ico                                   |  Bin 0 -> 5430 bytes
 site/favicon.png                                   |  Bin 1359 -> 0 bytes
 site/feed.xml                                      |   42 +-
 site/fonts/FontAwesome.otf                         |  Bin 0 -> 75188 bytes
 site/fonts/fontawesome-webfont.eot                 |  Bin 0 -> 72449 bytes
 site/fonts/fontawesome-webfont.svg                 |  504 ++++++++++
 site/fonts/fontawesome-webfont.ttf                 |  Bin 0 -> 141564 bytes
 site/fonts/fontawesome-webfont.woff                |  Bin 0 -> 83760 bytes
 site/img/article-footer.png                        |  Bin 1898 -> 1863 bytes
 site/img/footer-arrow.png                          |  Bin 846 -> 840 bytes
 site/img/footer-logo.png                           |  Bin 3906 -> 3783 bytes
 site/img/jekyll-sticker.jpg                        |  Bin 0 -> 127782 bytes
 site/img/logo-2x.png                               |  Bin 46587 -> 46514 bytes
 site/img/logo-rss.png                              |  Bin 0 -> 6022 bytes
 site/img/octojekyll.png                            |  Bin 23728 -> 22360 bytes
 site/img/tube.png                                  |  Bin 9387 -> 0 bytes
 site/img/tube1x.png                                |  Bin 4036 -> 0 bytes
 site/index.html                                    |   12 +-
 test/helper.rb                                     |   33 +-
 test/source/+/%# +.md                              |    6 +
 test/source/+/foo.md                               |    2 +-
 test/source/_data/categories/dairy.yaml            |    6 +
 test/source/_data/members.json                     |   12 +
 test/source/_drafts/draft-properties.text          |   11 +
 test/source/_includes/include.html                 |    1 +
 test/source/_includes/sig.markdown                 |    4 +-
 test/source/_methods/_do_not_read_me.md            |    5 +
 test/source/_methods/configuration.md              |    8 +
 test/source/_methods/sanitized_path.md             |    5 +
 .../_methods/site/_dont_include_me_either.md       |    5 +
 test/source/_methods/site/generate.md              |    6 +
 test/source/_methods/site/initialize.md            |    4 +
 test/source/_methods/um_hi.md                      |    6 +
 test/source/_posts/2009-01-27-no-category.textile  |    6 +
 test/source/_posts/2011-04-12-md-extension.md      |    2 +-
 .../2013-12-17-include-variable-filters.markdown   |   21 +
 test/source/_posts/2013-12-20-properties.text      |   11 +
 test/source/_posts/2014-03-03-yaml-with-dots.md    |    5 +
 .../_posts/2014-03-22-escape-+ %20[].markdown      |    6 +
 test/source/_sass/_grid.scss                       |    1 +
 test/source/_slides/example-slide-1.html           |    4 +
 test/source/_slides/example-slide-2.html           |    7 +
 test/source/_slides/example-slide-3.html           |    5 +
 test/source/_with.dots/all.dots/2.4.0.md           |    5 +
 test/source/_with.dots/file.with.dots.md           |    0
 test/source/css/main.scss                          |    4 +
 test/source/environment.html                       |    5 +
 test/source/js/coffeescript.coffee                 |   10 +
 test/source/pgp.key                                |    2 +
 test/source/properties.html                        |    8 +
 test/source/static_files.html                      |    4 +
 test/source/unpublished.html                       |    7 +
 test/test_cleaner.rb                               |   77 ++
 test/test_coffeescript.rb                          |   49 +
 test/test_collections.rb                           |  224 +++++
 test/test_command.rb                               |   70 +-
 test/test_configuration.rb                         |   66 +-
 test/test_convertible.rb                           |   20 +-
 test/test_document.rb                              |  193 ++++
 test/test_draft.rb                                 |   56 ++
 test/test_entry_filter.rb                          |   54 +-
 test/test_excerpt.rb                               |   55 +-
 test/test_filters.rb                               |  104 +-
 test/test_generated_site.rb                        |   20 +-
 test/test_kramdown.rb                              |    4 +-
 test/test_layout_reader.rb                         |   34 +
 test/test_liquid_extensions.rb                     |   31 +
 test/test_log_adapter.rb                           |   59 ++
 test/test_new_command.rb                           |   10 +-
 test/test_page.rb                                  |   58 +-
 test/test_pager.rb                                 |  116 ---
 test/test_post.rb                                  |  183 +++-
 test/test_redcarpet.rb                             |   26 +-
 test/test_sass.rb                                  |   26 +
 test/test_site.rb                                  |  165 +++-
 test/test_tags.rb                                  |  259 ++---
 test/{test_core_ext.rb => test_utils.rb}           |   47 +-
 249 files changed, 10826 insertions(+), 3977 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..42bba81
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+Gemfile.lock
+test/dest
+*.gem
+pkg/
+*.swp
+*~
+_site/
+.bundle/
+.DS_Store
+bbin/
+gh-pages/
+site/_site/
+coverage
+.ruby-version
+.sass-cache
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..09b649a
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,27 @@
+language: ruby
+cache: bundler
+install:
+- script/rebund download
+- travis_retry bundle install --path vendor/bundle
+rvm:
+- 2.1
+- 2.0
+- 1.9.3
+script: script/cibuild
+after_script:
+- script/rebund upload
+notifications:
+  irc:
+    on_success: change
+    on_failure: change
+    channels:
+    - irc.freenode.org#jekyll
+    template:
+    - '%{repository}#%{build_number} (%{branch}) %{message} %{build_url}'
+  email:
+    on_success: never
+    on_failure: never
+env:
+  global:
+  - secure: bt5nglPTdsc0N5fB1dOJz2WbM81dGpDuVD8PnhEsxgUfoo6xavhU4+pNrUADlSUqQ1aJrdU+MKW4x+JZ2ZnJS8vOpNzRymuMZSbFaljK4pgFGiKFgBdMKxVikvoYcxKCjLAl7NJZ11W6hUw+JtJScClDZwrJJAQB6I7Isp/LsdM=
+  - secure: Ym8nx7nbfGYGo47my92M+deJykaiMkdZdb615EO51liv/xy/0aQ919Jpfieugc9d3zVnm+zFGPbpv4YzRpsik6OlVBNa4lP+BnQ27ptf5YcLWD8Hksi7845WFLecXMoaTCoYer/TvYZsIWJb2nSDMH9qbfZhnd1YZKuvUpK0rEU=
diff --git a/CONTRIBUTING.markdown b/CONTRIBUTING.markdown
index 6df9962..9453341 100644
--- a/CONTRIBUTING.markdown
+++ b/CONTRIBUTING.markdown
@@ -4,11 +4,11 @@ Contribute
 So you've got an awesome idea to throw into Jekyll. Great! Please keep the
 following in mind:
 
-* **Contributions will not be accepted without tests.**
+* **Contributions will not be accepted without tests or necessary documentation updates.**
 * If you're creating a small fix or patch to an existing feature, just a simple
   test will do. Please stay in the confines of the current test suite and use
-  [Shoulda](http://github.com/thoughtbot/shoulda/tree/master) and
-  [RR](http://github.com/btakita/rr/tree/master).
+  [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and
+  [RR](https://github.com/rr/rr).
 * If it's a brand new feature, make sure to create a new
   [Cucumber](https://github.com/cucumber/cucumber/) feature and reuse steps
   where appropriate. Also, whipping up some documentation in your fork's `site`
@@ -53,7 +53,7 @@ Here's the most direct way to get your work merged into the project:
 * Make sure everything still passes by running `rake`.
 * If necessary, rebase your commits into logical chunks, without errors.
 * Push the branch up ( `git push origin my_awesome_feature` ).
-* Create a pull request against mojombo/jekyll and describe what your change
+* Create a pull request against jekyll/jekyll and describe what your change
   does and the why you think it should be merged.
 
 Updating Documentation
@@ -63,14 +63,14 @@ We want the Jekyll documentation to be the best it can be. We've
 open-sourced our docs and we welcome any pull requests if you find it
 lacking.
 
-You can find the documentation for jekyllrb.com in the 
-[site](https://github.com/mojombo/jekyll/tree/master/site) directory of
+You can find the documentation for jekyllrb.com in the
+[site](https://github.com/jekyll/jekyll/tree/master/site) directory of
 Jekyll's repo on GitHub.com.
 
 All documentation pull requests should be directed at `master`.  Pull
-requests directed at another branch will not be accepted. 
+requests directed at another branch will not be accepted.
 
-The [Jekyll wiki](https://github.com/mojombo/jekyll/wiki) on GitHub 
+The [Jekyll wiki](https://github.com/jekyll/jekyll/wiki) on GitHub
 can be freely updated without a pull request as all GitHub users have access.
 
 Gotchas
@@ -78,7 +78,7 @@ Gotchas
 
 * If you want to bump the gem version, please put that in a separate commit.
   This way, the maintainers can control when the gem gets released.
-* Try to keep your patch(es) based from the latest commit on mojombo/jekyll.
+* Try to keep your patch(es) based from the latest commit on jekyll/jekyll.
   The easier it is to apply your work, the less work the maintainers have to do,
   which is always a good thing.
 * Please don't tag your GitHub issue with [fix], [feature], etc. The maintainers
diff --git a/History.markdown b/History.markdown
index a5b5d73..1246165 100644
--- a/History.markdown
+++ b/History.markdown
@@ -10,11 +10,415 @@
 
 ### Site Enhancements
 
+## 2.2.0 / 2014-07-29
+
+### Minor Enhancements
+
+  * Throw a warning if the specified layout does not exist (#2620)
+  * Whitelist Pygments options in safe mode (#2642)
+
+### Bug Fixes
+
+  * Remove unnecessary `Jekyll::Tags::IncludeTag#blank?` method (#2625)
+  * Categories in the path are ignored (#2633)
+
+### Development Fixes
+
+  * Refactoring Errors & Requires of Third-Party stuff (#2591)
+  * Add further tests for categories (#2584)
+  * Proof site with html-proofer on change (#2605)
+  * Fix up bug in #2605 which caused proofing the site not to function (#2608)
+  * Use `bundle exec` in `script/proof` (#2610)
+
+### Site Enhancements
+
+  * Update Kramdown urls (#2588)
+  * Add `Jekyll::AutolinkEmail` and `Jekyll::GitMetadata` to the list of
+    third-party plugins (#2596)
+  * Fix a bunch of broken links in the site (#2601)
+  * Replace dead links with working links (#2611)
+  * Add jekyll-hook to deployment methods (#2617)
+  * Added kramdown-with-pygments plugin to the list of third-party plugins (#2623)
+  * Update outdated "Extras" page and remove duplicate documentation (#2622)
+  * Add co2 plugin to list of third-party plugins (#2639)
+  * Attempt to clarify the way Sass imports happen (#2642)
+
+## 2.1.1 / 2014-07-01
+
+### Bug Fixes
+
+  * Patch read vulnerabilities for data & confirm none for layouts (#2563)
+  * Update Maruku dependency to allow use of the latest version (#2576)
+  * Remove conditional assignment from document URL to prevent stale urls (#2575)
+
+### Site Enhancements
+
+  * Add vertical margin to `highlight` to separate code blocks (#2558)
+  * Add `html_pages` to Variables docs (#2567)
+  * Fixed broken link to Permalinks page (#2572)
+  * Update link to Windows installation guide (#2578)
+
+## 2.1.0 / 2014-06-28
+
+### Minor Enhancements
+
+  * Bump to the latest Liquid version, 2.6.1 (#2495)
+  * Add support for JSON files in the `_data` directory (#2369)
+  * Allow subclasses to override `EXCERPT_ATTRIBUTES_FOR_LIQUID` (#2408)
+  * Add `Jekyll.env` and `jekyll.environment` (the Liquid var) (#2417)
+  * Use `_config.yaml` or `_config.yml` (`.yml` takes precedence) (#2406)
+  * Override collection url template (#2418)
+  * Allow subdirectories in `_data` (#2395)
+  * Extract Pagination Generator into gem: `jekyll-paginate` (#2455)
+  * Utilize `date_to_rfc822` filter in site template (#2437)
+  * Add categories, last build datetime, and generator to site template
+    feed (#2438)
+  * Configurable, replaceable Logger-compliant logger (#2444)
+  * Extract `gist` tag into a separate gem (#2469)
+  * Add `collection` attribute to `Document#to_liquid` to access the
+    document's collection label. (#2436)
+  * Upgrade listen to `2.7.6 <= x < 3.0.0` (#2492)
+  * Allow configuration of different Twitter and GitHub usernames in site template (#2485)
+  * Bump Pygments to v0.6.0 (#2504)
+  * Front-matter defaults for documents in collections (#2419)
+  * Include files with a url which ends in `/` in the `site.html_pages` list (#2524)
+  * Make `highlight` tag use `language-` prefix in CSS class (#2511)
+  * Lookup item property via `item#to_liquid` before `#data` or `#[]` in filters (#2493)
+  * Skip initial build of site on serve with flag (#2477)
+  * Add support for `hl_lines` in `highlight` tag (#2532)
+  * Spike out `--watch` flag into a separate gem (#2550)
+
+### Bug Fixes
+
+  * Liquid `sort` filter should sort even if one of the values is `nil` (#2345)
+  * Remove padding on `pre code` in the site template CSS (#2383)
+  * Set `log_level` earlier to silence info level configuration output (#2393)
+  * Only list pages which have `title` in site template (#2411)
+  * Accept `Numeric` values for dates, not `Number` values (#2377)
+  * Prevent code from overflowing container in site template (#2429)
+  * Encode URLs in UTF-8 when escaping and unescaping (#2420)
+  * No Layouts or Liquid for Asset Files (#2431)
+  * Allow front-matter defaults to set post categories (#2373)
+  * Fix command in subcommand deprecation warning (#2457)
+  * Keep all parent directories of files/dirs in `keep_files` (#2458)
+  * When using RedCarpet and Rouge without Rouge installed, fixed erroneous
+    error which stated that redcarpet was missing, not rouge. (#2464)
+  * Ignore *all* directories and files that merit it on auto-generation (#2459)
+  * Before copying file, explicitly remove the old one (#2535)
+  * Merge file system categories with categories from YAML. (#2531)
+  * Deep merge front matter defaults (#2490)
+  * Ensure exclude and include arrays are arrays of strings (#2542)
+  * Allow collections to have dots in their filenames (#2552)
+  * Collections shouldn't try to read in directories as files (#2552)
+  * Be quiet very quickly. (#2520)
+
+### Development Fixes
+
+  * Test Ruby 2.1.2 instead of 2.1.1 (#2374)
+  * Add test for sorting UTF-8 characters (#2384)
+  * Use `https` for GitHub links in documentation (#2470)
+  * Remove coverage reporting with Coveralls (#2494)
+  * Fix a bit of missing TomDoc to `Jekyll::Commands::Build#build` (#2554)
+
+### Site Enhancements
+
+  * Set `timezone` to `America/Los_Angeles` (#2394)
+  * Improve JavaScript in `anchor_links.html` (#2368)
+  * Remove note on Quickstart page about default markdown converter (#2387)
+  * Remove broken link in extras.md to a Maruku fork (#2401)
+  * Update Font Awesome to v4.1.0. (#2410)
+  * Fix broken link on Installation page to Templates page (#2421)
+  * Prevent table from extending parent width in permalink style table (#2424)
+  * Add collections to info about pagination support (#2389)
+  * Add `jekyll_github_sample` plugin to list of third-party plugins (#2463)
+  * Clarify documentation around front-matter defaults and add details
+    about defaults for collections. (#2439)
+  * Add Jekyll Project Version Tag to list of third-party plugins (#2468)
+  * Use `https` for GitHub links across whole site (#2470)
+  * Add StickerMule + Jekyll post (#2476)
+  * Add Jekyll Asset Pipeline Reborn to list of third-party plugins (#2479)
+  * Add link to jekyll-compress-html to list of third-party plugins (#2514)
+  * Add Piwigo Gallery to list of third-party plugins (#2526)
+  * Set `show_drafts` to `false` in default configuration listing (#2536)
+  * Provide an updated link for Windows installation instructions (#2544)
+  * Remove `url` from configuration docs (#2547)
+  * Documentation for Continuous Integration for your Jekyll Site (#2432)
+
+## 2.0.3 / 2014-05-08
+
+### Bug Fixes
+
+  * Properly prefix links in site template with URL or baseurl depending upon
+    need. (#2319)
+  * Update gist tag comments and error message to require username (#2326)
+  * Fix `permalink` setting in site template (#2331)
+  * Don't fail if any of the path objects are nil (#2325)
+  * Instantiate all descendants for converters and generators, not just
+    direct subclasses (#2334)
+  * Replace all instances of `site.name` with `site.title` in site template (#2324)
+  * `Jekyll::Filters#time` now accepts UNIX timestamps in string or number form (#2339)
+  * Use `item_property` for `where` filter so it doesn't break on collections (#2359)
+  * Rescue errors thrown so `--watch` doesn't fail (#2364)
+
+### Site Enhancements
+
+  * Add missing "as" to assets docs page (#2337)
+  * Update docs to reflect new `baseurl` default (#2341)
+  * Add links to headers who have an ID. (#2342)
+  * Use symbol instead of HTML number in `upgrading.md` (#2351)
+  * Fix link to frontmatter defaults docs (#2353)
+  * Fix for `History.markdown` in order to fix history page in docs (#2363)
+
+## 2.0.2 / 2014-05-07
+
+### Bug Fixes
+
+  * Correct use of `url` and `baseurl` in the site template. (#2317)
+  * Default `baseurl` to `""` (#2317)
+
+### Site Enhancements
+
+  * Correct docs for the `gist` plugin so it always includes the username. (#2314)
+  * Clarify new (defaults, `where` filter) features in docs (#2316)
+
+## 2.0.1 / 2014-05-06
+
+### Bug Fixes
+
+  * Require `kramdown` gem instead of `maruku` gem
+
+## 2.0.0 / 2014-05-06
+
+### Major Enhancements
+  * Add "Collections" feature (#2199)
+  * Add gem-based plugin whitelist to safe mode (#1657)
+  * Replace the commander command line parser with a more robust
+    solution for our needs called `mercenary` (#1706)
+  * Remove support for Ruby 1.8.x (#1780)
+  * Move to jekyll/jekyll from mojombo/jekyll (#1817)
+  * Allow custom markdown processors (#1872)
+  * Provide support for the Rouge syntax highlighter (#1859)
+  * Provide support for Sass (#1932)
+  * Provide a 300% improvement when generating sites that use
+    `Post#next` or `Post#previous` (#1983)
+  * Provide support for CoffeeScript (#1991)
+  * Replace Maruku with Kramdown as Default Markdown Processor (#1988)
+  * Expose `site.static_files` to Liquid (#2075)
+  * Complete redesign of the template site generated by `jekyll new` (#2050)
+  * Update Listen from 1.x to 2.x (#2097)
+  * Front-matter defaults (#2205)
+  * Deprecate `relative_permalinks` configuration option (default to `false`) (#2307)
+  * Exclude files based on prefix as well as `fnmatch?` (#2303)
+
+### Minor Enhancements
+  * Move the EntryFilter class into the Jekyll module to avoid polluting the
+    global namespace (#1800)
+  * Add `group_by` Liquid filter create lists of items grouped by a common
+    property's value (#1788)
+  * Add support for Maruku's `fenced_code_blocks` option (#1799)
+  * Update Redcarpet dependency to ~> 3.0 (#1815)
+  * Automatically sort all pages by name (#1848)
+  * Better error message when time is not parseable (#1847)
+  * Allow `include` tag variable arguments to use filters (#1841)
+  * `post_url` tag should raise `ArgumentError` for invalid name (#1825)
+  * Bump dependency `mercenary` to `~> 0.2.0` (#1879)
+  * Bump dependency `safe_yaml` to `~> 1.0` (#1886)
+  * Allow sorting of content by custom properties (#1849)
+  * Add `--quiet` flag to silence output during build and serve (#1898)
+  * Add a `where` filter to filter arrays based on a key/value pair
+    (#1875)
+  * Route 404 errors to a custom 404 page in development (#1899)
+  * Excludes are now relative to the site source (#1916)
+  * Bring MIME Types file for `jekyll serve` to complete parity with GH Pages
+    servers (#1993)
+  * Adding Breakpoint to make new site template more responsive (#2038)
+  * Default to using the UTF-8 encoding when reading files. (#2031)
+  * Update Redcarpet dependency to ~> 3.1 (#2044)
+  * Remove support for Ruby 1.9.2 (#2045)
+  * Add `.mkdown` as valid Markdown extension (#2048)
+  * Add `index.xml` to the list of WEBrick directory index files (#2041)
+  * Make the `layouts` config key relative to CWD or to source (#2058)
+  * Update Kramdown to `~> 1.3` (#1894)
+  * Remove unnecessary references to `self` (#2090)
+  * Update to Mercenary v0.3.x (#2085)
+  * Ship Sass support as a separate gem (#2098)
+  * Extract core extensions into a Utils module (#2112)
+  * Refactor CLI & Commands For Greater Happiness (#2143)
+  * Provide useful error when Pygments returns `nil` and error out (#2148)
+  * Add support for unpublished drafts (#2164)
+  * Add `force_polling` option to the `serve` command (#2165)
+  * Clean up the `<head>` in the site template (#2186)
+  * Permit YAML blocks to end with three dots to better conform with the
+    YAML spec (#2110)
+  * Use `File.exist?` instead of deprecated `File.exists?` (#2214)
+  * Require newline after start of YAML front-matter header (#2211)
+  * Add the ability for pages to be marked as `published: false` (#1492)
+  * Add `Jekyll::LiquidExtensions` with `.lookup_variable` method for easy
+    looking up of variable values in a Liquid context. (#2253)
+  * Remove literal lang name from class (#2292)
+  * Return `utf-8` encoding in header for  webrick error page response (#2289)
+  * Make template site easier to customize (#2268)
+  * Add two-digit year to permalink template option (#2301)
+  * Add `site.documents` to Liquid payload (list of all docs) (#2295)
+  * Take into account missing values in the Liquid sort filter (#2299)
+
+### Bug Fixes
+  * Don't allow nil entries when loading posts (#1796)
+  * Remove the scrollbar that's always displayed in new sites generated
+    from the site template (#1805)
+  * Add `#path` to required methods in `Jekyll::Convertible` (#1866)
+  * Default Maruku fenced code blocks to ON for 2.0.0-dev (#1831)
+  * Change short opts for host and port for `jekyll docs` to be consistent with
+    other subcommands (#1877)
+  * Fix typos (#1910)
+  * Lock Maruku at 0.7.0 to prevent bugs caused by Maruku 0.7.1 (#1958)
+  * Fixes full path leak to source directory when using include tag (#1951)
+  * Don't generate pages that aren't being published (#1931)
+  * Use `SafeYAML.load` to avoid conflicts with other projects (#1982)
+  * Relative posts should never fail to build (#1976)
+  * Remove executable bits of non executable files (#2056)
+  * `#path` for a draft is now `_drafts` instead of `_posts` (#2042)
+  * Patch a couple show-stopping security vulnerabilities (#1946)
+  * Sanitize paths uniformly, in a Windows-friendly way (#2065, #2109)
+  * Update gem build steps to work correctly on Windows (#2118)
+  * Remove obsolete `normalize_options` method call from `bin/jekyll` (#2121).
+  * Remove `+` characters from Pygments lexer names when adding as a CSS
+    class (#994)
+  * Remove some code that caused Ruby interpreter warnings (#2178)
+  * Only strip the drive name if it begins the string (#2175)
+  * Remove default post with invalid date from site template (#2200)
+  * Fix `Post#url` and `Page#url` escape (#1568)
+  * Strip newlines from the `{% highlight %}` block content (#1823)
+  * Load in `rouge` only when it's been requested as the highlighter (#2189)
+  * Convert input to string before XML escaping (`xml_escape` liquid filter) (#2244)
+  * Modify configuration key for Collections and reset properly. (#2238)
+  * Avoid duplicated output using `highlight` tag (#2264)
+  * Only use Jekyll.logger for output (#2307)
+  * Close the file descriptor in `has_yaml_header?` (#2310)
+  * Add `output` to `Document` liquid output hash (#2309)
+
+### Development Fixes
+  * Add a link to the site in the README.md file (#1795)
+  * Add in History and site changes from `v1-stable` branch (#1836)
+  * Testing additions on the Excerpt class (#1893)
+  * Fix the `highlight` tag feature (#1859)
+  * Test Jekyll under Ruby 2.1.0 (#1900)
+  * Add script/cibuild for fun and profit (#1912)
+  * Use `Forwardable` for delegation between `Excerpt` and `Post`
+    (#1927)
+  * Rename `read_things` to `read_content` (#1928)
+  * Add `script/branding` script for ASCII art lovin' (#1936)
+  * Update the README to reflect the repo move (#1943)
+  * Add the project vision to the README (#1935)
+  * Speed up Travis CI builds by using Rebund (#1985)
+  * Use Yarp as a Gem proxy for Travis CI (#1984)
+  * Remove Yarp as a Gem proxy for Travis CI (#2004)
+  * Move the reading of layouts into its own class (#2020)
+  * Test Sass import (#2009)
+  * Switch Maruku and Kramdown in lists of Runtime vs. Development dependencies (#2049)
+  * Clean up the gemspec for the project (#2095)
+  * Add Japanese translation of README and CONTRIBUTING docs. (#2081)
+  * Re-align the tables in Cucumber (#2108)
+  * Trim trailing spaces and convert tabs to spaces (#2122)
+  * Fix the failing Travis scenarios due to Cucumber issues (#2155)
+  * Wrap `bundle install` in `travis_retry` to retry when RubyGems fails (#2160)
+  * Refactor tags and categories (#1639)
+  * Extract plugin management into its own class (#2197)
+  * Add missing tests for `Command` (#2216)
+  * Update `rr` link in CONTRIBUTING doc (#2247)
+  * Streamline Cucumber execution of `jekyll` subcommands (#2258)
+  * Refactor `Commands::Serve`. (#2269)
+  * Refactor `highlight` tag (#2154)
+  * Update `Util` hash functions with latest from Rails (#2273)
+  * Workaround for Travis bug (#2290)
+
+### Site Enhancements
+  * Document Kramdown's GFM parser option (#1791)
+  * Move CSS to includes & update normalize.css to v2.1.3 (#1787)
+  * Minify CSS only in production (#1803)
+  * Fix broken link to installation of Ruby on Mountain Lion blog post on
+    Troubleshooting docs page (#1797)
+  * Fix issues with 1.4.1 release blog post (#1804)
+  * Add note about deploying to OpenShift (#1812)
+  * Collect all Windows-related docs onto one page (#1818)
+  * Fixed typo in datafiles doc page (#1854)
+  * Clarify how to access `site` in docs (#1864)
+  * Add closing `<code>` tag to `context.registers[:site]` note (#1867)
+  * Fix link to @mojombo's site source (#1897)
+  * Add `paginate: nil` to default configuration in docs (#1896)
+  * Add link to our License in the site footer (#1889)
+  * Add a charset note in "Writing Posts" doc page (#1902)
+  * Disallow selection of path and prompt in bash examples
+  * Add jekyll-compass to the plugin list (#1923)
+  * Add note in Posts docs about stripping `<p>` tags from excerpt (#1933)
+  * Add additional info about the new exclude behavior (#1938)
+  * Linkify 'awesome contributors' to point to the contributors graph on
+    GitHub (#1940)
+  * Update `docs/sites.md` link to GitHub Training materials (#1949)
+  * Update `master` with the release info from 1.4.3 (#1947)
+  * Define docs nav in datafile (#1953)
+  * Clarify the docs around the naming convention for posts (#1971)
+  * Add missing `next` and `previous` docs for post layouts and templates (#1970)
+  * Add note to `Writing posts` page about how to strip html from excerpt (#1962)
+  * Add `jekyll-humanize` plugin to plugin list (#1998)
+  * Add `jekyll-font-awesome` plugin to plugin list (#1999)
+  * Add `sublime-jekyll` to list of Editor plugins (#2001)
+  * Add `vim-jekyll` to the list of Editor plugins (#2005)
+  * Fix non-semantic nesting of `p` tags in `news_item` layout (#2013)
+  * Document destination folder cleaning (#2016)
+  * Updated instructions for NearlyFreeSpeech.NET installation (#2015)
+  * Update link to rack-jekyll on "Deployment Methods" page (#2047)
+  * Fix typo in /docs/configuration (#2073)
+  * Fix count in docs for `site.static_files` (#2077)
+  * Update configuration docs to indicate utf-8 is the default for 2.0.0
+    and ASCII for 1.9.3 (#2074)
+  * Add info about unreleased feature to the site (#2061)
+  * Add whitespace to liquid example in GitHub Pages docs (#2084)
+  * Clarify the way Sass and CoffeeScript files are read in and output (#2067)
+  * Add lyche gallery tag plugin link to list of plugins (#2094)
+  * Add Jekyll Pages Directory plugin to list of plugins (#2096)
+  * Update Configuration docs page with new markdown extension (#2102)
+  * Add `jekyll-image-set` to the list of third-party plugins (#2105)
+  * Losslessly compress images (#2128)
+  * Update normalize.css to 3.0.0 (#2126)
+  * Update modernizr to v2.7.1 (#2129)
+  * Add `jekyll-ordinal` to list of third-party plugins (#2150)
+  * Add `jekyll_figure` to list of third-party plugins (#2158)
+  * Clarify the documentation for safe mode (#2163)
+  * Some HTML tidying (#2130)
+  * Remove modernizr and use html5shiv.js directly for IE less than v9 (#2131)
+  * Remove unused images (#2187)
+  * Use `array_to_sentence_string` filter when outputting news item
+    categories (#2191)
+  * Add link to Help repo in primary navigation bar (#2177)
+  * Switch to using an ico file for the shortcut icon (#2193)
+  * Use numbers to specify font weights and only bring in font weights used (#2185)
+  * Add a link to the list of all tz database time zones (#1824)
+  * Clean-up and improve documentation `feed.xml` (#2192)
+  * Remove duplicate entry in list of third-party plugins (#2206)
+  * Reduce the whitespace in the favicon. (#2213)
+  * Add `jekyll-page-collections` to list of third-party plugins (#2215)
+  * Add a cross-reference about `post_url` (#2243)
+  * Add `jekyll-live-tiles` to list of third-party plugins (#2250)
+  * Fixed broken link to GitHub training material site source (#2257)
+  * Update link to help repo, now called `jekyll-help` (#2277)
+  * Fix capitalization of 'Jekyll' on Deployment Methods page (#2291)
+  * Include plugins by sonnym in list of third-party plugins (#2297)
+  * Add deprecated articles keeper filter to list of third-party plugins (#2300)
+  * Simplify and improve our CSS. (#2127)
+  * Use black text color for the mobile navbar (#2306)
+  * Use the built in date filter and `site.time` for the copyright year. (#2305)
+  * Update html5shiv to v3.7.2 (#2304)
+  * Add 2.0.0 release post (#2298)
+  * Add docs for custom markdown processors (#2298)
+  * Add docs for `where` and `group_by` Liquid filters (#2298)
+  * Remove notes in docs for unreleased features (#2309)
+
 ## 1.5.1 / 2014-03-27
 
 ### Bug Fixes
 
-* Only strip the drive name if it begins the string (#2176)
+  * Only strip the drive name if it begins the string (#2176)
 
 ## 1.5.0 / 2014-03-24
 
@@ -30,12 +434,11 @@
 
 ### Development Fixes
 
-  * Lock `cucmber` at `1.3.11` (#2167)
+  * Lock `cucumber` at `1.3.11` (#2167)
 
 ## 1.4.3 / 2014-01-13
 
 ### Bug Fixes
-
   * Patch show-stopping security vulnerabilities (#1944)
 
 ## 1.4.2 / 2013-12-16
@@ -155,7 +558,7 @@
   * Refactor Site#render (#1638)
   * Remove duplication in command line options (#1637)
   * Add tests for all the coderay options (#1543)
-  * Improve some of the cucumber test code (#1493)
+  * Improve some of the Cucumber test code (#1493)
   * Improve comparisons of timestamps by ignoring the seconds (#1582)
 
 ### Site Enhancements
@@ -325,7 +728,7 @@
   * Latest posts first in non-LSI `related_posts` (#1271)
 
 ### Development Fixes
-  * Merge the theme and layout cucumber steps into one step (#1151)
+  * Merge the theme and layout Cucumber steps into one step (#1151)
   * Restrict activesupport dependency to pre-4.0.0 to maintain compatibility with `<= 1.9.2`
   * Include/exclude deprecation handling simplification (#1284)
   * Convert README to Markdown. (#1267)
@@ -355,7 +758,7 @@
   * Update contributor information (#1192)
   * Update URL of article about Blogger migration (#1242)
   * Specify that RedCarpet is the default for new Jekyll sites on Quickstart page (#1247)
-  * Added site.pages to Variables page in docs (#1251)
+  * Added `site.pages` to Variables page in docs (#1251)
   * Add Youku and Tudou Embed link on Plugins page. (#1250)
   * Add note that `gist` tag supports private gists. (#1248)
   * Add `jekyll-timeago` to list of third-party plugins. (#1260)
@@ -373,7 +776,7 @@
 
 ### Minor Enhancements
   * Add support to gist tag for private gists. (#1189)
-  * Fail loudly when MaRuKu errors out (#1190)
+  * Fail loudly when Maruku errors out (#1190)
   * Move the building of related posts into their own class (#1057)
   * Removed trailing spaces in several places throughout the code (#1116)
   * Add a `--force` option to `jekyll new` (#1115)
@@ -439,7 +842,7 @@
 ## 1.0.1 / 2013-05-08
 
 ### Minor Enhancements
-  * Do not force use of toc_token when using generate_tok in RDiscount (#1048)
+  * Do not force use of `toc_token` when using `generate_tok` in RDiscount (#1048)
   * Add newer `language-` class name prefix to code blocks (#1037)
   * Commander error message now preferred over process abort with incorrect args (#1040)
 
@@ -462,15 +865,15 @@
 ## 1.0.0 / 2013-05-06
 
 ### Major Enhancements
-  * Add `jekyll new` subcommand: generate a jekyll scaffold (#764)
-  * Refactored jekyll commands into subcommands: build, serve, and migrate. (#690)
+  * Add `jekyll new` subcommand: generate a Jekyll scaffold (#764)
+  * Refactored Jekyll commands into subcommands: build, serve, and migrate. (#690)
   * Removed importers/migrators from main project, migrated to jekyll-import sub-gem (#793)
   * Added ability to render drafts in `_drafts` folder via command line (#833)
   * Add ordinal date permalink style (/:categories/:year/:y_day/:title.html) (#928)
 
 ### Minor Enhancements
   * Site template HTML5-ified (#964)
-  * Use post's directory path when matching for the post_url tag (#998)
+  * Use post's directory path when matching for the `post_url` tag (#998)
   * Loosen dependency on Pygments so it's only required when it's needed (#1015)
   * Parse strings into Time objects for date-related Liquid filters (#1014)
   * Tell the user if there is no subcommand specified (#1008)
@@ -484,7 +887,7 @@
   * Expose new attribute to Liquid via `page`: `page.path` (#951)
   * Accept multiple config files from command line (#945)
   * Add page variable to liquid custom tags and blocks (#413)
-  * Add paginator.previous_page_path and paginator.next_page_path (#942)
+  * Add `paginator.previous_page_path` and `paginator.next_page_path` (#942)
   * Backwards compatibility for 'auto' (#821, #934)
   * Added date_to_rfc822 used on RSS feeds (#892)
   * Upgrade version of pygments.rb to 0.4.2 (#927)
@@ -503,7 +906,7 @@
   * Relaxed Kramdown version to 0.14 (#808)
   * Aliased `jekyll server` to `jekyll serve`. (#792)
   * Updated gem versions for Kramdown, Rake, Shoulda, Cucumber, and RedCarpet. (#744)
-  * Refactored jekyll subcommands into Jekyll::Commands submodule, which now contains them (#768)
+  * Refactored Jekyll subcommands into Jekyll::Commands submodule, which now contains them (#768)
   * Rescue from import errors in Wordpress.com migrator (#671)
   * Massively accelerate LSI performance (#664)
   * Truncate post slugs when importing from Tumblr (#496)
@@ -518,7 +921,7 @@
   * Paginate in subdirectories properly (#1016)
   * Ensure post and page URLs have a leading slash (#992)
   * Catch all exceptions, not just StandardError descendents (#1007)
-  * Bullet-proof limit_posts option (#1004)
+  * Bullet-proof `limit_posts` option (#1004)
   * Read in YAML as UTF-8 to accept non-ASCII chars (#836)
   * Fix the CLI option `--plugins` to actually accept dirs and files (#993)
   * Allow 'excerpt' in YAML Front-Matter to override the extracted excerpt (#946)
@@ -530,10 +933,10 @@
   * Force usage of older directory_watcher gem as 1.5 is broken (#883)
   * Ensure all Post categories are downcase (#842, #872)
   * Force encoding of the rdiscount TOC to UTF8 to avoid conversion errors (#555)
-  * Patch for multibyte URI problem with jekyll serve (#723)
+  * Patch for multibyte URI problem with `jekyll serve` (#723)
   * Order plugin execution by priority (#864)
   * Fixed Page#dir and Page#url for edge cases (#536)
-  * Fix broken post_url with posts with a time in their YAML Front-Matter (#831)
+  * Fix broken `post_url` with posts with a time in their YAML Front-Matter (#831)
   * Look for plugins under the source directory (#654)
   * Tumblr Migrator: finds `_posts` dir correctly, fixes truncation of long
       post names (#775)
@@ -555,7 +958,7 @@
 ### Development Fixes
   * Exclude Cucumber 1.2.4, which causes tests to fail in 1.9.2 (#938)
   * Added "features:html" rake task for debugging purposes, cleaned up
-      cucumber profiles (#832)
+      Cucumber profiles (#832)
   * Explicitly require HTTPS rubygems source in Gemfile (#826)
   * Changed Ruby version for development to 1.9.3-p374 from p362 (#801)
   * Including a link to the GitHub Ruby style guide in CONTRIBUTING.md (#806)
@@ -565,6 +968,7 @@
   * Switch to Simplecov for coverage report (#765)
 
 ## 0.12.1 / 2013-02-19
+
 ### Minor Enhancements
   * Update Kramdown version to 0.14.1 (#744)
   * Test Enhancements
@@ -573,11 +977,12 @@
   * Update Redcarpet version to 2.2.2 (#744)
 
 ## 0.12.0 / 2012-12-22
+
 ### Minor Enhancements
   * Add ability to explicitly specify included files (#261)
-  * Add --default-mimetype option (#279)
+  * Add `--default-mimetype` option (#279)
   * Allow setting of RedCloth options (#284)
-  * Add post_url Liquid tag for internal post linking (#369)
+  * Add `post_url` Liquid tag for internal post linking (#369)
   * Allow multiple plugin dirs to be specified (#438)
   * Inline TOC token support for RDiscount (#333)
   * Add the option to specify the paginated url format (#342)
@@ -587,9 +992,9 @@
   * Bug Fixes
   * Allow some special characters in highlight names
   * URL escape category names in URL generation (#360)
-  * Fix error with limit_posts (#442)
+  * Fix error with `limit_posts` (#442)
   * Properly select dotfile during directory scan (#363, #431, #377)
-  * Allow setting of Kramdown smart_quotes (#482)
+  * Allow setting of Kramdown `smart_quotes` (#482)
   * Ensure front-matter is at start of file (#562)
 
 ## 0.11.2 / 2011-12-27
@@ -602,6 +1007,7 @@
   * Update dependencies
 
 ## 0.11.0 / 2011-07-10
+
 ### Major Enhancements
   * Add command line importer functionality (#253)
   * Add Redcarpet Markdown support (#318)
@@ -623,9 +1029,10 @@
 
 ## 0.10.0 / 2010-12-16
   * Bug Fixes
-  * Add --no-server option.
+  * Add `--no-server` option.
 
 ## 0.9.0 / 2010-12-15
+
 ### Minor Enhancements
   * Use OptionParser's `[no-]` functionality for better boolean parsing.
   * Add Drupal migrator (#245)
@@ -634,11 +1041,12 @@
   * Add Marley migrator (#28)
 
 ## 0.8.0 / 2010-11-22
+
 ### Minor Enhancements
   * Add wordpress.com importer (#207)
-  * Add --limit-posts cli option (#212)
-  * Add uri_escape filter (#234)
-  * Add --base-url cli option (#235)
+  * Add `--limit-posts` cli option (#212)
+  * Add `uri_escape` filter (#234)
+  * Add `--base-url` cli option (#235)
   * Improve MT migrator (#238)
   * Add kramdown support (#239)
   * Bug Fixes
@@ -647,6 +1055,7 @@
   * Prevent `_includes` dir from being a symlink
 
 ## 0.7.0 / 2010-08-24
+
 ### Minor Enhancements
   * Add support for rdiscount extensions (#173)
   * Bug Fixes
@@ -658,13 +1067,14 @@
   * Fix Rakefile 'release' task (tag pushing was missing origin)
   * Ensure that RedCloth is loaded when textilize filter is used (#183)
   * Expand source, destination, and plugin paths (#180)
-  * Fix page.url to include full relative path (#181)
+  * Fix `page.url` to include full relative path (#181)
 
 ## 0.6.1 / 2010-06-24
   * Bug Fixes
   * Fix Markdown Pygments prefix and suffix (#178)
 
 ## 0.6.0 / 2010-06-23
+
 ### Major Enhancements
   * Proper plugin system (#19, #100)
   * Add safe mode so unsafe converters/generators can be added
@@ -675,9 +1085,9 @@
 ### Minor Enhancements
   * Inclusion/exclusion of future dated posts (#59)
   * Generation for a specific time (#59)
-  * Allocate site.time on render not per site_payload invocation (#59)
+  * Allocate `site.time` on render not per site_payload invocation (#59)
   * Pages now present in the site payload and can be used through the
-      site.pages and site.html_pages variables
+      `site.pages` and `site.html_pages` variables
   * Generate phase added to site#process and pagination is now a generator
   * Switch to RakeGem for build/test process
   * Only regenerate static files when they have changed (#142)
@@ -689,9 +1099,10 @@
   * Fix extension munging when pretty permalinks are enabled (#64)
   * Stop sorting categories (#33)
   * Preserve generated attributes over front matter (#119)
-  * Fix source directory binding using Dir.pwd (#75)
+  * Fix source directory binding using `Dir.pwd` (#75)
 
 ## 0.5.7 / 2010-01-12
+
 ### Minor Enhancements
   * Allow overriding of post date in the front matter (#62, #38)
   * Bug Fixes
@@ -699,7 +1110,7 @@
   * Empty tags causes error in read_posts (#84)
   * Fix pagination to adhere to read/render/write paradigm
   * Test Enhancement
-  * cucumber features no longer use site.posts.first where a better
+  * Cucumber features no longer use site.posts.first where a better
       alternative is available
 
 ## 0.5.6 / 2010-01-08
@@ -740,9 +1151,9 @@
   * Configuration options set in config.yml are now available through the
       site payload (@vilcans)
   * Posts can now have an empty YAML front matter or none at all
-      (@bahuvrihi)
+      (@ bahuvrihi)
   * Bug Fixes
-  * Fixing Ruby 1.9 issue that requires to_s on the err object
+  * Fixing Ruby 1.9 issue that requires `#to_s` on the err object
       (@Chrononaut)
   * Fixes for pagination and ordering posts on the same day (@ujh)
   * Made pages respect permalinks style and permalinks in yml front matter
@@ -752,11 +1163,12 @@
   * Added trailing slash to pretty permalink style so Apache is happy
       (@eugenebolshakov)
   * Bad markdown processor in config fails sooner and with better message
-      (@gcnovus)
+      (@ gcnovus)
   * Allow CRLFs in yaml frontmatter (@juretta)
   * Added Date#xmlschema for Ruby versions < 1.9
 
 ## 0.5.1 / 2009-05-06
+
 ### Major Enhancements
   * Next/previous posts in site payload (@pantulis, @tomo)
   * Permalink templating system
@@ -771,6 +1183,7 @@
   * CGI escaped post titles (@Chrononaut)
 
 ## 0.5.0 / 2009-04-07
+
 ### Minor Enhancements
   * Ability to set post categories via YAML (@qrush)
   * Ability to set prevent a post from publishing via YAML (@qrush)
@@ -789,18 +1202,20 @@
   * Add Cucumber acceptance test suite (@qrush, @technicalpickles)
 
 ## 0.4.1
+
 ### Minor Enhancements
   * Changed date format on wordpress converter (zeropadding) (@dysinger)
   * Bug Fixes
-  * Add jekyll binary as executable to gemspec (@dysinger)
+  * Add Jekyll binary as executable to gemspec (@dysinger)
 
 ## 0.4.0 / 2009-02-03
+
 ### Major Enhancements
   * Switch to Jeweler for packaging tasks
 
 ### Minor Enhancements
   * Type importer (@codeslinger)
-  * site.topics accessor (@baz)
+  * `site.topics` accessor (@baz)
   * Add `array_to_sentence_string` filter (@mchung)
   * Add a converter for textpattern (@PerfectlyNormal)
   * Add a working Mephisto / MySQL converter (@ivey)
@@ -815,8 +1230,9 @@
   * Fix site payload available to files (@matrix9180)
 
 ## 0.3.0 / 2008-12-24
+
 ### Major Enhancements
-  * Added --server option to start a simple WEBrick server on destination
+  * Added `--server` option to start a simple WEBrick server on destination
       directory (@johnreilly and @mchung)
 
 ### Minor Enhancements
@@ -835,23 +1251,24 @@
 ## 0.2.1 / 2008-12-15
   * Major Changes
   * Use Maruku (pure Ruby) for Markdown by default (@mreid)
-  * Allow use of RDiscount with --rdiscount flag
+  * Allow use of RDiscount with `--rdiscount` flag
 
 ### Minor Enhancements
   * Don't load directory_watcher unless it's needed (@pjhyett)
 
 ## 0.2.0 / 2008-12-14
   * Major Changes
-  * related_posts is now found in site.related_posts
+  * related_posts is now found in `site.related_posts`
 
 ## 0.1.6 / 2008-12-13
   * Major Features
   * Include files in `_includes` with `{% include x.textile %}`
 
 ## 0.1.5 / 2008-12-12
+
 ### Major Enhancements
-  * Code highlighting with Pygments if --pygments is specified
-  * Disable true LSI by default, enable with --lsi
+  * Code highlighting with Pygments if `--pygments` is specified
+  * Disable true LSI by default, enable with `--lsi`
 
 ### Minor Enhancements
   * Output informative message if RDiscount is not available (@JackDanger)
@@ -870,7 +1287,7 @@
   * Code hilighting (@vanpelt)
   * Autobuild
   * Bug Fixes
-  * Accept both \r\n and \n in YAML header (@vanpelt)
+  * Accept both `\r\n` and `\n` in YAML header (@vanpelt)
 
 ## 0.1.2 / 2008-11-22
   * Major Features
diff --git a/LICENSE b/LICENSE
index c01df2b..0e5f844 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 (The MIT License)
 
-Copyright (c) 2008 Tom Preston-Werner
+Copyright (c) 2008-2014 Tom Preston-Werner
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the 'Software'), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
diff --git a/README.markdown b/README.markdown
index 6da4d26..124004f 100644
--- a/README.markdown
+++ b/README.markdown
@@ -1,56 +1,35 @@
-# Jekyll
+# [Jekyll](http://jekyllrb.com/)
 
-[![Gem Version](https://badge.fury.io/rb/jekyll.png)](http://badge.fury.io/rb/jekyll)
+[![Gem Version](https://badge.fury.io/rb/jekyll.svg)](https://rubygems.org/gems/jekyll)
+[![Build Status](https://secure.travis-ci.org/jekyll/jekyll.svg?branch=master)](https://travis-ci.org/jekyll/jekyll)
+[![Code Climate](http://img.shields.io/codeclimate/github/jekyll/jekyll.svg)](https://codeclimate.com/github/jekyll/jekyll)
+[![Dependency Status](https://gemnasium.com/jekyll/jekyll.svg)](https://gemnasium.com/jekyll/jekyll)
 
-[![Build Status](https://secure.travis-ci.org/jekyll/jekyll.png?branch=master)](https://travis-ci.org/jekyll/jekyll)
-[![Code Climate](https://codeclimate.com/github/jekyll/jekyll.png)](https://codeclimate.com/github/jekyll/jekyll)
-[![Dependency Status](https://gemnasium.com/jekyll/jekyll.png)](https://gemnasium.com/jekyll/jekyll)
-[![Coverage Status](https://coveralls.io/repos/jekyll/jekyll/badge.png)](https://coveralls.io/r/jekyll/jekyll)
+By Tom Preston-Werner, Nick Quaranto, and many [awesome contributors](https://github.com/jekyll/jekyll/graphs/contributors)!
 
-By Tom Preston-Werner, Nick Quaranto, and many awesome contributors!
+Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind [GitHub Pages](http://pages.github.com), which you can use to host sites right from your GitHub repositories.
 
-Jekyll is a simple, blog aware, static site generator. It takes a template directory (representing the raw form of a website), runs it through Textile or Markdown and Liquid converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server. This is also the engine behind [GitHub Pages](http://pages.github.com), which you can use to host your project's page or blog right here from GitHub.
+## Philosophy
+
+Jekyll does what you tell it to do — no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.
 
 ## Getting Started
 
 * [Install](http://jekyllrb.com/docs/installation/) the gem
 * Read up about its [Usage](http://jekyllrb.com/docs/usage/) and [Configuration](http://jekyllrb.com/docs/configuration/)
-* Take a gander at some existing [Sites](http://wiki.github.com/jekyll/jekyll/sites)
+* Take a gander at some existing [Sites](https://wiki.github.com/jekyll/jekyll/sites)
 * Fork and [Contribute](http://jekyllrb.com/docs/contributing/) your own modifications
-* Have questions? Check out `#jekyll` on irc.freenode.net.
+* Have questions? Check out [`#jekyll` on irc.freenode.net](https://botbot.me/freenode/jekyll/).
 
 ## Diving In
 
-* [Migrate](http://jekyllrb.com/docs/migrations/) from your previous system
+* [Migrate](http://import.jekyllrb.com/docs/home/) from your previous system
 * Learn how the [YAML Front Matter](http://jekyllrb.com/docs/frontmatter/) works
 * Put information on your site with [Variables](http://jekyllrb.com/docs/variables/)
 * Customize the [Permalinks](http://jekyllrb.com/docs/permalinks/) your posts are generated with
 * Use the built-in [Liquid Extensions](http://jekyllrb.com/docs/templates/) to make your life easier
 * Use custom [Plugins](http://jekyllrb.com/docs/plugins/) to generate content specific to your site
 
-## Runtime Dependencies
-
-* Commander: Command-line interface constructor (Ruby)
-* Colorator: Colorizes command line output (Ruby)
-* Classifier: Generating related posts (Ruby)
-* Directory Watcher: Auto-regeneration of sites (Ruby)
-* Liquid: Templating system (Ruby)
-* Maruku: Default markdown engine (Ruby)
-* Pygments.rb: Syntax highlighting (Ruby/Python)
-* RedCarpet: Markdown engine (Ruby)
-* Safe YAML: YAML Parser built for security (Ruby)
-
-## Developer Dependencies
-
-* Kramdown: Markdown-superset converter (Ruby)
-* Launchy: Cross-platform file launcher (Ruby)
-* RDiscount: Discount Markdown Processor (Ruby)
-* RedCloth: Textile support (Ruby)
-* RedGreen: Nicer test output (Ruby)
-* RR: Mocking (Ruby)
-* Shoulda: Test framework (Ruby)
-* SimpleCov: Coverage framework (Ruby)
-
 ## License
 
 See [LICENSE](https://github.com/jekyll/jekyll/blob/master/LICENSE).
diff --git a/Rakefile b/Rakefile
index b8eb85a..0f16adb 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,6 +5,7 @@ require 'date'
 require 'yaml'
 
 $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w[lib]))
+require 'jekyll/version'
 
 #############################################################################
 #
@@ -13,24 +14,11 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w[lib]))
 #############################################################################
 
 def name
-  @name ||= Dir['*.gemspec'].first.split('.').first
+  @name ||= File.basename(Dir['*.gemspec'].first, ".*")
 end
 
 def version
-  line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
-  line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
-end
-
-def date
-  Date.today.to_s
-end
-
-def file_date
-  Date.today.strftime("%F")
-end
-
-def rubyforge_project
-  name
+  Jekyll::VERSION
 end
 
 def gemspec_file
@@ -41,12 +29,8 @@ def gem_file
   "#{name}-#{version}.gem"
 end
 
-def replace_header(head, header_name)
-  head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
-end
-
 def normalize_bullets(markdown)
-  markdown.gsub(/\s{2}\*{1}/, "-")
+  markdown.gsub(/\n\s{2}\*{1}/, "\n-")
 end
 
 def linkify_prs(markdown)
@@ -69,13 +53,32 @@ def liquid_escape(markdown)
   markdown.gsub(/(`{[{%].+[}%]}`)/, "{% raw %}\\1{% endraw %}")
 end
 
+def custom_release_header_anchors(markdown)
+  header_regexp = /^(\d{1,2})\.(\d{1,2})\.(\d{1,2}) \/ \d{4}-\d{2}-\d{2}/
+  section_regexp = /^### \w+ \w+$/
+  markdown.split(/^##\s/).map do |release_notes|
+    _, major, minor, patch = *release_notes.match(header_regexp)
+    release_notes
+      .gsub(header_regexp, "\\0\n{: #v\\1-\\2-\\3}")
+      .gsub(section_regexp) { |section| "#{section}\n{: ##{sluffigy(section)}-v#{major}-#{minor}-#{patch}}" }
+  end.join("\n## ")
+end
+
+def sluffigy(header)
+  header.gsub(/#/, '').strip.downcase.gsub(/\s+/, '-')
+end
+
 def remove_head_from_history(markdown)
   index = markdown =~ /^##\s+\d+\.\d+\.\d+/
   markdown[index..-1]
 end
 
 def converted_history(markdown)
-  remove_head_from_history(liquid_escape(linkify(normalize_bullets(markdown))))
+  remove_head_from_history(
+    custom_release_header_anchors(
+      liquid_escape(
+        linkify(
+          normalize_bullets(markdown)))))
 end
 
 #############################################################################
@@ -84,14 +87,7 @@ end
 #
 #############################################################################
 
-if RUBY_VERSION > '1.9' && ENV["TRAVIS"] == "true"
-  require 'coveralls/rake/task'
-  Coveralls::RakeTask.new
-
-  task :default => [:test, :features, 'coveralls:push']
-else
-  task :default => [:test, :features]
-end
+task :default => [:test, :features]
 
 require 'rake/testtask'
 Rake::TestTask.new(:test) do |test|
@@ -156,7 +152,7 @@ namespace :site do
 
   desc "Update normalize.css library to the latest version and minify"
   task :update_normalize_css do
-    Dir.chdir("site/css") do
+    Dir.chdir("site/_includes/css") do
       sh 'curl "http://necolas.github.io/normalize.css/latest/normalize.css" -o "normalize.scss"'
       sh 'sass "normalize.scss":"normalize.css" --style compressed'
       sh 'rm "normalize.scss"'
@@ -169,7 +165,7 @@ namespace :site do
     puts "Checking for gh-pages dir..."
     unless File.exist?("./gh-pages")
       puts "No gh-pages directory found. Run the following commands first:"
-      puts "  `git clone git at github.com:mojombo/jekyll gh-pages"
+      puts "  `git clone git at github.com:jekyll/jekyll gh-pages"
       puts "  `cd gh-pages"
       puts "  `git checkout gh-pages`"
       exit(1)
@@ -192,7 +188,7 @@ namespace :site do
     sha = `git log`.match(/[a-z0-9]{40}/)[0]
     Dir.chdir('gh-pages') do
       sh "git add ."
-      sh "git commit -m 'Updating to #{sha}.'"
+      sh "git commit --allow-empty -m 'Updating to #{sha}.'"
       sh "git push origin gh-pages"
     end
     puts 'Done.'
@@ -251,9 +247,10 @@ end
 #
 #############################################################################
 
+desc "Release #{name} v#{version}"
 task :release => :build do
-  unless `git branch` =~ /^(\* master|\* v1-stable)$/
-    puts "You must be on the master branch or the v1-stable branch to release!"
+  unless `git branch` =~ /^\* master$/
+    puts "You must be on the master branch to release!"
     exit!
   end
   sh "git commit --allow-empty -m 'Release #{version}'"
@@ -263,36 +260,9 @@ task :release => :build do
   sh "gem push pkg/#{name}-#{version}.gem"
 end
 
-task :build => :gemspec do
-  sh "mkdir -p pkg"
+desc "Build #{name} v#{version} into pkg/"
+task :build do
+  mkdir_p "pkg"
   sh "gem build #{gemspec_file}"
   sh "mv #{gem_file} pkg"
 end
-
-task :gemspec do
-  # read spec file and split out manifest section
-  spec = File.read(gemspec_file)
-  head, manifest, tail = spec.split("  # = MANIFEST =\n")
-
-  # replace name version and date
-  replace_header(head, :name)
-  replace_header(head, :version)
-  replace_header(head, :date)
-  #comment this out if your rubyforge_project has a different name
-  replace_header(head, :rubyforge_project)
-
-  # determine file list from git ls-files
-  files = `git ls-files`.
-    split("\n").
-    sort.
-    reject { |file| file =~ /^\./ }.
-    reject { |file| file =~ /^(rdoc|pkg|coverage)/ }.
-    map { |file| "    #{file}" }.
-    join("\n")
-
-  # piece file back together and write
-  manifest = "  s.files = %w[\n#{files}\n  ]\n"
-  spec = [head, manifest, tail].join("  # = MANIFEST =\n")
-  File.open(gemspec_file, 'w') { |io| io.write(spec) }
-  puts "Updated #{gemspec_file}"
-end
diff --git a/bin/jekyll b/bin/jekyll
index 8f91698..194295c 100755
--- a/bin/jekyll
+++ b/bin/jekyll
@@ -3,156 +3,38 @@ STDOUT.sync = true
 
 $:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
 
-require 'commander/import'
 require 'jekyll'
+require 'mercenary'
 
-Jekyll::Deprecator.process(ARGV)
-
-program :name, 'jekyll'
-program :version, Jekyll::VERSION
-program :description, 'Jekyll is a blog-aware, static site generator in Ruby'
-
-default_command :default
-
-global_option '-s', '--source [DIR]', 'Source directory (defaults to ./)'
-global_option '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)'
-global_option '--safe', 'Safe mode (defaults to false)'
-global_option '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
-global_option '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)'
-
-# Option names don't always directly match the configuration value we'd like.
-# This method will rename options to match what Jekyll configuration expects.
-#
-# options - The Hash of options from Commander.
-#
-# Returns the normalized Hash.
-def normalize_options(options)
-  if drafts_state = options.delete(:drafts)
-    options[:show_drafts] = drafts_state
+%w[jekyll-import].each do |blessed_gem|
+  begin
+    require blessed_gem
+  rescue LoadError
   end
-  options
 end
 
-def add_build_options(c)
-  c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
-  c.option '--future', 'Publishes posts with a future date'
-  c.option '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish'
-  c.option '-w', '--watch', 'Watch for changes and rebuild'
-  c.option '--lsi', 'Use LSI for improved related posts'
-  c.option '-D', '--drafts', 'Render posts in the _drafts folder'
-  c.option '-V', '--verbose', 'Print verbose output.'
-end
-
-command :default do |c|
-  c.action do |args, options|
-    if args.empty?
-      command(:help).run
-    else
-      Jekyll.logger.abort_with "Invalid command. Use --help for more information"
-    end
-  end
-end
-
-command :new do |c|
-  c.syntax = 'jekyll new PATH'
-  c.description = 'Creates a new Jekyll site scaffold in PATH'
-
-  c.option '--force', 'Force creation even if PATH already exists'
-  c.option '--blank', 'Creates scaffolding but with empty files'
-
-  c.action do |args, options|
-    Jekyll::Commands::New.process(args, options.__hash__)
-  end
-end
-
-command :build do |c|
-  c.syntax = 'jekyll build [options]'
-  c.description = 'Build your site'
-
-  add_build_options(c)
-
-  c.action do |args, options|
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options)
-    Jekyll::Commands::Build.process(options)
-  end
-end
-
-command :serve do |c|
-  c.syntax = 'jekyll serve [options]'
-  c.description = 'Serve your site locally'
-
-  add_build_options(c)
-
-  c.option '-B', '--detach', 'Run the server in the background (detach)'
-  c.option '-P', '--port [PORT]', 'Port to listen on'
-  c.option '-H', '--host [HOST]', 'Host to bind to'
-  c.option '-b', '--baseurl [URL]', 'Base URL'
-
-  c.action do |args, options|
-    options.default :serving => true
-
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options)
-    Jekyll::Commands::Build.process(options)
-    Jekyll::Commands::Serve.process(options)
-  end
-end
-alias_command :server, :serve
-
-command :doctor do |c|
-  c.syntax = 'jekyll doctor'
-  c.description = 'Search site and print specific deprecation warnings'
-
-  c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
-
-  c.action do |args, options|
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options)
-    Jekyll::Commands::Doctor.process(options)
-  end
-end
-alias_command :hyde, :doctor
-
-command :docs do |c|
-  c.syntax = 'jekyll docs'
-  c.description = "Launch local server with docs for Jekyll v#{Jekyll::VERSION}"
-
-  c.option '-p', '--port [PORT]', 'Port to listen on'
-  c.option '-u', '--host [HOST]', 'Host to bind to'
+Jekyll::Deprecator.process(ARGV)
 
-  c.action do |args, options|
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options.merge!({
-      'source' => File.expand_path("../site", File.dirname(__FILE__)),
-      'destination' => File.expand_path("../site/_site", File.dirname(__FILE__))
-    }))
-    puts options
-    Jekyll::Commands::Build.process(options)
-    Jekyll::Commands::Serve.process(options)
-  end
-end
+Mercenary.program(:jekyll) do |p|
+  p.version Jekyll::VERSION
+  p.description 'Jekyll is a blog-aware, static site generator in Ruby'
+  p.syntax 'jekyll <subcommand> [options]'
 
-command :import do |c|
-  c.syntax = 'jekyll import <platform> [options]'
-  c.description = 'Import your old blog to Jekyll'
+  p.option 'source', '-s', '--source [DIR]', 'Source directory (defaults to ./)'
+  p.option 'destination', '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)'
+  p.option 'safe', '--safe', 'Safe mode (defaults to false)'
+  p.option 'plugins', '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
+  p.option 'layouts', '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)'
 
-  c.option '--source STRING', 'Source file or URL to migrate from'
-  c.option '--file STRING', 'File to migrate from'
-  c.option '--dbname STRING', 'Database name to migrate from'
-  c.option '--user STRING', 'Username to use when migrating'
-  c.option '--pass STRING', 'Password to use when migrating'
-  c.option '--host STRING', 'Host address to use when migrating'
-  c.option '--prefix STRING', 'Database table prefix to use when migrating'
+  Jekyll::Command.subclasses.each { |c| c.init_with_program(p) }
 
-  c.action do |args, options|
-    begin
-      require 'jekyll-import'
-    rescue LoadError
-      msg  = "You must install the 'jekyll-import' gem before continuing.\n"
-      msg += "* Please see the documentation at http://jekyllrb.com/docs/migrations/ for instructions.\n"
-      abort msg
+  p.action do |args, options|
+    if args.empty?
+      puts p
+    else
+      unless p.has_command?(args.first)
+        Jekyll.logger.abort_with "Invalid command. Use --help for more information"
+      end
     end
-    Jekyll::Commands::Import.process(args.first, options)
   end
 end
diff --git a/checksums.yaml.gz b/checksums.yaml.gz
index 1b92fa9..1e3423c 100644
Binary files a/checksums.yaml.gz and b/checksums.yaml.gz differ
diff --git a/docs/jp/CONTRIBUTING.jp.markdown b/docs/jp/CONTRIBUTING.jp.markdown
new file mode 100644
index 0000000..fa8e71c
--- /dev/null
+++ b/docs/jp/CONTRIBUTING.jp.markdown
@@ -0,0 +1,93 @@
+コントリビュート
+==========
+
+あなたは Jekyll に投じるすばらしいアイディアを持っています。
+すばらしいことです!次の事柄を心に留めてください。
+
+* **テストなしではコントリビュートはできません。**
+* もし、既存の機能への小さな修正やパッチを作成したなら、シンプルなテストを行います。
+  現在のテストスイートの範囲にとどまり、そして
+  [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) や
+  [RR](https://github.com/btakita/rr/tree/master) を使用してください。
+* もし、それが新しい機能の場合は、必ず新しい
+  [Cucumber](https://github.com/cucumber/cucumber/) の機能を作成し、
+  必要に応じて手順を再利用します。
+  また、あなたがフォークした `site` に
+  急ぎいくつかのドキュメントを用意し、一度マージを行い
+  メイン `site` の jekyllrb.com に転送していただければ幸いです。
+* あなたのコントリビュートによって Jekyll の振る舞いが変わった場合、ドキュメントを更新すべきです。
+  それは `site/docs` にあります。
+  もし、 docs に情報の誤りがあった場合、遠慮なく追加してください。
+  すばらしいドキュメントはすばらしいプロジェクトを作ります!
+* Ruby のコードを変更するときは、 [GitHub Ruby Styleguide](https://github.com/styleguide/ruby)
+  に従ってください。
+* **小さなプルリクエスト** に最善を尽くしてください。
+  簡単に提案された変更はレビューされ、マージされる可能性が高いです。
+* プルリクエストを送信するとき、プルリクエストのボディを賢明に使用してください。
+  変更されたかどうかの記述、変更の背後にある動機、 [完了したかどうかのタスクリスト](http://git.io/gfm-tasks)
+  もレビュー時間を早めます。
+
+テストの依存関係
+-----------------
+
+テストスイートの実行や gem のビルドのために、
+Jekyll の依存ツールをインストールする必要があります。
+Jekyll は Bundler を使用しており、 `bundle` コマンドを実行すると全ての設定が迅速に行われます!
+
+    $ bundle
+
+はじめる前に、テストを実行し、必ずテストが通ることを
+確認してください(あなたの環境が適切に設定されているかを確認するために):
+
+    $ bundle exec rake test
+    $ bundle exec rake features
+
+ワークフロー
+--------
+
+これは、あなたの作業がプロジェクトにマージされるもっとも直接的な方法です:
+
+* プロジェクトをフォークします。
+* あなたのフォークプロジェクトをクローンします ( `git clone git at github.com:<username>/jekyll.git` )。
+* トピックブランチを作成し、あなたの変更を含んでください ( `git checkout -b my_awesome_feature` )。
+* ハックし、テストを追加します。必ずしもこの順番でなくてかまいません
+* `rake` を実行し、テストが必ず全て通ることを確認してください
+* 必要に応じて、エラーがないようにコミットを論理的な塊にリベースしてください
+* ブランチをプッシュしてください ( `git push origin my_awesome_feature` ).
+* jekyll/jekyll プロジェクトの master ブランチに対してプルリクエストを作成し、
+  あなたの変更内容と、なぜそれをマージすべきかを記述してください
+
+ドキュメントの更新
+----------------------
+
+私たちは Jekyll のドキュメントについて最善を尽くしたいです。
+私たちはドキュメントをオープンソース化しました、そして
+あなたが Jekyll に欠けているものを見つけた場合、私たちはプルリクエストを歓迎しています。
+
+あなたは、 GitHub.com 上の Jekyll リポジトリの [site]({{ site.repository }}/tree/master/site) で
+jekyllrb.comのドキュメントを見つけることができます。
+
+全てのドキュメントのプルリクエストは `master` に向けられる必要があります。
+他のブランチに向けたプルリクエストは受け入れられません。
+
+GitHub の [Jekyll wiki](https://github.com/jekyll/jekyll/wiki) は、
+自由に更新することができるように、プルリクエストなしで
+全ての GitHub ユーザがアクセス権を持つことができます。
+
+落とし穴
+-------
+
+* もし、 gem のバージョンがかちあった場合、コミットを分けてください。
+  この方法だと、メンテナが gem をリリースするときに制御できます。
+* jekyll/jekyll の最新コミットに基づいて(複数の)パッチを維持してください。
+  それは適用するためのあなたの仕事で、メンテナがしなければならないことを少なくするのは
+  とてもよいことです。
+* あなたの GitHub issue で [fix], [feature] などのタグをつけないでください。
+  メンテナは積極的に issue を読み、彼らが問題に出くわしたらラベルをつけるでしょう。
+
+最後に…
+----------
+
+ありがとう! Jekyll のハックは楽しいものでなければなりません。
+もし、あなたがこのハードを理解するための何かを発見した場合、知らせてください。
+我々のプロセスやドキュメントを改善することができます!
diff --git a/docs/jp/README.jp.markdown b/docs/jp/README.jp.markdown
new file mode 100644
index 0000000..2bf7e81
--- /dev/null
+++ b/docs/jp/README.jp.markdown
@@ -0,0 +1,68 @@
+# [Jekyll](http://jekyllrb.com/)
+
+[![Gem Version](https://badge.fury.io/rb/jekyll.png)](http://badge.fury.io/rb/jekyll)
+
+[![Build Status](https://secure.travis-ci.org/jekyll/jekyll.png?branch=master)](https://travis-ci.org/jekyll/jekyll)
+[![Code Climate](https://codeclimate.com/github/jekyll/jekyll.png)](https://codeclimate.com/github/jekyll/jekyll)
+[![Dependency Status](https://gemnasium.com/jekyll/jekyll.png)](https://gemnasium.com/jekyll/jekyll)
+
+Tom Preston-Werner, Nick Quaranto や多くの[素晴らしいコントリビュータ](https://github.com/jekyll/jekyll/graphs/contributors)によって作成されています!
+
+Jekyll は個人プロジェクトや組織のサイトに最適な、シンプルで、ブログを意識した静的サイトジェネレータです。
+複雑さを排除したファイルベースのCMSのようなものと考えてください。
+Jekyll はコンテンツを受け取り、 Markdown や Liquid テンプレート をレンダリングし、
+Apache や Nginx やその他の Web サーバに提供する準備ができた静的な Web サイトを完全に出力してくれます。
+Jekyll は [GitHub Pages](http://pages.github.com) の背後にあるエンジンなので、
+あなたの GitHub リポジトリからサイトをホストするために使用する事ができます。
+
+## 原理
+
+Jekyll あなたがするように伝えたことをします ― それ以上でもそれ以下でもありません。
+それは、大胆な仮定によってユーザの裏をかこうとせず、
+また、不必要な複雑さや設定をユーザに負担しません。
+簡単に言えば、 Jekyll はあなたの道を開け、
+真に重要なもの: コンテンツに集中することができます。
+
+## 開始方法
+
+* gem を[インストール](http://jekyllrb.com/docs/installation/)します
+* [使用方法](http://jekyllrb.com/docs/usage/) と [設定方法](http://jekyllrb.com/docs/configuration/) を読みます
+* 既存の [Jekyll で作られたサイト](https://wiki.github.com/jekyll/jekyll/sites) をチラッと見ます
+* Fork し、あなたの変更を [コントリビュート](http://jekyllrb.com/docs/contributing/) します
+* 質問があったら? irc.freenode.net の `#jekyll` チャンネルをチェックしてください
+
+## より深く
+
+* 以前のシステムからの[移行](http://jekyllrb.com/docs/migrations/)
+* [YAML Front Matter](http://jekyllrb.com/docs/frontmatter/) がどのように働くかを学ぶ
+* [変数](http://jekyllrb.com/docs/variables/)を使ってサイトに情報を表示する
+* posts が生成される時の[パーマリンク](http://jekyllrb.com/docs/permalinks/)をカスタマイズ
+* 人生を容易にするために、組み込みの [Liquid 拡張](http://jekyllrb.com/docs/templates/)を使用する
+* あなたのサイト固有のコンテンツを生成するために、カスタム[プラグイン](http://jekyllrb.com/docs/plugins/)を使用する
+
+## 実行時の依存関係
+
+* Commander: コマンドラインインターフェース構築 (Ruby)
+* Colorator: コマンドライン出力に色付け (Ruby)
+* Classifier: posts の関連を生成 (Ruby)
+* Directory Watcher: サイトの自動再生成 (Ruby)
+* Kramdown: デフォルトの Markdown エンジン (Ruby)
+* Liquid: テンプレートシステム (Ruby)
+* Pygments.rb: シンタックスハイライト (Ruby/Python)
+* RedCarpet: Markdown エンジン (Ruby)
+* Safe YAML: セキュリティのために構築された YAML パーサ (Ruby)
+
+## 開発時の依存関係
+
+* Launchy: クロスプラットフォーム ファイルランチャ (Ruby)
+* Maruku: Markdown スーパーセット インタプリタ (Ruby)
+* RDiscount: Discount Markdown プロセッサ (Ruby)
+* RedCloth: Textile サポート (Ruby)
+* RedGreen: よりよいテスト出力 (Ruby)
+* RR: モック (Ruby)
+* Shoulda: テストフレームワーク (Ruby)
+* SimpleCov: カバレッジフレームワーク (Ruby)
+
+## ライセンス
+
+[ライセンス](https://github.com/jekyll/jekyll/blob/master/LICENSE)を見てください。
diff --git a/features/collections.feature b/features/collections.feature
new file mode 100644
index 0000000..4f69e8b
--- /dev/null
+++ b/features/collections.feature
@@ -0,0 +1,145 @@
+Feature: Collections
+  As a hacker who likes to structure content
+  I want to be able to create collections of similar information
+  And render them
+
+  Scenario: Unrendered collection
+    Given I have an "index.html" page that contains "Collections: {{ site.methods }}"
+    And I have fixture collections
+    And I have a configuration file with "collections" set to "['methods']"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: <p>Use <code>Jekyll.configuration</code> to build a full configuration for use w/Jekyll.</p>\n\n<p>Whatever: foo.bar</p>\n<p><code>Jekyll.sanitized_path</code> is used to make sure your path is in your source.</p>\n<p>Run your generators! default</p>\n<p>Page without title.</p>\n<p>Run your generators! default</p>" in "_site/index.html"
+    And the "_site/methods/configuration.html" file should not exist
+
+  Scenario: Rendered collection
+    Given I have an "index.html" page that contains "Collections: {{ site.collections }}"
+    And I have an "collection_metadata.html" page that contains "Methods metadata: {{ site.collections.methods.foo }} {{ site.collections.methods }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+      methods:
+        output: true
+        foo:   bar
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: {\"methods" in "_site/index.html"
+    And I should see "Methods metadata: bar" in "_site/collection_metadata.html"
+    And I should see "<p>Whatever: foo.bar</p>" in "_site/methods/configuration.html"
+
+  Scenario: Rendered collection at a custom URL
+    Given I have an "index.html" page that contains "Collections: {{ site.collections }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+      methods:
+        output: true
+        permalink: /:collection/:path/
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "<p>Whatever: foo.bar</p>" in "_site/methods/configuration/index.html"
+
+  Scenario: Rendered document in a layout
+    Given I have an "index.html" page that contains "Collections: {{ site.collections }}"
+    And I have a default layout that contains "<div class='title'>Tom Preston-Werner</div> {{content}}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+      methods:
+        output: true
+        foo:   bar
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: {\"methods" in "_site/index.html"
+    And I should see "<p>Run your generators! default</p>" in "_site/methods/site/generate.html"
+    And I should see "<div class='title'>Tom Preston-Werner</div>" in "_site/methods/site/generate.html"
+
+  Scenario: Collections specified as an array
+    Given I have an "index.html" page that contains "Collections: {% for method in site.methods %}{{ method.relative_path }} {% endfor %}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: _methods/configuration.md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html"
+
+  Scenario: Collections specified as an hash
+    Given I have an "index.html" page that contains "Collections: {% for method in site.methods %}{{ method.relative_path }} {% endfor %}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: _methods/configuration.md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html"
+
+  Scenario: All the documents
+    Given I have an "index.html" page that contains "All documents: {% for doc in site.documents %}{{ doc.relative_path }} {% endfor %}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "All documents: _methods/configuration.md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html"
+
+  Scenario: Documents have an output attribute, which is the converted HTML
+    Given I have an "index.html" page that contains "First document's output: {{ site.documents.first.output }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "First document's output: <p>Use <code>Jekyll.configuration</code> to build a full configuration for use w/Jekyll.</p>\n\n<p>Whatever: foo.bar</p>" in "_site/index.html"
+
+  Scenario: Filter documents by where
+    Given I have an "index.html" page that contains "{% assign items = site.methods | where: 'whatever','foo.bar' %}Item count: {{ items.size }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Item count: 1" in "_site/index.html"
+
+  Scenario: Sort by title
+    Given I have an "index.html" page that contains "{% assign items = site.methods | sort: 'title' %}1. of {{ items.size }}: {{ items.first.output }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "1. of 5: <p>Page without title.</p>" in "_site/index.html"
+
+  Scenario: Sort by relative_path
+    Given I have an "index.html" page that contains "Collections: {% assign methods = site.methods | sort: 'relative_path' %}{% for method in methods %}{{ method.title }}, {% endfor %}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: Jekyll.configuration, Jekyll.sanitized_path, Site#generate, , Site#generate," in "_site/index.html"
diff --git a/features/create_sites.feature b/features/create_sites.feature
index a25a0d3..18996bf 100644
--- a/features/create_sites.feature
+++ b/features/create_sites.feature
@@ -5,23 +5,23 @@ Feature: Create sites
 
   Scenario: Blank site
     Given I do not have a "test_blank" directory
-    When I call jekyll new with test_blank --blank
+    When I run jekyll new test_blank --blank
     Then the test_blank/_layouts directory should exist
     And the test_blank/_posts directory should exist
     And the "test_blank/index.html" file should exist
 
   Scenario: Basic site
     Given I have an "index.html" file that contains "Basic Site"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site" in "_site/index.html"
 
   Scenario: Basic site with a post
     Given I have a _posts directory
     And I have the following post:
-      | title   | date      | content          |
+      | title   | date       | content          |
       | Hackers | 2009-03-27 | My First Exploit |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "My First Exploit" in "_site/2009/03/27/hackers.html"
 
@@ -29,7 +29,7 @@ Feature: Create sites
     Given I have a _layouts directory
     And I have an "index.html" page with layout "default" that contains "Basic Site with Layout"
     And I have a default layout that contains "Page Layout: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: Basic Site with Layout" in "_site/index.html"
 
@@ -37,10 +37,10 @@ Feature: Create sites
     Given I have a _layouts directory
     And I have a _posts directory
     And I have the following posts:
-      | title    | date      | layout  | content                               |
+      | title    | date       | layout  | content                               |
       | Wargames | 2009-03-27 | default | The only winning move is not to play. |
     And I have a default layout that contains "Post Layout: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post Layout: <p>The only winning move is not to play.</p>" in "_site/2009/03/27/wargames.html"
 
@@ -48,10 +48,10 @@ Feature: Create sites
     Given I have a _layouts directory
     And I have a _posts directory
     And I have the following posts:
-      | title    | date      | layout  | content                               |
+      | title    | date       | layout      | content                               |
       | Wargames | 2009-03-27 | post/simple | The only winning move is not to play. |
     And I have a post/simple layout that contains "Post Layout: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post Layout: <p>The only winning move is not to play.</p>" in "_site/2009/03/27/wargames.html"
 
@@ -66,15 +66,15 @@ Feature: Create sites
     And I have an "another_file" file that contains ""
     And I have a _posts directory
     And I have the following posts:
-      | title     | date      | layout  | content                                |
-      | entry1    | 2009-03-27 | post    | content for entry1.                    |
-      | entry2    | 2009-04-27 | post    | content for entry2.                    |
+      | title  | date       | layout | content             |
+      | entry1 | 2009-03-27 | post   | content for entry1. |
+      | entry2 | 2009-04-27 | post   | content for entry2. |
     And I have a category/_posts directory
     And I have the following posts in "category":
-      | title     | date      | layout  | content                                |
-      | entry3    | 2009-05-27 | post    | content for entry3.                    |
-      | entry4    | 2009-06-27 | post    | content for entry4.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry3 | 2009-05-27 | post   | content for entry3. |
+      | entry4 | 2009-06-27 | post   | content for entry4. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page : Site contains 2 pages and 4 posts" in "_site/index.html"
     And I should see "No replacement \{\{ site.posts.size \}\}" in "_site/about.html"
@@ -89,7 +89,7 @@ Feature: Create sites
     Given I have a _includes directory
     And I have an "index.html" page that contains "Basic Site with include tag: {% include about.textile %}"
     And I have an "_includes/about.textile" file that contains "Generated by Jekyll"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site with include tag: Generated by Jekyll" in "_site/index.html"
 
@@ -98,7 +98,7 @@ Feature: Create sites
     And I have an "_includes/about.textile" file that contains "Generated by Jekyll"
     And I have an info directory
     And I have an "info/index.html" page that contains "Basic Site with subdir include tag: {% include about.textile %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site with subdir include tag: Generated by Jekyll" in "_site/info/index.html"
 
@@ -107,7 +107,7 @@ Feature: Create sites
     And I have an "_includes/about.textile" file that contains "Generated by {% include jekyll.textile %}"
     And I have an "_includes/jekyll.textile" file that contains "Jekyll"
     And I have an "index.html" page that contains "Basic Site with include tag: {% include about.textile %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site with include tag: Generated by Jekyll" in "_site/index.html"
 
@@ -116,26 +116,43 @@ Feature: Create sites
     And I have a configuration file with "permalink" set to "pretty"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "URL: /2020/01/31/entry2/" in "_site/index.html"
 
   Scenario: Basic site with whitelisted dotfile
     Given I have an ".htaccess" file that contains "SomeDirective"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "SomeDirective" in "_site/.htaccess"
 
   Scenario: File was replaced by a directory
     Given I have a "test" file that contains "some stuff"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     When I delete the file "test"
     Given I have a test directory
     And I have a "test/index.html" file that contains "some other stuff"
-    When I run jekyll
+    When I run jekyll build
     Then the _site/test directory should exist
     And I should see "some other stuff" in "_site/test/index.html"
+
+  Scenario: Basic site with unpublished page
+    Given I have an "index.html" page with title "index" that contains "Published page"
+    And I have a "public.html" page with published "true" that contains "Explicitly published page"
+    And I have a "secret.html" page with published "false" that contains "Unpublished page"
+
+    When I run jekyll build
+    Then the _site directory should exist
+    And the "_site/index.html" file should exist
+    And the "_site/public.html" file should exist
+    But the "_site/secret.html" file should not exist
+
+    When I run jekyll build --unpublished
+    Then the _site directory should exist
+    And the "_site/index.html" file should exist
+    And the "_site/public.html" file should exist
+    And the "_site/secret.html" file should exist
diff --git a/features/data.feature b/features/data.feature
index 33adfaa..4f0e32e 100644
--- a/features/data.feature
+++ b/features/data.feature
@@ -13,7 +13,7 @@ Feature: Data
         price: 2.5
       """
     And I have an "index.html" page that contains "{% for product in site.data.products %}{{product.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "sugar" in "_site/index.html"
     And I should see "salt" in "_site/index.html"
@@ -28,7 +28,19 @@ Feature: Data
         age: 34
       """
     And I have an "index.html" page that contains "{% for member in site.data.members %}{{member.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
+    Then the "_site/index.html" file should exist
+    And I should see "Jack" in "_site/index.html"
+    And I should see "Leon" in "_site/index.html"
+
+  Scenario: autoload *.json files in _data directory
+    Given I have a _data directory
+    And I have a "_data/members.json" file with content:
+      """
+      [{"name": "Jack", "age": 28},{"name": "Leon", "age": 34}]
+      """
+    And I have an "index.html" page that contains "{% for member in site.data.members %}{{member.name}}{% endfor %}"
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "Jack" in "_site/index.html"
     And I should see "Leon" in "_site/index.html"
@@ -43,11 +55,40 @@ Feature: Data
         age: 34
       """
     And I have an "index.html" page that contains "{% for member in site.data.team_members %}{{member.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "Jack" in "_site/index.html"
     And I should see "Leon" in "_site/index.html"
 
+  Scenario: autoload *.yaml files in subdirectories in _data directory
+    Given I have a _data directory
+    And I have a _data/categories directory
+    And I have a "_data/categories/dairy.yaml" file with content:
+      """
+      name: Dairy Products
+      """
+    And I have an "index.html" page that contains "{{ site.data.categories.dairy.name }}"
+    When I run jekyll build
+    Then the "_site/index.html" file should exist
+    And I should see "Dairy Products" in "_site/index.html"
+
+  Scenario: folders should have precedence over files with the same name
+    Given I have a _data directory
+    And I have a _data/categories directory
+    And I have a "_data/categories/dairy.yaml" file with content:
+      """
+      name: Dairy Products
+      """
+    And I have a "_data/categories.yaml" file with content:
+      """
+      dairy:
+        name: Should not display this
+      """
+    And I have an "index.html" page that contains "{{ site.data.categories.dairy.name }}"
+    When I run jekyll build
+    Then the "_site/index.html" file should exist
+    And I should see "Dairy Products" in "_site/index.html"
+
   Scenario: should be backward compatible with site.data in _config.yml
     Given I have a "_config.yml" file with content:
       """
@@ -58,8 +99,7 @@ Feature: Data
           age: 34
       """
     And I have an "index.html" page that contains "{% for member in site.data %}{{member.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "Jack" in "_site/index.html"
     And I should see "Leon" in "_site/index.html"
-
diff --git a/features/drafts.feature b/features/drafts.feature
index 5271120..c55edbb 100644
--- a/features/drafts.feature
+++ b/features/drafts.feature
@@ -7,9 +7,9 @@ Feature: Draft Posts
     Given I have a configuration file with "permalink" set to "none"
     And I have a _drafts directory
     And I have the following draft:
-      | title  | date      | layout  | content        |
+      | title  | date       | layout  | content        |
       | Recipe | 2009-03-27 | default | Not baked yet. |
-    When I run jekyll with drafts
+    When I run jekyll build --drafts
     Then the _site directory should exist
     And I should see "Not baked yet." in "_site/recipe.html"
 
@@ -18,8 +18,29 @@ Feature: Draft Posts
     And I have an "index.html" page that contains "Totally index"
     And I have a _drafts directory
     And I have the following draft:
-      | title  | date      | layout  | content        |
+      | title  | date       | layout  | content        |
       | Recipe | 2009-03-27 | default | Not baked yet. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the "_site/recipe.html" file should not exist
+
+  Scenario: Don't preview a draft that is not published
+    Given I have a configuration file with "permalink" set to "none"
+    And I have an "index.html" page that contains "Totally index"
+    And I have a _drafts directory
+    And I have the following draft:
+      | title  | date       | layout  | published | content        |
+      | Recipe | 2009-03-27 | default | false     | Not baked yet. |
+    When I run jekyll build --drafts
+    Then the _site directory should exist
+    And the "_site/recipe.html" file should not exist
+
+  Scenario: Use page.path variable
+    Given I have a configuration file with "permalink" set to "none"
+    And I have a _drafts directory
+    And I have the following draft:
+      | title  | date       | layout | content                    |
+      | Recipe | 2009-03-27 | simple | Post path: {{ page.path }} |
+    When I run jekyll build --drafts
+    Then the _site directory should exist
+    And I should see "Post path: _drafts/recipe.textile" in "_site/recipe.html"
diff --git a/features/embed_filters.feature b/features/embed_filters.feature
index d61901c..889a1fc 100644
--- a/features/embed_filters.feature
+++ b/features/embed_filters.feature
@@ -7,10 +7,10 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | content                                     |
+      | title     | date       | layout  | content                                     |
       | Star Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
     And I have a default layout that contains "{{ site.time | date_to_xmlschema }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see today's date in "_site/2009/03/27/star-wars.html"
 
@@ -18,10 +18,12 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title       | date      | layout  | content                                     |
+      | title       | date       | layout  | content                                     |
       | Star & Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
+
+
     And I have a default layout that contains "{{ page.title | xml_escape }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Star & Wars" in "_site/2009/03/27/star-wars.html"
 
@@ -29,10 +31,10 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | content                                     |
+      | title     | date       | layout  | content                                     |
       | Star Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
     And I have a default layout that contains "{{ content | xml_escape }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "7" in "_site/2009/03/27/star-wars.html"
 
@@ -40,10 +42,10 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | tags                   | content                                     |
+      | title     | date       | layout  | tags                   | content                                     |
       | Star Wars | 2009-03-27 | default | [scifi, movies, force] | These aren't the droids you're looking for. |
     And I have a default layout that contains "{{ page.tags | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "scifi, movies, and force" in "_site/2009/03/27/star-wars.html"
 
@@ -51,10 +53,55 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | content                                      |
+      | title     | date       | layout  | content                                     |
       | Star Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
     And I have a default layout that contains "By {{ '_Obi-wan_' | textilize }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "By <p><em>Obi-wan</em></p>" in "_site/2009/03/27/star-wars.html"
 
+  Scenario: Sort by an arbitrary variable
+    Given I have a _layouts directory
+    And I have the following page:
+      | title  | layout  | value | content   |
+      | Page-1 | default | 8     | Something |
+    And I have the following page:
+      | title  | layout  | value | content   |
+      | Page-2 | default | 6     | Something |
+    And I have a default layout that contains "{{ site.pages | sort:'value' | map:'title' | join:', ' }}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see exactly "Page-2, Page-1" in "_site/page-1.html"
+    And I should see exactly "Page-2, Page-1" in "_site/page-2.html"
+
+  Scenario: Sort pages by the title
+    Given I have a _layouts directory
+    And I have the following page:
+      | title | layout | content |
+      | Dog | default | Run |
+    And I have the following page:
+      | title | layout | content |
+      | Bird | default | Fly |
+    And I have the following page:
+      | layout | content |
+      | default | Jump |
+    And I have a default layout that contains "{% assign sorted_pages = site.pages | sort: 'title' %}The rule of {{ sorted_pages.size }}: {% for p in sorted_pages %}{{ p.content | strip_html | strip_newlines }}, {% endfor %}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see exactly "The rule of 3: Jump, Fly, Run," in "_site/bird.html"
+
+  Scenario: Sort pages by the title ordering pages without title last
+    Given I have a _layouts directory
+    And I have the following page:
+      | title | layout | content |
+      | Dog | default | Run |
+    And I have the following page:
+      | title | layout | content |
+      | Bird | default | Fly |
+    And I have the following page:
+      | layout | content |
+      | default | Jump |
+    And I have a default layout that contains "{% assign sorted_pages = site.pages | sort: 'title', 'last' %}The rule of {{ sorted_pages.size }}: {% for p in sorted_pages %}{{ p.content | strip_html | strip_newlines }}, {% endfor %}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see exactly "The rule of 3: Fly, Run, Jump," in "_site/bird.html"
diff --git a/features/frontmatter_defaults.feature b/features/frontmatter_defaults.feature
new file mode 100644
index 0000000..41a7a35
--- /dev/null
+++ b/features/frontmatter_defaults.feature
@@ -0,0 +1,136 @@
+Feature: frontmatter defaults
+  Scenario: Use default for frontmatter variables internally
+    Given I have a _layouts directory
+    And I have a pretty layout that contains "THIS IS THE LAYOUT: {{content}}"
+
+    And I have a _posts directory
+    And I have the following post:
+      | title             | date       | content          |
+      | default layout    | 2013-09-11 | just some post   |
+    And I have an "index.html" page with title "some title" that contains "just some page"
+
+    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {layout: "pretty"}}]"
+
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "THIS IS THE LAYOUT: <p>just some post</p>" in "_site/2013/09/11/default-layout.html"
+    And I should see "THIS IS THE LAYOUT: just some page" in "_site/index.html"
+
+  Scenario: Use default for frontmatter variables in Liquid
+    Given I have a _posts directory
+    And I have the following post:
+      | title        | date       | content                                          |
+      | default data | 2013-09-11 | <p>{{page.custom}}</p><div>{{page.author}}</div> |
+    And I have an "index.html" page that contains "just {{page.custom}} by {{page.author}}"
+    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {custom: "some special data", author: "Ben"}}]"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "<p>some special data</p><div>Ben</div>" in "_site/2013/09/11/default-data.html"
+    And I should see "just some special data by Ben" in "_site/index.html"
+
+  Scenario: Override frontmatter defaults by path
+    Given I have a _layouts directory
+    And I have a root layout that contains "root: {{ content }}"
+    And I have a subfolder layout that contains "subfolder: {{ content }}"
+
+    And I have a _posts directory
+    And I have the following post:
+      | title | date       | content               |
+      | about | 2013-10-14 | info on {{page.description}} |
+    And I have a special/_posts directory
+    And I have the following post in "special":
+      | title | date       | path  | content               |
+      | about | 2013-10-14 | local | info on {{page.description}} |
+
+    And I have an "index.html" page with title "overview" that contains "Overview for {{page.description}}"
+    And I have an "special/index.html" page with title "section overview" that contains "Overview for {{page.description}}"
+
+    And I have a configuration file with "defaults" set to "[{scope: {path: "special"}, values: {layout: "subfolder", description: "the special section"}}, {scope: {path: ""}, values: {layout: "root", description: "the webpage"}}]"
+
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "root: <p>info on the webpage</p>" in "_site/2013/10/14/about.html"
+    And I should see "subfolder: <p>info on the special section</p>" in "_site/special/2013/10/14/about.html"
+    And I should see "root: Overview for the webpage" in "_site/index.html"
+    And I should see "subfolder: Overview for the special section" in "_site/special/index.html"
+
+  Scenario: Override frontmatter defaults by type
+    Given I have a _posts directory
+    And I have the following post:
+      | title          | date       | content |
+      | this is a post | 2013-10-14 | blabla  |
+    And I have an "index.html" page that contains "interesting stuff"
+    And I have a configuration file with "defaults" set to "[{scope: {path: "", type: "post"}, values: {permalink: "/post.html"}}, {scope: {path: "", type: "page"}, values: {permalink: "/page.html"}}, {scope: {path: ""}, values: {permalink: "/perma.html"}}]"
+    When I run jekyll build
+    Then I should see "blabla" in "_site/post.html"
+    And I should see "interesting stuff" in "_site/page.html"
+    But the "_site/perma.html" file should not exist
+
+  Scenario: Actual frontmatter overrides defaults
+    Given I have a _posts directory
+    And I have the following post:
+      | title    | date       | permalink         | author   | content                   |
+      | override | 2013-10-14 | /frontmatter.html | some guy | a blog by {{page.author}} |
+    And I have an "index.html" page with permalink "override.html" that contains "nothing"
+    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {permalink: "/perma.html", author: "Chris"}}]"
+    When I run jekyll build
+    Then I should see "a blog by some guy" in "_site/frontmatter.html"
+    And I should see "nothing" in "_site/override.html"
+    But the "_site/perma.html" file should not exist
+
+  Scenario: Use frontmatter defaults in collections
+    Given I have a _slides directory
+    And I have a "index.html" file that contains "nothing"
+    And I have a "_slides/slide1.html" file with content: 
+    """
+    Value: {{ page.myval }}
+    """
+    And I have a "_config.yml" file with content:
+    """
+      collections:
+        slides:
+          output: true
+      defaults:
+        -
+          scope:
+            path: ""
+            type: slides
+          values:
+            myval: "Test"
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Value: Test" in "_site/slides/slide1.html"
+
+  Scenario: Override frontmatter defaults inside a collection
+    Given I have a _slides directory
+    And I have a "index.html" file that contains "nothing"
+    And I have a "_slides/slide2.html" file with content: 
+    """
+    ---
+    myval: Override
+    ---
+    Value: {{ page.myval }}
+    """
+    And I have a "_config.yml" file with content:
+    """
+      collections:
+        slides:
+          output: true
+      defaults:
+        -
+          scope:
+            path: ""
+            type: slides
+          values:
+            myval: "Test"
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Value: Override" in "_site/slides/slide2.html"
+
+  Scenario: Deep merge frontmatter defaults
+    Given I have an "index.html" page with fruit "{orange: 1}" that contains "Fruits: {{ page.fruit.orange | plus: page.fruit.apple }}"
+    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {fruit: {apple: 2}}}]"
+    When I run jekyll build
+    Then I should see "Fruits: 3" in "_site/index.html"
diff --git a/features/include_tag.feature b/features/include_tag.feature
index 587784d..3d2f48c 100644
--- a/features/include_tag.feature
+++ b/features/include_tag.feature
@@ -10,15 +10,15 @@ Feature: Include tags
     And I have an "_includes/ignore.html" file that contains "<footer>My blog footer</footer>"
     And I have a _posts directory
     And I have the following post:
-      | title                               | date       | layout  | content |
-      | Include Files                       | 2013-03-21 | default | {% include header.html param="myparam" %} |
-      | Ignore params if unused             | 2013-03-21 | default | {% include ignore.html date="today" %} |
-      | List multiple parameters            | 2013-03-21 | default | {% include params.html date="today" start="tomorrow" %} |
-      | Dont keep parameters                | 2013-03-21 | default | {% include ignore.html param="test" %}\n{% include header.html %} |
+      | title                               | date       | layout  | content                                                                                                                 |
+      | Include Files                       | 2013-03-21 | default | {% include header.html param="myparam" %}                                                                               |
+      | Ignore params if unused             | 2013-03-21 | default | {% include ignore.html date="today" %}                                                                                  |
+      | List multiple parameters            | 2013-03-21 | default | {% include params.html date="today" start="tomorrow" %}                                                                 |
+      | Dont keep parameters                | 2013-03-21 | default | {% include ignore.html param="test" %}\n{% include header.html %}                                                       |
       | Allow params with spaces and quotes | 2013-04-07 | default | {% include params.html cool="param with spaces" super="\"quoted\"" single='has "quotes"' escaped='\'single\' quotes' %} |
-      | Parameter syntax                    | 2013-04-12 | default | {% include params.html param1_or_2="value" %} |
-      | Pass a variable                     | 2013-06-22 | default | {% assign var = 'some text' %}{% include params.html local=var layout=page.layout %} |
-    When I run jekyll
+      | Parameter syntax                    | 2013-04-12 | default | {% include params.html param1_or_2="value" %}                                                                           |
+      | Pass a variable                     | 2013-06-22 | default | {% assign var = 'some text' %}{% include params.html local=var layout=page.layout %}                                    |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<header>My awesome blog header: myparam</header>" in "_site/2013/03/21/include-files.html"
     And I should not see "myparam" in "_site/2013/03/21/ignore-params-if-unused.html"
@@ -43,7 +43,7 @@ Feature: Include tags
     | include_file1 | snippet.html      |
     | include_file2 | parametrized.html |
     And I have an "index.html" page that contains "{% include {{site.include_file1}} %} that {% include {{site.include_file2}} what='parameters' %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "a snippet that works with parameters" in "_site/index.html"
 
@@ -52,6 +52,17 @@ Feature: Include tags
     And I have an "_includes/one.html" file that contains "one"
     And I have an "_includes/two.html" file that contains "two"
     And I have an "index.html" page with files "[one.html, two.html]" that contains "{% for file in page.files %}{% include {{file}} %} {% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "one two" in "_site/index.html"
+
+  Scenario: Include a file with variables and filters
+    Given I have an _includes directory
+    And I have an "_includes/one.html" file that contains "one included"
+    And I have a configuration file with:
+    | key          | value |
+    | include_file | one   |
+    And I have an "index.html" page that contains "{% include {{ site.include_file | append: '.html' }} %}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "one included" in "_site/index.html"
diff --git a/features/markdown.feature b/features/markdown.feature
index c76b061..659eed0 100644
--- a/features/markdown.feature
+++ b/features/markdown.feature
@@ -8,26 +8,26 @@ Feature: Markdown
     And I have an "index.html" page that contains "Index - {% for post in site.posts %} {{ post.content }} {% endfor %}"
     And I have a _posts directory
     And I have the following post:
-      | title   | date      | content    | type     |
+      | title   | date       | content    | type     |
       | Hackers | 2009-03-27 | # My Title | markdown |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Index" in "_site/index.html"
-    And I should see "<h1 id=\"my_title\">My Title</h1>" in "_site/2009/03/27/hackers.html"
-    And I should see "<h1 id=\"my_title\">My Title</h1>" in "_site/index.html"
+    And I should see "<h1 id=\"my-title\">My Title</h1>" in "_site/2009/03/27/hackers.html"
+    And I should see "<h1 id=\"my-title\">My Title</h1>" in "_site/index.html"
 
   Scenario: Markdown in pagination on index
     Given I have a configuration file with "paginate" set to "5"
     And I have an "index.html" page that contains "Index - {% for post in paginator.posts %} {{ post.content }} {% endfor %}"
     And I have a _posts directory
     And I have the following post:
-      | title   | date      | content    | type     |
+      | title   | date       | content    | type     |
       | Hackers | 2009-03-27 | # My Title | markdown |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Index" in "_site/index.html"
-    And I should see "<h1 id=\"my_title\">My Title</h1>" in "_site/index.html"
-    
+    And I should see "<h1 id=\"my-title\">My Title</h1>" in "_site/index.html"
+
   Scenario: Maruku fenced codeblocks
     Given I have a configuration file with "markdown" set to "maruku"
     And I have an "index.markdown" file with content:
@@ -42,11 +42,11 @@ Feature: Markdown
        My awesome code
        ```
        """
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "My awesome code" in "_site/index.html"
-    And I should see "<pre><code>\nMy awesome code\n</code></pre>" in "_site/index.html"
-    
+    And I should see "<pre><code>My awesome code</code></pre>" in "_site/index.html"
+
   Scenario: Maruku fenced codeblocks
     Given I have a configuration file with "markdown" set to "maruku"
     And I have an "index.markdown" file with content:
@@ -61,7 +61,7 @@ Feature: Markdown
        puts "My awesome string"
        ```
        """
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "My awesome string" in "_site/index.html"
-    And I should see "<pre class="ruby"><code class="ruby">\nputs "My awesome string"\n</code></pre>" in "_site/index.html"
+    And I should see "<pre class="ruby"><code class="ruby">puts "My awesome string"</code></pre>" in "_site/index.html"
diff --git a/features/pagination.feature b/features/pagination.feature
index 76c6236..21b96b0 100644
--- a/features/pagination.feature
+++ b/features/pagination.feature
@@ -9,12 +9,12 @@ Feature: Site pagination
     And I have an "index.html" page that contains "{{ paginator.posts.size }}"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date      | layout  | content                                |
+      | title     | date       | layout  | content                                |
       | Wargames  | 2009-03-27 | default | The only winning move is not to play.  |
       | Wargames2 | 2009-04-27 | default | The only winning move is not to play2. |
       | Wargames3 | 2009-05-27 | default | The only winning move is not to play3. |
       | Wargames4 | 2009-06-27 | default | The only winning move is not to play4. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site/page<exist> directory should exist
     And the "_site/page<exist>/index.html" file should exist
     And I should see "<posts>" in "_site/page<exist>/index.html"
@@ -36,12 +36,12 @@ Feature: Site pagination
     And I have an "blog/index.html" page that contains "{{ paginator.posts.size }}"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date      | layout  | content                                |
+      | title     | date       | layout  | content                                |
       | Wargames  | 2009-03-27 | default | The only winning move is not to play.  |
       | Wargames2 | 2009-04-27 | default | The only winning move is not to play2. |
       | Wargames3 | 2009-05-27 | default | The only winning move is not to play3. |
       | Wargames4 | 2009-06-27 | default | The only winning move is not to play4. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site/blog/page-<exist> directory should exist
     And the "_site/blog/page-<exist>/index.html" file should exist
     And I should see "<posts>" in "_site/blog/page-<exist>/index.html"
@@ -69,7 +69,7 @@ Feature: Site pagination
       | Wargames2 | 2009-04-27 | default | The only winning move is not to play2. |
       | Wargames3 | 2009-05-27 | default | The only winning move is not to play3. |
       | Wargames4 | 2009-06-27 | default | The only winning move is not to play4. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site/blog/page/<exist> directory should exist
     And the "_site/blog/page/<exist>/index.html" file should exist
     And I should see "<posts>" in "_site/blog/page/<exist>/index.html"
diff --git a/features/permalinks.feature b/features/permalinks.feature
index 64b3c17..f63aaf8 100644
--- a/features/permalinks.feature
+++ b/features/permalinks.feature
@@ -6,20 +6,20 @@ Feature: Fancy permalinks
   Scenario: Use none permalink schema
     Given I have a _posts directory
     And I have the following post:
-      | title                 | date      | content          |
+      | title                 | date       | content          |
       | None Permalink Schema | 2009-03-27 | Totally nothing. |
     And I have a configuration file with "permalink" set to "none"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally nothing." in "_site/none-permalink-schema.html"
 
   Scenario: Use pretty permalink schema
     Given I have a _posts directory
     And I have the following post:
-      | title                   | date      | content            |
+      | title                   | date       | content            |
       | Pretty Permalink Schema | 2009-03-27 | Totally wordpress. |
     And I have a configuration file with "permalink" set to "pretty"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally wordpress." in "_site/2009/03/27/pretty-permalink-schema/index.html"
 
@@ -28,7 +28,7 @@ Feature: Fancy permalinks
     And I have an "awesome.html" page that contains "Totally awesome"
     And I have an "sitemap.xml" page that contains "Totally uhm, sitemap"
     And I have a configuration file with "permalink" set to "pretty"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally index" in "_site/index.html"
     And I should see "Totally awesome" in "_site/awesome/index.html"
@@ -37,39 +37,39 @@ Feature: Fancy permalinks
   Scenario: Use custom permalink schema with prefix
     Given I have a _posts directory
     And I have the following post:
-      | title                   | category | date      | content         |
+      | title                   | category | date       | content         |
       | Custom Permalink Schema | stuff    | 2009-03-27 | Totally custom. |
     And I have a configuration file with "permalink" set to "/blog/:year/:month/:day/:title"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally custom." in "_site/blog/2009/03/27/custom-permalink-schema/index.html"
 
   Scenario: Use custom permalink schema with category
     Given I have a _posts directory
     And I have the following post:
-      | title                   | category | date      | content         |
+      | title                   | category | date       | content         |
       | Custom Permalink Schema | stuff    | 2009-03-27 | Totally custom. |
     And I have a configuration file with "permalink" set to "/:categories/:title.html"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally custom." in "_site/stuff/custom-permalink-schema.html"
 
   Scenario: Use custom permalink schema with squished date
     Given I have a _posts directory
     And I have the following post:
-      | title                   | category | date      | content         |
+      | title                   | category | date       | content         |
       | Custom Permalink Schema | stuff    | 2009-03-27 | Totally custom. |
     And I have a configuration file with "permalink" set to "/:month-:day-:year/:title.html"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally custom." in "_site/03-27-2009/custom-permalink-schema.html"
 
   Scenario: Use per-post permalink
     Given I have a _posts directory
     And I have the following post:
-      | title     | date      | permalink       | content |
+      | title     | date       | permalink       | content |
       | Some post | 2013-04-14 | /custom/posts/1 | bla bla |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/custom/posts/1 directory should exist
     And I should see "bla bla" in "_site/custom/posts/1/index.html"
@@ -77,9 +77,9 @@ Feature: Fancy permalinks
   Scenario: Use per-post ending in .html
     Given I have a _posts directory
     And I have the following post:
-      | title     | date      | permalink               | content |
+      | title     | date       | permalink               | content |
       | Some post | 2013-04-14 | /custom/posts/some.html | bla bla |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/custom/posts directory should exist
     And I should see "bla bla" in "_site/custom/posts/some.html"
diff --git a/features/post_data.feature b/features/post_data.feature
index 34f5818..0ecaeef 100644
--- a/features/post_data.feature
+++ b/features/post_data.feature
@@ -7,10 +7,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post title: {{ page.title }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post title: Star Wars" in "_site/2009/03/27/star-wars.html"
 
@@ -18,10 +18,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post url: {{ page.url }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post url: /2009/03/27/star-wars.html" in "_site/2009/03/27/star-wars.html"
 
@@ -29,10 +29,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post date: {{ page.date | date_to_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post date: 27 Mar 2009" in "_site/2009/03/27/star-wars.html"
 
@@ -40,10 +40,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post id: {{ page.id }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post id: /2009/03/27/star-wars" in "_site/2009/03/27/star-wars.html"
 
@@ -51,10 +51,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post content: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post content: <p>Luke, I am your father.</p>" in "_site/2009/03/27/star-wars.html"
 
@@ -63,10 +63,46 @@ Feature: Post data
     And I have a movies/_posts directory
     And I have a _layouts directory
     And I have the following post in "movies":
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
+
+  Scenario: Use post.categories variable when category is in a folder and has category in YAML
+    Given I have a movies directory
+    And I have a movies/_posts directory
+    And I have a _layouts directory
+    And I have the following post in "movies":
+      | title     | date       | layout | category | content                 |
+      | Star Wars | 2009-03-27 | simple | film     | Luke, I am your father. |
+    And I have a simple layout that contains "Post category: {{ page.categories }}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Post category: movies" in "_site/movies/film/2009/03/27/star-wars.html"
+
+  Scenario: Use post.categories variable when category is in a folder and has categories in YAML
+    Given I have a movies directory
+    And I have a movies/_posts directory
+    And I have a _layouts directory
+    And I have the following post in "movies":
+      | title     | date       | layout | categories        | content                 |
+      | Star Wars | 2009-03-27 | simple | [film, scifi]     | Luke, I am your father. |
+    And I have a simple layout that contains "Post category: {{ page.categories }}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Post category: movies" in "_site/movies/film/scifi/2009/03/27/star-wars.html"
+
+  Scenario: Use post.categories variable when category is in a folder and duplicated category is in YAML
+    Given I have a movies directory
+    And I have a movies/_posts directory
+    And I have a _layouts directory
+    And I have the following post in "movies":
+      | title     | date       | layout | category | content                 |
+      | Star Wars | 2009-03-27 | simple | movies   | Luke, I am your father. |
+    And I have a simple layout that contains "Post category: {{ page.categories }}"
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
@@ -74,10 +110,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | tag   | content                 |
+      | title     | date       | layout | tag   | content                 |
       | Star Wars | 2009-05-18 | simple | twist | Luke, I am your father. |
     And I have a simple layout that contains "Post tags: {{ page.tags }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post tags: twist" in "_site/2009/05/18/star-wars.html"
 
@@ -87,10 +123,10 @@ Feature: Post data
     And I have a scifi/movies/_posts directory
     And I have a _layouts directory
     And I have the following post in "scifi/movies":
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
 
@@ -100,10 +136,10 @@ Feature: Post data
     And I have a scifi/Movies/_posts directory
     And I have a _layouts directory
     And I have the following post in "scifi/Movies":
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
 
@@ -111,10 +147,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | category | content                 |
+      | title     | date       | layout | category | content                 |
       | Star Wars | 2009-03-27 | simple | movies   | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
@@ -122,21 +158,32 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | category | content                 |
+      | title     | date       | layout | category | content                 |
       | Star Wars | 2009-03-27 | simple | Movies   | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
-  Scenario: Use post.categories variable when category is in YAML
+  Scenario: Use post.categories variable when categories are in YAML
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | category | content                 |
-      | Star Wars | 2009-03-27 | simple | movies   | Luke, I am your father. |
+      | title     | date       | layout | categories          | content                 |
+      | Star Wars | 2009-03-27 | simple | ['scifi', 'movies'] | Luke, I am your father. |
+    And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
+
+  Scenario: Use post.categories variable when categories are in YAML and are duplicated
+    Given I have a _posts directory
+    And I have a _layouts directory
+    And I have the following post:
+      | title     | date       | layout | categories           | content                 |
+      | Star Wars | 2009-03-27 | simple | ['movies', 'movies'] | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
@@ -144,11 +191,11 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following posts:
-      | title     | date      | layout | categories          | content                     |
+      | title     | date       | layout | categories          | content                     |
       | Star Wars | 2009-03-27 | simple | ['scifi', 'Movies'] | Luke, I am your father.     |
       | Star Trek | 2013-03-17 | simple | ['SciFi', 'movies'] | Jean Luc, I am your father. |
     And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2013/03/17/star-trek.html"
@@ -156,24 +203,24 @@ Feature: Post data
   Scenario Outline: Use page.path variable
     Given I have a <dir>/_posts directory
     And I have the following post in "<dir>":
-      | title | type | date | content |
+      | title   | type | date       | content                      |
       | my-post | html | 2013-04-12 | Source path: {{ page.path }} |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Source path: <path_prefix>_posts/2013-04-12-my-post.html" in "_site/<dir>/2013/04/12/my-post.html"
 
     Examples:
-      | dir | path_prefix |
-      | .   |             |
-      | dir | dir/        |
+      | dir        | path_prefix |
+      | .          |             |
+      | dir        | dir/        |
       | dir/nested | dir/nested/ |
 
   Scenario: Override page.path variable
     Given I have a _posts directory
     And I have the following post:
-      | title    | date      | path               | content                      |
+      | title    | date       | path               | content                      |
       | override | 2013-04-12 | override-path.html | Custom path: {{ page.path }} |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Custom path: override-path.html" in "_site/2013/04/12/override.html"
 
@@ -181,9 +228,9 @@ Feature: Post data
     Given I have a _posts directory
     And I have an "index.html" file that contains "Published!"
     And I have the following post:
-      | title     | date      | layout | published | content                 |
+      | title     | date       | layout | published | content                 |
       | Star Wars | 2009-03-27 | simple | false     | Luke, I am your father. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the "_site/2009/03/27/star-wars.html" file should not exist
     And I should see "Published!" in "_site/index.html"
@@ -192,10 +239,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | author      | content                 |
+      | title     | date       | layout | author      | content                 |
       | Star Wars | 2009-03-27 | simple | Darth Vader | Luke, I am your father. |
     And I have a simple layout that contains "Post author: {{ page.author }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post author: Darth Vader" in "_site/2009/03/27/star-wars.html"
 
@@ -203,12 +250,12 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following posts:
-      | title            | date      | layout  | author      | content                 |
+      | title            | date       | layout  | author      | content                 |
       | Star Wars        | 2009-03-27 | ordered | Darth Vader | Luke, I am your father. |
       | Some like it hot | 2009-04-27 | ordered | Osgood      | Nobody is perfect.      |
       | Terminator       | 2009-05-27 | ordered | Arnold      | Sayonara, baby          |
     And I have a ordered layout that contains "Previous post: {{ page.previous.title }} and next post: {{ page.next.title }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "next post: Some like it hot" in "_site/2009/03/27/star-wars.html"
     And I should see "Previous post: Some like it hot" in "_site/2009/05/27/terminator.html"
diff --git a/features/post_excerpts.feature b/features/post_excerpts.feature
index 09e4133..4ad6d12 100644
--- a/features/post_excerpts.feature
+++ b/features/post_excerpts.feature
@@ -9,9 +9,9 @@ Feature: Post excerpts
     Given I have an "index.html" page that contains "{% for post in site.posts %}{{ post.excerpt }}{% endfor %}"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see exactly "<p>content for entry1.</p>" in "_site/index.html"
 
@@ -21,9 +21,9 @@ Feature: Post excerpts
     And I have a _layouts directory
     And I have a post layout that contains "{{ page.excerpt }}"
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/2007 directory should exist
     And the _site/2007/12 directory should exist
@@ -38,9 +38,9 @@ Feature: Post excerpts
     And I have a _layouts directory
     And I have a post layout that contains "<html><head></head><body>{{ page.excerpt }}</body></html>"
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/2007 directory should exist
     And the _site/2007/12 directory should exist
diff --git a/features/rendering.feature b/features/rendering.feature
new file mode 100644
index 0000000..5f71e2c
--- /dev/null
+++ b/features/rendering.feature
@@ -0,0 +1,34 @@
+Feature: Rendering
+  As a hacker who likes to blog
+  I want to be able to make a static site
+  In order to share my awesome ideas with the interwebs
+  But I want to make it as simply as possible
+  So render with Liquid and place in Layouts
+
+  Scenario: Render Liquid and place in layout
+    Given I have a "index.html" page with layout "simple" that contains "Hi there, Jekyll {{ jekyll.environment }}!"
+    And I have a simple layout that contains "{{ content }}Ahoy, indeed!"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Hi there, Jekyll development!\nAhoy, indeed" in "_site/index.html"
+
+  Scenario: Don't place asset files in layout
+    Given I have an "index.scss" page with layout "simple" that contains ".foo-bar { color:black; }"
+    And I have an "index.coffee" page with layout "simple" that contains "whatever()"
+    And I have a simple layout that contains "{{ content }}Ahoy, indeed!"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should not see "Ahoy, indeed!" in "_site/index.css"
+    And I should not see "Ahoy, indeed!" in "_site/index.js"
+
+  Scenario: Don't render liquid in Sass
+    Given I have an "index.scss" page that contains ".foo-bar { color:{{site.color}}; }"
+    When I run jekyll build
+    Then the _site directory should not exist
+    And I should see "Invalid CSS after" in the build output
+
+  Scenario: Don't render liquid in CoffeeScript
+    Given I have an "index.coffee" page that contains "hey='for {{site.animal}}'"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "hey = 'for {{site.animal}}';" in "_site/index.js"
diff --git a/features/site_configuration.feature b/features/site_configuration.feature
index 4052315..8aaa9e1 100644
--- a/features/site_configuration.feature
+++ b/features/site_configuration.feature
@@ -7,14 +7,14 @@ Feature: Site configuration
     Given I have a blank site in "_sourcedir"
     And I have an "_sourcedir/index.html" file that contains "Changing source directory"
     And I have a configuration file with "source" set to "_sourcedir"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Changing source directory" in "_site/index.html"
 
   Scenario: Change destination directory
     Given I have an "index.html" file that contains "Changing destination directory"
     And I have a configuration file with "destination" set to "_mysite"
-    When I run jekyll
+    When I run jekyll build
     Then the _mysite directory should exist
     And I should see "Changing destination directory" in "_mysite/index.html"
 
@@ -25,7 +25,7 @@ Feature: Site configuration
     | key         | value    |
     | source      | <source> |
     | destination | <dest>   |
-    When I run jekyll
+    When I run jekyll build
     Then the <source> directory should exist
     And the "<dest>/index.html" file should <file_exist> exist
     And I should see "markdown" in "<source>/index.md"
@@ -44,7 +44,7 @@ Feature: Site configuration
     And I have an "README" file that contains "I want to be excluded"
     And I have an "index.html" file that contains "I want to be included"
     And I have a configuration file with "exclude" set to "['Rakefile', 'README']"
-    When I run jekyll
+    When I run jekyll build
     Then I should see "I want to be included" in "_site/index.html"
     And the "_site/Rakefile" file should not exist
     And the "_site/README" file should not exist
@@ -57,7 +57,7 @@ Feature: Site configuration
       | value    |
       | README   |
       | Rakefile |
-    When I run jekyll
+    When I run jekyll build
     Then I should see "I want to be included" in "_site/index.html"
     And the "_site/Rakefile" file should not exist
     And the "_site/README" file should not exist
@@ -65,37 +65,54 @@ Feature: Site configuration
   Scenario: Use RDiscount for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "rdiscount"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Use Kramdown for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "kramdown"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Use Redcarpet for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "redcarpet"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Use Maruku for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "maruku"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Highlight code with pygments
-    Given I have an "index.html" file that contains "{% highlight ruby %} puts 'Hello world!' {% endhighlight %}"
-    And I have a configuration file with "pygments" set to "true"
-    When I run jekyll
+    Given I have an "index.html" page that contains "{% highlight ruby %} puts 'Hello world!' {% endhighlight %}"
+    When I run jekyll build
     Then the _site directory should exist
-    And I should see "puts 'Hello world!'" in "_site/index.html"
+    And I should see "Hello world!" in "_site/index.html"
+    And I should see "class=\"highlight\"" in "_site/index.html"
+
+  Scenario: Highlight code with rouge
+    Given I have an "index.html" page that contains "{% highlight ruby %} puts 'Hello world!' {% endhighlight %}"
+    And I have a configuration file with "highlighter" set to "rouge"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Hello world!" in "_site/index.html"
+    And I should see "class=\"highlight\"" in "_site/index.html"
+
+  Scenario: Rouge renders code block once
+    Given I have a configuration file with "highlighter" set to "rouge"
+    And I have a _posts directory
+    And I have the following post:
+      | title | date             | layout  | content                                      |
+      | foo   | 2014-04-27 11:34 | default | {% highlight text %} test {% endhighlight %} |
+    When I run jekyll build
+    Then I should not see "highlight(.*)highlight" in "_site/2014/04/27/foo.html"
 
   Scenario: Set time and no future dated posts
     Given I have a _layouts directory
@@ -108,10 +125,10 @@ Feature: Site configuration
       | future      | false        |
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: 1 on 2010-01-01" in "_site/index.html"
     And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
@@ -128,10 +145,10 @@ Feature: Site configuration
       | future      | true         |
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: 2 on 2010-01-01" in "_site/index.html"
     And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
@@ -150,7 +167,7 @@ Feature: Site configuration
         | title     | date                   | layout  | content             |
         | entry1    | 2013-04-09 23:22 -0400 | post    | content for entry1. |
         | entry2    | 2013-04-10 03:14 -0400 | post    | content for entry2. |
-      When I run jekyll
+      When I run jekyll build
       Then the _site directory should exist
       And I should see "Page Layout: 2" in "_site/index.html"
       And I should see "Post Layout: <p>content for entry1.</p> built at 2013-04-09T23:22:00-04:00" in "_site/2013/04/09/entry1.html"
@@ -169,7 +186,7 @@ Feature: Site configuration
         | title     | date                   | layout  | content             |
         | entry1    | 2013-04-09 23:22 -0400 | post    | content for entry1. |
         | entry2    | 2013-04-10 03:14 -0400 | post    | content for entry2. |
-      When I run jekyll
+      When I run jekyll build
       Then the _site directory should exist
       And I should see "Page Layout: 2" in "_site/index.html"
       And the "_site/2013/04/10/entry1.html" file should exist
@@ -183,11 +200,11 @@ Feature: Site configuration
       | key         | value       |
       | limit_posts | 2           |
     And I have the following posts:
-      | title   | date      | content          |
-      | Apples  | 2009-03-27 | An article about apples |
-      | Oranges | 2009-04-01  | An article about oranges |
-      | Bananas | 2009-04-05  | An article about bananas |
-    When I run jekyll
+      | title   | date       | content                  |
+      | Apples  | 2009-03-27 | An article about apples  |
+      | Oranges | 2009-04-01 | An article about oranges |
+      | Bananas | 2009-04-05 | An article about bananas |
+    When I run jekyll build
     Then the _site directory should exist
     And the "_site/2009/04/05/bananas.html" file should exist
     And the "_site/2009/04/01/oranges.html" file should exist
@@ -200,7 +217,7 @@ Feature: Site configuration
       | value      |
       | .gitignore |
       | .foo       |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see ".DS_Store" in "_site/.gitignore"
     And the "_site/.htaccess" file should not exist
@@ -217,10 +234,10 @@ Feature: Site configuration
       | layouts     | _theme       |
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: 2 on 2010-01-01" in "_site/index.html"
     And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
@@ -229,7 +246,38 @@ Feature: Site configuration
   Scenario: Add a gem-based plugin
     Given I have an "index.html" file that contains "Whatever"
     And I have a configuration file with "gems" set to "[jekyll_test_plugin]"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Whatever" in "_site/index.html"
     And I should see "this is a test" in "_site/test.txt"
+
+  Scenario: Add an empty whitelist to restrict all gems
+    Given I have an "index.html" file that contains "Whatever"
+    And I have a configuration file with:
+      | key       | value                |
+      | gems      | [jekyll_test_plugin] |
+      | whitelist | []                   |
+    When I run jekyll build --safe
+    Then the _site directory should exist
+    And I should see "Whatever" in "_site/index.html"
+    And the "_site/test.txt" file should not exist
+
+  Scenario: Add a whitelist to restrict some gems but allow others
+    Given I have an "index.html" file that contains "Whatever"
+    And I have a configuration file with:
+      | key       | value                                              |
+      | gems      | [jekyll_test_plugin, jekyll_test_plugin_malicious] |
+      | whitelist | [jekyll_test_plugin]                               |
+    When I run jekyll build --safe
+    Then the _site directory should exist
+    And I should see "Whatever" in "_site/index.html"
+    And the "_site/test.txt" file should exist
+    And I should see "this is a test" in "_site/test.txt"
+
+  Scenario: arbitrary file reads via layouts
+    Given I have an "index.html" page with layout "page" that contains "FOO"
+    And I have a "_config.yml" file that contains "layouts: '../../../../../../../../../../../../../../usr/include'"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "FOO" in "_site/index.html"
+    And I should not see " " in "_site/index.html"
diff --git a/features/site_data.feature b/features/site_data.feature
index faa266b..a7fadf3 100644
--- a/features/site_data.feature
+++ b/features/site_data.feature
@@ -5,32 +5,32 @@ Feature: Site data
 
   Scenario: Use page variable in a page
     Given I have an "contact.html" page with title "Contact" that contains "{{ page.title }}: email at example.com"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Contact: email at example.com" in "_site/contact.html"
 
   Scenario Outline: Use page.path variable in a page
     Given I have a <dir> directory
     And I have a "<path>" page that contains "Source path: {{ page.path }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Source path: <path>" in "_site/<path>"
 
     Examples:
-      | dir | path |
-      | .   | index.html |
-      | dir | dir/about.html |
+      | dir        | path                 |
+      | .          | index.html           |
+      | dir        | dir/about.html       |
       | dir/nested | dir/nested/page.html |
 
   Scenario: Override page.path
     Given I have an "override.html" page with path "custom-override.html" that contains "Custom path: {{ page.path }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Custom path: custom-override.html" in "_site/override.html"
 
   Scenario: Use site.time variable
     Given I have an "index.html" page that contains "{{ site.time }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see today's time in "_site/index.html"
 
@@ -38,11 +38,11 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{{ site.posts.first.title }}: {{ site.posts.first.url }}"
     And I have the following posts:
-      | title       | date      | content         |
-      | First Post  | 2009-03-25 | My First Post   |
-      | Second Post | 2009-03-26 | My Second Post  |
-      | Third Post  | 2009-03-27 | My Third Post   |
-    When I run jekyll
+      | title       | date       | content        |
+      | First Post  | 2009-03-25 | My First Post  |
+      | Second Post | 2009-03-26 | My Second Post |
+      | Third Post  | 2009-03-27 | My Third Post  |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Third Post: /2009/03/27/third-post.html" in "_site/index.html"
 
@@ -50,11 +50,11 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{% for post in site.posts %} {{ post.title }} {% endfor %}"
     And I have the following posts:
-      | title       | date      | content         |
-      | First Post  | 2009-03-25 | My First Post   |
-      | Second Post | 2009-03-26 | My Second Post  |
-      | Third Post  | 2009-03-27 | My Third Post   |
-    When I run jekyll
+      | title       | date       | content        |
+      | First Post  | 2009-03-25 | My First Post  |
+      | Second Post | 2009-03-26 | My Second Post |
+      | Third Post  | 2009-03-27 | My Third Post  |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Third Post  Second Post  First Post" in "_site/index.html"
 
@@ -62,10 +62,10 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{% for post in site.categories.code %} {{ post.title }} {% endfor %}"
     And I have the following posts:
-      | title          | date      | category | content            |
+      | title          | date       | category | content            |
       | Awesome Hack   | 2009-03-26 | code     | puts 'Hello World' |
       | Delicious Beer | 2009-03-26 | food     | 1) Yuengling       |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Awesome Hack" in "_site/index.html"
 
@@ -73,9 +73,9 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{% for post in site.tags.beer %} {{ post.content }} {% endfor %}"
     And I have the following posts:
-      | title          | date      | tag  | content            |
-      | Delicious Beer | 2009-03-26 | beer | 1) Yuengling       |
-    When I run jekyll
+      | title          | date       | tag  | content      |
+      | Delicious Beer | 2009-03-26 | beer | 1) Yuengling |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Yuengling" in "_site/index.html"
 
@@ -83,25 +83,25 @@ Feature: Site data
   Given I have a _posts directory
   And I have an "index.html" page that contains "{% for post in site.posts %}{{ post.title }}:{{ post.previous.title}},{{ post.next.title}} {% endfor %}"
   And I have the following posts:
-    | title | date      | content |
+    | title | date       | content |
     | first | 2009-02-26 | first   |
     | A     | 2009-03-26 | A       |
     | B     | 2009-03-26 | B       |
     | C     | 2009-03-26 | C       |
     | last  | 2009-04-26 | last    |
-  When I run jekyll
+  When I run jekyll build
   Then the _site directory should exist
   And I should see "last:C, C:B,last B:A,C A:first,B first:,A" in "_site/index.html"
 
   Scenario: Use configuration date in site payload
     Given I have an "index.html" page that contains "{{ site.url }}"
     And I have a configuration file with "url" set to "http://example.com"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "http://example.com" in "_site/index.html"
 
   Scenario: Access Jekyll version via jekyll.version
     Given I have an "index.html" page that contains "{{ jekyll.version }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "\d+\.\d+\.\d+" in "_site/index.html"
diff --git a/features/step_definitions/jekyll_steps.rb b/features/step_definitions/jekyll_steps.rb
index 7a74486..b0cb4c8 100644
--- a/features/step_definitions/jekyll_steps.rb
+++ b/features/step_definitions/jekyll_steps.rb
@@ -1,13 +1,35 @@
+def file_content_from_hash(input_hash)
+  matter_hash = input_hash.reject { |k, v| k == "content" }
+  matter = matter_hash.map { |k, v| "#{k}: #{v}\n" }.join.chomp
+
+  content = if input_hash['input'] && input_hash['filter']
+    "{{ #{input_hash['input']} | #{input_hash['filter']} }}"
+  else
+    input_hash['content']
+  end
+
+  <<EOF
+---
+#{matter}
+---
+#{content}
+EOF
+end
+
 Before do
-  FileUtils.rm_rf(TEST_DIR)
-  FileUtils.mkdir(TEST_DIR)
+  FileUtils.mkdir_p(TEST_DIR) unless File.exist?(TEST_DIR)
   Dir.chdir(TEST_DIR)
 end
 
+After do
+  FileUtils.rm_rf(TEST_DIR)   if File.exists?(TEST_DIR)
+  FileUtils.rm(JEKYLL_COMMAND_OUTPUT_FILE) if File.exists?(JEKYLL_COMMAND_OUTPUT_FILE)
+end
+
 World(Test::Unit::Assertions)
 
 Given /^I have a blank site in "(.*)"$/ do |path|
-  FileUtils.mkdir_p(path)
+  FileUtils.mkdir_p(path) unless File.exist?(path)
 end
 
 Given /^I do not have a "(.*)" directory$/ do |path|
@@ -58,42 +80,28 @@ Given /^I have an? (.*) directory$/ do |dir|
   FileUtils.mkdir_p(dir)
 end
 
-Given /^I have the following (draft|post)s?(?: (in|under) "([^"]+)")?:$/ do |status, direction, folder, table|
-  table.hashes.each do |post|
-    title = slug(post['title'])
-    ext = post['type'] || 'textile'
+Given /^I have the following (draft|page|post)s?(?: (in|under) "([^"]+)")?:$/ do |status, direction, folder, table|
+  table.hashes.each do |input_hash|
+    title = slug(input_hash['title'])
+    ext = input_hash['type'] || 'textile'
     before, after = location(folder, direction)
 
-    if "draft" == status
-      folder_post = '_drafts'
+    case status
+    when "draft"
+      dest_folder = '_drafts'
+      filename = "#{title}.#{ext}"
+    when "page"
+      dest_folder = ''
       filename = "#{title}.#{ext}"
-    elsif "post" == status
-      parsed_date = Time.xmlschema(post['date']) rescue Time.parse(post['date'])
-      folder_post = '_posts'
+    when "post"
+      parsed_date = Time.xmlschema(input_hash['date']) rescue Time.parse(input_hash['date'])
+      dest_folder = '_posts'
       filename = "#{parsed_date.strftime('%Y-%m-%d')}-#{title}.#{ext}"
     end
 
-    path = File.join(before, folder_post, after, filename)
-
-    matter_hash = {}
-    %w(title layout tag tags category categories published author path date permalink).each do |key|
-      matter_hash[key] = post[key] if post[key]
-    end
-    matter = matter_hash.map { |k, v| "#{k}: #{v}\n" }.join.chomp
-
-    content = if post['input'] && post['filter']
-      "{{ #{post['input']} | #{post['filter']} }}"
-    else
-      post['content']
-    end
-
+    path = File.join(before, dest_folder, after, filename)
     File.open(path, 'w') do |f|
-      f.write <<EOF
----
-#{matter}
----
-#{content}
-EOF
+      f.write file_content_from_hash(input_hash)
     end
   end
 end
@@ -121,21 +129,21 @@ Given /^I have a configuration file with "([^\"]*)" set to:$/ do |key, table|
   end
 end
 
-
-When /^I run jekyll$/ do
-  run_jekyll
-end
-
-When /^I run jekyll with drafts$/ do
-  run_jekyll(:drafts => true)
+Given /^I have fixture collections$/ do
+  FileUtils.cp_r File.join(JEKYLL_SOURCE_DIR, "test", "source", "_methods"), source_dir
 end
 
-When /^I call jekyll new with test_blank --blank$/ do
-  call_jekyll_new(:path => "test_blank", :blank => true)
-end
+##################
+#
+# Changing stuff
+#
+##################
 
-When /^I debug jekyll$/ do
-  run_jekyll(:debug => true)
+When /^I run jekyll(.*)$/ do |args|
+  status = run_jekyll(args)
+  if args.include?("--verbose") || ENV['DEBUG']
+    puts jekyll_run_output
+  end
 end
 
 When /^I change "(.*)" to contain "(.*)"$/ do |file, text|
@@ -157,7 +165,7 @@ Then /^the (.*) directory should not exist$/ do |dir|
 end
 
 Then /^I should see "(.*)" in "(.*)"$/ do |text, file|
-  assert_match Regexp.new(text), file_contents(file)
+  assert_match Regexp.new(text, Regexp::MULTILINE), file_contents(file)
 end
 
 Then /^I should see exactly "(.*)" in "(.*)"$/ do |text, file|
@@ -165,7 +173,7 @@ Then /^I should see exactly "(.*)" in "(.*)"$/ do |text, file|
 end
 
 Then /^I should not see "(.*)" in "(.*)"$/ do |text, file|
-  assert_no_match Regexp.new(text), file_contents(file)
+  assert_no_match Regexp.new(text, Regexp::MULTILINE), file_contents(file)
 end
 
 Then /^I should see escaped "(.*)" in "(.*)"$/ do |text, file|
@@ -177,7 +185,7 @@ Then /^the "(.*)" file should +exist$/ do |file|
 end
 
 Then /^the "(.*)" file should not exist$/ do |file|
-  assert !File.exists?(file), "The file \"#{file}\" exists"
+  assert !File.exist?(file), "The file \"#{file}\" exists"
 end
 
 Then /^I should see today's time in "(.*)"$/ do |file|
@@ -187,3 +195,7 @@ end
 Then /^I should see today's date in "(.*)"$/ do |file|
   assert_match Regexp.new(Date.today.to_s), file_contents(file)
 end
+
+Then /^I should see "(.*)" in the build output$/ do |text|
+  assert_match Regexp.new(text), jekyll_run_output
+end
diff --git a/features/support/env.rb b/features/support/env.rb
index fa71e5f..2f5f5e5 100644
--- a/features/support/env.rb
+++ b/features/support/env.rb
@@ -1,35 +1,35 @@
-if RUBY_VERSION > '1.9'
-  require 'coveralls'
-  Coveralls.wear_merged!
-end
-
 require 'fileutils'
 require 'rr'
 require 'test/unit'
 require 'time'
 
-TEST_DIR    = File.join('/', 'tmp', 'jekyll')
+JEKYLL_SOURCE_DIR = File.dirname(File.dirname(File.dirname(__FILE__)))
+TEST_DIR    = File.expand_path(File.join('..', '..', 'tmp', 'jekyll'), File.dirname(__FILE__))
 JEKYLL_PATH = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'jekyll')
+JEKYLL_COMMAND_OUTPUT_FILE = File.join(File.dirname(TEST_DIR), 'jekyll_output.txt')
 
-def run_jekyll(opts = {})
-  command = JEKYLL_PATH.clone
-  command << " build --trace"
-  command << " --drafts" if opts[:drafts]
-  command << " >> /dev/null 2>&1" if opts[:debug].nil?
-  system command
+def source_dir(*files)
+  File.join(TEST_DIR, *files)
 end
 
-def call_jekyll_new(opts = {})
-  command = JEKYLL_PATH.clone
-  command << " new --trace"
-  command << " #{opts[:path]}" if opts[:path]
-  command << " --blank" if opts[:blank]
-  command << " >> /dev/null 2>&1" if opts[:debug].nil?
-  system command
+def jekyll_output_file
+  JEKYLL_COMMAND_OUTPUT_FILE
+end
+
+def jekyll_run_output
+  File.read(jekyll_output_file)
+end
+
+def run_jekyll(args)
+  system "#{JEKYLL_PATH} #{args} --trace > #{jekyll_output_file} 2>&1"
 end
 
 def slug(title)
-  title.downcase.gsub(/[^\w]/, " ").strip.gsub(/\s+/, '-')
+  if title
+    title.downcase.gsub(/[^\w]/, " ").strip.gsub(/\s+/, '-')
+  else
+    Time.now.strftime("%s%9N") # nanoseconds since the Epoch
+  end
 end
 
 def location(folder, direction)
@@ -47,15 +47,8 @@ def file_contents(path)
 end
 
 def seconds_agnostic_datetime(datetime = Time.now)
-  pieces = datetime.to_s.split(" ")
-  if pieces.size == 6 # Ruby 1.8.7
-    date = pieces[0..2].join(" ")
-    time = seconds_agnostic_time(pieces[3])
-    zone = pieces[4..5].join(" ")
-  else # Ruby 1.9.1 or greater
-    date, time, zone = pieces
-    time = seconds_agnostic_time(time)
-  end
+  date, time, zone = datetime.to_s.split(" ")
+  time = seconds_agnostic_time(time)
   [
     Regexp.escape(date),
     "#{time}:\\d{2}",
@@ -70,6 +63,3 @@ def seconds_agnostic_time(time)
   hour, minutes, _ = time.split(":")
   "#{hour}:#{minutes}"
 end
-
-# work around "invalid option: --format" cucumber bug (see #296)
-Test::Unit.run = true if RUBY_VERSION < '1.9'
diff --git a/jekyll.gemspec b/jekyll.gemspec
index c12b4a7..4a43cf1 100644
--- a/jekyll.gemspec
+++ b/jekyll.gemspec
@@ -1,309 +1,66 @@
+# coding: utf-8
+lib = File.expand_path('../lib', __FILE__)
+$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
+require 'jekyll/version'
+
 Gem::Specification.new do |s|
   s.specification_version = 2 if s.respond_to? :specification_version=
   s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.rubygems_version = '1.3.5'
+  s.rubygems_version = '2.2.2'
+  s.required_ruby_version = '>= 1.9.3'
 
   s.name              = 'jekyll'
-  s.version           = '1.5.1'
+  s.version           = Jekyll::VERSION
   s.license           = 'MIT'
-  s.date              = '2014-03-28'
-  s.rubyforge_project = 'jekyll'
 
   s.summary     = "A simple, blog aware, static site generator."
   s.description = "Jekyll is a simple, blog aware, static site generator."
 
   s.authors  = ["Tom Preston-Werner"]
   s.email    = 'tom at mojombo.com'
-  s.homepage = 'http://github.com/mojombo/jekyll'
-
-  s.require_paths = %w[lib]
+  s.homepage = 'https://github.com/jekyll/jekyll'
 
-  s.executables = ["jekyll"]
+  s.files         = `git ls-files`.split($/)
+  s.executables   = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
+  s.test_files    = s.files.grep(%r{^(test|spec|features)/})
+  s.require_paths = ["lib"]
 
   s.rdoc_options = ["--charset=UTF-8"]
   s.extra_rdoc_files = %w[README.markdown LICENSE]
 
-  s.add_runtime_dependency('liquid', "~> 2.5.5")
-  s.add_runtime_dependency('classifier', "~> 1.3")
-  s.add_runtime_dependency('listen', "~> 1.3")
-  s.add_runtime_dependency('maruku', "0.7.0")
-  s.add_runtime_dependency('pygments.rb', "~> 0.5.0")
-  s.add_runtime_dependency('commander', "~> 4.1.3")
+  s.add_runtime_dependency('liquid',    "~> 2.6.1")
+  s.add_runtime_dependency('kramdown',  "~> 1.3")
+  s.add_runtime_dependency('mercenary', "~> 0.3.3")
   s.add_runtime_dependency('safe_yaml', "~> 1.0")
   s.add_runtime_dependency('colorator', "~> 0.1")
-  s.add_runtime_dependency('redcarpet', "~> 2.3.0")
+
+  # Before 3.0 drops, phase the following gems out as dev dependencies
+  # and gracefully handle their absence.
+  s.add_runtime_dependency('classifier', "~> 1.3")
+  s.add_runtime_dependency('pygments.rb', "~> 0.6.0")
+  s.add_runtime_dependency('redcarpet', "~> 3.1")
   s.add_runtime_dependency('toml', '~> 0.1.0')
+  s.add_runtime_dependency('jekyll-paginate', '~> 1.0')
+  s.add_runtime_dependency('jekyll-gist', '~> 1.0')
+  s.add_runtime_dependency('jekyll-coffeescript', '~> 1.0')
+  s.add_runtime_dependency('jekyll-sass-converter', '~> 1.0')
+  s.add_runtime_dependency('jekyll-watch', '~> 1.0')
 
   s.add_development_dependency('rake', "~> 10.1")
   s.add_development_dependency('rdoc', "~> 3.11")
   s.add_development_dependency('redgreen', "~> 1.2")
-  s.add_development_dependency('shoulda', "~> 3.3.2")
+  s.add_development_dependency('shoulda', "~> 3.5")
   s.add_development_dependency('rr', "~> 1.1")
   s.add_development_dependency('cucumber', "1.3.11")
   s.add_development_dependency('RedCloth', "~> 4.2")
-  s.add_development_dependency('kramdown', "~> 1.2")
+  s.add_development_dependency('maruku', "~> 0.7.0")
   s.add_development_dependency('rdiscount', "~> 1.6")
   s.add_development_dependency('launchy', "~> 2.3")
   s.add_development_dependency('simplecov', "~> 0.7")
   s.add_development_dependency('simplecov-gem-adapter', "~> 1.0.1")
-  s.add_development_dependency('coveralls', "~> 0.7.0")
   s.add_development_dependency('mime-types', "~> 1.5")
   s.add_development_dependency('activesupport', '~> 3.2.13')
   s.add_development_dependency('jekyll_test_plugin')
-
-  # = MANIFEST =
-  s.files = %w[
-    CONTRIBUTING.markdown
-    Gemfile
-    History.markdown
-    LICENSE
-    README.markdown
-    Rakefile
-    bin/jekyll
-    cucumber.yml
-    features/create_sites.feature
-    features/data.feature
-    features/drafts.feature
-    features/embed_filters.feature
-    features/include_tag.feature
-    features/markdown.feature
-    features/pagination.feature
-    features/permalinks.feature
-    features/post_data.feature
-    features/post_excerpts.feature
-    features/site_configuration.feature
-    features/site_data.feature
-    features/step_definitions/jekyll_steps.rb
-    features/support/env.rb
-    jekyll.gemspec
-    lib/jekyll.rb
-    lib/jekyll/cleaner.rb
-    lib/jekyll/command.rb
-    lib/jekyll/commands/build.rb
-    lib/jekyll/commands/doctor.rb
-    lib/jekyll/commands/new.rb
-    lib/jekyll/commands/serve.rb
-    lib/jekyll/configuration.rb
-    lib/jekyll/converter.rb
-    lib/jekyll/converters/identity.rb
-    lib/jekyll/converters/markdown.rb
-    lib/jekyll/converters/markdown/kramdown_parser.rb
-    lib/jekyll/converters/markdown/maruku_parser.rb
-    lib/jekyll/converters/markdown/rdiscount_parser.rb
-    lib/jekyll/converters/markdown/redcarpet_parser.rb
-    lib/jekyll/converters/textile.rb
-    lib/jekyll/convertible.rb
-    lib/jekyll/core_ext.rb
-    lib/jekyll/deprecator.rb
-    lib/jekyll/draft.rb
-    lib/jekyll/entry_filter.rb
-    lib/jekyll/errors.rb
-    lib/jekyll/excerpt.rb
-    lib/jekyll/filters.rb
-    lib/jekyll/generator.rb
-    lib/jekyll/generators/pagination.rb
-    lib/jekyll/layout.rb
-    lib/jekyll/mime.types
-    lib/jekyll/page.rb
-    lib/jekyll/plugin.rb
-    lib/jekyll/post.rb
-    lib/jekyll/related_posts.rb
-    lib/jekyll/site.rb
-    lib/jekyll/static_file.rb
-    lib/jekyll/stevenson.rb
-    lib/jekyll/tags/gist.rb
-    lib/jekyll/tags/highlight.rb
-    lib/jekyll/tags/include.rb
-    lib/jekyll/tags/post_url.rb
-    lib/jekyll/url.rb
-    lib/site_template/.gitignore
-    lib/site_template/_config.yml
-    lib/site_template/_layouts/default.html
-    lib/site_template/_layouts/post.html
-    lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
-    lib/site_template/css/main.css
-    lib/site_template/css/syntax.css
-    lib/site_template/index.html
-    script/bootstrap
-    site/.gitignore
-    site/CNAME
-    site/README
-    site/_config.yml
-    site/_includes/analytics.html
-    site/_includes/docs_contents.html
-    site/_includes/docs_contents_mobile.html
-    site/_includes/docs_option.html
-    site/_includes/docs_ul.html
-    site/_includes/footer.html
-    site/_includes/header.html
-    site/_includes/news_contents.html
-    site/_includes/news_contents_mobile.html
-    site/_includes/news_item.html
-    site/_includes/primary-nav-items.html
-    site/_includes/section_nav.html
-    site/_includes/top.html
-    site/_layouts/default.html
-    site/_layouts/docs.html
-    site/_layouts/news.html
-    site/_layouts/news_item.html
-    site/_posts/2013-05-06-jekyll-1-0-0-released.markdown
-    site/_posts/2013-05-08-jekyll-1-0-1-released.markdown
-    site/_posts/2013-05-12-jekyll-1-0-2-released.markdown
-    site/_posts/2013-06-07-jekyll-1-0-3-released.markdown
-    site/_posts/2013-07-14-jekyll-1-1-0-released.markdown
-    site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
-    site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
-    site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
-    site/_posts/2013-09-06-jekyll-1-2-0-released.markdown
-    site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
-    site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
-    site/_posts/2013-11-04-jekyll-1-3-0-released.markdown
-    site/_posts/2013-11-26-jekyll-1-3-1-released.markdown
-    site/_posts/2013-12-07-jekyll-1-4-0-released.markdown
-    site/_posts/2013-12-16-jekyll-1-4-2-released.markdown
-    site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
-    site/_posts/2014-03-24-jekyll-1-5-0-released.markdown
-    site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
-    site/css/gridism.css
-    site/css/normalize.css
-    site/css/pygments.css
-    site/css/style.css
-    site/docs/configuration.md
-    site/docs/contributing.md
-    site/docs/datafiles.md
-    site/docs/deployment-methods.md
-    site/docs/drafts.md
-    site/docs/extras.md
-    site/docs/frontmatter.md
-    site/docs/github-pages.md
-    site/docs/heroku.md
-    site/docs/history.md
-    site/docs/index.md
-    site/docs/installation.md
-    site/docs/migrations.md
-    site/docs/pages.md
-    site/docs/pagination.md
-    site/docs/permalinks.md
-    site/docs/plugins.md
-    site/docs/posts.md
-    site/docs/quickstart.md
-    site/docs/resources.md
-    site/docs/sites.md
-    site/docs/structure.md
-    site/docs/templates.md
-    site/docs/troubleshooting.md
-    site/docs/upgrading.md
-    site/docs/usage.md
-    site/docs/variables.md
-    site/favicon.png
-    site/feed.xml
-    site/freenode.txt
-    site/img/article-footer.png
-    site/img/footer-arrow.png
-    site/img/footer-logo.png
-    site/img/logo-2x.png
-    site/img/octojekyll.png
-    site/img/tube.png
-    site/img/tube1x.png
-    site/index.html
-    site/js/modernizr-2.5.3.min.js
-    site/news/index.html
-    site/news/releases/index.html
-    test/fixtures/broken_front_matter1.erb
-    test/fixtures/broken_front_matter2.erb
-    test/fixtures/broken_front_matter3.erb
-    test/fixtures/exploit_front_matter.erb
-    test/fixtures/front_matter.erb
-    test/helper.rb
-    test/source/+/foo.md
-    test/source/.htaccess
-    test/source/_config.dev.toml
-    test/source/_data/languages.yml
-    test/source/_data/members.yaml
-    test/source/_data/products.yml
-    test/source/_includes/params.html
-    test/source/_includes/sig.markdown
-    test/source/_includes/tmp
-    test/source/_layouts/default.html
-    test/source/_layouts/post/simple.html
-    test/source/_layouts/simple.html
-    test/source/_plugins/dummy.rb
-    test/source/_posts/2008-02-02-not-published.textile
-    test/source/_posts/2008-02-02-published.textile
-    test/source/_posts/2008-10-18-foo-bar.textile
-    test/source/_posts/2008-11-21-complex.textile
-    test/source/_posts/2008-12-03-permalinked-post.textile
-    test/source/_posts/2008-12-13-include.markdown
-    test/source/_posts/2009-01-27-array-categories.textile
-    test/source/_posts/2009-01-27-categories.textile
-    test/source/_posts/2009-01-27-category.textile
-    test/source/_posts/2009-01-27-empty-categories.textile
-    test/source/_posts/2009-01-27-empty-category.textile
-    test/source/_posts/2009-03-12-hash-#1.markdown
-    test/source/_posts/2009-05-18-empty-tag.textile
-    test/source/_posts/2009-05-18-empty-tags.textile
-    test/source/_posts/2009-05-18-tag.textile
-    test/source/_posts/2009-05-18-tags.textile
-    test/source/_posts/2009-06-22-empty-yaml.textile
-    test/source/_posts/2009-06-22-no-yaml.textile
-    test/source/_posts/2010-01-08-triple-dash.markdown
-    test/source/_posts/2010-01-09-date-override.textile
-    test/source/_posts/2010-01-09-time-override.textile
-    test/source/_posts/2010-01-09-timezone-override.textile
-    test/source/_posts/2010-01-16-override-data.textile
-    test/source/_posts/2011-04-12-md-extension.md
-    test/source/_posts/2011-04-12-text-extension.text
-    test/source/_posts/2013-01-02-post-excerpt.markdown
-    test/source/_posts/2013-01-12-nil-layout.textile
-    test/source/_posts/2013-01-12-no-layout.textile
-    test/source/_posts/2013-03-19-not-a-post.markdown/.gitkeep
-    test/source/_posts/2013-04-11-custom-excerpt.markdown
-    test/source/_posts/2013-05-10-number-category.textile
-    test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown
-    test/source/_posts/2013-08-01-mkdn-extension.mkdn
-    test/source/_posts/2014-01-06-permalink-traversal.md
-    test/source/_posts/es/2008-11-21-nested.textile
-    test/source/about.html
-    test/source/category/_posts/2008-9-23-categories.textile
-    test/source/contacts.html
-    test/source/contacts/bar.html
-    test/source/contacts/index.html
-    test/source/css/screen.css
-    test/source/deal.with.dots.html
-    test/source/exploit.md
-    test/source/foo/_posts/bar/2008-12-12-topical-post.textile
-    test/source/index.html
-    test/source/products.yml
-    test/source/sitemap.xml
-    test/source/symlink-test/_data
-    test/source/symlink-test/symlinked-dir
-    test/source/symlink-test/symlinked-file
-    test/source/win/_posts/2009-05-24-yaml-linebreak.markdown
-    test/source/z_category/_posts/2008-9-23-categories.textile
-    test/suite.rb
-    test/test_command.rb
-    test/test_configuration.rb
-    test/test_convertible.rb
-    test/test_core_ext.rb
-    test/test_entry_filter.rb
-    test/test_excerpt.rb
-    test/test_filters.rb
-    test/test_generated_site.rb
-    test/test_kramdown.rb
-    test/test_new_command.rb
-    test/test_page.rb
-    test/test_pager.rb
-    test/test_path_sanitization.rb
-    test/test_post.rb
-    test/test_rdiscount.rb
-    test/test_redcarpet.rb
-    test/test_redcloth.rb
-    test/test_related_posts.rb
-    test/test_site.rb
-    test/test_tags.rb
-    test/test_url.rb
-  ]
-  # = MANIFEST =
-
-  s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
+  s.add_development_dependency('jekyll_test_plugin_malicious')
+  s.add_development_dependency('rouge', '~> 1.3')
 end
diff --git a/lib/jekyll.rb b/lib/jekyll.rb
index a2a97ba..ba892e1 100644
--- a/lib/jekyll.rb
+++ b/lib/jekyll.rb
@@ -18,52 +18,63 @@ require 'rubygems'
 # stdlib
 require 'fileutils'
 require 'time'
-require 'safe_yaml'
 require 'English'
 require 'pathname'
+require 'logger'
 
 # 3rd party
+require 'safe_yaml/load'
 require 'liquid'
-require 'maruku'
+require 'kramdown'
 require 'colorator'
-require 'toml'
-
-# internal requires
-require 'jekyll/core_ext'
-require 'jekyll/stevenson'
-require 'jekyll/deprecator'
-require 'jekyll/configuration'
-require 'jekyll/site'
-require 'jekyll/convertible'
-require 'jekyll/url'
-require 'jekyll/layout'
-require 'jekyll/page'
-require 'jekyll/post'
-require 'jekyll/excerpt'
-require 'jekyll/draft'
-require 'jekyll/filters'
-require 'jekyll/static_file'
-require 'jekyll/errors'
-require 'jekyll/related_posts'
-require 'jekyll/cleaner'
-require 'jekyll/entry_filter'
-
-# extensions
-require 'jekyll/plugin'
-require 'jekyll/converter'
-require 'jekyll/generator'
-require 'jekyll/command'
-
-require_all 'jekyll/commands'
-require_all 'jekyll/converters'
-require_all 'jekyll/converters/markdown'
-require_all 'jekyll/generators'
-require_all 'jekyll/tags'
 
 SafeYAML::OPTIONS[:suppress_warnings] = true
 
 module Jekyll
-  VERSION = '1.5.1'
+
+  # internal requires
+  autoload :Cleaner,             'jekyll/cleaner'
+  autoload :Collection,          'jekyll/collection'
+  autoload :Configuration,       'jekyll/configuration'
+  autoload :Convertible,         'jekyll/convertible'
+  autoload :Deprecator,          'jekyll/deprecator'
+  autoload :Document,            'jekyll/document'
+  autoload :Draft,               'jekyll/draft'
+  autoload :EntryFilter,         'jekyll/entry_filter'
+  autoload :Errors,              'jekyll/errors'
+  autoload :Excerpt,             'jekyll/excerpt'
+  autoload :Filters,             'jekyll/filters'
+  autoload :FrontmatterDefaults, 'jekyll/frontmatter_defaults'
+  autoload :Layout,              'jekyll/layout'
+  autoload :LayoutReader,        'jekyll/layout_reader'
+  autoload :LogAdapter,          'jekyll/log_adapter'
+  autoload :Page,                'jekyll/page'
+  autoload :PluginManager,       'jekyll/plugin_manager'
+  autoload :Post,                'jekyll/post'
+  autoload :Publisher,           'jekyll/publisher'
+  autoload :RelatedPosts,        'jekyll/related_posts'
+  autoload :Renderer,            'jekyll/renderer'
+  autoload :Site,                'jekyll/site'
+  autoload :StaticFile,          'jekyll/static_file'
+  autoload :Stevenson,           'jekyll/stevenson'
+  autoload :URL,                 'jekyll/url'
+  autoload :Utils,               'jekyll/utils'
+  autoload :VERSION,             'jekyll/version'
+
+  # extensions
+  require 'jekyll/plugin'
+  require 'jekyll/converter'
+  require 'jekyll/generator'
+  require 'jekyll/command'
+  require 'jekyll/liquid_extensions'
+
+  # Public: Tells you which Jekyll environment you are building in so you can skip tasks
+  # if you need to.  This is useful when doing expensive compression tasks on css and
+  # images and allows you to skip that when working in development.
+
+  def self.env
+    ENV["JEKYLL_ENV"] || "development"
+  end
 
   # Public: Generate a Jekyll configuration Hash by merging the default
   # options with anything in _config.yml, and adding the given options on top.
@@ -79,7 +90,7 @@ module Jekyll
     config = config.read_config_files(config.config_files(override))
 
     # Merge DEFAULTS < _config.yml < override
-    config = config.deep_merge(override).stringify_keys
+    config = Utils.deep_merge_hashes(config, override).stringify_keys
     set_timezone(config['timezone']) if config['timezone']
 
     config
@@ -95,14 +106,22 @@ module Jekyll
   end
 
   def self.logger
-    @logger ||= Stevenson.new
+    @logger ||= LogAdapter.new(Stevenson.new)
   end
 
-  # Get a subpath without any of the traversal nonsense.
+  def self.logger=(writer)
+    @logger = LogAdapter.new(writer)
+  end
+
+  # Public: File system root
   #
-  # Returns a pure and clean path
+  # Returns the root of the filesystem as a Pathname
+  def self.fs_root
+    @fs_root ||= "/"
+  end
+
   def self.sanitized_path(base_directory, questionable_path)
-    clean_path = File.expand_path(questionable_path, "/")
+    clean_path = File.expand_path(questionable_path, fs_root)
     clean_path.gsub!(/\A\w\:\//, '/')
     unless clean_path.start_with?(base_directory)
       File.join(base_directory, clean_path)
@@ -111,3 +130,19 @@ module Jekyll
     end
   end
 end
+
+require_all 'jekyll/commands'
+require_all 'jekyll/converters'
+require_all 'jekyll/converters/markdown'
+require_all 'jekyll/generators'
+require_all 'jekyll/tags'
+
+# Eventually remove these for 3.0 as non-core
+Jekyll::Deprecator.gracefully_require(%w[
+  classifier
+  toml
+  jekyll-paginate
+  jekyll-gist
+  jekyll-coffeescript
+  jekyll-sass-converter
+])
diff --git a/lib/jekyll/cleaner.rb b/lib/jekyll/cleaner.rb
index e3a89b4..0aa3cdf 100644
--- a/lib/jekyll/cleaner.rb
+++ b/lib/jekyll/cleaner.rb
@@ -4,6 +4,8 @@ module Jekyll
   class Site
     # Handles the cleanup of a site's destination before it is built.
     class Cleaner
+      attr_reader :site
+
       def initialize(site)
         @site = site
       end
@@ -27,8 +29,8 @@ module Jekyll
       # Returns a Set with the file paths
       def existing_files
         files = Set.new
-        Dir.glob(File.join(@site.dest, "**", "*"), File::FNM_DOTMATCH) do |file|
-          files << file unless file =~ /\/\.{1,2}$/ || file =~ keep_file_regex
+        Dir.glob(File.join(site.dest, "**", "*"), File::FNM_DOTMATCH) do |file|
+          files << file unless file =~ /\/\.{1,2}$/ || file =~ keep_file_regex || keep_dirs.include?(file)
         end
         files
       end
@@ -38,7 +40,7 @@ module Jekyll
       # Returns a Set with the file paths
       def new_files
         files = Set.new
-        @site.each_site_file { |item| files << item.destination(@site.dest) }
+        site.each_site_file { |item| files << item.destination(site.dest) }
         files
       end
 
@@ -47,7 +49,19 @@ module Jekyll
       #
       # Returns a Set with the directory paths
       def new_dirs
-        new_files.map { |file| File.dirname(file) }.to_set
+        new_files.map { |file| parent_dirs(file) }.flatten.to_set
+      end
+
+      # Private: The list of parent directories of a given file
+      #
+      # Returns an Array with the directory paths
+      def parent_dirs(file)
+        parent_dir = File.dirname(file)
+        if parent_dir == site.dest
+          []
+        else
+          [parent_dir] + parent_dirs(parent_dir)
+        end
       end
 
       # Private: The list of existing files that will be replaced by a directory during build
@@ -57,6 +71,14 @@ module Jekyll
         new_dirs.select { |dir| File.file?(dir) }.to_set
       end
 
+      # Private: The list of directories that need to be kept because they are parent directories
+      # of files specified in keep_files
+      #
+      # Returns a Set with the directory paths
+      def keep_dirs
+        site.keep_files.map{|file| parent_dirs(File.join(site.dest, file))}.flatten.to_set
+      end
+
       # Private: Creates a regular expression from the config's keep_files array
       #
       # Examples
@@ -64,7 +86,7 @@ module Jekyll
       #
       # Returns the regular expression
       def keep_file_regex
-        or_list = @site.keep_files.join("|")
+        or_list = site.keep_files.join("|")
         pattern = "\/(#{or_list.gsub(".", "\.")})"
         Regexp.new pattern
       end
diff --git a/lib/jekyll/collection.rb b/lib/jekyll/collection.rb
new file mode 100644
index 0000000..8db6c54
--- /dev/null
+++ b/lib/jekyll/collection.rb
@@ -0,0 +1,154 @@
+module Jekyll
+  class Collection
+    attr_reader :site, :label, :metadata
+
+    # Create a new Collection.
+    #
+    # site - the site to which this collection belongs.
+    # label - the name of the collection
+    #
+    # Returns nothing.
+    def initialize(site, label)
+      @site     = site
+      @label    = sanitize_label(label)
+      @metadata = extract_metadata
+    end
+
+    # Fetch the Documents in this collection.
+    # Defaults to an empty array if no documents have been read in.
+    #
+    # Returns an array of Jekyll::Document objects.
+    def docs
+      @docs ||= []
+    end
+
+    # Read the allowed documents into the collection's array of docs.
+    #
+    # Returns the sorted array of docs.
+    def read
+      filtered_entries.each do |file_path|
+        doc = Jekyll::Document.new(Jekyll.sanitized_path(directory, file_path), { site: site, collection: self })
+        doc.read
+        docs << doc
+      end
+      docs.sort!
+    end
+
+    # All the entries in this collection.
+    #
+    # Returns an Array of file paths to the documents in this collection
+    #   relative to the collection's directory
+    def entries
+      return Array.new unless exists?
+      Dir.glob(File.join(directory, "**", "*.*")).map do |entry|
+        entry[File.join(directory, "")] = ''; entry
+      end
+    end
+
+    # Filtered version of the entries in this collection.
+    # See `Jekyll::EntryFilter#filter` for more information.
+    #
+    # Returns a list of filtered entry paths.
+    def filtered_entries
+      return Array.new unless exists?
+      Dir.chdir(directory) do
+        entry_filter.filter(entries).reject { |f| File.directory?(f) }
+      end
+    end
+
+    # The directory for this Collection, relative to the site source.
+    #
+    # Returns a String containing the directory name where the collection
+    #   is stored on the filesystem.
+    def relative_directory
+      "_#{label}"
+    end
+
+    # The full path to the directory containing the
+    #
+    # Returns a String containing th directory name where the collection
+    #   is stored on the filesystem.
+    def directory
+      Jekyll.sanitized_path(site.source, relative_directory)
+    end
+
+    # Checks whether the directory "exists" for this collection.
+    # The directory must exist on the filesystem and must not be a symlink
+    #   if in safe mode.
+    #
+    # Returns false if the directory doesn't exist or if it's a symlink
+    #   and we're in safe mode.
+    def exists?
+      File.directory?(directory) && !(File.symlink?(directory) && site.safe)
+    end
+
+    # The entry filter for this collection.
+    # Creates an instance of Jekyll::EntryFilter.
+    #
+    # Returns the instance of Jekyll::EntryFilter for this collection.
+    def entry_filter
+      @entry_filter ||= Jekyll::EntryFilter.new(site, relative_directory)
+    end
+
+    # An inspect string.
+    #
+    # Returns the inspect string
+    def inspect
+      "#<Jekyll::Collection @label=#{label} docs=#{docs}>"
+    end
+
+    # Produce a sanitized label name
+    # Label names may not contain anything but alphanumeric characters,
+    #   underscores, and hyphens.
+    #
+    # label - the possibly-unsafe label
+    #
+    # Returns a sanitized version of the label.
+    def sanitize_label(label)
+      label.gsub(/[^a-z0-9_\-\.]/i, '')
+    end
+
+    # Produce a representation of this Collection for use in Liquid.
+    # Exposes two attributes:
+    #   - label
+    #   - docs
+    #
+    # Returns a representation of this collection for use in Liquid.
+    def to_liquid
+      metadata.merge({
+        "label"     => label,
+        "docs"      => docs,
+        "directory" => directory,
+        "output"    => write?,
+        "relative_directory" => relative_directory
+      })
+    end
+
+    # Whether the collection's documents ought to be written as individual
+    #   files in the output.
+    #
+    # Returns true if the 'write' metadata is true, false otherwise.
+    def write?
+      !!metadata['output']
+    end
+
+    # The URL template to render collection's documents at.
+    #
+    # Returns the URL template to render collection's documents at.
+    def url_template
+      metadata.fetch('permalink', "/:collection/:path:output_ext")
+    end
+
+    # Extract options for this collection from the site configuration.
+    #
+    # Returns the metadata for this collection
+    def extract_metadata
+      if site.config['collections'].is_a?(Hash)
+        site.config['collections'][label] || Hash.new
+      else
+        {}
+      end
+    end
+
+  end
+end
diff --git a/lib/jekyll/command.rb b/lib/jekyll/command.rb
index 911d85b..d11631d 100644
--- a/lib/jekyll/command.rb
+++ b/lib/jekyll/command.rb
@@ -1,27 +1,91 @@
 module Jekyll
   class Command
-    def self.globs(source, destination)
-      Dir.chdir(source) do
-        dirs = Dir['*'].select { |x| File.directory?(x) }
-        dirs -= [destination, File.expand_path(destination), File.basename(destination)]
-        dirs = dirs.map { |x| "#{x}/**/*" }
-        dirs += ['*']
+
+    class << self
+
+      # A list of subclasses of Jekyll::Command
+      def subclasses
+        @subclasses ||= []
+      end
+
+      # Keep a list of subclasses of Jekyll::Command every time it's inherited
+      # Called automatically.
+      #
+      # base - the subclass
+      #
+      # Returns nothing
+      def inherited(base)
+        subclasses << base
+        super(base)
+      end
+
+      # Paths to ignore for the watch option
+      #
+      # options - A Hash of options passed to the command
+      #
+      # Returns a list of relative paths from source that should be ignored
+      def ignore_paths(options)
+        source      = options['source']
+        destination = options['destination']
+        config_files = Configuration[options].config_files(options)
+        paths = config_files + Array(destination)
+        ignored = []
+
+        source_abs = Pathname.new(source).expand_path
+        paths.each do |p|
+          path_abs = Pathname.new(p).expand_path
+          begin
+            rel_path = path_abs.relative_path_from(source_abs).to_s
+            ignored << Regexp.new(Regexp.escape(rel_path)) unless rel_path.start_with?('../')
+          rescue ArgumentError
+            # Could not find a relative path
+          end
+        end
+        ignored
+      end
+
+      # Run Site#process and catch errors
+      #
+      # site - the Jekyll::Site object
+      #
+      # Returns nothing
+      def process_site(site)
+        site.process
+      rescue Jekyll::Errors::FatalException => e
+        Jekyll.logger.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:"
+        Jekyll.logger.error "", "------------------------------------"
+        Jekyll.logger.error "", e.message
+        exit(1)
+      end
+
+      # Create a full Jekyll configuration with the options passed in as overrides
+      #
+      # options - the configuration overrides
+      #
+      # Returns a full Jekyll configuration
+      def configuration_from_options(options)
+        Jekyll.configuration(options)
+      end
+
+      # Add common options to a command for building configuration
+      #
+      # c - the Jekyll::Command to add these options to
+      #
+      # Returns nothing
+      def add_build_options(c)
+        c.option 'config',  '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
+        c.option 'future',  '--future', 'Publishes posts with a future date'
+        c.option 'limit_posts', '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish'
+        c.option 'watch',   '-w', '--watch', 'Watch for changes and rebuild'
+        c.option 'force_polling', '--force_polling', 'Force watch to use polling'
+        c.option 'lsi',     '--lsi', 'Use LSI for improved related posts'
+        c.option 'show_drafts',  '-D', '--drafts', 'Render posts in the _drafts folder'
+        c.option 'unpublished', '--unpublished', 'Render posts that were marked as unpublished'
+        c.option 'quiet',   '-q', '--quiet', 'Silence output.'
+        c.option 'verbose', '-V', '--verbose', 'Print verbose output.'
       end
-    end
 
-    # Static: Run Site#process and catch errors
-    #
-    # site - the Jekyll::Site object
-    #
-    # Returns nothing
-    def self.process_site(site)
-      site.process
-    rescue Jekyll::FatalException => e
-      puts
-      Jekyll.logger.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:"
-      Jekyll.logger.error "", "------------------------------------"
-      Jekyll.logger.error "", e.message
-      exit(1)
     end
+
   end
 end
diff --git a/lib/jekyll/commands/build.rb b/lib/jekyll/commands/build.rb
index bfc69aa..140a7ae 100644
--- a/lib/jekyll/commands/build.rb
+++ b/lib/jekyll/commands/build.rb
@@ -1,70 +1,69 @@
 module Jekyll
   module Commands
     class Build < Command
-      def self.process(options)
-        site = Jekyll::Site.new(options)
 
-        self.build(site, options)
-        self.watch(site, options) if options['watch']
-      end
+      class << self
 
-      # Private: Build the site from source into destination.
-      #
-      # site - A Jekyll::Site instance
-      # options - A Hash of options passed to the command
-      #
-      # Returns nothing.
-      def self.build(site, options)
-        source = options['source']
-        destination = options['destination']
-        Jekyll.logger.info "Source:", source
-        Jekyll.logger.info "Destination:", destination
-        print Jekyll.logger.formatted_topic "Generating..."
-        self.process_site(site)
-        puts "done."
-      end
+        # Create the Mercenary command for the Jekyll CLI for this Command
+        def init_with_program(prog)
+          prog.command(:build) do |c|
+            c.syntax      'build [options]'
+            c.description 'Build your site'
 
-      # Private: Watch for file changes and rebuild the site.
-      #
-      # site - A Jekyll::Site instance
-      # options - A Hash of options passed to the command
-      #
-      # Returns nothing.
-      def self.watch(site, options)
-        require 'listen'
+            add_build_options(c)
 
-        source = options['source']
-        destination = options['destination']
-
-        begin
-          dest = Pathname.new(destination).relative_path_from(Pathname.new(source)).to_s
-          ignored = Regexp.new(Regexp.escape(dest))
-        rescue ArgumentError
-          # Destination is outside the source, no need to ignore it.
-          ignored = nil
+            c.action do |args, options|
+              options["serving"] = false
+              Jekyll::Commands::Build.process(options)
+            end
+          end
         end
 
-        Jekyll.logger.info "Auto-regeneration:", "enabled"
+        # Build your jekyll site
+        # Continuously watch if `watch` is set to true in the config.
+        def process(options)
+          Jekyll.logger.log_level = :error if options['quiet']
 
-        listener = Listen::Listener.new(source, :ignore => ignored) do |modified, added, removed|
-          t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
-          n = modified.length + added.length + removed.length
-          print Jekyll.logger.formatted_topic("Regenerating:") + "#{n} files at #{t} "
-          self.process_site(site)
-          puts  "...done."
-        end
-        listener.start
+          options = configuration_from_options(options)
+          site = Jekyll::Site.new(options)
 
-        unless options['serving']
-          trap("INT") do
-            listener.stop
-            puts "     Halting auto-regeneration."
-            exit 0
+          if options.fetch('skip_initial_build', false)
+            Jekyll.logger.warn "Build Warning:", "Skipping the initial build. This may result in an out-of-date site."
+          else
+            build(site, options)
           end
+          watch(site, options) if options['watch']
+        end
 
-          loop { sleep 1000 }
+        # Build your Jekyll site.
+        #
+        # site - the Jekyll::Site instance to build
+        # options - A Hash of options passed to the command
+        #
+        # Returns nothing.
+        def build(site, options)
+          source      = options['source']
+          destination = options['destination']
+          Jekyll.logger.info "Source:", source
+          Jekyll.logger.info "Destination:", destination
+          Jekyll.logger.info "Generating..."
+          process_site(site)
+          Jekyll.logger.info "", "done."
         end
-      end
+
+        # Private: Watch for file changes and rebuild the site.
+        #
+        # site - A Jekyll::Site instance
+        # options - A Hash of options passed to the command
+        #
+        # Returns nothing.
+        def watch(site, options)
+          Deprecator.gracefully_require 'jekyll-watch'
+          Jekyll::Commands::Watch.watch(site, options)
+        end
+
+      end # end of class << self
+
     end
   end
 end
diff --git a/lib/jekyll/commands/docs.rb b/lib/jekyll/commands/docs.rb
new file mode 100644
index 0000000..71c1016
--- /dev/null
+++ b/lib/jekyll/commands/docs.rb
@@ -0,0 +1,30 @@
+module Jekyll
+  module Commands
+    class Docs < Command
+
+      class << self
+
+        def init_with_program(prog)
+          prog.command(:docs) do |c|
+            c.syntax 'docs'
+            c.description "Launch local server with docs for Jekyll v#{Jekyll::VERSION}"
+
+            c.option 'port', '-P', '--port [PORT]', 'Port to listen on'
+            c.option 'host', '-H', '--host [HOST]', 'Host to bind to'
+
+            c.action do |args, options|
+              options.merge!({
+                'source'      => File.expand_path("../../../site", File.dirname(__FILE__)),
+                'destination' => File.expand_path("../../../site/_site", File.dirname(__FILE__))
+              })
+              Jekyll::Commands::Build.process(options)
+              Jekyll::Commands::Serve.process(options)
+            end
+          end
+        end
+
+      end
+
+    end
+  end
+end
diff --git a/lib/jekyll/commands/doctor.rb b/lib/jekyll/commands/doctor.rb
index 7ebab90..0fab8b3 100644
--- a/lib/jekyll/commands/doctor.rb
+++ b/lib/jekyll/commands/doctor.rb
@@ -2,8 +2,23 @@ module Jekyll
   module Commands
     class Doctor < Command
       class << self
+
+        def init_with_program(prog)
+          prog.command(:doctor) do |c|
+            c.syntax 'doctor'
+            c.description 'Search site and print specific deprecation warnings'
+            c.alias(:hyde)
+
+            c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
+
+            c.action do |args, options|
+              Jekyll::Commands::Doctor.process(options)
+            end
+          end
+        end
+
         def process(options)
-          site = Jekyll::Site.new(options)
+          site = Jekyll::Site.new(configuration_from_options(options))
           site.read
 
           if healthy?(site)
@@ -26,7 +41,7 @@ module Jekyll
             if page.uses_relative_permalinks
               Jekyll.logger.warn "Deprecation:", "'#{page.path}' uses relative" +
                                   " permalinks which will be deprecated in" +
-                                  " Jekyll v1.2 and beyond."
+                                  " Jekyll v2.0.0 and beyond."
               contains_deprecated_pages = true
             end
           end
@@ -61,7 +76,9 @@ module Jekyll
           end
           urls
         end
+
       end
+
     end
   end
 end
diff --git a/lib/jekyll/commands/new.rb b/lib/jekyll/commands/new.rb
index 00b08c2..ca5ed16 100644
--- a/lib/jekyll/commands/new.rb
+++ b/lib/jekyll/commands/new.rb
@@ -3,27 +3,40 @@ require 'erb'
 module Jekyll
   module Commands
     class New < Command
+      def self.init_with_program(prog)
+        prog.command(:new) do |c|
+          c.syntax 'new PATH'
+          c.description 'Creates a new Jekyll site scaffold in PATH'
+
+          c.option 'force', '--force', 'Force creation even if PATH already exists'
+          c.option 'blank', '--blank', 'Creates scaffolding but with empty files'
+
+          c.action do |args, options|
+            Jekyll::Commands::New.process(args, options)
+          end
+        end
+      end
+
       def self.process(args, options = {})
         raise ArgumentError.new('You must specify a path.') if args.empty?
 
         new_blog_path = File.expand_path(args.join(" "), Dir.pwd)
         FileUtils.mkdir_p new_blog_path
         if preserve_source_location?(new_blog_path, options)
-          Jekyll.logger.error "Conflict:", "#{new_blog_path} exists and is not empty."
-          exit(1)
+          Jekyll.logger.abort_with "Conflict:", "#{new_blog_path} exists and is not empty."
         end
 
-        if options[:blank]
+        if options["blank"]
           create_blank_site new_blog_path
         else
           create_sample_files new_blog_path
 
-          File.open(File.expand_path(self.initialized_post_name, new_blog_path), "w") do |f|
-            f.write(self.scaffold_post_content)
+          File.open(File.expand_path(initialized_post_name, new_blog_path), "w") do |f|
+            f.write(scaffold_post_content)
           end
         end
 
-        puts "New jekyll site installed in #{new_blog_path}."
+        Jekyll.logger.info "New jekyll site installed in #{new_blog_path}."
       end
 
       def self.create_blank_site(path)
@@ -47,7 +60,7 @@ module Jekyll
       private
 
       def self.preserve_source_location?(path, options)
-        !options[:force] && !Dir["#{path}/**/*"].empty?
+        !options["force"] && !Dir["#{path}/**/*"].empty?
       end
 
       def self.create_sample_files(path)
diff --git a/lib/jekyll/commands/serve.rb b/lib/jekyll/commands/serve.rb
index 8e8d00b..2fbfd74 100644
--- a/lib/jekyll/commands/serve.rb
+++ b/lib/jekyll/commands/serve.rb
@@ -2,64 +2,128 @@
 module Jekyll
   module Commands
     class Serve < Command
-      def self.process(options)
-        require 'webrick'
-        include WEBrick
 
-        destination = options['destination']
+      class << self
 
-        FileUtils.mkdir_p(destination)
+        def init_with_program(prog)
+          prog.command(:serve) do |c|
+            c.syntax 'serve [options]'
+            c.description 'Serve your site locally'
+            c.alias :server
 
-        # recreate NondisclosureName under utf-8 circumstance
-        fh_option = WEBrick::Config::FileHandler
-        fh_option[:NondisclosureName] = ['.ht*','~*']
+            add_build_options(c)
+
+            c.option 'detach', '-B', '--detach', 'Run the server in the background (detach)'
+            c.option 'port', '-P', '--port [PORT]', 'Port to listen on'
+            c.option 'host', '-H', '--host [HOST]', 'Host to bind to'
+            c.option 'baseurl', '-b', '--baseurl [URL]', 'Base URL'
+            c.option 'skip_initial_build', '--skip-initial-build', 'Skips the initial site build which occurs before the server is started.'
+
+            c.action do |args, options|
+              options["serving"] ||= true
+              Jekyll::Commands::Build.process(options)
+              Jekyll::Commands::Serve.process(options)
+            end
+          end
+        end
+
+        # Boot up a WEBrick server which points to the compiled site's root.
+        def process(options)
+          options = configuration_from_options(options)
+          destination = options['destination']
+          setup(destination)
 
-        s = HTTPServer.new(webrick_options(options))
+          s = WEBrick::HTTPServer.new(webrick_options(options))
+          s.unmount("")
 
-        s.mount(options['baseurl'], HTTPServlet::FileHandler, destination, fh_option)
+          s.mount(
+            options['baseurl'],
+            WEBrick::HTTPServlet::FileHandler,
+            destination,
+            file_handler_options
+          )
 
-        Jekyll.logger.info "Server address:", "http://#{s.config[:BindAddress]}:#{s.config[:Port]}"
+          Jekyll.logger.info "Server address:", server_address(s, options)
 
-        if options['detach'] # detach the server
-          pid = Process.fork { s.start }
-          Process.detach(pid)
-          Jekyll.logger.info "Server detatched with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server."
-        else # create a new server thread, then join it with current terminal
-          t = Thread.new { s.start }
-          trap("INT") { s.shutdown }
-          t.join()
+          if options['detach'] # detach the server
+            pid = Process.fork { s.start }
+            Process.detach(pid)
+            Jekyll.logger.info "Server detached with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server."
+          else # create a new server thread, then join it with current terminal
+            t = Thread.new { s.start }
+            trap("INT") { s.shutdown }
+            t.join
+          end
         end
-      end
 
-      def self.webrick_options(config)
-        opts = {
-          :Port => config['port'],
-          :BindAddress => config['host'],
-          :MimeTypes => self.mime_types,
-          :DoNotReverseLookup => true,
-          :StartCallback => start_callback(config['detach'])
-        }
-
-        if !config['verbose']
-          opts.merge!({
-            :AccessLog => [],
-            :Logger => Log::new([], Log::WARN)
-          })
+        def setup(destination)
+          require 'webrick'
+
+          FileUtils.mkdir_p(destination)
+
+          # monkey patch WEBrick using custom 404 page (/404.html)
+          if File.exist?(File.join(destination, '404.html'))
+            WEBrick::HTTPResponse.class_eval do
+              def create_error_page
+                @header['content-type'] = "text/html; charset=UTF-8"
+                @body = IO.read(File.join(@config[:DocumentRoot], '404.html'))
+              end
+            end
+          end
         end
 
-        opts
-      end
+        def webrick_options(config)
+          opts = {
+            :DocumentRoot       => config['destination'],
+            :Port               => config['port'],
+            :BindAddress        => config['host'],
+            :MimeTypes          => mime_types,
+            :DoNotReverseLookup => true,
+            :StartCallback      => start_callback(config['detach']),
+            :DirectoryIndex     => %w(index.html index.htm index.cgi index.rhtml index.xml)
+          }
 
-      def self.start_callback(detached)
-        unless detached
-          Proc.new { Jekyll.logger.info "Server running...", "press ctrl-c to stop." }
+          if !config['verbose']
+            opts.merge!({
+              :AccessLog => [],
+              :Logger => WEBrick::Log.new([], WEBrick::Log::WARN)
+            })
+          end
+
+          opts
+        end
+
+        def start_callback(detached)
+          unless detached
+            Proc.new { Jekyll.logger.info "Server running...", "press ctrl-c to stop." }
+          end
+        end
+
+        def mime_types
+          mime_types_file = File.expand_path('../mime.types', File.dirname(__FILE__))
+          WEBrick::HTTPUtils::load_mime_types(mime_types_file)
+        end
+
+        def server_address(server, options)
+          baseurl = "#{options['baseurl']}/" if options['baseurl']
+          [
+            "http://",
+            server.config[:BindAddress],
+            ":",
+            server.config[:Port],
+            baseurl || ""
+          ].map(&:to_s).join("")
+        end
+
+        # recreate NondisclosureName under utf-8 circumstance
+        def file_handler_options
+          fh_option = WEBrick::Config::FileHandler
+          fh_option[:NondisclosureName] = ['.ht*','~*']
+          fh_option
         end
-      end
 
-      def self.mime_types
-        mime_types_file = File.expand_path('../mime.types', File.dirname(__FILE__))
-        WEBrick::HTTPUtils::load_mime_types(mime_types_file)
       end
+
     end
   end
 end
diff --git a/lib/jekyll/configuration.rb b/lib/jekyll/configuration.rb
index 86aca28..6f5cbc1 100644
--- a/lib/jekyll/configuration.rb
+++ b/lib/jekyll/configuration.rb
@@ -13,10 +13,11 @@ module Jekyll
       'data_source'   =>  '_data',
       'keep_files'    => ['.git','.svn'],
       'gems'          => [],
+      'collections'   => nil,
 
       'timezone'      => nil,           # use the local timezone
 
-      'encoding'      => nil,           # use the system encoding
+      'encoding'      => 'utf-8',       # always use utf-8 encoding. NEVER FORGET
 
       'safe'          => false,
       'detach'        => false,          # default to not detaching the server
@@ -24,33 +25,36 @@ module Jekyll
       'limit_posts'   => 0,
       'lsi'           => false,
       'future'        => true,           # remove and make true just default
-      'pygments'      => true,
+      'unpublished'   => false,
 
-      'relative_permalinks' => true,     # backwards-compatibility with < 1.0
-                                         # will be set to false once 2.0 hits
+      'relative_permalinks' => false,
 
-      'markdown'      => 'maruku',
+      'markdown'      => 'kramdown',
+      'highlighter'   => 'pygments',
       'permalink'     => 'date',
-      'baseurl'       => '/',
+      'baseurl'       => '',
       'include'       => ['.htaccess'],
       'exclude'       => [],
       'paginate_path' => '/page:num',
 
-      'markdown_ext'  => 'markdown,mkd,mkdn,md',
+      'markdown_ext'  => 'markdown,mkdown,mkdn,mkd,md',
       'textile_ext'   => 'textile',
 
+      'quiet'         => false,
       'port'          => '4000',
       'host'          => '0.0.0.0',
 
       'excerpt_separator' => "\n\n",
 
+      'defaults'     => [],
+
       'maruku' => {
-        'fenced_code_blocks' => true,
         'use_tex'    => false,
         'use_divs'   => false,
         'png_engine' => 'blahtex',
         'png_dir'    => 'images/latex',
-        'png_url'    => '/images/latex'
+        'png_url'    => '/images/latex',
+        'fenced_code_blocks' => true
       },
 
       'rdiscount' => {
@@ -100,12 +104,16 @@ module Jekyll
       override['source'] || self['source'] || DEFAULTS['source']
     end
 
+    def quiet?(override = {})
+      override['quiet'] || self['quiet'] || DEFAULTS['quiet']
+    end
+
     def safe_load_file(filename)
       case File.extname(filename)
       when '.toml'
         TOML.load_file(filename)
       when /\.y(a)?ml/
-        YAML.safe_load_file(filename)
+        SafeYAML.load_file(filename)
       else
         raise ArgumentError, "No parser for '#{filename}' is available. Use a .toml or .y(a)ml file instead."
       end
@@ -117,10 +125,16 @@ module Jekyll
     #
     # Returns an Array of config files
     def config_files(override)
+      # Be quiet quickly.
+      Jekyll.logger.log_level = :error if quiet?(override)
+
       # Get configuration from <source>/_config.yml or <source>/<config_file>
       config_files = override.delete('config')
       if config_files.to_s.empty?
-        config_files = File.join(source(override), "_config.yml")
+        default = %w[yml yaml].find(Proc.new { 'yml' }) do |ext|
+          File.exists? Jekyll.sanitized_path(source(override), "_config.#{ext}")
+        end
+        config_files = Jekyll.sanitized_path(source(override), "_config.#{default}")
         @default_config_file = true
       end
       config_files = [config_files] unless config_files.is_a? Array
@@ -159,7 +173,7 @@ module Jekyll
       begin
         files.each do |config_file|
           new_config = read_config_file(config_file)
-          configuration = configuration.deep_merge(new_config)
+          configuration = Utils.deep_merge_hashes(configuration, new_config)
         end
       rescue ArgumentError => err
         Jekyll.logger.warn "WARNING:", "Error reading configuration. " +
@@ -210,6 +224,16 @@ module Jekyll
         config.delete('server_port')
       end
 
+      if config.has_key? 'pygments'
+        Jekyll.logger.warn "Deprecation:", "The 'pygments' configuration option" +
+                            " has been renamed to 'highlighter'. Please update your" +
+                            " config file accordingly. The allowed values are 'rouge', " +
+                            "'pygments' or null."
+
+        config['highlighter'] = 'pygments' if config['pygments']
+        config.delete('pygments')
+      end
+
       %w[include exclude].each do |option|
         if config.fetch(option, []).is_a?(String)
           Jekyll.logger.warn "Deprecation:", "The '#{option}' configuration option" +
@@ -218,6 +242,13 @@ module Jekyll
             " as a list of comma-separated values."
           config[option] = csv_to_array(config[option])
         end
+        config[option].map!(&:to_s)
+      end
+
+      if config.fetch('markdown', 'kramdown').to_s.downcase.eql?("maruku")
+        Jekyll::Deprecator.deprecation_message "You're using the 'maruku' " +
+          "Markdown processor. Maruku support has been deprecated and will " +
+          "be removed in 3.0.0. We recommend you switch to Kramdown."
       end
       config
     end
@@ -233,6 +264,5 @@ module Jekyll
 
       config
     end
-
   end
 end
diff --git a/lib/jekyll/converter.rb b/lib/jekyll/converter.rb
index e2dc279..c30f494 100644
--- a/lib/jekyll/converter.rb
+++ b/lib/jekyll/converter.rb
@@ -1,27 +1,27 @@
 module Jekyll
   class Converter < Plugin
-    # Public: Get or set the pygments prefix. When an argument is specified,
+    # Public: Get or set the highlighter prefix. When an argument is specified,
     # the prefix will be set. If no argument is specified, the current prefix
     # will be returned.
     #
-    # pygments_prefix - The String prefix (default: nil).
+    # highlighter_prefix - The String prefix (default: nil).
     #
     # Returns the String prefix.
-    def self.pygments_prefix(pygments_prefix = nil)
-      @pygments_prefix = pygments_prefix if pygments_prefix
-      @pygments_prefix
+    def self.highlighter_prefix(highlighter_prefix = nil)
+      @highlighter_prefix = highlighter_prefix if highlighter_prefix
+      @highlighter_prefix
     end
 
-    # Public: Get or set the pygments suffix. When an argument is specified,
+    # Public: Get or set the highlighter suffix. When an argument is specified,
     # the suffix will be set. If no argument is specified, the current suffix
     # will be returned.
     #
-    # pygments_suffix - The String suffix (default: nil).
+    # highlighter_suffix - The String suffix (default: nil).
     #
     # Returns the String suffix.
-    def self.pygments_suffix(pygments_suffix = nil)
-      @pygments_suffix = pygments_suffix if pygments_suffix
-      @pygments_suffix
+    def self.highlighter_suffix(highlighter_suffix = nil)
+      @highlighter_suffix = highlighter_suffix if highlighter_suffix
+      @highlighter_suffix
     end
 
     # Initialize the converter.
@@ -31,18 +31,18 @@ module Jekyll
       @config = config
     end
 
-    # Get the pygments prefix.
+    # Get the highlighter prefix.
     #
     # Returns the String prefix.
-    def pygments_prefix
-      self.class.pygments_prefix
+    def highlighter_prefix
+      self.class.highlighter_prefix
     end
 
-    # Get the pygments suffix.
+    # Get the highlighter suffix.
     #
     # Returns the String suffix.
-    def pygments_suffix
-      self.class.pygments_suffix
+    def highlighter_suffix
+      self.class.highlighter_suffix
     end
   end
 end
diff --git a/lib/jekyll/converters/markdown.rb b/lib/jekyll/converters/markdown.rb
index 485cac8..687b0ec 100644
--- a/lib/jekyll/converters/markdown.rb
+++ b/lib/jekyll/converters/markdown.rb
@@ -3,28 +3,49 @@ module Jekyll
     class Markdown < Converter
       safe true
 
-      pygments_prefix "\n"
-      pygments_suffix "\n"
+      highlighter_prefix "\n"
+      highlighter_suffix "\n"
 
       def setup
         return if @setup
-        @parser = case @config['markdown']
-          when 'redcarpet'
-            RedcarpetParser.new @config
-          when 'kramdown'
-            KramdownParser.new @config
-          when 'rdiscount'
-            RDiscountParser.new @config
-          when 'maruku'
-            MarukuParser.new @config
+        @parser =
+          case @config['markdown'].downcase
+            when 'redcarpet' then RedcarpetParser.new(@config)
+            when 'kramdown'  then KramdownParser.new(@config)
+            when 'rdiscount' then RDiscountParser.new(@config)
+            when 'maruku'    then MarukuParser.new(@config)
           else
-            STDERR.puts "Invalid Markdown processor: #{@config['markdown']}"
-            STDERR.puts "  Valid options are [ maruku | rdiscount | kramdown | redcarpet ]"
-            raise FatalException.new("Invalid Markdown process: #{@config['markdown']}")
-        end
+            # So they can't try some tricky bullshit or go down the ancestor chain, I hope.
+            if allowed_custom_class?(@config['markdown'])
+              self.class.const_get(@config['markdown']).new(@config)
+            else
+              Jekyll.logger.error "Invalid Markdown Processor:", "#{@config['markdown']}"
+              Jekyll.logger.error "", "Valid options are [ #{valid_processors.join(" | ")} ]"
+              raise Errors::FatalException, "Invalid Markdown Processor: #{@config['markdown']}"
+            end
+          end
         @setup = true
       end
 
+      def valid_processors
+        %w[
+          maruku
+          rdiscount
+          kramdown
+          redcarpet
+        ] + third_party_processors
+      end
+
+      def third_party_processors
+        self.class.constants - %w[
+          KramdownParser
+          MarukuParser
+          RDiscountParser
+          RedcarpetParser
+          PRIORITIES
+        ].map(&:to_sym)
+      end
+
       def matches(ext)
         rgx = '^\.(' + @config['markdown_ext'].gsub(',','|') +')$'
         ext =~ Regexp.new(rgx, Regexp::IGNORECASE)
@@ -38,6 +59,19 @@ module Jekyll
         setup
         @parser.convert(content)
       end
+
+      private
+
+      # Private: Determine whether a class name is an allowed custom markdown
+      # class name
+      #
+      # parser_name - the name of the parser class
+      #
+      # Returns true if the parser name contains only alphanumeric characters
+      # and is defined within Jekyll::Converters::Markdown
+      def allowed_custom_class?(parser_name)
+        parser_name !~ /[^A-Za-z0-9]/ && self.class.constants.include?(parser_name.to_sym)
+      end
     end
   end
 end
diff --git a/lib/jekyll/converters/markdown/kramdown_parser.rb b/lib/jekyll/converters/markdown/kramdown_parser.rb
index caeb5b6..9dd086e 100644
--- a/lib/jekyll/converters/markdown/kramdown_parser.rb
+++ b/lib/jekyll/converters/markdown/kramdown_parser.rb
@@ -8,7 +8,7 @@ module Jekyll
         rescue LoadError
           STDERR.puts 'You are missing a library required for Markdown. Please run:'
           STDERR.puts '  $ [sudo] gem install kramdown'
-          raise FatalException.new("Missing dependency: kramdown")
+          raise Errors::FatalException.new("Missing dependency: kramdown")
         end
 
         def convert(content)
@@ -20,7 +20,7 @@ module Jekyll
             end
           end
 
-          Kramdown::Document.new(content, @config["kramdown"].symbolize_keys).to_html
+          Kramdown::Document.new(content, Utils.symbolize_hash_keys(@config["kramdown"])).to_html
         end
 
       end
diff --git a/lib/jekyll/converters/markdown/maruku_parser.rb b/lib/jekyll/converters/markdown/maruku_parser.rb
index 1e27e47..7be577c 100644
--- a/lib/jekyll/converters/markdown/maruku_parser.rb
+++ b/lib/jekyll/converters/markdown/maruku_parser.rb
@@ -8,11 +8,14 @@ module Jekyll
           @errors = []
           load_divs_library if @config['maruku']['use_divs']
           load_blahtext_library if @config['maruku']['use_tex']
-          enable_fenced_code_blocks if @config['maruku']['fenced_code_blocks']
+
+          # allow fenced code blocks (new in Maruku 0.7.0)
+          MaRuKu::Globals[:fenced_code_blocks] = !!@config['maruku']['fenced_code_blocks']
+
         rescue LoadError
           STDERR.puts 'You are missing a library required for Markdown. Please run:'
           STDERR.puts '  $ [sudo] gem install maruku'
-          raise FatalException.new("Missing dependency: maruku")
+          raise Errors::FatalException.new("Missing dependency: maruku")
         end
 
         def load_divs_library
@@ -36,10 +39,6 @@ module Jekyll
           MaRuKu::Globals[:html_png_url] = @config['maruku']['png_url']
         end
 
-        def enable_fenced_code_blocks
-          MaRuKu::Globals[:fenced_code_blocks] = true
-        end
-
         def print_errors_and_fail
           print @errors.join
           raise MaRuKu::Exception, "MaRuKu encountered problem(s) while converting your markup."
diff --git a/lib/jekyll/converters/markdown/rdiscount_parser.rb b/lib/jekyll/converters/markdown/rdiscount_parser.rb
index bfe1a7c..0c8634e 100644
--- a/lib/jekyll/converters/markdown/rdiscount_parser.rb
+++ b/lib/jekyll/converters/markdown/rdiscount_parser.rb
@@ -3,13 +3,9 @@ module Jekyll
     class Markdown
       class RDiscountParser
         def initialize(config)
-          require 'rdiscount'
+          Jekyll::Deprecator.gracefully_require "rdiscount"
           @config = config
           @rdiscount_extensions = @config['rdiscount']['extensions'].map { |e| e.to_sym }
-        rescue LoadError
-          STDERR.puts 'You are missing a library required for Markdown. Please run:'
-          STDERR.puts '  $ [sudo] gem install rdiscount'
-          raise FatalException.new("Missing dependency: rdiscount")
         end
 
         def convert(content)
diff --git a/lib/jekyll/converters/markdown/redcarpet_parser.rb b/lib/jekyll/converters/markdown/redcarpet_parser.rb
index 9af8057..b69df9b 100644
--- a/lib/jekyll/converters/markdown/redcarpet_parser.rb
+++ b/lib/jekyll/converters/markdown/redcarpet_parser.rb
@@ -5,7 +5,8 @@ module Jekyll
 
         module CommonMethods
           def add_code_tags(code, lang)
-            code = code.sub(/<pre>/, "<pre><code class=\"#{lang} language-#{lang}\" data-lang=\"#{lang}\">")
+            code = code.to_s
+            code = code.sub(/<pre>/, "<pre><code class=\"language-#{lang}\" data-lang=\"#{lang}\">")
             code = code.sub(/<\/pre>/,"</code></pre>")
           end
         end
@@ -13,16 +14,16 @@ module Jekyll
         module WithPygments
           include CommonMethods
           def block_code(code, lang)
-            require 'pygments'
+            Jekyll::Deprecator.gracefully_require("pygments")
             lang = lang && lang.split.first || "text"
-            output = add_code_tags(
+            add_code_tags(
               Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }),
               lang
             )
           end
         end
 
-        module WithoutPygments
+        module WithoutHighlighting
           require 'cgi'
 
           include CommonMethods
@@ -33,29 +34,61 @@ module Jekyll
 
           def block_code(code, lang)
             lang = lang && lang.split.first || "text"
-            output = add_code_tags(code_wrap(code), lang)
+            add_code_tags(code_wrap(code), lang)
           end
         end
 
+        module WithRouge
+          def block_code(code, lang)
+            code = "<pre>#{super}</pre>"
+
+            output = "<div class=\"highlight\">"
+            output << add_code_tags(code, lang)
+            output << "</div>"
+          end
+
+          protected
+          def rouge_formatter(opts = {})
+            Rouge::Formatters::HTML.new(opts.merge(wrap: false))
+          end
+        end
+
+
         def initialize(config)
-          require 'redcarpet'
+          Deprecator.gracefully_require("redcarpet")
           @config = config
           @redcarpet_extensions = {}
           @config['redcarpet']['extensions'].each { |e| @redcarpet_extensions[e.to_sym] = true }
 
-          @renderer ||= if @config['pygments']
-                          Class.new(Redcarpet::Render::HTML) do
-                            include WithPygments
-                          end
-                        else
-                          Class.new(Redcarpet::Render::HTML) do
-                            include WithoutPygments
-                          end
-                        end
-        rescue LoadError
-          STDERR.puts 'You are missing a library required for Markdown. Please run:'
-          STDERR.puts '  $ [sudo] gem install redcarpet'
-          raise FatalException.new("Missing dependency: redcarpet")
+          @renderer ||= class_with_proper_highlighter(@config['highlighter'])
+        end
+
+        def class_with_proper_highlighter(highlighter)
+          case highlighter
+          when "pygments"
+            Class.new(Redcarpet::Render::HTML) do
+              include WithPygments
+            end
+          when "rouge"
+            Class.new(Redcarpet::Render::HTML) do
+              Jekyll::Deprecator.gracefully_require(%w[
+                rouge
+                rouge/plugins/redcarpet
+              ])
+
+              if Rouge.version < '1.3.0'
+                abort "Please install Rouge 1.3.0 or greater and try running Jekyll again."
+              end
+
+              include Rouge::Plugins::Redcarpet
+              include CommonMethods
+              include WithRouge
+            end
+          else
+            Class.new(Redcarpet::Render::HTML) do
+              include WithoutHighlighting
+            end
+          end
         end
 
         def convert(content)
diff --git a/lib/jekyll/converters/textile.rb b/lib/jekyll/converters/textile.rb
index 54e9374..366aa0c 100644
--- a/lib/jekyll/converters/textile.rb
+++ b/lib/jekyll/converters/textile.rb
@@ -3,8 +3,8 @@ module Jekyll
     class Textile < Converter
       safe true
 
-      pygments_prefix '<notextile>'
-      pygments_suffix '</notextile>'
+      highlighter_prefix '<notextile>'
+      highlighter_suffix '</notextile>'
 
       def setup
         return if @setup
@@ -13,7 +13,7 @@ module Jekyll
       rescue LoadError
         STDERR.puts 'You are missing a library required for Textile. Please run:'
         STDERR.puts '  $ [sudo] gem install RedCloth'
-        raise FatalException.new("Missing dependency: RedCloth")
+        raise Errors::FatalException.new("Missing dependency: RedCloth")
       end
 
       def matches(ext)
@@ -32,7 +32,7 @@ module Jekyll
         return RedCloth.new(content).to_html if @config['redcloth'].nil?
 
         # List of attributes defined on RedCloth
-        # (from http://redcloth.rubyforge.org/classes/RedCloth/TextileDoc.html)
+        # (from https://github.com/jgarber/redcloth/blob/master/lib/redcloth/textile_doc.rb)
         attrs = ['filter_classes', 'filter_html', 'filter_ids', 'filter_styles',
                 'hard_breaks', 'lite_mode', 'no_span_caps', 'sanitize_html']
 
diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb
index 723b0da..1d9ed31 100644
--- a/lib/jekyll/convertible.rb
+++ b/lib/jekyll/convertible.rb
@@ -13,17 +13,25 @@ require 'set'
 #   self.ext=
 #   self.output=
 #   self.name
+#   self.path
+#   self.type -> :page, :post or :draft
+
 module Jekyll
   module Convertible
     # Returns the contents as a String.
     def to_s
-      self.content || ''
+      content || ''
+    end
+
+    # Whether the file is published or not, as indicated in YAML front-matter
+    def published?
+      !(data.has_key?('published') && data['published'] == false)
     end
 
-    # Returns merged optin hash for File.read of self.site (if exists)
+    # Returns merged option hash for File.read of self.site (if exists)
     # and a given param
     def merged_file_read_opts(opts)
-      (self.site ? self.site.file_read_opts : {}).merge(opts)
+      (site ? site.file_read_opts : {}).merge(opts)
     end
 
     # Read the YAML frontmatter.
@@ -35,16 +43,16 @@ module Jekyll
     # Returns nothing.
     def read_yaml(base, name, opts = {})
       begin
-        self.content = File.read_with_options(File.join(base, name),
-                                              merged_file_read_opts(opts))
-        if self.content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
+        self.content = File.read(Jekyll.sanitized_path(base, name),
+                                 merged_file_read_opts(opts))
+        if content =~ /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
           self.content = $POSTMATCH
-          self.data = YAML.safe_load($1)
+          self.data = SafeYAML.load($1)
         end
       rescue SyntaxError => e
-        puts "YAML Exception reading #{File.join(base, name)}: #{e.message}"
+        Jekyll.logger.warn "YAML Exception reading #{File.join(base, name)}: #{e.message}"
       rescue Exception => e
-        puts "Error reading file #{File.join(base, name)}: #{e.message}"
+        Jekyll.logger.warn "Error reading file #{File.join(base, name)}: #{e.message}"
       end
 
       self.data ||= {}
@@ -54,10 +62,10 @@ module Jekyll
     #
     # Returns nothing.
     def transform
-      self.content = converter.convert(self.content)
+      self.content = converter.convert(content)
     rescue => e
       Jekyll.logger.error "Conversion error:", "There was an error converting" +
-        " '#{self.path}'."
+        " '#{path}'."
       raise e
     end
 
@@ -66,7 +74,7 @@ module Jekyll
     # Returns the String extension for the output file.
     #   e.g. ".html" for an HTML output file.
     def output_ext
-      converter.output_ext(self.ext)
+      converter.output_ext(ext)
     end
 
     # Determine which converter to use based on this convertible's
@@ -74,7 +82,7 @@ module Jekyll
     #
     # Returns the Converter instance.
     def converter
-      @converter ||= self.site.converters.find { |c| c.matches(self.ext) }
+      @converter ||= site.converters.find { |c| c.matches(ext) }
     end
 
     # Render Liquid in the content
@@ -101,7 +109,57 @@ module Jekyll
       further_data = Hash[(attrs || self.class::ATTRIBUTES_FOR_LIQUID).map { |attribute|
         [attribute, send(attribute)]
       }]
-      data.deep_merge(further_data)
+
+      defaults = site.frontmatter_defaults.all(relative_path, type)
+      Utils.deep_merge_hashes defaults, Utils.deep_merge_hashes(data, further_data)
+    end
+
+    # The type of a document,
+    #   i.e., its classname downcase'd and to_sym'd.
+    #
+    # Returns the type of self.
+    def type
+      if is_a?(Post)
+        :post
+      elsif is_a?(Page)
+        :page
+      elsif is_a?(Draft)
+        :draft
+      end
+    end
+
+    # Determine whether the document is an asset file.
+    # Asset files include CoffeeScript files and Sass/SCSS files.
+    #
+    # Returns true if the extname belongs to the set of extensions
+    #   that asset files use.
+    def asset_file?
+      %w[.sass .scss .coffee].include?(ext)
+    end
+
+    # Determine whether the file should be rendered with Liquid.
+    #
+    # Returns false if the document is either an asset file or a yaml file,
+    #   true otherwise.
+    def render_with_liquid?
+      !asset_file?
+    end
+
+    # Determine whether the file should be placed into layouts.
+    #
+    # Returns false if the document is either an asset file or a yaml file,
+    #   true otherwise.
+    def place_in_layout?
+      !asset_file?
+    end
+
+    # Checks if the layout specified in the document actually exists
+    #
+    # layout - the layout to check
+    #
+    # Returns true if the layout is invalid, false if otherwise
+    def invalid_layout?(layout)
+      !data["layout"].nil? && data["layout"] != "none" && layout.nil? && !(self.is_a? Jekyll::Excerpt)
     end
 
     # Recursively render layouts
@@ -113,16 +171,19 @@ module Jekyll
     # Returns nothing
     def render_all_layouts(layouts, payload, info)
       # recursively render layouts
-      layout = layouts[self.data["layout"]]
+      layout = layouts[data["layout"]]
+
+      Jekyll.logger.warn("Build Warning:", "Layout '#{data["layout"]}' requested in #{path} does not exist.") if invalid_layout? layout
+
       used = Set.new([layout])
 
       while layout
-        payload = payload.deep_merge({"content" => self.output, "page" => layout.data})
+        payload = Utils.deep_merge_hashes(payload, {"content" => output, "page" => layout.data})
 
-        self.output = self.render_liquid(layout.content,
+        self.output = render_liquid(layout.content,
                                          payload,
                                          info,
-                                         File.join(self.site.config['layouts'], layout.name))
+                                         File.join(site.config['layouts'], layout.name))
 
         if layout = layouts[layout.data["layout"]]
           if used.include?(layout)
@@ -141,21 +202,19 @@ module Jekyll
     #
     # Returns nothing.
     def do_layout(payload, layouts)
-      info = { :filters => [Jekyll::Filters], :registers => { :site => self.site, :page => payload['page'] } }
+      info = { :filters => [Jekyll::Filters], :registers => { :site => site, :page => payload['page'] } }
 
       # render and transform content (this becomes the final content of the object)
-      payload["pygments_prefix"] = converter.pygments_prefix
-      payload["pygments_suffix"] = converter.pygments_suffix
+      payload["highlighter_prefix"] = converter.highlighter_prefix
+      payload["highlighter_suffix"] = converter.highlighter_suffix
 
-      self.content = self.render_liquid(self.content,
-                                        payload,
-                                        info)
-      self.transform
+      self.content = render_liquid(content, payload, info) if render_with_liquid?
+      transform
 
       # output keeps track of what will finally be written
-      self.output = self.content
+      self.output = content
 
-      self.render_all_layouts(layouts, payload, info)
+      render_all_layouts(layouts, payload, info) if place_in_layout?
     end
 
     # Write the generated page file to the destination directory.
@@ -167,7 +226,20 @@ module Jekyll
       path = destination(dest)
       FileUtils.mkdir_p(File.dirname(path))
       File.open(path, 'wb') do |f|
-        f.write(self.output)
+        f.write(output)
+      end
+    end
+
+    # Accessor for data properties by Liquid.
+    #
+    # property - The String name of the property to retrieve.
+    #
+    # Returns the String value or nil if the property isn't included.
+    def [](property)
+      if self.class::ATTRIBUTES_FOR_LIQUID.include?(property)
+        send(property)
+      else
+        data[property]
       end
     end
   end
diff --git a/lib/jekyll/core_ext.rb b/lib/jekyll/core_ext.rb
deleted file mode 100644
index f3fa31b..0000000
--- a/lib/jekyll/core_ext.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-class Hash
-  # Merges self with another hash, recursively.
-  #
-  # This code was lovingly stolen from some random gem:
-  # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
-  #
-  # Thanks to whoever made it.
-  def deep_merge(hash)
-    target = dup
-
-    hash.keys.each do |key|
-      if hash[key].is_a? Hash and self[key].is_a? Hash
-        target[key] = target[key].deep_merge(hash[key])
-        next
-      end
-
-      target[key] = hash[key]
-    end
-
-    target
-  end
-
-  # Read array from the supplied hash favouring the singular key
-  # and then the plural key, and handling any nil entries.
-  #   +hash+ the hash to read from
-  #   +singular_key+ the singular key
-  #   +plural_key+ the plural key
-  #
-  # Returns an array
-  def pluralized_array(singular_key, plural_key)
-    hash = self
-    if hash.has_key?(singular_key)
-      array = [hash[singular_key]] if hash[singular_key]
-    elsif hash.has_key?(plural_key)
-      case hash[plural_key]
-      when String
-        array = hash[plural_key].split
-      when Array
-        array = hash[plural_key].compact
-      end
-    end
-    array || []
-  end
-
-  def symbolize_keys!
-    keys.each do |key|
-      self[(key.to_sym rescue key) || key] = delete(key)
-    end
-    self
-  end
-
-  def symbolize_keys
-    dup.symbolize_keys!
-  end
-end
-
-# Thanks, ActiveSupport!
-class Date
-  # Converts datetime to an appropriate format for use in XML
-  def xmlschema
-    strftime("%Y-%m-%dT%H:%M:%S%Z")
-  end if RUBY_VERSION < '1.9'
-end
-
-module Enumerable
-  # Returns true if path matches against any glob pattern.
-  # Look for more detail about glob pattern in method File::fnmatch.
-  def glob_include?(e)
-    any? { |exp| File.fnmatch?(exp, e) }
-  end
-end
-
-# Ruby 1.8's File.read don't support option.
-# read_with_options ignore optional parameter for 1.8,
-# and act as alias for 1.9 or later.
-class File
-  if RUBY_VERSION < '1.9'
-    def self.read_with_options(path, opts = {})
-      self.read(path)
-    end
-
-    def self.realpath(filename)
-      Pathname.new(filename).realpath.to_s
-    end
-  else
-    def self.read_with_options(path, opts = {})
-      self.read(path, opts)
-    end
-  end
-end
diff --git a/lib/jekyll/deprecator.rb b/lib/jekyll/deprecator.rb
index 23af739..6fd94fb 100644
--- a/lib/jekyll/deprecator.rb
+++ b/lib/jekyll/deprecator.rb
@@ -1,5 +1,5 @@
 module Jekyll
-  class Deprecator
+  module Deprecator
     def self.process(args)
       no_subcommand(args)
       arg_is_present? args, "--server", "The --server command has been replaced by the \
@@ -9,8 +9,8 @@ module Jekyll
       arg_is_present? args, "--auto", "The switch '--auto' has been replaced with '--watch'."
       arg_is_present? args, "--no-auto", "To disable auto-replication, simply leave off \
                           the '--watch' switch."
-      arg_is_present? args, "--pygments", "The 'pygments' setting can only be set in \
-                          your config files."
+      arg_is_present? args, "--pygments", "The 'pygments'settings has been removed in \
+                          favour of 'highlighter'."
       arg_is_present? args, "--paginate", "The 'paginate' setting can only be set in your \
                           config files."
       arg_is_present? args, "--url", "The 'url' setting can only be set in your config files."
@@ -19,7 +19,7 @@ module Jekyll
     def self.no_subcommand(args)
       if args.size > 0 && args.first =~ /^--/ && !%w[--help --version].include?(args.first)
         Jekyll.logger.error "Deprecation:", "Jekyll now uses subcommands instead of just \
-                            switches. Run `jekyll help' to find out more."
+                            switches. Run `jekyll --help' to find out more."
       end
     end
 
@@ -32,5 +32,23 @@ module Jekyll
     def self.deprecation_message(message)
       Jekyll.logger.error "Deprecation:", message
     end
+
+    def self.gracefully_require(gem_name)
+      Array(gem_name).each do |name|
+        begin
+          require name
+        rescue LoadError => e
+          Jekyll.logger.error "Dependency Error:", <<-MSG
+  Yikes! It looks like you don't have #{name} or one of its dependencies installed.
+  In order to use Jekyll as currently contfigured, you'll need to install this gem.
+
+  The full error message from Ruby is: '#{e.message}'
+
+  If you run into trouble, you can find helpful resources at http://jekyllrb.com/help/!
+  MSG
+          raise Errors::MissingDependencyException.new(name)
+        end
+      end
+    end
   end
 end
diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb
new file mode 100644
index 0000000..85b22ba
--- /dev/null
+++ b/lib/jekyll/document.rb
@@ -0,0 +1,260 @@
+module Jekyll
+  class Document
+    include Comparable
+
+    attr_reader   :path, :site
+    attr_accessor :content, :collection, :output
+
+    # Create a new Document.
+    #
+    # site - the Jekyll::Site instance to which this Document belongs
+    # path - the path to the file
+    #
+    # Returns nothing.
+    def initialize(path, relations)
+      @site = relations[:site]
+      @path = path
+      @collection = relations[:collection]
+    end
+
+    # Fetch the Document's data.
+    #
+    # Returns a Hash containing the data. An empty hash is returned if
+    #   no data was read.
+    def data
+      @data ||= Hash.new
+    end
+
+    # The path to the document, relative to the site source.
+    #
+    # Returns a String path which represents the relative path
+    #   from the site source to this document
+    def relative_path
+      Pathname.new(path).relative_path_from(Pathname.new(site.source)).to_s
+    end
+
+    # The base filename of the document.
+    #
+    # suffix - (optional) the suffix to be removed from the end of the filename
+    #
+    # Returns the base filename of the document.
+    def basename(suffix = "")
+      File.basename(path, suffix)
+    end
+
+    # The extension name of the document.
+    #
+    # Returns the extension name of the document.
+    def extname
+      File.extname(path)
+    end
+
+    # Produces a "cleaned" relative path.
+    # The "cleaned" relative path is the relative path without the extname
+    #   and with the collection's directory removed as well.
+    # This method is useful when building the URL of the document.
+    #
+    # Examples:
+    #   When relative_path is "_methods/site/generate.md":
+    #     cleaned_relative_path
+    #     # => "/site/generate"
+    #
+    # Returns the cleaned relative path of the document.
+    def cleaned_relative_path
+      relative_path[0 .. -extname.length - 1].sub(collection.relative_directory, "")
+    end
+
+    # Determine whether the document is a YAML file.
+    #
+    # Returns true if the extname is either .yml or .yaml, false otherwise.
+    def yaml_file?
+      %w[.yaml .yml].include?(extname)
+    end
+
+    # Determine whether the document is an asset file.
+    # Asset files include CoffeeScript files and Sass/SCSS files.
+    #
+    # Returns true if the extname belongs to the set of extensions
+    #   that asset files use.
+    def asset_file?
+      %w[.sass .scss .coffee].include?(extname)
+    end
+
+    # Determine whether the file should be rendered with Liquid.
+    #
+    # Returns false if the document is either an asset file or a yaml file,
+    #   true otherwise.
+    def render_with_liquid?
+      !(asset_file? || yaml_file?)
+    end
+
+    # Determine whether the file should be placed into layouts.
+    #
+    # Returns false if the document is either an asset file or a yaml file,
+    #   true otherwise.
+    def place_in_layout?
+      !(asset_file? || yaml_file?)
+    end
+
+    # The URL template where the document would be accessible.
+    #
+    # Returns the URL template for the document.
+    def url_template
+      collection.url_template
+    end
+
+    # Construct a Hash of key-value pairs which contain a mapping between
+    #   a key in the URL template and the corresponding value for this document.
+    #
+    # Returns the Hash of key-value pairs for replacement in the URL.
+    def url_placeholders
+      {
+        collection: collection.label,
+        path:       cleaned_relative_path,
+        output_ext: Jekyll::Renderer.new(site, self).output_ext
+      }
+    end
+
+    # The permalink for this Document.
+    # Permalink is set via the data Hash.
+    #
+    # Returns the permalink or nil if no permalink was set in the data.
+    def permalink
+      data && data.is_a?(Hash) && data['permalink']
+    end
+
+    # The computed URL for the document. See `Jekyll::URL#to_s` for more details.
+    #
+    # Returns the computed URL for the document.
+    def url
+      @url = URL.new({
+        template:     url_template,
+        placeholders: url_placeholders,
+        permalink:    permalink
+      }).to_s
+    end
+
+    # The full path to the output file.
+    #
+    # base_directory - the base path of the output directory
+    #
+    # Returns the full path to the output file of this document.
+    def destination(base_directory)
+      path = Jekyll.sanitized_path(base_directory, url)
+      path = File.join(path, "index.html") if url =~ /\/$/
+      path
+    end
+
+    # Write the generated Document file to the destination directory.
+    #
+    # dest - The String path to the destination dir.
+    #
+    # Returns nothing.
+    def write(dest)
+      path = destination(dest)
+      FileUtils.mkdir_p(File.dirname(path))
+      File.open(path, 'wb') do |f|
+        f.write(output)
+      end
+    end
+
+    # Returns merged option hash for File.read of self.site (if exists)
+    # and a given param
+    #
+    # opts - override options
+    #
+    # Return the file read options hash.
+    def merged_file_read_opts(opts)
+      site ? site.file_read_opts.merge(opts) : opts
+    end
+
+    # Whether the file is published or not, as indicated in YAML front-matter
+    #
+    # Returns true if the 'published' key is specified in the YAML front-matter and not `false`.
+    def published?
+      !(data.has_key?('published') && data['published'] == false)
+    end
+
+    # Read in the file and assign the content and data based on the file contents.
+    # Merge the frontmatter of the file with the frontmatter default
+    # values
+    #
+    # Returns nothing.
+    def read(opts = {})
+      if yaml_file?
+        @data = SafeYAML.load_file(path)
+      else
+        begin
+          defaults = @site.frontmatter_defaults.all(url, collection.label.to_sym)
+          unless defaults.empty?
+            @data = defaults
+          end
+          @content = File.read(path, merged_file_read_opts(opts))
+          if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
+            @content = $POSTMATCH
+            data_file = SafeYAML.load($1)
+            unless data_file.nil?
+              @data = Utils.deep_merge_hashes(defaults, data_file)
+            end
+          end
+        rescue SyntaxError => e
+          puts "YAML Exception reading #{path}: #{e.message}"
+        rescue Exception => e
+          puts "Error reading file #{path}: #{e.message}"
+        end
+      end
+    end
+
+    # Create a Liquid-understandable version of this Document.
+    #
+    # Returns a Hash representing this Document's data.
+    def to_liquid
+      if data.is_a?(Hash)
+        Utils.deep_merge_hashes data, {
+          "output"        => output,
+          "content"       => content,
+          "path"          => path,
+          "relative_path" => relative_path,
+          "url"           => url,
+          "collection"    => collection.label
+        }
+      else
+        data
+      end
+    end
+
+    # The inspect string for this document.
+    # Includes the relative path and the collection label.
+    #
+    # Returns the inspect string for this document.
+    def inspect
+      "#<Jekyll::Document #{relative_path} collection=#{collection.label}>"
+    end
+
+    # The string representation for this document.
+    #
+    # Returns the content of the document
+    def to_s
+      output || content
+    end
+
+    # Compare this document against another document.
+    # Comparison is a comparison between the 2 paths of the documents.
+    #
+    # Returns -1, 0, +1 or nil depending on whether this doc's path is less than,
+    #   equal or greater than the other doc's path. See String#<=> for more details.
+    def <=>(anotherDocument)
+      path <=> anotherDocument.path
+    end
+
+    # Determine whether this document should be written.
+    # Based on the Collection to which it belongs.
+    #
+    # True if the document has a collection and if that collection's #write?
+    #   method returns true, otherwise false.
+    def write?
+      collection && collection.write?
+    end
+
+  end
+end
diff --git a/lib/jekyll/draft.rb b/lib/jekyll/draft.rb
index 321a6e5..7b1d9ac 100644
--- a/lib/jekyll/draft.rb
+++ b/lib/jekyll/draft.rb
@@ -18,6 +18,11 @@ module Jekyll
       File.join(source, dir, '_drafts')
     end
 
+    # The path to the draft source file, relative to the site source
+    def relative_path
+      File.join(@dir, '_drafts', @name)
+    end
+
     # Extract information from the post filename.
     #
     # name - The String filename of the post file.
diff --git a/lib/jekyll/entry_filter.rb b/lib/jekyll/entry_filter.rb
index 56f3cfc..d2cd6f8 100644
--- a/lib/jekyll/entry_filter.rb
+++ b/lib/jekyll/entry_filter.rb
@@ -1,35 +1,72 @@
-class EntryFilter
-  attr_reader :site
-  def initialize(site)
-    @site = site
-  end
+module Jekyll
+  class EntryFilter
+    SPECIAL_LEADING_CHARACTERS = ['.', '_', '#'].freeze
+
+    attr_reader :site
+
+    def initialize(site, base_directory = nil)
+      @site = site
+      @base_directory = derive_base_directory(@site, base_directory.to_s.dup)
+    end
 
-  def filter(entries)
-    entries.reject do |e|
-      unless included?(e)
-        special?(e) || backup?(e) || excluded?(e) || symlink?(e)
+    def base_directory
+      @base_directory.to_s
+    end
+
+    def derive_base_directory(site, base_dir)
+      if base_dir.start_with?(site.source)
+        base_dir[site.source] = ""
       end
+      base_dir
     end
-  end
 
-  def included?(entry)
-    site.include.glob_include?(entry)
-  end
+    def relative_to_source(entry)
+      File.join(base_directory, entry)
+    end
 
-  def special?(entry)
-    ['.', '_', '#'].include?(entry[0..0])
-  end
+    def filter(entries)
+      entries.reject do |e|
+        unless included?(e)
+          special?(e) || backup?(e) || excluded?(e) || symlink?(e)
+        end
+      end
+    end
 
-  def backup?(entry)
-    entry[-1..-1] == '~'
-  end
+    def included?(entry)
+      glob_include?(site.include, entry)
+    end
 
-  def excluded?(entry)
-    site.exclude.glob_include?(entry)
-  end
+    def special?(entry)
+      SPECIAL_LEADING_CHARACTERS.include?(entry[0..0]) ||
+        SPECIAL_LEADING_CHARACTERS.include?(File.basename(entry)[0..0])
+    end
 
-  def symlink?(entry)
-    File.symlink?(entry) && site.safe
-  end
+    def backup?(entry)
+      entry[-1..-1] == '~'
+    end
 
+    def excluded?(entry)
+      excluded = glob_include?(site.exclude, relative_to_source(entry))
+      Jekyll.logger.debug "excluded?(#{relative_to_source(entry)}) ==> #{excluded}"
+      excluded
+    end
+
+    def symlink?(entry)
+      File.symlink?(entry) && site.safe
+    end
+
+    def ensure_leading_slash(path)
+      path[0..0] == "/" ? path : "/#{path}"
+    end
+
+    # Returns true if path matches against any glob pattern.
+    # Look for more detail about glob pattern in method File::fnmatch.
+    def glob_include?(enum, e)
+      entry = ensure_leading_slash(e)
+      enum.any? do |exp|
+        item = ensure_leading_slash(exp)
+        File.fnmatch?(item, entry) || entry.start_with?(item)
+      end
+    end
+  end
 end
diff --git a/lib/jekyll/errors.rb b/lib/jekyll/errors.rb
index af03ad8..dc5238a 100644
--- a/lib/jekyll/errors.rb
+++ b/lib/jekyll/errors.rb
@@ -1,4 +1,9 @@
 module Jekyll
-  class FatalException < StandardError
+  module Errors
+    class FatalException < RuntimeError
+    end
+
+    class MissingDependencyException < FatalException
+    end
   end
 end
diff --git a/lib/jekyll/excerpt.rb b/lib/jekyll/excerpt.rb
index a02272b..958e3f3 100644
--- a/lib/jekyll/excerpt.rb
+++ b/lib/jekyll/excerpt.rb
@@ -1,10 +1,17 @@
+require 'forwardable'
+
 module Jekyll
   class Excerpt
     include Convertible
+    extend Forwardable
 
     attr_accessor :post
     attr_accessor :content, :output, :ext
 
+    def_delegator :@post, :site, :site
+    def_delegator :@post, :name, :name
+    def_delegator :@post, :ext,  :ext
+
     # Initialize this Post instance.
     #
     # site       - The Site.
@@ -17,14 +24,8 @@ module Jekyll
       self.content = extract_excerpt(post.content)
     end
 
-    %w[site name ext].each do |meth|
-      define_method(meth) do
-        post.send(meth)
-      end
-    end
-
     def to_liquid
-      post.to_liquid(Post::EXCERPT_ATTRIBUTES_FOR_LIQUID)
+      post.to_liquid(post.class::EXCERPT_ATTRIBUTES_FOR_LIQUID)
     end
 
     # Fetch YAML front-matter data from related post, without layout key
@@ -37,7 +38,7 @@ module Jekyll
     end
 
     # 'Path' of the excerpt.
-    # 
+    #
     # Returns the path for the post this excerpt belongs to with #excerpt appended
     def path
       File.join(post.path, "#excerpt")
@@ -45,9 +46,9 @@ module Jekyll
 
     # Check if excerpt includes a string
     #
-    # Returns true if the string passed in 
+    # Returns true if the string passed in
     def include?(something)
-      (self.output && self.output.include?(something)) || self.content.include?(something)
+      (output && output.include?(something)) || content.include?(something)
     end
 
     # The UID for this post (useful in feeds).
@@ -59,7 +60,7 @@ module Jekyll
     end
 
     def to_s
-      self.output || self.content
+      output || content
     end
 
     # Returns the shorthand String identifier of this Post.
diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb
index 95ada0b..002d926 100644
--- a/lib/jekyll/filters.rb
+++ b/lib/jekyll/filters.rb
@@ -83,7 +83,7 @@ module Jekyll
     #
     # Returns the escaped String.
     def xml_escape(input)
-      CGI.escapeHTML(input)
+      CGI.escapeHTML(input.to_s)
     end
 
     # CGI escape a string for use in a URL. Replaces any special characters
@@ -100,7 +100,7 @@ module Jekyll
     def cgi_escape(input)
       CGI::escape(input)
     end
-    
+
     # URI escape a string.
     #
     # input - The String to escape.
@@ -124,7 +124,7 @@ module Jekyll
       input.split.length
     end
 
-    # Join an array of things into a string by separating with commes and the
+    # Join an array of things into a string by separating with commas and the
     # word "and" for the last one.
     #
     # array - The Array of Strings to join.
@@ -158,17 +158,101 @@ module Jekyll
       input.to_json
     end
 
+    # Group an array of items by a property
+    #
+    # input - the inputted Enumerable
+    # property - the property
+    #
+    # Returns an array of Hashes, each looking something like this:
+    #  {"name"  => "larry"
+    #   "items" => [...] } # all the items where `property` == "larry"
+    def group_by(input, property)
+      if groupable?(input)
+        input.group_by do |item|
+          item_property(item, property).to_s
+        end.inject([]) do |memo, i|
+          memo << {"name" => i.first, "items" => i.last}
+        end
+      else
+        input
+      end
+    end
+
+    # Filter an array of objects
+    #
+    # input - the object array
+    # key - key within each object to filter by
+    # value - desired value
+    #
+    # Returns the filtered array of objects
+    def where(input, property, value)
+      return input unless input.is_a?(Array)
+      input.select { |object| item_property(object, property) == value }
+    end
+
+    # Sort an array of objects
+    #
+    # input - the object array
+    # property - property within each object to filter by
+    # nils ('first' | 'last') - nils appear before or after non-nil values
+    #
+    # Returns the filtered array of objects
+    def sort(input, property = nil, nils = "first")
+      if property.nil?
+        input.sort
+      else
+        case
+        when nils == "first"
+          order = - 1
+        when nils == "last"
+          order = + 1
+        else
+          raise ArgumentError.new("Invalid nils order: " +
+            "'#{nils}' is not a valid nils order. It must be 'first' or 'last'.")
+        end
+
+        input.sort { |apple, orange|
+          apple_property = item_property(apple, property)
+          orange_property = item_property(orange, property)
+
+          if !apple_property.nil? && orange_property.nil?
+            - order
+          elsif apple_property.nil? && !orange_property.nil?
+            + order
+          else
+            apple_property <=> orange_property
+          end
+        }
+      end
+    end
+
     private
     def time(input)
       case input
       when Time
         input
       when String
-        Time.parse(input)
+        Time.parse(input) rescue Time.at(input.to_i)
+      when Numeric
+        Time.at(input)
       else
         Jekyll.logger.error "Invalid Date:", "'#{input}' is not a valid datetime."
         exit(1)
       end
     end
+
+    def groupable?(element)
+      element.respond_to?(:group_by)
+    end
+
+    def item_property(item, property)
+      if item.respond_to?(:to_liquid)
+        item.to_liquid[property.to_s]
+      elsif item.respond_to?(:data)
+        item.data[property.to_s]
+      else
+        item[property.to_s]
+      end
+    end
   end
 end
diff --git a/lib/jekyll/frontmatter_defaults.rb b/lib/jekyll/frontmatter_defaults.rb
new file mode 100644
index 0000000..e747143
--- /dev/null
+++ b/lib/jekyll/frontmatter_defaults.rb
@@ -0,0 +1,146 @@
+module Jekyll
+  # This class handles custom defaults for YAML frontmatter settings.
+  # These are set in _config.yml and apply both to internal use (e.g. layout)
+  # and the data available to liquid.
+  #
+  # It is exposed via the frontmatter_defaults method on the site class.
+  class FrontmatterDefaults
+    # Initializes a new instance.
+    def initialize(site)
+      @site = site
+    end
+
+    # Finds a default value for a given setting, filtered by path and type
+    #
+    # path - the path (relative to the source) of the page, post or :draft the default is used in
+    # type - a symbol indicating whether a :page, a :post or a :draft calls this method
+    #
+    # Returns the default value or nil if none was found
+    def find(path, type, setting)
+      value = nil
+      old_scope = nil
+
+      matching_sets(path, type).each do |set|
+        if set['values'].has_key?(setting) && has_precedence?(old_scope, set['scope'])
+          value = set['values'][setting]
+          old_scope = set['scope']
+        end
+      end
+      value
+    end
+
+    # Collects a hash with all default values for a page or post
+    #
+    # path - the relative path of the page or post
+    # type - a symbol indicating the type (:post, :page or :draft)
+    #
+    # Returns a hash with all default values (an empty hash if there are none)
+    def all(path, type)
+      defaults = {}
+      old_scope = nil
+      matching_sets(path, type).each do |set|
+        if has_precedence?(old_scope, set['scope'])
+          defaults = Utils.deep_merge_hashes(defaults, set['values'])
+          old_scope = set['scope']
+        else
+          defaults = Utils.deep_merge_hashes(set['values'], defaults)
+        end
+      end
+      defaults
+    end
+
+    private
+
+    # Checks if a given default setting scope matches the given path and type
+    #
+    # scope - the hash indicating the scope, as defined in _config.yml
+    # path - the path to check for
+    # type - the type (:post, :page or :draft) to check for
+    #
+    # Returns true if the scope applies to the given path and type
+    def applies?(scope, path, type)
+      applies_path?(scope, path) && applies_type?(scope, type)
+    end
+
+    def applies_path?(scope, path)
+      return true if scope['path'].empty?
+
+      scope_path = Pathname.new(scope['path'])
+      Pathname.new(sanitize_path(path)).ascend do |path|
+        if path == scope_path
+          return true
+        end
+      end
+    end
+
+    def applies_type?(scope, type)
+      !scope.has_key?('type') || scope['type'] == type.to_s
+    end
+
+    # Checks if a given set of default values is valid
+    #
+    # set - the default value hash, as defined in _config.yml
+    #
+    # Returns true if the set is valid and can be used in this class
+    def valid?(set)
+      set.is_a?(Hash) && set['scope'].is_a?(Hash) && set['scope']['path'].is_a?(String) && set['values'].is_a?(Hash)
+    end
+
+    # Determines if a new scope has precedence over an old one
+    #
+    # old_scope - the old scope hash, or nil if there's none
+    # new_scope - the new scope hash
+    #
+    # Returns true if the new scope has precedence over the older
+    def has_precedence?(old_scope, new_scope)
+      return true if old_scope.nil?
+
+      new_path = sanitize_path(new_scope['path'])
+      old_path = sanitize_path(old_scope['path'])
+
+      if new_path.length != old_path.length
+        new_path.length >= old_path.length
+      elsif new_scope.has_key? 'type'
+        true
+      else
+        !old_scope.has_key? 'type'
+      end
+    end
+
+    # Collects a list of sets that match the given path and type
+    #
+    # Returns an array of hashes
+    def matching_sets(path, type)
+      valid_sets.select do |set|
+        applies?(set['scope'], path, type)
+      end
+    end
+
+    # Returns a list of valid sets
+    #
+    # This is not cached to allow plugins to modify the configuration
+    # and have their changes take effect
+    #
+    # Returns an array of hashes
+    def valid_sets
+      sets = @site.config['defaults']
+      return [] unless sets.is_a?(Array)
+
+      sets.select do |set|
+        unless valid?(set)
+          Jekyll.logger.warn "Default:", "An invalid default set was found"
+        end
+        valid?(set)
+      end
+    end
+
+    # Sanitizes the given path by removing a leading and addding a trailing slash
+    def sanitize_path(path)
+      if path.nil? || path.empty?
+        ""
+      else
+        path.gsub(/\A\//, '').gsub(/([^\/])\z/, '\1/')
+      end
+    end
+  end
+end
diff --git a/lib/jekyll/generators/pagination.rb b/lib/jekyll/generators/pagination.rb
deleted file mode 100644
index 72dc529..0000000
--- a/lib/jekyll/generators/pagination.rb
+++ /dev/null
@@ -1,217 +0,0 @@
-module Jekyll
-  module Generators
-    class Pagination < Generator
-      # This generator is safe from arbitrary code execution.
-      safe true
-
-      # This generator should be passive with regard to its execution
-      priority :lowest
-
-      # Generate paginated pages if necessary.
-      #
-      # site - The Site.
-      #
-      # Returns nothing.
-      def generate(site)
-        if Pager.pagination_enabled?(site)
-          if template = template_page(site)
-            paginate(site, template)
-          else
-            Jekyll.logger.warn "Pagination:", "Pagination is enabled, but I couldn't find " +
-            "an index.html page to use as the pagination template. Skipping pagination."
-          end
-        end
-      end
-
-      # Paginates the blog's posts. Renders the index.html file into paginated
-      # directories, e.g.: page2/index.html, page3/index.html, etc and adds more
-      # site-wide data.
-      #
-      # site - The Site.
-      # page - The index.html Page that requires pagination.
-      #
-      # {"paginator" => { "page" => <Number>,
-      #                   "per_page" => <Number>,
-      #                   "posts" => [<Post>],
-      #                   "total_posts" => <Number>,
-      #                   "total_pages" => <Number>,
-      #                   "previous_page" => <Number>,
-      #                   "next_page" => <Number> }}
-      def paginate(site, page)
-        all_posts = site.site_payload['site']['posts']
-        pages = Pager.calculate_pages(all_posts, site.config['paginate'].to_i)
-        (1..pages).each do |num_page|
-          pager = Pager.new(site, num_page, all_posts, pages)
-          if num_page > 1
-            newpage = Page.new(site, site.source, page.dir, page.name)
-            newpage.pager = pager
-            newpage.dir = Pager.paginate_path(site, num_page)
-            site.pages << newpage
-          else
-            page.pager = pager
-          end
-        end
-      end
-
-      # Static: Fetch the URL of the template page. Used to determine the
-      #         path to the first pager in the series.
-      #
-      # site - the Jekyll::Site object
-      #
-      # Returns the url of the template page
-      def self.first_page_url(site)
-        if page = Pagination.new.template_page(site)
-          page.url
-        else
-          nil
-        end
-      end
-
-      # Public: Find the Jekyll::Page which will act as the pager template
-      #
-      # site - the Jekyll::Site object
-      #
-      # Returns the Jekyll::Page which will act as the pager template
-      def template_page(site)
-        site.pages.dup.select do |page|
-          Pager.pagination_candidate?(site.config, page)
-        end.sort do |one, two|
-          two.path.size <=> one.path.size
-        end.first
-      end
-    end
-  end
-
-  class Pager
-    attr_reader :page, :per_page, :posts, :total_posts, :total_pages,
-      :previous_page, :previous_page_path, :next_page, :next_page_path
-
-    # Calculate the number of pages.
-    #
-    # all_posts - The Array of all Posts.
-    # per_page  - The Integer of entries per page.
-    #
-    # Returns the Integer number of pages.
-    def self.calculate_pages(all_posts, per_page)
-      (all_posts.size.to_f / per_page.to_i).ceil
-    end
-
-    # Determine if pagination is enabled the site.
-    #
-    # site - the Jekyll::Site object
-    #
-    # Returns true if pagination is enabled, false otherwise.
-    def self.pagination_enabled?(site)
-     !site.config['paginate'].nil? &&
-       site.pages.size > 0
-    end
-
-    # Static: Determine if a page is a possible candidate to be a template page.
-    #         Page's name must be `index.html` and exist in any of the directories
-    #         between the site source and `paginate_path`.
-    #
-    # config - the site configuration hash
-    # page   - the Jekyll::Page about which we're inquiring
-    #
-    # Returns true if the
-    def self.pagination_candidate?(config, page)
-      page_dir = File.dirname(File.expand_path(remove_leading_slash(page.path), config['source']))
-      paginate_path = remove_leading_slash(config['paginate_path'])
-      paginate_path = File.expand_path(paginate_path, config['source'])
-      page.name == 'index.html' &&
-        in_hierarchy(config['source'], page_dir, File.dirname(paginate_path))
-    end
-
-    # Determine if the subdirectories of the two paths are the same relative to source
-    #
-    # source        - the site source
-    # page_dir      - the directory of the Jekyll::Page
-    # paginate_path - the absolute paginate path (from root of FS)
-    #
-    # Returns whether the subdirectories are the same relative to source
-    def self.in_hierarchy(source, page_dir, paginate_path)
-      return false if paginate_path == File.dirname(paginate_path)
-      return false if paginate_path == Pathname.new(source).parent
-      page_dir == paginate_path ||
-        in_hierarchy(source, page_dir, File.dirname(paginate_path))
-    end
-
-    # Static: Return the pagination path of the page
-    #
-    # site     - the Jekyll::Site object
-    # num_page - the pagination page number
-    #
-    # Returns the pagination path as a string
-    def self.paginate_path(site, num_page)
-      return nil if num_page.nil?
-      return Generators::Pagination.first_page_url(site) if num_page <= 1
-      format = site.config['paginate_path']
-      format = format.sub(':num', num_page.to_s)
-      ensure_leading_slash(format)
-    end
-
-    # Static: Return a String version of the input which has a leading slash.
-    #         If the input already has a forward slash in position zero, it will be
-    #         returned unchanged.
-    #
-    # path - a String path
-    #
-    # Returns the path with a leading slash
-    def self.ensure_leading_slash(path)
-      path[0..0] == "/" ? path : "/#{path}"
-    end
-
-    # Static: Return a String version of the input without a leading slash.
-    #
-    # path - a String path
-    #
-    # Returns the input without the leading slash
-    def self.remove_leading_slash(path)
-      ensure_leading_slash(path)[1..-1]
-    end
-
-    # Initialize a new Pager.
-    #
-    # site     - the Jekyll::Site object
-    # page      - The Integer page number.
-    # all_posts - The Array of all the site's Posts.
-    # num_pages - The Integer number of pages or nil if you'd like the number
-    #             of pages calculated.
-    def initialize(site, page, all_posts, num_pages = nil)
-      @page = page
-      @per_page = site.config['paginate'].to_i
-      @total_pages = num_pages || Pager.calculate_pages(all_posts, @per_page)
-
-      if @page > @total_pages
-        raise RuntimeError, "page number can't be greater than total pages: #{@page} > #{@total_pages}"
-      end
-
-      init = (@page - 1) * @per_page
-      offset = (init + @per_page - 1) >= all_posts.size ? all_posts.size : (init + @per_page - 1)
-
-      @total_posts = all_posts.size
-      @posts = all_posts[init..offset]
-      @previous_page = @page != 1 ? @page - 1 : nil
-      @previous_page_path = Pager.paginate_path(site, @previous_page)
-      @next_page = @page != @total_pages ? @page + 1 : nil
-      @next_page_path = Pager.paginate_path(site, @next_page)
-    end
-
-    # Convert this Pager's data to a Hash suitable for use by Liquid.
-    #
-    # Returns the Hash representation of this Pager.
-    def to_liquid
-      {
-        'page' => page,
-        'per_page' => per_page,
-        'posts' => posts,
-        'total_posts' => total_posts,
-        'total_pages' => total_pages,
-        'previous_page' => previous_page,
-        'previous_page_path' => previous_page_path,
-        'next_page' => next_page,
-        'next_page_path' => next_page_path
-      }
-    end
-  end
-end
diff --git a/lib/jekyll/layout.rb b/lib/jekyll/layout.rb
index f75a478..4dde59b 100644
--- a/lib/jekyll/layout.rb
+++ b/lib/jekyll/layout.rb
@@ -29,8 +29,8 @@ module Jekyll
 
       self.data = {}
 
-      self.process(name)
-      self.read_yaml(base, name)
+      process(name)
+      read_yaml(base, name)
     end
 
     # Extract information from the layout filename.
diff --git a/lib/jekyll/layout_reader.rb b/lib/jekyll/layout_reader.rb
new file mode 100644
index 0000000..a9172c0
--- /dev/null
+++ b/lib/jekyll/layout_reader.rb
@@ -0,0 +1,53 @@
+module Jekyll
+  class LayoutReader
+    attr_reader :site
+    def initialize(site)
+      @site = site
+      @layouts = {}
+    end
+
+    def read
+      layout_entries.each do |f|
+        @layouts[layout_name(f)] = Layout.new(site, layout_directory, f)
+      end
+
+      @layouts
+    end
+
+    def layout_directory
+      @layout_directory ||= (layout_directory_in_cwd || layout_directory_inside_source)
+    end
+
+    private
+
+    def layout_entries
+      entries = []
+      within(layout_directory) do
+        entries = EntryFilter.new(site).filter(Dir['**/*.*'])
+      end
+      entries
+    end
+
+    def layout_name(file)
+      file.split(".")[0..-2].join(".")
+    end
+
+    def within(directory)
+      return unless File.exist?(directory)
+      Dir.chdir(directory) { yield }
+    end
+
+    def layout_directory_inside_source
+      Jekyll.sanitized_path(site.source, site.config['layouts'])
+    end
+
+    def layout_directory_in_cwd
+      dir = Jekyll.sanitized_path(Dir.pwd, site.config['layouts'])
+      if File.directory?(dir)
+        dir
+      else
+        nil
+      end
+    end
+  end
+end
diff --git a/lib/jekyll/liquid_extensions.rb b/lib/jekyll/liquid_extensions.rb
new file mode 100644
index 0000000..5ba7dd8
--- /dev/null
+++ b/lib/jekyll/liquid_extensions.rb
@@ -0,0 +1,22 @@
+module Jekyll
+  module LiquidExtensions
+
+    # Lookup a Liquid variable in the given context.
+    #
+    # context  - the Liquid context in question.
+    # variable - the variable name, as a string.
+    #
+    # Returns the value of the variable in the context
+    #   or the variable name if not found.
+    def lookup_variable(context, variable)
+      lookup = context
+
+      variable.split(".").each do |value|
+        lookup = lookup[value]
+      end
+
+      lookup || variable
+    end
+
+  end
+end
diff --git a/lib/jekyll/stevenson.rb b/lib/jekyll/log_adapter.rb
similarity index 58%
copy from lib/jekyll/stevenson.rb
copy to lib/jekyll/log_adapter.rb
index 8765220..63e23fc 100644
--- a/lib/jekyll/stevenson.rb
+++ b/lib/jekyll/log_adapter.rb
@@ -1,62 +1,75 @@
 module Jekyll
-  class Stevenson
-    attr_accessor :log_level
+  class LogAdapter
+    attr_reader :writer
 
-    DEBUG  = 0
-    INFO   = 1
-    WARN   = 2
-    ERROR  = 3
+    LOG_LEVELS = {
+      :debug => ::Logger::DEBUG,
+      :info  => ::Logger::INFO,
+      :warn  => ::Logger::WARN,
+      :error => ::Logger::ERROR
+    }
 
-    # Public: Create a new instance of Stevenson, Jekyll's logger
+    # Public: Create a new instance of Jekyll's log writer
     #
-    # level - (optional, integer) the log level
+    # writer - Logger compatible instance
+    # log_level - (optional, symbol) the log level
     #
     # Returns nothing
-    def initialize(level = INFO)
-      @log_level = level
+    def initialize(writer, level = :info)
+      @writer = writer
+      self.log_level = level
     end
-    
-    # Public: Print a jekyll debug message to stdout
+
+    # Public: Set the log level on the writer
+    #
+    # level - (symbol) the log level
+    #
+    # Returns nothing
+    def log_level=(level)
+      writer.level = LOG_LEVELS.fetch(level)
+    end
+
+    # Public: Print a jekyll debug message
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
     # message - the message detail
     #
     # Returns nothing
     def debug(topic, message = nil)
-      $stdout.puts(message(topic, message)) if log_level <= DEBUG
+      writer.debug(message(topic, message))
     end
 
-    # Public: Print a jekyll message to stdout
+    # Public: Print a jekyll message
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
     # message - the message detail
     #
     # Returns nothing
     def info(topic, message = nil)
-      $stdout.puts(message(topic, message)) if log_level <= INFO
+      writer.info(message(topic, message))
     end
 
-    # Public: Print a jekyll message to stderr
+    # Public: Print a jekyll message
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
     # message - the message detail
     #
     # Returns nothing
     def warn(topic, message = nil)
-      $stderr.puts(message(topic, message).yellow) if log_level <= WARN
+      writer.warn(message(topic, message))
     end
 
-    # Public: Print a jekyll error message to stderr
+    # Public: Print a jekyll error message
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
     # message - the message detail
     #
     # Returns nothing
     def error(topic, message = nil)
-      $stderr.puts(message(topic, message).red) if log_level <= ERROR
+      writer.error(message(topic, message))
     end
 
-    # Public: Print a Jekyll error message to stderr and immediately abort the process
+    # Public: Print a Jekyll error message and immediately abort the process
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
     # message - the message detail (can be omitted)
@@ -67,7 +80,7 @@ module Jekyll
       abort
     end
 
-    # Public: Build a Jekyll topic method
+    # Internal: Build a Jekyll topic method
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
     # message - the message detail
@@ -77,7 +90,7 @@ module Jekyll
       formatted_topic(topic) + message.to_s.gsub(/\s+/, ' ')
     end
 
-    # Public: Format the topic
+    # Internal: Format the topic
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
     #
diff --git a/lib/jekyll/mime.types b/lib/jekyll/mime.types
index b926a00..ee7aa44 100644
--- a/lib/jekyll/mime.types
+++ b/lib/jekyll/mime.types
@@ -1,12 +1,13 @@
-# These are the same MIME types that GitHub Pages uses as of 17 Mar 2013.
+-# These are the same MIME types that GitHub Pages uses as of 26 January 2014
 
 text/html                             html htm shtml
 text/css                              css
-text/xml                              xml rss xsl
+text/xml                              xml rss xsl xsd
 image/gif                             gif
 image/jpeg                            jpeg jpg
 application/x-javascript              js
 application/atom+xml                  atom
+application/json                      json geojson topojson
 
 text/mathml                           mml
 text/plain                            txt
@@ -17,16 +18,22 @@ text/cache-manifest                   manifest appcache
 text/coffeescript                     coffee
 text/plain                            pde
 text/plain                            md markdown
+text/vcard                            vcf vcard
 
 image/png                             png
 image/svg+xml                         svg
+image/svg+xml                         svgz
 image/tiff                            tif tiff
 image/vnd.wap.wbmp                    wbmp
 image/x-icon                          ico
 image/x-jng                           jng
 image/x-ms-bmp                        bmp
 
-application/json                      json
+application/vnd.ms-fontobject         eot
+application/x-font-ttf                ttf
+application/x-font-woff               woff
+font/opentype                         otf
+
 application/java-archive              jar ear
 application/mac-binhex40              hqx
 application/msword                    doc
@@ -34,18 +41,19 @@ application/pdf                       pdf
 application/postscript                ps eps ai
 application/rdf+xml                   rdf
 application/rtf                       rtf
-text/vcard                            vcf vcard
 application/vnd.apple.pkpass          pkpass
 application/vnd.ms-excel              xls
 application/vnd.ms-powerpoint         ppt
 application/vnd.wap.wmlc              wmlc
 application/xhtml+xml                 xhtml
-application/x-chrome-extension        crx
 application/x-cocoa                   cco
-application/x-font-ttf                ttf
+application/x-chrome-extension        crx
 application/x-java-archive-diff       jardiff
 application/x-java-jnlp-file          jnlp
 application/x-makeself                run
+application/x-ms-application          application
+application/x-ms-manifest             manifest
+application/x-ms-vsto                 vsto
 application/x-ns-proxy-autoconfig     pac
 application/x-perl                    pl pm
 application/x-pilot                   prc pdb
@@ -63,8 +71,8 @@ application/zip                       zip
 
 application/octet-stream              bin exe dll
 application/octet-stream              deb
+application/octet-stream              deploy
 application/octet-stream              dmg
-application/octet-stream              eot
 application/octet-stream              iso img
 application/octet-stream              msi msp msm
 
@@ -74,12 +82,14 @@ audio/x-realaudio                     ra
 audio/ogg                             ogg
 
 video/3gpp                            3gpp 3gp
+video/m4v                             m4v
+video/mp4                             mp4
 video/mpeg                            mpeg mpg
+video/ogg                             ogg ogv
 video/quicktime                       mov
+video/webm                            webm
 video/x-flv                           flv
 video/x-mng                           mng
 video/x-ms-asf                        asx asf
 video/x-ms-wmv                        wmv
 video/x-msvideo                       avi
-video/ogg                             ogv
-video/webm                            webm
diff --git a/lib/jekyll/page.rb b/lib/jekyll/page.rb
index 4889678..d045b7c 100644
--- a/lib/jekyll/page.rb
+++ b/lib/jekyll/page.rb
@@ -9,9 +9,11 @@ module Jekyll
 
     # Attributes for Liquid templates
     ATTRIBUTES_FOR_LIQUID = %w[
-      url
       content
+      dir
+      name
       path
+      url
     ]
 
     # Initialize a new Page.
@@ -26,8 +28,13 @@ module Jekyll
       @dir  = dir
       @name = name
 
-      self.process(name)
-      self.read_yaml(File.join(base, dir), name)
+
+      process(name)
+      read_yaml(File.join(base, dir), name)
+
+      data.default_proc = proc do |hash, key|
+        site.frontmatter_defaults.find(File.join(dir, name), type, key)
+      end
     end
 
     # The generated directory into which the page will be placed
@@ -44,11 +51,11 @@ module Jekyll
     #
     # Returns the String permalink or nil if none has been set.
     def permalink
-      return nil if self.data.nil? || self.data['permalink'].nil?
+      return nil if data.nil? || data['permalink'].nil?
       if site.config['relative_permalinks']
-        File.join(@dir, self.data['permalink'])
+        File.join(@dir, data['permalink'])
       else
-        self.data['permalink']
+        data['permalink']
       end
     end
 
@@ -56,7 +63,7 @@ module Jekyll
     #
     # Returns the template String.
     def template
-      if self.site.permalink_style == :pretty
+      if site.permalink_style == :pretty
         if index? && html?
           "/:path/"
         elsif html?
@@ -85,8 +92,8 @@ module Jekyll
     def url_placeholders
       {
         :path       => @dir,
-        :basename   => self.basename,
-        :output_ext => self.output_ext
+        :basename   => basename,
+        :output_ext => output_ext
       }
     end
 
@@ -97,7 +104,7 @@ module Jekyll
     # Returns nothing.
     def process(name)
       self.ext = File.extname(name)
-      self.basename = name[0 .. -self.ext.length-1]
+      self.basename = name[0 .. -ext.length - 1]
     end
 
     # Add any necessary layouts to this post
@@ -107,10 +114,10 @@ module Jekyll
     #
     # Returns nothing.
     def render(layouts, site_payload)
-      payload = {
-        "page" => self.to_liquid,
+      payload = Utils.deep_merge_hashes({
+        "page" => to_liquid,
         'paginator' => pager.to_liquid
-      }.deep_merge(site_payload)
+      }, site_payload)
 
       do_layout(payload, layouts)
     end
@@ -119,12 +126,12 @@ module Jekyll
     #
     # Returns the path to the source file
     def path
-      self.data.fetch('path', self.relative_path.sub(/\A\//, ''))
+      data.fetch('path', relative_path.sub(/\A\//, ''))
     end
 
     # The path to the page source file, relative to the site source
     def relative_path
-      File.join(@dir, @name)
+      File.join(*[@dir, @name].map(&:to_s).reject(&:empty?))
     end
 
     # Obtain destination path.
@@ -133,14 +140,14 @@ module Jekyll
     #
     # Returns the destination file path String.
     def destination(dest)
-      path = Jekyll.sanitized_path(dest, url)
+      path = Jekyll.sanitized_path(dest, URL.unescape_path(url))
       path = File.join(path, "index.html") if url =~ /\/$/
       path
     end
 
     # Returns the object as a debug String.
     def inspect
-      "#<Jekyll:Page @name=#{self.name.inspect}>"
+      "#<Jekyll:Page @name=#{name.inspect}>"
     end
 
     # Returns the Boolean of whether this Page is HTML or not.
@@ -154,7 +161,7 @@ module Jekyll
     end
 
     def uses_relative_permalinks
-      permalink && @dir != "" && site.config['relative_permalinks']
+      permalink && !@dir.empty? && site.config['relative_permalinks']
     end
   end
 end
diff --git a/lib/jekyll/plugin.rb b/lib/jekyll/plugin.rb
index 2613f70..94c0b28 100644
--- a/lib/jekyll/plugin.rb
+++ b/lib/jekyll/plugin.rb
@@ -6,22 +6,15 @@ module Jekyll
                    :high => 10,
                    :highest => 100 }
 
-    # Install a hook so that subclasses are recorded. This method is only
-    # ever called by Ruby itself.
+    # Fetch all the subclasses of this class and its subclasses' subclasses.
     #
-    # base - The Class subclass.
-    #
-    # Returns nothing.
-    def self.inherited(base)
-      subclasses << base
-      subclasses.sort!
-    end
-
-    # The list of Classes that have been subclassed.
-    #
-    # Returns an Array of Class objects.
-    def self.subclasses
-      @subclasses ||= []
+    # Returns an array of descendant classes.
+    def self.descendants
+      descendants = []
+      ObjectSpace.each_object(singleton_class) do |k|
+        descendants.unshift k unless k == self
+      end
+      descendants
     end
 
     # Get or set the priority of this plugin. When called without an
diff --git a/lib/jekyll/plugin_manager.rb b/lib/jekyll/plugin_manager.rb
new file mode 100644
index 0000000..7b817e3
--- /dev/null
+++ b/lib/jekyll/plugin_manager.rb
@@ -0,0 +1,76 @@
+module Jekyll
+  class PluginManager
+    attr_reader :site
+
+    # Create an instance of this class.
+    #
+    # site - the instance of Jekyll::Site we're concerned with
+    #
+    # Returns nothing
+    def initialize(site)
+      @site = site
+    end
+
+    # Require all the plugins which are allowed.
+    #
+    # Returns nothing
+    def conscientious_require
+      require_plugin_files
+      require_gems
+    end
+
+    # Require each of the gem plugins specified.
+    #
+    # Returns nothing.
+    def require_gems
+      site.gems.each do |gem|
+        if plugin_allowed?(gem)
+          require gem
+        end
+      end
+    end
+
+    # Check whether a gem plugin is allowed to be used during this build.
+    #
+    # gem_name - the name of the gem
+    #
+    # Returns true if the gem name is in the whitelist or if the site is not
+    #   in safe mode.
+    def plugin_allowed?(gem_name)
+      !site.safe || whitelist.include?(gem_name)
+    end
+
+    # Build an array of allowed plugin gem names.
+    #
+    # Returns an array of strings, each string being the name of a gem name
+    #   that is allowed to be used.
+    def whitelist
+      @whitelist ||= Array[site.config['whitelist']].flatten
+    end
+
+    # Require all .rb files if safe mode is off
+    #
+    # Returns nothing.
+    def require_plugin_files
+      unless site.safe
+        plugins_path.each do |plugins|
+          Dir[File.join(plugins, "**", "*.rb")].sort.each do |f|
+            require f
+          end
+        end
+      end
+    end
+
+    # Public: Setup the plugin search path
+    #
+    # Returns an Array of plugin search paths
+    def plugins_path
+      if (site.config['plugins'] == Jekyll::Configuration::DEFAULTS['plugins'])
+        [Jekyll.sanitized_path(site.source, site.config['plugins'])]
+      else
+        Array(site.config['plugins']).map { |d| File.expand_path(d) }
+      end
+    end
+
+  end
+end
diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb
index 0a1eb42..e570930 100644
--- a/lib/jekyll/post.rb
+++ b/lib/jekyll/post.rb
@@ -9,6 +9,7 @@ module Jekyll
     EXCERPT_ATTRIBUTES_FOR_LIQUID = %w[
       title
       url
+      dir
       date
       id
       categories
@@ -34,7 +35,7 @@ module Jekyll
 
     attr_accessor :site
     attr_accessor :data, :extracted_excerpt, :content, :output, :ext
-    attr_accessor :date, :slug, :published, :tags, :categories
+    attr_accessor :date, :slug, :tags, :categories
 
     attr_reader :name
 
@@ -48,25 +49,27 @@ module Jekyll
     def initialize(site, source, dir, name)
       @site = site
       @dir = dir
-      @base = self.containing_dir(source, dir)
+      @base = containing_dir(source, dir)
       @name = name
 
       self.categories = dir.downcase.split('/').reject { |x| x.empty? }
-      self.process(name)
-      self.read_yaml(@base, name)
+      process(name)
+      read_yaml(@base, name)
 
-      if self.data.has_key?('date')
-        self.date = Time.parse(self.data["date"].to_s)
+      data.default_proc = proc do |hash, key|
+        site.frontmatter_defaults.find(File.join(dir, name), type, key)
       end
 
-      self.published = self.published?
+      if data.has_key?('date')
+        self.date = Time.parse(data["date"].to_s)
+      end
 
-      self.populate_categories
-      self.populate_tags
+      populate_categories
+      populate_tags
     end
 
     def published?
-      if self.data.has_key?('published') && self.data['published'] == false
+      if data.has_key?('published') && data['published'] == false
         false
       else
         true
@@ -74,19 +77,19 @@ module Jekyll
     end
 
     def populate_categories
-      if self.categories.empty?
-        self.categories = self.data.pluralized_array('category', 'categories').map {|c| c.to_s.downcase}
-      end
-      self.categories.flatten!
+      categories_from_data = Utils.pluralized_array_from_hash(data, 'category', 'categories')
+      self.categories = (
+        Array(categories) + categories_from_data
+      ).map {|c| c.to_s.downcase}.flatten.uniq
     end
 
     def populate_tags
-      self.tags = self.data.pluralized_array("tag", "tags").flatten
+      self.tags = Utils.pluralized_array_from_hash(data, "tag", "tags").flatten
     end
 
     # Get the full path to the directory containing the post files
     def containing_dir(source, dir)
-      File.join(source, dir, '_posts')
+      return File.join(source, dir, '_posts')
     end
 
     # Read the YAML frontmatter.
@@ -97,7 +100,7 @@ module Jekyll
     # Returns nothing.
     def read_yaml(base, name)
       super(base, name)
-      self.extracted_excerpt = self.extract_excerpt
+      self.extracted_excerpt = extract_excerpt
     end
 
     # The post excerpt. This is either a custom excerpt
@@ -105,19 +108,19 @@ module Jekyll
     #
     # Returns excerpt string.
     def excerpt
-      self.data.fetch('excerpt', self.extracted_excerpt.to_s)
+      data.fetch('excerpt', extracted_excerpt.to_s)
     end
 
     # Public: the Post title, from the YAML Front-Matter or from the slug
     #
     # Returns the post title
     def title
-      self.data.fetch("title", self.titleized_slug)
+      data.fetch("title", titleized_slug)
     end
 
     # Turns the post slug into a suitable title
     def titleized_slug
-      self.slug.split('-').select {|w| w.capitalize! || w }.join(' ')
+      slug.split('-').select {|w| w.capitalize! || w }.join(' ')
     end
 
     # Public: the path to the post relative to the site source,
@@ -127,12 +130,12 @@ module Jekyll
     #
     # Returns the path to the file relative to the site source
     def path
-      self.data.fetch('path', self.relative_path.sub(/\A\//, ''))
+      data.fetch('path', relative_path.sub(/\A\//, ''))
     end
 
     # The path to the post source file, relative to the site source
     def relative_path
-      File.join(@dir, '_posts', @name)
+      File.join(*[@dir, "_posts", @name].map(&:to_s).reject(&:empty?))
     end
 
     # Compares Post objects. First compares the Post date. If the dates are
@@ -156,11 +159,16 @@ module Jekyll
     # Returns nothing.
     def process(name)
       m, cats, date, slug, ext = *name.match(MATCHER)
+      self.categories ||= []
+      self.categories += (cats || '').downcase.split('/')
       self.date = Time.parse(date)
       self.slug = slug
       self.ext = ext
     rescue ArgumentError
-      raise FatalException.new("Post #{name} does not have a valid date.")
+      path = File.join(@dir || "", name)
+      msg  =  "Post '#{path}' does not have a valid date.\n"
+      msg  << "Fix the date, or exclude the file or directory from being processed"
+      raise Errors::FatalException.new(msg)
     end
 
     # The generated directory into which the post will be placed
@@ -178,11 +186,11 @@ module Jekyll
     #
     # Returns the String permalink.
     def permalink
-      self.data && self.data['permalink']
+      data && data['permalink']
     end
 
     def template
-      case self.site.permalink_style
+      case site.permalink_style
       when :pretty
         "/:categories/:year/:month/:day/:title/"
       when :none
@@ -192,7 +200,7 @@ module Jekyll
       when :ordinal
         "/:categories/:year/:y_day/:title.html"
       else
-        self.site.permalink_style.to_s
+        site.permalink_style.to_s
       end
     end
 
@@ -214,13 +222,14 @@ module Jekyll
         :year        => date.strftime("%Y"),
         :month       => date.strftime("%m"),
         :day         => date.strftime("%d"),
-        :title       => CGI.escape(slug),
+        :title       => slug,
         :i_day       => date.strftime("%d").to_i.to_s,
         :i_month     => date.strftime("%m").to_i.to_s,
-        :categories  => (categories || []).map { |c| URI.escape(c.to_s) }.join('/'),
+        :categories  => (categories || []).map { |c| c.to_s }.join('/'),
         :short_month => date.strftime("%b"),
+        :short_year  => date.strftime("%y"),
         :y_day       => date.strftime("%j"),
-        :output_ext  => self.output_ext
+        :output_ext  => output_ext
       }
     end
 
@@ -229,7 +238,7 @@ module Jekyll
     #
     # Returns the String UID.
     def id
-      File.join(self.dir, self.slug)
+      File.join(dir, slug)
     end
 
     # Calculate related posts.
@@ -247,16 +256,16 @@ module Jekyll
     # Returns nothing.
     def render(layouts, site_payload)
       # construct payload
-      payload = {
+      payload = Utils.deep_merge_hashes({
         "site" => { "related_posts" => related_posts(site_payload["site"]["posts"]) },
-        "page" => self.to_liquid(EXCERPT_ATTRIBUTES_FOR_LIQUID)
-      }.deep_merge(site_payload)
+        "page" => to_liquid(self.class::EXCERPT_ATTRIBUTES_FOR_LIQUID)
+      }, site_payload)
 
       if generate_excerpt?
-        self.extracted_excerpt.do_layout(payload, {})
+        extracted_excerpt.do_layout(payload, {})
       end
 
-      do_layout(payload.merge({"page" => self.to_liquid}), layouts)
+      do_layout(payload.merge({"page" => to_liquid}), layouts)
     end
 
     # Obtain destination path.
@@ -266,30 +275,29 @@ module Jekyll
     # Returns destination file path String.
     def destination(dest)
       # The url needs to be unescaped in order to preserve the correct filename
-      path = Jekyll.sanitized_path(dest, CGI.unescape(url))
+      path = Jekyll.sanitized_path(dest, URL.unescape_path(url))
       path = File.join(path, "index.html") if path[/\.html$/].nil?
       path
     end
 
     # Returns the shorthand String identifier of this Post.
     def inspect
-      "<Post: #{self.id}>"
+      "<Post: #{id}>"
     end
 
     def next
-      pos = self.site.posts.index(self)
-
-      if pos && pos < self.site.posts.length-1
-        self.site.posts[pos+1]
+      pos = site.posts.index {|post| post.equal?(self) }
+      if pos && pos < site.posts.length - 1
+        site.posts[pos + 1]
       else
         nil
       end
     end
 
     def previous
-      pos = self.site.posts.index(self)
+      pos = site.posts.index {|post| post.equal?(self) }
       if pos && pos > 0
-        self.site.posts[pos-1]
+        site.posts[pos - 1]
       else
         nil
       end
diff --git a/lib/jekyll/publisher.rb b/lib/jekyll/publisher.rb
new file mode 100644
index 0000000..e86e96b
--- /dev/null
+++ b/lib/jekyll/publisher.rb
@@ -0,0 +1,21 @@
+module Jekyll
+  class Publisher
+    def initialize(site)
+      @site = site
+    end
+
+    def publish?(thing)
+      can_be_published?(thing) && !hidden_in_the_future?(thing)
+    end
+
+    private
+
+    def can_be_published?(thing)
+      thing.data.fetch('published', true) || @site.unpublished
+    end
+
+    def hidden_in_the_future?(thing)
+      thing.is_a?(Post) && !@site.future && thing.date > @site.time
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/jekyll/related_posts.rb b/lib/jekyll/related_posts.rb
index f3040c1..bc71ebd 100644
--- a/lib/jekyll/related_posts.rb
+++ b/lib/jekyll/related_posts.rb
@@ -14,9 +14,9 @@ module Jekyll
     end
 
     def build
-      return [] unless self.site.posts.size > 1
+      return [] unless site.posts.size > 1
 
-      if self.site.lsi
+      if site.lsi
         build_index
         lsi_related_posts
       else
@@ -30,7 +30,7 @@ module Jekyll
         lsi = Classifier::LSI.new(:auto_rebuild => false)
         display("Populating LSI...")
 
-        self.site.posts.each do |x|
+        site.posts.each do |x|
           lsi.add_item(x)
         end
 
@@ -42,11 +42,11 @@ module Jekyll
     end
 
     def lsi_related_posts
-      self.class.lsi.find_related(post.content, 11) - [self.post]
+      self.class.lsi.find_related(post.content, 11) - [post]
     end
 
     def most_recent_posts
-      recent_posts = self.site.posts.reverse - [self.post]
+      recent_posts = site.posts.reverse - [post]
       recent_posts.first(10)
     end
 
diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb
new file mode 100644
index 0000000..25a1552
--- /dev/null
+++ b/lib/jekyll/renderer.rb
@@ -0,0 +1,148 @@
+module Jekyll
+  class Renderer
+
+    attr_reader :document, :site
+
+    def initialize(site, document)
+      @site     = site
+      @document = document
+    end
+
+    # Determine which converters to use based on this document's
+    # extension.
+    #
+    # Returns an array of Converter instances.
+    def converters
+      @converters ||= site.converters.select { |c| c.matches(document.extname) }
+    end
+
+    # Determine the extname the outputted file should have
+    #
+    # Returns the output extname including the leading period.
+    def output_ext
+      converters.first.output_ext(document.extname)
+    end
+
+    ######################
+    ## DAT RENDER THO
+    ######################
+
+    def run
+      payload = Utils.deep_merge_hashes({
+        "page" => document.to_liquid
+      }, site.site_payload)
+
+      info = {
+        filters:   [Jekyll::Filters],
+        registers: { :site => site, :page => payload['page'] }
+      }
+
+      # render and transform content (this becomes the final content of the object)
+      payload["highlighter_prefix"] = converters.first.highlighter_prefix
+      payload["highlighter_suffix"] = converters.first.highlighter_suffix
+
+      output = document.content
+
+      if document.render_with_liquid?
+        output = render_liquid(output, payload, info)
+      end
+
+      if document.place_in_layout?
+        place_in_layouts(
+          convert(output),
+          payload,
+          info
+        )
+      else
+        convert(output)
+      end
+    end
+
+    # Convert the given content using the converters which match this renderer's document.
+    #
+    # content - the raw, unconverted content
+    #
+    # Returns the converted content.
+    def convert(content)
+      converters.reduce(content) do |output, converter|
+        begin
+          converter.convert output
+        rescue => e
+          Jekyll.logger.error "Conversion error:", "#{converter.class} encountered an error converting '#{document.relative_path}'."
+          raise e
+        end
+      end
+    end
+
+    # Render the given content with the payload and info
+    #
+    # content -
+    # payload -
+    # info    -
+    # path    - (optional) the path to the file, for use in ex
+    #
+    # Returns the content, rendered by Liquid.
+    def render_liquid(content, payload, info, path = nil)
+      Liquid::Template.parse(content).render!(payload, info)
+    rescue Tags::IncludeTagError => e
+      Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{e.path}, included in #{path || document.relative_path}"
+      raise e
+    rescue Exception => e
+      Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{path || document.relative_path}"
+      raise e
+    end
+
+    # Checks if the layout specified in the document actually exists
+    #
+    # layout - the layout to check
+    #
+    # Returns true if the layout is invalid, false if otherwise
+    def invalid_layout?(layout)
+      !document.data["layout"].nil? && layout.nil?
+    end
+
+    # Render layouts and place given content inside.
+    #
+    # content - the content to be placed in the layout
+    #
+    #
+    # Returns the content placed in the Liquid-rendered layouts
+    def place_in_layouts(content, payload, info)
+      output = content.dup
+      layout = site.layouts[document.data["layout"]]
+
+      Jekyll.logger.warn("Build Warning:", "Layout '#{document.data["layout"]}' requested in #{document.relative_path} does not exist.") if invalid_layout? layout
+
+      used   = Set.new([layout])
+
+      while layout
+        payload = Utils.deep_merge_hashes(
+          payload,
+          {
+            "content" => output,
+            "page"    => document.to_liquid,
+            "layout"  => layout.data
+          }
+        )
+
+        output = render_liquid(
+          layout.content,
+          payload,
+          info,
+          File.join(site.config['layouts'], layout.name)
+        )
+
+        if layout = site.layouts[layout.data["layout"]]
+          if used.include?(layout)
+            layout = nil # avoid recursive chain
+          else
+            used << layout
+          end
+        end
+      end
+
+      output
+    end
+
+  end
+end
diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb
index 2ce1c02..15bacb1 100644
--- a/lib/jekyll/site.rb
+++ b/lib/jekyll/site.rb
@@ -1,9 +1,10 @@
 module Jekyll
   class Site
     attr_accessor :config, :layouts, :posts, :pages, :static_files,
-                  :categories, :exclude, :include, :source, :dest, :lsi, :pygments,
-                  :permalink_style, :tags, :time, :future, :safe, :plugins, :limit_posts,
-                  :show_drafts, :keep_files, :baseurl, :data, :file_read_opts, :gems
+                  :exclude, :include, :source, :dest, :lsi, :highlighter,
+                  :permalink_style, :time, :future, :unpublished, :safe, :plugins, :limit_posts,
+                  :show_drafts, :keep_files, :baseurl, :data, :file_read_opts, :gems,
+                  :plugin_manager
 
     attr_accessor :converters, :generators
 
@@ -11,54 +12,52 @@ module Jekyll
     #
     # config - A Hash containing site configuration details.
     def initialize(config)
-      self.config          = config.clone
+      self.config = config.clone
 
-      %w[safe lsi pygments baseurl exclude include future show_drafts limit_posts keep_files gems].each do |opt|
+      %w[safe lsi highlighter baseurl exclude include future unpublished
+        show_drafts limit_posts keep_files gems].each do |opt|
         self.send("#{opt}=", config[opt])
       end
 
       self.source          = File.expand_path(config['source'])
       self.dest            = File.expand_path(config['destination'])
-      self.plugins         = plugins_path
       self.permalink_style = config['permalink'].to_sym
 
+      self.plugin_manager = Jekyll::PluginManager.new(self)
+      self.plugins        = plugin_manager.plugins_path
+
       self.file_read_opts = {}
       self.file_read_opts[:encoding] = config['encoding'] if config['encoding']
 
-      self.reset
-      self.setup
+      reset
+      setup
     end
 
     # Public: Read, process, and write this Site to output.
     #
     # Returns nothing.
     def process
-      self.reset
-      self.read
-      self.generate
-      self.render
-      self.cleanup
-      self.write
+      reset
+      read
+      generate
+      render
+      cleanup
+      write
     end
 
     # Reset Site details.
     #
     # Returns nothing
     def reset
-      self.time            = if self.config['time']
-                               Time.parse(self.config['time'].to_s)
-                             else
-                               Time.now
-                             end
-      self.layouts         = {}
-      self.posts           = []
-      self.pages           = []
-      self.static_files    = []
-      self.categories      = Hash.new { |hash, key| hash[key] = [] }
-      self.tags            = Hash.new { |hash, key| hash[key] = [] }
-      self.data            = {}
-
-      if self.limit_posts < 0
+      self.time = (config['time'] ? Time.parse(config['time'].to_s) : Time.now)
+      self.layouts = {}
+      self.posts = []
+      self.pages = []
+      self.static_files = []
+      self.data = {}
+      @collections = nil
+
+      if limit_posts < 0
         raise ArgumentError, "limit_posts must be a non-negative number"
       end
     end
@@ -69,18 +68,7 @@ module Jekyll
     def setup
       ensure_not_in_dest
 
-      # If safe mode is off, load in any Ruby files under the plugins
-      # directory.
-      unless self.safe
-        self.plugins.each do |plugins|
-            Dir[File.join(plugins, "**/*.rb")].sort.each do |f|
-              require f
-            end
-        end
-        self.gems.each do |gem|
-          require gem
-        end
-      end
+      plugin_manager.conscientious_require
 
       self.converters = instantiate_subclasses(Jekyll::Converter)
       self.generators = instantiate_subclasses(Jekyll::Generator)
@@ -89,22 +77,37 @@ module Jekyll
     # Check that the destination dir isn't the source dir or a directory
     # parent to the source dir.
     def ensure_not_in_dest
-      dest = Pathname.new(self.dest)
-      Pathname.new(self.source).ascend do |path|
-        if path == dest
-          raise FatalException.new "Destination directory cannot be or contain the Source directory."
+      dest_pathname = Pathname.new(dest)
+      Pathname.new(source).ascend do |path|
+        if path == dest_pathname
+          raise Errors::FatalException.new "Destination directory cannot be or contain the Source directory."
         end
       end
     end
 
-    # Internal: Setup the plugin search path
+    # The list of collections and their corresponding Jekyll::Collection instances.
+    # If config['collections'] is set, a new instance is created for each item in the collection.
+    # If config['collections'] is not set, a new hash is returned.
     #
-    # Returns an Array of plugin search paths
-    def plugins_path
-      if (config['plugins'] == Jekyll::Configuration::DEFAULTS['plugins'])
-        [File.join(self.source, config['plugins'])]
+    # Returns a Hash containing collection name-to-instance pairs.
+    def collections
+      @collections ||= Hash[collection_names.map { |coll| [coll, Jekyll::Collection.new(self, coll)] } ]
+    end
+
+    # The list of collection names.
+    #
+    # Returns an array of collection names from the configuration,
+    #   or an empty array if the `collections` key is not set.
+    def collection_names
+      case config['collections']
+      when Hash
+        config['collections'].keys
+      when Array
+        config['collections']
+      when nil
+        []
       else
-        Array(config['plugins']).map { |d| File.expand_path(d) }
+        raise ArgumentError, "Your `collections` key must be a hash or an array."
       end
     end
 
@@ -112,25 +115,10 @@ module Jekyll
     #
     # Returns nothing.
     def read
-      self.read_layouts
-      self.read_directories
-      self.read_data(config['data_source'])
-    end
-
-    # Read all the files in <source>/<layouts> and create a new Layout object
-    # with each one.
-    #
-    # Returns nothing.
-    def read_layouts
-      base = File.join(self.source, self.config['layouts'])
-      return unless File.exists?(base)
-      entries = []
-      Dir.chdir(base) { entries = filter_entries(Dir['**/*.*']) }
-
-      entries.each do |f|
-        name = f.split(".")[0..-2].join(".")
-        self.layouts[name] = Layout.new(self, base, f)
-      end
+      self.layouts = LayoutReader.new(self).read
+      read_directories
+      read_data(config['data_source'])
+      read_collections
     end
 
     # Recursively traverse directories to find posts, pages and static files
@@ -141,25 +129,28 @@ module Jekyll
     #
     # Returns nothing.
     def read_directories(dir = '')
-      base = File.join(self.source, dir)
-      entries = Dir.chdir(base) { filter_entries(Dir.entries('.')) }
+      base = File.join(source, dir)
+      entries = Dir.chdir(base) { filter_entries(Dir.entries('.'), base) }
 
-      self.read_posts(dir)
-      self.read_drafts(dir) if self.show_drafts
-      self.posts.sort!
+      read_posts(dir)
+      read_drafts(dir) if show_drafts
+      posts.sort!
       limit_posts! if limit_posts > 0 # limit the posts if :limit_posts option is set
 
       entries.each do |f|
         f_abs = File.join(base, f)
         if File.directory?(f_abs)
           f_rel = File.join(dir, f)
-          read_directories(f_rel) unless self.dest.sub(/\/$/, '') == f_abs
+          read_directories(f_rel) unless dest.sub(/\/$/, '') == f_abs
         elsif has_yaml_header?(f_abs)
-          pages << Page.new(self, self.source, dir, f)
+          page = Page.new(self, source, dir, f)
+          pages << page if publisher.publish?(page)
         else
-          static_files << StaticFile.new(self, self.source, dir, f)
+          static_files << StaticFile.new(self, source, dir, f)
         end
       end
+
+      pages.sort_by!(&:name)
     end
 
     # Read all the files in <source>/<dir>/_posts and create a new Post
@@ -169,14 +160,12 @@ module Jekyll
     #
     # Returns nothing.
     def read_posts(dir)
-      posts = read_things(dir, '_posts', Post)
+      posts = read_content(dir, '_posts', Post)
 
       posts.each do |post|
-        if post.published && (self.future || post.date <= self.time)
-          aggregate_post_info(post)
-        end
+        aggregate_post_info(post) if publisher.publish?(post)
       end
-   end
+    end
 
     # Read all the files in <source>/<dir>/_drafts and create a new Post
     # object with each one.
@@ -185,16 +174,18 @@ module Jekyll
     #
     # Returns nothing.
     def read_drafts(dir)
-      drafts = read_things(dir, '_drafts', Draft)
+      drafts = read_content(dir, '_drafts', Draft)
 
       drafts.each do |draft|
-        aggregate_post_info(draft)
+        if draft.published?
+          aggregate_post_info(draft)
+        end
       end
     end
 
-    def read_things(dir, magic_dir, klass)
+    def read_content(dir, magic_dir, klass)
       get_entries(dir, magic_dir).map do |entry|
-        klass.new(self, self.source, dir, entry) if klass.valid?(entry)
+        klass.new(self, source, dir, entry) if klass.valid?(entry)
       end.reject do |entry|
         entry.nil?
       end
@@ -204,18 +195,43 @@ module Jekyll
     #
     # Returns nothing
     def read_data(dir)
-      base = File.join(self.source, dir)
-      return unless File.directory?(base) && (!self.safe || !File.symlink?(base))
+      base = Jekyll.sanitized_path(source, dir)
+      read_data_to(base, self.data)
+    end
 
-      entries = Dir.chdir(base) { Dir['*.{yaml,yml}'] }
-      entries.delete_if { |e| File.directory?(File.join(base, e)) }
+    # Read and parse all yaml files under <dir> and add them to the
+    # <data> variable.
+    #
+    # dir - The string absolute path of the directory to read.
+    # data - The variable to which data will be added.
+    #
+    # Returns nothing
+    def read_data_to(dir, data)
+      return unless File.directory?(dir) && (!safe || !File.symlink?(dir))
+
+      entries = Dir.chdir(dir) do
+        Dir['*.{yaml,yml,json}'] + Dir['*'].select { |fn| File.directory?(fn) }
+      end
 
       entries.each do |entry|
-        path = File.join(self.source, dir, entry)
-        next if File.symlink?(path) && self.safe
+        path = Jekyll.sanitized_path(dir, entry)
+        next if File.symlink?(path) && safe
 
         key = sanitize_filename(File.basename(entry, '.*'))
-        self.data[key] = YAML.safe_load_file(path)
+        if File.directory?(path)
+          read_data_to(path, data[key] = {})
+        else
+          data[key] = SafeYAML.load_file(path)
+        end
+      end
+    end
+
+    # Read in all collections specified in the configuration
+    #
+    # Returns nothing.
+    def read_collections
+      collections.each do |_, collection|
+        collection.read unless collection.label.eql?("data")
       end
     end
 
@@ -223,7 +239,7 @@ module Jekyll
     #
     # Returns nothing.
     def generate
-      self.generators.each do |generator|
+      generators.each do |generator|
         generator.generate(self)
       end
     end
@@ -234,13 +250,16 @@ module Jekyll
     def render
       relative_permalinks_deprecation_method
 
-      payload = site_payload
-      [self.posts, self.pages].flatten.each do |page_or_post|
-        page_or_post.render(self.layouts, payload)
+      collections.each do |label, collection|
+        collection.docs.each do |document|
+          document.output = Jekyll::Renderer.new(self, document).run
+        end
       end
 
-      self.categories.values.map { |ps| ps.sort! { |a, b| b <=> a } }
-      self.tags.values.map { |ps| ps.sort! { |a, b| b <=> a } }
+      payload = site_payload
+      [posts, pages].flatten.each do |page_or_post|
+        page_or_post.render(layouts, payload)
+      end
     rescue Errno::ENOENT => e
       # ignore missing layout dir
     end
@@ -256,7 +275,7 @@ module Jekyll
     #
     # Returns nothing.
     def write
-      each_site_file { |item| item.write(self.dest) }
+      each_site_file { |item| item.write(dest) }
     end
 
     # Construct a Hash of Posts indexed by the specified Post attribute.
@@ -275,18 +294,26 @@ module Jekyll
     def post_attr_hash(post_attr)
       # Build a hash map based on the specified post attribute ( post attr =>
       # array of posts ) then sort each array in reverse order.
-      hash = Hash.new { |hsh, key| hsh[key] = Array.new }
-      self.posts.each { |p| p.send(post_attr.to_sym).each { |t| hash[t] << p } }
-      hash.values.map { |sortme| sortme.sort! { |a, b| b <=> a } }
+      hash = Hash.new { |h, key| h[key] = [] }
+      posts.each { |p| p.send(post_attr.to_sym).each { |t| hash[t] << p } }
+      hash.values.each { |posts| posts.sort!.reverse! }
       hash
     end
 
+    def tags
+      post_attr_hash('tags')
+    end
+
+    def categories
+      post_attr_hash('categories')
+    end
+
     # Prepare site data for site payload. The method maintains backward compatibility
     # if the key 'data' is already used in _config.yml.
     #
     # Returns the Hash to be hooked to site.data.
     def site_data
-      self.config['data'] || self.data
+      config['data'] || data
     end
 
     # The Hash payload containing site-wide data.
@@ -303,15 +330,25 @@ module Jekyll
     #   "tags"       - The Hash of tag values and Posts.
     #                  See Site#post_attr_hash for type info.
     def site_payload
-      {"jekyll" => { "version" => Jekyll::VERSION },
-       "site" => self.config.merge({
-          "time"       => self.time,
-          "posts"      => self.posts.sort { |a, b| b <=> a },
-          "pages"      => self.pages,
-          "html_pages" => self.pages.reject { |page| !page.html? },
-          "categories" => post_attr_hash('categories'),
-          "tags"       => post_attr_hash('tags'),
-          "data"       => site_data})}
+      {
+        "jekyll" => {
+          "version" => Jekyll::VERSION,
+          "environment" => Jekyll.env
+        },
+        "site"   => Utils.deep_merge_hashes(config,
+          Utils.deep_merge_hashes(Hash[collections.map{|label, coll| [label, coll.docs]}], {
+            "time"         => time,
+            "posts"        => posts.sort { |a, b| b <=> a },
+            "pages"        => pages,
+            "static_files" => static_files.sort { |a, b| a.relative_path <=> b.relative_path },
+            "html_pages"   => pages.select { |page| page.html? || page.url.end_with?("/") },
+            "categories"   => post_attr_hash('categories'),
+            "tags"         => post_attr_hash('tags'),
+            "collections"  => collections,
+            "documents"    => documents,
+            "data"         => site_data
+        }))
+      }
     end
 
     # Filter out any files/directories that are hidden or backup files (start
@@ -322,8 +359,8 @@ module Jekyll
     # entries - The Array of String file/directory entries to filter.
     #
     # Returns the Array of filtered entries.
-    def filter_entries(entries)
-      EntryFilter.new(self).filter(entries)
+    def filter_entries(entries, base_directory = nil)
+      EntryFilter.new(self, base_directory).filter(entries)
     end
 
     # Get the implementation class for the given Converter.
@@ -332,7 +369,7 @@ module Jekyll
     #
     # Returns the Converter instance implementing the given Converter.
     def getConverterImpl(klass)
-      matches = self.converters.select { |c| c.class == klass }
+      matches = converters.select { |c| c.class == klass }
       if impl = matches.first
         impl
       else
@@ -348,10 +385,10 @@ module Jekyll
     #
     # Returns array of instances of subclasses of parameter
     def instantiate_subclasses(klass)
-      klass.subclasses.select do |c|
-        !self.safe || c.safe
+      klass.descendants.select do |c|
+        !safe || c.safe
       end.sort.map do |c|
-        c.new(self.config)
+        c.new(config)
       end
     end
 
@@ -362,9 +399,9 @@ module Jekyll
     #
     # Returns the list of entries to process
     def get_entries(dir, subfolder)
-      base = File.join(self.source, dir, subfolder)
-      return [] unless File.exists?(base)
-      entries = Dir.chdir(base) { filter_entries(Dir['**/*']) }
+      base = File.join(source, dir, subfolder)
+      return [] unless File.exist?(base)
+      entries = Dir.chdir(base) { filter_entries(Dir['**/*'], base) }
       entries.delete_if { |e| File.directory?(File.join(base, e)) }
     end
 
@@ -374,44 +411,54 @@ module Jekyll
     #
     # Returns nothing
     def aggregate_post_info(post)
-      self.posts << post
-      post.categories.each { |c| self.categories[c] << post }
-      post.tags.each { |c| self.tags[c] << post }
+      posts << post
     end
 
     def relative_permalinks_deprecation_method
       if config['relative_permalinks'] && has_relative_page?
-        $stderr.puts # Places newline after "Generating..."
         Jekyll.logger.warn "Deprecation:", "Starting in 2.0, permalinks for pages" +
                                             " in subfolders must be relative to the" +
                                             " site source directory, not the parent" +
                                             " directory. Check http://jekyllrb.com/docs/upgrading/"+
                                             " for more info."
-        $stderr.print Jekyll.logger.formatted_topic("") + "..." # for "done."
       end
     end
 
+    def docs_to_write
+      documents.select(&:write?)
+    end
+
+    def documents
+      collections.reduce(Set.new) do |docs, (_, collection)|
+        docs.merge(collection.docs)
+      end.to_a
+    end
+
     def each_site_file
-      %w(posts pages static_files).each do |type|
-        self.send(type).each do |item|
+      %w(posts pages static_files docs_to_write).each do |type|
+        send(type).each do |item|
           yield item
         end
       end
     end
 
+    def frontmatter_defaults
+      @frontmatter_defaults ||= FrontmatterDefaults.new(self)
+    end
+
     private
 
     def has_relative_page?
-      self.pages.any? { |page| page.uses_relative_permalinks }
+      pages.any? { |page| page.uses_relative_permalinks }
     end
 
     def has_yaml_header?(file)
-      "---" == File.open(file) { |fd| fd.read(3) }
+      !!(File.open(file, 'rb') { |f| f.read(5) } =~ /\A---\r?\n/)
     end
 
     def limit_posts!
-      limit = self.posts.length < limit_posts ? self.posts.length : limit_posts
-      self.posts = self.posts[-limit, limit]
+      limit = posts.length < limit_posts ? posts.length : limit_posts
+      self.posts = posts[-limit, limit]
     end
 
     def site_cleaner
@@ -419,9 +466,13 @@ module Jekyll
     end
 
     def sanitize_filename(name)
-      name = name.gsub(/[^\w\s_-]+/, '')
-      name = name.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
-      name = name.gsub(/\s+/, '_')
+      name.gsub!(/[^\w\s_-]+/, '')
+      name.gsub!(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
+      name.gsub(/\s+/, '_')
+    end
+
+    def publisher
+      @publisher ||= Publisher.new(self)
     end
   end
 end
diff --git a/lib/jekyll/static_file.rb b/lib/jekyll/static_file.rb
index 3d863ca..2382d03 100644
--- a/lib/jekyll/static_file.rb
+++ b/lib/jekyll/static_file.rb
@@ -18,7 +18,12 @@ module Jekyll
 
     # Returns source file path.
     def path
-      File.join(@base, @dir, @name)
+      File.join(*[@base, @dir, @name].compact)
+    end
+
+    # Returns the source file path relative to the site source
+    def relative_path
+      @relative_path ||= path.sub(/\A#{@site.source}/, '')
     end
 
     # Obtain destination path.
@@ -27,7 +32,7 @@ module Jekyll
     #
     # Returns destination file path.
     def destination(dest)
-      File.join(dest, @dir, @name)
+      File.join(*[dest, @dir, @name].compact)
     end
 
     # Returns last modification time for this file.
@@ -54,6 +59,7 @@ module Jekyll
       @@mtimes[path] = mtime
 
       FileUtils.mkdir_p(File.dirname(dest_path))
+      FileUtils.rm(dest_path) if File.exist?(dest_path)
       FileUtils.cp(path, dest_path)
 
       true
@@ -66,5 +72,13 @@ module Jekyll
       @@mtimes = Hash.new
       nil
     end
+
+    def to_liquid
+      {
+        "path"          => relative_path,
+        "modified_time" => mtime.to_s,
+        "extname"       => File.extname(relative_path)
+      }
+    end
   end
 end
diff --git a/lib/jekyll/stevenson.rb b/lib/jekyll/stevenson.rb
index 8765220..9a9f412 100644
--- a/lib/jekyll/stevenson.rb
+++ b/lib/jekyll/stevenson.rb
@@ -1,89 +1,58 @@
 module Jekyll
-  class Stevenson
-    attr_accessor :log_level
-
-    DEBUG  = 0
-    INFO   = 1
-    WARN   = 2
-    ERROR  = 3
-
-    # Public: Create a new instance of Stevenson, Jekyll's logger
-    #
-    # level - (optional, integer) the log level
-    #
-    # Returns nothing
-    def initialize(level = INFO)
-      @log_level = level
-    end
-    
-    # Public: Print a jekyll debug message to stdout
-    #
-    # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
-    # message - the message detail
-    #
-    # Returns nothing
-    def debug(topic, message = nil)
-      $stdout.puts(message(topic, message)) if log_level <= DEBUG
-    end
-
-    # Public: Print a jekyll message to stdout
-    #
-    # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
-    # message - the message detail
-    #
-    # Returns nothing
-    def info(topic, message = nil)
-      $stdout.puts(message(topic, message)) if log_level <= INFO
-    end
-
-    # Public: Print a jekyll message to stderr
-    #
-    # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
-    # message - the message detail
-    #
-    # Returns nothing
-    def warn(topic, message = nil)
-      $stderr.puts(message(topic, message).yellow) if log_level <= WARN
-    end
-
-    # Public: Print a jekyll error message to stderr
-    #
-    # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
-    # message - the message detail
-    #
-    # Returns nothing
-    def error(topic, message = nil)
-      $stderr.puts(message(topic, message).red) if log_level <= ERROR
-    end
-
-    # Public: Print a Jekyll error message to stderr and immediately abort the process
-    #
-    # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
-    # message - the message detail (can be omitted)
-    #
-    # Returns nothing
-    def abort_with(topic, message = nil)
-      error(topic, message)
-      abort
-    end
-
-    # Public: Build a Jekyll topic method
-    #
-    # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
-    # message - the message detail
-    #
-    # Returns the formatted message
-    def message(topic, message)
-      formatted_topic(topic) + message.to_s.gsub(/\s+/, ' ')
-    end
-
-    # Public: Format the topic
-    #
-    # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
-    #
-    # Returns the formatted topic statement
-    def formatted_topic(topic)
-      "#{topic} ".rjust(20)
+  class Stevenson < ::Logger
+    def initialize
+      @progname = nil
+      @level = DEBUG
+      @default_formatter = Formatter.new
+      @logdev = $stdout
+      @formatter = proc do |severity, datetime, progname, msg|
+        "#{msg}"
+      end
+    end
+
+    def add(severity, message = nil, progname = nil, &block)
+      severity ||= UNKNOWN
+      @logdev = set_logdevice(severity)
+
+      if @logdev.nil? or severity < @level
+        return true
+      end
+      progname ||= @progname
+      if message.nil?
+        if block_given?
+          message = yield
+        else
+          message = progname
+          progname = @progname
+        end
+      end
+      @logdev.puts(
+        format_message(format_severity(severity), Time.now, progname, message))
+      true
+    end
+
+    # Log a +WARN+ message
+    def warn(progname = nil, &block)
+      add(WARN, nil, progname.yellow, &block)
+    end
+
+    # Log an +ERROR+ message
+    def error(progname = nil, &block)
+      add(ERROR, nil, progname.red, &block)
+    end
+
+    def close
+      # No LogDevice in use
+    end
+
+    private
+
+    def set_logdevice(severity)
+      if severity > INFO
+        $stderr
+      else
+        $stdout
+      end
     end
   end
 end
diff --git a/lib/jekyll/tags/gist.rb b/lib/jekyll/tags/gist.rb
deleted file mode 100644
index f4f3288..0000000
--- a/lib/jekyll/tags/gist.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# Gist Liquid Tag
-#
-# Example:
-#    {% gist 1234567 %}
-#    {% gist 1234567 file.rb %}
-
-module Jekyll
-  class GistTag < Liquid::Tag
-
-    def render(context)
-      if tag_contents = determine_arguments(@markup.strip)
-        gist_id, filename = tag_contents[0], tag_contents[1]
-        gist_script_tag(gist_id, filename)
-      else
-        raise ArgumentError.new <<-eos
-Syntax error in tag 'gist' while parsing the following markup:
-
-  #{@markup}
-
-Valid syntax:
-  for public gists:  {% gist 1234567 %}
-  for private gists: {% gist user/1234567 %}
-eos
-      end
-    end
-
-    private
-
-    def determine_arguments(input)
-      matched = if input.include?("/")
-        input.match(/\A([a-zA-Z0-9\/\-_]+) ?(\S*)\Z/)
-      else
-        input.match(/\A(\d+) ?(\S*)\Z/)
-      end
-      [matched[1].strip, matched[2].strip] if matched && matched.length >= 3
-    end
-
-    def gist_script_tag(gist_id, filename = nil)
-      if filename.empty?
-        "<script src=\"https://gist.github.com/#{gist_id}.js\"> </script>"
-      else
-        "<script src=\"https://gist.github.com/#{gist_id}.js?file=#{filename}\"> </script>"
-      end
-    end
-  end
-end
-
-Liquid::Template.register_tag('gist', Jekyll::GistTag)
diff --git a/lib/jekyll/tags/highlight.rb b/lib/jekyll/tags/highlight.rb
index 2ea144d..837919f 100644
--- a/lib/jekyll/tags/highlight.rb
+++ b/lib/jekyll/tags/highlight.rb
@@ -4,12 +4,11 @@ module Jekyll
       include Liquid::StandardFilters
 
       # The regular expression syntax checker. Start with the language specifier.
-      # Follow that by zero or more space separated options that take one of two
-      # forms:
+      # Follow that by zero or more space separated options that take one of three
+      # forms: name, name=value, or name="<quoted list>"
       #
-      # 1. name
-      # 2. name=value
-      SYNTAX = /^([a-zA-Z0-9.+#-]+)((\s+\w+(=\w+)?)*)$/
+      # <quoted list> is a space-separated list of numbers
+      SYNTAX = /^([a-zA-Z0-9.+#-]+)((\s+\w+(=(\w+|"([0-9]+\s)*[0-9]+"))?)*)$/
 
       def initialize(tag_name, markup, tokens)
         super
@@ -17,18 +16,18 @@ module Jekyll
           @lang = $1.downcase
           @options = {}
           if defined?($2) && $2 != ''
-            $2.split.each do |opt|
+            # Split along 3 possible forms -- key="<quoted list>", key=value, or key
+            $2.scan(/(?:\w="[^"]*"|\w=\w|\w)+/) do |opt|
               key, value = opt.split('=')
-              if value.nil?
-                if key == 'linenos'
-                  value = 'inline'
-                else
-                  value = true
-                end
+              # If a quoted list, convert to array
+              if value && value.include?("\"")
+                  value.gsub!(/"/, "")
+                  value = value.split
               end
-              @options[key] = value
+              @options[key.to_sym] = value || true
             end
           end
+          @options[:linenos] = "inline" if @options.key?(:linenos) and @options[:linenos] == true
         else
           raise SyntaxError.new <<-eos
 Syntax Error in tag 'highlight' while parsing the following markup:
@@ -41,41 +40,81 @@ eos
       end
 
       def render(context)
-        if context.registers[:site].pygments
-          render_pygments(context, super)
+        prefix = context["highlighter_prefix"] || ""
+        suffix = context["highlighter_suffix"] || ""
+        code = super.to_s.strip
+
+        is_safe = !!context.registers[:site].safe
+
+        output = case context.registers[:site].highlighter
+        when 'pygments'
+          render_pygments(code, is_safe)
+        when 'rouge'
+          render_rouge(code)
         else
-          render_codehighlighter(context, super)
+          render_codehighlighter(code)
         end
+
+        rendered_output = add_code_tag(output)
+        prefix + rendered_output + suffix
       end
 
-      def render_pygments(context, code)
+      def sanitized_opts(opts, is_safe)
+        if is_safe
+          Hash[[
+            [:startinline, opts.fetch(:startinline, nil)],
+            [:hl_linenos,  opts.fetch(:hl_linenos, nil)],
+            [:linenos,     opts.fetch(:linenos, nil)],
+            [:encoding,    opts.fetch(:encoding, 'utf-8')],
+            [:cssclass,    opts.fetch(:cssclass, nil)]
+          ].reject {|f| f.last.nil? }]
+        else
+          opts
+        end
+      end
+
+      def render_pygments(code, is_safe)
         require 'pygments'
 
         @options[:encoding] = 'utf-8'
 
-        output = add_code_tags(
-          Pygments.highlight(code, :lexer => @lang, :options => @options),
-          @lang
+        highlighted_code = Pygments.highlight(
+          code,
+          :lexer   => @lang,
+          :options => sanitized_opts(@options, is_safe)
         )
 
-        output = context["pygments_prefix"] + output if context["pygments_prefix"]
-        output = output + context["pygments_suffix"] if context["pygments_suffix"]
-        output
+        if highlighted_code.nil?
+          Jekyll.logger.error "There was an error highlighting your code:"
+          puts
+          Jekyll.logger.error code
+          puts
+          Jekyll.logger.error "While attempting to convert the above code, Pygments.rb" +
+            " returned an unacceptable value."
+          Jekyll.logger.error "This is usually a timeout problem solved by running `jekyll build` again."
+          raise ArgumentError.new("Pygments.rb returned an unacceptable value when attempting to highlight some code.")
+        end
+
+        highlighted_code
+      end
+
+      def render_rouge(code)
+        require 'rouge'
+        formatter = Rouge::Formatters::HTML.new(line_numbers: @options[:linenos], wrap: false)
+        lexer = Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
+        code = formatter.format(lexer.lex(code))
+        "<div class=\"highlight\"><pre>#{code}</pre></div>"
       end
 
-      def render_codehighlighter(context, code)
-        #The div is required because RDiscount blows ass
-        <<-HTML
-  <div>
-    <pre><code class='#{@lang}'>#{h(code).strip}</code></pre>
-  </div>
-        HTML
+      def render_codehighlighter(code)
+        "<div class=\"highlight\"><pre>#{h(code).strip}</pre></div>"
       end
 
-      def add_code_tags(code, lang)
+      def add_code_tag(code)
         # Add nested <code> tags to code blocks
-        code = code.sub(/<pre>/,'<pre><code class="' + lang + '">')
-        code = code.sub(/<\/pre>/,"</code></pre>")
+        code = code.sub(/<pre>\n*/,'<pre><code class="language-' + @lang.to_s.gsub("+", "-") + '" data-lang="' + @lang.to_s + '">')
+        code = code.sub(/\n*<\/pre>/,"</code></pre>")
+        code.strip
       end
 
     end
diff --git a/lib/jekyll/tags/include.rb b/lib/jekyll/tags/include.rb
index adcdedf..f8518df 100644
--- a/lib/jekyll/tags/include.rb
+++ b/lib/jekyll/tags/include.rb
@@ -14,12 +14,19 @@ module Jekyll
       SYNTAX_EXAMPLE = "{% include file.ext param='value' param2='value' %}"
 
       VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/
+      VARIABLE_SYNTAX = /(?<variable>\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\})(?<params>.*)/
 
       INCLUDES_DIR = '_includes'
 
       def initialize(tag_name, markup, tokens)
         super
-        @file, @params = markup.strip.split(' ', 2);
+        matched = markup.strip.match(VARIABLE_SYNTAX)
+        if matched
+          @file = matched['variable'].strip
+          @params = matched['params'].strip
+        else
+          @file, @params = markup.strip.split(' ', 2);
+        end
         validate_params if @params
       end
 
@@ -48,11 +55,11 @@ module Jekyll
             raise ArgumentError.new <<-eos
 Invalid syntax for include tag. File contains invalid characters or sequences:
 
-	#{@file}
+  #{file}
 
 Valid syntax:
 
-	#{SYNTAX_EXAMPLE}
+  #{SYNTAX_EXAMPLE}
 
 eos
         end
@@ -64,11 +71,11 @@ eos
           raise ArgumentError.new <<-eos
 Invalid syntax for include tag:
 
-	#{@params}
+  #{@params}
 
 Valid syntax:
 
-	#{SYNTAX_EXAMPLE}
+  #{SYNTAX_EXAMPLE}
 
 eos
         end
@@ -79,17 +86,18 @@ eos
         context.registers[:site].file_read_opts
       end
 
-      def retrieve_variable(context)
-        if /\{\{([\w\-\.]+)\}\}/ =~ @file
-          raise ArgumentError.new("No variable #{$1} was found in include tag") if context[$1].nil?
-          context[$1]
+      # Render the variable if required
+      def render_variable(context)
+        if @file.match(VARIABLE_SYNTAX)
+          partial = Liquid::Template.parse(@file)
+          partial.render!(context)
         end
       end
 
       def render(context)
         dir = File.join(File.realpath(context.registers[:site].source), INCLUDES_DIR)
 
-        file = retrieve_variable(context) || @file
+        file = render_variable(context) || @file
         validate_file_name(file)
 
         path = File.join(dir, file)
@@ -111,21 +119,21 @@ eos
         if safe && !realpath_prefixed_with?(path, dir)
           raise IOError.new "The included file '#{path}' should exist and should not be a symlink"
         elsif !File.exist?(path)
-          raise IOError.new "Included file '#{path}' not found"
+          raise IOError.new "Included file '#{path_relative_to_source(dir, path)}' not found"
         end
       end
 
-      def realpath_prefixed_with?(path, dir)
-        File.exist?(path) && File.realpath(path).start_with?(dir)
+      def path_relative_to_source(dir, path)
+        File.join(INCLUDES_DIR, path.sub(Regexp.new("^#{dir}"), ""))
       end
 
-      def blank?
-        false
+      def realpath_prefixed_with?(path, dir)
+        File.exist?(path) && File.realpath(path).start_with?(dir)
       end
 
       # This method allows to modify the file content by inheriting from the class.
       def source(file, context)
-        File.read_with_options(file, file_read_opts(context))
+        File.read(file, file_read_opts(context))
       end
     end
   end
diff --git a/lib/jekyll/tags/post_url.rb b/lib/jekyll/tags/post_url.rb
index 063e22a..af36670 100644
--- a/lib/jekyll/tags/post_url.rb
+++ b/lib/jekyll/tags/post_url.rb
@@ -7,6 +7,7 @@ module Jekyll
 
       def initialize(name)
         all, path, date, slug = *name.sub(/^\//, "").match(MATCHER)
+        raise ArgumentError.new("'#{name}' does not contain valid date and/or title") unless all
         @slug = path ? path + slug : slug
         @date = Time.parse(date)
       end
@@ -38,7 +39,15 @@ module Jekyll
       def initialize(tag_name, post, tokens)
         super
         @orig_post = post.strip
-        @post = PostComparer.new(@orig_post)
+        begin
+          @post = PostComparer.new(@orig_post)
+        rescue
+          raise ArgumentError.new <<-eos
+Could not parse name of post "#{@orig_post}" in tag 'post_url'.
+
+Make sure the post exists and the name is correct.
+eos
+        end
       end
 
       def render(context)
diff --git a/lib/jekyll/url.rb b/lib/jekyll/url.rb
index 813b9c8..f4ea4d3 100644
--- a/lib/jekyll/url.rb
+++ b/lib/jekyll/url.rb
@@ -1,3 +1,5 @@
+require 'uri'
+
 # Public: Methods that generate a URL for a resource such as a Post or a Page.
 #
 # Examples
@@ -22,9 +24,9 @@ module Jekyll
     #                           template. Instead, the given permalink will be
     #                           used as URL.
     def initialize(options)
-      @template = options[:template]
+      @template     = options[:template]
       @placeholders = options[:placeholders] || {}
-      @permalink = options[:permalink]
+      @permalink    = options[:permalink]
 
       if (@template || @permalink).nil?
         raise ArgumentError, "One of :template or :permalink must be supplied."
@@ -44,7 +46,7 @@ module Jekyll
     # Returns the _unsanitizied_ String URL
     def generate_url
       @placeholders.inject(@template) do |result, token|
-        result.gsub(/:#{token.first}/, token.last)
+        result.gsub(/:#{token.first}/, self.class.escape_path(token.last))
       end
     end
 
@@ -65,5 +67,43 @@ module Jekyll
 
       url
     end
+
+    # Escapes a path to be a valid URL path segment
+    #
+    # path - The path to be escaped.
+    #
+    # Examples:
+    #
+    #   URL.escape_path("/a b")
+    #   # => "/a%20b"
+    #
+    # Returns the escaped path.
+    def self.escape_path(path)
+      # Because URI.escape doesn't escape '?', '[' and ']' by defaut,
+      # specify unsafe string (except unreserved, sub-delims, ":", "@" and "/").
+      #
+      # URI path segment is defined in RFC 3986 as follows:
+      #   segment       = *pchar
+      #   pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+      #   unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+      #   pct-encoded   = "%" HEXDIG HEXDIG
+      #   sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+      #                 / "*" / "+" / "," / ";" / "="
+      URI.escape(path, /[^a-zA-Z\d\-._~!$&\'()*+,;=:@\/]/).encode('utf-8')
+    end
+
+    # Unescapes a URL path segment
+    #
+    # path - The path to be unescaped.
+    #
+    # Examples:
+    #
+    #   URL.unescape_path("/a%20b")
+    #   # => "/a b"
+    #
+    # Returns the unescaped path.
+    def self.unescape_path(path)
+      URI.unescape(path.encode('utf-8'))
+    end
   end
 end
diff --git a/lib/jekyll/utils.rb b/lib/jekyll/utils.rb
new file mode 100644
index 0000000..e1b4704
--- /dev/null
+++ b/lib/jekyll/utils.rb
@@ -0,0 +1,87 @@
+module Jekyll
+  module Utils
+    class << self
+
+      # Merges a master hash with another hash, recursively.
+      #
+      # master_hash - the "parent" hash whose values will be overridden
+      # other_hash  - the other hash whose values will be persisted after the merge
+      #
+      # This code was lovingly stolen from some random gem:
+      # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
+      #
+      # Thanks to whoever made it.
+      def deep_merge_hashes(master_hash, other_hash)
+        target = master_hash.dup
+
+        other_hash.keys.each do |key|
+          if other_hash[key].is_a? Hash and target[key].is_a? Hash
+            target[key] = Utils.deep_merge_hashes(target[key], other_hash[key])
+            next
+          end
+
+          target[key] = other_hash[key]
+        end
+
+        target
+      end
+
+      # Read array from the supplied hash favouring the singular key
+      # and then the plural key, and handling any nil entries.
+      #
+      # hash - the hash to read from
+      # singular_key - the singular key
+      # plural_key - the plural key
+      #
+      # Returns an array
+      def pluralized_array_from_hash(hash, singular_key, plural_key)
+        [].tap do |array|
+          array << (value_from_singular_key(hash, singular_key) || value_from_plural_key(hash, plural_key))
+        end.flatten.compact
+      end
+      
+      def value_from_singular_key(hash, key)
+        hash[key] if (hash.has_key?(key) || (hash.default_proc && hash[key]))
+      end
+      
+      def value_from_plural_key(hash, key)
+        if hash.has_key?(key) || (hash.default_proc && hash[key])
+          val = hash[key]
+          case val
+          when String
+            val.split
+          when Array
+            val.compact
+          end
+        end
+      end
+
+      def transform_keys(hash)
+        result = {}
+        hash.each_key do |key|
+          result[yield(key)] = hash[key]
+        end
+        result
+      end
+
+      # Apply #to_sym to all keys in the hash
+      #
+      # hash - the hash to which to apply this transformation
+      #
+      # Returns a new hash with symbolized keys
+      def symbolize_hash_keys(hash)
+        transform_keys(hash) { |key| key.to_sym rescue key }
+      end
+
+      # Apply #to_s to all keys in the Hash
+      #
+      # hash - the hash to which to apply this transformation
+      #
+      # Returns a new hash with stringified keys
+      def stringify_hash_keys(hash)
+        transform_keys(hash) { |key| key.to_s rescue key }
+      end
+
+    end
+  end
+end
diff --git a/lib/jekyll/version.rb b/lib/jekyll/version.rb
new file mode 100644
index 0000000..f6525ae
--- /dev/null
+++ b/lib/jekyll/version.rb
@@ -0,0 +1,3 @@
+module Jekyll
+  VERSION = '2.2.0'
+end
diff --git a/lib/site_template/_config.yml b/lib/site_template/_config.yml
index 85daa77..ae45638 100644
--- a/lib/site_template/_config.yml
+++ b/lib/site_template/_config.yml
@@ -1,3 +1,12 @@
-name: Your New Jekyll Site
-markdown: redcarpet
-pygments: true
+# Site settings
+title: Your awesome title
+email: your-email at domain.com
+description: "Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description."
+baseurl: ""
+url: "http://yourdomain.com"
+twitter_username: jekyllrb
+github_username:  jekyll
+
+# Build settings
+markdown: kramdown
+permalink: pretty
diff --git a/lib/site_template/_includes/footer.html b/lib/site_template/_includes/footer.html
new file mode 100644
index 0000000..0026c4c
--- /dev/null
+++ b/lib/site_template/_includes/footer.html
@@ -0,0 +1,61 @@
+<footer class="site-footer">
+
+  <div class="wrap">
+
+    <h2 class="footer-heading">{{ site.title }}</h2>
+
+    <div class="footer-col-1 column">
+      <ul>
+        <li>{{ site.title }}</li>
+        <li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
+      </ul>
+    </div>
+
+    <div class="footer-col-2 column">
+      <ul>
+        {% if site.github_username %}<li>
+          <a href="https://github.com/{{ site.github_username }}">
+            <span class="icon github">
+              <svg version="1.1" class="github-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+                 viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
+                <path fill-rule="evenodd" clip-rule="evenodd" fill="#C2C2C2" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761
+                c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32
+                c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472
+                c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037
+                C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65
+                c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261
+                c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082
+                c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129
+                c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
+              </svg>
+            </span>
+            <span class="username">{{ site.github_username }}</span>
+          </a>
+        </li>{% endif %}
+        {% if site.twitter_username %}<li>
+          <a href="https://twitter.com/{{ site.twitter_username }}">
+            <span class="icon twitter">
+              <svg version="1.1" class="twitter-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+                 viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
+                <path fill="#C2C2C2" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809
+                c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27
+                c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767
+                c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206
+                C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271
+                c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469
+                c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/>
+              </svg>
+            </span>
+            <span class="username">{{ site.twitter_username }}</span>
+          </a>
+        </li>{% endif %}
+      </ul>
+    </div>
+
+    <div class="footer-col-3 column">
+      <p class="text">{{ site.description }}</p>
+    </div>
+
+  </div>
+
+</footer>
diff --git a/lib/site_template/_includes/head.html b/lib/site_template/_includes/head.html
new file mode 100644
index 0000000..c8f1016
--- /dev/null
+++ b/lib/site_template/_includes/head.html
@@ -0,0 +1,12 @@
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
+    <meta name="viewport" content="width=device-width">
+    <meta name="description" content="{{ site.description }}">
+    <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
+
+    <!-- Custom CSS -->
+    <link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
+
+</head>
diff --git a/lib/site_template/_includes/header.html b/lib/site_template/_includes/header.html
new file mode 100644
index 0000000..e5e6f26
--- /dev/null
+++ b/lib/site_template/_includes/header.html
@@ -0,0 +1,28 @@
+<header class="site-header">
+
+  <div class="wrap">
+
+    <a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>
+
+    <nav class="site-nav">
+      <a href="#" class="menu-icon">
+        <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+           viewBox="0 0 18 15" enable-background="new 0 0 18 15" xml:space="preserve">
+          <path fill="#505050" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0
+            h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
+          <path fill="#505050" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484
+            h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
+          <path fill="#505050" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0
+            c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
+        </svg>
+      </a>
+      <div class="trigger">
+        {% for page in site.pages %}
+          {% if page.title %}<a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>{% endif %}
+        {% endfor %}
+      </div>
+    </nav>
+
+  </div>
+
+</header>
diff --git a/lib/site_template/_layouts/default.html b/lib/site_template/_layouts/default.html
index 22e7e3f..af41586 100644
--- a/lib/site_template/_layouts/default.html
+++ b/lib/site_template/_layouts/default.html
@@ -1,44 +1,19 @@
 <!DOCTYPE html>
 <html>
-    <head>
-        <meta charset="utf-8">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <title>{{ page.title }}</title>
-        <meta name="viewport" content="width=device-width">
 
-        <!-- syntax highlighting CSS -->
-        <link rel="stylesheet" href="/css/syntax.css">
+  {% include head.html %}
 
-        <!-- Custom CSS -->
-        <link rel="stylesheet" href="/css/main.css">
-
-    </head>
     <body>
 
-        <div class="site">
-          <div class="header">
-            <h1 class="title"><a href="/">{{ site.name }}</a></h1>
-            <a class="extra" href="/">home</a>
-          </div>
+    {% include header.html %}
 
-          {{ content }}
+    <div class="page-content">
+      <div class="wrap">
+      {{ content }}
+      </div>
+    </div>
 
-          <div class="footer">
-            <div class="contact">
-              <p>
-                Your Name<br />
-                What You Are<br />
-                you at example.com
-              </p>
-            </div>
-            <div class="contact">
-              <p>
-                <a href="https://github.com/yourusername">github.com/yourusername</a><br />
-                <a href="https://twitter.com/yourusername">twitter.com/yourusername</a><br />
-              </p>
-            </div>
-          </div>
-        </div>
+    {% include footer.html %}
 
     </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/lib/site_template/_layouts/page.html b/lib/site_template/_layouts/page.html
new file mode 100644
index 0000000..59821b1
--- /dev/null
+++ b/lib/site_template/_layouts/page.html
@@ -0,0 +1,14 @@
+---
+layout: default
+---
+<div class="post">
+
+  <header class="post-header">
+    <h1>{{ page.title }}</h1>
+  </header>
+
+  <article class="post-content">
+  {{ content }}
+  </article>
+
+</div>
\ No newline at end of file
diff --git a/lib/site_template/_layouts/post.html b/lib/site_template/_layouts/post.html
index 04e3586..838ad7a 100644
--- a/lib/site_template/_layouts/post.html
+++ b/lib/site_template/_layouts/post.html
@@ -1,9 +1,15 @@
 ---
 layout: default
 ---
-<h2>{{ page.title }}</h2>
-<p class="meta">{{ page.date | date_to_string }}</p>
-
 <div class="post">
-{{ content }}
-</div>
+
+  <header class="post-header">
+    <h1>{{ page.title }}</h1>
+    <p class="meta">{{ page.date | date: "%b %-d, %Y" }}{% if page.author %} • {{ page.author }}{% endif %}{% if page.meta %} • {{ page.meta }}{% endif %}</p>
+  </header>
+
+  <article class="post-content">
+  {{ content }}
+  </article>
+
+</div>
\ No newline at end of file
diff --git a/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb b/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
index c500b41..bc639fc 100644
--- a/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
+++ b/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
@@ -20,5 +20,5 @@ print_hi('Tom')
 
 Check out the [Jekyll docs][jekyll] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll's GitHub repo][jekyll-gh].
 
-[jekyll-gh]: https://github.com/mojombo/jekyll
+[jekyll-gh]: https://github.com/jekyll/jekyll
 [jekyll]:    http://jekyllrb.com
diff --git a/lib/site_template/about.md b/lib/site_template/about.md
new file mode 100644
index 0000000..3ed64bb
--- /dev/null
+++ b/lib/site_template/about.md
@@ -0,0 +1,11 @@
+---
+layout: page
+title: About
+permalink: /about/
+---
+
+This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/)
+
+You can find the source code for the Jekyll new theme at: [github.com/jglovier/jekyll-new](https://github.com/jglovier/jekyll-new)
+
+You can find the source code for Jekyll at [github.com/jekyll/jekyll](https://github.com/jekyll/jekyll)
diff --git a/lib/site_template/css/main.css b/lib/site_template/css/main.css
old mode 100755
new mode 100644
index 1a2c013..88090a3
--- a/lib/site_template/css/main.css
+++ b/lib/site_template/css/main.css
@@ -1,10 +1,6 @@
-/*****************************************************************************/
-/*
-/* Common
-/*
-/*****************************************************************************/
+/* Base */
+/* ----------------------------------------------------------*/
 
-/* Global Reset */
 * {
   margin: 0;
   padding: 0;
@@ -13,139 +9,243 @@
 html, body { height: 100%; }
 
 body {
-  background-color: #FFF;
-  font: 13.34px Helvetica, Arial, sans-serif;
-  font-size: small;
-  text-align: center;
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 16px;
+  line-height: 1.5;
+  font-weight: 300;
+  background-color: #fdfdfd;
 }
 
-h1, h2, h3, h4, h5, h6 {
-  font-size: 100%; }
+h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: 400; }
 
-h1 { margin-bottom: 1em; }
-p { margin: 1em 0; }
+a         { color: #2a7ae2; text-decoration: none; }
+a:hover   { color: #000; text-decoration: underline; }
+a:visited { color: #205caa; }
 
-a         { color: #00a; }
-a:hover   { color: #000; }
-a:visited { color: #a0a; }
+/* Utility */
 
-/*****************************************************************************/
-/*
-/* Home
-/*
-/*****************************************************************************/
-.posts {
-  list-style-type: none;
-  margin-bottom: 2em;
+.wrap:before,
+.wrap:after { content:""; display:table; }
+.wrap:after { clear: both; }
+.wrap {
+  max-width: 800px;
+  padding: 0 30px;
+  margin: 0 auto;
+  zoom: 1;
 }
 
-.posts li {
-  line-height: 1.75em;
+
+/* Layout Styles */
+/* ----------------------------------------------------------*/
+
+/* Site header */
+
+.site-header {
+  border-top: 5px solid #333;
+  border-bottom: 1px solid #e8e8e8;
+  min-height: 56px;
+  background-color: white;
+}
+
+.site-title,
+.site-title:hover,
+.site-title:visited {
+  display: block;
+  color: #333;
+  font-size: 26px;
+  letter-spacing: -1px;
+  float: left;
+  line-height: 56px;
+  position: relative;
+  z-index: 1;
 }
 
-.posts span {
-  color: #aaa;
-  font-family: Monaco, "Courier New", monospace;
-  font-size: 80%;
+.site-nav {
+  float: right;
+  line-height: 56px;
 }
 
-/*****************************************************************************/
-/*
-/* Site
-/*
-/*****************************************************************************/
+.site-nav .menu-icon { display: none; }
 
-.site {
-  font-size: 115%;
-  text-align: justify;
-  width: 42em;
-  margin: 3em auto 2em;
-  line-height: 1.5em;
+.site-nav .page-link {
+  margin-left: 20px;
+  color: #727272;
+  letter-spacing: -.5px;
 }
 
-.header a {
-  font-weight: bold;
-  text-decoration: none;
+/* Site footer */
+
+.site-footer {
+  border-top: 1px solid #e8e8e8;
+  padding: 30px 0;
 }
 
-.title {
-  display: inline-block;
-  margin-bottom: 2em;
+.footer-heading {
+  font-size: 18px;
+  font-weight: 300;
+  letter-spacing: -.5px;
+  margin-bottom: 15px;
 }
 
-.title a {
-  color: #a00;
+.site-footer .column { float: left; margin-bottom: 15px; }
+
+.footer-col-1 {
+  width: 270px; /*fallback*/
+  width: -webkit-calc(35% - 10px);
+  width: -moz-calc(35% - 10px);
+  width: -o-calc(35% - 10px);
+  width: calc(35% - 10px);
+  margin-right: 10px
+}
+.footer-col-2 {
+  width: 175px; /*fallback*/
+  width: -webkit-calc(23.125% - 10px);
+  width: -moz-calc(23.125% - 10px);
+  width: -o-calc(23.125% - 10px);
+  width: calc(23.125% - 10px);
+  margin-right: 10px
+}
+.footer-col-3 {
+  width: 335px; /*fallback*/
+  width: -webkit-calc(41.875%);
+  width: -moz-calc(41.875%);
+  width: -o-calc(41.875%);
+  width: calc(41.875%);
 }
 
-.title a:hover {
-  color: #000;
+.site-footer ul { list-style: none; }
+
+.site-footer li,
+.site-footer p {
+  font-size: 15px;
+  letter-spacing: -.3px;
+  color: #828282;
 }
 
-.header a.extra {
-  color: #aaa;
-  margin-left: 1em;
+.github-icon-svg,
+.twitter-icon-svg {
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  position: relative;
+  top: 3px;
 }
 
-.header a.extra:hover {
-  color: #000;
+
+/* Page Content styles */
+/* ----------------------------------------------------------*/
+
+.page-content {
+  padding: 30px 0;
+  background-color: #fff;
 }
 
-.meta {
-  color: #aaa;
+
+/* Home styles */
+/* ----------------------------------------------------------*/
+
+.home h1 { margin-bottom: 25px; }
+
+.posts { list-style-type: none; }
+
+.posts li { margin-bottom: 30px; }
+
+.posts .post-link {
+  font-size: 24px;
+  letter-spacing: -1px;
+  line-height: 1;
 }
 
-.footer {
-  font-size: 80%;
-  color: #666;
-  border-top: 4px solid #eee;
-  margin-top: 2em;
-  overflow: hidden;
+.posts .post-date {
+  display: block;
+  font-size: 15px;
+  color: #818181;
 }
 
-.footer .contact {
-  float: left;
-  margin-right: 3em;
+
+/* Post styles */
+/* ----------------------------------------------------------*/
+
+.post-header { margin: 10px 0 30px; }
+
+.post-header h1 {
+  font-size: 42px;
+  letter-spacing: -1.75px;
+  line-height: 1;
+  font-weight: 300;
 }
 
-.footer .contact a {
-  color: #8085C1;
+.post-header .meta {
+  font-size: 15px;
+  color: #818181;
+  margin-top: 5px;
 }
 
-.footer .rss {
-  margin-top: 1.1em;
-  margin-right: -.2em;
-  float: right;
+.post-content { margin: 0 0 30px; }
+
+.post-content > * { margin: 20px 0; }
+
+
+.post-content h1,
+.post-content h2,
+.post-content h3,
+.post-content h4,
+.post-content h5,
+.post-content h6 {
+  line-height: 1;
+  font-weight: 300;
+  margin: 40px 0 20px;
 }
 
-.footer .rss img {
-  border: 0;
+.post-content h2 {
+  font-size: 32px;
+  letter-spacing: -1.25px;
 }
 
-/*****************************************************************************/
-/*
-/* Posts
-/*
-/*****************************************************************************/
+.post-content h3 {
+  font-size: 26px;
+  letter-spacing: -1px;
+}
 
-/* standard */
-.post pre {
-  border: 1px solid #ddd;
-  background-color: #eef;
-  padding: 0 .4em;
+.post-content h4 {
+  font-size: 20px;
+  letter-spacing: -1px;
 }
 
-.post ul, .post ol {
-  margin-left: 1.35em;
+.post-content blockquote {
+  border-left: 4px solid #e8e8e8;
+  padding-left: 20px;
+  font-size: 18px;
+  opacity: .6;
+  letter-spacing: -1px;
+  font-style: italic;
+  margin: 30px 0;
 }
 
+.post-content ul,
+.post-content ol { padding-left: 20px; }
+
+.post pre,
 .post code {
-  border: 1px solid #ddd;
+  border: 1px solid #d5d5e9;
   background-color: #eef;
-  padding: 0 .2em;
+  padding: 8px 12px;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  font-size: 15px;
+  overflow:scroll;
 }
 
+.post code { padding: 1px 5px; }
+
+.post ul,
+.post ol { margin-left: 1.35em; }
+
 .post pre code {
-  border: none;
+  border: 0;
+  padding-right: 0;
+  padding-left: 0;
 }
 
 /* terminal */
@@ -153,8 +253,158 @@ a:visited { color: #a0a; }
   border: 1px solid #000;
   background-color: #333;
   color: #FFF;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
 }
 
-.post pre.terminal code {
-  background-color: #333;
+.post pre.terminal code { background-color: #333; }
+
+/* Syntax highlighting styles */
+/* ----------------------------------------------------------*/
+
+.highlight  { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+
+/* media queries */
+/* ----------------------------------------------------------*/
+
+
+ at media screen and (max-width: 750px) {
+
+  .footer-col-1 { width: 50%; }
+
+  .footer-col-2 {
+    width: 45%; /*fallback*/
+    width: -webkit-calc(50% - 10px);
+    width: -moz-calc(50% - 10px);
+    width: -o-calc(50% - 10px);
+    width: calc(50% - 10px);
+    margin-right: 0;
+  }
+
+  .site-footer .column.footer-col-3 {
+    width: auto;
+    float: none;
+    clear: both;
+  }
+
+}
+
+ at media screen and (max-width: 600px) {
+
+  .wrap { padding: 0 12px; }
+
+  .site-nav {
+    position: fixed;
+    z-index: 10;
+    top: 14px; right: 8px;
+    background-color: white;
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+    border: 1px solid #e8e8e8;
+  }
+
+  .site-nav .menu-icon {
+    display: block;
+    font-size: 24px;
+    color: #505050;
+    float: right;
+    width: 36px;
+    text-align: center;
+    line-height: 36px;
+  }
+
+  .site-nav .menu-icon svg { width: 18px; height: 16px; }
+
+  .site-nav .trigger {
+    clear: both;
+    margin-bottom: 5px;
+    display: none;
+  }
+
+  .site-nav:hover .trigger { display: block; }
+
+  .site-nav .page-link {
+    display: block;
+    text-align: right;
+    line-height: 1.25;
+    padding: 5px 10px;
+    margin: 0;
+  }
+
+  .post-header h1 { font-size: 36px; }
+  .post-content h2 { font-size: 28px; }
+  .post-content h3 { font-size: 22px; }
+  .post-content h4 { font-size: 18px; }
+  .post-content blockquote { padding-left: 10px; }
+  .post-content ul,
+  .post-content ol { padding-left: 10px; }
+
+  .site-footer .column {
+    float: none;
+    clear: both;
+    width: auto;
+    margin: 0 0 15px; }
+
 }
diff --git a/lib/site_template/css/syntax.css b/lib/site_template/css/syntax.css
deleted file mode 100644
index 2774b76..0000000
--- a/lib/site_template/css/syntax.css
+++ /dev/null
@@ -1,60 +0,0 @@
-.highlight  { background: #ffffff; }
-.highlight .c { color: #999988; font-style: italic } /* Comment */
-.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.highlight .k { font-weight: bold } /* Keyword */
-.highlight .o { font-weight: bold } /* Operator */
-.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
-.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
-.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #aa0000 } /* Generic.Error */
-.highlight .gh { color: #999999 } /* Generic.Heading */
-.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
-.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
-.highlight .go { color: #888888 } /* Generic.Output */
-.highlight .gp { color: #555555 } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
-.highlight .gt { color: #aa0000 } /* Generic.Traceback */
-.highlight .kc { font-weight: bold } /* Keyword.Constant */
-.highlight .kd { font-weight: bold } /* Keyword.Declaration */
-.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
-.highlight .kr { font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
-.highlight .m { color: #009999 } /* Literal.Number */
-.highlight .s { color: #d14 } /* Literal.String */
-.highlight .na { color: #008080 } /* Name.Attribute */
-.highlight .nb { color: #0086B3 } /* Name.Builtin */
-.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
-.highlight .no { color: #008080 } /* Name.Constant */
-.highlight .ni { color: #800080 } /* Name.Entity */
-.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
-.highlight .nn { color: #555555 } /* Name.Namespace */
-.highlight .nt { color: #000080 } /* Name.Tag */
-.highlight .nv { color: #008080 } /* Name.Variable */
-.highlight .ow { font-weight: bold } /* Operator.Word */
-.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mf { color: #009999 } /* Literal.Number.Float */
-.highlight .mh { color: #009999 } /* Literal.Number.Hex */
-.highlight .mi { color: #009999 } /* Literal.Number.Integer */
-.highlight .mo { color: #009999 } /* Literal.Number.Oct */
-.highlight .sb { color: #d14 } /* Literal.String.Backtick */
-.highlight .sc { color: #d14 } /* Literal.String.Char */
-.highlight .sd { color: #d14 } /* Literal.String.Doc */
-.highlight .s2 { color: #d14 } /* Literal.String.Double */
-.highlight .se { color: #d14 } /* Literal.String.Escape */
-.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
-.highlight .si { color: #d14 } /* Literal.String.Interpol */
-.highlight .sx { color: #d14 } /* Literal.String.Other */
-.highlight .sr { color: #009926 } /* Literal.String.Regex */
-.highlight .s1 { color: #d14 } /* Literal.String.Single */
-.highlight .ss { color: #990073 } /* Literal.String.Symbol */
-.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #008080 } /* Name.Variable.Class */
-.highlight .vg { color: #008080 } /* Name.Variable.Global */
-.highlight .vi { color: #008080 } /* Name.Variable.Instance */
-.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
diff --git a/lib/site_template/feed.xml b/lib/site_template/feed.xml
new file mode 100644
index 0000000..4d7f8a4
--- /dev/null
+++ b/lib/site_template/feed.xml
@@ -0,0 +1,30 @@
+---
+layout: none
+---
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>{{ site.title | xml_escape }}</title>
+    <description>{{ site.description | xml_escape }}</description>
+    <link>{{ site.url }}{{ site.baseurl }}/</link>
+    <atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml" />
+    <pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
+    <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
+    <generator>Jekyll v{{ jekyll.version }}</generator>
+    {% for post in site.posts limit:10 %}
+      <item>
+        <title>{{ post.title | xml_escape }}</title>
+        <description>{{ post.content | xml_escape }}</description>
+        <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
+        <link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
+        <guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
+        {% for tag in post.tags %}
+        <category>{{ tag | xml_escape }}</category>
+        {% endfor %}
+        {% for cat in post.categories %}
+        <category>{{ cat | xml_escape }}</category>
+        {% endfor %}
+      </item>
+    {% endfor %}
+  </channel>
+</rss>
diff --git a/lib/site_template/index.html b/lib/site_template/index.html
index c726819..a9f5097 100644
--- a/lib/site_template/index.html
+++ b/lib/site_template/index.html
@@ -1,13 +1,20 @@
 ---
 layout: default
-title: Your New Jekyll Site
 ---
 
-<div id="home">
-  <h1>Blog Posts</h1>
+<div class="home">
+
+  <h1>Posts</h1>
+
   <ul class="posts">
     {% for post in site.posts %}
-      <li><span>{{ post.date | date_to_string }}</span> » <a href="{{ post.url }}">{{ post.title }}</a></li>
+      <li>
+        <span class="post-date">{{ post.date | date: "%b %-d, %Y" }}</span>
+        <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
+      </li>
     {% endfor %}
   </ul>
-</div>
\ No newline at end of file
+
+  <p class="rss-subscribe">subscribe <a href="{{ "/feed.xml" | prepend: site.baseurl }}">via RSS</a></p>
+
+</div>
diff --git a/metadata.yml b/metadata.yml
index dbbc1bd..34220ef 100644
--- a/metadata.yml
+++ b/metadata.yml
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: jekyll
 version: !ruby/object:Gem::Version
-  version: 1.5.1
+  version: 2.2.0
 platform: ruby
 authors:
 - Tom Preston-Werner
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2014-03-28 00:00:00.000000000 Z
+date: 2014-07-29 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: liquid
@@ -16,16 +16,16 @@ dependencies:
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 2.5.5
+        version: 2.6.1
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 2.5.5
+        version: 2.6.1
 - !ruby/object:Gem::Dependency
-  name: classifier
+  name: kramdown
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
@@ -39,7 +39,49 @@ dependencies:
       - !ruby/object:Gem::Version
         version: '1.3'
 - !ruby/object:Gem::Dependency
-  name: listen
+  name: mercenary
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: 0.3.3
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: 0.3.3
+- !ruby/object:Gem::Dependency
+  name: safe_yaml
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
+- !ruby/object:Gem::Dependency
+  name: colorator
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '0.1'
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '0.1'
+- !ruby/object:Gem::Dependency
+  name: classifier
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
@@ -53,49 +95,49 @@ dependencies:
       - !ruby/object:Gem::Version
         version: '1.3'
 - !ruby/object:Gem::Dependency
-  name: maruku
+  name: pygments.rb
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '='
+    - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.7.0
+        version: 0.6.0
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '='
+    - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.7.0
+        version: 0.6.0
 - !ruby/object:Gem::Dependency
-  name: pygments.rb
+  name: redcarpet
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.5.0
+        version: '3.1'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.5.0
+        version: '3.1'
 - !ruby/object:Gem::Dependency
-  name: commander
+  name: toml
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 4.1.3
+        version: 0.1.0
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 4.1.3
+        version: 0.1.0
 - !ruby/object:Gem::Dependency
-  name: safe_yaml
+  name: jekyll-paginate
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
@@ -109,47 +151,61 @@ dependencies:
       - !ruby/object:Gem::Version
         version: '1.0'
 - !ruby/object:Gem::Dependency
-  name: colorator
+  name: jekyll-gist
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '0.1'
+        version: '1.0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '0.1'
+        version: '1.0'
 - !ruby/object:Gem::Dependency
-  name: redcarpet
+  name: jekyll-coffeescript
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 2.3.0
+        version: '1.0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 2.3.0
+        version: '1.0'
 - !ruby/object:Gem::Dependency
-  name: toml
+  name: jekyll-sass-converter
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.1.0
+        version: '1.0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.1.0
+        version: '1.0'
+- !ruby/object:Gem::Dependency
+  name: jekyll-watch
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
 - !ruby/object:Gem::Dependency
   name: rake
   requirement: !ruby/object:Gem::Requirement
@@ -198,14 +254,14 @@ dependencies:
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 3.3.2
+        version: '3.5'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 3.3.2
+        version: '3.5'
 - !ruby/object:Gem::Dependency
   name: rr
   requirement: !ruby/object:Gem::Requirement
@@ -249,19 +305,19 @@ dependencies:
       - !ruby/object:Gem::Version
         version: '4.2'
 - !ruby/object:Gem::Dependency
-  name: kramdown
+  name: maruku
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '1.2'
+        version: 0.7.0
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '1.2'
+        version: 0.7.0
 - !ruby/object:Gem::Dependency
   name: rdiscount
   requirement: !ruby/object:Gem::Requirement
@@ -319,49 +375,49 @@ dependencies:
       - !ruby/object:Gem::Version
         version: 1.0.1
 - !ruby/object:Gem::Dependency
-  name: coveralls
+  name: mime-types
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.7.0
+        version: '1.5'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.7.0
+        version: '1.5'
 - !ruby/object:Gem::Dependency
-  name: mime-types
+  name: activesupport
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '1.5'
+        version: 3.2.13
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '1.5'
+        version: 3.2.13
 - !ruby/object:Gem::Dependency
-  name: activesupport
+  name: jekyll_test_plugin
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - "~>"
+    - - ">="
       - !ruby/object:Gem::Version
-        version: 3.2.13
+        version: '0'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - "~>"
+    - - ">="
       - !ruby/object:Gem::Version
-        version: 3.2.13
+        version: '0'
 - !ruby/object:Gem::Dependency
-  name: jekyll_test_plugin
+  name: jekyll_test_plugin_malicious
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - ">="
@@ -374,6 +430,20 @@ dependencies:
     - - ">="
       - !ruby/object:Gem::Version
         version: '0'
+- !ruby/object:Gem::Dependency
+  name: rouge
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.3'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.3'
 description: Jekyll is a simple, blog aware, static site generator.
 email: tom at mojombo.com
 executables:
@@ -383,6 +453,8 @@ extra_rdoc_files:
 - README.markdown
 - LICENSE
 files:
+- ".gitignore"
+- ".travis.yml"
 - CONTRIBUTING.markdown
 - Gemfile
 - History.markdown
@@ -391,16 +463,21 @@ files:
 - Rakefile
 - bin/jekyll
 - cucumber.yml
+- docs/jp/CONTRIBUTING.jp.markdown
+- docs/jp/README.jp.markdown
+- features/collections.feature
 - features/create_sites.feature
 - features/data.feature
 - features/drafts.feature
 - features/embed_filters.feature
+- features/frontmatter_defaults.feature
 - features/include_tag.feature
 - features/markdown.feature
 - features/pagination.feature
 - features/permalinks.feature
 - features/post_data.feature
 - features/post_excerpts.feature
+- features/rendering.feature
 - features/site_configuration.feature
 - features/site_data.feature
 - features/step_definitions/jekyll_steps.rb
@@ -408,8 +485,10 @@ files:
 - jekyll.gemspec
 - lib/jekyll.rb
 - lib/jekyll/cleaner.rb
+- lib/jekyll/collection.rb
 - lib/jekyll/command.rb
 - lib/jekyll/commands/build.rb
+- lib/jekyll/commands/docs.rb
 - lib/jekyll/commands/doctor.rb
 - lib/jekyll/commands/new.rb
 - lib/jekyll/commands/serve.rb
@@ -423,43 +502,68 @@ files:
 - lib/jekyll/converters/markdown/redcarpet_parser.rb
 - lib/jekyll/converters/textile.rb
 - lib/jekyll/convertible.rb
-- lib/jekyll/core_ext.rb
 - lib/jekyll/deprecator.rb
+- lib/jekyll/document.rb
 - lib/jekyll/draft.rb
 - lib/jekyll/entry_filter.rb
 - lib/jekyll/errors.rb
 - lib/jekyll/excerpt.rb
 - lib/jekyll/filters.rb
+- lib/jekyll/frontmatter_defaults.rb
 - lib/jekyll/generator.rb
-- lib/jekyll/generators/pagination.rb
 - lib/jekyll/layout.rb
+- lib/jekyll/layout_reader.rb
+- lib/jekyll/liquid_extensions.rb
+- lib/jekyll/log_adapter.rb
 - lib/jekyll/mime.types
 - lib/jekyll/page.rb
 - lib/jekyll/plugin.rb
+- lib/jekyll/plugin_manager.rb
 - lib/jekyll/post.rb
+- lib/jekyll/publisher.rb
 - lib/jekyll/related_posts.rb
+- lib/jekyll/renderer.rb
 - lib/jekyll/site.rb
 - lib/jekyll/static_file.rb
 - lib/jekyll/stevenson.rb
-- lib/jekyll/tags/gist.rb
 - lib/jekyll/tags/highlight.rb
 - lib/jekyll/tags/include.rb
 - lib/jekyll/tags/post_url.rb
 - lib/jekyll/url.rb
+- lib/jekyll/utils.rb
+- lib/jekyll/version.rb
 - lib/site_template/.gitignore
 - lib/site_template/_config.yml
+- lib/site_template/_includes/footer.html
+- lib/site_template/_includes/head.html
+- lib/site_template/_includes/header.html
 - lib/site_template/_layouts/default.html
+- lib/site_template/_layouts/page.html
 - lib/site_template/_layouts/post.html
 - lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
+- lib/site_template/about.md
 - lib/site_template/css/main.css
-- lib/site_template/css/syntax.css
+- lib/site_template/feed.xml
 - lib/site_template/index.html
 - script/bootstrap
+- script/branding
+- script/cibuild
+- script/console
+- script/proof
+- script/rebund
+- script/test
 - site/.gitignore
 - site/CNAME
 - site/README
 - site/_config.yml
+- site/_data/docs.yml
 - site/_includes/analytics.html
+- site/_includes/anchor_links.html
+- site/_includes/css/font-awesome.css
+- site/_includes/css/gridism.css
+- site/_includes/css/normalize.css
+- site/_includes/css/pygments.css
+- site/_includes/css/style.css
 - site/_includes/docs_contents.html
 - site/_includes/docs_contents_mobile.html
 - site/_includes/docs_option.html
@@ -490,15 +594,22 @@ files:
 - site/_posts/2013-11-04-jekyll-1-3-0-released.markdown
 - site/_posts/2013-11-26-jekyll-1-3-1-released.markdown
 - site/_posts/2013-12-07-jekyll-1-4-0-released.markdown
+- site/_posts/2013-12-09-jekyll-1-4-1-released.markdown
 - site/_posts/2013-12-16-jekyll-1-4-2-released.markdown
 - site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
 - site/_posts/2014-03-24-jekyll-1-5-0-released.markdown
 - site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
-- site/css/gridism.css
-- site/css/normalize.css
-- site/css/pygments.css
-- site/css/style.css
+- site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown
+- site/_posts/2014-05-08-jekyll-2-0-3-released.markdown
+- site/_posts/2014-06-04-jekyll-stickers-1-dollar-stickermule.markdown
+- site/_posts/2014-06-28-jekyll-turns-21-i-mean-2-1-0.markdown
+- site/_posts/2014-07-01-jekyll-2-1-1-released.markdown
+- site/_posts/2014-07-29-jekyll-2-2-0-released.markdown
+- site/css/screen.css
+- site/docs/assets.md
+- site/docs/collections.md
 - site/docs/configuration.md
+- site/docs/continuous-integration.md
 - site/docs/contributing.md
 - site/docs/datafiles.md
 - site/docs/deployment-methods.md
@@ -506,7 +617,6 @@ files:
 - site/docs/extras.md
 - site/docs/frontmatter.md
 - site/docs/github-pages.md
-- site/docs/heroku.md
 - site/docs/history.md
 - site/docs/index.md
 - site/docs/installation.md
@@ -525,18 +635,25 @@ files:
 - site/docs/upgrading.md
 - site/docs/usage.md
 - site/docs/variables.md
-- site/favicon.png
+- site/docs/windows.md
+- site/favicon.ico
 - site/feed.xml
+- site/fonts/FontAwesome.otf
+- site/fonts/fontawesome-webfont.eot
+- site/fonts/fontawesome-webfont.svg
+- site/fonts/fontawesome-webfont.ttf
+- site/fonts/fontawesome-webfont.woff
 - site/freenode.txt
 - site/img/article-footer.png
 - site/img/footer-arrow.png
 - site/img/footer-logo.png
+- site/img/jekyll-sticker.jpg
 - site/img/logo-2x.png
+- site/img/logo-rss.png
 - site/img/octojekyll.png
-- site/img/tube.png
-- site/img/tube1x.png
 - site/index.html
-- site/js/modernizr-2.5.3.min.js
+- site/js/html5shiv.min.js
+- site/js/respond.min.js
 - site/news/index.html
 - site/news/releases/index.html
 - test/fixtures/broken_front_matter1.erb
@@ -545,17 +662,29 @@ files:
 - test/fixtures/exploit_front_matter.erb
 - test/fixtures/front_matter.erb
 - test/helper.rb
+- test/source/+/%# +.md
 - test/source/+/foo.md
 - test/source/.htaccess
 - test/source/_config.dev.toml
+- test/source/_data/categories/dairy.yaml
 - test/source/_data/languages.yml
+- test/source/_data/members.json
 - test/source/_data/members.yaml
 - test/source/_data/products.yml
+- test/source/_drafts/draft-properties.text
+- test/source/_includes/include.html
 - test/source/_includes/params.html
 - test/source/_includes/sig.markdown
 - test/source/_layouts/default.html
 - test/source/_layouts/post/simple.html
 - test/source/_layouts/simple.html
+- test/source/_methods/_do_not_read_me.md
+- test/source/_methods/configuration.md
+- test/source/_methods/sanitized_path.md
+- test/source/_methods/site/_dont_include_me_either.md
+- test/source/_methods/site/generate.md
+- test/source/_methods/site/initialize.md
+- test/source/_methods/um_hi.md
 - test/source/_plugins/dummy.rb
 - test/source/_posts/2008-02-02-not-published.textile
 - test/source/_posts/2008-02-02-published.textile
@@ -568,6 +697,7 @@ files:
 - test/source/_posts/2009-01-27-category.textile
 - test/source/_posts/2009-01-27-empty-categories.textile
 - test/source/_posts/2009-01-27-empty-category.textile
+- test/source/_posts/2009-01-27-no-category.textile
 - test/source/_posts/2009-03-12-hash-#1.markdown
 - test/source/_posts/2009-05-18-empty-tag.textile
 - test/source/_posts/2009-05-18-empty-tags.textile
@@ -590,46 +720,71 @@ files:
 - test/source/_posts/2013-05-10-number-category.textile
 - test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown
 - test/source/_posts/2013-08-01-mkdn-extension.mkdn
+- test/source/_posts/2013-12-17-include-variable-filters.markdown
+- test/source/_posts/2013-12-20-properties.text
 - test/source/_posts/2014-01-06-permalink-traversal.md
+- test/source/_posts/2014-03-03-yaml-with-dots.md
+- test/source/_posts/2014-03-22-escape-+ %20[].markdown
 - test/source/_posts/es/2008-11-21-nested.textile
+- test/source/_sass/_grid.scss
+- test/source/_slides/example-slide-1.html
+- test/source/_slides/example-slide-2.html
+- test/source/_slides/example-slide-3.html
+- test/source/_with.dots/all.dots/2.4.0.md
+- test/source/_with.dots/file.with.dots.md
 - test/source/about.html
 - test/source/category/_posts/2008-9-23-categories.textile
 - test/source/contacts.html
 - test/source/contacts/bar.html
 - test/source/contacts/index.html
+- test/source/css/main.scss
 - test/source/css/screen.css
 - test/source/deal.with.dots.html
+- test/source/environment.html
 - test/source/exploit.md
 - test/source/foo/_posts/bar/2008-12-12-topical-post.textile
 - test/source/index.html
+- test/source/js/coffeescript.coffee
+- test/source/pgp.key
 - test/source/products.yml
+- test/source/properties.html
 - test/source/sitemap.xml
+- test/source/static_files.html
 - test/source/symlink-test/symlinked-file
+- test/source/unpublished.html
 - test/source/win/_posts/2009-05-24-yaml-linebreak.markdown
 - test/source/z_category/_posts/2008-9-23-categories.textile
 - test/suite.rb
+- test/test_cleaner.rb
+- test/test_coffeescript.rb
+- test/test_collections.rb
 - test/test_command.rb
 - test/test_configuration.rb
 - test/test_convertible.rb
-- test/test_core_ext.rb
+- test/test_document.rb
+- test/test_draft.rb
 - test/test_entry_filter.rb
 - test/test_excerpt.rb
 - test/test_filters.rb
 - test/test_generated_site.rb
 - test/test_kramdown.rb
+- test/test_layout_reader.rb
+- test/test_liquid_extensions.rb
+- test/test_log_adapter.rb
 - test/test_new_command.rb
 - test/test_page.rb
-- test/test_pager.rb
 - test/test_path_sanitization.rb
 - test/test_post.rb
 - test/test_rdiscount.rb
 - test/test_redcarpet.rb
 - test/test_redcloth.rb
 - test/test_related_posts.rb
+- test/test_sass.rb
 - test/test_site.rb
 - test/test_tags.rb
 - test/test_url.rb
-homepage: http://github.com/mojombo/jekyll
+- test/test_utils.rb
+homepage: https://github.com/jekyll/jekyll
 licenses:
 - MIT
 metadata: {}
@@ -642,37 +797,161 @@ required_ruby_version: !ruby/object:Gem::Requirement
   requirements:
   - - ">="
     - !ruby/object:Gem::Version
-      version: '0'
+      version: 1.9.3
 required_rubygems_version: !ruby/object:Gem::Requirement
   requirements:
   - - ">="
     - !ruby/object:Gem::Version
       version: '0'
 requirements: []
-rubyforge_project: jekyll
+rubyforge_project: 
 rubygems_version: 2.2.2
 signing_key: 
 specification_version: 2
 summary: A simple, blog aware, static site generator.
 test_files:
+- features/collections.feature
+- features/create_sites.feature
+- features/data.feature
+- features/drafts.feature
+- features/embed_filters.feature
+- features/frontmatter_defaults.feature
+- features/include_tag.feature
+- features/markdown.feature
+- features/pagination.feature
+- features/permalinks.feature
+- features/post_data.feature
+- features/post_excerpts.feature
+- features/rendering.feature
+- features/site_configuration.feature
+- features/site_data.feature
+- features/step_definitions/jekyll_steps.rb
+- features/support/env.rb
+- test/fixtures/broken_front_matter1.erb
+- test/fixtures/broken_front_matter2.erb
+- test/fixtures/broken_front_matter3.erb
+- test/fixtures/exploit_front_matter.erb
+- test/fixtures/front_matter.erb
+- test/helper.rb
+- test/source/+/%# +.md
+- test/source/+/foo.md
+- test/source/.htaccess
+- test/source/_config.dev.toml
+- test/source/_data/categories/dairy.yaml
+- test/source/_data/languages.yml
+- test/source/_data/members.json
+- test/source/_data/members.yaml
+- test/source/_data/products.yml
+- test/source/_drafts/draft-properties.text
+- test/source/_includes/include.html
+- test/source/_includes/params.html
+- test/source/_includes/sig.markdown
+- test/source/_layouts/default.html
+- test/source/_layouts/post/simple.html
+- test/source/_layouts/simple.html
+- test/source/_methods/_do_not_read_me.md
+- test/source/_methods/configuration.md
+- test/source/_methods/sanitized_path.md
+- test/source/_methods/site/_dont_include_me_either.md
+- test/source/_methods/site/generate.md
+- test/source/_methods/site/initialize.md
+- test/source/_methods/um_hi.md
+- test/source/_plugins/dummy.rb
+- test/source/_posts/2008-02-02-not-published.textile
+- test/source/_posts/2008-02-02-published.textile
+- test/source/_posts/2008-10-18-foo-bar.textile
+- test/source/_posts/2008-11-21-complex.textile
+- test/source/_posts/2008-12-03-permalinked-post.textile
+- test/source/_posts/2008-12-13-include.markdown
+- test/source/_posts/2009-01-27-array-categories.textile
+- test/source/_posts/2009-01-27-categories.textile
+- test/source/_posts/2009-01-27-category.textile
+- test/source/_posts/2009-01-27-empty-categories.textile
+- test/source/_posts/2009-01-27-empty-category.textile
+- test/source/_posts/2009-01-27-no-category.textile
+- test/source/_posts/2009-03-12-hash-#1.markdown
+- test/source/_posts/2009-05-18-empty-tag.textile
+- test/source/_posts/2009-05-18-empty-tags.textile
+- test/source/_posts/2009-05-18-tag.textile
+- test/source/_posts/2009-05-18-tags.textile
+- test/source/_posts/2009-06-22-empty-yaml.textile
+- test/source/_posts/2009-06-22-no-yaml.textile
+- test/source/_posts/2010-01-08-triple-dash.markdown
+- test/source/_posts/2010-01-09-date-override.textile
+- test/source/_posts/2010-01-09-time-override.textile
+- test/source/_posts/2010-01-09-timezone-override.textile
+- test/source/_posts/2010-01-16-override-data.textile
+- test/source/_posts/2011-04-12-md-extension.md
+- test/source/_posts/2011-04-12-text-extension.text
+- test/source/_posts/2013-01-02-post-excerpt.markdown
+- test/source/_posts/2013-01-12-nil-layout.textile
+- test/source/_posts/2013-01-12-no-layout.textile
+- test/source/_posts/2013-03-19-not-a-post.markdown/.gitkeep
+- test/source/_posts/2013-04-11-custom-excerpt.markdown
+- test/source/_posts/2013-05-10-number-category.textile
+- test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown
+- test/source/_posts/2013-08-01-mkdn-extension.mkdn
+- test/source/_posts/2013-12-17-include-variable-filters.markdown
+- test/source/_posts/2013-12-20-properties.text
+- test/source/_posts/2014-01-06-permalink-traversal.md
+- test/source/_posts/2014-03-03-yaml-with-dots.md
+- test/source/_posts/2014-03-22-escape-+ %20[].markdown
+- test/source/_posts/es/2008-11-21-nested.textile
+- test/source/_sass/_grid.scss
+- test/source/_slides/example-slide-1.html
+- test/source/_slides/example-slide-2.html
+- test/source/_slides/example-slide-3.html
+- test/source/_with.dots/all.dots/2.4.0.md
+- test/source/_with.dots/file.with.dots.md
+- test/source/about.html
+- test/source/category/_posts/2008-9-23-categories.textile
+- test/source/contacts.html
+- test/source/contacts/bar.html
+- test/source/contacts/index.html
+- test/source/css/main.scss
+- test/source/css/screen.css
+- test/source/deal.with.dots.html
+- test/source/environment.html
+- test/source/exploit.md
+- test/source/foo/_posts/bar/2008-12-12-topical-post.textile
+- test/source/index.html
+- test/source/js/coffeescript.coffee
+- test/source/pgp.key
+- test/source/products.yml
+- test/source/properties.html
+- test/source/sitemap.xml
+- test/source/static_files.html
+- test/source/symlink-test/symlinked-file
+- test/source/unpublished.html
+- test/source/win/_posts/2009-05-24-yaml-linebreak.markdown
+- test/source/z_category/_posts/2008-9-23-categories.textile
+- test/suite.rb
+- test/test_cleaner.rb
+- test/test_coffeescript.rb
+- test/test_collections.rb
 - test/test_command.rb
 - test/test_configuration.rb
 - test/test_convertible.rb
-- test/test_core_ext.rb
+- test/test_document.rb
+- test/test_draft.rb
 - test/test_entry_filter.rb
 - test/test_excerpt.rb
 - test/test_filters.rb
 - test/test_generated_site.rb
 - test/test_kramdown.rb
+- test/test_layout_reader.rb
+- test/test_liquid_extensions.rb
+- test/test_log_adapter.rb
 - test/test_new_command.rb
 - test/test_page.rb
-- test/test_pager.rb
 - test/test_path_sanitization.rb
 - test/test_post.rb
 - test/test_rdiscount.rb
 - test/test_redcarpet.rb
 - test/test_redcloth.rb
 - test/test_related_posts.rb
+- test/test_sass.rb
 - test/test_site.rb
 - test/test_tags.rb
 - test/test_url.rb
+- test/test_utils.rb
diff --git a/script/bootstrap b/script/bootstrap
index da4e3ef..097f3e2 100755
--- a/script/bootstrap
+++ b/script/bootstrap
@@ -1,2 +1,4 @@
 #!/bin/sh
+
+script/branding
 bundle install
diff --git a/script/branding b/script/branding
new file mode 100755
index 0000000..2df6c67
--- /dev/null
+++ b/script/branding
@@ -0,0 +1,11 @@
+#! /bin/bash
+
+echo " ---------------------------------------------------------- "
+echo "          _   ______   _  __ __     __  _        _          "
+echo "         | | |  ____| | |/ / \ \   / / | |      | |         "
+echo "         | | | |__    | ' /   \ \_/ /  | |      | |         "
+echo "     _   | | |  __|   |  <     \   /   | |      | |         "
+echo "    | |__| | | |____  | . \     | |    | |____  | |____     "
+echo "     \____/  |______| |_|\_\    |_|    |______| |______|    "
+echo "                                                            "
+echo " ---------------------------------------------------------- "
diff --git a/script/cibuild b/script/cibuild
new file mode 100755
index 0000000..acc4b70
--- /dev/null
+++ b/script/cibuild
@@ -0,0 +1,7 @@
+#! /bin/bash
+
+set -e
+
+script/branding
+script/proof
+script/test
diff --git a/script/console b/script/console
new file mode 100755
index 0000000..34ad6e8
--- /dev/null
+++ b/script/console
@@ -0,0 +1,38 @@
+#!/usr/bin/env ruby
+
+require 'pry'
+$LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
+require 'jekyll'
+
+TEST_DIR = File.expand_path(File.join(File.dirname(__FILE__), *%w{ .. test }))
+
+def fixture_site(overrides = {})
+  Jekyll::Site.new(site_configuration(overrides))
+end
+
+def build_configs(overrides, base_hash = Jekyll::Configuration::DEFAULTS)
+  Jekyll::Utils.deep_merge_hashes(base_hash, overrides)
+end
+
+def site_configuration(overrides = {})
+  build_configs({
+    "source"      => source_dir,
+    "destination" => dest_dir
+  }, build_configs(overrides))
+end
+
+def dest_dir(*subdirs)
+  test_dir('dest', *subdirs)
+end
+
+def source_dir(*subdirs)
+  test_dir('source', *subdirs)
+end
+
+def test_dir(*subdirs)
+  File.join(TEST_DIR, *subdirs)
+end
+
+module Jekyll
+  binding.pry
+end
diff --git a/script/proof b/script/proof
new file mode 100755
index 0000000..f3dcd55
--- /dev/null
+++ b/script/proof
@@ -0,0 +1,22 @@
+#! /bin/bash
+#
+# Usage:
+#   script/proof
+
+set -e
+
+git diff --name-only origin $(git log --pretty=format:"%h" -2 | tail -1) | grep '^site/' || {
+    echo "No site files changed. We'll skip proofing."
+    exit 0
+}
+
+echo "Some site files have been changed! Proofing..."
+
+command -v htmlproof || {
+    echo "Installing HTML::Proofer!"
+    gem install html-proofer -- --use-system-libraries
+}
+
+bundle exec jekyll build -s site -d _site --trace
+printf "\e[0;36mProofing begins now!\e[0m\n"
+htmlproof ./_site
diff --git a/script/rebund b/script/rebund
new file mode 100755
index 0000000..2e8d3b1
--- /dev/null
+++ b/script/rebund
@@ -0,0 +1,140 @@
+#!/bin/bash
+#
+# rebund(1)
+#
+# Author: Julien Letessier
+# Homepage: https://github.com/mezis/rebund
+# License:
+#
+# Copyright (c) 2014 HouseTrip Ltd
+#
+# MIT License
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+# Configuration
+: ${REBUND_CREDENTIALS:=user:secret}
+: ${REBUND_ENDPOINT=http://keyfile-production.herokuapp.com}
+: ${REBUND_TARBALL:=bundle.tbz}
+: ${REBUND_BUNDLE_DIR:=vendor/bundle}
+
+
+
+log() {
+  echo "rebund: $*" > /dev/stderr
+}
+
+die() {
+  echo "fatal: $*" > /dev/stderr
+  exit 1
+}
+
+success() {
+  log "$*"
+  exit 0
+}
+
+on_error() {
+  die 'unknown error.'
+}
+
+get_ruby_version() {
+  bundle exec ruby --version
+}
+
+get_gemfile() {
+  bundle exec sh -c 'echo $BUNDLE_GEMFILE'
+}
+
+calculate_hash() {
+  (get_ruby_version ; cat $(get_gemfile)) | openssl sha256 | sed -e 's/.* //'
+}
+
+build_tarball() {
+  test -e $REBUND_BUNDLE_DIR || die "cannot find bundle directory in ${REBUND_BUNDLE_DIR}"
+  test -e $REBUND_TARBALL && success 'bundle already uploaded'
+  tar jcf $REBUND_TARBALL $REBUND_BUNDLE_DIR
+}
+
+upload_tarball() {
+  curl --fail \
+    -F filedata=@${REBUND_TARBALL} \
+    --digest --user $REBUND_CREDENTIALS \
+    ${REBUND_ENDPOINT}/$(calculate_hash) \
+  || success "could not upload bundle"
+}
+
+expand_tarball() {
+  test -e $REBUND_TARBALL || success "no tarball"
+  tar jxf $REBUND_TARBALL
+}
+
+download_tarball() {
+  curl --fail \
+    --location \
+    -o ${REBUND_TARBALL} \
+    --digest --user $REBUND_CREDENTIALS \
+    ${REBUND_ENDPOINT}/$(calculate_hash) \
+    || success "could not download bundle"
+}
+
+rebund_upload() {
+  build_tarball
+  upload_tarball
+}
+
+rebund_download() {
+  download_tarball
+  expand_tarball
+}
+
+rebund_usage() {
+  success "usage: $0 [-v] [upload|download]"
+}
+
+# cath errors
+trap on_error ERR
+
+# inherit the ERR trap in subprocesses
+set -E
+
+while test $# -gt 0 ; do
+  case $1 in
+    -v)
+      set -x
+      ;;
+    upload)
+      rebund_upload
+      exit 0
+      ;;
+    download)
+      rebund_download
+      exit 0
+      ;;
+    *)
+      rebund_usage
+      exit 1
+      ;;
+  esac
+  shift
+done
+
+rebund_usage
diff --git a/script/test b/script/test
new file mode 100755
index 0000000..a97bd1c
--- /dev/null
+++ b/script/test
@@ -0,0 +1,17 @@
+#! /bin/bash
+#
+# Usage:
+#   script/test
+#   script/test <hi>
+
+set -x
+
+if [ -z "$1" ]; then
+  TEST_FILES="test/test_*.rb"
+else
+  TEST_FILES="$@"
+fi
+
+set -x
+
+bundle exec rake
diff --git a/site/_config.yml b/site/_config.yml
index c71e4d3..44c2772 100644
--- a/site/_config.yml
+++ b/site/_config.yml
@@ -1,6 +1,9 @@
-pygments: true
+markdown: kramdown
+highlighter: pygments
 relative_permalinks: false
 gauges_id: 503c5af6613f5d0f19000027
 permalink: /news/:year/:month/:day/:title/
 excerpt_separator: noifniof3nioaniof3nioafafinoafnoif
-repository: https://github.com/mojombo/jekyll
+repository: https://github.com/jekyll/jekyll
+help_url: https://github.com/jekyll/jekyll-help
+google_analytics_id: UA-50755011-1
diff --git a/site/_data/docs.yml b/site/_data/docs.yml
new file mode 100644
index 0000000..474f73f
--- /dev/null
+++ b/site/_data/docs.yml
@@ -0,0 +1,46 @@
+- title: Getting Started
+  docs:
+  - home
+  - quickstart
+  - installation
+  - usage
+  - structure
+  - configuration
+
+- title: Your Content
+  docs:
+  - frontmatter
+  - posts
+  - drafts
+  - pages
+  - variables
+  - collections
+  - datafiles
+  - assets
+  - migrations
+
+- title: Customization
+  docs:
+  - templates
+  - permalinks
+  - pagination
+  - plugins
+  - extras
+
+- title: Deployment
+  docs:
+  - github-pages
+  - deployment-methods
+  - continuous-integration
+
+- title: Miscellaneous
+  docs:
+  - troubleshooting
+  - sites
+  - resources
+  - upgrading
+
+- title: Meta
+  docs:
+  - contributing
+  - history
diff --git a/site/_includes/analytics.html b/site/_includes/analytics.html
index bbdc351..4ef9ea0 100644
--- a/site/_includes/analytics.html
+++ b/site/_includes/analytics.html
@@ -1,6 +1,6 @@
 {% if site.gauges_id %}
   <!-- Gauges (http://gaug.es/) -->
-  <script type="text/javascript">
+  <script>
     var _gauges = _gauges || [];
     (function() {
       var t   = document.createElement('script');
@@ -17,16 +17,14 @@
 
 {% if site.google_analytics_id %}
   <!-- Google Analytics (http://google.com/analytics) -->
-  <script type="text/javascript">
-    var _gaq = _gaq || [];
-    _gaq.push(['_setAccount', '{{ site.google_analytics_id }}']);
-    _gaq.push(['_setDomainName', '{{ site.url }}']); // Multiple sub-domains
-    _gaq.push(['_setAllowLinker', true]); // Multiple TLDs
-    _gaq.push(['_trackPageview']);
-    (function() {
-      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-    })();
+  <script>
+    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', '{{ site.google_analytics_id }}', 'jekyllrb.com');
+    ga('send', 'pageview');
+
   </script>
 {% endif %}
diff --git a/site/_includes/anchor_links.html b/site/_includes/anchor_links.html
new file mode 100644
index 0000000..08e37b5
--- /dev/null
+++ b/site/_includes/anchor_links.html
@@ -0,0 +1,32 @@
+<script>
+  var anchorForId = function (id) {
+    var anchor = document.createElement("a");
+    anchor.className = "header-link";
+    anchor.href      = "#" + id;
+    anchor.innerHTML = "<i class=\"fa fa-link\"></i>";
+    return anchor;
+  };
+
+  var linkifyAnchors = function (level, containingElement) {
+    var headers = containingElement.getElementsByTagName("h" + level);
+    for (var h = 0; h < headers.length; h++) {
+      var header = headers[h];
+
+      if (typeof header.id !== "undefined" && header.id !== "") {
+        header.appendChild(anchorForId(header.id));
+      }
+    }
+  };
+
+  document.onreadystatechange = function () {
+    if (this.readyState === "complete") {
+      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
+      if (!contentBlock) {
+        return;
+      }
+      for (var level = 1; level <= 6; level++) {
+        linkifyAnchors(level, contentBlock);
+      }
+    }
+  };
+</script>
diff --git a/site/_includes/css/font-awesome.css b/site/_includes/css/font-awesome.css
new file mode 100644
index 0000000..86435ec
--- /dev/null
+++ b/site/_includes/css/font-awesome.css
@@ -0,0 +1,44 @@
+/*!
+ *  Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+ at font-face {
+  font-family: 'FontAwesome';
+  src: url('../fonts/fontawesome-webfont.eot?v=4.1.0');
+  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+.fa {
+  display: inline-block;
+  font-family: FontAwesome;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.fa-link:before {
+  content: "\f0c1";
+}
+/*
+ * This code is courtesy Ben Balter, modified by Parker Moore for jekyllrb.com
+ * http://ben.balter.com/2014/03/13/pages-anchor-links/
+ */
+.header-link {
+  position: relative;
+  left: 0.5em;
+  opacity: 0;
+  font-size: 0.8em;
+
+  -webkit-transition: opacity 0.2s ease-in-out 0.1s;
+  -moz-transition: opacity 0.2s ease-in-out 0.1s;
+  -ms-transition: opacity 0.2s ease-in-out 0.1s;
+}
+h2:hover .header-link,
+h3:hover .header-link,
+h4:hover .header-link,
+h5:hover .header-link,
+h6:hover .header-link {
+  opacity: 1;
+}
diff --git a/site/css/gridism.css b/site/_includes/css/gridism.css
similarity index 100%
rename from site/css/gridism.css
rename to site/_includes/css/gridism.css
diff --git a/site/css/pygments.css b/site/_includes/css/pygments.css
similarity index 96%
rename from site/css/pygments.css
rename to site/_includes/css/pygments.css
index 408a44f..5fe679f 100644
--- a/site/css/pygments.css
+++ b/site/_includes/css/pygments.css
@@ -68,3 +68,5 @@
 .highlight .vg { color: #98fb98} /* Name.Variable.Global */
 .highlight .vi { color: #98fb98} /* Name.Variable.Instance */
 .highlight .il { color: #ffffff} /* Literal.Number.Integer.Long */
+
+.highlight .bash .nv {-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; }
diff --git a/site/_includes/css/style.css b/site/_includes/css/style.css
new file mode 100644
index 0000000..18bc833
--- /dev/null
+++ b/site/_includes/css/style.css
@@ -0,0 +1,1045 @@
+/* Base */
+
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+body {
+  font: 300 21px Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  color: #ddd;
+  background-color: #333;
+  border-top: 5px solid #fc0;
+  -webkit-box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
+  -moz-box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
+  box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
+  text-shadow: 0 1px 3px rgba(0,0,0,.5);
+}
+
+.clear {
+  display: block;
+}
+
+.clear:after {
+  content: " ";
+  display: block;
+  height: 0;
+  clear: both;
+  visibility: hidden;
+}
+
+/* Sections */
+
+header, section, footer {
+  float: left;
+  width: 100%;
+  clear: both;
+}
+
+/* Header */
+
+header h1, header nav {
+  display: inline-block;
+}
+
+header h1 span {
+  display: none;
+}
+
+nav ul {
+  padding: 0;
+  margin: 0;
+}
+
+nav li {
+  display: inline-block;
+}
+
+.main-nav {
+  margin-top: 52px;
+}
+
+.main-nav li {
+  margin-right: 10px;
+}
+
+.main-nav li a {
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  font-weight: 900;
+  font-size: 14px;
+  padding: 0.5em 1em;
+  text-shadow: none;
+  text-transform: uppercase;
+  -webkit-transition: all .25s;
+  -moz-transition: all .25s;
+  -o-transition: all .25s;
+  transition: all .25s;
+}
+
+.main-nav li a:hover {
+  background-color: #252525;
+  -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
+  -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
+  box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
+  text-shadow: 0 1px 3px rgba(0,0,0,.5);
+}
+
+.main-nav li.current a {
+  background-color: #fc0;
+  color: #222;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.3);
+}
+
+.mobile-nav ul {
+  overflow: hidden;
+  width: 100%;
+  display: table;
+}
+
+.mobile-nav a {
+  float: left;
+  width: 100%;
+  background-color: #333;
+  color: #fc0;
+  text-align: center;
+  text-transform: uppercase;
+  font-size: 14px;
+  font-weight: 900;
+  padding: 5px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+
+.mobile-nav .current a {
+  background-color: #fc0;
+  color: #222;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.3);
+}
+
+.mobile-nav li {
+  display: table-cell;
+  width: 20%;
+  padding: 8px 2px;
+}
+
+ at media (max-width: 768px) {
+  .main-nav ul {
+    text-align: right;
+  }
+}
+ at media (max-width: 830px) {
+  .main-nav .show-on-mobiles {
+    display: inline;
+  }
+  .main-nav .hide-on-mobiles {
+    display: none;
+  }
+}
+
+/* Footer */
+
+footer {
+  background-color: #222;
+  font-size: 16px;
+  padding-bottom: 5px;
+  color: #888;
+  margin-top: 40px;
+}
+
+footer a {
+  color: #fff;
+}
+
+footer .align-right p, footer img {
+  display: inline-block;
+}
+
+footer img {
+  position: relative;
+  top: 8px;
+  margin-left: 5px;
+  opacity: .8;
+  padding: 1px;
+  -webkit-transition: opacity .2s;
+  -moz-transition: opacity .2s;
+  -o-transition: opacity .2s;
+  transition: opacity .2s;
+}
+
+footer a:hover img {
+  opacity: 1;
+}
+
+ at media (max-width: 568px) {
+  footer .one-third p {
+    margin-bottom: 0;
+  }
+  footer .two-thirds p {
+    margin-top: -20px;
+  }
+}
+
+/* Intro */
+
+.intro .unit {
+  padding: 10px 0 40px;
+}
+
+.intro p {
+  font-size: 1.75em;
+  line-height: 1em;
+  margin: 0;
+}
+
+ at media (min-width: 569px) {
+  .intro p {
+    font-size: 3.2em;
+  }
+}
+
+/* Quickstart */
+
+.quickstart {
+  background-color: #3F1F1F;
+  color: #fff;
+  margin: 60px 0;
+  -webkit-box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
+  -moz-box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
+  box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
+}
+
+.quickstart .content {
+  padding: 0;
+}
+
+.quickstart h4 {
+  font-size: 24px;
+  line-height: 24px;
+  margin-top: 20px;
+  text-shadow: 0 1px 3px rgba(0,0,0,.8);
+}
+
+.quickstart .code {
+  font-size: 12px;
+  display: block;
+  margin: 0 0 -30px;
+}
+
+ at media (min-width: 768px) {
+  .quickstart .code {
+    font-size: 18px;
+    margin: -30px 0;
+    float: right;
+  }
+  .quickstart h4 {
+    margin: 50px 0 0;
+    text-align: center;
+  }
+}
+
+/* Code */
+
+.quickstart .code {
+  display: block;
+  padding: 0;
+  font-family: Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
+  line-height: 1.3em;
+}
+
+.quickstart .code .title {
+  display: block;
+  text-align: center;
+  margin: 0 20px;
+  padding: 5px 0;
+  -webkit-border-radius: 5px 5px 0 0;
+  -moz-border-radius: 5px 5px 0 0;
+  border-radius: 5px 5px 0 0;
+  -webkit-box-shadow: 0 3px 10px rgba(0,0,0,.5);
+  -moz-box-shadow: 0 3px 10px rgba(0,0,0,.5);
+  box-shadow: 0 3px 10px rgba(0,0,0,.5);
+  font: 400 16px/24px 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  color: #444;
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
+  background-color: #f7f7f7;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y3ZjdmNyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjclIiBzdG [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), color-stop(7%, #cfcfcf), to(#aaaaaa));
+  background-image: -webkit-linear-gradient(top, #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
+  background-image: -moz-linear-gradient(top, #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
+  background-image: -o-linear-gradient(top, #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
+  background-image: linear-gradient(top, #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#aaaaaa',GradientType=0 );
+  border-bottom: 1px solid #111;
+}
+
+.quickstart .code .shell {
+  padding: 20px;
+  text-shadow: none;
+  margin: 0 20px;
+  background-color: #3d3d3d;
+  -webkit-border-radius: 0 0 5px 5px;
+  -moz-border-radius: 0 0 5px 5px;
+  border-radius: 0 0 5px 5px;
+  -webkit-box-shadow: 0 5px 30px rgba(0,0,0,.3);
+  -moz-box-shadow: 0 5px 30px rgba(0,0,0,.3);
+  box-shadow: 0 5px 30px rgba(0,0,0,.3);
+}
+
+.quickstart .code .line {
+  display: block;
+  margin: 0;
+  padding: 0;
+}
+
+.quickstart .code .line span {
+  display: inline-block;
+}
+
+.quickstart .code .path {
+  color: #87ceeb;
+  -webkit-user-select: none;  /* Chrome all / Safari all */
+  -moz-user-select: none;     /* Firefox all */
+  -ms-user-select: none;      /* IE 10+ */
+  -o-user-select: none;
+  user-select: none;
+}
+
+.quickstart .code .prompt {
+  color: #cd5c5c;
+  -webkit-user-select: none;  /* Chrome all / Safari all */
+  -moz-user-select: none;     /* Firefox all */
+  -ms-user-select: none;      /* IE 10+ */
+  -o-user-select: none;
+  user-select: none;
+}
+
+.quickstart .code .command {
+  color: #f0e68c;
+}
+
+.quickstart .code .output {
+  color: #888;
+}
+
+/* Free Hosting */
+
+.free-hosting .pane {
+  background-color: #444;
+  -webkit-border-radius: 10px;
+  -moz-border-radius: 10px;
+  border-radius: 10px;
+  text-shadow: none;
+  position: relative;
+  padding: 0 20px 30px;
+}
+
+.free-hosting img {
+  margin: -30px 0 0;
+  width: 180px;
+  height: 150px;
+}
+
+.free-hosting h2 {
+  font-size: 28px;
+}
+
+.free-hosting p,
+.free-hosting a {
+  font-size: 16px;
+}
+
+.free-hosting p {
+  margin: .75em 0;
+}
+
+ at media (min-width: 768px) {
+  .free-hosting img {
+    float: left;
+    margin: -20px -30px -30px -50px;
+    width: 300px;
+    height: 251px;
+  }
+  .free-hosting .pane-content {
+    margin-top: 35px;
+    padding-right: 30px;
+  }
+  .free-hosting p,
+  .free-hosting a {
+    font-size: 18px;
+  }
+  .free-hosting .pane:after {
+    content: " ";
+    float: right;
+    background: url(../img/footer-arrow.png) top left no-repeat;
+    width: 73px;
+    height: 186px;
+    position: absolute;
+    right: 0;
+    bottom: -30px;
+  }
+}
+
+/* Article - Used for both docs and news */
+
+
+article {
+  background-color: #444;
+  -webkit-border-radius: 10px;
+  -moz-border-radius: 10px;
+  border-radius: 10px;
+  padding: 20px;
+  margin: 0 10px;
+  -webkit-box-shadow: 0 3px 10px rgba(0,0,0,.1);
+  -moz-box-shadow: 0 3px 10px rgba(0,0,0,.1);
+  box-shadow: 0 3px 10px rgba(0,0,0,.1);
+  font-size: 16px;
+}
+
+ at media (max-width: 480px) {
+  article ul {
+    padding-left: 20px;
+  }
+}
+
+ at media (max-width: 568px) {
+  article {
+    margin: 0;
+  }
+}
+
+ at media (min-width: 768px) {
+  article {
+    padding: 40px 40px 30px;
+    font-size: 21px;
+  }
+}
+
+/* Right-side nav - used by both docs and news */
+
+aside {
+  padding-top: 30px;
+}
+
+aside h4 {
+  text-transform: uppercase;
+  font-size: 14px;
+  font-weight: 700;
+  padding: 0 0 10px 30px;
+  margin-left: -30px;
+  display: inline-block;
+  border-bottom: 1px solid #c00;
+}
+
+aside ul {
+  padding-left: 0;
+}
+
+aside ul:first-child {
+  margin-top: 0;
+}
+
+aside li {
+  list-style-type: none;
+}
+
+aside li a {
+  font-size: 16px;
+  position: relative
+}
+
+aside li.current a:before {
+  content: "";
+  border-color: transparent transparent transparent #444;
+  border-style: solid;
+  border-width: 10px;
+  width: 0;
+  height: 0;
+  position: absolute;
+  top: 0;
+  left: -30px;
+}
+
+/* Documentation */
+
+.docs article {
+  min-height: 800px;
+}
+
+.docs .content {
+  padding: 0;
+}
+
+.section-nav {
+  text-align: center;
+  padding-top: 40px;
+  position: relative;
+  background: url(../img/article-footer.png) top center no-repeat;
+  margin: 40px -20px 10px;
+}
+
+.section-nav > div {
+  width: 49.5%;
+}
+
+.section-nav a, .section-nav span {
+  color: #fff;
+  font-size: 16px;
+  text-transform: uppercase;
+  font-weight: 700;
+  padding: 8px 12px 10px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  /*border: 1px solid #333;*/
+  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
+  -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
+  box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
+  background-color: #777;
+}
+
+.section-nav a:hover {
+  color: #fff;
+  background-color: #888;
+}
+
+.section-nav .next, .section-nav .prev {
+  position: relative;
+}
+
+.section-nav .next:after, .section-nav .prev:before {
+  font-size: 36px;
+  color: #222;
+  font-weight: 900;
+  text-shadow: 0 1px 0 rgba(255,255,255,.4);
+  position: absolute;
+  top: -7px;
+}
+
+.section-nav .next:after {
+  content: "›";
+  right: 10px;
+}
+
+.section-nav .prev:before {
+  content: "‹";
+  left: 10px;
+}
+
+.section-nav .prev, .section-nav .prev:hover {
+  /*float: left;*/
+  padding-left: 30px;
+}
+
+.section-nav .next, .section-nav .next:hover {
+  /*float: right;*/
+  padding-right: 30px;
+}
+
+.section-nav .disabled {
+  opacity: .5;
+  /*filter: alpha*/
+  cursor: default;
+}
+
+.docs-nav-mobile select {
+  color: #000;
+  width: 100%;
+}
+
+/* News */
+
+article h2:first-child {
+  margin-top: 0;
+}
+
+.post-category,
+.post-meta {
+  display: inline-block;
+  vertical-align: middle;
+  font-size: .8em;
+}
+
+.post-category {
+  display: inline-block;
+  margin-left: -30px;
+  padding: 6px 10px 8px;
+  padding-left: 50px;
+  -webkit-border-radius: 0 5px 5px 0;
+  -moz-border-radius: 0 5px 5px 0;
+  border-radius: 0 5px 5px 0;
+  position: relative;
+  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  background-color: #9e2812;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#9e2812), to(#6f0d0d));
+  background-image: -webkit-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -moz-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -o-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: linear-gradient(to bottom, #9e2812 0%,#6f0d0d 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
+}
+
+.post-content img {
+  max-width: 100%
+}
+
+.label {
+  float: left;
+  text-transform: uppercase;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+ at media (max-width: 568px) {
+  .post-category {
+    padding-left: 30px;
+  }
+}
+
+ at media (min-width: 768px) {
+  .post-category {
+    margin-left: -50px;
+  }
+}
+
+.post-category:before {
+  content: "";
+  position: absolute;
+  top: -10px;
+  left: 0;
+  border-color: transparent #6f0d0d #6f0d0d transparent;
+  border-style: solid;
+  border-width: 5px;
+  width: 0;
+  height: 0;
+}
+
+.avatar {
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.post-meta {
+  padding: 5px 0;
+  color: #aaa;
+  font-weight: 600;
+  text-shadow: 0 -1px 0 #000;
+}
+
+.post-date,
+.post-author {
+  margin-left: 10px;
+}
+
+.news article + article {
+  margin-top: -10px;
+  -webkit-border-radius: 0 0 10px 10px;
+  -moz-border-radius: 0 0 10px 10px;
+  border-radius: 0 0 10px 10px;
+  border-top: 1px solid #555;
+  -webkit-box-shadow: 0 -1px 0 #2f2f2f;
+  -moz-box-shadow: 0 -1px 0 #2f2f2f;
+  box-shadow: 0 -1px 0 #2f2f2f;
+}
+
+/* Code Highlighting */
+
+
+pre, code {
+  white-space: pre;
+  display: inline-block;
+  margin: 0;
+  font: 14px/1.8em Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
+  padding: 0 0.5em;
+}
+
+ at media (min-width: 768px) {
+  pre, code {
+    font-size: 16px;
+  }
+}
+
+.highlight, p > pre, p > code, p > nobr > code, li > code, h5 > code, .note > code {
+  background-color: #333;
+  color: #fff;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
+    0 1px 0 rgba(255,255,255,.1),
+    0 -1px 0 rgba(0,0,0,.5);
+  -moz-box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
+    0 1px 0 rgba(255,255,255,.1),
+    0 -1px 0 rgba(0,0,0,.5);
+  box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
+    0 1px 0 rgba(255,255,255,.1),
+    0 -1px 0 rgba(0,0,0,.5);
+}
+
+.note code {
+  background-color: #333;
+  background-color: rgba(0,0,0,0.2);
+  margin-left: 2.5px;
+  margin-right: 2.5px;
+  font-size: 0.8em;
+}
+
+.highlight {
+  margin: 1em 0;
+  padding: 10px 0;
+  width: 100%;
+  overflow: auto;
+}
+
+/* HTML Elements */
+
+h1, h2, h3, h4, h5, h6 {
+  margin: 0;
+}
+
+a {
+  color: #fc0;
+  text-decoration: none;
+  -webkit-transition: all .25s;
+  -moz-transition: all .25s;
+  -o-transition: all .25s;
+  transition: all .25s;
+}
+
+a:hover {
+  color: #f90;
+}
+
+strong {
+  font-weight: 700;
+}
+
+p {
+  line-height: 1.5em;
+}
+
+.left { float: left; }
+.right { float: right; }
+.align-right { text-align: right; }
+.align-left { text-align: left; }
+.align-center { text-align: center; }
+
+/* Article HTML */
+
+article h2,
+article h3,
+article h4,
+article h5,
+article h6 {
+  margin: 1em 0;
+}
+
+article h4 {
+  color: #fff;
+}
+
+h5, h6 {
+  font-size: 1em;
+  font-style: italic;
+}
+
+article ul li p {
+  margin: 0;
+}
+
+article ul li, article ol li {
+  line-height: 1.5em;
+  margin-bottom: 0.5em;
+}
+
+article ul li blockquote {
+  margin: 10px 0;
+}
+
+blockquote {
+  border-left: 2px solid #777;
+  padding-left: 20px;
+  font-style: italic;
+  font-size: 18px;
+  font-weight: 500;
+}
+
+
+/* Tables */
+
+table {
+  width: 100%;
+  background-color: #555;
+  margin: .5em 0;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3);
+  -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3);
+  box-shadow: 0 1px 3px rgba(0,0,0,.3);
+}
+
+thead {
+  -webkit-border-top-left-radius: 5px;
+  -moz-border-radius-topleft: 5px;
+  border-top-left-radius: 5px;
+  -webkit-border-top-right-radius: 5px;
+  -moz-border-radius-topright: 5px;
+  border-top-right-radius: 5px;
+  color: #fff;
+  background-color: #3a3a3a;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNhM2EzYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3a3a3a), to(#1e1e1e));
+  background-image: -webkit-linear-gradient(top, #3a3a3a 0%, #1e1e1e 100%);
+  background-image: -moz-linear-gradient(top, #3a3a3a 0%, #1e1e1e 100%);
+  background-image: -o-linear-gradient(top, #3a3a3a 0%, #1e1e1e 100%);
+  background-image: linear-gradient(to bottom, #3a3a3a 0%,#1e1e1e 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3a3a3a', endColorstr='#1e1e1e',GradientType=0 );
+}
+
+thead th {
+  position: relative;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+}
+
+thead th:first-child {
+  -webkit-border-top-left-radius: 5px;
+  -moz-border-radius-topleft: 5px;
+  border-top-left-radius: 5px;
+}
+
+thead th:last-child {
+  -webkit-border-top-right-radius: 5px;
+  -moz-border-radius-topright: 5px;
+  border-top-right-radius: 5px;
+}
+
+td {
+  padding: .5em .75em;
+}
+
+td p {
+  margin: 0;
+}
+
+th {
+  text-transform: uppercase;
+  font-size: 16px;
+  padding: .5em .75em;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.9);
+  color: #888;
+}
+
+tbody td {
+  border-top: 1px solid #747474;
+  border-top: 1px solid rgba(0,0,0,.1);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3Rv [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.1)), to(rgba(255,255,255,0)));
+  background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
+  background-image: -moz-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
+  background-image: -o-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
+  background-image: linear-gradient(to bottom, rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1affffff', endColorstr='#00ffffff',GradientType=0 );
+}
+
+td p {
+  font-size: 16px;
+}
+
+td p code {
+  font-size: 14px;
+}
+
+code.option, th .option, code.filter, th .filter {
+  color: #50B600;
+}
+
+code.flag, th .flag, code.output, th .output {
+  color: #049DCE;
+}
+
+code.option, code.flag, code.filter, code.output {
+  margin-bottom: 2px;
+}
+
+/* Note types */
+
+.note {
+  margin: 30px 0;
+  margin-left: -30px;
+  padding: 20px 20px 24px;
+  padding-left: 50px;
+  -webkit-border-radius: 0 5px 5px 0;
+  -moz-border-radius: 0 5px 5px 0;
+  border-radius: 0 5px 5px 0;
+  position: relative;
+  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  background-color: #7e6d42;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdlNmQ0MiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#7e6d42), to(#5c4e35));
+  background-image: -webkit-linear-gradient(top, #7e6d42 0%, #5c4e35 100%);
+  background-image: -moz-linear-gradient(top, #7e6d42 0%, #5c4e35 100%);
+  background-image: -o-linear-gradient(top, #7e6d42 0%, #5c4e35 100%);
+  background-image: linear-gradient(to bottom, #7e6d42 0%,#5c4e35 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7e6d42', endColorstr='#5c4e35',GradientType=0 );
+}
+
+ at media (max-width: 568px) {
+  .note {
+    margin-right: -30px;
+  }
+}
+
+ at media (min-width: 768px) {
+  .note {
+    margin-left: -50px;
+  }
+}
+
+.note:before {
+  content: "";
+  position: absolute;
+  top: -10px;
+  left: 0;
+  border-color: transparent #222 #222 transparent;
+  border-style: solid;
+  border-width: 5px;
+  width: 0;
+  height: 0;
+}
+
+.note h5, .note p {
+  margin: 0;
+  color: #fff;
+}
+
+.note h5 {
+  line-height: 1.5em;
+  font-weight: 900;
+  font-style: normal;
+}
+
+.note p {
+  font-weight: 400;
+  font-size: .75em;
+}
+
+.info {
+  background-color: #0389aa;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAzODlhYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#0389aa), to(#00617f));
+  background-image: -webkit-linear-gradient(top, #0389aa 0%, #00617f 100%);
+  background-image: -moz-linear-gradient(top, #0389aa 0%, #00617f 100%);
+  background-image: -o-linear-gradient(top, #0389aa 0%, #00617f 100%);
+  background-image: linear-gradient(to bottom, #0389aa 0%,#00617f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0389aa', endColorstr='#00617f',GradientType=0 );
+}
+
+.warning {
+  background-color: #9e2812;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#9e2812), to(#6f0d0d));
+  background-image: -webkit-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -moz-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -o-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: linear-gradient(to bottom, #9e2812 0%,#6f0d0d 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
+}
+
+.unreleased {
+  background-color: #cd9239;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2NkOTIzOSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(205,146,57,1)), to(rgba(162,117,40,1)));
+  background-image: -webkit-linear-gradient(top, rgba(205,146,57,1) 0%, rgba(162,117,40,1) 100%);
+  background-image: -moz-linear-gradient(top, rgba(205,146,57,1) 0%, rgba(162,117,40,1) 100%);
+  background-image: -o-linear-gradient(top, rgba(205,146,57,1) 0%, rgba(162,117,40,1) 100%);
+  background-image: linear-gradient(to bottom, rgba(205,146,57,1) 0%,rgba(162,117,40,1) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cd9239', endColorstr='#a27528',GradientType=0 );
+}
+
+.info:before {
+  border-color: transparent #00617f #00617f transparent;
+}
+
+.warning:before {
+  border-color: transparent #6f0d0d #6f0d0d transparent;
+}
+
+.unreleased:before {
+  border-color: transparent #664719 #664719 transparent;
+}
+
+.note:after {
+  content: "★";
+  color: #fc0;
+  position: absolute;
+  top: 14px;
+  left: 14px;
+  font-size: 28px;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+.info:after {
+  content: "ⓘ";
+  color: #fff;
+  position: absolute;
+  top: 15px;
+  left: 15px;
+  font-size: 28px;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+.warning:after {
+  content: "‼";
+  color: #fc0;
+  position: absolute;
+  top: 15px;
+  left: 15px;
+  font-size: 32px;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+.unreleased:after {
+  content: "⚒";
+  color: #2b2a12;
+  position: absolute;
+  top: 8px;
+  left: 15px;
+  font-size: 38px;
+  font-weight: 700;
+  text-shadow: 0 1px 0 rgba(255,255,255,.25);
+}
+
+/* Responsive tables */
+
+ at media (max-width: 768px) {
+  .mobile-side-scroller {
+    overflow-x: scroll;
+    margin: 0 -40px;
+    padding: 0 10px;
+  }
+}
diff --git a/site/_includes/docs_contents.html b/site/_includes/docs_contents.html
index 523b522..2ac64bb 100644
--- a/site/_includes/docs_contents.html
+++ b/site/_includes/docs_contents.html
@@ -1,16 +1,8 @@
 <div class="unit one-fifth hide-on-mobiles">
   <aside>
-    <h4>Getting Started</h4>
-    {% include docs_ul.html items='home quickstart installation usage structure configuration' %}
-    <h4>Your Content</h4>
-    {% include docs_ul.html items='frontmatter posts drafts pages variables datafiles migrations' %}
-    <h4>Customization</h4>
-    {% include docs_ul.html items='templates permalinks pagination plugins extras' %}
-    <h4>Deployment</h4>
-    {% include docs_ul.html items='github-pages deployment-methods' %}
-    <h4>Miscellaneous</h4>
-    {% include docs_ul.html items='troubleshooting sites resources upgrading' %}
-    <h4>Meta</h4>
-    {% include docs_ul.html items='contributing history' %}
+    {% for section in site.data.docs %}
+    <h4>{{ section.title }}</h4>
+    {% include docs_ul.html items=section.docs %}
+    {% endfor %}
   </aside>
 </div>
diff --git a/site/_includes/docs_contents_mobile.html b/site/_includes/docs_contents_mobile.html
index bbc367d..b3e0110 100644
--- a/site/_includes/docs_contents_mobile.html
+++ b/site/_includes/docs_contents_mobile.html
@@ -1,23 +1,10 @@
 <div class="docs-nav-mobile unit whole show-on-mobiles">
   <select onchange="if (this.value) window.location.href=this.value">
     <option value="">Navigate the docs…</option>
-    <optgroup label="Getting started">
-      {% include docs_option.html items='home quickstart installation usage structure configuration' %}
-    </optgroup>
-    <optgroup label="Your Content">
-      {% include docs_option.html items='frontmatter posts drafts pages variables datafiles migrations' %}
-    </optgroup>
-    <optgroup label="Customization">
-      {% include docs_option.html items='templates permalinks pagination plugins extras' %}
-    </optgroup>
-    <optgroup label="Deployment">
-      {% include docs_option.html items='github-pages deployment-methods' %}
-    </optgroup>
-    <optgroup label="Miscellaneous">
-      {% include docs_option.html items='troubleshooting sites resources upgrading' %}
-    </optgroup>
-    <optgroup label="Meta">
-      {% include docs_option.html items='contributing history' %}
+    {% for section in site.data.docs %}
+    <optgroup label="{{ section.title }}">
+      {% include docs_option.html items=section.docs %}
     </optgroup>
+    {% endfor %}
   </select>
 </div>
diff --git a/site/_includes/docs_option.html b/site/_includes/docs_option.html
index 8284ed9..57b76e2 100644
--- a/site/_includes/docs_option.html
+++ b/site/_includes/docs_option.html
@@ -1,7 +1,7 @@
-{% assign items = include.items | split: ' ' %}
+{% assign items = include.items %}
 
 {% for item in items %}
-  {% assign item_url = item | prepend:'/docs/' | append:'/' %}
+  {% assign item_url = item | prepend:"/docs/" | append:"/" %}
 
   {% for p in site.pages %}
     {% if p.url == item_url %}
diff --git a/site/_includes/docs_ul.html b/site/_includes/docs_ul.html
index 4ba8247..b778df1 100644
--- a/site/_includes/docs_ul.html
+++ b/site/_includes/docs_ul.html
@@ -1,13 +1,13 @@
-{% assign items = include.items | split: ' ' %}
+{% assign items = include.items %}
 
 <ul>
 {% for item in items %}
-  {% assign item_url = item | prepend:'/docs/' | append:'/' %}
+  {% assign item_url = item | prepend:"/docs/" | append:"/" %}
 
   {% if item_url == page.url %}
-    {% assign c = 'current' %}
+    {% assign c = "current" %}
   {% else %}
-    {% assign c = '' %}
+    {% assign c = "" %}
   {% endif %}
 
   {% for p in site.pages %}
@@ -16,5 +16,5 @@
     {% endif %}
   {% endfor %}
 
-{% endfor %}  
+{% endfor %}
 </ul>
diff --git a/site/_includes/footer.html b/site/_includes/footer.html
index d73b10e..c42b1a4 100644
--- a/site/_includes/footer.html
+++ b/site/_includes/footer.html
@@ -1,13 +1,13 @@
 <footer>
   <div class="grid">
     <div class="unit one-third center-on-mobiles">
-      <p>By <a href="http://tom.preston-werner.com">Tom Preston-Werner</a>, <a href="http://quaran.to/">Nick Quaranto</a>, and many more <a href="{{ site.repository }}/graphs/contributors">awesome contributors</a>.</p>
+      <p>The contents of this website are © {{ site.time | date: '%Y' }} <a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> under the terms of the <a href="{{ site.repository }}/blob/master/LICENSE">MIT License</a>.</p>
     </div>
     <div class="unit two-thirds align-right center-on-mobiles">
       <p>
         Proudly hosted by
         <a href="https://github.com">
-          <img src="{{ site.url }}/img/footer-logo.png" alt="GitHub • Social coding">
+          <img src="/img/footer-logo.png" width="100" height="30" alt="GitHub • Social coding">
         </a>
       </p>
     </div>
diff --git a/site/_includes/header.html b/site/_includes/header.html
index 39de1bf..f55cff3 100644
--- a/site/_includes/header.html
+++ b/site/_includes/header.html
@@ -5,9 +5,9 @@
   <div class="grid">
     <div class="unit one-third center-on-mobiles">
       <h1>
-        <a href="{{ site.url }}/">
+        <a href="/">
           <span>Jekyll</span>
-          <img src="{{ site.url }}/img/logo-2x.png" width="249" height="115" alt="">
+          <img src="/img/logo-2x.png" width="249" height="115" alt="Logo">
         </a>
       </h1>
     </div>
diff --git a/site/_includes/news_contents.html b/site/_includes/news_contents.html
index f22a1a1..5c54521 100644
--- a/site/_includes/news_contents.html
+++ b/site/_includes/news_contents.html
@@ -10,7 +10,7 @@
     </ul>
     <h4>Recent Releases</h4>
     <ul>
-      {% for post in site.posts limit:5 %}
+      {% for post in site.categories.release limit:5 %}
       <li class="{% if page.title == post.title %}current{% endif %}">
         <a href="{{ post.url }}">Version {{ post.version }}</a>
       </li>
@@ -19,5 +19,15 @@
         <a href="/docs/history/">History »</a>
       </li>
     </ul>
+    <h4>Other News</h4>
+    <ul>
+        {% for post in site.posts %}
+        {% unless post.categories contains 'release' %}
+        <li class="{% if page.title == post.title %}current{% endif %}">
+          <a href="{{ post.url }}">{{ post.title }}</a>
+        </li>
+        {% endunless %}
+        {% endfor %}
+    </ul>
   </aside>
 </div>
diff --git a/site/_includes/news_item.html b/site/_includes/news_item.html
index ec3d742..60245d6 100644
--- a/site/_includes/news_item.html
+++ b/site/_includes/news_item.html
@@ -5,16 +5,16 @@
     </a>
   </h2>
   <span class="post-category">
-    {% for category in post.categories %}
-    <span class="label">{{ category }}</span>
-    {% endfor %}
+    <span class="label">
+      {{ post.categories | array_to_sentence_string }}
+    </span>
   </span>
   <div class="post-meta">
     <span class="post-date">
       {{ post.date | date_to_string }}
     </span>
     <a href="https://github.com/{{ post.author }}" class="post-author">
-      <img src="https://github.com/{{ post.author }}.png" class="avatar" alt="{{ post.author }}"/>
+      <img src="https://github.com/{{ post.author }}.png" class="avatar" alt="{{ post.author }}" width="24" height="24">
       {{ post.author }}
     </a>
   </div>
diff --git a/site/_includes/primary-nav-items.html b/site/_includes/primary-nav-items.html
index 54e6a59..f5628b7 100644
--- a/site/_includes/primary-nav-items.html
+++ b/site/_includes/primary-nav-items.html
@@ -1,14 +1,17 @@
 <ul>
   <li class="{% if page.overview %}current{% endif %}">
-    <a href="{{ site.url }}/">Overview</a>
+    <a href="/">Home</a>
   </li>
   <li class="{% if page.url contains '/docs/' %}current{% endif %}">
-    <a href="{{ site.url }}/docs/home/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
+    <a href="/docs/home/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
   </li>
   <li class="{% if page.author %}current{% endif %}">
-    <a href="{{ site.url }}/news/">News</a>
+    <a href="/news/">News</a>
   </li>
-  <li class="">
+  <li>
+    <a href="{{ site.help_url }}">Help</a>
+  </li>
+  <li>
     <a href="{{ site.repository }}"><span class="hide-on-mobiles">View on </span>GitHub</a>
   </li>
 </ul>
diff --git a/site/_includes/section_nav.html b/site/_includes/section_nav.html
index beb65e7..edba193 100644
--- a/site/_includes/section_nav.html
+++ b/site/_includes/section_nav.html
@@ -1,7 +1,7 @@
 <div class="section-nav">
   <div class="left align-right">
     {% if page.prev_section != null %}
-      <a href="{{ site.url }}/docs/{{ page.prev_section }}/" class="prev">
+      <a href="/docs/{{ page.prev_section }}/" class="prev">
         Back
       </a>
     {% else %}
@@ -10,7 +10,7 @@
   </div>
   <div class="right align-left">
     {% if page.next_section != null %}
-      <a href="{{ site.url }}/docs/{{ page.next_section }}/" class="next">
+      <a href="/docs/{{ page.next_section }}/" class="next">
         Next
       </a>
     {% else %}
diff --git a/site/_includes/top.html b/site/_includes/top.html
index e17496c..35ba2f2 100644
--- a/site/_includes/top.html
+++ b/site/_includes/top.html
@@ -4,14 +4,14 @@
   <meta charset="UTF-8">
   <title>{{ page.title }}</title>
   <meta name="viewport" content="width=device-width,initial-scale=1">
-  <link rel="alternate" type="application/rss+xml" title="Jekyll • Simple, blog-aware, static sites - Feed" href="/feed.xml" />
-  <link rel="alternate" type="application/atom+xml" title="Recent commits to Jekyll’s master branch" href="{{ site.repository }}/commits/master.atom" />
-  <link href='http://fonts.googleapis.com/css?family=Lato:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
-  <link href='http://fonts.googleapis.com/css?family=Arizonia' rel='stylesheet' type='text/css'>
-  <link rel="stylesheet" href="{{ site.url }}/css/normalize.css" />
-  <link rel="stylesheet" href="{{ site.url }}/css/gridism.css" />
-  <link rel="stylesheet" href="{{ site.url }}/css/style.css" />
-  <link rel="stylesheet" href="{{ site.url }}/css/pygments.css" />
-  <link rel="icon" type="image/png" href="{{ site.url }}/favicon.png" />
-  <script src="{{ site.url }}/js/modernizr-2.5.3.min.js"></script>
+  <meta name="generator" content="Jekyll v{{ jekyll.version }}">
+  <link rel="alternate" type="application/rss+xml" title="Jekyll • Simple, blog-aware, static sites - Feed" href="/feed.xml">
+  <link rel="alternate" type="application/atom+xml" title="Recent commits to Jekyll’s master branch" href="{{ site.repository }}/commits/master.atom">
+  <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
+  <link rel="stylesheet" href="/css/screen.css">
+  <link rel="icon" type="image/x-icon" href="/favicon.ico">
+  <!--[if lt IE 9]>
+  <script src="/js/html5shiv.min.js"></script>
+  <script src="/js/respond.min.js"></script>
+  <![endif]-->
 </head>
diff --git a/site/_layouts/default.html b/site/_layouts/default.html
index 8919fca..77ebd5f 100644
--- a/site/_layouts/default.html
+++ b/site/_layouts/default.html
@@ -6,6 +6,7 @@
   {{ content }}
 
   {% include footer.html %}
+  {% include anchor_links.html %}
   {% include analytics.html %}
 
 </body>
diff --git a/site/_layouts/news_item.html b/site/_layouts/news_item.html
index d395502..6d27976 100644
--- a/site/_layouts/news_item.html
+++ b/site/_layouts/news_item.html
@@ -8,20 +8,20 @@ layout: news
     <a href="{{ page.url }}" class="permalink" title="Permalink">∞</a>
   </h2>
   <span class="post-category">
-    {% for category in page.categories %}
-    <span class="label">{{ category }}</span>
-    {% endfor %}
+    <span class="label">
+      {{ page.categories | array_to_sentence_string }}
+    </span>
   </span>
   <div class="post-meta">
     <span class="post-date">
       {{ page.date | date_to_string }}
     </span>
     <a href="https://github.com/{{ page.author }}" class="post-author">
-      <img src="https://github.com/{{ page.author }}.png" class="avatar" />
+      <img src="https://github.com/{{ page.author }}.png" class="avatar" alt="{{ page.author }}" width="24" height="24">
       {{ page.author }}
     </a>
   </div>
-  <p class="post-content">
+  <div class="post-content">
     {{ content }}
-  </p>
+  </div>
 </article>
diff --git a/site/_posts/2013-05-06-jekyll-1-0-0-released.markdown b/site/_posts/2013-05-06-jekyll-1-0-0-released.markdown
index 34010e0..4b8e3be 100644
--- a/site/_posts/2013-05-06-jekyll-1-0-0-released.markdown
+++ b/site/_posts/2013-05-06-jekyll-1-0-0-released.markdown
@@ -19,5 +19,5 @@ examples and for compiling this list):
 
 Take a look at the [Upgrading][] page in the docs for more detailed information.
 
-[history]: /docs/history/#100__20130506
+[history]: /docs/history/#v1-0-0
 [Upgrading]: /docs/upgrading/
diff --git a/site/_posts/2013-05-08-jekyll-1-0-1-released.markdown b/site/_posts/2013-05-08-jekyll-1-0-1-released.markdown
index 0a505ac..90edcc2 100644
--- a/site/_posts/2013-05-08-jekyll-1-0-1-released.markdown
+++ b/site/_posts/2013-05-08-jekyll-1-0-1-released.markdown
@@ -24,4 +24,4 @@ See the [History][] page for more information on this release.
 [#{{ issue }}]: {{ site.repository }}/issues/{{ issue }}
 {% endfor %}
 
-[History]: /docs/history/#101__20130508
+[History]: /docs/history/#v1-0-1
diff --git a/site/_posts/2013-05-12-jekyll-1-0-2-released.markdown b/site/_posts/2013-05-12-jekyll-1-0-2-released.markdown
index 8993a6b..2a2b97e 100644
--- a/site/_posts/2013-05-12-jekyll-1-0-2-released.markdown
+++ b/site/_posts/2013-05-12-jekyll-1-0-2-released.markdown
@@ -25,4 +25,4 @@ See the [History][] page for more information on this release.
 [#{{ issue }}]: {{ site.repository }}/issues/{{ issue }}
 {% endfor %}
 
-[History]: /docs/history/#102__20130512
+[History]: /docs/history/#v1-0-2
diff --git a/site/_posts/2013-06-07-jekyll-1-0-3-released.markdown b/site/_posts/2013-06-07-jekyll-1-0-3-released.markdown
index 0a04da1..566ae66 100644
--- a/site/_posts/2013-06-07-jekyll-1-0-3-released.markdown
+++ b/site/_posts/2013-06-07-jekyll-1-0-3-released.markdown
@@ -22,4 +22,4 @@ See the [History][] page for more information on this release.
 [#{{ issue }}]: {{ site.repository }}/issues/{{ issue }}
 {% endfor %}
 
-[History]: /docs/history/#103__20130607
+[History]: /docs/history/#v1-0-3
diff --git a/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown b/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
index f869106..2d0096b 100644
--- a/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
+++ b/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
@@ -9,10 +9,10 @@ categories: [release]
 
 
 Coming just 10 days after the release of v1.1.0, v1.1.1 is out with a patch for the nasty
-excerpt inception bug ([1339][]) and non-zero exit codes for invalid commands
-([1338][]).
+excerpt inception bug ([#1339][]) and non-zero exit codes for invalid commands
+([#1338][]).
 
-To all those affected by the [strange excerpt bug in v1.1.0][1321], I'm sorry. I think we
+To all those affected by the [strange excerpt bug in v1.1.0][#1321], I'm sorry. I think we
 have it all patched up and it should be deployed to [GitHub Pages][gh_pages] in the next
 couple weeks. Thank you for your patience!
 
@@ -23,7 +23,7 @@ See the [GitHub Release][] page for more a more detailed changelog for this rele
 
 {% assign issue_numbers = "1339|1338|1321" | split: "|" %}
 {% for issue in issue_numbers %}
-[{{ issue }}]: {{ site.repository }}/issues/{{ issue }}
+[#{{ issue }}]: {{ site.repository }}/issues/{{ issue }}
 {% endfor %}
 
 [GitHub Release]: {{ site.repository }}/releases/tag/v1.1.1
diff --git a/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown b/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
index faf81dd..635d0e6 100644
--- a/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
+++ b/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
@@ -9,11 +9,11 @@ categories: [release]
 
 Version 1.0.4 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time.
 
-Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system. 
+Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system.
 
 We recommend you upgrade to Jekyll v1.0.4 immediately if you use `Liquid::Drop` plugins on your Jekyll site.
 
-Many thanks for [Ben Balter](http://github.com/benbalter) for alerting us to the problem
+Many thanks for [Ben Balter](https://github.com/benbalter) for alerting us to the problem
 and [submitting a patch][1349] so quickly.
 
 [230]: https://github.com/Shopify/liquid/pull/230
diff --git a/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown b/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
index 54a8c87..ed16ca7 100644
--- a/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
+++ b/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
@@ -9,11 +9,11 @@ categories: [release]
 
 Version 1.1.2 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time.
 
-Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system. 
+Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system.
 
 We recommend you upgrade to Jekyll v1.1.2 immediately if you use `Liquid::Drop` plugins on your Jekyll site.
 
-Many thanks for [Ben Balter](http://github.com/benbalter) for alerting us to the problem
+Many thanks for [Ben Balter](https://github.com/benbalter) for alerting us to the problem
 and [submitting a patch][1349] so quickly.
 
 [230]: https://github.com/Shopify/liquid/pull/230
diff --git a/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown b/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
index 26a6ca1..832dbd0 100644
--- a/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
+++ b/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
@@ -8,8 +8,8 @@ categories: [release]
 ---
 
 Quick turnover, anyone? A [recent incompatibility with Liquid
-v2.5.2](https://github.com/mojombo/jekyll/pull/1525) produced a nasty bug in
-which `include` tags were not rendered properly within `if` blocks. 
+v2.5.2](https://github.com/jekyll/jekyll/pull/1525) produced a nasty bug in
+which `include` tags were not rendered properly within `if` blocks.
 
 This release also includes a better handling of detached servers (prints pid and
 the command for killing the process). **Note**: the `--detach` flag and
diff --git a/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown b/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
index f4f4852..5a64cfc 100644
--- a/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
+++ b/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
@@ -13,7 +13,7 @@ available for any early adopters who want to give the latest and
 greatest code a spin without having to clone a repository from git.
 
 Please take this prerelease for a spin and [let us
-know](https://github.com/mojombo/jekyll/issues/new) if you run into any
+know](https://github.com/jekyll/jekyll/issues/new) if you run into any
 issues!
 
 
diff --git a/site/_posts/2013-12-09-jekyll-1-4-1-released.markdown b/site/_posts/2013-12-09-jekyll-1-4-1-released.markdown
new file mode 100644
index 0000000..509571b
--- /dev/null
+++ b/site/_posts/2013-12-09-jekyll-1-4-1-released.markdown
@@ -0,0 +1,20 @@
+---
+layout: news_item
+title: 'Jekyll 1.4.1 Released'
+date: 2013-12-09 20:44:13 -0600
+author: mattr-
+version: 1.4.1
+categories: [release]
+---
+
+Another quick turnover, anyone? A [critical
+bug]({{ site.repository }}/issues/1794) in the reading of
+posts snuck itself into the 1.4.0 release.
+
+To address this issue, we're releasing v1.4.1 of Jekyll so that you can
+keep on writing without any problems.
+
+As always, you can find the full list of fixes in this release in the
+[change log](/docs/history/)!
+
+
diff --git a/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown b/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
index 82a9134..a97bcec 100644
--- a/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
+++ b/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
@@ -23,5 +23,4 @@ traversal, potentially overwriting otherwise-trusted content with arbitrary HTML
 or Javascript depending on your server's configuration.
 
 *Maintainer's note: Many thanks to @gregose and @charliesome for discovering
-these vulnerabilities, and to @BenBalter and @alindeman for writing the patch.
-- at parkr*
+these vulnerabilities, and to @BenBalter and @alindeman for writing the patch.*
diff --git a/site/_posts/2014-03-24-jekyll-1-5-0-released.markdown b/site/_posts/2014-03-24-jekyll-1-5-0-released.markdown
index 95eff0b..5b103dc 100644
--- a/site/_posts/2014-03-24-jekyll-1-5-0-released.markdown
+++ b/site/_posts/2014-03-24-jekyll-1-5-0-released.markdown
@@ -16,4 +16,4 @@ For a full changelog, check out our [history][] page.
 Now, back to work on 2.0.0!
 
 [fun issue with path sanitizing]: https://github.com/jekyll/jekyll/issues/1948
-[history]: /docs/history/#150__20140324
+[history]: /docs/history/#v1-5-0
diff --git a/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown b/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
index 1eae60f..e8a4096 100644
--- a/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
+++ b/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
@@ -19,7 +19,7 @@ Well, we can't have that! In 1.5.1, you'll instead see:
 
 {% highlight ruby %}
 > sanitized_path("/tmp/foobar/jail", "..c:/..c:/..c:/etc/passwd")
-=> "/tmp/foobar/jail/etc/passwd"
+=> "/tmp/foobar/jail/..c:/..c:/..c:/etc/passwd"
 {% endhighlight %}
 
 Luckily not affecting 1.4.x, this fix will make 1.5.0 that much safer for
diff --git a/site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown b/site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown
new file mode 100644
index 0000000..3dd9e57
--- /dev/null
+++ b/site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown
@@ -0,0 +1,31 @@
+---
+layout: news_item
+title: 'Jekyll turns 2.0.0'
+author: parkr
+version: 2.0.0
+categories: [release]
+---
+
+A year ago to the day, [we released Jekyll 1.0.0][jekyll-1]. One year later, we present to you the next major version: Jekyll 2.0.0.
+
+Jam-packed with some [highly-requested features and bugfixes galore][changelog], this is the best Jekyll yet. Some notable changes:
+
+1. [Collections](/docs/collections/) - Collections allow you to define an unlimited number of custom document types (beyond just posts and pages) for different types of content you may want to author in Jekyll such as API documentation or a cookbook!
+2. [Brand new site template](https://github.com/jekyll/jekyll/pull/2050#issuecomment-35938016) (thanks [@jglovier][]!) - Getting started with Jekyll just got a lot easier and a lot more beautiful. Just run `jekyll new <path>` and you're good to go.
+3. [Native Sass & CoffeeScript support](/docs/assets/) - We love CSS and JavaScript as much as the next guy, but there will always be a special place in our hearts for Sass and CoffeeScript. We now offer native support for these file types — no more messing around with Rake or Grunt!
+4. [YAML Front-Matter defaults](/docs/configuration/#frontmatter-defaults) - If you've set `layout: post` more than once in your life, you'll love this new feature: set front-matter defaults for a given directory or type.
+5. [Custom markdown processors](/docs/configuration/#custom-markdown-processors) - Always wanted to use your favourite home-grown Markdown converter, but couldn't with Jekyll? Now you can. Simply specify `markdown: MyConverterClass` and you're on your way.
+6. [Addition of `where` and `group_by` Liquid filters](/docs/templates/#filters) - Simplifying your Liquid templates one filter at a time. The `where` filter selects from an array all items within which have a given value for a property. The `group_by` filter groups all items in an array which have the same value for a given property.
+7. [Switch from Maruku to Kramdown as default markdown converter](https://github.com/jekyll/jekyll/pull/1988) - Maruku is dead. We've replaced it with the converter which has the closest feature parity: Kramdown!
+
+Check out our [changelog][] for a complete list of all (200+) changes.
+
+Many thanks to these 183 contributors for making Jekyll 2.0.0 happen:
+
+Parker Moore, Matt Rogers, maul.esel, Anatol Broder, Zach Gersh, Joel Glovier, Ben Balter, XhmikosR, Coby Chapple, John Piasetzki, Aidan Feldman, Robin Dupret, Pascal Borreli, Troy Swanson, Erik Michaels-Ober, albertogg, Lucas Jenss, Matt Rogers & Persa Zula, Eric Mill, Shigeya Suzuki, Jens Nazarenus, ddavison, Pat Hawks, Rob Wierzbowski, MURAOKA Taro, Casey Lang, Fabian Rodriguez, Greg Karékinian, Zlatan Vasović, Christopher Nicotera, Dmitry Chestnykh, Ryan Morrissey, Jordon, John Hughe [...]
+
+Happy developing!
+
+[changelog]: /docs/history/
+[@jglovier]: https://github.com/jglovier
+[jekyll-1]: /news/2013/05/06/jekyll-1-0-0-released/
diff --git a/site/_posts/2014-05-08-jekyll-2-0-3-released.markdown b/site/_posts/2014-05-08-jekyll-2-0-3-released.markdown
new file mode 100644
index 0000000..ac5e9d7
--- /dev/null
+++ b/site/_posts/2014-05-08-jekyll-2-0-3-released.markdown
@@ -0,0 +1,18 @@
+---
+layout: news_item
+title: 'Jekyll 2.0.3 Released'
+date: 2014-05-08 22:43:17 -0400
+author: parkr
+version: 2.0.3
+categories: [release]
+---
+
+Hey again! Just wanted to let you know we've released another version of Jekyll, jam-packed with bug fixes.
+
+A huge "thank you" is in order for all the folks who have submitted bug reports over the last 2 days — your input is what allows this project to continue. It's always a pain to deal with a MAJOR version bump release, but it's been pretty smooth so far and you have all been nice about the flaws you've found in the tool. Keep filing those reports so we can continue to make Jekyll even better!
+
+Thank you to the contributors that contributed code to 2.0.1, 2.0.2, and/or 2.0.3:
+
+Parker Moore, Yi Zeng, Gabe Ortiz, Aaron Broder, Alberto Grespan, gpxl, David Briggs, Kevin Ingersoll, and Troy Swanson.
+
+As always, check out the [changelog](/docs/history/) for more info. Happy Jekylling!
diff --git a/site/_posts/2014-06-04-jekyll-stickers-1-dollar-stickermule.markdown b/site/_posts/2014-06-04-jekyll-stickers-1-dollar-stickermule.markdown
new file mode 100644
index 0000000..92b8539
--- /dev/null
+++ b/site/_posts/2014-06-04-jekyll-stickers-1-dollar-stickermule.markdown
@@ -0,0 +1,19 @@
+---
+layout: news_item
+title: 'Pick Up your $1 Jekyll Sticker'
+date: 2014-06-04 15:46:53 -0400
+author: parkr
+categories: [partners]
+---
+
+![Jekyll Sticker](/img/jekyll-sticker.jpg)
+
+You may have heard that [@cobyism](https://github.com/cobyism)'s excellent
+Jekyll logo has been made into a sticker. You may have sat idly by, wishing
+that you could have a sticker honoring your beloved Jekyll.
+
+The StickerMule team says, *"Pine no longer!"* StickerMule has **[discounted the
+price of Jekyll stickers down to $1 and are offering free (domestic)
+shipping](http://www.stickermule.com/marketplace/825-jekyll-stickers)!**
+Go grab one now on the StickerMule marketplace – [they'll look
+swell on your favourite hardware.](https://twitter.com/parkr/status/430826309707902976/photo/1)
diff --git a/site/_posts/2014-06-28-jekyll-turns-21-i-mean-2-1-0.markdown b/site/_posts/2014-06-28-jekyll-turns-21-i-mean-2-1-0.markdown
new file mode 100644
index 0000000..ec6c357
--- /dev/null
+++ b/site/_posts/2014-06-28-jekyll-turns-21-i-mean-2-1-0.markdown
@@ -0,0 +1,31 @@
+---
+layout: news_item
+title: 'Jekyll Turns 21! Err... I mean 2.1.0.'
+date: 2014-06-28 17:26:59 -0400
+author: parkr
+version: 2.1.0
+categories: [release]
+---
+
+Jekyll's finally [legal to drink in the States](http://en.wikipedia.org/wiki/Legal_drinking_age).
+And he's done a lot of learning in the process! Here are some of the new
+things to look forward to:
+
+- Uses the latest Liquid version (2.6.1) (#2495)
+- Set front-matter defaults for collections (#2419)
+- Set a collection-specific URL template (#2418)
+- `pygments.rb` 0.6.0! (#2504)
+- `.json` files in `_data` (#2369)
+- Allow subdirectories in `_data` (#2395)
+- Add support for `hl_lines` in `highlight` tag (#2532)
+- Post categories now merge with directory, front-matter, and defaults (#2373)
+- New `--skip_initial_build` flag for `jekyll serve` (#2477)
+- A bajilion bug fixes and site updates!
+
+Let's go party!
+
+*Check out the [full changelog](/docs/history/#v2-1-0) for more.*
+
+Many thanks to these 37 contributors for the 2.1.0 release:
+
+Alberto Grespan, Alessandro Lorenzi, Alex Medearis, Alfred Xing, Anatol Broder, Ben, Ben Balter, Bud Parr, Chezou, Denilson Figueiredo de Sá, Denilson Sá, Ivan Tse, Jens Nazarenus, Jesse Shawl, Jordon Bedwell, Josh Davis, János Rusiczki, Marc Ransome, Mathieu Bruyen, Matt Rogers, Parker Moore, Pat Hawks, Paul Henry, Peter Rhoades, Philipp Rudloff, Quinn Shanahan, Renaud Martinet, Rob Murray, Rodrigo Dumont, Simon Sarris, Terry, Terry Schmidt, Tomer Cohen, XhmikosR, Yihang Ho, jaybe at jekyl [...]
diff --git a/site/_posts/2014-07-01-jekyll-2-1-1-released.markdown b/site/_posts/2014-07-01-jekyll-2-1-1-released.markdown
new file mode 100644
index 0000000..8142353
--- /dev/null
+++ b/site/_posts/2014-07-01-jekyll-2-1-1-released.markdown
@@ -0,0 +1,30 @@
+---
+layout: news_item
+title: 'Jekyll 2.1.1 Released'
+date: 2014-07-01 20:16:43 -0400
+author: parkr
+version: 2.1.1
+categories: [release]
+---
+
+This is a minor release for Jekyll 2.1.0. It fixes a couple bugs and
+introduces fixes for a couple security-related issues.
+
+It covers two security vulnerabilities:
+
+1. One in the reading of data
+2. One in the `layouts` setting
+
+They were identified in Jekyll 1.5.1 and has been confirmed as patched
+in this version and the version used by GitHub Pages. If you are in the
+business of building Jekyll sites, please ensure you upgrade to 2.1.1 as
+soon as possible.
+
+For more, check out [`jekyll/jekyll#2563`](https://github.com/jekyll/jekyll/pull/2563).
+
+Additionally, the dependency on Maruku has been loosened and a bug was
+fixed with document URLs.
+
+As always, check out the [full changelog](/docs/history/) for more info!
+
+Happy Jekylling!
diff --git a/site/_posts/2014-07-29-jekyll-2-2-0-released.markdown b/site/_posts/2014-07-29-jekyll-2-2-0-released.markdown
new file mode 100644
index 0000000..9410df6
--- /dev/null
+++ b/site/_posts/2014-07-29-jekyll-2-2-0-released.markdown
@@ -0,0 +1,19 @@
+---
+layout: news_item
+title: 'Jekyll 2.2.0 Released'
+date: 2014-07-29 18:59:13 -0400
+author: parkr
+version: 2.2.0
+categories: [release]
+---
+
+Jekyll 2.2.0 contains a few key updates:
+
+1. A warning will now fire if you specify a layout in any of your pages or
+    posts that doesn't exist.
+2. Certain Pygments options are now whitelisted in safe mode
+3. Categories in a post's path are now respected (i.e. folders in `_posts`
+   will now work properly).
+
+As always, a full list of the updates are on the
+[history page](/docs/history#v2-2-0). Happy Jekylling!
diff --git a/site/css/normalize.css b/site/css/normalize.css
deleted file mode 100644
index f0629e6..0000000
--- a/site/css/normalize.css
+++ /dev/null
@@ -1 +0,0 @@
-/* normalize.css v2.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:0.67em 0}abbr[title]{border-bottom:1px dotted}b,st [...]
diff --git a/site/css/screen.css b/site/css/screen.css
new file mode 100644
index 0000000..c49c94a
--- /dev/null
+++ b/site/css/screen.css
@@ -0,0 +1,31 @@
+---
+---
+
+{% capture screen %}
+/*                *\
+ * $normalize.css *
+\*                */
+{% include css/normalize.css %}
+/*                *\
+ * $gridism.css   *
+\*                */
+{% include css/gridism.css %}
+/*                *\
+ * $style.css     *
+\*                */
+{% include css/style.css %}
+/*                *\
+ * $pygments.css  *
+\*                */
+{% include css/pygments.css %}
+/*                *\
+ * $font-awesome.css  *
+\*                */
+{% include css/font-awesome.css %}
+{% endcapture %}
+
+{% if site.GH_ENV %}
+  {{ screen | strip_newlines | remove: '  ' }}
+{% else %}
+  {{ screen }}
+{% endif %}
diff --git a/site/css/style.css b/site/css/style.css
deleted file mode 100644
index 049ee11..0000000
--- a/site/css/style.css
+++ /dev/null
@@ -1,946 +0,0 @@
-/* Base */
-
-* {
-  box-sizing: border-box;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-}
-
-body {
-  font-family: Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-size: 21px;
-  font-weight: 300;
-  color: #ddd;
-  background: #333;
-  border-top: 5px solid #fc0;
-  box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
-  text-shadow: 0 1px 3px rgba(0,0,0,.5);
-}
-
-.clear {
-  display: block;
-}
-
-.clear:after {
-  content: " ";
-  display: block;
-  height: 0;
-  clear: both;
-  visibility: hidden;
-}
-
-/* Sections */
-
-body > header, body > section, body > footer {
-  float: left;
-  width: 100%;
-  clear: both;
-}
-
-/* Header */
-
-body > header h1, body > header nav {
-  display: inline-block;
-}
-
-body > header h1 span {
-  display: none;
-}
-
-nav ul {
-  padding: 0;
-  margin: 0;
-}
-
-nav li {
-  display: inline-block;
-}
-
-.main-nav {
-  margin-top: 52px;
-}
-
-.main-nav li {
-  margin-right: 10px;
-}
-
-.main-nav li a {
-  border-radius: 5px;
-  font-weight: 800;
-  font-size: 14px;
-  padding: 0.5em 1em;
-  text-shadow: none;
-  text-transform: uppercase;
-  transition: all .25s;
-   -moz-transition: all .25s;
-   -webkit-transition: all .25s;
-}
-
-.main-nav li a:hover {
-  background: #252525;
-  box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
-  text-shadow: 0 1px 3px rgba(0,0,0,.5);
-}
-
-.main-nav li.current a {
-  background: #fc0;
-  color: #222;
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
-  text-shadow: 0 1px 0 rgba(255,255,255,.3);
-}
-
-.mobile-nav ul {
-  overflow: hidden;
-  width: 100%;
-  display: table;
-}
-
-.mobile-nav a {
-  float: left;
-  width: 100%;
-  background: #333;
-  color: #fc0;
-  text-align: center;
-  text-transform: uppercase;
-  font-size: 14px;
-  font-weight: 800;
-  padding: 5px;
-  border-radius: 5px;
-}
-
-.mobile-nav .current a {
-  background: #fc0;
-  color: #222;
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
-  text-shadow: 0 1px 0 rgba(255,255,255,.3);
-}
-
-.mobile-nav li {
-  display: table-cell;
-  width: 25%;
-  padding: 8px;
-}
-
- at media (max-width: 768px){
-  .main-nav ul {
-    text-align: right;
-  }
-}
- at media (max-width: 830px){
-  .main-nav .show-on-mobiles {
-    display: inline;
-  }
-  .main-nav .hide-on-mobiles {
-    display: none;
-  }
-}
-
-/* Footer */
-
-body > footer {
-  background: #222;
-  font-size: 16px;
-  padding-bottom: 5px;
-  color: #888;
-  margin-top: 40px;
-}
-
-body > footer a {
-  color: #fff;
-}
-
-body > footer .align-right p, body > footer img {
-  display: inline-block;
-}
-
-body > footer img {
-  position: relative;
-  top: 8px;
-  margin-left: 5px;
-  width: 100px;
-  height: 30px;
-  opacity: .8;
-  padding: 1px;
-  -webkit-transition: opacity .2s;
-  -moz-transition: opacity .2s;
-  transition: opacity .2s;
-}
-
-body > footer a:hover img {
-  opacity: 1;
-}
-
- at media (max-width: 568px){
-  footer .one-third p {
-    margin-bottom: 0;
-  }
-  footer .two-thirds p {
-    margin-top: -20px;
-  }
-}
-
-/* Intro */
-
-.intro .unit {
-  padding: 10px 0 40px;
-}
-
-.intro p {
-  font-size: 1.75em;
-  line-height: 1em;
-  margin: 0;
-}
-
- at media (min-width: 569px){
-  .intro p {
-    font-size: 3.2em;
-  }
-}
-
-/* Quickstart */
-
-.quickstart {
-  background: #3F1F1F;
-  color: #fff;
-  margin: 60px 0;
-  box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
-}
-
-.quickstart .content {
-  padding: 0px 0;
-}
-
-.quickstart h4 {
-  font-size: 24px;
-  line-height: 24px;
-  margin-top: 20px;
-  text-shadow: 0 1px 3px rgba(0,0,0,.8);
-}
-
-.quickstart .code {
-  font-size: 12px;
-  display: block;
-  margin: 0 0 -30px;
-}
-
- at media (min-width: 768px){
-  .quickstart .code {
-    font-size: 18px;
-    margin: -30px 0;
-    float: right;
-  }
-  .quickstart h4 {
-    margin: 50px 0 0;
-    text-align: center;
-  }
-}
-
-/* Code */
-
-.quickstart .code {
-  display: block;
-  padding: 0;
-  font-family: Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
-  line-height: 1.3em;
-}
-
-.quickstart .code .title {
-  display: block;
-  text-align: center;
-  margin: 0 20px;
-  padding: 5px 0;
-  border-radius: 5px 5px 0 0;
-  box-shadow: 0 3px 10px rgba(0,0,0,.5);
-  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-size: 16px;
-  font-weight: normal;
-  color: #444;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-  background: #f7f7f7;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y3ZjdmNyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjclIiBzdG9wLWNv [...]
-  background: -moz-linear-gradient(top,  #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f7f7f7), color-stop(7%,#cfcfcf), color-stop(100%,#aaaaaa));
-  background: -webkit-linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  background: -o-linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  background: -ms-linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  background: linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#aaaaaa',GradientType=0 );
-  border-bottom: 1px solid #111;
-}
-
-.quickstart .code .shell {
-  padding: 20px;
-  text-shadow: none;
-  margin: 0 20px;
-  background: #3d3d3d;
-  border-radius: 0 0 5px 5px;
-  box-shadow: 0 5px 30px rgba(0,0,0,.3);
-}
-
-.quickstart .code .line {
-  display: block;
-  margin: 0;
-  padding: 0;
-}
-
-.quickstart .code .line span {
-  display: inline-block;
-}
-
-.quickstart .code .path {
-  color: #87ceeb;
-}
-
-.quickstart .code .prompt {
-  color: #cd5c5c;
-}
-
-.quickstart .code .command {
-  color: #f0e68c;
-}
-
-.quickstart .code .output {
-  color: #888;
-}
-
-/* Free Hosting */
-
-.free-hosting .pane {
-  background: #444;
-  border-radius: 10px;
-  text-shadow: none;
-  position: relative;
-  padding: 0 20px 30px;
-}
-
-.free-hosting img {
-  margin: -30px 0 0;
-  width: 180px;
-  height: 150px;
-}
-
-.free-hosting h2 {
-  font-size: 28px;
-}
-
-.free-hosting p,
-.free-hosting a {
-  font-size: 16px;
-}
-
-.free-hosting p {
-  margin: .75em 0;
-}
-
- at media (min-width: 768px){
-  .free-hosting img {
-    float: left;
-    margin: -20px -30px -30px -50px;
-    width: 300px;
-    height: 251px;
-  }
-  .free-hosting .pane-content {
-    margin-top: 35px;
-    padding-right: 30px;
-  }
-  .free-hosting p,
-  .free-hosting a {
-    font-size: 18px;
-  }
-  .free-hosting .pane:after {
-    content: " ";
-    float: right;
-    background: url(../img/footer-arrow.png) top left no-repeat;
-    width: 73px;
-    height: 186px;
-    position: absolute;
-    right: 0;
-    bottom: -30px;
-  }
-}
-
-/* Article - Used for both docs and news */
-
-
-article {
-  background: #444;
-  border-radius: 10px;
-  padding: 20px;
-  margin: 0 10px;
-  box-shadow: 0 3px 10px rgba(0,0,0,.1);
-  font-size: 16px;
-}
-
- at media (max-width: 480px){
-  article ul {
-    padding-left: 20px;
-  }
-}
-
- at media (max-width: 568px){
-  article {
-    margin: 0;
-  }
-}
-
- at media (min-width: 768px){
-  article {
-    padding: 40px 40px 30px;
-    font-size: 21px;
-  }
-}
-
-/* Right-side nav - used by both docs and news */
-
-aside {
-  padding-top: 30px;
-}
-
-aside h4 {
-  text-transform: uppercase;
-  font-size: 14px;
-  font-weight: 700;
-  padding: 0 0 10px 30px;
-  margin-left: -30px;
-  display: inline-block;
-  border-bottom: 1px solid #c00;
-}
-
-aside ul {
-  padding-left: 0;
-}
-
-aside ul:first-child {
-  margin-top: 0;
-}
-
-aside li {
-  list-style-type: none;
-}
-
-aside li a {
-  font-size: 16px;
-  position: relative
-}
-
-aside li.current a:before {
-  content: "";
-  border-color: transparent transparent transparent #444;
-  border-style: solid;
-  border-width: 10px;
-  width: 0;
-  height: 0;
-  position: absolute;
-  top: 0;
-  left: -30px;
-}
-
-/* Documentation */
-
-.docs article {
-  min-height: 800px;
-}
-
-.docs .content {
-  padding: 0;
-}
-
-.section-nav {
-  text-align: center;
-  padding-top: 40px;
-  position: relative;
-  background: url(../img/article-footer.png) top center no-repeat;
-  margin: 40px -20px 10px;
-}
-
-.section-nav > div {
-  width: 49.5%;
-}
-
-.section-nav a, .section-nav span {
-  color: #fff;
-  font-size: 16px;
-  text-transform: uppercase;
-  font-weight: 700;
-  padding: 8px 12px 10px;
-  border-radius: 5px;
-  /*border: 1px solid #333;*/
-  box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
-  background: #777;
-}
-
-.section-nav a:hover {
-  color: #fff;
-  background: #888;
-}
-
-.section-nav .next, .section-nav .prev {
-  position: relative;
-}
-
-.section-nav .next:after, .section-nav .prev:before {
-  font-size: 36px;
-  color: #222;
-  font-weight: 800;
-  text-shadow: 0 1px 0 rgba(255,255,255,.4);
-  position: absolute;
-  top: -7px;
-}
-
-.section-nav .next:after {
-  content: "›";
-  right: 10px;
-}
-
-.section-nav .prev:before {
-  content: "‹";
-  left: 10px;
-}
-
-.section-nav .prev, .section-nav .prev:hover {
-  /*float: left;*/
-  padding-left: 30px;
-}
-
-.section-nav .next, .section-nav .next:hover {
-  /*float: right;*/
-  padding-right: 30px;
-}
-
-.section-nav .disabled {
-  opacity: .5;
-  /*filter: alpha*/
-  cursor: default;
-}
-
-.docs-nav-mobile select {
-  width: 100%;
-}
-
-/* News */
-
-article h2:first-child {
-  margin-top: 0;
-}
-
-.post-category,
-.post-meta {
-  display: inline-block;
-  vertical-align: middle;
-  font-size: .8em;
-}
-
-.post-category {
-  display: inline-block;
-  margin-left: -30px;
-  padding: 6px 10px 8px;
-  padding-left: 50px;
-  border-radius: 0 5px 5px 0;
-  position: relative;
-  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
-  background: #9e2812;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #9e2812 0%, #6f0d0d 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#9e2812), color-stop(100%,#6f0d0d));
-  background: -webkit-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -o-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -ms-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: linear-gradient(to bottom,  #9e2812 0%,#6f0d0d 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
-}
-
-.label {
-  float: left;
-  text-transform: uppercase;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
- at media (max-width: 568px){
-  .post-category {
-    padding-left: 30px;
-  }
-}
-
- at media (min-width: 768px){
-  .post-category {
-    margin-left: -50px;
-  }
-}
-
-.post-category:before {
-  content: "";
-  position: absolute;
-  top: -10px;
-  left: 0px;
-  border-color: transparent #6f0d0d #6f0d0d transparent;
-  border-style: solid;
-  border-width: 5px;
-  width: 0;
-  height: 0;
-}
-
-.avatar {
-  width: 24px;
-  height: 24px;
-  border-radius: 3px;
-  display: inline-block;
-  vertical-align: middle;
-}
-
-.post-meta {
-  padding: 5px 0;
-  color: #aaa;
-  font-weight: 600;
-  text-shadow: 0 -1px 0 #000;
-}
-
-.post-date,
-.post-author {
-  margin-left: 10px;
-}
-
-.news article + article {
-  margin-top: -10px;
-  border-radius: 0 0 10px 10px;
-  border-top: 1px solid #555;
-  box-shadow: 0 -1px 0 #2f2f2f;
-}
-
-/* Code Highlighting */
-
-
-pre, code {
-  white-space: pre;
-  display: inline-block;
-  margin: 0;
-  padding: 0;
-  font-family: Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
-  font-size: 14px;
-  padding: 0 .5em;
-  line-height: 1.8em;
-}
-
- at media (min-width: 768px){
-  pre, code {
-    font-size: 16px;
-  }
-}
-
-.highlight, p > pre, p > code, p > nobr > code, li > code, h5 > code, .note > code {
-  background: #333;
-  color: #fff;
-  border-radius: 5px;
-  box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
-    0 1px 0 rgba(255,255,255,.1),
-    0 -1px 0 rgba(0,0,0,.5);
-}
-
-.note code {
-  background-color: rgba(0,0,0,0.2);
-  margin-left: 2.5px;
-  margin-right: 2.5px;
-  font-size: 0.8em;
-}
-
-.highlight {
-  padding: 10px 0;
-  width: 100%;
-  overflow: auto;
-}
-
-/* HTML Elements */
-
-h1, h2, h3, h4, h5, h6 {
-  margin: 0;
-}
-
-a {
-  color: #fc0;
-  text-decoration: none;
-  transition: all .25s;
-   -moz-transition: all .25s;
-   -webkit-transition: all .25s;
-}
-
-a:hover {
-  color: #f90;
-}
-
-strong {
-  font-weight: 700;
-}
-
-p {
-  line-height: 1.5em;
-}
-
-.left { float: left; }
-.right { float: right; }
-.align-right { text-align: right; }
-.align-left { text-align: left; }
-.align-center { text-align: center; }
-
-/* Article HTML */
-
-article h2,
-article h3,
-article h4,
-article h5,
-article h6 {
-  margin: 1em 0;
-}
-
-article h4 {
-  color: #fff;
-}
-
-h5, h6 {
-  font-size: 1em;
-  font-style: italic;
-}
-
-article ul li p {
-  margin: 0;
-}
-
-article ul li, article ol li {
-  line-height: 1.5em;
-  margin-bottom: 0.5em;
-}
-
-article ul li blockquote {
-  margin: 10px 0;
-}
-
-blockquote {
-  border-left: 2px solid #777;
-  padding-left: 20px;
-  font-style: italic;
-  font-size: 18px;
-  font-weight: 500;
-}
-
-
-/* Tables */
-
-table {
-  width: 100%;
-  background: #555;
-  margin: .5em 0;
-  border-radius: 5px;
-  box-shadow: 0 1px 3px rgba(0,0,0,.3);
-}
-
-thead {
-  border-top-left-radius: 5px;
-  border-top-right-radius: 5px;
-  color: #fff;
-  background: #3a3a3a;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNhM2EzYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #3a3a3a 0%, #1e1e1e 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3a3a3a), color-stop(100%,#1e1e1e));
-  background: -webkit-linear-gradient(top,  #3a3a3a 0%,#1e1e1e 100%);
-  background: -o-linear-gradient(top,  #3a3a3a 0%,#1e1e1e 100%);
-  background: -ms-linear-gradient(top,  #3a3a3a 0%,#1e1e1e 100%);
-  background: linear-gradient(to bottom,  #3a3a3a 0%,#1e1e1e 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3a3a3a', endColorstr='#1e1e1e',GradientType=0 );
-}
-
-thead th {
-  position: relative;
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
-}
-
-thead th:first-child {
-  border-top-left-radius: 5px;
-}
-
-thead th:last-child {
-  border-top-right-radius: 5px;
-}
-
-td {
-  padding: .5em .75em;
-}
-
-td p {
-  margin: 0;
-}
-
-th {
-  text-transform: uppercase;
-  font-size: 16px;
-  padding: .5em .75em;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.9);
-  color: #888;
-}
-
-tbody td {
-  border-top: 1px solid rgba(0,0,0,.1);
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3Rv [...]
-  background: -moz-linear-gradient(top,  rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0)));
-  background: -webkit-linear-gradient(top,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  background: -o-linear-gradient(top,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  background: -ms-linear-gradient(top,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  background: linear-gradient(to bottom,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1affffff', endColorstr='#00ffffff',GradientType=0 );
-}
-
-td p {
-  font-size: 16px;
-}
-
-td p code {
-  font-size: 14px;
-}
-
-code.option, th .option, code.filter, th .filter {
-  color: #50B600;
-}
-
-code.flag, th .flag, code.output, th .output {
-  color: #049DCE;
-}
-
-code.option, code.flag, code.filter, code.output {
-  margin-bottom: 2px;
-}
-
-/* Note types */
-
-.note {
-  margin: 30px 0;
-  margin-left: -30px;
-  padding: 20px 20px 24px;
-  padding-left: 50px;
-  border-radius: 0 5px 5px 0;
-  position: relative;
-  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
-  background: #7e6d42;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdlNmQ0MiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #7e6d42 0%, #5c4e35 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7e6d42), color-stop(100%,#5c4e35));
-  background: -webkit-linear-gradient(top,  #7e6d42 0%,#5c4e35 100%);
-  background: -o-linear-gradient(top,  #7e6d42 0%,#5c4e35 100%);
-  background: -ms-linear-gradient(top,  #7e6d42 0%,#5c4e35 100%);
-  background: linear-gradient(to bottom,  #7e6d42 0%,#5c4e35 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7e6d42', endColorstr='#5c4e35',GradientType=0 );
-}
-
- at media (max-width: 568px){
-  .note {
-    margin-right: -30px;
-  }
-}
-
- at media (min-width: 768px){
-  .note {
-    margin-left: -50px;
-  }
-}
-
-.note:before {
-  content: "";
-  position: absolute;
-  top: -10px;
-  left: 0px;
-  border-color: transparent #222 #222 transparent;
-  border-style: solid;
-  border-width: 5px;
-  width: 0;
-  height: 0;
-}
-
-.note h5, .note p {
-  margin: 0;
-  color: #fff;
-}
-
-.note h5 {
-  line-height: 1.5em;
-  font-weight: 800;
-  font-style: normal;
-}
-
-.note p {
-  font-weight: 400;
-  font-size: .75em;
-}
-
-.info {
-  background: #0389aa;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAzODlhYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #0389aa 0%, #00617f 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#0389aa), color-stop(100%,#00617f));
-  background: -webkit-linear-gradient(top,  #0389aa 0%,#00617f 100%);
-  background: -o-linear-gradient(top,  #0389aa 0%,#00617f 100%);
-  background: -ms-linear-gradient(top,  #0389aa 0%,#00617f 100%);
-  background: linear-gradient(to bottom,  #0389aa 0%,#00617f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0389aa', endColorstr='#00617f',GradientType=0 );
-}
-
-.warning {
-  background: #9e2812;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #9e2812 0%, #6f0d0d 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#9e2812), color-stop(100%,#6f0d0d));
-  background: -webkit-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -o-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -ms-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: linear-gradient(to bottom,  #9e2812 0%,#6f0d0d 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
-}
-
-.info:before {
-  border-color: transparent #00617f #00617f transparent;
-}
-
-.warning:before {
-  border-color: transparent #6f0d0d #6f0d0d transparent;
-}
-
-.note:after {
-  content: "★";
-  color: #fc0;
-  position: absolute;
-  top: 14px;
-  left: 14px;
-  font-size: 28px;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
-.info:after {
-  content: "ⓘ";
-  color: #fff;
-  position: absolute;
-  top: 15px;
-  left: 15px;
-  font-size: 28px;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
-.warning:after {
-  content: "‼";
-  color: #fc0;
-  position: absolute;
-  top: 15px;
-  left: 15px;
-  font-size: 32px;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
-/* Responsive tables */
-
- at media (max-width: 768px){
-  .mobile-side-scroller {
-    overflow-x: scroll;
-    margin: 0 -40px;
-    padding: 0 10px;
-  }
-}
diff --git a/site/docs/assets.md b/site/docs/assets.md
new file mode 100644
index 0000000..41e8b92
--- /dev/null
+++ b/site/docs/assets.md
@@ -0,0 +1,66 @@
+---
+layout: docs
+title: Assets
+prev_section: datafiles
+next_section: migrations
+permalink: /docs/assets/
+---
+
+Jekyll provides built-in support for Sass and CoffeeScript. In order to use
+them, create a file with the proper extension name (one of `.sass`, `.scss`,
+or `.coffee`) and start the file with two lines of triple dashes, like this:
+
+{% highlight sass %}
+---
+---
+
+// start content
+.my-definition
+  font-size: 1.2em
+{% endhighlight %}
+
+Jekyll treats these files the same as a regular page, in that the output file
+will be placed in the same directory that it came from. For instance, if you
+have a file named `css/styles.scss` in your site's source folder, Jekyll
+will process it and put it in your site's destination folder under
+`css/styles.css`.
+
+## Sass/SCSS
+
+Jekyll allows you to customize your Sass conversion in certain ways.
+
+If you are using Sass `@import` statements, you'll need to ensure that your
+`sass_dir` is set to the base directory that contains your Sass files. You
+can do that thusly:
+
+{% highlight yaml %}
+sass:
+    sass_dir: _sass
+{% endhighlight %}
+
+The Sass converter will default the `sass_dir` configuration option to
+`_sass`.
+
+<div class="note info">
+  <h5>The <code>sass_dir</code> is only used by Sass</h5>
+  <p>
+
+    Note that the `sass_dir` becomes the load path for Sass imports,
+    nothing more. This means that Jekyll does not know about these files
+    directly, so any files here should not contain the YAML front matter as
+    described above nor will they be transformed as described above. This
+    folder should only contain imports.
+
+  </p>
+</div>
+
+You may also specify the output style with the `style` option in your
+`_config.yml` file:
+
+{% highlight yaml %}
+sass:
+    style: :compressed
+{% endhighlight %}
+
+These are passed to Sass, so any output style options Sass supports are valid
+here, too.
diff --git a/site/docs/collections.md b/site/docs/collections.md
new file mode 100644
index 0000000..863347c
--- /dev/null
+++ b/site/docs/collections.md
@@ -0,0 +1,259 @@
+---
+layout: docs
+title: Collections
+prev_section: variables
+next_section: datafiles
+permalink: /docs/collections/
+---
+
+<div class="note warning">
+  <h5>Collections support is unstable and may change</h5>
+  <p>
+    This is an experimental feature and that the API may likely change until the feature stabilizes.
+  </p>
+</div>
+
+Not everything is a post or a page. Maybe you want to document the various methods in your open source project, members of a team, or talks at a conference. Collections allow you to define a new type of document that behave like Pages or Posts do normally, but also have their own unique properties and namespace.
+
+## Using Collections
+
+### Step 1: Tell Jekyll to read in your collection
+
+Add the following to your site's `_config.yml` file, replacing `my_collection` with the name of your collection:
+
+{% highlight yaml %}
+collections:
+- my_collection
+{% endhighlight %}
+
+You can optionally specify metadata for your collection in the configuration:
+
+{% highlight yaml %}
+collections:
+  my_collection:
+    foo: bar
+{% endhighlight %}
+
+### Step 2: Add your content
+
+Create a corresponding folder (e.g. `<source>/_my_collection`) and add documents.
+YAML front-matter is read in as data if it exists, if not, then everything is just stuck in the Document's `content` attribute.
+
+Note: the folder must be named identical to the collection you defined in you config.yml file, with the addition of the preceding `_` character.
+
+### Step 3: Optionally render your collection's documents into independent files
+
+If you'd like Jekyll to create a public-facing, rendered version of each document in your collection, set the `output` key to `true` in your collection metadata in your `_config.yml`:
+
+{% highlight yaml %}
+collections:
+  my_collection:
+    output: true
+{% endhighlight %}
+
+This will produce a file for each document in the collection.
+For example, if you have `_my_collection/some_subdir/some_doc.md`,
+it will be rendered using Liquid and the Markdown converter of your
+choice and written out to `<dest>/my_collection/some_subdir/some_doc.html`.
+
+As for posts with [Permalinks](../permalinks/), document URL can be customized by setting a `permalink` metadata to the collection:
+
+{% highlight yaml %}
+collections:
+  my_collection:
+    output: true
+    permalink: /awesome/:path/
+{% endhighlight %}
+
+For example, if you have `_my_collection/some_subdir/some_doc.md`, it will be written out to `<dest>/awesome/some_subdir/some_doc/index.html`.
+
+<div class="mobile-side-scroller">
+<table>
+  <thead>
+    <tr>
+      <th>Variable</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>
+        <p><code>collection</code></p>
+      </td>
+      <td>
+        <p>Label of the containing collection</p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>path</code></p>
+      </td>
+      <td>
+        <p>Path to the document relative to the collection's directory</p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>output_ext</code></p>
+      </td>
+      <td>
+        <p>Extension of the output file</p>
+      </td>
+    </tr>
+  </tbody>
+</table>
+</div>
+
+## Liquid Attributes
+
+### Collections
+
+Each collection is accessible via the `site` Liquid variable. For example, if you want to access the `albums` collection found in `_albums`, you'd use `site.albums`. Each collection is itself an array of documents (e.g. `site.albums` is an array of documents, much like `site.pages` and `site.posts`). See below for how to access attributes of those documents.
+
+The collections are also available under `site.collections`, with the metadata you specified in your `_config.yml` (if present) and the following information:
+
+<div class="mobile-side-scroller">
+<table>
+  <thead>
+    <tr>
+      <th>Variable</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>
+        <p><code>label</code></p>
+      </td>
+      <td>
+        <p>
+          The name of your collection, e.g. <code>my_collection</code>.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>docs</code></p>
+      </td>
+      <td>
+        <p>
+          An array of <a href="#documents">documents</a>.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>relative_directory</code></p>
+      </td>
+      <td>
+        <p>
+          The path to the collections's source directory, relative to the site source.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>directory</code></p>
+      </td>
+      <td>
+        <p>
+          The full path to the collections's source directory.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>output</code></p>
+      </td>
+      <td>
+        <p>
+          Whether the collection's documents will be output as individual files.
+        </p>
+      </td>
+    </tr>
+  </tbody>
+</table>
+</div>
+
+
+### Documents
+
+In addition to any YAML front-matter provided in the document's corresponding file, each document has the following attributes:
+
+<div class="mobile-side-scroller">
+<table>
+  <thead>
+    <tr>
+      <th>Variable</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>
+        <p><code>content</code></p>
+      </td>
+      <td>
+        <p>
+          The (unrendered) content of the document. If no YAML front-matter is provided,
+          this is the entirety of the file contents. If YAML front-matter
+          is used, then this is all the contents of the file after the terminating
+          `---` of the front-matter.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>output</code></p>
+      </td>
+      <td>
+        <p>
+          The rendered output of the document, based on the <code>content</code>.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>path</code></p>
+      </td>
+      <td>
+        <p>
+          The full path to the document's source file.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>relative_path</code></p>
+      </td>
+      <td>
+        <p>
+          The path to the document's source file relative to the site source.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>url</code></p>
+      </td>
+      <td>
+        <p>
+          The URL of the rendered collection. The file is only written to the
+          destination when the name of the collection to which it belongs is
+          included in the <code>render</code> key in the site's configuration file.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>collection</code></p>
+      </td>
+      <td>
+        <p>
+          The name of the document's collection.
+        </p>
+      </td>
+    </tr>
+  </tbody>
+</table>
+</div>
diff --git a/site/docs/configuration.md b/site/docs/configuration.md
index 1594d75..19c21ba 100644
--- a/site/docs/configuration.md
+++ b/site/docs/configuration.md
@@ -31,90 +31,108 @@ class="flag">flags</code> (specified on the command-line) that control them.
     </tr>
   </thead>
   <tbody>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Site Source</strong></p>
-        <p class='description'>Change the directory where Jekyll will read files</p>
+        <p class="name"><strong>Site Source</strong></p>
+        <p class="description">Change the directory where Jekyll will read files</p>
       </td>
       <td class="align-center">
         <p><code class="option">source: DIR</code></p>
         <p><code class="flag">-s, --source DIR</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Site Destination</strong></p>
-        <p class='description'>Change the directory where Jekyll will write files</p>
+        <p class="name"><strong>Site Destination</strong></p>
+        <p class="description">Change the directory where Jekyll will write files</p>
       </td>
       <td class="align-center">
         <p><code class="option">destination: DIR</code></p>
         <p><code class="flag">-d, --destination DIR</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Safe</strong></p>
-        <p class='description'>Disable <a href="../plugins/">custom plugins</a>.</p>
+        <p class="name"><strong>Safe</strong></p>
+        <p class="description">Disable <a href="../plugins/">custom plugins, and ignore symbolic links</a>.</p>
       </td>
       <td class="align-center">
         <p><code class="option">safe: BOOL</code></p>
         <p><code class="flag">--safe</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Exclude</strong></p>
-        <p class="description">Exclude directories and/or files from the conversion</p>
+        <p class="name"><strong>Exclude</strong></p>
+        <p class="description">
+          Exclude directories and/or files from the
+          conversion. These exclusions are relative to the site's
+          source directory and cannot be outside the source directory.
+        </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">exclude: [DIR, FILE, ...]</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Include</strong></p>
+        <p class="name"><strong>Include</strong></p>
         <p class="description">
           Force inclusion of directories and/or files in the conversion.
           <code>.htaccess</code> is a good example since dotfiles are excluded
           by default.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">include: [DIR, FILE, ...]</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Time Zone</strong></p>
+        <p class="name"><strong>Time Zone</strong></p>
         <p class="description">
             Set the time zone for site generation. This sets the <code>TZ</code>
             environment variable, which Ruby uses to handle time and date
             creation and manipulation. Any entry from the
             <a href="http://en.wikipedia.org/wiki/Tz_database">IANA Time Zone
-            Database</a> is valid, e.g. <code>America/New_York</code>. The default
-            is the local time zone, as set by your operating system.
+            Database</a> is valid, e.g. <code>America/New_York</code>. A list of all
+            available values can be found <a href="http://en.wikipedia.org/wiki/List_of_tz_database_time_zones">
+            here</a>. The default is the local time zone, as set by your operating system.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">timezone: TIMEZONE</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Encoding</strong></p>
+        <p class="name"><strong>Encoding</strong></p>
         <p class="description">
             Set the encoding of files by name. Only available for Ruby
             1.9 or later).
-            The default value is nil, which use Ruby default,
-            <code>ASCII-8BIT</code>.
-            Available encoding for the ruby in use, can be shown by
-            command <code>ruby -e 'puts Encoding::list.join("\n")'</code>
+            The default value is <code>utf-8</code> starting in 2.0.0,
+            and <code>nil</code> before 2.0.0, which will yield the Ruby
+            default of <code>ASCII-8BIT</code>.
+            Available encodings can be shown by the
+            command <code>ruby -e 'puts Encoding::list.join("\n")'</code>.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">encoding: ENCODING</code></p>
       </td>
     </tr>
+    <tr>
+      <td>
+        <p class='name'><strong>Defaults</strong></p>
+        <p class='description'>
+            Set defaults for <a href="../frontmatter/" title="YAML frontmatter">YAML frontmatter</a>
+            variables.
+        </p>
+      </td>
+      <td class='align-center'>
+        <p>see <a href="#frontmatter-defaults" title="details">below</a></p>
+      </td>
+    </tr>
   </tbody>
 </table>
 </div>
@@ -130,59 +148,59 @@ class="flag">flags</code> (specified on the command-line) that control them.
     </tr>
   </thead>
   <tbody>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Regeneration</strong></p>
-        <p class='description'>Enable auto-regeneration of the site when files are modified.</p>
+        <p class="name"><strong>Regeneration</strong></p>
+        <p class="description">Enable auto-regeneration of the site when files are modified.</p>
       </td>
       <td class="align-center">
         <p><code class="flag">-w, --watch</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Configuration</strong></p>
+        <p class="name"><strong>Configuration</strong></p>
         <p class="description">Specify config files instead of using <code>_config.yml</code> automatically. Settings in later files override settings in earlier files.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="flag">--config FILE1[,FILE2,...]</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Drafts</strong></p>
+        <p class="name"><strong>Drafts</strong></p>
         <p class="description">Process and render draft posts.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="flag">--drafts</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Future</strong></p>
+        <p class="name"><strong>Future</strong></p>
         <p class="description">Publish posts with a future date.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">future: BOOL</code></p>
         <p><code class="flag">--future</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>LSI</strong></p>
+        <p class="name"><strong>LSI</strong></p>
         <p class="description">Produce an index for related posts.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">lsi: BOOL</code></p>
         <p><code class="flag">--lsi</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Limit Posts</strong></p>
+        <p class="name"><strong>Limit Posts</strong></p>
         <p class="description">Limit the number of posts to parse and publish.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">limit_posts: NUM</code></p>
         <p><code class="flag">--limit_posts NUM</code></p>
       </td>
@@ -206,40 +224,40 @@ before your site is served.
     </tr>
   </thead>
   <tbody>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Local Server Port</strong></p>
-        <p class='description'>Listen on the given port.</p>
+        <p class="name"><strong>Local Server Port</strong></p>
+        <p class="description">Listen on the given port.</p>
       </td>
       <td class="align-center">
         <p><code class="option">port: PORT</code></p>
         <p><code class="flag">--port PORT</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Local Server Hostname</strong></p>
-        <p class='description'>Listen at the given hostname.</p>
+        <p class="name"><strong>Local Server Hostname</strong></p>
+        <p class="description">Listen at the given hostname.</p>
       </td>
       <td class="align-center">
         <p><code class="option">host: HOSTNAME</code></p>
         <p><code class="flag">--host HOSTNAME</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Base URL</strong></p>
-        <p class='description'>Serve the website from the given base URL</p>
+        <p class="name"><strong>Base URL</strong></p>
+        <p class="description">Serve the website from the given base URL</p>
       </td>
       <td class="align-center">
         <p><code class="option">baseurl: URL</code></p>
         <p><code class="flag">--baseurl URL</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Detach</strong></p>
-        <p class='description'>Detach the server from the terminal</p>
+        <p class="name"><strong>Detach</strong></p>
+        <p class="description">Detach the server from the terminal</p>
       </td>
       <td class="align-center">
         <p><code class="option">detach: BOOL</code></p>
@@ -258,6 +276,114 @@ before your site is served.
   </p>
 </div>
 
+## Frontmatter defaults
+
+Using [YAML front-matter](../frontmatter/) is one way that you can specify configuration in the pages and posts for your site. Setting things like a default layout, or customizing the title, or specifying a more precise date/time for the post can all be added to your page or post front-matter.
+
+Often times, you will find that you are repeating a lot of configuration options. Setting the same layout in each file, adding the same category - or categories - to a post, etc. You can even add custom variables like author names, which might be the same for the majority of posts on your blog.
+
+Instead of repeating this configuration each time you create a new post or page, Jekyll provides a way to set these defaults in the site configuration. To do this, you can specify  site-wide defaults using the `defaults` key in the `_config.yml` file in your projects root directory.
+
+The `defaults` key holds an array of scope/values pairs that define what defaults should be set for a particular file path, and optionally, a file type in that path.
+
+Let's say that you want to add a default layout to all pages and posts in your site. You would add this to your `_config.yml` file:
+
+{% highlight yaml %}
+defaults:
+  -
+    scope:
+      path: "" # an empty string here means all files in the project
+    values:
+      layout: "default"
+{% endhighlight %}
+
+Here, we are scoping the `values` to any file that exists in the scopes path. Since the path is set as an empty string, it will apply to **all files** in your project. You probably don't want to set a layout on every file in your project - like css files, for example - so you can also specify a `type` value under the `scope` key.
+
+{% highlight yaml %}
+defaults:
+  -
+    scope:
+      path: "" # an empty string here means all files in the project
+      type: "post"
+    values:
+      layout: "default"
+{% endhighlight %}
+
+Now, this will only set the layout for files where the type is `post`.
+The different types that are available to you are `page`, `post`, `draft` or any collection in your site. While `type` is optional, you must specify a value for `path` when creating a `scope/values` pair.
+
+As mentioned earlier, you can set multiple scope/values pairs for `defaults`.
+
+{% highlight yaml %}
+defaults:
+  -
+    scope:
+      path: ""
+      type: "post"
+    values:
+      layout: "my-site"
+  -
+    scope:
+      path: "projects"
+      type: "page"
+    values:
+      layout: "project" # overrides previous default layout
+      author: "Mr. Hyde"
+      category: "project"
+{% endhighlight %}
+
+With these defaults, all posts would use the `my-site` layout. Any html files that exist in the `projects/` folder will use the `project` layout, if it exists. Those files will also have the `page.author` [liquid variable](../variables/) set to `Mr. Hyde` as well as have the category for the page set to `project`.
+
+{% highlight yaml %}
+collections:
+  - my_collection:
+    output: true
+
+defaults:
+  -
+    scope:
+      path: ""
+      type: "my_collection" # a collection in your site
+    values:
+      layout: "default"
+{% endhighlight %}
+
+In this example the `layout` is set to `default` inside the [collection](../collections) with the name `my_collection`.
+
+### Precedence
+
+Jekyll will apply all of the configuration settings you specify in the `defaults` section of your `_config.yml` file. However, you can choose to override settings from other scope/values pair by specifying a more specific path for the scope.
+
+You can see that in the last example above. First, we set the default layout to `my-site`. Then, using a more specific path, we set the default layout for files in the `projects/` path to `project`. This can be done with any value that you would set in the page or post front-matter.
+
+Finally, if you set defaults in the site configuration by adding a `defaults` section to your `_config.yml` file, you can override those settings in a post or page file. All you need to do is specify the settings in the post or page front-matter. For example:
+
+{% highlight yaml %}
+# In _config.yml
+...
+defaults:
+  -
+    scope:
+      path: "projects"
+      type: "page"
+    values:
+      layout: "project"
+      author: "Mr. Hyde"
+      category: "project"
+...
+{% endhighlight %}
+
+{% highlight yaml %}
+# In projects/foo_project.md
+---
+author: "John Smith"
+layout: "foobar"
+---
+The post text goes here...
+{% endhighlight %}
+
+The `projects/foo_project.md` would have the `layout` set to `foobar` instead of `project` and the `author` set to `John Smith` instead of `Mr. Hyde` when the site is built.
+
 ## Default Configuration
 
 Jekyll runs with the following configuration options by default. Unless
@@ -286,17 +412,18 @@ timezone:    nil
 encoding:    nil
 
 future:      true
-show_drafts: nil
+show_drafts: false
 limit_posts: 0
-pygments:    true
+highlighter: pygments
 
 relative_permalinks: true
 
 permalink:     date
 paginate_path: 'page:num'
+paginate:      nil
 
-markdown:      maruku
-markdown_ext:  markdown,mkd,mkdn,md
+markdown:      kramdown
+markdown_ext:  markdown,mkdown,mkdn,mkd,md
 textile_ext:   textile
 
 excerpt_separator: "\n\n"
@@ -306,8 +433,7 @@ watch:       false    # deprecated
 server:      false    # deprecated
 host:        0.0.0.0
 port:        4000
-baseurl:     /
-url:         http://localhost:4000
+baseurl:     ""
 lsi:         false
 
 maruku:
@@ -344,7 +470,6 @@ redcloth:
   hard_breaks: true
 {% endhighlight %}
 
-
 ## Markdown Options
 
 The various Markdown renderers supported by Jekyll sometimes have extra options available.
@@ -363,7 +488,7 @@ Jekyll handles two special Redcarpet extensions:
         # ...ruby code
         ```
 
-    With both fenced code blocks and pygments enabled, this will statically highlight the code; without pygments, it will add a `class="LANGUAGE"` attribute to the `<code>` element, which can be used as a hint by various JavaScript code highlighting libraries.
+    With both fenced code blocks and highlighter enabled, this will statically highlight the code; without any syntax highlighter, it will add a `class="LANGUAGE"` attribute to the `<code>` element, which can be used as a hint by various JavaScript code highlighting libraries.
 - `smart` --- This pseudo-extension turns on SmartyPants, which converts straight quotes to curly quotes and runs of hyphens to em (`---`) and en (`--`) dashes.
 
 All other extensions retain their usual names from Redcarpet, and no renderer options aside from `smart` can be specified in Jekyll. [A list of available extensions can be found in the Redcarpet README file.][redcarpet_extensions] Make sure you're looking at the README for the right version of Redcarpet: Jekyll currently uses v2.2.x, and extensions like `footnotes` and `highlight` weren't added until after version 3.0.0. The most commonly used extensions are:
@@ -373,3 +498,39 @@ All other extensions retain their usual names from Redcarpet, and no renderer op
 - `autolink`
 
 [redcarpet_extensions]: https://github.com/vmg/redcarpet/blob/v2.2.2/README.markdown#and-its-like-really-simple-to-use
+
+### Kramdown
+
+In addition to the defaults mentioned above, you can also turn on recognition of Github Flavored Markdown by passing an `input` option with a value of "GFM".
+
+For example, in your `_config.yml`:
+
+    kramdown:
+      input: GFM
+
+### Custom Markdown Processors
+
+If you're interested in creating a custom markdown processor, you're in luck! Create a new class in the `Jekyll::Converters::Markdown` namespace:
+
+{% highlight ruby %}
+class Jekyll::Converters::Markdown::MyCustomProcessor
+  def initialize(config)
+    require 'funky_markdown'
+    @config = config
+  rescue LoadError
+    STDERR.puts 'You are missing a library required for Markdown. Please run:'
+    STDERR.puts '  $ [sudo] gem install funky_markdown'
+    raise FatalException.new("Missing dependency: funky_markdown")
+  end
+
+  def convert(content)
+    ::FunkyMarkdown.new(content).convert
+  end
+end
+{% endhighlight %}
+
+Once you've created your class and have it properly setup either as a plugin in the `_plugins` folder or as a gem, specify it in your `_config.yml`:
+
+{% highlight yaml %}
+markdown: MyCustomProcessor
+{% endhighlight %}
diff --git a/site/docs/continuous-integration.md b/site/docs/continuous-integration.md
new file mode 100644
index 0000000..2d2d798
--- /dev/null
+++ b/site/docs/continuous-integration.md
@@ -0,0 +1,177 @@
+---
+layout: docs
+title: Continuous Integration
+prev_section: deployment-methods
+next_section: troubleshooting
+permalink: /docs/continuous-integration/
+---
+
+You can easily test your website build against one or more versions of Ruby.
+The following guide will show you how to set up a free build environment on
+[Travis][0], with [GitHub][1] integration for pull requests. Paid
+alternatives exist for private repositories.
+
+[0]: https://travis-ci.org/
+[1]: https://github.com/
+
+## 1. Enabling Travis and GitHub
+
+Enabling Travis builds for your GitHub repository is pretty simple:
+
+1. Go to your profile on travis-ci.org: https://travis-ci.org/profile/username
+2. Find the repository for which you're interested in enabling builds.
+3. Click the slider on the right so it says "ON" and is a dark grey.
+4. Optionally configure the build by clicking on the wrench icon. Further
+   configuration happens in you `.travis.yml` file. More details on that
+   below.
+
+## 2. The Test Script
+
+The simplest test script simply runs `jekyll build` and ensures that Jekyll
+doesn't fail to build the site. It doesn't check the resulting site, but it
+does ensure things are built properly.
+
+When testing Jekyll output, there is no better tool than [html-proofer][2].
+This tool checks your resulting site to ensure all links and images exist.
+Utilize it either with the convenient `htmlproof` command-line executable,
+or write a Ruby script which utilizes the gem.
+
+### The HTML Proofer Executable
+
+{% highlight bash %}
+#!/usr/bin/env bash
+set -e # halt script on error
+
+bundle exec jekyll build
+bundle exec htmlproof ./_site
+{% endhighlight %}
+
+Some options can be specified via command-line switches. Check out the
+`html-proofer` README for more information about these switches, or run
+`htmlproof --help` locally.
+
+### The HTML Proofer Library
+
+You can also invoke `html-proofer` in Ruby scripts (e.g. in a Rakefile):
+
+{% highlight ruby %}
+#!/usr/bin/env ruby
+
+require 'html/proofer'
+HTML::Proofer.new("./_site").run
+{% endhighlight %}
+
+Options are given as a second argument to `.new`, and are encoded in a
+symbol-keyed Ruby Hash. More information about the configuration options,
+check out `html-proofer`'s README file.
+
+[2]: https://github.com/gjtorikian/html-proofer
+
+## 3. Configuring Your Travis Builds
+
+This file is used to configure your Travis builds. Because Jekyll is built
+with Ruby and requires RubyGems to install, we use the Ruby language build
+environment. Below is a sample `.travis.yml` file, and what follows that is
+an explanation of each line.
+
+{% highlight yaml %}
+language: ruby
+rvm:
+- 2.1
+script: ./script/cibuild
+
+# branch whitelist
+branches:
+  only:
+  - gh-pages     # test the gh-pages branch
+  - /pages-(.*)/ # test every branch which starts with "pages-"
+
+env:
+  global:
+  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
+{% endhighlight %}
+
+Ok, now for an explanation of each line:
+
+{% highlight yaml %}
+language: ruby
+{% endhighlight %}
+
+This line tells Travis to use a Ruby build container. It gives your script
+access to Bundler, RubyGems, and and Ruby runtime.
+
+{% highlight yaml %}
+rvm:
+- 2.1
+{% endhighlight %}
+
+RVM is a popular Ruby Version Manager (like rbenv, chruby, etc). This
+directive tells Travis the Ruby version to use when running your test
+script.
+
+{% highlight yaml %}
+script: ./script/cibuild
+{% endhighlight %}
+
+Travis allows you to run any arbitrary shell script to test your site. One
+convention is to put all scripts for your project in the `script`
+directory, and to call your test script `cibuild`. This line is completely
+customizable. If your script won't change much, you can write your test
+incantation here directly:
+
+{% highlight yaml %}
+script: jekyll build && htmlproof ./_site
+{% endhighlight %}
+
+The `script` directive can be absolutely any valid shell command.
+
+{% highlight yaml %}
+# branch whitelist
+branches:
+  only:
+  - gh-pages     # test the gh-pages branch
+  - /pages-(.*)/ # test every branch which starts with "pages-"
+{% endhighlight %}
+
+You want to ensure the Travis builds for your site are being run only on
+the branch or branches which contain your site. One means of ensuring this
+isolation is including a branch whitelist in your Travis configuration
+file. By specifying the `gh-pages` branch, you will ensure the associated
+test script (discussed above) is only executed on site branches. If you use
+a pull request flow for proposing changes, you may wish to enforce a
+convention for your builds such that all branches containing edits are
+prefixed, exemplified above with the `/pages-(.*)/` regular expression.
+
+The `branches` directive is completely optional.
+
+{% highlight yaml %}
+env:
+  global:
+  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
+{% endhighlight %}
+
+Using `html-proofer`? You'll want this environment variable. Nokogiri, used
+to parse HTML files in your compiled site, comes bundled with libraries
+which it must compile each time it is installed. Luckily, you can
+dramatically increase the install time of Nokogiri by setting the
+environment variable `NOKOGIRI_USE_SYSTEM_LIBRARIES` to `true`.
+
+## 4. Gotchas
+
+### Exclude `vendor`
+
+Travis bundles all gems in the `vendor` directory on its build servers,
+which Jekyll will mistakenly read and explode on. To avoid this, exclude
+`vendor` in your `_config.yml`:
+
+{% highlight yaml %}
+exclude: [vendor]
+{% endhighlight %}
+
+### Questions?
+
+This entire guide is open-source. Go ahead and [edit it][3] if you have a
+fix or [ask for help][4] if you run into trouble and need some help.
+
+[3]: https://github.com/jekyll/jekyll/edit/master/site/docs/continuous-integration.md
+[4]: https://github.com/jekyll/jekyll-help#how-do-i-ask-a-question
diff --git a/site/docs/contributing.md b/site/docs/contributing.md
index 0740e32..bdf3641 100644
--- a/site/docs/contributing.md
+++ b/site/docs/contributing.md
@@ -11,8 +11,8 @@ following in mind:
 
 * If you're creating a small fix or patch to an existing feature, just a simple
   test will do. Please stay in the confines of the current test suite and use
-  [Shoulda](http://github.com/thoughtbot/shoulda/tree/master) and
-  [RR](http://github.com/btakita/rr/tree/master).
+  [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and
+  [RR](https://github.com/btakita/rr/tree/master).
 * If it's a brand new feature, make sure to create a new
   [Cucumber](https://github.com/cucumber/cucumber/) feature and reuse steps
   where appropriate. Also, whipping up some documentation in your fork's `site`
@@ -85,7 +85,7 @@ git checkout -b my_awesome_feature
 git push origin my_awesome_feature
 {% endhighlight %}
 
-* Create a pull request against mojombo/jekyll:master and describe what your
+* Create a pull request against jekyll/jekyll:master and describe what your
   change does and the why you think it should be merged.
 
 Updating Documentation
@@ -102,16 +102,21 @@ Jekyll's repo on GitHub.com.
 All documentation pull requests should be directed at `master`.  Pull
 requests directed at another branch will not be accepted.
 
-The [Jekyll wiki]({{ site.repository }}/wiki) on GitHub 
-can be freely updated without a pull request as all 
+The [Jekyll wiki]({{ site.repository }}/wiki) on GitHub
+can be freely updated without a pull request as all
 GitHub users have access.
 
+If you want to add your plugin to the [list of plugins](/docs/plugins/#available-plugins),
+please submit a pull request modifying the [plugins page source
+file]({{ site.repository }}/blob/master/site/docs/plugins.md) by adding a
+link to your plugin under the proper subheading depending upon its type.
+
 Gotchas
 -------
 
 * If you want to bump the gem version, please put that in a separate commit.
   This way, the maintainers can control when the gem gets released.
-* Try to keep your patch(es) based from the latest commit on mojombo/jekyll.
+* Try to keep your patch(es) based from the latest commit on jekyll/jekyll.
   The easier it is to apply your work, the less work the maintainers have to do,
   which is always a good thing.
 * Please don't tag your GitHub issue with \[fix\], \[feature\], etc. The maintainers
diff --git a/site/docs/datafiles.md b/site/docs/datafiles.md
index 93b50aa..a8dd3bc 100644
--- a/site/docs/datafiles.md
+++ b/site/docs/datafiles.md
@@ -1,28 +1,28 @@
 ---
 layout: docs
 title: Data Files
-prev_section: variables
-next_section: migrations
+prev_section: collections
+next_section: assets
 permalink: /docs/datafiles/
 ---
 
 In addition to the [built-in variables](../variables/) available from Jekyll,
-you can specify your own custom data that can be accessed via the [Liquid 
-templating system](http://wiki.github.com/shopify/liquid/liquid-for-designers).
+you can specify your own custom data that can be accessed via the [Liquid
+templating system](https://wiki.github.com/shopify/liquid/liquid-for-designers).
 
-Jekyll supports loading data from [YAML](http://yaml.org/) files located in the 
+Jekyll supports loading data from [YAML](http://yaml.org/) and [JSON](http://www.json.org/) files located in the
 `_data` directory.
 
-This powerful features allows you to avoid repetition in your templates and to
-set site specific options without changing `_config.yml`. 
+This powerful feature allows you to avoid repetition in your templates and to
+set site specific options without changing `_config.yml`.
 
 Plugins/themes can also leverage Data Files to set configuration variables.
 
 ## The Data Folder
 
-As explained on the [directory structure](../structure/) page, the `_data` 
+As explained on the [directory structure](../structure/) page, the `_data`
 folder is where you can store additional data for Jekyll to use when generating
-your site. These files must be YAML files (using either the `.yml` or `.yaml`
+your site. These files must be YAML files (using either the `.yml`, `.yaml` or `.json`
 extension) and they will be accessible via `site.data`.
 
 ## Example: List of members
@@ -61,3 +61,48 @@ You can now render the list of members in a template:
 </ul>
 {% endraw %}
 {% endhighlight %}
+
+## Example: Organizations
+
+Data files can also be placed in sub-folders of the `_data` folder. Each folder level will be added to a variable's namespace. The example bellow shows how GitHub organizations could be defined separately in a file under the `orgs` folder:
+
+In `_data/orgs/jekyll.yml`:
+
+{% highlight yaml %}
+username: jekyll
+name: Jekyll
+members:
+  - name: Tom Preston-Werner
+    github: mojombo
+
+  - name: Parker Moore
+    github: parkr
+{% endhighlight %}
+
+In `_data/orgs/doeorg.yml`:
+
+{% highlight yaml %}
+username: doeorg
+name: Doe Org
+members:
+  - name: John Doe
+    github: jdoe
+{% endhighlight %}
+
+The organizations can then be accessed via `site.data.orgs`, followed by the file name:
+
+{% highlight html %}
+{% raw %}
+<ul>
+{% for org_hash in site.data.orgs %}
+{% assign org = org_hash[1] %}
+  <li>
+    <a href="https://github.com/{{ org.username }}">
+      {{ org.name }}
+    </a>
+    ({{ org.members | size }} members)
+  </li>
+{% endfor %}
+</ul>
+{% endraw %}
+{% endhighlight %}
diff --git a/site/docs/deployment-methods.md b/site/docs/deployment-methods.md
index 6922a9d..e1bab10 100644
--- a/site/docs/deployment-methods.md
+++ b/site/docs/deployment-methods.md
@@ -27,7 +27,7 @@ There are also a number of ways to easily automate the deployment of a Jekyll si
 
 ### Git post-update hook
 
-If you store your jekyll site in [Git](http://git-scm.com/) (you are using version control, right?), it’s pretty easy to automate the
+If you store your Jekyll site in [Git](http://git-scm.com/) (you are using version control, right?), it’s pretty easy to automate the
 deployment process by setting up a post-update hook in your Git
 repository, [like
 this](http://web.archive.org/web/20091223025644/http://www.taknado.com/en/2009/03/26/deploying-a-jekyll-generated-site/).
@@ -73,26 +73,39 @@ Deploying is now as easy as telling nginx or Apache to look at
 laptops$ git push deploy master
 {% endhighlight %}
 
+### Jekyll-hook
+
+You can also use jekyll-hook, a server that listens for webhook posts from
+GitHub, generates a website with Jekyll, and moves it somewhere to be
+published. Use this to run your own GitHub Pages-style web server.
+
+This method is useful if you need to serve your websites behind a firewall,
+need extra server-level features like HTTP basic authentication or want to
+host your site directly on a CDN or file host like S3.
+
+Setup steps are fully documented
+[in the `jekyll-hook` repo](https://github.com/developmentseed/jekyll-hook).
+
 ### Rake
 
 Another way to deploy your Jekyll site is to use [Rake](https://github.com/jimweirich/rake), [HighLine](https://github.com/JEG2/highline), and
-[Net::SSH](http://net-ssh.rubyforge.org/). A more complex example of deploying Jekyll with Rake that deals with multiple branches can be found in [Git Ready](https://github.com/gitready/gitready/blob/cdfbc4ec5321ff8d18c3ce936e9c749dbbc4f190/Rakefile).
+[Net::SSH](https://github.com/net-ssh/net-ssh). A more complex example of deploying Jekyll with Rake that deals with multiple branches can be found in [Git Ready](https://github.com/gitready/gitready/blob/cdfbc4ec5321ff8d18c3ce936e9c749dbbc4f190/Rakefile).
 
 ### rsync
 
-Once you’ve generated the `_site` directory, you can easily rsync it using a `tasks/deploy` shell script similar to [this deploy script here](http://github.com/henrik/henrik.nyh.se/blob/master/tasks/deploy). You’d obviously need to change the values to reflect your site’s details. There is even [a matching TextMate command](http://gist.github.com/214959) that will help you run
+Once you’ve generated the `_site` directory, you can easily rsync it using a `tasks/deploy` shell script similar to [this deploy script here](https://github.com/henrik/henrik.nyh.se/blob/master/tasks/deploy). You’d obviously need to change the values to reflect your site’s details. There is even [a matching TextMate command](http://gist.github.com/214959) that will help you run
 this script from within Textmate.
 
 
 ## Rack-Jekyll
 
-[Rack-Jekyll](http://github.com/bry4n/rack-jekyll/) is an easy way to deploy your site on any Rack server such as Amazon EC2, Slicehost, Heroku, and so forth. It also can run with [shotgun](http://github.com/rtomakyo/shotgun/), [rackup](http://github.com/rack/rack), [mongrel](http://github.com/mongrel/mongrel), [unicorn](http://github.com/defunkt/unicorn/), and [others](https://github.com/adaoraul/rack-jekyll#readme).
+[Rack-Jekyll](https://github.com/adaoraul/rack-jekyll/) is an easy way to deploy your site on any Rack server such as Amazon EC2, Slicehost, Heroku, and so forth. It also can run with [shotgun](https://github.com/rtomayko/shotgun/), [rackup](https://github.com/rack/rack), [mongrel](https://github.com/mongrel/mongrel), [unicorn](https://github.com/defunkt/unicorn/), and [others](https://github.com/adaoraul/rack-jekyll#readme).
 
 Read [this post](http://blog.crowdint.com/2010/08/02/instant-blog-using-jekyll-and-heroku.html) on how to deploy to Heroku using Rack-Jekyll.
 
 ## Jekyll-Admin for Rails
 
-If you want to maintain Jekyll inside your existing Rails app, [Jekyll-Admin](http://github.com/zkarpinski/Jekyll-Admin) contains drop in code to make this possible. See Jekyll-Admin’s [README](http://github.com/zkarpinski/Jekyll-Admin/blob/master/README) for more details.
+If you want to maintain Jekyll inside your existing Rails app, [Jekyll-Admin](https://github.com/zkarpinski/Jekyll-Admin) contains drop in code to make this possible. See Jekyll-Admin’s [README](https://github.com/zkarpinski/Jekyll-Admin/blob/master/README) for more details.
 
 ## Amazon S3
 
@@ -103,6 +116,11 @@ dynamically scaling to almost unlimited traffic. This approach has the
 benefit of being about the cheapest hosting option available for
 low-volume blogs as you only pay for what you use.
 
+## OpenShift
+
+If you'd like to deploy your site to an OpenShift gear, there's [a cartridge
+for that](https://github.com/openshift-cartridges/openshift-jekyll-cartridge).
+
 <div class="note">
   <h5>ProTip™: Use GitHub Pages for zero-hassle Jekyll hosting</h5>
   <p>GitHub Pages are powered by Jekyll behind the scenes, so if you’re looking for a zero-hassle, zero-cost solution, GitHub Pages are a great way to <a href="../github-pages/">host your Jekyll-powered website for free</a>.</p>
diff --git a/site/docs/extras.md b/site/docs/extras.md
index 0c190ec..5bdf2c7 100644
--- a/site/docs/extras.md
+++ b/site/docs/extras.md
@@ -9,48 +9,10 @@ permalink: /docs/extras/
 There are a number of (optional) extra features that Jekyll supports that you
 may want to install, depending on how you plan to use Jekyll.
 
-## LaTeX Support
+## Math Support
 
-Maruku comes with optional support for LaTeX to PNG rendering via blahtex
-(Version 0.6) which must be in your `$PATH` along with `dvips`. If you need
-Maruku to not assume a fixed location for `dvips`, check out [Remi’s Maruku
-fork](http://github.com/remi/maruku).
+Kramdown comes with optional support for LaTeX to PNG rendering via [MathJax](http://www.mathjax.org/) within math blocks. See the Kramdown documentation on [math blocks](http://kramdown.gettalong.org/syntax.html#math-blocks) and [math support](http://kramdown.gettalong.org/converter/html.html#math-support) for more details.
 
-## RDiscount
+## Alternative Markdown Processors
 
-If you prefer to use [RDiscount](http://github.com/rtomayko/rdiscount) instead
-of [Maruku](http://github.com/bhollis/maruku) for Markdown, just make sure you have
-it installed:
-
-{% highlight bash %}
-$ [sudo] gem install rdiscount
-{% endhighlight %}
-
-And then specify RDiscount as the Markdown engine in your `_config.yml` file to
-have Jekyll run with that option.
-
-{% highlight yaml %}
-# In _config.yml
-markdown: rdiscount
-{% endhighlight %}
-
-## Kramdown
-
-You can also use [Kramdown](http://kramdown.rubyforge.org/) instead of Maruku
-for Markdown. Make sure that Kramdown is installed:
-
-{% highlight bash %}
-$ [sudo] gem install kramdown
-{% endhighlight %}
-
-Then you can specify Kramdown as the Markdown engine in `_config.yml`.
-
-{% highlight yaml %}
-# In _config.yml
-markdown: kramdown
-{% endhighlight %}
-
-Kramdown has various options for customizing the HTML output. The
-[Configuration](/docs/configuration/) page lists the default options used by
-Jekyll. A complete list of options is also available on the [Kramdown
-website](http://kramdown.rubyforge.org/options.html).
+See the Markdown section on the [configuration page](/docs/configuration/#markdown-options) for instructions on how to use and configure alternative Markdown processors, as well as how to create [custom processors](/docs/configuration/#custom-markdown-processors).
diff --git a/site/docs/frontmatter.md b/site/docs/frontmatter.md
index 98c15cc..7f218ed 100644
--- a/site/docs/frontmatter.md
+++ b/site/docs/frontmatter.md
@@ -30,7 +30,8 @@ relies on.
   <p>
     If you use UTF-8 encoding, make sure that no <code>BOM</code> header
     characters exist in your files or very, very bad things will happen to
-    Jekyll. This is especially relevant if you’re running Jekyll on Windows.
+    Jekyll. This is especially relevant if you’re running
+    <a href="../windows/">Jekyll on Windows</a>.
   </p>
 </div>
 
@@ -178,3 +179,13 @@ These are available out-of-the-box to be used in the front-matter for a post.
   </tbody>
 </table>
 </div>
+
+<div class="note">
+  <h5>ProTip™: Don't repeat yourself</h5>
+  <p>
+    If you don't want to repeat your frequently used front-matter variables over and over,
+    just define <a href="../configuration/#frontmatter-defaults" title="frontmatter defaults">defaults</a>
+    for them and only override them where necessary (or not at all). This works both for predefined
+    and custom variables.
+  </p>
+</div>
diff --git a/site/docs/github-pages.md b/site/docs/github-pages.md
index d5036c5..f126db0 100644
--- a/site/docs/github-pages.md
+++ b/site/docs/github-pages.md
@@ -8,7 +8,7 @@ permalink: /docs/github-pages/
 
 [GitHub Pages](http://pages.github.com) are public web pages for users,
 organizations, and repositories, that are freely hosted on GitHub's
-[github.io]() domain or on a custom domain name of your choice. GitHub Pages are
+`github.io` domain or on a custom domain name of your choice. GitHub Pages are
 powered by Jekyll behind the scenes, so in addition to supporting regular HTML
 content, they’re also a great way to host your Jekyll-powered website for free.
 
@@ -65,7 +65,7 @@ whilst maintaining the ability to preview your Jekyll site locally.
 1. In `_config.yml`, set the `baseurl` option to `/project-name` -- note the
    leading slash and the **absence** of a trailing slash.
 2. When referencing JS or CSS files, do it like this:
-   `{% raw %}{{ site.baseurl}}/path/to/css.css{% endraw %}` -- note the slash
+   `{% raw %}{{ site.baseurl }}/path/to/css.css{% endraw %}` -- note the slash
    immediately following the variable (just before "path").
 3. When doing permalinks or internal links, do it like this:
    `{% raw %}{{ site.baseurl }}{{ post.url }}{% endraw %}` -- note that there
diff --git a/site/docs/heroku.md b/site/docs/heroku.md
deleted file mode 100644
index 84b448b..0000000
--- a/site/docs/heroku.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: docs
-title: Heroku
-prev_section: github-pages
-next_section: manual-deployment
-permalink: /docs/heroku/
----
-
-Move along, people. Nothing to see here.
diff --git a/site/docs/history.md b/site/docs/history.md
index 5520537..35f1825 100644
--- a/site/docs/history.md
+++ b/site/docs/history.md
@@ -5,79 +5,551 @@ permalink: "/docs/history/"
 prev_section: contributing
 ---
 
+## 2.2.0 / 2014-07-29
+{: #v2-2-0}
+
+### Minor Enhancements
+{: #minor-enhancements-v2-2-0}
+
+- Throw a warning if the specified layout does not exist ([#2620]({{ site.repository }}/issues/2620))
+- Whitelist Pygments options in safe mode ([#2642]({{ site.repository }}/issues/2642))
+
+### Bug Fixes
+{: #bug-fixes-v2-2-0}
+
+- Remove unnecessary `Jekyll::Tags::IncludeTag#blank?` method ([#2625]({{ site.repository }}/issues/2625))
+- Categories in the path are ignored ([#2633]({{ site.repository }}/issues/2633))
+
+### Development Fixes
+{: #development-fixes-v2-2-0}
+
+- Refactoring Errors & Requires of Third-Party stuff ([#2591]({{ site.repository }}/issues/2591))
+- Add further tests for categories ([#2584]({{ site.repository }}/issues/2584))
+- Proof site with html-proofer on change ([#2605]({{ site.repository }}/issues/2605))
+- Fix up bug in [#2605]({{ site.repository }}/issues/2605) which caused proofing the site not to function ([#2608]({{ site.repository }}/issues/2608))
+- Use `bundle exec` in `script/proof` ([#2610]({{ site.repository }}/issues/2610))
+
+### Site Enhancements
+{: #site-enhancements-v2-2-0}
+
+- Update Kramdown urls ([#2588]({{ site.repository }}/issues/2588))
+- Add `Jekyll::AutolinkEmail` and `Jekyll::GitMetadata` to the list of
+    third-party plugins ([#2596]({{ site.repository }}/issues/2596))
+- Fix a bunch of broken links in the site ([#2601]({{ site.repository }}/issues/2601))
+- Replace dead links with working links ([#2611]({{ site.repository }}/issues/2611))
+- Add jekyll-hook to deployment methods ([#2617]({{ site.repository }}/issues/2617))
+- Added kramdown-with-pygments plugin to the list of third-party plugins ([#2623]({{ site.repository }}/issues/2623))
+- Update outdated "Extras" page and remove duplicate documentation ([#2622]({{ site.repository }}/issues/2622))
+- Add co2 plugin to list of third-party plugins ([#2639]({{ site.repository }}/issues/2639))
+- Attempt to clarify the way Sass imports happen ([#2642]({{ site.repository }}/issues/2642))
+
+
+## 2.1.1 / 2014-07-01
+{: #v2-1-1}
+
+### Bug Fixes
+{: #bug-fixes-v2-1-1}
+
+- Patch read vulnerabilities for data & confirm none for layouts ([#2563]({{ site.repository }}/issues/2563))
+- Update Maruku dependency to allow use of the latest version ([#2576]({{ site.repository }}/issues/2576))
+- Remove conditional assignment from document URL to prevent stale urls ([#2575]({{ site.repository }}/issues/2575))
+
+### Site Enhancements
+{: #site-enhancements-v2-1-1}
+
+- Add vertical margin to `highlight` to separate code blocks ([#2558]({{ site.repository }}/issues/2558))
+- Add `html_pages` to Variables docs ([#2567]({{ site.repository }}/issues/2567))
+- Fixed broken link to Permalinks page ([#2572]({{ site.repository }}/issues/2572))
+- Update link to Windows installation guide ([#2578]({{ site.repository }}/issues/2578))
+
+
+## 2.1.0 / 2014-06-28
+{: #v2-1-0}
+
+### Minor Enhancements
+{: #minor-enhancements-v2-1-0}
+
+- Bump to the latest Liquid version, 2.6.1 ([#2495]({{ site.repository }}/issues/2495))
+- Add support for JSON files in the `_data` directory ([#2369]({{ site.repository }}/issues/2369))
+- Allow subclasses to override `EXCERPT_ATTRIBUTES_FOR_LIQUID` ([#2408]({{ site.repository }}/issues/2408))
+- Add `Jekyll.env` and `jekyll.environment` (the Liquid var) ([#2417]({{ site.repository }}/issues/2417))
+- Use `_config.yaml` or `_config.yml` (`.yml` takes precedence) ([#2406]({{ site.repository }}/issues/2406))
+- Override collection url template ([#2418]({{ site.repository }}/issues/2418))
+- Allow subdirectories in `_data` ([#2395]({{ site.repository }}/issues/2395))
+- Extract Pagination Generator into gem: `jekyll-paginate` ([#2455]({{ site.repository }}/issues/2455))
+- Utilize `date_to_rfc822` filter in site template ([#2437]({{ site.repository }}/issues/2437))
+- Add categories, last build datetime, and generator to site template
+    feed ([#2438]({{ site.repository }}/issues/2438))
+- Configurable, replaceable Logger-compliant logger ([#2444]({{ site.repository }}/issues/2444))
+- Extract `gist` tag into a separate gem ([#2469]({{ site.repository }}/issues/2469))
+- Add `collection` attribute to `Document#to_liquid` to access the
+    document's collection label. ([#2436]({{ site.repository }}/issues/2436))
+- Upgrade listen to `2.7.6 <= x < 3.0.0` ([#2492]({{ site.repository }}/issues/2492))
+- Allow configuration of different Twitter and GitHub usernames in site template ([#2485]({{ site.repository }}/issues/2485))
+- Bump Pygments to v0.6.0 ([#2504]({{ site.repository }}/issues/2504))
+- Front-matter defaults for documents in collections ([#2419]({{ site.repository }}/issues/2419))
+- Include files with a url which ends in `/` in the `site.html_pages` list ([#2524]({{ site.repository }}/issues/2524))
+- Make `highlight` tag use `language-` prefix in CSS class ([#2511]({{ site.repository }}/issues/2511))
+- Lookup item property via `item#to_liquid` before `#data` or `#[]` in filters ([#2493]({{ site.repository }}/issues/2493))
+- Skip initial build of site on serve with flag ([#2477]({{ site.repository }}/issues/2477))
+- Add support for `hl_lines` in `highlight` tag ([#2532]({{ site.repository }}/issues/2532))
+- Spike out `--watch` flag into a separate gem ([#2550]({{ site.repository }}/issues/2550))
+
+### Bug Fixes
+{: #bug-fixes-v2-1-0}
+
+- Liquid `sort` filter should sort even if one of the values is `nil` ([#2345]({{ site.repository }}/issues/2345))
+- Remove padding on `pre code` in the site template CSS ([#2383]({{ site.repository }}/issues/2383))
+- Set `log_level` earlier to silence info level configuration output ([#2393]({{ site.repository }}/issues/2393))
+- Only list pages which have `title` in site template ([#2411]({{ site.repository }}/issues/2411))
+- Accept `Numeric` values for dates, not `Number` values ([#2377]({{ site.repository }}/issues/2377))
+- Prevent code from overflowing container in site template ([#2429]({{ site.repository }}/issues/2429))
+- Encode URLs in UTF-8 when escaping and unescaping ([#2420]({{ site.repository }}/issues/2420))
+- No Layouts or Liquid for Asset Files ([#2431]({{ site.repository }}/issues/2431))
+- Allow front-matter defaults to set post categories ([#2373]({{ site.repository }}/issues/2373))
+- Fix command in subcommand deprecation warning ([#2457]({{ site.repository }}/issues/2457))
+- Keep all parent directories of files/dirs in `keep_files` ([#2458]({{ site.repository }}/issues/2458))
+- When using RedCarpet and Rouge without Rouge installed, fixed erroneous
+    error which stated that redcarpet was missing, not rouge. ([#2464]({{ site.repository }}/issues/2464))
+- Ignore *all* directories and files that merit it on auto-generation ([#2459]({{ site.repository }}/issues/2459))
+- Before copying file, explicitly remove the old one ([#2535]({{ site.repository }}/issues/2535))
+- Merge file system categories with categories from YAML. ([#2531]({{ site.repository }}/issues/2531))
+- Deep merge front matter defaults ([#2490]({{ site.repository }}/issues/2490))
+- Ensure exclude and include arrays are arrays of strings ([#2542]({{ site.repository }}/issues/2542))
+- Allow collections to have dots in their filenames ([#2552]({{ site.repository }}/issues/2552))
+- Collections shouldn't try to read in directories as files ([#2552]({{ site.repository }}/issues/2552))
+- Be quiet very quickly. ([#2520]({{ site.repository }}/issues/2520))
+
+### Development Fixes
+{: #development-fixes-v2-1-0}
+
+- Test Ruby 2.1.2 instead of 2.1.1 ([#2374]({{ site.repository }}/issues/2374))
+- Add test for sorting UTF-8 characters ([#2384]({{ site.repository }}/issues/2384))
+- Use `https` for GitHub links in documentation ([#2470]({{ site.repository }}/issues/2470))
+- Remove coverage reporting with Coveralls ([#2494]({{ site.repository }}/issues/2494))
+- Fix a bit of missing TomDoc to `Jekyll::Commands::Build#build` ([#2554]({{ site.repository }}/issues/2554))
+
+### Site Enhancements
+{: #site-enhancements-v2-1-0}
+
+- Set `timezone` to `America/Los_Angeles` ([#2394]({{ site.repository }}/issues/2394))
+- Improve JavaScript in `anchor_links.html` ([#2368]({{ site.repository }}/issues/2368))
+- Remove note on Quickstart page about default markdown converter ([#2387]({{ site.repository }}/issues/2387))
+- Remove broken link in extras.md to a Maruku fork ([#2401]({{ site.repository }}/issues/2401))
+- Update Font Awesome to v4.1.0. ([#2410]({{ site.repository }}/issues/2410))
+- Fix broken link on Installation page to Templates page ([#2421]({{ site.repository }}/issues/2421))
+- Prevent table from extending parent width in permalink style table ([#2424]({{ site.repository }}/issues/2424))
+- Add collections to info about pagination support ([#2389]({{ site.repository }}/issues/2389))
+- Add `jekyll_github_sample` plugin to list of third-party plugins ([#2463]({{ site.repository }}/issues/2463))
+- Clarify documentation around front-matter defaults and add details
+    about defaults for collections. ([#2439]({{ site.repository }}/issues/2439))
+- Add Jekyll Project Version Tag to list of third-party plugins ([#2468]({{ site.repository }}/issues/2468))
+- Use `https` for GitHub links across whole site ([#2470]({{ site.repository }}/issues/2470))
+- Add StickerMule + Jekyll post ([#2476]({{ site.repository }}/issues/2476))
+- Add Jekyll Asset Pipeline Reborn to list of third-party plugins ([#2479]({{ site.repository }}/issues/2479))
+- Add link to jekyll-compress-html to list of third-party plugins ([#2514]({{ site.repository }}/issues/2514))
+- Add Piwigo Gallery to list of third-party plugins ([#2526]({{ site.repository }}/issues/2526))
+- Set `show_drafts` to `false` in default configuration listing ([#2536]({{ site.repository }}/issues/2536))
+- Provide an updated link for Windows installation instructions ([#2544]({{ site.repository }}/issues/2544))
+- Remove `url` from configuration docs ([#2547]({{ site.repository }}/issues/2547))
+- Documentation for Continuous Integration for your Jekyll Site ([#2432]({{ site.repository }}/issues/2432))
+
+
+## 2.0.3 / 2014-05-08
+{: #v2-0-3}
+
+### Bug Fixes
+{: #bug-fixes-v2-0-3}
+
+- Properly prefix links in site template with URL or baseurl depending upon
+    need. ([#2319]({{ site.repository }}/issues/2319))
+- Update gist tag comments and error message to require username ([#2326]({{ site.repository }}/issues/2326))
+- Fix `permalink` setting in site template ([#2331]({{ site.repository }}/issues/2331))
+- Don't fail if any of the path objects are nil ([#2325]({{ site.repository }}/issues/2325))
+- Instantiate all descendants for converters and generators, not just
+    direct subclasses ([#2334]({{ site.repository }}/issues/2334))
+- Replace all instances of `site.name` with `site.title` in site template ([#2324]({{ site.repository }}/issues/2324))
+- `Jekyll::Filters#time` now accepts UNIX timestamps in string or number form ([#2339]({{ site.repository }}/issues/2339))
+- Use `item_property` for `where` filter so it doesn't break on collections ([#2359]({{ site.repository }}/issues/2359))
+- Rescue errors thrown so `--watch` doesn't fail ([#2364]({{ site.repository }}/issues/2364))
+
+### Site Enhancements
+{: #site-enhancements-v2-0-3}
+
+- Add missing "as" to assets docs page ([#2337]({{ site.repository }}/issues/2337))
+- Update docs to reflect new `baseurl` default ([#2341]({{ site.repository }}/issues/2341))
+- Add links to headers who have an ID. ([#2342]({{ site.repository }}/issues/2342))
+- Use symbol instead of HTML number in `upgrading.md` ([#2351]({{ site.repository }}/issues/2351))
+- Fix link to frontmatter defaults docs ([#2353]({{ site.repository }}/issues/2353))
+- Fix for `History.markdown` in order to fix history page in docs ([#2363]({{ site.repository }}/issues/2363))
+
+
+## 2.0.2 / 2014-05-07
+{: #v2-0-2}
+
+### Bug Fixes
+{: #bug-fixes-v2-0-2}
+
+- Correct use of `url` and `baseurl` in the site template. ([#2317]({{ site.repository }}/issues/2317))
+- Default `baseurl` to `""` ([#2317]({{ site.repository }}/issues/2317))
+
+### Site Enhancements
+{: #site-enhancements-v2-0-2}
+
+- Correct docs for the `gist` plugin so it always includes the username. ([#2314]({{ site.repository }}/issues/2314))
+- Clarify new (defaults, `where` filter) features in docs ([#2316]({{ site.repository }}/issues/2316))
+
+
+## 2.0.1 / 2014-05-06
+{: #v2-0-1}
+
+### Bug Fixes
+{: #bug-fixes-v2-0-1}
+
+- Require `kramdown` gem instead of `maruku` gem
+
+
+## 2.0.0 / 2014-05-06
+{: #v2-0-0}
+
+### Major Enhancements
+{: #major-enhancements-v2-0-0}
+- Add "Collections" feature ([#2199]({{ site.repository }}/issues/2199))
+- Add gem-based plugin whitelist to safe mode ([#1657]({{ site.repository }}/issues/1657))
+- Replace the commander command line parser with a more robust
+    solution for our needs called `mercenary` ([#1706]({{ site.repository }}/issues/1706))
+- Remove support for Ruby 1.8.x ([#1780]({{ site.repository }}/issues/1780))
+- Move to jekyll/jekyll from mojombo/jekyll ([#1817]({{ site.repository }}/issues/1817))
+- Allow custom markdown processors ([#1872]({{ site.repository }}/issues/1872))
+- Provide support for the Rouge syntax highlighter ([#1859]({{ site.repository }}/issues/1859))
+- Provide support for Sass ([#1932]({{ site.repository }}/issues/1932))
+- Provide a 300% improvement when generating sites that use
+    `Post#next` or `Post#previous` ([#1983]({{ site.repository }}/issues/1983))
+- Provide support for CoffeeScript ([#1991]({{ site.repository }}/issues/1991))
+- Replace Maruku with Kramdown as Default Markdown Processor ([#1988]({{ site.repository }}/issues/1988))
+- Expose `site.static_files` to Liquid ([#2075]({{ site.repository }}/issues/2075))
+- Complete redesign of the template site generated by `jekyll new` ([#2050]({{ site.repository }}/issues/2050))
+- Update Listen from 1.x to 2.x ([#2097]({{ site.repository }}/issues/2097))
+- Front-matter defaults ([#2205]({{ site.repository }}/issues/2205))
+- Deprecate `relative_permalinks` configuration option (default to `false`) ([#2307]({{ site.repository }}/issues/2307))
+- Exclude files based on prefix as well as `fnmatch?` ([#2303]({{ site.repository }}/issues/2303))
+
+### Minor Enhancements
+{: #minor-enhancements-v2-0-0}
+- Move the EntryFilter class into the Jekyll module to avoid polluting the
+    global namespace ([#1800]({{ site.repository }}/issues/1800))
+- Add `group_by` Liquid filter create lists of items grouped by a common
+    property's value ([#1788]({{ site.repository }}/issues/1788))
+- Add support for Maruku's `fenced_code_blocks` option ([#1799]({{ site.repository }}/issues/1799))
+- Update Redcarpet dependency to ~> 3.0 ([#1815]({{ site.repository }}/issues/1815))
+- Automatically sort all pages by name ([#1848]({{ site.repository }}/issues/1848))
+- Better error message when time is not parseable ([#1847]({{ site.repository }}/issues/1847))
+- Allow `include` tag variable arguments to use filters ([#1841]({{ site.repository }}/issues/1841))
+- `post_url` tag should raise `ArgumentError` for invalid name ([#1825]({{ site.repository }}/issues/1825))
+- Bump dependency `mercenary` to `~> 0.2.0` ([#1879]({{ site.repository }}/issues/1879))
+- Bump dependency `safe_yaml` to `~> 1.0` ([#1886]({{ site.repository }}/issues/1886))
+- Allow sorting of content by custom properties ([#1849]({{ site.repository }}/issues/1849))
+- Add `--quiet` flag to silence output during build and serve ([#1898]({{ site.repository }}/issues/1898))
+- Add a `where` filter to filter arrays based on a key/value pair
+    ([#1875]({{ site.repository }}/issues/1875))
+- Route 404 errors to a custom 404 page in development ([#1899]({{ site.repository }}/issues/1899))
+- Excludes are now relative to the site source ([#1916]({{ site.repository }}/issues/1916))
+- Bring MIME Types file for `jekyll serve` to complete parity with GH Pages
+    servers ([#1993]({{ site.repository }}/issues/1993))
+- Adding Breakpoint to make new site template more responsive ([#2038]({{ site.repository }}/issues/2038))
+- Default to using the UTF-8 encoding when reading files. ([#2031]({{ site.repository }}/issues/2031))
+- Update Redcarpet dependency to ~> 3.1 ([#2044]({{ site.repository }}/issues/2044))
+- Remove support for Ruby 1.9.2 ([#2045]({{ site.repository }}/issues/2045))
+- Add `.mkdown` as valid Markdown extension ([#2048]({{ site.repository }}/issues/2048))
+- Add `index.xml` to the list of WEBrick directory index files ([#2041]({{ site.repository }}/issues/2041))
+- Make the `layouts` config key relative to CWD or to source ([#2058]({{ site.repository }}/issues/2058))
+- Update Kramdown to `~> 1.3` ([#1894]({{ site.repository }}/issues/1894))
+- Remove unnecessary references to `self` ([#2090]({{ site.repository }}/issues/2090))
+- Update to Mercenary v0.3.x ([#2085]({{ site.repository }}/issues/2085))
+- Ship Sass support as a separate gem ([#2098]({{ site.repository }}/issues/2098))
+- Extract core extensions into a Utils module ([#2112]({{ site.repository }}/issues/2112))
+- Refactor CLI & Commands For Greater Happiness ([#2143]({{ site.repository }}/issues/2143))
+- Provide useful error when Pygments returns `nil` and error out ([#2148]({{ site.repository }}/issues/2148))
+- Add support for unpublished drafts ([#2164]({{ site.repository }}/issues/2164))
+- Add `force_polling` option to the `serve` command ([#2165]({{ site.repository }}/issues/2165))
+- Clean up the `<head>` in the site template ([#2186]({{ site.repository }}/issues/2186))
+- Permit YAML blocks to end with three dots to better conform with the
+    YAML spec ([#2110]({{ site.repository }}/issues/2110))
+- Use `File.exist?` instead of deprecated `File.exists?` ([#2214]({{ site.repository }}/issues/2214))
+- Require newline after start of YAML front-matter header ([#2211]({{ site.repository }}/issues/2211))
+- Add the ability for pages to be marked as `published: false` ([#1492]({{ site.repository }}/issues/1492))
+- Add `Jekyll::LiquidExtensions` with `.lookup_variable` method for easy
+    looking up of variable values in a Liquid context. ([#2253]({{ site.repository }}/issues/2253))
+- Remove literal lang name from class ([#2292]({{ site.repository }}/issues/2292))
+- Return `utf-8` encoding in header for  webrick error page response ([#2289]({{ site.repository }}/issues/2289))
+- Make template site easier to customize ([#2268]({{ site.repository }}/issues/2268))
+- Add two-digit year to permalink template option ([#2301]({{ site.repository }}/issues/2301))
+- Add `site.documents` to Liquid payload (list of all docs) ([#2295]({{ site.repository }}/issues/2295))
+- Take into account missing values in the Liquid sort filter ([#2299]({{ site.repository }}/issues/2299))
+
+### Bug Fixes
+{: #bug-fixes-v2-0-0}
+- Don't allow nil entries when loading posts ([#1796]({{ site.repository }}/issues/1796))
+- Remove the scrollbar that's always displayed in new sites generated
+    from the site template ([#1805]({{ site.repository }}/issues/1805))
+- Add `#path` to required methods in `Jekyll::Convertible` ([#1866]({{ site.repository }}/issues/1866))
+- Default Maruku fenced code blocks to ON for 2.0.0-dev ([#1831]({{ site.repository }}/issues/1831))
+- Change short opts for host and port for `jekyll docs` to be consistent with
+    other subcommands ([#1877]({{ site.repository }}/issues/1877))
+- Fix typos ([#1910]({{ site.repository }}/issues/1910))
+- Lock Maruku at 0.7.0 to prevent bugs caused by Maruku 0.7.1 ([#1958]({{ site.repository }}/issues/1958))
+- Fixes full path leak to source directory when using include tag ([#1951]({{ site.repository }}/issues/1951))
+- Don't generate pages that aren't being published ([#1931]({{ site.repository }}/issues/1931))
+- Use `SafeYAML.load` to avoid conflicts with other projects ([#1982]({{ site.repository }}/issues/1982))
+- Relative posts should never fail to build ([#1976]({{ site.repository }}/issues/1976))
+- Remove executable bits of non executable files ([#2056]({{ site.repository }}/issues/2056))
+- `#path` for a draft is now `_drafts` instead of `_posts` ([#2042]({{ site.repository }}/issues/2042))
+- Patch a couple show-stopping security vulnerabilities ([#1946]({{ site.repository }}/issues/1946))
+- Sanitize paths uniformly, in a Windows-friendly way ([#2065]({{ site.repository }}/issues/2065), [#2109]({{ site.repository }}/issues/2109))
+- Update gem build steps to work correctly on Windows ([#2118]({{ site.repository }}/issues/2118))
+- Remove obsolete `normalize_options` method call from `bin/jekyll` ([#2121]({{ site.repository }}/issues/2121)).
+- Remove `+` characters from Pygments lexer names when adding as a CSS
+    class ([#994]({{ site.repository }}/issues/994))
+- Remove some code that caused Ruby interpreter warnings ([#2178]({{ site.repository }}/issues/2178))
+- Only strip the drive name if it begins the string ([#2175]({{ site.repository }}/issues/2175))
+- Remove default post with invalid date from site template ([#2200]({{ site.repository }}/issues/2200))
+- Fix `Post#url` and `Page#url` escape ([#1568]({{ site.repository }}/issues/1568))
+- Strip newlines from the {% raw %}`{% highlight %}`{% endraw %} block content ([#1823]({{ site.repository }}/issues/1823))
+- Load in `rouge` only when it's been requested as the highlighter ([#2189]({{ site.repository }}/issues/2189))
+- Convert input to string before XML escaping (`xml_escape` liquid filter) ([#2244]({{ site.repository }}/issues/2244))
+- Modify configuration key for Collections and reset properly. ([#2238]({{ site.repository }}/issues/2238))
+- Avoid duplicated output using `highlight` tag ([#2264]({{ site.repository }}/issues/2264))
+- Only use Jekyll.logger for output ([#2307]({{ site.repository }}/issues/2307))
+- Close the file descriptor in `has_yaml_header?` ([#2310]({{ site.repository }}/issues/2310))
+- Add `output` to `Document` liquid output hash ([#2309]({{ site.repository }}/issues/2309))
+
+### Development Fixes
+{: #development-fixes-v2-0-0}
+- Add a link to the site in the README.md file ([#1795]({{ site.repository }}/issues/1795))
+- Add in History and site changes from `v1-stable` branch ([#1836]({{ site.repository }}/issues/1836))
+- Testing additions on the Excerpt class ([#1893]({{ site.repository }}/issues/1893))
+- Fix the `highlight` tag feature ([#1859]({{ site.repository }}/issues/1859))
+- Test Jekyll under Ruby 2.1.0 ([#1900]({{ site.repository }}/issues/1900))
+- Add script/cibuild for fun and profit ([#1912]({{ site.repository }}/issues/1912))
+- Use `Forwardable` for delegation between `Excerpt` and `Post`
+    ([#1927]({{ site.repository }}/issues/1927))
+- Rename `read_things` to `read_content` ([#1928]({{ site.repository }}/issues/1928))
+- Add `script/branding` script for ASCII art lovin' ([#1936]({{ site.repository }}/issues/1936))
+- Update the README to reflect the repo move ([#1943]({{ site.repository }}/issues/1943))
+- Add the project vision to the README ([#1935]({{ site.repository }}/issues/1935))
+- Speed up Travis CI builds by using Rebund ([#1985]({{ site.repository }}/issues/1985))
+- Use Yarp as a Gem proxy for Travis CI ([#1984]({{ site.repository }}/issues/1984))
+- Remove Yarp as a Gem proxy for Travis CI ([#2004]({{ site.repository }}/issues/2004))
+- Move the reading of layouts into its own class ([#2020]({{ site.repository }}/issues/2020))
+- Test Sass import ([#2009]({{ site.repository }}/issues/2009))
+- Switch Maruku and Kramdown in lists of Runtime vs. Development dependencies ([#2049]({{ site.repository }}/issues/2049))
+- Clean up the gemspec for the project ([#2095]({{ site.repository }}/issues/2095))
+- Add Japanese translation of README and CONTRIBUTING docs. ([#2081]({{ site.repository }}/issues/2081))
+- Re-align the tables in Cucumber ([#2108]({{ site.repository }}/issues/2108))
+- Trim trailing spaces and convert tabs to spaces ([#2122]({{ site.repository }}/issues/2122))
+- Fix the failing Travis scenarios due to Cucumber issues ([#2155]({{ site.repository }}/issues/2155))
+- Wrap `bundle install` in `travis_retry` to retry when RubyGems fails ([#2160]({{ site.repository }}/issues/2160))
+- Refactor tags and categories ([#1639]({{ site.repository }}/issues/1639))
+- Extract plugin management into its own class ([#2197]({{ site.repository }}/issues/2197))
+- Add missing tests for `Command` ([#2216]({{ site.repository }}/issues/2216))
+- Update `rr` link in CONTRIBUTING doc ([#2247]({{ site.repository }}/issues/2247))
+- Streamline Cucumber execution of `jekyll` subcommands ([#2258]({{ site.repository }}/issues/2258))
+- Refactor `Commands::Serve`. ([#2269]({{ site.repository }}/issues/2269))
+- Refactor `highlight` tag ([#2154]({{ site.repository }}/issues/2154))
+- Update `Util` hash functions with latest from Rails ([#2273]({{ site.repository }}/issues/2273))
+- Workaround for Travis bug ([#2290]({{ site.repository }}/issues/2290))
+
+### Site Enhancements
+{: #site-enhancements-v2-0-0}
+- Document Kramdown's GFM parser option ([#1791]({{ site.repository }}/issues/1791))
+- Move CSS to includes & update normalize.css to v2.1.3 ([#1787]({{ site.repository }}/issues/1787))
+- Minify CSS only in production ([#1803]({{ site.repository }}/issues/1803))
+- Fix broken link to installation of Ruby on Mountain Lion blog post on
+    Troubleshooting docs page ([#1797]({{ site.repository }}/issues/1797))
+- Fix issues with 1.4.1 release blog post ([#1804]({{ site.repository }}/issues/1804))
+- Add note about deploying to OpenShift ([#1812]({{ site.repository }}/issues/1812))
+- Collect all Windows-related docs onto one page ([#1818]({{ site.repository }}/issues/1818))
+- Fixed typo in datafiles doc page ([#1854]({{ site.repository }}/issues/1854))
+- Clarify how to access `site` in docs ([#1864]({{ site.repository }}/issues/1864))
+- Add closing `<code>` tag to `context.registers[:site]` note ([#1867]({{ site.repository }}/issues/1867))
+- Fix link to [@mojombo](https://github.com/mojombo)'s site source ([#1897]({{ site.repository }}/issues/1897))
+- Add `paginate: nil` to default configuration in docs ([#1896]({{ site.repository }}/issues/1896))
+- Add link to our License in the site footer ([#1889]({{ site.repository }}/issues/1889))
+- Add a charset note in "Writing Posts" doc page ([#1902]({{ site.repository }}/issues/1902))
+- Disallow selection of path and prompt in bash examples
+- Add jekyll-compass to the plugin list ([#1923]({{ site.repository }}/issues/1923))
+- Add note in Posts docs about stripping `<p>` tags from excerpt ([#1933]({{ site.repository }}/issues/1933))
+- Add additional info about the new exclude behavior ([#1938]({{ site.repository }}/issues/1938))
+- Linkify 'awesome contributors' to point to the contributors graph on
+    GitHub ([#1940]({{ site.repository }}/issues/1940))
+- Update `docs/sites.md` link to GitHub Training materials ([#1949]({{ site.repository }}/issues/1949))
+- Update `master` with the release info from 1.4.3 ([#1947]({{ site.repository }}/issues/1947))
+- Define docs nav in datafile ([#1953]({{ site.repository }}/issues/1953))
+- Clarify the docs around the naming convention for posts ([#1971]({{ site.repository }}/issues/1971))
+- Add missing `next` and `previous` docs for post layouts and templates ([#1970]({{ site.repository }}/issues/1970))
+- Add note to `Writing posts` page about how to strip html from excerpt ([#1962]({{ site.repository }}/issues/1962))
+- Add `jekyll-humanize` plugin to plugin list ([#1998]({{ site.repository }}/issues/1998))
+- Add `jekyll-font-awesome` plugin to plugin list ([#1999]({{ site.repository }}/issues/1999))
+- Add `sublime-jekyll` to list of Editor plugins ([#2001]({{ site.repository }}/issues/2001))
+- Add `vim-jekyll` to the list of Editor plugins ([#2005]({{ site.repository }}/issues/2005))
+- Fix non-semantic nesting of `p` tags in `news_item` layout ([#2013]({{ site.repository }}/issues/2013))
+- Document destination folder cleaning ([#2016]({{ site.repository }}/issues/2016))
+- Updated instructions for NearlyFreeSpeech.NET installation ([#2015]({{ site.repository }}/issues/2015))
+- Update link to rack-jekyll on "Deployment Methods" page ([#2047]({{ site.repository }}/issues/2047))
+- Fix typo in /docs/configuration ([#2073]({{ site.repository }}/issues/2073))
+- Fix count in docs for `site.static_files` ([#2077]({{ site.repository }}/issues/2077))
+- Update configuration docs to indicate utf-8 is the default for 2.0.0
+    and ASCII for 1.9.3 ([#2074]({{ site.repository }}/issues/2074))
+- Add info about unreleased feature to the site ([#2061]({{ site.repository }}/issues/2061))
+- Add whitespace to liquid example in GitHub Pages docs ([#2084]({{ site.repository }}/issues/2084))
+- Clarify the way Sass and CoffeeScript files are read in and output ([#2067]({{ site.repository }}/issues/2067))
+- Add lyche gallery tag plugin link to list of plugins ([#2094]({{ site.repository }}/issues/2094))
+- Add Jekyll Pages Directory plugin to list of plugins ([#2096]({{ site.repository }}/issues/2096))
+- Update Configuration docs page with new markdown extension ([#2102]({{ site.repository }}/issues/2102))
+- Add `jekyll-image-set` to the list of third-party plugins ([#2105]({{ site.repository }}/issues/2105))
+- Losslessly compress images ([#2128]({{ site.repository }}/issues/2128))
+- Update normalize.css to 3.0.0 ([#2126]({{ site.repository }}/issues/2126))
+- Update modernizr to v2.7.1 ([#2129]({{ site.repository }}/issues/2129))
+- Add `jekyll-ordinal` to list of third-party plugins ([#2150]({{ site.repository }}/issues/2150))
+- Add `jekyll_figure` to list of third-party plugins ([#2158]({{ site.repository }}/issues/2158))
+- Clarify the documentation for safe mode ([#2163]({{ site.repository }}/issues/2163))
+- Some HTML tidying ([#2130]({{ site.repository }}/issues/2130))
+- Remove modernizr and use html5shiv.js directly for IE less than v9 ([#2131]({{ site.repository }}/issues/2131))
+- Remove unused images ([#2187]({{ site.repository }}/issues/2187))
+- Use `array_to_sentence_string` filter when outputting news item
+    categories ([#2191]({{ site.repository }}/issues/2191))
+- Add link to Help repo in primary navigation bar ([#2177]({{ site.repository }}/issues/2177))
+- Switch to using an ico file for the shortcut icon ([#2193]({{ site.repository }}/issues/2193))
+- Use numbers to specify font weights and only bring in font weights used ([#2185]({{ site.repository }}/issues/2185))
+- Add a link to the list of all tz database time zones ([#1824]({{ site.repository }}/issues/1824))
+- Clean-up and improve documentation `feed.xml` ([#2192]({{ site.repository }}/issues/2192))
+- Remove duplicate entry in list of third-party plugins ([#2206]({{ site.repository }}/issues/2206))
+- Reduce the whitespace in the favicon. ([#2213]({{ site.repository }}/issues/2213))
+- Add `jekyll-page-collections` to list of third-party plugins ([#2215]({{ site.repository }}/issues/2215))
+- Add a cross-reference about `post_url` ([#2243]({{ site.repository }}/issues/2243))
+- Add `jekyll-live-tiles` to list of third-party plugins ([#2250]({{ site.repository }}/issues/2250))
+- Fixed broken link to GitHub training material site source ([#2257]({{ site.repository }}/issues/2257))
+- Update link to help repo, now called `jekyll-help` ([#2277]({{ site.repository }}/issues/2277))
+- Fix capitalization of 'Jekyll' on Deployment Methods page ([#2291]({{ site.repository }}/issues/2291))
+- Include plugins by sonnym in list of third-party plugins ([#2297]({{ site.repository }}/issues/2297))
+- Add deprecated articles keeper filter to list of third-party plugins ([#2300]({{ site.repository }}/issues/2300))
+- Simplify and improve our CSS. ([#2127]({{ site.repository }}/issues/2127))
+- Use black text color for the mobile navbar ([#2306]({{ site.repository }}/issues/2306))
+- Use the built in date filter and `site.time` for the copyright year. ([#2305]({{ site.repository }}/issues/2305))
+- Update html5shiv to v3.7.2 ([#2304]({{ site.repository }}/issues/2304))
+- Add 2.0.0 release post ([#2298]({{ site.repository }}/issues/2298))
+- Add docs for custom markdown processors ([#2298]({{ site.repository }}/issues/2298))
+- Add docs for `where` and `group_by` Liquid filters ([#2298]({{ site.repository }}/issues/2298))
+- Remove notes in docs for unreleased features ([#2309]({{ site.repository }}/issues/2309))
+
+
+## 1.5.1 / 2014-03-27
+{: #v1-5-1}
+
+### Bug Fixes
+{: #bug-fixes-v1-5-1}
+
+- Only strip the drive name if it begins the string ([#2176]({{ site.repository }}/issues/2176))
+
+
 ## 1.5.0 / 2014-03-24
+{: #v1-5-0}
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-5-0}
 
 - Loosen `safe_yaml` dependency to `~> 1.0` ([#2167]({{ site.repository }}/issues/2167))
 - Bump `safe_yaml` dependency to `~> 1.0.0` ([#1942]({{ site.repository }}/issues/1942))
 
 ### Bug Fixes
+{: #bug-fixes-v1-5-0}
 
 - Fix issue where filesystem traversal restriction broke Windows ([#2167]({{ site.repository }}/issues/2167))
 - Lock `maruku` at `0.7.0` ([#2167]({{ site.repository }}/issues/2167))
 
 ### Development Fixes
+{: #development-fixes-v1-5-0}
+
+- Lock `cucumber` at `1.3.11` ([#2167]({{ site.repository }}/issues/2167))
 
-- Lock `cucmber` at `1.3.11` ([#2167]({{ site.repository }}/issues/2167))
 
 ## 1.4.3 / 2014-01-13
+{: #v1-4-3}
 
 ### Bug Fixes
-
+{: #bug-fixes-v1-4-3}
 - Patch show-stopping security vulnerabilities ([#1944]({{ site.repository }}/issues/1944))
 
+
 ## 1.4.2 / 2013-12-16
+{: #v1-4-2}
 
 ### Bug Fixes
+{: #bug-fixes-v1-4-2}
 - Turn on Maruku fenced code blocks by default ([#1830]({{ site.repository }}/issues/1830))
 
+
 ## 1.4.1 / 2013-12-09
+{: #v1-4-1}
 
 ### Bug Fixes
+{: #bug-fixes-v1-4-1}
 - Don't allow nil entries when loading posts ([#1796]({{ site.repository }}/issues/1796))
 
+
 ## 1.4.0 / 2013-12-07
+{: #v1-4-0}
 
 ### Major Enhancements
+{: #major-enhancements-v1-4-0}
 - Add support for TOML config files ([#1765]({{ site.repository }}/issues/1765))
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-4-0}
 - Sort plugins as a way to establish a load order ([#1682]({{ site.repository }}/issues/1682))
 - Update Maruku to 0.7.0 ([#1775]({{ site.repository }}/issues/1775))
 
 ### Bug Fixes
+{: #bug-fixes-v1-4-0}
 - Add a space between two words in a Pagination warning message ([#1769]({{ site.repository }}/issues/1769))
 - Upgrade `toml` gem to `v0.1.0` to maintain compat with Ruby 1.8.7 ([#1778]({{ site.repository }}/issues/1778))
 
 ### Development Fixes
+{: #development-fixes-v1-4-0}
 - Remove some whitespace in the code ([#1755]({{ site.repository }}/issues/1755))
 - Remove some duplication in the reading of posts and drafts ([#1779]({{ site.repository }}/issues/1779))
 
 ### Site Enhancements
+{: #site-enhancements-v1-4-0}
 - Fixed case of a word in the Jekyll v1.3.0 release post ([#1762]({{ site.repository }}/issues/1762))
 - Fixed the mime type for the favicon ([#1772]({{ site.repository }}/issues/1772))
 
+
 ## 1.3.1 / 2013-11-26
+{: #v1-3-1}
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-3-1}
 - Add a `--prefix` option to passthrough for the importers ([#1669]({{ site.repository }}/issues/1669))
 - Push the paginator plugin lower in the plugin priority order so
     other plugins run before it ([#1759]({{ site.repository }}/issues/1759))
 
 ### Bug Fixes
+{: #bug-fixes-v1-3-1}
 - Fix the include tag when ran in a loop ([#1726]({{ site.repository }}/issues/1726))
 - Fix errors when using `--watch` on 1.8.7 ([#1730]({{ site.repository }}/issues/1730))
 - Specify where the include is called from if an included file is
     missing ([#1746]({{ site.repository }}/issues/1746))
 
 ### Development Fixes
+{: #development-fixes-v1-3-1}
 - Extract `Site#filter_entries` into its own object ([#1697]({{ site.repository }}/issues/1697))
 - Enable Travis' bundle caching ([#1734]({{ site.repository }}/issues/1734))
 - Remove trailing whitespace in some files ([#1736]({{ site.repository }}/issues/1736))
 - Fix a duplicate test name ([#1754]({{ site.repository }}/issues/1754))
 
 ### Site Enhancements
+{: #site-enhancements-v1-3-1}
 - Update link to example Rakefile to point to specific commit ([#1741]({{ site.repository }}/issues/1741))
 - Fix drafts docs to indicate that draft time is based on file modification
     time, not `Time.now` ([#1695]({{ site.repository }}/issues/1695))
@@ -91,15 +563,19 @@ prev_section: contributing
 - Add docs for `post_url` when posts are in subdirectories ([#1718]({{ site.repository }}/issues/1718))
 - Update the docs to point to `example.com` ([#1448]({{ site.repository }}/issues/1448))
 
+
 ## 1.3.0 / 2013-11-04
+{: #v1-3-0}
 
 ### Major Enhancements
+{: #major-enhancements-v1-3-0}
 - Add support for adding data as YAML files under a site's `_data`
     directory ([#1003]({{ site.repository }}/issues/1003))
 - Allow variables to be used with `include` tags ([#1495]({{ site.repository }}/issues/1495))
 - Allow using gems for plugin management ([#1557]({{ site.repository }}/issues/1557))
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-3-0}
 - Decrease the specificity in the site template CSS ([#1574]({{ site.repository }}/issues/1574))
 - Add `encoding` configuration option ([#1449]({{ site.repository }}/issues/1449))
 - Provide better error handling for Jekyll's custom Liquid tags
@@ -117,6 +593,7 @@ prev_section: contributing
     missing ([#1662]({{ site.repository }}/issues/1662))
 
 ### Bug Fixes
+{: #bug-fixes-v1-3-0}
 - Fix up matching against source and destination when the two
     locations are similar ([#1556]({{ site.repository }}/issues/1556))
 - Fix the missing `pathname` require in certain cases ([#1255]({{ site.repository }}/issues/1255))
@@ -132,6 +609,7 @@ prev_section: contributing
     incompatibilities ([#1687]({{ site.repository }}/issues/1687))
 
 ### Development Fixes
+{: #development-fixes-v1-3-0}
 - Add coverage reporting with Coveralls ([#1539]({{ site.repository }}/issues/1539))
 - Refactor the Liquid `include` tag ([#1490]({{ site.repository }}/issues/1490))
 - Update launchy dependency to `~> 2.3` ([#1608]({{ site.repository }}/issues/1608))
@@ -144,10 +622,11 @@ prev_section: contributing
 - Refactor Site#render ([#1638]({{ site.repository }}/issues/1638))
 - Remove duplication in command line options ([#1637]({{ site.repository }}/issues/1637))
 - Add tests for all the coderay options ([#1543]({{ site.repository }}/issues/1543))
-- Improve some of the cucumber test code ([#1493]({{ site.repository }}/issues/1493))
+- Improve some of the Cucumber test code ([#1493]({{ site.repository }}/issues/1493))
 - Improve comparisons of timestamps by ignoring the seconds ([#1582]({{ site.repository }}/issues/1582))
 
 ### Site Enhancements
+{: #site-enhancements-v1-3-0}
 - Fix params for `JekyllImport::WordPress.process` arguments ([#1554]({{ site.repository }}/issues/1554))
 - Add `jekyll-suggested-tweet` to list of third-party plugins ([#1555]({{ site.repository }}/issues/1555))
 - Link to Liquid's docs for tags and filters ([#1553]({{ site.repository }}/issues/1553))
@@ -165,37 +644,47 @@ prev_section: contributing
 - Fix navigation in the "Working with Drafts" page ([#1667]({{ site.repository }}/issues/1667))
 - Fix an error with the data documentation ([#1691]({{ site.repository }}/issues/1691))
 
+
 ## 1.2.1 / 2013-09-14
+{: #v1-2-1}
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-2-1}
 - Print better messages for detached server. Mute output on detach. ([#1518]({{ site.repository }}/issues/1518))
 - Disable reverse lookup when running `jekyll serve` ([#1363]({{ site.repository }}/issues/1363))
 - Upgrade RedCarpet dependency to `~> 2.3.0` ([#1515]({{ site.repository }}/issues/1515))
 - Upgrade to Liquid `>= 2.5.2, < 2.6` ([#1536]({{ site.repository }}/issues/1536))
 
 ### Bug Fixes
+{: #bug-fixes-v1-2-1}
 - Fix file discrepancy in gemspec ([#1522]({{ site.repository }}/issues/1522))
 - Force rendering of Include tag ([#1525]({{ site.repository }}/issues/1525))
 
 ### Development Fixes
+{: #development-fixes-v1-2-1}
 - Add a rake task to generate a new release post ([#1404]({{ site.repository }}/issues/1404))
 - Mute LSI output in tests ([#1531]({{ site.repository }}/issues/1531))
 - Update contributor documentation ([#1537]({{ site.repository }}/issues/1537))
 
 ### Site Enhancements
+{: #site-enhancements-v1-2-1}
 - Fix a couple of validation errors on the site ([#1511]({{ site.repository }}/issues/1511))
 - Make navigation menus reusable ([#1507]({{ site.repository }}/issues/1507))
 - Fix link to History page from Release v1.2.0 notes post.
 - Fix markup in History file for command line options ([#1512]({{ site.repository }}/issues/1512))
 - Expand 1.2 release post title to 1.2.0 ([#1516]({{ site.repository }}/issues/1516))
 
+
 ## 1.2.0 / 2013-09-06
+{: #v1-2-0}
 
 ### Major Enhancements
+{: #major-enhancements-v1-2-0}
 - Disable automatically-generated excerpts when `excerpt_separator` is `""`. ([#1386]({{ site.repository }}/issues/1386))
 - Add checking for URL conflicts when running `jekyll doctor` ([#1389]({{ site.repository }}/issues/1389))
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-2-0}
 - Catch and fix invalid `paginate` values ([#1390]({{ site.repository }}/issues/1390))
 - Remove superfluous `div.container` from the default html template for
     `jekyll new` ([#1315]({{ site.repository }}/issues/1315))
@@ -211,6 +700,7 @@ prev_section: contributing
     `jekyll.version` variable ([#1481]({{ site.repository }}/issues/1481))
 
 ### Bug Fixes
+{: #bug-fixes-v1-2-0}
 - Markdown extension matching matches only exact matches ([#1382]({{ site.repository }}/issues/1382))
 - Fixed NoMethodError when message passed to `Stevenson#message` is nil ([#1388]({{ site.repository }}/issues/1388))
 - Use binary mode when writing file ([#1364]({{ site.repository }}/issues/1364))
@@ -226,6 +716,7 @@ prev_section: contributing
     tag ([#1494]({{ site.repository }}/issues/1494))
 
 ### Development Fixes
+{: #development-fixes-v1-2-0}
 - Remove redundant argument to
     Jekyll::Commands::New#scaffold_post_content ([#1356]({{ site.repository }}/issues/1356))
 - Add new dependencies to the README ([#1360]({{ site.repository }}/issues/1360))
@@ -237,6 +728,7 @@ prev_section: contributing
 - Add Gem version and dependency badge to README ([#1497]({{ site.repository }}/issues/1497))
 
 ### Site Enhancements
+{: #site-enhancements-v1-2-0}
 - Add info about new releases ([#1353]({{ site.repository }}/issues/1353))
 - Update plugin list with jekyll-rss plugin ([#1354]({{ site.repository }}/issues/1354))
 - Update the site list page with Ruby's official site ([#1358]({{ site.repository }}/issues/1358))
@@ -258,21 +750,29 @@ prev_section: contributing
 - XML escape the blog post title in our feed ([#1501]({{ site.repository }}/issues/1501))
 - Add `jekyll-toc-generator` to list of third-party plugins ([#1506]({{ site.repository }}/issues/1506))
 
+
 ## 1.1.2 / 2013-07-25
+{: #v1-1-2}
 
 ### Bug Fixes
+{: #bug-fixes-v1-1-2}
 - Require Liquid 2.5.1 ([#1349]({{ site.repository }}/issues/1349))
 
+
 ## 1.1.1 / 2013-07-24
+{: #v1-1-1}
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-1-1}
 - Remove superfluous `table` selector from main.css in `jekyll new` template ([#1328]({{ site.repository }}/issues/1328))
 - Abort with non-zero exit codes ([#1338]({{ site.repository }}/issues/1338))
 
 ### Bug Fixes
+{: #bug-fixes-v1-1-1}
 - Fix up the rendering of excerpts ([#1339]({{ site.repository }}/issues/1339))
 
 ### Site Enhancements
+{: #site-enhancements-v1-1-1}
 - Add Jekyll Image Tag to the plugins list ([#1306]({{ site.repository }}/issues/1306))
 - Remove erroneous statement that `site.pages` are sorted alphabetically.
 - Add info about the `_drafts` directory to the directory structure
@@ -286,14 +786,18 @@ prev_section: contributing
     will automatically convert them. ([#1303]({{ site.repository }}/issues/1303))
 - Add an RSS feed for commits to Jekyll ([#1343]({{ site.repository }}/issues/1343))
 
+
 ## 1.1.0 / 2013-07-14
+{: #v1-1-0}
 
 ### Major Enhancements
+{: #major-enhancements-v1-1-0}
 - Add `docs` subcommand to read Jekyll's docs when offline. ([#1046]({{ site.repository }}/issues/1046))
 - Support passing parameters to templates in `include` tag ([#1204]({{ site.repository }}/issues/1204))
 - Add support for Liquid tags to post excerpts ([#1302]({{ site.repository }}/issues/1302))
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-1-0}
 - Search the hierarchy of pagination path up to site root to determine template page for
     pagination. ([#1198]({{ site.repository }}/issues/1198))
 - Add the ability to generate a new Jekyll site without a template ([#1171]({{ site.repository }}/issues/1171))
@@ -307,6 +811,7 @@ prev_section: contributing
 - Allow for all options for Kramdown HTML Converter ([#1201]({{ site.repository }}/issues/1201))
 
 ### Bug Fixes
+{: #bug-fixes-v1-1-0}
 - Fix pagination in subdirectories. ([#1198]({{ site.repository }}/issues/1198))
 - Fix an issue with directories and permalinks that have a plus sign
     (+) in them ([#1215]({{ site.repository }}/issues/1215))
@@ -314,13 +819,15 @@ prev_section: contributing
 - Latest posts first in non-LSI `related_posts` ([#1271]({{ site.repository }}/issues/1271))
 
 ### Development Fixes
-- Merge the theme and layout cucumber steps into one step ([#1151]({{ site.repository }}/issues/1151))
+{: #development-fixes-v1-1-0}
+- Merge the theme and layout Cucumber steps into one step ([#1151]({{ site.repository }}/issues/1151))
 - Restrict activesupport dependency to pre-4.0.0 to maintain compatibility with `<= 1.9.2`
 - Include/exclude deprecation handling simplification ([#1284]({{ site.repository }}/issues/1284))
 - Convert README to Markdown. ([#1267]({{ site.repository }}/issues/1267))
 - Refactor Jekyll::Site ([#1144]({{ site.repository }}/issues/1144))
 
 ### Site Enhancements
+{: #site-enhancements-v1-1-0}
 - Add "News" section for release notes, along with an RSS feed ([#1093]({{ site.repository }}/issues/1093), [#1285]({{ site.repository }}/issues/1285), [#1286]({{ site.repository }}/issues/1286))
 - Add "History" page.
 - Restructured docs sections to include "Meta" section.
@@ -344,7 +851,7 @@ prev_section: contributing
 - Update contributor information ([#1192]({{ site.repository }}/issues/1192))
 - Update URL of article about Blogger migration ([#1242]({{ site.repository }}/issues/1242))
 - Specify that RedCarpet is the default for new Jekyll sites on Quickstart page ([#1247]({{ site.repository }}/issues/1247))
-- Added site.pages to Variables page in docs ([#1251]({{ site.repository }}/issues/1251))
+- Added `site.pages` to Variables page in docs ([#1251]({{ site.repository }}/issues/1251))
 - Add Youku and Tudou Embed link on Plugins page. ([#1250]({{ site.repository }}/issues/1250))
 - Add note that `gist` tag supports private gists. ([#1248]({{ site.repository }}/issues/1248))
 - Add `jekyll-timeago` to list of third-party plugins. ([#1260]({{ site.repository }}/issues/1260))
@@ -358,17 +865,21 @@ prev_section: contributing
 - Add information about time zones to the documentation for a page's
     date ([#1304]({{ site.repository }}/issues/1304))
 
+
 ## 1.0.3 / 2013-06-07
+{: #v1-0-3}
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-0-3}
 - Add support to gist tag for private gists. ([#1189]({{ site.repository }}/issues/1189))
-- Fail loudly when MaRuKu errors out ([#1190]({{ site.repository }}/issues/1190))
+- Fail loudly when Maruku errors out ([#1190]({{ site.repository }}/issues/1190))
 - Move the building of related posts into their own class ([#1057]({{ site.repository }}/issues/1057))
 - Removed trailing spaces in several places throughout the code ([#1116]({{ site.repository }}/issues/1116))
 - Add a `--force` option to `jekyll new` ([#1115]({{ site.repository }}/issues/1115))
 - Convert IDs in the site template to classes ([#1170]({{ site.repository }}/issues/1170))
 
 ### Bug Fixes
+{: #bug-fixes-v1-0-3}
 - Fix typo in Stevenson constant "ERROR". ([#1166]({{ site.repository }}/issues/1166))
 - Rename Jekyll::Logger to Jekyll::Stevenson to fix inheritance issue ([#1106]({{ site.repository }}/issues/1106))
 - Exit with a non-zero exit code when dealing with a Liquid error ([#1121]({{ site.repository }}/issues/1121))
@@ -379,6 +890,7 @@ prev_section: contributing
     ([#1156]({{ site.repository }}/issues/1156))
 
 ### Site Enhancements
+{: #site-enhancements-v1-0-3}
 - Add a Pro Tip to docs about front matter variables being optional ([#1147]({{ site.repository }}/issues/1147))
 - Add changelog to site as History page in /docs/ ([#1065]({{ site.repository }}/issues/1065))
 - Add note to Upgrading page about new config options in 1.0.x ([#1146]({{ site.repository }}/issues/1146))
@@ -398,68 +910,85 @@ prev_section: contributing
 - Add the Jekyll Gallery Plugin to the plugin list ([#1143]({{ site.repository }}/issues/1143))
 
 ### Development Fixes
+{: #development-fixes-v1-0-3}
 - Use Jekyll.logger instead of Jekyll::Stevenson to log things ([#1149]({{ site.repository }}/issues/1149))
 - Fix pesky Cucumber infinite loop ([#1139]({{ site.repository }}/issues/1139))
 - Do not write posts with timezones in Cucumber tests ([#1124]({{ site.repository }}/issues/1124))
 - Use ISO formatted dates in Cucumber features ([#1150]({{ site.repository }}/issues/1150))
 
+
 ## 1.0.2 / 2013-05-12
+{: #v1-0-2}
 
 ### Major Enhancements
+{: #major-enhancements-v1-0-2}
 - Add `jekyll doctor` command to check site for any known compatibility problems ([#1081]({{ site.repository }}/issues/1081))
 - Backwards-compatibilize relative permalinks ([#1081]({{ site.repository }}/issues/1081))
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-0-2}
 - Add a `data-lang="<lang>"` attribute to Redcarpet code blocks ([#1066]({{ site.repository }}/issues/1066))
 - Deprecate old config `server_port`, match to `port` if `port` isn't set ([#1084]({{ site.repository }}/issues/1084))
 - Update pygments.rb version to 0.5.0 ([#1061]({{ site.repository }}/issues/1061))
 - Update Kramdown version to 1.0.2 ([#1067]({{ site.repository }}/issues/1067))
 
 ### Bug Fixes
+{: #bug-fixes-v1-0-2}
 - Fix issue when categories are numbers ([#1078]({{ site.repository }}/issues/1078))
 - Catching that Redcarpet gem isn't installed ([#1059]({{ site.repository }}/issues/1059))
 
 ### Site Enhancements
+{: #site-enhancements-v1-0-2}
 - Add documentation about `relative_permalinks` ([#1081]({{ site.repository }}/issues/1081))
 - Remove pygments-installation instructions, as pygments.rb is bundled with it ([#1079]({{ site.repository }}/issues/1079))
 - Move pages to be Pages for realz ([#985]({{ site.repository }}/issues/985))
 - Updated links to Liquid documentation ([#1073]({{ site.repository }}/issues/1073))
 
+
 ## 1.0.1 / 2013-05-08
+{: #v1-0-1}
 
 ### Minor Enhancements
-- Do not force use of toc_token when using generate_tok in RDiscount ([#1048]({{ site.repository }}/issues/1048))
+{: #minor-enhancements-v1-0-1}
+- Do not force use of `toc_token` when using `generate_tok` in RDiscount ([#1048]({{ site.repository }}/issues/1048))
 - Add newer `language-` class name prefix to code blocks ([#1037]({{ site.repository }}/issues/1037))
 - Commander error message now preferred over process abort with incorrect args ([#1040]({{ site.repository }}/issues/1040))
 
 ### Bug Fixes
+{: #bug-fixes-v1-0-1}
 - Make Redcarpet respect the pygments configuration option ([#1053]({{ site.repository }}/issues/1053))
 - Fix the index build with LSI ([#1045]({{ site.repository }}/issues/1045))
 - Don't print deprecation warning when no arguments are specified. ([#1041]({{ site.repository }}/issues/1041))
 - Add missing `</div>` to site template used by `new` subcommand, fixed typos in code ([#1032]({{ site.repository }}/issues/1032))
 
 ### Site Enhancements
+{: #site-enhancements-v1-0-1}
 - Changed https to http in the GitHub Pages link ([#1051]({{ site.repository }}/issues/1051))
 - Remove CSS cruft, fix typos, fix HTML errors ([#1028]({{ site.repository }}/issues/1028))
 - Removing manual install of Pip and Distribute ([#1025]({{ site.repository }}/issues/1025))
 - Updated URL for Markdown references plugin ([#1022]({{ site.repository }}/issues/1022))
 
 ### Development Fixes
+{: #development-fixes-v1-0-1}
 - Markdownify history file ([#1027]({{ site.repository }}/issues/1027))
 - Update links on README to point to new jekyllrb.com ([#1018]({{ site.repository }}/issues/1018))
 
+
 ## 1.0.0 / 2013-05-06
+{: #v1-0-0}
 
 ### Major Enhancements
-- Add `jekyll new` subcommand: generate a jekyll scaffold ([#764]({{ site.repository }}/issues/764))
-- Refactored jekyll commands into subcommands: build, serve, and migrate. ([#690]({{ site.repository }}/issues/690))
+{: #major-enhancements-v1-0-0}
+- Add `jekyll new` subcommand: generate a Jekyll scaffold ([#764]({{ site.repository }}/issues/764))
+- Refactored Jekyll commands into subcommands: build, serve, and migrate. ([#690]({{ site.repository }}/issues/690))
 - Removed importers/migrators from main project, migrated to jekyll-import sub-gem ([#793]({{ site.repository }}/issues/793))
 - Added ability to render drafts in `_drafts` folder via command line ([#833]({{ site.repository }}/issues/833))
 - Add ordinal date permalink style (/:categories/:year/:y_day/:title.html) ([#928]({{ site.repository }}/issues/928))
 
 ### Minor Enhancements
+{: #minor-enhancements-v1-0-0}
 - Site template HTML5-ified ([#964]({{ site.repository }}/issues/964))
-- Use post's directory path when matching for the post_url tag ([#998]({{ site.repository }}/issues/998))
+- Use post's directory path when matching for the `post_url` tag ([#998]({{ site.repository }}/issues/998))
 - Loosen dependency on Pygments so it's only required when it's needed ([#1015]({{ site.repository }}/issues/1015))
 - Parse strings into Time objects for date-related Liquid filters ([#1014]({{ site.repository }}/issues/1014))
 - Tell the user if there is no subcommand specified ([#1008]({{ site.repository }}/issues/1008))
@@ -473,7 +1002,7 @@ prev_section: contributing
 - Expose new attribute to Liquid via `page`: `page.path` ([#951]({{ site.repository }}/issues/951))
 - Accept multiple config files from command line ([#945]({{ site.repository }}/issues/945))
 - Add page variable to liquid custom tags and blocks ([#413]({{ site.repository }}/issues/413))
-- Add paginator.previous_page_path and paginator.next_page_path ([#942]({{ site.repository }}/issues/942))
+- Add `paginator.previous_page_path` and `paginator.next_page_path` ([#942]({{ site.repository }}/issues/942))
 - Backwards compatibility for 'auto' ([#821]({{ site.repository }}/issues/821), [#934]({{ site.repository }}/issues/934))
 - Added date_to_rfc822 used on RSS feeds ([#892]({{ site.repository }}/issues/892))
 - Upgrade version of pygments.rb to 0.4.2 ([#927]({{ site.repository }}/issues/927))
@@ -492,7 +1021,7 @@ prev_section: contributing
 - Relaxed Kramdown version to 0.14 ([#808]({{ site.repository }}/issues/808))
 - Aliased `jekyll server` to `jekyll serve`. ([#792]({{ site.repository }}/issues/792))
 - Updated gem versions for Kramdown, Rake, Shoulda, Cucumber, and RedCarpet. ([#744]({{ site.repository }}/issues/744))
-- Refactored jekyll subcommands into Jekyll::Commands submodule, which now contains them ([#768]({{ site.repository }}/issues/768))
+- Refactored Jekyll subcommands into Jekyll::Commands submodule, which now contains them ([#768]({{ site.repository }}/issues/768))
 - Rescue from import errors in Wordpress.com migrator ([#671]({{ site.repository }}/issues/671))
 - Massively accelerate LSI performance ([#664]({{ site.repository }}/issues/664))
 - Truncate post slugs when importing from Tumblr ([#496]({{ site.repository }}/issues/496))
@@ -507,7 +1036,7 @@ prev_section: contributing
 - Paginate in subdirectories properly ([#1016]({{ site.repository }}/issues/1016))
 - Ensure post and page URLs have a leading slash ([#992]({{ site.repository }}/issues/992))
 - Catch all exceptions, not just StandardError descendents ([#1007]({{ site.repository }}/issues/1007))
-- Bullet-proof limit_posts option ([#1004]({{ site.repository }}/issues/1004))
+- Bullet-proof `limit_posts` option ([#1004]({{ site.repository }}/issues/1004))
 - Read in YAML as UTF-8 to accept non-ASCII chars ([#836]({{ site.repository }}/issues/836))
 - Fix the CLI option `--plugins` to actually accept dirs and files ([#993]({{ site.repository }}/issues/993))
 - Allow 'excerpt' in YAML Front-Matter to override the extracted excerpt ([#946]({{ site.repository }}/issues/946))
@@ -519,10 +1048,10 @@ prev_section: contributing
 - Force usage of older directory_watcher gem as 1.5 is broken ([#883]({{ site.repository }}/issues/883))
 - Ensure all Post categories are downcase ([#842]({{ site.repository }}/issues/842), [#872]({{ site.repository }}/issues/872))
 - Force encoding of the rdiscount TOC to UTF8 to avoid conversion errors ([#555]({{ site.repository }}/issues/555))
-- Patch for multibyte URI problem with jekyll serve ([#723]({{ site.repository }}/issues/723))
+- Patch for multibyte URI problem with `jekyll serve` ([#723]({{ site.repository }}/issues/723))
 - Order plugin execution by priority ([#864]({{ site.repository }}/issues/864))
 - Fixed Page#dir and Page#url for edge cases ([#536]({{ site.repository }}/issues/536))
-- Fix broken post_url with posts with a time in their YAML Front-Matter ([#831]({{ site.repository }}/issues/831))
+- Fix broken `post_url` with posts with a time in their YAML Front-Matter ([#831]({{ site.repository }}/issues/831))
 - Look for plugins under the source directory ([#654]({{ site.repository }}/issues/654))
 - Tumblr Migrator: finds `_posts` dir correctly, fixes truncation of long
       post names ([#775]({{ site.repository }}/issues/775))
@@ -532,6 +1061,7 @@ prev_section: contributing
 - Prevent custom destination from causing continuous regen on watch ([#528]({{ site.repository }}/issues/528), [#820]({{ site.repository }}/issues/820), [#862]({{ site.repository }}/issues/862))
 
 ### Site Enhancements
+{: #site-enhancements-v1-0-0}
 - Responsify ([#860]({{ site.repository }}/issues/860))
 - Fix spelling, punctuation and phrasal errors ([#989]({{ site.repository }}/issues/989))
 - Update quickstart instructions with `new` command ([#966]({{ site.repository }}/issues/966))
@@ -542,9 +1072,10 @@ prev_section: contributing
 - Redesigned site ([#583]({{ site.repository }}/issues/583))
 
 ### Development Fixes
+{: #development-fixes-v1-0-0}
 - Exclude Cucumber 1.2.4, which causes tests to fail in 1.9.2 ([#938]({{ site.repository }}/issues/938))
 - Added "features:html" rake task for debugging purposes, cleaned up
-      cucumber profiles ([#832]({{ site.repository }}/issues/832))
+      Cucumber profiles ([#832]({{ site.repository }}/issues/832))
 - Explicitly require HTTPS rubygems source in Gemfile ([#826]({{ site.repository }}/issues/826))
 - Changed Ruby version for development to 1.9.3-p374 from p362 ([#801]({{ site.repository }}/issues/801))
 - Including a link to the GitHub Ruby style guide in CONTRIBUTING.md ([#806]({{ site.repository }}/issues/806))
@@ -553,20 +1084,28 @@ prev_section: contributing
       of greater than 1.9 ([#771]({{ site.repository }}/issues/771))
 - Switch to Simplecov for coverage report ([#765]({{ site.repository }}/issues/765))
 
+
 ## 0.12.1 / 2013-02-19
+{: #v0-12-1}
+
 ### Minor Enhancements
+{: #minor-enhancements-v0-12-1}
 - Update Kramdown version to 0.14.1 ([#744]({{ site.repository }}/issues/744))
 - Test Enhancements
 - Update Rake version to 10.0.3 ([#744]({{ site.repository }}/issues/744))
 - Update Shoulda version to 3.3.2 ([#744]({{ site.repository }}/issues/744))
 - Update Redcarpet version to 2.2.2 ([#744]({{ site.repository }}/issues/744))
 
+
 ## 0.12.0 / 2012-12-22
+{: #v0-12-0}
+
 ### Minor Enhancements
+{: #minor-enhancements-v0-12-0}
 - Add ability to explicitly specify included files ([#261]({{ site.repository }}/issues/261))
-- Add --default-mimetype option ([#279]({{ site.repository }}/issues/279))
+- Add `--default-mimetype` option ([#279]({{ site.repository }}/issues/279))
 - Allow setting of RedCloth options ([#284]({{ site.repository }}/issues/284))
-- Add post_url Liquid tag for internal post linking ([#369]({{ site.repository }}/issues/369))
+- Add `post_url` Liquid tag for internal post linking ([#369]({{ site.repository }}/issues/369))
 - Allow multiple plugin dirs to be specified ([#438]({{ site.repository }}/issues/438))
 - Inline TOC token support for RDiscount ([#333]({{ site.repository }}/issues/333))
 - Add the option to specify the paginated url format ([#342]({{ site.repository }}/issues/342))
@@ -576,28 +1115,37 @@ prev_section: contributing
 - Bug Fixes
 - Allow some special characters in highlight names
 - URL escape category names in URL generation ([#360]({{ site.repository }}/issues/360))
-- Fix error with limit_posts ([#442]({{ site.repository }}/issues/442))
+- Fix error with `limit_posts` ([#442]({{ site.repository }}/issues/442))
 - Properly select dotfile during directory scan ([#363]({{ site.repository }}/issues/363), [#431]({{ site.repository }}/issues/431), [#377]({{ site.repository }}/issues/377))
-- Allow setting of Kramdown smart_quotes ([#482]({{ site.repository }}/issues/482))
+- Allow setting of Kramdown `smart_quotes` ([#482]({{ site.repository }}/issues/482))
 - Ensure front-matter is at start of file ([#562]({{ site.repository }}/issues/562))
 
+
 ## 0.11.2 / 2011-12-27
+{: #v0-11-2}
 - Bug Fixes
 - Fix gemspec
 
+
 ## 0.11.1 / 2011-12-27
+{: #v0-11-1}
 - Bug Fixes
 - Fix extra blank line in highlight blocks ([#409]({{ site.repository }}/issues/409))
 - Update dependencies
 
+
 ## 0.11.0 / 2011-07-10
+{: #v0-11-0}
+
 ### Major Enhancements
+{: #major-enhancements-v0-11-0}
 - Add command line importer functionality ([#253]({{ site.repository }}/issues/253))
 - Add Redcarpet Markdown support ([#318]({{ site.repository }}/issues/318))
 - Make markdown/textile extensions configurable ([#312]({{ site.repository }}/issues/312))
 - Add `markdownify` filter
 
 ### Minor Enhancements
+{: #minor-enhancements-v0-11-0}
 - Switch to Albino gem
 - Bundler support
 - Use English library to avoid hoops ([#292]({{ site.repository }}/issues/292))
@@ -610,24 +1158,34 @@ prev_section: contributing
 - Bug Fixes
 - Secure additional path exploits
 
+
 ## 0.10.0 / 2010-12-16
+{: #v0-10-0}
 - Bug Fixes
-- Add --no-server option.
+- Add `--no-server` option.
+
 
 ## 0.9.0 / 2010-12-15
+{: #v0-9-0}
+
 ### Minor Enhancements
+{: #minor-enhancements-v0-9-0}
 - Use OptionParser's `[no-]` functionality for better boolean parsing.
 - Add Drupal migrator ([#245]({{ site.repository }}/issues/245))
 - Complain about YAML and Liquid errors ([#249]({{ site.repository }}/issues/249))
 - Remove orphaned files during regeneration ([#247]({{ site.repository }}/issues/247))
 - Add Marley migrator ([#28]({{ site.repository }}/issues/28))
 
+
 ## 0.8.0 / 2010-11-22
+{: #v0-8-0}
+
 ### Minor Enhancements
+{: #minor-enhancements-v0-8-0}
 - Add wordpress.com importer ([#207]({{ site.repository }}/issues/207))
-- Add --limit-posts cli option ([#212]({{ site.repository }}/issues/212))
-- Add uri_escape filter ([#234]({{ site.repository }}/issues/234))
-- Add --base-url cli option ([#235]({{ site.repository }}/issues/235))
+- Add `--limit-posts` cli option ([#212]({{ site.repository }}/issues/212))
+- Add `uri_escape` filter ([#234]({{ site.repository }}/issues/234))
+- Add `--base-url` cli option ([#235]({{ site.repository }}/issues/235))
 - Improve MT migrator ([#238]({{ site.repository }}/issues/238))
 - Add kramdown support ([#239]({{ site.repository }}/issues/239))
 - Bug Fixes
@@ -635,26 +1193,38 @@ prev_section: contributing
 - Set mode to UTF8 on Sequel connections ([#237]({{ site.repository }}/issues/237))
 - Prevent `_includes` dir from being a symlink
 
+
 ## 0.7.0 / 2010-08-24
+{: #v0-7-0}
+
 ### Minor Enhancements
+{: #minor-enhancements-v0-7-0}
 - Add support for rdiscount extensions ([#173]({{ site.repository }}/issues/173))
 - Bug Fixes
 - Highlight should not be able to render local files
 - The site configuration may not always provide a 'time' setting ([#184]({{ site.repository }}/issues/184))
 
+
 ## 0.6.2 / 2010-06-25
+{: #v0-6-2}
 - Bug Fixes
 - Fix Rakefile 'release' task (tag pushing was missing origin)
 - Ensure that RedCloth is loaded when textilize filter is used ([#183]({{ site.repository }}/issues/183))
 - Expand source, destination, and plugin paths ([#180]({{ site.repository }}/issues/180))
-- Fix page.url to include full relative path ([#181]({{ site.repository }}/issues/181))
+- Fix `page.url` to include full relative path ([#181]({{ site.repository }}/issues/181))
+
 
 ## 0.6.1 / 2010-06-24
+{: #v0-6-1}
 - Bug Fixes
 - Fix Markdown Pygments prefix and suffix ([#178]({{ site.repository }}/issues/178))
 
+
 ## 0.6.0 / 2010-06-23
+{: #v0-6-0}
+
 ### Major Enhancements
+{: #major-enhancements-v0-6-0}
 - Proper plugin system ([#19]({{ site.repository }}/issues/19), [#100]({{ site.repository }}/issues/100))
 - Add safe mode so unsafe converters/generators can be added
 - Maruku is now the only processor dependency installed by default.
@@ -662,11 +1232,12 @@ prev_section: contributing
       user to install them when necessary) ([#57]({{ site.repository }}/issues/57))
 
 ### Minor Enhancements
+{: #minor-enhancements-v0-6-0}
 - Inclusion/exclusion of future dated posts ([#59]({{ site.repository }}/issues/59))
 - Generation for a specific time ([#59]({{ site.repository }}/issues/59))
-- Allocate site.time on render not per site_payload invocation ([#59]({{ site.repository }}/issues/59))
+- Allocate `site.time` on render not per site_payload invocation ([#59]({{ site.repository }}/issues/59))
 - Pages now present in the site payload and can be used through the
-      site.pages and site.html_pages variables
+      `site.pages` and `site.html_pages` variables
 - Generate phase added to site#process and pagination is now a generator
 - Switch to RakeGem for build/test process
 - Only regenerate static files when they have changed ([#142]({{ site.repository }}/issues/142))
@@ -678,49 +1249,65 @@ prev_section: contributing
 - Fix extension munging when pretty permalinks are enabled ([#64]({{ site.repository }}/issues/64))
 - Stop sorting categories ([#33]({{ site.repository }}/issues/33))
 - Preserve generated attributes over front matter ([#119]({{ site.repository }}/issues/119))
-- Fix source directory binding using Dir.pwd ([#75]({{ site.repository }}/issues/75))
+- Fix source directory binding using `Dir.pwd` ([#75]({{ site.repository }}/issues/75))
+
 
 ## 0.5.7 / 2010-01-12
+{: #v0-5-7}
+
 ### Minor Enhancements
+{: #minor-enhancements-v0-5-7}
 - Allow overriding of post date in the front matter ([#62]({{ site.repository }}/issues/62), [#38]({{ site.repository }}/issues/38))
 - Bug Fixes
 - Categories isn't always an array ([#73]({{ site.repository }}/issues/73))
 - Empty tags causes error in read_posts ([#84]({{ site.repository }}/issues/84))
 - Fix pagination to adhere to read/render/write paradigm
 - Test Enhancement
-- cucumber features no longer use site.posts.first where a better
+- Cucumber features no longer use site.posts.first where a better
       alternative is available
 
+
 ## 0.5.6 / 2010-01-08
+{: #v0-5-6}
 - Bug Fixes
 - Require redcloth >= 4.2.1 in tests ([#92]({{ site.repository }}/issues/92))
 - Don't break on triple dashes in yaml frontmatter ([#93]({{ site.repository }}/issues/93))
 
 ### Minor Enhancements
+{: #minor-enhancements-v0-5-6}
 - Allow .mkd as markdown extension
 - Use $stdout/err instead of constants ([#99]({{ site.repository }}/issues/99))
 - Properly wrap code blocks ([#91]({{ site.repository }}/issues/91))
 - Add javascript mime type for webrick ([#98]({{ site.repository }}/issues/98))
 
+
 ## 0.5.5 / 2010-01-08
+{: #v0-5-5}
 - Bug Fixes
 - Fix pagination % 0 bug ([#78]({{ site.repository }}/issues/78))
 - Ensure all posts are processed first ([#71]({{ site.repository }}/issues/71))
 
+
 ## NOTE
 - After this point I will no longer be giving credit in the history;
     that is what the commit log is for.
 
+
 ## 0.5.4 / 2009-08-23
+{: #v0-5-4}
 - Bug Fixes
 - Do not allow symlinks (security vulnerability)
 
+
 ## 0.5.3 / 2009-07-14
+{: #v0-5-3}
 - Bug Fixes
 - Solving the permalink bug where non-html files wouldn't work
       ([@jeffrydegrande](https://github.com/jeffrydegrande))
 
+
 ## 0.5.2 / 2009-06-24
+{: #v0-5-2}
 - Enhancements
 - Added --paginate option to the executable along with a paginator object
       for the payload ([@calavera](https://github.com/calavera))
@@ -729,9 +1316,9 @@ prev_section: contributing
 - Configuration options set in config.yml are now available through the
       site payload ([@vilcans](https://github.com/vilcans))
 - Posts can now have an empty YAML front matter or none at all
-      ([@bahuvrihi](https://github.com/bahuvrihi))
+      (@ bahuvrihi)
 - Bug Fixes
-- Fixing Ruby 1.9 issue that requires to_s on the err object
+- Fixing Ruby 1.9 issue that requires `#to_s` on the err object
       ([@Chrononaut](https://github.com/Chrononaut))
 - Fixes for pagination and ordering posts on the same day ([@ujh](https://github.com/ujh))
 - Made pages respect permalinks style and permalinks in yml front matter
@@ -741,12 +1328,16 @@ prev_section: contributing
 - Added trailing slash to pretty permalink style so Apache is happy
       ([@eugenebolshakov](https://github.com/eugenebolshakov))
 - Bad markdown processor in config fails sooner and with better message
-      ([@gcnovus](https://github.com/gcnovus))
+      (@ gcnovus)
 - Allow CRLFs in yaml frontmatter ([@juretta](https://github.com/juretta))
 - Added Date#xmlschema for Ruby versions < 1.9
 
+
 ## 0.5.1 / 2009-05-06
+{: #v0-5-1}
+
 ### Major Enhancements
+{: #major-enhancements-v0-5-1}
 - Next/previous posts in site payload ([@pantulis](https://github.com/pantulis), [@tomo](https://github.com/tomo))
 - Permalink templating system
 - Moved most of the README out to the GitHub wiki
@@ -759,8 +1350,12 @@ prev_section: contributing
       after highlight ([@henrik](https://github.com/henrik))
 - CGI escaped post titles ([@Chrononaut](https://github.com/Chrononaut))
 
+
 ## 0.5.0 / 2009-04-07
+{: #v0-5-0}
+
 ### Minor Enhancements
+{: #minor-enhancements-v0-5-0}
 - Ability to set post categories via YAML ([@qrush](https://github.com/qrush))
 - Ability to set prevent a post from publishing via YAML ([@qrush](https://github.com/qrush))
 - Add textilize filter ([@willcodeforfoo](https://github.com/willcodeforfoo))
@@ -777,19 +1372,27 @@ prev_section: contributing
 - Fix tests and convert to Shoulda ([@qrush](https://github.com/qrush), [@technicalpickles](https://github.com/technicalpickles))
 - Add Cucumber acceptance test suite ([@qrush](https://github.com/qrush), [@technicalpickles](https://github.com/technicalpickles))
 
+
 ## 0.4.1
+
 ### Minor Enhancements
+{: #minor-enhancements-v--}
 - Changed date format on wordpress converter (zeropadding) ([@dysinger](https://github.com/dysinger))
 - Bug Fixes
-- Add jekyll binary as executable to gemspec ([@dysinger](https://github.com/dysinger))
+- Add Jekyll binary as executable to gemspec ([@dysinger](https://github.com/dysinger))
+
 
 ## 0.4.0 / 2009-02-03
+{: #v0-4-0}
+
 ### Major Enhancements
+{: #major-enhancements-v0-4-0}
 - Switch to Jeweler for packaging tasks
 
 ### Minor Enhancements
+{: #minor-enhancements-v0-4-0}
 - Type importer ([@codeslinger](https://github.com/codeslinger))
-- site.topics accessor ([@baz](https://github.com/baz))
+- `site.topics` accessor ([@baz](https://github.com/baz))
 - Add `array_to_sentence_string` filter ([@mchung](https://github.com/mchung))
 - Add a converter for textpattern ([@PerfectlyNormal](https://github.com/PerfectlyNormal))
 - Add a working Mephisto / MySQL converter ([@ivey](https://github.com/ivey))
@@ -803,12 +1406,17 @@ prev_section: contributing
 - Test and fix the site.categories hash ([@zzot](https://github.com/zzot))
 - Fix site payload available to files ([@matrix9180](https://github.com/matrix9180))
 
+
 ## 0.3.0 / 2008-12-24
+{: #v0-3-0}
+
 ### Major Enhancements
-- Added --server option to start a simple WEBrick server on destination
+{: #major-enhancements-v0-3-0}
+- Added `--server` option to start a simple WEBrick server on destination
       directory ([@johnreilly](https://github.com/johnreilly) and [@mchung](https://github.com/mchung))
 
 ### Minor Enhancements
+{: #minor-enhancements-v0-3-0}
 - Added post categories based on directories containing `_posts` ([@mreid](https://github.com/mreid))
 - Added post topics based on directories underneath `_posts`
 - Added new date filter that shows the full month name ([@mreid](https://github.com/mreid))
@@ -821,62 +1429,86 @@ prev_section: contributing
       templates ([@mreid](https://github.com/mreid))
 - Properly reject directories in `_layouts`
 
+
 ## 0.2.1 / 2008-12-15
+{: #v0-2-1}
 - Major Changes
 - Use Maruku (pure Ruby) for Markdown by default ([@mreid](https://github.com/mreid))
-- Allow use of RDiscount with --rdiscount flag
+- Allow use of RDiscount with `--rdiscount` flag
 
 ### Minor Enhancements
+{: #minor-enhancements-v0-2-1}
 - Don't load directory_watcher unless it's needed ([@pjhyett](https://github.com/pjhyett))
 
+
 ## 0.2.0 / 2008-12-14
+{: #v0-2-0}
 - Major Changes
-- related_posts is now found in site.related_posts
+- related_posts is now found in `site.related_posts`
+
 
 ## 0.1.6 / 2008-12-13
+{: #v0-1-6}
 - Major Features
 - Include files in `_includes` with {% raw %}`{% include x.textile %}`{% endraw %}
 
+
 ## 0.1.5 / 2008-12-12
+{: #v0-1-5}
+
 ### Major Enhancements
-- Code highlighting with Pygments if --pygments is specified
-- Disable true LSI by default, enable with --lsi
+{: #major-enhancements-v0-1-5}
+- Code highlighting with Pygments if `--pygments` is specified
+- Disable true LSI by default, enable with `--lsi`
 
 ### Minor Enhancements
+{: #minor-enhancements-v0-1-5}
 - Output informative message if RDiscount is not available ([@JackDanger](https://github.com/JackDanger))
 - Bug Fixes
 - Prevent Jekyll from picking up the output directory as a source ([@JackDanger](https://github.com/JackDanger))
 - Skip `related_posts` when there is only one post ([@JackDanger](https://github.com/JackDanger))
 
+
 ## 0.1.4 / 2008-12-08
+{: #v0-1-4}
 - Bug Fixes
 - DATA does not work properly with rubygems
 
+
 ## 0.1.3 / 2008-12-06
+{: #v0-1-3}
 - Major Features
 - Markdown support ([@vanpelt](https://github.com/vanpelt))
 - Mephisto and CSV converters ([@vanpelt](https://github.com/vanpelt))
 - Code hilighting ([@vanpelt](https://github.com/vanpelt))
 - Autobuild
 - Bug Fixes
-- Accept both \r\n and \n in YAML header ([@vanpelt](https://github.com/vanpelt))
+- Accept both `\r\n` and `\n` in YAML header ([@vanpelt](https://github.com/vanpelt))
+
 
 ## 0.1.2 / 2008-11-22
+{: #v0-1-2}
 - Major Features
 - Add a real "related posts" implementation using Classifier
 - Command Line Changes
 - Allow cli to be called with 0, 1, or 2 args intuiting dir paths
       if they are omitted
 
+
 ## 0.1.1 / 2008-11-22
+{: #v0-1-1}
 - Minor Additions
 - Posts now support introspectional data e.g. {% raw %}`{{ page.url }}`{% endraw %}
 
+
 ## 0.1.0 / 2008-11-05
+{: #v0-1-0}
 - First release
 - Converts posts written in Textile
 - Converts regular site pages
 - Simple copy of binary files
 
+
 ## 0.0.0 / 2008-10-19
+{: #v0-0-0}
 - Birthday!
diff --git a/site/docs/index.md b/site/docs/index.md
index 021a712..46d0747 100644
--- a/site/docs/index.md
+++ b/site/docs/index.md
@@ -16,7 +16,7 @@ development of Jekyll itself.
 Jekyll is a simple, blog-aware, static site generator. It takes a template
 directory containing raw text files in various formats, runs it through
 [Markdown](http://daringfireball.net/projects/markdown/) (or
-[Textile](http://textile.sitemonks.com/)) and
+[Textile](http://redcloth.org/textile)) and
 [Liquid](http://wiki.shopify.com/Liquid)
 converters, and spits out a complete, ready-to-publish static website suitable
 for serving with your favorite web server. Jekyll also happens to be the engine
@@ -24,7 +24,7 @@ behind [GitHub Pages](http://pages.github.com), which means you can use Jekyll
 to host your project’s page, blog, or website from GitHub’s servers **for
 free**.
 
-## ProTips™, Notes, and Warnings
+## Helpful Hints
 
 Throughout this guide there are a number of small-but-handy pieces of
 information that can make using Jekyll easier, more interesting, and less
@@ -46,6 +46,12 @@ hazardous. Here’s what to look out for.
   <p>Be aware of these messages if you wish to avoid certain death.</p>
 </div>
 
+<div class="note unreleased">
+  <h5>You'll see this by a feature that hasn't been released</h5>
+  <p>Some pieces of this website are for future versions of Jekyll that
+    are not yet released.</p>
+</div>
+
 If you come across anything along the way that we haven’t covered, or if you
 know of a tip you think others would find handy, please [file an
 issue]({{ site.repository }}/issues/new) and we’ll see about
diff --git a/site/docs/installation.md b/site/docs/installation.md
index 8610443..1435fdc 100644
--- a/site/docs/installation.md
+++ b/site/docs/installation.md
@@ -19,21 +19,22 @@ you’ll need to make sure your system has before you start.
 - [Ruby](http://www.ruby-lang.org/en/downloads/)
 - [RubyGems](http://rubygems.org/pages/download)
 - Linux, Unix, or Mac OS X
+- [NodeJS](http://nodejs.org), or another JavaScript runtime (for
+  CoffeeScript support).
 
 <div class="note info">
   <h5>Running Jekyll on Windows</h5>
   <p>
-    It is possible to get
-    <a href="http://www.madhur.co.in/blog/2011/09/01/runningjekyllwindows.html">
-    Jekyll running on Windows</a>, but the official documentation does not
-    support installation on Windows platforms.
+    While Windows is not officially supported, it is possible to get it running
+    on Windows. Special instructions can be found on our
+    <a href="../windows/#installation">Windows-specific docs page</a>.
   </p>
 </div>
 
 ## Install with RubyGems
 
 The best way to install Jekyll is via
-[RubyGems](http://docs.rubygems.org/read/chapter/3). At the terminal prompt,
+[RubyGems](http://rubygems.org/pages/download). At the terminal prompt,
 simply run the following command to install Jekyll:
 
 {% highlight bash %}
@@ -56,6 +57,34 @@ community can improve the experience for everyone.
   </p>
 </div>
 
+## Pre-releases
+
+In order to install a pre-release, make sure you have all the requirements
+installed properly and run:
+
+{% highlight bash %}
+gem install jekyll --pre
+{% endhighlight %}
+
+This will install the latest pre-release. If you want a particular pre-release,
+use the `-v` switch to indicate the version you'd like to install:
+
+{% highlight bash %}
+gem install jekyll -v '2.0.0.alpha.1'
+{% endhighlight %}
+
+If you'd like to install a development version of Jekyll, the process is a bit
+more involved. This gives you the advantage of having the latest and greatest,
+but may be unstable.
+
+{% highlight bash %}
+$ git clone git://github.com/jekyll/jekyll.git
+$ cd jekyll
+$ script/bootstrap
+$ bundle exec rake build
+$ ls pkg/*.gem | head -n 1 | xargs gem install -l
+{% endhighlight %}
+
 ## Optional Extras
 
 There are a number of (optional) extra features that Jekyll supports that you
@@ -67,9 +96,10 @@ Check out [the extras page](../extras/) for more information.
   <h5>ProTip™: Enable Syntax Highlighting</h5>
   <p>
     If you’re the kind of person who is using Jekyll, then chances are you’ll
-    want to enable syntax highlighting using Pygments. You should really
-    <a href="../templates/#code_snippet_highlighting">check out how to do
-    that</a> before you go any further.
+    want to enable syntax highlighting using <a href="http://pygments.org/">Pygments</a>
+    or <a href="https://github.com/jayferd/rouge">Rouge</a>. You should really
+    <a href="../templates/#code-snippet-highlighting">check out how to
+    do that</a> before you go any farther.
   </p>
 </div>
 
diff --git a/site/docs/migrations.md b/site/docs/migrations.md
index 27ecf71..a080c6c 100644
--- a/site/docs/migrations.md
+++ b/site/docs/migrations.md
@@ -1,11 +1,11 @@
 ---
 layout: docs
 title: Blog migrations
-prev_section: datafiles
+prev_section: assets
 next_section: templates
 permalink: /docs/migrations/
 ---
 
 If you’re switching to Jekyll from another blogging system, Jekyll’s importers
 can help you with the move. To learn more about importing your site to Jekyll,
-visit our [`jekyll-import` docs site](http://import.jekyllrb.com).
+visit our [`jekyll-import` docs site](http://import.jekyllrb.com/docs/home/).
diff --git a/site/docs/pagination.md b/site/docs/pagination.md
index ccd8ba7..b0efad9 100644
--- a/site/docs/pagination.md
+++ b/site/docs/pagination.md
@@ -123,7 +123,8 @@ attributes:
   <p>Pagination pages through every post in the <code>posts</code>
   variable regardless of variables defined in the YAML Front Matter of
   each. It does not currently allow paging over groups of posts linked
-  by a common tag or category.</p>
+  by a common tag or category. It cannot include any collection of
+  documents because it is restricted to posts.</p>
 </div>
 
 ## Render the paginated Posts
diff --git a/site/docs/permalinks.md b/site/docs/permalinks.md
index c38ad94..7a69e95 100644
--- a/site/docs/permalinks.md
+++ b/site/docs/permalinks.md
@@ -69,6 +69,14 @@ permalink is defined as `/:categories/:year/:month/:day/:title.html`.
     </tr>
     <tr>
       <td>
+        <p><code>short_year</code></p>
+      </td>
+      <td>
+        <p>Year from the Post’s filename without the century.</p>
+      </td>
+    </tr>
+    <tr>
+      <td>
         <p><code>title</code></p>
       </td>
       <td>
@@ -138,7 +146,7 @@ Given a post named: `/2009-04-29-slap-chop.textile`
 <table>
   <thead>
     <tr>
-      <th>Permalink Setting</th>
+      <th>URL Template</th>
       <th>Resulting Permalink URL</th>
     </tr>
   </thead>
@@ -153,7 +161,7 @@ Given a post named: `/2009-04-29-slap-chop.textile`
     </tr>
     <tr>
       <td>
-        <p><code>permalink: pretty</code></p>
+        <p><code>pretty</code></p>
       </td>
       <td>
         <p><code>/2009/04/29/slap-chop/index.html</code></p>
@@ -161,7 +169,7 @@ Given a post named: `/2009-04-29-slap-chop.textile`
     </tr>
     <tr>
       <td>
-        <p><code>permalink: /:month-:day-:year/:title.html</code></p>
+        <p><code>/:month-:day-:year/:title.html</code></p>
       </td>
       <td>
         <p><code>/04-29-2009/slap-chop.html</code></p>
@@ -169,7 +177,7 @@ Given a post named: `/2009-04-29-slap-chop.textile`
     </tr>
     <tr>
       <td>
-        <p><code>permalink: /blog/:year/:month/:day/:title</code></p>
+        <p><code>/blog/:year/:month/:day/:title</code></p>
       </td>
       <td>
         <p><code>/blog/2009/04/29/slap-chop/index.html</code></p>
diff --git a/site/docs/plugins.md b/site/docs/plugins.md
index eb6392f..b9ab4bb 100644
--- a/site/docs/plugins.md
+++ b/site/docs/plugins.md
@@ -73,6 +73,7 @@ instances of
 and are available via `site.pages`. Static files become instances of
 [`Jekyll::StaticFile`]({{ site.repository }}/blob/master/lib/jekyll/static_file.rb)
 and are available via `site.static_files`. See
+[the Variables documentation page](/docs/variables/) and
 [`Jekyll::Site`]({{ site.repository }}/blob/master/lib/jekyll/site.rb)
 for more details.
 
@@ -339,9 +340,9 @@ Liquid::Template.register_filter(Jekyll::AssetFilter)
   <h5>ProTip™: Access the site object using Liquid</h5>
   <p>
     Jekyll lets you access the <code>site</code> object through the
-    <code>context.registers</code> feature of Liquid. For example, you can
+    <code>context.registers</code> feature of Liquid at <code>context.registers[:site]</code>. For example, you can
     access the global configuration file <code>_config.yml</code> using
-    <code>context.registers.config</code>.
+    <code>context.registers[:site].config</code>.
   </p>
 </div>
 
@@ -422,6 +423,12 @@ You can find a few useful plugins at the following locations:
 - [Monthly archive generator by Shigeya Suzuki](https://github.com/shigeya/jekyll-monthly-archive-plugin): Generator and template which renders monthly archive like MovableType style, based on the work by Ilkka Laukkanen and others above.
 - [Category archive generator by Shigeya Suzuki](https://github.com/shigeya/jekyll-category-archive-plugin): Generator and template which renders category archive like MovableType style, based on Monthly archive generator.
 - [Emoji for Jekyll](https://github.com/yihangho/emoji-for-jekyll): Seamlessly enable emoji for all posts and pages.
+- [Compass integration for Jekyll](https://github.com/mscharley/jekyll-compass): Easily integrate Compass and Sass with your Jekyll website.
+- [Pages Directory by Ben Baker-Smith](https://github.com/bbakersmith/jekyll-pages-directory): Defines a `_pages` directory for page files which routes its output relative to the project root.
+- [Page Collections by Jeff Kolesky](https://github.com/jeffkole/jekyll-page-collections): Generates collections of pages with functionality that resembles posts.
+- [Windows 8.1 Live Tile Generation by Matt Sheehan](https://github.com/sheehamj13/jekyll-live-tiles): Generates Internet Explorer 11 config.xml file and Tile Templates for pinning your site to Windows 8.1.
+- [Jekyll::AutolinkEmail by Ivan Tse](https://github.com/ivantsepp/jekyll-autolink_email): Autolink your emails.
+- [Jekyll::GitMetadata by Ivan Tse](https://github.com/ivantsepp/jekyll-git_metadata): Expose Git metadata for your templates.
 
 #### Converters
 
@@ -438,9 +445,9 @@ You can find a few useful plugins at the following locations:
 - [ReStructuredText Converter](https://github.com/xdissent/jekyll-rst): Converts ReST documents to HTML with Pygments syntax highlighting.
 - [Jekyll-pandoc-plugin](https://github.com/dsanson/jekyll-pandoc-plugin): Use pandoc for rendering markdown.
 - [Jekyll-pandoc-multiple-formats](https://github.com/fauno/jekyll-pandoc-multiple-formats) by [edsl](https://github.com/edsl): Use pandoc to generate your site in multiple formats. Supports pandoc’s markdown extensions.
-- [ReStructuredText Converter](https://github.com/xdissent/jekyll-rst): Converts ReST documents to HTML with Pygments syntax highlighting.
 - [Transform Layouts](https://gist.github.com/1472645): Allows HAML layouts (you need a HAML Converter plugin for this to work).
 - [Org-mode Converter](https://gist.github.com/abhiyerra/7377603): Org-mode converter for Jekyll.
+- [Customized Kramdown Converter](https://github.com/mvdbos/kramdown-with-pygments): Enable Pygments syntax highlighting for Kramdown-parsed fenced code blocks.
 
 #### Filters
 
@@ -450,18 +457,21 @@ You can find a few useful plugins at the following locations:
 - [URL encoding by James An](https://gist.github.com/919275): Percent encoding for URIs.
 - [JSON Filter](https://gist.github.com/1850654) by [joelverhagen](https://github.com/joelverhagen): Filter that takes input text and outputs it as JSON. Great for rendering JavaScript.
 - [i18n_filter](https://github.com/gacha/gacha.id.lv/blob/master/_plugins/i18n_filter.rb): Liquid filter to use I18n localization.
-- [Smilify](https://github.com/SaswatPadhi/jekyll_smilify) by [SaswatPadhi](https://github.com/SaswatPadhi): Convert text emoticons in your content to themeable smiley pics ([Demo](http://saswatpadhi.github.com/)).
+- [Smilify](https://github.com/SaswatPadhi/jekyll_smilify) by [SaswatPadhi](https://github.com/SaswatPadhi): Convert text emoticons in your content to themeable smiley pics.
 - [Read in X Minutes](https://gist.github.com/zachleat/5792681) by [zachleat](https://github.com/zachleat): Estimates the reading time of a string (for blog post content).
 - [Jekyll-timeago](https://github.com/markets/jekyll-timeago): Converts a time value to the time ago in words.
 - [pluralize](https://github.com/bdesham/pluralize): Easily combine a number and a word into a gramatically-correct amount like “1 minute” or “2 minute**s**”.
 - [reading_time](https://github.com/bdesham/reading_time): Count words and estimate reading time for a piece of text, ignoring HTML elements that are unlikely to contain running text.
 - [Table of Content Generator](https://github.com/dafi/jekyll-toc-generator): Generate the HTML code containing a table of content (TOC), the TOC can be customized in many way, for example you can decide which pages can be without TOC.
+- [jekyll-humanize](https://github.com/23maverick23/jekyll-humanize): This is a port of the Django app humanize which adds a "human touch" to data. Each method represents a Fluid type filter that can be used in your Jekyll site templates. Given that Jekyll produces static sites, some of the original methods do not make logical sense to port (e.g. naturaltime).
+- [Jekyll-Ordinal](https://github.com/PatrickC8t/Jekyll-Ordinal): Jekyll liquid filter to output a date ordinal such as "st", "nd", "rd", or "th".
+- [Deprecated articles keeper](https://github.com/kzykbys/JekyllPlugins) by [Kazuya Kobayashi](http://blog.kazuya.co/): A simple Jekyll filter which monitor how old an article is.
 
 #### Tags
 
 - [Asset Path Tag](https://github.com/samrayner/jekyll-asset-path-plugin) by [Sam Rayner](http://www.samrayner.com/): Allows organisation of assets into subdirectories by outputting a path for a given file relative to the current post or page.
 - [Delicious Plugin by Christian Hellsten](https://github.com/christianhellsten/jekyll-plugins): Fetches and renders bookmarks from delicious.com.
-- [Ultraviolet Plugin by Steve Alex](https://gist.github.com/480380): Jekyll tag for the [Ultraviolet](http://ultraviolet.rubyforge.org/) code highligher.
+- [Ultraviolet Plugin by Steve Alex](https://gist.github.com/480380): Jekyll tag for the [Ultraviolet](https://github.com/grosser/ultraviolet) code highligher.
 - [Tag Cloud Plugin by Ilkka Laukkanen](https://gist.github.com/710577): Generate a tag cloud that links to tag pages.
 - [GIT Tag by Alexandre Girard](https://gist.github.com/730347): Add Git activity inside a list.
 - [MathJax Liquid Tags by Jessy Cowan-Sharp](https://gist.github.com/834610): Simple liquid tags for Jekyll that convert inline math and block equations to the appropriate MathJax script tags.
@@ -495,6 +505,14 @@ You can find a few useful plugins at the following locations:
 - [Jekyll Date Chart](https://github.com/GSI/jekyll_date_chart) by [GSI](https://github.com/GSI): Block that renders date line charts based on textile-formatted tables.
 - [Jekyll Image Encode](https://github.com/GSI/jekyll_image_encode) by [GSI](https://github.com/GSI): Tag that renders base64 codes of images fetched from the web.
 - [Jekyll Quick Man](https://github.com/GSI/jekyll_quick_man) by [GSI](https://github.com/GSI): Tag that renders pretty links to man page sources on the internet.
+- [jekyll-font-awesome](https://gist.github.com/23maverick23/8532525): Quickly and easily add Font Awesome icons to your posts.
+- [Lychee Gallery Tag](https://gist.github.com/tobru/9171700) by [tobru](https://github.com/tobru): Include [Lychee](http://lychee.electerious.com/) albums into a post. For an introduction, see [Jekyll meets Lychee - A Liquid Tag plugin](https://tobrunet.ch/articles/jekyll-meets-lychee-a-liquid-tag-plugin/)
+- [Image Set/Gallery Tag](https://github.com/callmeed/jekyll-image-set) by [callmeed](https://github.com/callmeed): Renders HTML for an image gallery from a folder in your Jekyll site. Just pass it a folder name and class/tag options.
+- [jekyll_figure](https://github.com/lmullen/jekyll_figure): Generate figures and captions with links to the figure in a variety of formats
+- [Jekyll Github Sample Tag](https://github.com/bwillis/jekyll-github-sample): A liquid tag to include a sample of a github repo file in your Jekyll site.
+- [Jekyll Project Version Tag](https://github.com/rob-murray/jekyll-version-plugin): A Liquid tag plugin that renders a version identifier for your Jekyll site sourced from the git repository containing your code.
+- [Piwigo Gallery](https://github.com/AlessandroLorenzi/piwigo_gallery) by [Alessandro Lorenzi](http://www.alorenzi.eu/): Jekyll plugin to generate thumbnails from a Piwigo gallery and display them with a Liquid tag
+
 
 #### Collections
 
@@ -517,12 +535,21 @@ You can find a few useful plugins at the following locations:
 - [Jekyll-scholar](https://github.com/inukshuk/jekyll-scholar): Jekyll extensions for the blogging scholar.
 - [Jekyll-asset_bundler](https://github.com/moshen/jekyll-asset_bundler): Bundles and minifies JavaScript and CSS.
 - [Jekyll-assets](http://ixti.net/jekyll-assets/) by [ixti](https://github.com/ixti): Rails-alike assets pipeline (write assets in CoffeeScript, Sass, LESS etc; specify dependencies for automatic bundling using simple declarative comments in assets; minify and compress; use JST templates; cache bust; and many-many more).
+- [JAPR](https://github.com/kitsched/japr): Jekyll Asset Pipeline Reborn - Powerful asset pipeline for Jekyll that collects, converts and compresses JavaScript and CSS assets.
 - [File compressor](https://gist.github.com/2758691) by [mytharcher](https://github.com/mytharcher): Compress HTML and JavaScript files on site build.
 - [Jekyll-minibundle](https://github.com/tkareine/jekyll-minibundle): Asset bundling and cache busting using external minification tool of your choice. No gem dependencies.
 - [Singlepage-jekyll](https://github.com/JCB-K/singlepage-jekyll) by [JCB-K](https://github.com/JCB-K): Turns Jekyll into a dynamic one-page website.
 - [generator-jekyllrb](https://github.com/robwierzbowski/generator-jekyllrb): A generator that wraps Jekyll in [Yeoman](http://yeoman.io/), a tool collection and workflow for builing modern web apps.
 - [grunt-jekyll](https://github.com/dannygarcia/grunt-jekyll): A straightforward [Grunt](http://gruntjs.com/) plugin for Jekyll.
 - [jekyll-postfiles](https://github.com/indirect/jekyll-postfiles): Add `_postfiles` directory and {% raw %}`{{ postfile }}`{% endraw %} tag so the files a post refers to will always be right there inside your repo.
+- [A layout that compresses HTML](https://github.com/penibelst/jekyll-compress-html) by [Anatol Broder](http://penibelst.de/): Github Pages compatible, configurable way to compress HTML files on site build.
+- [Jekyll CO₂](https://github.com/wdenton/jekyll-co2): Generates HTML showing the monthly change in atmospheric CO₂ at the Mauna Loa observatory in Hawaii. 
+
+#### Editors
+
+- [sublime-jekyll](https://github.com/23maverick23/sublime-jekyll): A Sublime Text package for Jekyll static sites. This package should help creating Jekyll sites and posts easier by providing access to key template tags and filters, as well as common completions and a current date/datetime command (for dating posts). You can install this package manually via GitHub, or via [Package Control](https://sublime.wbond.net/packages/Jekyll).
+- [vim-jekyll](https://github.com/parkr/vim-jekyll): A vim plugin to generate
+  new posts and run `jekyll build` all without leaving vim.
 
 <div class="note info">
   <h5>Jekyll Plugins Wanted</h5>
diff --git a/site/docs/posts.md b/site/docs/posts.md
index 88036bd..16846d9 100644
--- a/site/docs/posts.md
+++ b/site/docs/posts.md
@@ -18,7 +18,7 @@ and web-based CMS systems, this will be a welcome change!
 As explained on the [directory structure](../structure/) page, the `_posts`
 folder is where your blog posts will live. These files can be either
 [Markdown](http://daringfireball.net/projects/markdown/) or
-[Textile](http://textile.sitemonks.com/) formatted text files, and as long as
+[Textile](http://redcloth.org/textile) formatted text files, and as long as
 they have [YAML front-matter](../frontmatter/), they will be converted from their
 source format into an HTML page that is part of your static site.
 
@@ -41,17 +41,38 @@ file. For example, the following are examples of valid post filenames:
 2012-09-12-how-to-write-a-blog.textile
 {% endhighlight %}
 
+<div class="note">
+  <h5>ProTip™: Link to other posts</h5>
+  <p>
+    Use the <a href="../templates#post-url"><code>post_url</code></a>
+    tag to link to other posts without having to worry about the URL's
+    breaking when the site permalink style changes.
+  </p>
+</div>
+
 ### Content Formats
 
-All blog post files must begin with [YAML front- matter](../frontmatter/). After
+All blog post files must begin with [YAML front-matter](../frontmatter/). After
 that, it's simply a matter of deciding which format you prefer. Jekyll supports
 two popular content markup formats:
 [Markdown](http://daringfireball.net/projects/markdown/) and
-[Textile](http://textile.sitemonks.com/). These formats each have their own way
+[Textile](http://redcloth.org/textile). These formats each have their own way
 of marking up different types of content within a post, so you should
 familiarize yourself with these formats and decide which one best suits your
 needs.
 
+<div class="note info">
+  <h5>Be aware of character sets</h5>
+  <p>
+    Content processors can modify certain characters to make them look nicer.
+    For example, the <code>smart</code> extension in Redcarpet converts standard,
+    ASCII quotation characters to curly, Unicode ones. In order for the browser
+    to display those characters properly, define the charset meta value by
+    including <code><meta charset="utf-8"></code> in the
+    <code><head></code> of your layout.
+  </p>
+</div>
+
 ## Including images and resources
 
 Chances are, at some point, you'll want to include images, downloads, or other
@@ -126,21 +147,30 @@ posts:
   {% raw %}{% for post in site.posts %}{% endraw %}
     <li>
       <a href="{% raw %}{{ post.url }}{% endraw %}">{% raw %}{{ post.title }}{% endraw %}</a>
-      <p>{% raw %}{{ post.excerpt }}{% endraw %}</p>
+      {% raw %}{{ post.excerpt }}{% endraw %}
     </li>
   {% raw %}{% endfor %}{% endraw %}
 </ul>
 {% endhighlight %}
 
+Because Jekyll grabs the first paragraph you will not need to wrap the excerpt in `p` tags,
+which is already done for you. These tags can be removed with the following if you'd prefer:
+
+{% highlight html %}
+{% raw %}{{ post.excerpt | remove: '<p>' | remove: '</p>' }}{% endraw %}
+{% endhighlight %}
+
 If you don't like the automatically-generated post excerpt, it can be overridden by adding
 `excerpt` to your post's YAML front-matter. Completely disable it by setting
 your `excerpt_separator` to `""`.
 
+Also, as with any output generated by Liquid tags, you can pass the `| strip_html` flag to remove any html tags in the output. This is particularly helpful if you wish to output a post excerpt as a `meta="description"` tag within the post `head`, or anywhere else having html tags along with the content is not desirable.
+
 ## Highlighting code snippets
 
 Jekyll also has built-in support for syntax highlighting of code snippets using
-Pygments, and including a code snippet in any post is easy. Just use the
-dedicated Liquid tag as follows:
+either Pygments or Rouge, and including a code snippet in any post is easy. Just
+use the dedicated Liquid tag as follows:
 
 {% highlight text %}
 {% raw %}{% highlight ruby %}{% endraw %}
diff --git a/site/docs/quickstart.md b/site/docs/quickstart.md
index 65af42b..eedb976 100644
--- a/site/docs/quickstart.md
+++ b/site/docs/quickstart.md
@@ -20,12 +20,6 @@ That's nothing, though. The real magic happens when you start creating blog
 posts, using the front-matter to control templates and layouts, and taking
 advantage of all the awesome configuration options Jekyll makes available.
 
-<div class="note info">
-  <h5>Redcarpet is the default Markdown engine for new sites</h5>
-  <p>In Jekyll 1.1, we switched the default markdown engine for sites
-     generated with <code>jekyll new</code> to Redcarpet</p>
-</div>
-
 If you're running into problems, ensure you have all the [requirements
 installed][Installation].
 
diff --git a/site/docs/resources.md b/site/docs/resources.md
index afd34b1..36c66c4 100644
--- a/site/docs/resources.md
+++ b/site/docs/resources.md
@@ -35,12 +35,9 @@ Jekyll’s growing use is producing a wide variety of tutorials, frameworks, ext
   > “Jekyll is a well-architected throwback to a time before WordPress, when men were men, and HTML was static. I like the ideas it espouses, and have made a few improvements to it’s core. Here, I’ll point out some highlights of my fork in the hopes that they see usage beyond this site.”
 - [‘About this Website’, by Carter Allen](http://cartera.me/2010/08/12/about-this-website/)
   > “Jekyll is everything that I ever wanted in a blogging engine. Really. It isn’t perfect, but what’s excellent about it is that if there’s something wrong, I know exactly how it works and how to fix it. It runs on the your machine only, and is essentially an added”build" step between you and the browser. I coded this entire site in TextMate using standard HTML5 and CSS3, and then at the end I added just a few little variables to the markup. Presto-chango, my site is built and I am at  [...]
-- [Generating a Tag Cloud in Jekyll](http://www.justkez.com/generating-a-tag-cloud-in-jekyll/)
+- [Generating a Tag Cloud in Jekyll](http://www.justkez.com/generating-a-tag-cloud-in-jekyll/)  
+A guide to implementing a tag cloud and per-tag content pages using Jekyll.
 
-  A guide to implementing a tag cloud and per-tag content pages using Jekyll.
-
-- [Jekyll Extensions -= Pain](http://rfelix.com/2010/01/19/jekyll-extensions-minus-equal-pain/)
-
-  A way to [extend Jekyll](http://github.com/rfelix/jekyll_ext) without forking and modifying the Jekyll gem codebase and some [portable Jekyll extensions](http://wiki.github.com/rfelix/jekyll_ext/extensions) that can be reused and shared.
+- A way to [extend Jekyll](https://github.com/rfelix/jekyll_ext) without forking and modifying the Jekyll gem codebase and some [portable Jekyll extensions](https://wiki.github.com/rfelix/jekyll_ext/extensions) that can be reused and shared.
 
 - [Using your Rails layouts in Jekyll](http://numbers.brighterplanet.com/2010/08/09/sharing-rails-views-with-jekyll)
diff --git a/site/docs/sites.md b/site/docs/sites.md
index 57c927b..4e57aba 100644
--- a/site/docs/sites.md
+++ b/site/docs/sites.md
@@ -11,13 +11,13 @@ with. Below are some Jekyll-powered blogs which were hand-picked for
 learning purposes.
 
 - [Tom Preston-Werner](http://tom.preston-werner.com/)
-    ([source](http://github.com/mojombo/mojombo.github.com))
+    ([source](https://github.com/mojombo/mojombo.github.io))
 - [Nick Quaranto](http://quaran.to/)
     ([source](https://github.com/qrush/qrush.github.com))
 - [Roger Chapman](http://rogchap.com/)
     ([source](https://github.com/rogchap/rogchap.github.com))
-- [GitHub Official Teaching Materials](http://teach.github.com)
-    ([source](https://github.com/github/teach.github.com))
+- [GitHub Official Teaching Materials](http://training.github.com)
+    ([source](https://github.com/github/training.github.com/tree/7049d7532a6856411e34046aedfce43a4afaf424))
 - [Rasmus Andersson](http://rsms.me/)
     ([source](https://github.com/rsms/rsms.github.com))
 - [Scott Chacon](http://schacon.github.com)
diff --git a/site/docs/structure.md b/site/docs/structure.md
index d03baee..44bf27b 100644
--- a/site/docs/structure.md
+++ b/site/docs/structure.md
@@ -113,7 +113,7 @@ An overview of what each of these does:
       <td>
         <p>
 
-          Your dynamic content, so to speak. The format of these files is
+          Your dynamic content, so to speak. The naming convention of these files is
           important, and must follow the format:
           <code>YEAR-MONTH-DAY-title.MARKUP</code>.
           The <a href="../permalinks/">permalinks</a> can be customized for each
@@ -130,9 +130,9 @@ An overview of what each of these does:
       <td>
         <p>
 
-          Well-formatted site data should be placed here. The jekyll engine will 
-          autoload all yaml files (ends with <code>.yml</code> or <code>.yaml</code>) 
-          in this directory. If there's a file <code>members.yml</code> under the directory, 
+          Well-formatted site data should be placed here. The jekyll engine will
+          autoload all yaml files (ends with <code>.yml</code> or <code>.yaml</code>)
+          in this directory. If there's a file <code>members.yml</code> under the directory,
           then you can access contents of the file through <code>site.data.members</code>.
 
         </p>
diff --git a/site/docs/templates.md b/site/docs/templates.md
index 7cf2a86..5ee7bb7 100644
--- a/site/docs/templates.md
+++ b/site/docs/templates.md
@@ -25,162 +25,205 @@ common tasks easier.
   <tbody>
     <tr>
       <td>
-        <p class='name'><strong>Date to XML Schema</strong></p>
+        <p class="name"><strong>Date to XML Schema</strong></p>
         <p>Convert a Date into XML Schema (ISO 8601) format.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_xmlschema }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_xmlschema }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>2008-11-07T13:07:54-08:00</code>
+          <code class="output">2008-11-07T13:07:54-08:00</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Date to RFC-822 Format</strong></p>
+        <p class="name"><strong>Date to RFC-822 Format</strong></p>
         <p>Convert a Date into the RFC-822 format used for RSS feeds.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_rfc822 }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_rfc822 }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>Mon, 07 Nov 2008 13:07:54 -0800</code>
+          <code class="output">Mon, 07 Nov 2008 13:07:54 -0800</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Date to String</strong></p>
+        <p class="name"><strong>Date to String</strong></p>
         <p>Convert a date to short format.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_string }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_string }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>07 Nov 2008</code>
+          <code class="output">07 Nov 2008</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Date to Long String</strong></p>
+        <p class="name"><strong>Date to Long String</strong></p>
         <p>Format a date to long format.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_long_string }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_long_string }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>07 November 2008</code>
+          <code class="output">07 November 2008</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>XML Escape</strong></p>
+        <p class="name"><strong>Where</strong></p>
+        <p>Select all the objects in an array where the key has the given value.</p>
+      </td>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ site.members | where:"graduation_year","2014" }}{% endraw %}</code>
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p class="name"><strong>Group By</strong></p>
+        <p>Group an array's items by a given property.</p>
+      </td>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ site.members | group_by:"graduation_year" }}{% endraw %}</code>
+        </p>
+        <p>
+          <code class="output">[{"name"=>"2013", "items"=>[...]},
+{"name"=>"2014", "items"=>[...]}]</code>
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p class="name"><strong>XML Escape</strong></p>
         <p>Escape some text for use in XML.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.content | xml_escape }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.content | xml_escape }}{% endraw %}</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>CGI Escape</strong></p>
+        <p class="name"><strong>CGI Escape</strong></p>
         <p>
           CGI escape a string for use in a URL. Replaces any special characters
           with appropriate %XX replacements.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ “foo,bar;baz?” | cgi_escape }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ “foo,bar;baz?” | cgi_escape }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>foo%2Cbar%3Bbaz%3F</code>
+          <code class="output">foo%2Cbar%3Bbaz%3F</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>URI Escape</strong></p>
+        <p class="name"><strong>URI Escape</strong></p>
         <p>
           URI escape a string.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ “'foo, bar \\baz?'” | uri_escape }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ “'foo, bar \\baz?'” | uri_escape }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>foo,%20bar%20%5Cbaz?</code>
+          <code class="output">foo,%20bar%20%5Cbaz?</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Number of Words</strong></p>
+        <p class="name"><strong>Number of Words</strong></p>
         <p>Count the number of words in some text.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.content | number_of_words }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.content | number_of_words }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>1337</code>
+          <code class="output">1337</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Array to Sentence</strong></p>
+        <p class="name"><strong>Array to Sentence</strong></p>
         <p>Convert an array into a sentence. Useful for listing tags.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.tags | array_to_sentence_string }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.tags | array_to_sentence_string }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>foo, bar, and baz</code>
+          <code class="output">foo, bar, and baz</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Textilize</strong></p>
+        <p class="name"><strong>Textilize</strong></p>
         <p>Convert a Textile-formatted string into HTML, formatted via RedCloth</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.excerpt | textilize }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.excerpt | textilize }}{% endraw %}</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Markdownify</strong></p>
+        <p class="name"><strong>Markdownify</strong></p>
         <p>Convert a Markdown-formatted string into HTML.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.excerpt | markdownify }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.excerpt | markdownify }}{% endraw %}</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Data To JSON</strong></p>
+        <p class="name"><strong>Data To JSON</strong></p>
         <p>Convert Hash or Array to JSON.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ site.data.projects | jsonify }}{% endraw %}</code>
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p class="name"><strong>Sort</strong></p>
+        <p>Sort an array. Optional arguments for hashes: 1. property name 2. nils order (<em>first</em> or <em>last</em>).</p>
+      </td>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ page.tags | sort }}{% endraw %}</code>
+        </p>
+        <p>
+         <code class="filter">{% raw %}{{ site.posts | sort: 'author' }}{% endraw %}</code>
+        </p>
         <p>
-         <code class='filter'>{% raw %}{{ site.data.projects | jsonify }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.pages | sort: 'title', 'last' }}{% endraw %}</code>
         </p>
       </td>
     </tr>
@@ -211,8 +254,6 @@ root of your source directory. This will embed the contents of
     or you can use a variable, using liquid-like variable syntax as in
     <code>{% raw %}{% include {{my_variable}} %}{% endraw %}</code>.
 
-    Note that unlike usual liquid variable syntax, you cannot have spaces inside the curly braces.
-
   </p>
 </div>
 
@@ -232,8 +273,14 @@ These parameters are available via Liquid in the include:
 
 Jekyll has built in support for syntax highlighting of [over 100
 languages](http://pygments.org/languages/) thanks to
-[Pygments](http://pygments.org/). To use Pygments, you must have Python installed on your
-system and set `pygments` to `true` in your site's configuration file.
+[Pygments](http://pygments.org/). To use Pygments, you must have Python installed
+on your system and set `highlighter` to `pygments` in your site's configuration
+file.
+
+Alternatively, you can use [Rouge](https://github.com/jayferd/rouge) to highlight
+your code snippets. It doesn't support as many languages as Pygments does but
+it should fit in most cases and it's written in pure Ruby ; you don't need Python
+on your system!
 
 To render a code block with syntax highlighting, surround your code as follows:
 
@@ -249,8 +296,9 @@ end
 
 The argument to the `highlight` tag (`ruby` in the example above) is the
 language identifier. To find the appropriate identifier to use for the language
-you want to highlight, look for the “short name” on the [Lexers
-page](http://pygments.org/docs/lexers/).
+you want to highlight, look for the “short name” on the [Pygments' Lexers
+page](http://pygments.org/docs/lexers/) or the [Rouge
+wiki](https://github.com/jayferd/rouge/wiki/List-of-supported-languages-and-lexers).
 
 #### Line numbers
 
@@ -273,7 +321,7 @@ end
 
 In order for the highlighting to show up, you’ll need to include a highlighting
 stylesheet. For an example stylesheet you can look at
-[syntax.css](http://github.com/mojombo/tpw/tree/master/css/syntax.css). These
+[syntax.css](https://github.com/mojombo/tpw/tree/master/css/syntax.css). These
 are the same styles as used by GitHub and you are free to use them for your own
 site. If you use `linenos`, you might want to include an additional CSS class
 definition for the `.lineno` class in `syntax.css` to distinguish the line
@@ -290,7 +338,7 @@ will generate the correct permalink URL for the post you specify.
 {% endraw %}
 {% endhighlight %}
 
-If you organize your posts in subdirectories, you need to include subdirectory 
+If you organize your posts in subdirectories, you need to include subdirectory
 path to the post:
 
 {% highlight text %}
@@ -311,11 +359,11 @@ You can also use this tag to create a link to a post in Markdown as follows:
 
 ### Gist
 
-Use the `gist` tag to easily embed a GitHub Gist onto your site:
+Use the `gist` tag to easily embed a GitHub Gist onto your site. This works with public or secret gists:
 
 {% highlight text %}
 {% raw %}
-{% gist 5555251 %}
+{% gist parkr/931c1c8d465a04042403 %}
 {% endraw %}
 {% endhighlight %}
 
@@ -323,17 +371,6 @@ You may also optionally specify the filename in the gist to display:
 
 {% highlight text %}
 {% raw %}
-{% gist 5555251 result.md %}
+{% gist parkr/931c1c8d465a04042403 jekyll-private-gist.markdown %}
 {% endraw %}
 {% endhighlight %}
-
-The `gist` tag also works with private gists, which require the gist owner's
-github username:
-
-{% highlight text %}
-{% raw %}
-{% gist parkr/931c1c8d465a04042403 %}
-{% endraw %}
-{% endhighlight %}
-
-The private gist syntax also supports filenames.
diff --git a/site/docs/troubleshooting.md b/site/docs/troubleshooting.md
index 836e1ea..c0cc9fe 100644
--- a/site/docs/troubleshooting.md
+++ b/site/docs/troubleshooting.md
@@ -6,9 +6,9 @@ next_section: sites
 permalink: /docs/troubleshooting/
 ---
 
-If you ever run into problems installing or using Jekyll, here's a few tips
+If you ever run into problems installing or using Jekyll, here are a few tips
 that might be of help. If the problem you’re experiencing isn’t covered below,
-please [report an issue]({{ site.repository }}/issues/new) so the
+please [report an issue]({{site.help_url}}/issues/new) so the
 Jekyll community can make everyone’s experience better.
 
 ## Installation Problems
@@ -28,10 +28,13 @@ sudo yum install ruby-devel
 {% endhighlight %}
 
 On [NearlyFreeSpeech](http://nearlyfreespeech.net/) you need to run the
-command with the following environment variable:
+following commands before installing Jekyll:
 
 {% highlight bash %}
-RB_USER_INSTALL=true gem install jekyll
+export GEM_HOME=/home/private/gems
+export GEM_PATH=/home/private/gems:/usr/local/lib/ruby/gems/1.8/
+export PATH=$PATH:/home/private/gems/bin
+export RB_USER_INSTALL='true'
 {% endhighlight %}
 
 On OSX, you may need to update RubyGems:
@@ -41,7 +44,7 @@ sudo gem update --system
 {% endhighlight %}
 
 If you still have issues, you may need to [use XCode to install Command Line
-Tools](http://www.zlu.me/blog/2012/02/21/install-native-ruby-gem-in-mountain-lion-preview/)
+Tools](http://www.zlu.me/ruby/os%20x/gem/mountain%20lion/2012/02/21/install-native-ruby-gem-in-mountain-lion-preview.html)
 that will allow you to install native gems using the following command:
 
 {% highlight bash %}
@@ -55,7 +58,7 @@ sudo emerge -av dev-ruby/rubygems
 {% endhighlight %}
 
 On Windows, you may need to install [RubyInstaller
-DevKit](http://wiki.github.com/oneclick/rubyinstaller/development-kit).
+DevKit](https://wiki.github.com/oneclick/rubyinstaller/development-kit).
 
 ## Problems running Jekyll
 
@@ -116,16 +119,6 @@ Firefox and possibly other browsers and is [discouraged in
 XHTML.](http://www.w3.org/TR/xhtml1/#C_3) An easy fix is to put a space
 between the opening and closing tags.
 
-### RedCloth
-
-Versions 4.1.1 and higher do not obey the notextile tag. [This is a known
-bug](http://aaronqian.com/articles/2009/04/07/redcloth-ate-my-notextile.html)
-and will hopefully be fixed for 4.2. You can still use 4.1.9, but the
-test suite requires that 4.1.0 be installed. If you use a version of
-RedCloth that does not have the notextile tag, you may notice that
-syntax highlighted blocks from Pygments are not formatted correctly,
-among other things. If you’re seeing this just install 4.1.0.
-
 ### Liquid
 
 The latest version, version 2.0, seems to break the use of `{{ "{{" }}` in
@@ -146,5 +139,9 @@ run into these errors, try setting `excerpt_separator: ""` in your
 
 <div class="note">
   <h5>Please report issues you encounter!</h5>
-  <p>If you come across a bug, please <a href="{{ site.repository }}/issues/new">create an issue</a> on GitHub describing the problem and any work-arounds you find so we can document it here for others.</p>
+  <p>
+  If you come across a bug, please <a href="{{ site.help_url }}/issues/new">create an issue</a>
+  on GitHub describing the problem and any work-arounds you find so we can
+  document it here for others.
+  </p>
 </div>
diff --git a/site/docs/upgrading.md b/site/docs/upgrading.md
index 3cf5a1e..3a3f167 100644
--- a/site/docs/upgrading.md
+++ b/site/docs/upgrading.md
@@ -35,7 +35,7 @@ rebuild each time a file changes, just add the `--watch` flag at the end.
   <p markdown="1">With the new subcommands, the way sites are previewed locally
    changed a bit. Instead of specifying `server: true` in the site's
    configuration file, use `jekyll serve`. The same hold's true for
-   `watch: true`. Instead, use the `--watch` flag with either `jekyll serve`
+   `watch: true`. Instead, use the `--watch` flag with either `jekyll serve`
     or `jekyll build`.</p>
 </div>
 
@@ -97,13 +97,13 @@ to one or more config files (comma-delimited, no spaces).
 
 <div class="note info">
   <h5>The config flag explicitly specifies your configuration file(s)</h5>
-  <p markdown="1">If you use the `--config` flag, Jekyll will ignore your
-    `_config.yml` file. Want to merge a custom configuration with the normal
+  <p markdown="1">If you use the `--config` flag, Jekyll will ignore your
+    `_config.yml` file. Want to merge a custom configuration with the normal
     configuration? No problem. Jekyll will accept more than one custom config
     file via the command line. Config files cascade from right to left, such
-    that if I run `jekyll serve --config _config.yml,_config-dev.yml`,
-    the values in the config files on the right (`_config-dev.yml`) overwrite
-    those on the left (`_config.yml`) when both contain the same key.</p>
+    that if I run `jekyll serve --config _config.yml,_config-dev.yml`,
+    the values in the config files on the right (`_config-dev.yml`) overwrite
+    those on the left (`_config.yml`) when both contain the same key.</p>
 </div>
 
 ### New Config File Options
diff --git a/site/docs/usage.md b/site/docs/usage.md
index 6db3a11..7538de0 100644
--- a/site/docs/usage.md
+++ b/site/docs/usage.md
@@ -24,6 +24,17 @@ $ jekyll build --watch
 #    watched for changes, and regenerated automatically.
 {% endhighlight %}
 
+<div class="note warning">
+  <h5>Destination folders are cleaned on site builds</h5>
+  <p>
+    The contents of <code><destination></code> are automatically
+    cleaned when the site is built.  Files or folders that are not
+    created by your site will be removed.  Do not use an important
+    location for <code><destination></code>; instead, use it as
+    a staging area and copy files from there to your web server.
+  </p>
+</div>
+
 Jekyll also comes with a built-in development server that will allow you to
 preview what the generated site will look like in your browser locally.
 
diff --git a/site/docs/variables.md b/site/docs/variables.md
index 89e11a5..a8b42c3 100644
--- a/site/docs/variables.md
+++ b/site/docs/variables.md
@@ -2,7 +2,7 @@
 layout: docs
 title: Variables
 prev_section: pages
-next_section: datafiles
+next_section: collections
 permalink: /docs/variables/
 ---
 
@@ -113,6 +113,48 @@ following is a reference of the available data.
       </p></td>
     </tr>
     <tr>
+      <td><p><code>site.static_files</code></p></td>
+      <td><p>
+
+        A list of all static files (i.e. files not processed by Jekyll's
+        converters or the Liquid renderer). Each file has three properties:
+        <code>path</code>, <code>modified_time</code> and <code>extname</code>.
+
+      </p></td>
+    </tr>
+    <tr>
+      <td><p><code>site.html_pages</code></p></td>
+      <td><p>
+
+        A list of all HTML Pages.
+
+      </p></td>
+    </tr>
+    <tr>
+      <td><p><code>site.collections</code></p></td>
+      <td><p>
+
+        A list of all the collections.
+
+      </p></td>
+    </tr>
+    <tr>
+      <td><p><code>site.data</code></p></td>
+      <td><p>
+
+        A list containing the data loaded from the YAML files located in the <code>_data</code> directory.
+
+      </p></td>
+    </tr>
+    <tr>
+      <td><p><code>site.documents</code></p></td>
+      <td><p>
+
+        A list of all the documents in every collection.
+
+      </p></td>
+    </tr>
+    <tr>
       <td><p><code>site.categories.CATEGORY</code></p></td>
       <td><p>
 
@@ -244,6 +286,24 @@ following is a reference of the available data.
 
       </p></td>
     </tr>
+    <tr>
+      <td><p><code>page.next</code></p></td>
+      <td><p>
+
+        The next post relative to the position of the current post in
+        <code>site.posts</code>. Returns <code>nil</code> for the last entry.
+
+      </p></td>
+    </tr>
+    <tr>
+      <td><p><code>page.previous</code></p></td>
+      <td><p>
+
+        The previous post relative to the position of the current post in
+        <code>site.posts</code>. Returns <code>nil</code> for the first entry.
+
+      </p></td>
+    </tr>
   </tbody>
 </table>
 </div>
diff --git a/site/docs/windows.md b/site/docs/windows.md
new file mode 100644
index 0000000..b87140b
--- /dev/null
+++ b/site/docs/windows.md
@@ -0,0 +1,44 @@
+---
+layout: docs
+title: Jekyll on Windows
+prev_section: configuration
+next_section: posts
+permalink: /docs/windows/
+---
+
+While Windows is not an officially-supported platform, it can be used to run
+Jekyll with the proper tweaks. This page aims to collect some of the general
+knowledge and lessons that have been unearthed by Windows users.
+
+## Installation
+
+Julian Thilo has written up instructions to get
+[Jekyll running on Windows][windows-installation] and it seems to work for most.
+
+## Encoding
+
+If you use UTF-8 encoding, make sure that no `BOM` header
+characters exist in your files or very, very bad things will happen to
+Jekyll. This is especially relevant if you're running Jekyll on Windows.
+
+Additionally, you might need to change the code page of the console window to UTF-8
+in case you get a "Liquid Exception: Incompatible character encoding" error during
+the site generation process. It can be done with the following command:
+
+{% highlight bash %}
+$ chcp 65001
+{% endhighlight %}
+
+[windows-installation]: http://jekyll-windows.juthilo.com/
+
+## Auto-regeneration
+
+As of v1.3.0, Jekyll uses the `listen` gem to watch for changes when the
+`--watch` switch is specified during a build or serve. While `listen` has
+built-in support for UNIX systems, it requires an extra gem for compatibility
+with Windows. Add the following to the Gemfile for your site:
+
+{% highlight ruby %}
+require 'rbconfig'
+gem 'wdm', '~> 0.1.0' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
+{% endhighlight %}
diff --git a/site/favicon.ico b/site/favicon.ico
new file mode 100644
index 0000000..e8b4e38
Binary files /dev/null and b/site/favicon.ico differ
diff --git a/site/favicon.png b/site/favicon.png
deleted file mode 100644
index 4443b67..0000000
Binary files a/site/favicon.png and /dev/null differ
diff --git a/site/feed.xml b/site/feed.xml
index 2f4dfcf..1a683be 100644
--- a/site/feed.xml
+++ b/site/feed.xml
@@ -1,5 +1,4 @@
 ---
-layout: none
 permalink: /feed.xml
 ---
 
@@ -12,25 +11,38 @@ permalink: /feed.xml
   xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   >
-<channel>
+  <channel>
     <title xml:lang="en">Jekyll • Simple, blog-aware, static sites</title>
-    <atom:link type="application/atom+xml" href="http://jekyllrb.com/feed/" rel="self"/>
-    <link>http://jekyllrb.com</link>
-    <pubDate>{{ site.time | date: "%a, %d %b %Y %H:%M:%S %z" }}</pubDate>
-    <lastBuildDate>{{ site.time | date: "%a, %d %b %Y %H:%M:%S %z" }}</lastBuildDate>
+    <atom:link type="application/atom+xml" href="http://jekyllrb.com/feed.xml" rel="self"/>
+    <link>http://jekyllrb.com/</link>
+    <pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
+    <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
     <language>en-US</language>
+    <generator>Jekyll v{{ jekyll.version }}</generator>
     <description>Transform your plain text into static websites and blogs.</description>
+    <image>
+      <description>Transform your plain text into static websites and blogs.</description>
+      <url>http://jekyllrb.com/img/logo-rss.png</url>
+      <title>Jekyll • Simple, blog-aware, static sites</title>
+      <link>http://jekyllrb.com/</link>
+      <width>144</width>
+      <height>73</height>
+    </image>
     {% for post in site.posts %}
     <item>
-        <title>{{ post.title | xml_escape}}</title>
-        <link>http://jekyllrb.com{{ post.url }}</link>
-        <pubDate>{{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }}</pubDate>
-        <dc:creator>{{ post.author }}</dc:creator>
-        {% for tag in post.tags %}<category>{{ tag | xml_escape }}</category>
-        {% endfor %}{% for cat in post.categories %}<category>{{ cat | xml_escape }}</category>
-        {% endfor %}<guid isPermaLink="false">{{ post.id }}</guid>
-        <description><![CDATA[ {{ post.content }} ]]></description>
+      <title>{{ post.title | xml_escape}}</title>
+      <link>http://jekyllrb.com{{ post.url }}</link>
+      <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
+      <dc:creator>{{ post.author }}</dc:creator>
+      {% for tag in post.tags %}
+      <category>{{ tag | xml_escape }}</category>
+      {% endfor %}
+      {% for cat in post.categories %}
+      <category>{{ cat | xml_escape }}</category>
+      {% endfor %}
+      <guid isPermaLink="true">http://jekyllrb.com{{ post.url }}</guid>
+      <description>{{ post.content | xml_escape }}</description>
     </item>
     {% endfor %}
-</channel>
+  </channel>
 </rss>
diff --git a/site/fonts/FontAwesome.otf b/site/fonts/FontAwesome.otf
new file mode 100644
index 0000000..3461e3f
Binary files /dev/null and b/site/fonts/FontAwesome.otf differ
diff --git a/site/fonts/fontawesome-webfont.eot b/site/fonts/fontawesome-webfont.eot
new file mode 100755
index 0000000..6cfd566
Binary files /dev/null and b/site/fonts/fontawesome-webfont.eot differ
diff --git a/site/fonts/fontawesome-webfont.svg b/site/fonts/fontawesome-webfont.svg
new file mode 100755
index 0000000..a9f8469
--- /dev/null
+++ b/site/fonts/fontawesome-webfont.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" "  horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#xd8;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" horiz-adv-x="1537" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" horiz-adv-x="1537" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M93 1350q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78z" />
+<glyph unicode="&#xf001;" d="M0 -64q0 50 34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5 q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M0 704q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5z M256 704q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M0 32v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5 t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768zM128 1120q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43  [...]
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M0 940q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138z " />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M0 889q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M0 889q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354 q-25 27 -25 48zM221 829l306 -297l-73 -421l378 199l377 -199l-72 421l306 297l-422 62l-189 382l-189 -382z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M0 131q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5q0 -120 -73 -189.5t-194 -69.5 h-874q-121 0 -194 69.5t-73 189.5zM320 1024q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M0 -96v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 64v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45zM128 320q0 -26 19 -45t45 -19h128 q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128zM128 704q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128zM128 1088q0 -2 [...]
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M0 128v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM0 896v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM896 128v384q0 52 38 90t90 38h512q52 0 90 -38 t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM896 896v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M0 96v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 608v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 1120v192q0 40 28 68t68 28h320q40 0 68 -28 t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 96v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 608v192q0 40 28 68t68 28h [...]
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M0 96v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 608v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 1120v192q0 40 28 68t68 28h320q40 0 68 -28 t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 96v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68zM640 608v192q0 40 28 68t68 28h [...]
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M121 608q0 40 28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68t-28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M110 214q0 40 28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68t-28 -68l-294 -294l294 -294q28 -28 28 -68t-28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294 q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M0 704q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90t-37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5z M256 704q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5zM384 672v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 2 [...]
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M0 704q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90t-37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5z M256 704q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5zM384 672v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 - [...]
+<glyph unicode="&#xf011;" d="M0 640q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181 q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298zM640 768v640q0 52 38 90t90 38t90 -38t38 -90v-640q0 -52 -38 - [...]
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M0 -96v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM384 -96v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM768 -96v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576 q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM1152 -96v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM1536 -96v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1472 [...]
+<glyph unicode="&#xf013;" d="M0 531v222q0 12 8 23t19 13l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10 q129 -119 165 -170q7 -8 7 -22q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 [...]
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M0 1056v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23zM256 76q0 -22 7 -40.5 t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5v948h-896v-948zM384 224v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23zM480 1152h448l-48 117q-7 9 -17 11h-3 [...]
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M26 636.5q1 13.5 11 21.5l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5zM256 64 v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf016;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22 v-376z" />
+<glyph unicode="&#xf017;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 544v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M50 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256 q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73zM809 540q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 [...]
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M0 96v320q0 40 28 68t68 28h465l135 -136q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68zM325 985q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39q17 -41 -14 -70 l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70zM1152 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM1408 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t [...]
+<glyph unicode="&#xf01a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM418 620q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35z" />
+<glyph unicode="&#xf01b;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM416 672q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23z" />
+<glyph unicode="&#xf01c;" d="M0 64v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552q25 -61 25 -123v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM197 576h316l95 -192h320l95 192h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8 t-2.5 -8z" />
+<glyph unicode="&#xf01d;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 320v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55t-32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56z" />
+<glyph unicode="&#xf01e;" d="M0 640q0 156 61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5 t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298z" />
+<glyph unicode="&#xf021;" d="M0 0v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129 q-19 -19 -45 -19t-45 19t-19 45zM18 800v7q65 268 270 434.5t480 166.5q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-13 [...]
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M0 160v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM128 160q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832z M256 288v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 544v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 [...]
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M0 96v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68zM320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M64 1280q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110zM320 320v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19 q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t- [...]
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M0 650q0 151 67 291t179 242.5t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32 q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 [...]
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M0 448v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M0 448v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45zM908 464q0 21 12 35.5t29 25t34 23t29 35.5t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5 q15 0 25 -5q70 -27 112.5 -93t42.5 -142t-42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M0 448v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45zM908 464q0 21 12 35.5t29 25t34 23t29 35.5t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5 q15 0 25 -5q70 -27 112.5 -93t42.5 -142t-42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5zM1008 228q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5t-115.5 135.5q-20 15 -76  [...]
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M0 0v640h640v-640h-640zM0 768v640h640v-640h-640zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM256 256v128h128v-128h-128zM256 1024v128h128v-128h-128zM768 0v640h384v-128h128v128h128v-384h-384v128h-128v-384h-128zM768 768v640h640v-640h-640z M896 896h384v384h-384v-384zM1024 0v128h128v-128h-128zM1024 1024v128h128v-128h-128zM1280 0v128h128v-128h-128z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M0 0v1408h63v-1408h-63zM94 1v1407h32v-1407h-32zM189 1v1407h31v-1407h-31zM346 1v1407h31v-1407h-31zM472 1v1407h62v-1407h-62zM629 1v1407h31v-1407h-31zM692 1v1407h31v-1407h-31zM755 1v1407h31v-1407h-31zM880 1v1407h63v-1407h-63zM1037 1v1407h63v-1407h-63z M1163 1v1407h63v-1407h-63zM1289 1v1407h63v-1407h-63zM1383 1v1407h63v-1407h-63zM1541 1v1407h94v-1407h-94zM1666 1v1407h32v-1407h-32zM1729 0v1408h63v-1408h-63z" />
+<glyph unicode="&#xf02b;" d="M0 864v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117zM192 1088q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M0 864v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117zM192 1088q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5zM704 1408h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38  [...]
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M10 184q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23 t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 - [...]
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M0 7v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M0 160v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v160h-224 q-13 0 -22.5 9.5t-9.5 22.5zM384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1408 576q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M0 128v896q0 106 75 181t181 75h224l51 136q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181zM512 576q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5zM672 576q0 119 84.5 203.5t203.5 84.5t203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8 t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5q0 -22 14 -37.5t43.5 -2 [...]
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5 t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231  [...]
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q- [...]
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M0 1023v383l81 1l54 -27q12 -5 211 -5q44 0 132 2t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5 q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 [...]
+<glyph unicode="&#xf035;" d="M0 1023v383l81 1l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1 t-103 1t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q [...]
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 448v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM0 832v128q0 26 19 45t45 19h1536 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1536q-26 0 -45 19t-19 45zM0 1216v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM128 832v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM384 448v128q0 26 19 45t45 19h896 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45zM512 1216v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM128 832v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1536q-26 0 -45 19t-19 45zM384 448v128q0 26 19 45t45 19h1280 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM512 1216v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 448v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 832v128q0 26 19 45t45 19h1664 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 1216v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M0 32v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5zM0 416v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5zM0 800v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5zM0 1184v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5 [...]
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M0 32v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5zM0 1184v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5 t-9.5 22.5zM32 704q0 14 9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23zM640 416v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5  [...]
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M0 32v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5zM0 416v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23t-9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5z M0 1184v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5zM640 416v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22. [...]
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M0 288v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5q39 -17 39 -59v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5 t-84.5 203.5z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M0 32v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216z M256 128v192l320 320l160 -160l512 512l416 -416v-448h-1408zM256 960q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136z" />
+<glyph unicode="&#xf040;" d="M0 -128v416l832 832l416 -416l-832 -832h-416zM128 128h128v-128h107l91 91l-235 235l-91 -91v-107zM298 384q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17zM896 1184l166 165q36 38 90 38q53 0 91 -38l235 -234 q37 -39 37 -91q0 -53 -37 -90l-166 -166z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M0 896q0 212 150 362t362 150t362 -150t150 -362q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179zM256 896q0 -106 75 -181t181 -75t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181z" />
+<glyph unicode="&#xf042;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73v1088q-148 0 -273 -73t-198 -198t-73 -273z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M0 512q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275q0 -212 -150 -362t-362 -150t-362 150t-150 362zM256 384q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29v-190 q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM640 256v288l672 672l288 -288l-672 -672h-288zM736 448h96v-96h56l116 116l-152 152l-116 -116v-56zM944 688q16 -16 33 1l350 350q17 17 1 33t [...]
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h255q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29v-259 q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM256 704q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 [...]
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3 q20 -8 20 -29v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM257 768q0 33 24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110q24 -24 24 -57t- [...]
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M0 640q0 26 19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45t-19 -45l-256 -256 q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256 [...]
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M0 -64v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M0 -64v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710q19 19 32 13t13 -32v-710q4 11 13 19l710 710q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45 t-45 -19h-128q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M122 640q0 26 19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19l710 710q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M0 -96v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31l-1328 -738q-23 -13 -39.5 -3t-16.5 36z" />
+<glyph unicode="&#xf04c;" d="M0 -64v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45zM896 -64v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf04d;" d="M0 -64v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M0 -96v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M0 -96v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32v710 q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M0 -96v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M1 64v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM1 525q-6 13 13 32l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1280" d="M154 704q0 26 19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1280" d="M90 128q0 26 19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45z" />
+<glyph unicode="&#xf055;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM320 576q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19 t19 45v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128z" />
+<glyph unicode="&#xf056;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM320 576q0 -26 19 -45t45 -19h768q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19 t-19 -45v-128z" />
+<glyph unicode="&#xf057;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM387 414q0 -27 19 -46l90 -90q19 -19 46 -19q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19 l90 90q19 19 19 46q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19  [...]
+<glyph unicode="&#xf058;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM252 621q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45q0 28 -18 46l-91 90 q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46z" />
+<glyph unicode="&#xf059;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM417 939q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26 t37.5 -59q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81q0 88 -55.5 163t-138.5 116t-170 41q-243 0 - [...]
+<glyph unicode="&#xf05a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM512 160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320 q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160zM640 1056q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160z" />
+<glyph unicode="&#xf05b;" d="M0 576v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143 q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45zM339 512q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112. [...]
+<glyph unicode="&#xf05c;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM429 480q0 13 10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23l-137 -137l137 -137q10 -10 10 -23t-10 -23l- [...]
+<glyph unicode="&#xf05d;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM346 640q0 26 19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45z" />
+<glyph unicode="&#xf05e;" d="M0 643q0 157 61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5t-61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61t-245 164t-163.5 246t-61 300zM224 643q0 -162 89 -299l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199 t-73 -274zM471 185q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5q0 161 -87 295z" />
+<glyph unicode="&#xf060;" d="M64 576q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5t32.5 -90.5v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90 z" />
+<glyph unicode="&#xf061;" d="M0 512v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M53 565q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651q37 -39 37 -91q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75 q-38 38 -38 90z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M53 704q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M0 416q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45t-19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123 q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22t-13.5 30t-10.5 24q-127 285 -127 451z" />
+<glyph unicode="&#xf065;" d="M0 -64v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23t-10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45zM781 800q0 13 10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448 q26 0 45 -19t19 -45v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23z" />
+<glyph unicode="&#xf066;" d="M13 32q0 13 10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23zM768 704v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10 t23 -10l114 -114q10 -10 10 -23t-10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M0 608v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M0 608v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M122.5 408.5q13.5 51.5 59.5 77.5l266 154l-266 154q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5 l-266 -154l266 -154q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 1 [...]
+<glyph unicode="&#xf06a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM624 1126l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5l18 621q0 12 -10 18 q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18zM640 161q0 -13 10 -23t23 -10h192q13 0 22 9.5t9 23.5v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190z" />
+<glyph unicode="&#xf06b;" d="M0 544v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68 t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23zM376 1120q0 -40 28 -68t68 -28h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68zM608 180q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5v56v468v192h-320 [...]
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M0 121q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96 q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t [...]
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M0 -160q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64zM256 640q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100 t113.5 -122.5t72.5 -150.5t27.5 -184q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-2 [...]
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M0 576q0 34 20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69t-20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69zM128 576q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5q-152 236 -381 353 q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353zM592 704q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34t-14 34 [...]
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M0 576q0 38 20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5q16 -10 16 -27q0 -7 -1 -9q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87 q-143 65 -263.5 173t-208.5 245q-20 31 -20 69zM128 576q167 -258 427 -375l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353zM592 704q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 [...]
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M16 61l768 1408q17 31 47 49t65 18t65 -18t47 -49l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126zM752 992l17 -457q0 -10 10 -16.5t24 -6.5h185q14 0 23.5 6.5t10.5 16.5l18 459q0 12 -10 19q-13 11 -24 11h-220 q-11 0 -24 -11q-10 -7 -10 -21zM768 161q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M0 477q-1 13 9 25l96 97q9 9 23 9q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16 l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M0 -128v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90zM128 -128h288v288h-288v-288zM128 224 h288v320h-288v-320zM128 608h288v288h-288v-288zM384 1088q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288zM480 -128h320v288h [...]
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M0 160v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23t-9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192 h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23zM0 1056v192q0 14 9 23t23 9h [...]
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M0 640q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5t-120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5 t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281z" />
+<glyph unicode="&#xf076;" d="M0 576v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5 t-98.5 362zM0 960v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45zM1024 960v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-1 [...]
+<glyph unicode="&#xf077;" horiz-adv-x="1792" d="M90 250.5q0 26.5 19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1792" d="M90 773.5q0 26.5 19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M0 704q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45z M640 1120q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26  [...]
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M0 1216q0 26 19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024 q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45zM384 0q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5zM1280 0q0  [...]
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5t-0.5 12.5zM73 56q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43 q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M64 64q0 26 19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M0 640q0 26 19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M0 32v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216z M256 128v384h256v-384h-256zM640 128v896h256v-896h-256zM1024 128v640h256v-640h-256zM1408 128v1024h256v-1024h-256z" />
+<glyph unicode="&#xf081;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 286q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109 q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 [...]
+<glyph unicode="&#xf082;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-192v608h203l30 224h-233v143q0 54 28 83t96 29l132 1v207q-96 9 -180 9q-136 0 -218 -80.5t-82 -225.5v-166h-224v-224h224v-608h-544 q-119 0 -203.5 84.5t-84.5 203.5z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M0 0v1280q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5zM128 0h1536v128h-1536v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM256 1216h384v128h-384v-128zM512 574 q0 -159 112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5zM640 574q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181zM736  [...]
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M0 752q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41q0 -17 -49 -66t-66 -49 q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5zM192 768q0 -80 56 -136t136 -56t136  [...]
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M0 549v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8 q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 [...]
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M0 768q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257t-94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25 t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224zM616 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5q10 - [...]
+<glyph unicode="&#xf087;" d="M0 128v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5zM128 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM384 128h32q13 0 [...]
+<glyph unicode="&#xf088;" d="M0 512v640q0 53 37.5 90.5t90.5 37.5h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186 q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5zM128 1088q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -4 [...]
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M0 889q0 37 56 46l502 73l225 455q19 41 49 41v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M0 940q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138z M128 940q0 -168 187 -355l581 -560l580 559q188 188 188 356q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5  [...]
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M0 288v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5q0 -4 1 -20t0.5 -26.5t-3 -23.5 t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5zM384 448v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45t-19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v28 [...]
+<glyph unicode="&#xf08c;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM223 1030q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86z M237 122h231v694h-231v-694zM595 122h231v388q0 38 7 56q15 35 45 59.5t74 24.5q116 0 116 -157v-371h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M0 320q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19 t-19 45zM416 672q0 -14 9 -23t23 -9t23 9t9 23v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832 q-119 0 -203.5 84.5t-84.5 203.5zM685 576q0 13 10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114  [...]
+<glyph unicode="&#xf090;" d="M0 448v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45t-19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45zM894.5 78.5q0.5 10.5 3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113 t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5q0 4 -1 20t-0. [...]
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M0 928v128q0 40 28 68t68 28h288v96q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91t97.5 -37q75 0 133.5 -45.5 t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41 [...]
+<glyph unicode="&#xf092;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204 q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t- [...]
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M0 -32v320q0 40 28 68t68 28h427q21 -56 70.5 -92t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68zM325 936q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69q-17 -40 -59 -40 h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40zM1152 64q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM1408 64q0 -26 19 -45t45 -19t45 19t19 45t-19  [...]
+<glyph unicode="&#xf094;" d="M0 433q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5q0 -165 -70 -327.5 t-196 -288t-281 -180.5q-124 -44 -326 -44q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5zM128 434q0 -40 12.5 -120t12.5 -121q0 - [...]
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M0 1069q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235 t235 -174q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21q0 -27 -10 -70.5t-21 -68.5q-2 [...]
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM128 288q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47 t-47 -113v-832z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M0 7v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62zM128 38l423 406l89 85l89 -85l423 -406 v1242h-1024v-1242z" />
+<glyph unicode="&#xf098;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 905q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5 q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 [...]
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M44 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5 q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M95 631v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255z" />
+<glyph unicode="&#xf09b;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44 l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5  [...]
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M0 96v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M0 32v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v608h-1664v-608zM128 1024h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600 q-13 0 -22.5 -9.5t-9.5 -22.5v-224zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M0 192q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM0 697v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5t259 -181.5q114 -113 181.5 -259t80.5 -306q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5 t-391.5 184.5q-25 2 -41.5 20t-16.5 43zM0 1201v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294q187 -186 294 -425.5t120 -501.5q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 [...]
+<glyph unicode="&#xf0a0;" d="M0 160v320q0 25 16 75l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113zM128 160q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5v320q0 13 -9.5 22.5t-22.5 9.5h-1216 q-13 0 -22.5 -9.5t-9.5 -22.5v-320zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM880 320q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z [...]
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M0 672v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50 t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113zM768 633q377 -42 768 -341v954q-394 -302 -768 -343v-270z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M0 128q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38 t-38 90zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM656 0q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5  [...]
+<glyph unicode="&#xf0a3;" d="M2 435q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70l-53 -186l188 -48 q40 -10 52 -51q10 -42 -20 -70l-138 -135l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70  [...]
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M0 128v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179q0 -105 -75.5 -181 t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5zM128 192q0 -26 19 -45t45 -19t45 19t19 45t-19  [...]
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M0 769q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5v-640 q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181zM128 768q0 -52 38 -90t90 -38h331q [...]
+<glyph unicode="&#xf0a6;" d="M0 640q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5t-90.5 -37.5h-640 q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5zM128 640q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -7 [...]
+<glyph unicode="&#xf0a7;" d="M0 640q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317q0 -142 -77.5 -230t-217.5 -87 l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5zM128 640q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 [...]
+<glyph unicode="&#xf0a8;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM251 640q0 -27 18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502 q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45z" />
+<glyph unicode="&#xf0a9;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM256 576q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18 l362 362l91 91q18 18 18 45t-18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128z" />
+<glyph unicode="&#xf0aa;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM252 641q0 -27 18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19 t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45t-18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45z" />
+<glyph unicode="&#xf0ab;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM252 639q0 -27 18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45t-18 45l-91 91 q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45z" />
+<glyph unicode="&#xf0ac;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM226 979q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18 q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 - [...]
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M21 0q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90zM256 64q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM768 960q0 185 131.5 316.5t316.5 131.5q58 0 121.5 -16.5 t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25q0 -39 -23 -106q-47 -134 -164.5 -217.5t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M0 64v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 576v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 1088v256q0 26 19 45t45 19h1664 q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM640 640h1024v128h-1024v-128zM1024 128h640v128h-640v-128zM1280 1152h384v128h-384v-128z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M5 1241q17 39 59 39h1280q42 0 59 -39q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M0 160v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM0 736v384q0 66 47 113t113 47h352v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113v-384h-1792z M640 1280h512v128h-512v-128zM768 512v128h256v-128h-256z" />
+<glyph unicode="&#xf0b2;" d="M0 -64v448q0 42 40 59q39 17 69 -14l144 -144l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45 v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19l-144 144l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14  [...]
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M0 671q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5zM128 1280q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181zM256 3q0 53 3.5 103.5 t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5q0 - [...]
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M16 1088q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l206 -207q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204t-85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88 q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204zM208 1088q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3 [...]
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M0 448q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5z" />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M115.5 -64.5q-34.5 63.5 21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399l503 -793q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5zM476 384h712l-272 429l-20 31v37v399h-128v-399v-37 l-20 -31z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M1 157q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148q4 -48 -10 -97q4 -1 12 -5 l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56l-507 -398l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 1 [...]
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M0 224v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68zM128 256h512v256q0 40 20 88t48 76l316 316v416h-384 v-416q0 -40 -28 -68t-68 -28h-416v-640zM213 1024h299v299zM768 -128h896v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640zM853 640h299v299z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M4 1023q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581 q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235q0 -117 -79 -19 [...]
+<glyph unicode="&#xf0c7;" d="M0 -32v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 0h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20 t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280zM384 0h768v384h-768v-384zM640 928q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v320q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t- [...]
+<glyph unicode="&#xf0c8;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5z" />
+<glyph unicode="&#xf0c9;" d="M0 64v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM0 576v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM0 1088v128q0 26 19 45t45 19h1408 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M0 128q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM0 640q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM0 1152q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM512 32v192 q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5zM512 544v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -2 [...]
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M15 438q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105v-159h-362q-6 36 -6 54zM19 -190 l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88q0 -80 -54.5 -126t-135. [...]
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M0 544v64q0 14 9 23t23 9h1728q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23zM384 972q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6l-14 2q-50 149 -103 205 q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743q-28 35 -51 80q-48 97 -48 188zM414 154q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q3 [...]
+<glyph unicode="&#xf0cd;" d="M0 -32v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-1472q-14 0 -23 -9t-9 -23zM0 1405q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5 t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 [...]
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M0 160v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113zM128 160q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM128 544q0 -14 9 -23t23 -9h320 q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM128 928q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM640 160q0 -14 9 -23t23 -9h320q14 0 2 [...]
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M27 160q0 27 18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45t-18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45zM128 1408l98 30l30 98l30 -98l98 -30l-98 -30l-30 -98l-30 98zM320 1216l196 60l60 196l60 -196l196 -60l-196 -60 l-60 -196l-60 196zM768 1408l98 30l30 98l30 -98l98 -30l-98 -30l-30 -98l-30 98zM1083 1062l107 -107l293 293l-107 107zM1408 768l98 30l30 98l30 -98l98 -30l-98 -30l-30 -98l-30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M64 192q0 26 19 45t45 19v320q0 8 -0.5 35t0 38t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45v-1024q0 -15 -4 -26.5t-13.5 -18.5t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5 q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5zM256 640h384v256h-158q-13 0 -22 -9l-195 -195 [...]
+<glyph unicode="&#xf0d2;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63 q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -28 [...]
+<glyph unicode="&#xf0d3;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5 q-104 0 -194.5 -28.5t-153 -76.5t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -16 [...]
+<glyph unicode="&#xf0d4;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM276 309q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117 q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-1 [...]
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M32 182q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65 t-59.5 -61.5t-24.5 -66q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131zM218 228q0 -70 35 -123.5t [...]
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M0 64v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45zM128 384q106 0 181 -75t75 -181h1152q0 106 75 181t181 75v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512zM640 640q0 70 21 142 t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142t-21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142zM762 791l77 -80q42 37 55 57h2v-288h-128v-96h384v96h-128v [...]
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M0 832q0 26 19 45t45 19h896q26 0 45 -19t19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M0 320q0 26 19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M64 640q0 26 19 45l448 448q19 19 45 19t45 -19t19 -45v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M0 192v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M0 32v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h608v1152h-640v-1120zM896 0h608q13 0 22.5 9.5t9.5 22.5v1120h-640v-1152z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M0 448q0 26 19 45t45 19h896q26 0 45 -19t19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45zM0 832q0 26 19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M0 448q0 26 19 45t45 19h896q26 0 45 -19t19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M0 832q0 26 19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M0 32v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM0 1098q0 78 41.5 130t118.5 52h1472 q65 0 112.5 -47t47.5 -113q0 -79 -49 -151t-122 -123q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142. [...]
+<glyph unicode="&#xf0e1;" d="M0 1217q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122zM19 -80v991h330v-991h-330zM531 -80q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5v-568 h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329z" />
+<glyph unicode="&#xf0e2;" d="M0 832v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298t-61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12 q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M40 736q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18 q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28q-10 0 -18 1.5t- [...]
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M0 384q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29q-141 221 -141 483zM128 384q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z M320 832q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5zM710 241q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91l101 382q6 26 -7.5 48.5t [...]
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M0 640q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5t-120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5 t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281zM128 640q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104. [...]
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M0 768q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257t-94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25 t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224zM128 768q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5  [...]
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M1 551l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M0 -32v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q [...]
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M0 681q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17 q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 [...]
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M0 96v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88v-672q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68zM256 1312q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5v64 q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64zM768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1280 640h299l-299 299v-299z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M0 960q0 99 44.5 184.5t117 142t164 89t186.5 32.5t186.5 -32.5t164 -89t117 -142t44.5 -184.5q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47q0 -46 -31.5 -71t-77.5 -25 q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268zM128 960q0 -101 68 -18 [...]
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M0 256q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22zM0 800v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23 t23 9q12 0 24 -10l319 -319q9 -9 9 -23t-9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M0 448q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5z M512 608q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M0 448q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5z M512 672q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M0 131q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89 q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10  [...]
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M0 768v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48 q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136q0 -62 -35.5 -111t-92.5 -70 [...]
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M0 96v832q0 92 66 158t158 66h64v-1280h-64q-92 0 -158 66t-66 158zM384 -128v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128v-1280h-1024zM640 1152h512v128h-512v-128zM1504 -128v1280h64q92 0 158 -66t66 -158v-832q0 -92 -66 -158t-158 -66h-64z " />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M0 128q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38 t-38 90zM656 0q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM256 480v736q0 26 19 45t45 19h1152q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158zM1408 704h64q80 0 136 56t56 136 t-56 136t-136 56h-64v-384z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M0 832v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128 q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111zM768 416v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5z" />
+<glyph unicode="&#xf0f6;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM384 160v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64 q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23zM384 416v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23zM384 672v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-70 [...]
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M0 -192v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM128 -128h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224h384v1536h-1152v-1536zM256 160v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5 [...]
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M0 -192v1280q0 26 19 45t45 19h320v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM128 -128h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224h384v1152h-256 v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152zM256 160v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 [...]
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M64 192q0 26 19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128 q-26 0 -45 19t-19 45zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM384 128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5zM896 800q0 [...]
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M0 96v832q0 92 66 158t158 66h32v-1280h-32q-92 0 -158 66t-66 158zM352 -128v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160v-1280h-1088zM512 416q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23v192 q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192zM640 1152h512v128h-512v-128zM1536 -128v1280h32q92 0 158 -66t66 -158v-832q0 -92 -66 -158t-158 [...]
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M0 512v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93l1 -3q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5 t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M64 1152l32 128h480l32 128h960l32 -192l-64 -32v-800l128 -192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320zM384 768q0 -53 37.5 -90.5t90.5 -37.5h128v384h-256v-256z" />
+<glyph unicode="&#xf0fd;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 192q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896z" />
+<glyph unicode="&#xf0fe;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 576q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45 v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M45 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23zM429 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23 l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M13 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23zM397 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10 l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M77 224q0 13 10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23zM77 608q0 13 10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23 l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M77 672q0 13 10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23zM77 1056q0 13 10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10 l50 -50q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M45 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M13 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M77 352q0 13 10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M77 800q0 13 10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M0 288v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113zM128 544q0 -13 9.5 -22.5 t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M0 96v96h160h1600h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68zM256 416v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113zM384 416q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5 t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-704zM864 112q0 -16 16 -16h160q16 0 16 16t-16 16h-160q-16 0 -16 -16z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M0 160v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-832q-66 0 -113 47t-47 113zM128 288q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM512 128 q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M0 128v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM96 288q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704zM288 1136 q0 -16 16 -16h160q16 0 16 16t-16 16h-160q-16 0 -16 -16zM304 128q0 -33 23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5z" />
+<glyph unicode="&#xf10c;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M0 192v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136z M896 192v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136v-384q [...]
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M0 832v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136zM896 832v384 q0 80 56 136t136 56h384q80 0 136 -56t56 -136v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68 [...]
+<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M0 640q0 66 47 113t113 47t113 -47t47 -113t-47 -113t-113 -47t-113 47t-47 113zM176 1088q0 73 51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5t-51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5zM208 192q0 60 42 102t102 42q59 0 101.5 -42t42.5 -102t-42.5 -102 t-101.5 -42q-60 0 -102 42t-42 102zM608 1280q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM672 0q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-9 [...]
+<glyph unicode="&#xf111;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M0 896q0 26 19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101 t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19l-512 512q-19 19 -19 45z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M0 496q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218q0 -87 -27 -168q136 -160 136 -398q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86t-170 -47.5t-171.5 -22t-167 -4.5 q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331zM224 320q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5q0 120 -69 [...]
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158zM128 224q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64 q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158zM128 331l256 315q44 53 116 87.5 t140 34.5h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-853zM171 163q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39q0 35 -53 35h-1088q- [...]
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM384 896q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5zM402 461q-8 25 4 48.5t3 [...]
+<glyph unicode="&#xf119;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM384 896q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5zM402 307q37 121 138 195 [...]
+<glyph unicode="&#xf11a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM384 448q0 26 19 45t45 19h640q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45zM384 896q0 53 37.5 90.5t90.5 37.5t9 [...]
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M0 512q0 212 150 362t362 150h896q212 0 362 -150t150 -362t-150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150t-150 362zM192 448q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23v128 q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128zM1152 384q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 [...]
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M0 128v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5zM128 128h1664v896h-1664v-896zM256 272v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM256 528v96 q0 16 16 16h224q16 0 16 -16v-96q0 -16 -16 -16h-224q-16 0 -16 16zM256 784v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM512 272v96q0 16 16 16h864q16 0 16 -16v-96q0 -16 -16 -16 [...]
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M64 1280q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64zM320 320v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86 q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -1 [...]
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M64 1280q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64zM320 320v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86 q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -1 [...]
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M13 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23zM640 32v64q0 14 9 23t23 9h960q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-960 q-14 0 -23 9t-9 23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M45 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23zM712 -52l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5 l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5zM1293 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -46 [...]
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M0 896q0 26 19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45l397 -397v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45zM384 896q0 26 19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221 q169 -173 169 -509q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 - [...]
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M2 900.5q9 27.5 54 34.5l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5z M832 310l59 -31l318 -168l-60 355l-12 66l49 47l257 250l-356 52l-66 10l-30 60l-159 322v-963z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M2 561q-5 22 4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M0 928v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864 q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23zM512 301l595 595h-595v-595zM557 256h595v595z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M0 64q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136 q0 -52 -26 -96.5t-70 -69.5q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136zM96 64q0 -40 28 -68t68 -28t68  [...]
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M0 448q0 14 9 23t23 9h320q14 0 23 -9t9 -23t-9 -23t-23 -9h-320q-14 0 -23 9t-9 23zM16 1088q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56l-239 -18l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68 l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204zM128 32q0 13 9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23zM544 -96v320q0 14 9 23t23 9t23 -9 [...]
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M96.5 986q-2.5 15 5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5t-10.5 37.5v45q0 83 65 156.5 t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25zM384 40v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28v-240q0  [...]
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M0 64v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45zM128 1152v192q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-192 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M98 1344q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45zM128 64v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf12b;" d="M5 0v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258zM1013 713q0 64 26 117t65 86.5 t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h2 [...]
+<glyph unicode="&#xf12c;" d="M5 0v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258zM1015 -183q0 64 26 117t65 86.5 t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126v-206h [...]
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M1.5 146.5q5.5 37.5 30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5zM128 128h768l336 384h-768z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M0 0v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5 q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143q0 -81 -44.5 -135t-123.5 -54q-41 0 -77 [...]
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M0 704v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45 t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5zM256 704v512q0 132 94 226t226 94t226 -94t94 -226v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M13 64q0 13 10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23t-10 -23l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -221 -147.5 -384.5 t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23zM128 704v128q0 26 19 45t45 [...]
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M0 576v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150t-33.5 170.5zM640 79 q119 63 213 137q235 184 235 360v640h-448v-1137z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M0 -128v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90zM128 -128h1408v1024h-1408v-1024z M384 1088q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288zM1152 1088q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M3.5 940q-8.5 25 3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96 q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5 [...]
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M36 464l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85 q-3 -1 -9 -1q-14 0 -23 9l-64 64q-17 19 -5 39zM1248 1088q0 -40 28 -68t68 -28t68 28t28 68t-28 68t-68 28t-68 -28t-28 -68z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M0 0l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334z" />
+<glyph unicode="&#xf137;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM346 640q0 -26 19 -45l454 -454q19 -19 45 -19t45 19l102 102q19 19 19 45t-19 45l-307 307l307 307 q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45z" />
+<glyph unicode="&#xf138;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM506 288q0 -26 19 -45l102 -102q19 -19 45 -19t45 19l454 454q19 19 19 45t-19 45l-454 454 q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45z" />
+<glyph unicode="&#xf139;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM250 544q0 -26 19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19l102 102 q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45z" />
+<glyph unicode="&#xf13a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM250 736q0 -26 19 -45l454 -454q19 -19 45 -19t45 19l454 454q19 19 19 45t-19 45l-102 102 q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M0 1408h1408l-128 -1438l-578 -162l-574 162zM262 1114l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674l16 175h-884z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M12 75l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208l59 297h1505l-266 -1333l-804 -267z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M0 0v352q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q- [...]
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M0 96v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181v-320h736q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28 t-28 68z" />
+<glyph unicode="&#xf140;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM256 640q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362zM384 640q0 -159 112.5 -271.5t271.5 -11 [...]
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M0 608v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM512 608v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM1024 608v192q0 40 28 68t68 28h192 q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M0 96v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM0 608v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM0 1120v192q0 40 28 68t68 28h192q40 0 68 -28 t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68z" />
+<glyph unicode="&#xf143;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 256q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z M256 575q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10t9 24q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128zM256 959q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t [...]
+<glyph unicode="&#xf144;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM512 320q0 -37 32 -56q16 -8 32 -8q17 0 32 9l544 320q32 18 32 55t-32 55l-544 320q-31 19 -64 1 q-32 -19 -32 -56v-640z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M54 448.5q0 53.5 37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136t-136 56t-136 -56l-125 126q-37 37 -37 90.5z M342 512q0 -26 19 -45l362 -362q18 -18 45 -18t45 18l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45zM452 512l572 572l316 -316l-572 -572z" />
+<glyph unicode="&#xf146;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 576q0 -26 19 -45t45 -19h896q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128 z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM128 288q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47 t-47 -113v-832zM256 672v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M3 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M3 1261q9 19 29 19h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34z" />
+<glyph unicode="&#xf14a;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM218 640q0 -26 19 -45l358 -358q19 -19 45 -19t45 19l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19 t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45z" />
+<glyph unicode="&#xf14b;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 128h288l544 544l-288 288l-544 -544v-288zM352 320v56l52 52l152 -152l-52 -52h-56v96h-96zM494 494 q-14 13 3 30l291 291q17 17 30 3q14 -13 -3 -30l-291 -291q-17 -17 -30 -3zM864 1024l288 -288l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28z" />
+<glyph unicode="&#xf14c;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM282 320q0 -26 19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59 v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45z" />
+<glyph unicode="&#xf14d;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 448q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5t224 23.5v-160 q0 -42 40 -59q12 -5 24 -5q26 0 45 19l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5z" />
+<glyph unicode="&#xf14e;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 241v542l512 256v-542zM640 448l256 128l-256 128v-256z" />
+<glyph unicode="&#xf150;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-960 q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM391 861q17 35 57 35h640q40 0 57 -35q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66z" />
+<glyph unicode="&#xf151;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-960 q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM391 419q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66q-17 -35 -57 -35h-640q-40 0 -57 35z" />
+<glyph unicode="&#xf152;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -14 9 -23t23 -9h960q14 0 23 9t9 23v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960z M512 320v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52t-27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M0 514v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5 t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t [...]
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M0 32v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215 h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M52 171l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242 t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t- [...]
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M0 605v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171 q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M4 1360q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103 q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9. [...]
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M0 256v128q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315t-126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9 h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23zM487 747h320q106 0 171 62t65 162t-65 162t-171 62h-320v-448z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M0 672v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111 q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11  [...]
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M56 0l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89 t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200zM522 182q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30t24.5 40t9.5 51q0 36 -15  [...]
+<glyph unicode="&#xf15b;" d="M0 -160v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472z" />
+<glyph unicode="&#xf15c;" d="M0 -160v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM384 160q0 -14 9 -23t23 -9h704q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64zM384 416q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64zM384 672q0 -14 9 -23t23 -9h704q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64zM1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM899 768v106h70l230 662h162l230 -662h70v-106h-288v106h75l-47 144h-243l-47 -144h75v-106 h-287zM988 -166l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121v-233h-584v90zM1191 1128h [...]
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM899 -150h70l230 662h162l230 -662h70v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287 v106zM988 768v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248v119h121v-233h-584zM1191 104h1 [...]
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM896 -32q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9 t-9 23v192zM896 288v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23zM896 800v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-448q-14 0 - [...]
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM896 -32q0 14 9 23t23 9h256q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9 t-9 23v192zM896 288v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23zM896 800v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-640q-14 0 - [...]
+<glyph unicode="&#xf162;" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM946 261q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5q0 -62 -13 -121.5t-41 -114 t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5zM976 1351l192 185h123v-654h165v-114h- [...]
+<glyph unicode="&#xf163;" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM946 1285q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5q0 -62 -13 -121.5t-41 -114 t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5zM976 327l192 185h123v-654h165v-114h- [...]
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M0 64v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45zM128 192q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45zM480 64v641q0 25 18 43.5t43 20.5q24 2 76 59 t101 121q68 87 101 120q18 18 31 48t17.5 48.5t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -1 [...]
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M0 448q0 -26 19 -45t45 -19h288q26 0 45 19t19 45v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640zM128 960q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45zM480 447v641q0 26 19 44.5t45 19.5q35 1 158 44 q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76q55 -61 55 -149q-1 -78 -57.5 -135t-134.5 -57h-277q4 -14 8 -24 [...]
+<glyph unicode="&#xf166;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM218 366q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73 q20 84 20 260q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5q-20 -87 -20 -260zM300 551v70h232v-70h-80v-423h-74v423h-78zM396 1313l24 -69t23 -69q35 -103 46 -158v-201h74v2 [...]
+<glyph unicode="&#xf167;" d="M27 260q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99q-26 112 -26 350zM138 509h105v-569h100v569h107v94h-312 v-94zM266 1536h106l71 -263l68 263h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187zM463 43q0 -49 8 -73q12 -37 58 -37q48 0 102 61v-54h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391zM6 [...]
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M5 384q-10 17 0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45l164 -286q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17zM536 539q18 32 531 942q25 45 64 45h241q22 0 31 -15q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37 q-10 -15 -32 -15h-239q-42 0 -66 45z" />
+<glyph unicode="&#xf169;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM227 396q8 -13 24 -13h185q31 0 50 36l199 352q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29 l125 -216v-1l-196 -346q-9 -14 0 -28zM638 516q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1l409 723q8 16 0 28q-7 12 -24 12h-187q-30 0 -49 -35z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M0 640q0 96 1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150t-1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58 t-69.5 123q-14 65 -21.5 147.5t-8.5 136.5t-1 150zM640 320q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54t-30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M64 558l338 271l494 -305l-342 -285zM64 1099l490 319l342 -285l-494 -304zM407 166v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284l147 96v-108l-490 -293v-1l-1 1l-1 -1v1zM896 524l494 305l338 -271l-489 -319zM896 1133l343 285l489 -319l-338 -270z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M0 -255v736h121v-618h928v618h120v-701l-1 -35v-1h-1132l-35 1h-1zM221 -17v151l707 1v-151zM227 243l14 150l704 -65l-13 -150zM270 563l39 146l683 -183l-39 -146zM395 928l77 130l609 -360l-77 -130zM707 1303l125 86l398 -585l-124 -85zM1136 1510l149 26l121 -697 l-149 -26z" />
+<glyph unicode="&#xf16d;" d="M0 69v1142q0 81 58 139t139 58h1142q81 0 139 -58t58 -139v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139zM171 110q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62 q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648zM461 643q0 -124 90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5t-90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5zM1050 1003q0 -29 20 -49t49 -20h174q29 0 49 20t [...]
+<glyph unicode="&#xf16e;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM274 640q0 -88 62 -150t150 -62t150 62t62 150t-62 150t-150 62t-150 -62t-62 -150zM838 640q0 -88 62 -150 t150 -62t150 62t62 150t-62 150t-150 62t-150 -62t-62 -150z" />
+<glyph unicode="&#xf170;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM309 384h94l104 160h522l104 -160h94l-459 691zM567 608l201 306l201 -306h-402z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M0 1222q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34 t-6 39.5t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158zM173 285l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -18 [...]
+<glyph unicode="&#xf172;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM260 1060q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63 q24 13 39.5 23t31 29t19.5 40q48 267 80 473q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54zM385 384q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 [...]
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M78 779v217q91 30 155 84q64 55 103 132q39 78 54 196h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170z" />
+<glyph unicode="&#xf174;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM413 744h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49v181 q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M3 237q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19t-5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M3 1043q-8 19 5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M64 637q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M0 544v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M0 634q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32 q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503zM683 1131q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72 [...]
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M0 -27v557h682v-651zM0 614v565l682 94v-659h-682zM757 -131v661h907v-786zM757 614v669l907 125v-794h-907z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M0 337v430q0 42 30 72t73 30q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30t-73 30t-30 73zM241 886q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20l-71 -131q107 -55 171 -153.5t64 -215.5 h-925zM245 184v666h918v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78zM455 1092q [...]
+<glyph unicode="&#xf17c;" d="M11 -115q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5 t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 [...]
+<glyph unicode="&#xf17d;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM112 640q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81t99.5 48l37 13 q4 1 13 3.5t13 4.5q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21zM126 775q302 0 606 80q-120 213 -244 378q-138 -65 -234 -186t-128 -272zM350 134q184 -150 418 -150q132 0 256 52q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-10 [...]
+<glyph unicode="&#xf17e;" d="M0 1024q0 159 112.5 271.5t271.5 112.5q130 0 234 -80q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225 t-55.5 273.5q0 73 16 150q-80 104 -80 234zM376 399q0 -92 122 -157.5t291 -65.5q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16 [...]
+<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M0 640q0 75 53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41l619 619l2 -3q53 -53 53 -128t-53 -128l-587 -587 q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128zM302 660q0 21 14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15q-4 0 -6 1q-18 2  [...]
+<glyph unicode="&#xf181;" d="M0 -64v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM160 192q0 -14 9 -23t23 -9h480q14 0 23 9t9 23v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024zM832 576q0 -14 9 -23t23 -9h480q14 0 23 9t9 23 v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M0 480q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192 q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43q-40 0 -68 28t-28 68zM416 1280q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 1 [...]
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M0 416v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68z M288 1280q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5z" />
+<glyph unicode="&#xf184;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM399.5 766q8.5 -37 24.5 -59l349 -473l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5 t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M44 363q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29q-4 -15 -20 -20 l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20zM320 640q0 -117 45.5 -223.5t123 -184t [...]
+<glyph unicode="&#xf186;" d="M0 640q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M64 1088v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1536q-26 0 -45 19t-19 45zM128 -64v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM704 704q0 -26 19 -45t45 -19h256 q26 0 45 19t19 45t-19 45t-45 19h-256q-26 0 -45 -19t-19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M32 576q0 26 19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19t19 -45t-19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19 t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 [...]
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M-1 1004q0 11 3 16l4 6q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24 q17 19 38 30q53 26 239 24q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 6 [...]
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M0 391q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5q0 -68 -37 -139.5 t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5zM181 320q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5q-9 96 -89 170t-208.5 109t-274.5 21q-223  [...]
+<glyph unicode="&#xf18b;" d="M0 638q0 187 83.5 349.5t229.5 269.5t325 137v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495zM398 -34q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211q-171 -94 -368 -94q-196 0 -367 94zM898 909v485q179 -30 325 -137t229.5 -269.5 t83.5 -349.5q0 -280 -181 -495q-204 99 -330.5 306.5t-126.5 459.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M0 -211q0 19 13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23 t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 [...]
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M21 217v66h1238v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5zM21 354v255h1238v-255h-1238zM21 682v255h1238v-255h-1238zM21 1010v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5v-67h-1238z" />
+<glyph unicode="&#xf18e;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM384 544v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23t-9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5z" />
+<glyph unicode="&#xf190;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM384 640q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23z" />
+<glyph unicode="&#xf191;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-960 q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM448 640q0 33 27 52l448 320q17 12 37 12q26 0 45 -19t19 -45v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52z" />
+<glyph unicode="&#xf192;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 640q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M0 320q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5zM416 1348q-2 16 6 42 q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455l198 99l58 -114l-256 -128q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42. [...]
+<glyph unicode="&#xf194;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM128 806q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5 q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237q104 139 172.5 292.5t82.5 226.5q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 1 [...]
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M0 608v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31 l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM128 288q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47 t-47 -113v-832zM256 672v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-1 [...]
+<glyph unicode="&#xf197;" horiz-adv-x="2176" d="M0 576q0 12 38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113q-110 -64 -268 -64h-128v64 h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5zM323 336h29q157 0 273 64h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96zM [...]
+<glyph unicode="&#xf198;" horiz-adv-x="1664" d="M0 796q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5 t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164 [...]
+<glyph unicode="&#xf199;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 352q0 -40 28 -68t68 -28h832q40 0 68 28t28 68v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99 q-98 -69 -164 -69t-164 69q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436zM256 928q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13t21.5 -9.5t22.5 -7.5t20.5 -2.5t20. [...]
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" d="M0 640q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM41 640q0 -173 68 -331.5t182.5 -273t273 -182.5t331.5 -68t331.5 68t273 182.5t182.5 273t68 331.5 t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5zM127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM254 1062q105 160 274.5 253.5t367.5 93.5q147 0 280.5  [...]
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" d="M0 455q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360l272 133v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5zM1134 860v172q277 -33 481 -157l140 79l37 -390l-525 114l147 83 q-119 70 -280 99z" />
+<glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M0 -128q0 26 20.5 45t48.5 19h1782q28 0 48.5 -19t20.5 -45v-128h-1920v128zM0 1024v128l960 384l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128zM128 0v64q0 26 20.5 45t48.5 19h59v768h256v-768h128v768h256v-768h128v768h256 v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664z" />
+<glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M0 1024q0 23 22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31t-22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433 q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31zM512 384l18 316l574 -181q22 -7 48 -7t48 7l574 181l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128z" />
+<glyph unicode="&#xf19e;" d="M109 1536q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610l13 -707q-62 11 -105 11 q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287z" />
+<glyph unicode="&#xf1a0;" horiz-adv-x="1280" d="M111 182q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5t-59.5 -93 t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131zM297 228q0 -56 23.5  [...]
+<glyph unicode="&#xf1a1;" horiz-adv-x="1984" d="M0 722q0 94 66 160t160 66q83 0 148 -55q248 158 592 164l134 423q4 14 17.5 21.5t28.5 4.5l347 -82q22 50 68.5 81t102.5 31q77 0 131.5 -54.5t54.5 -131.5t-54.5 -132t-131.5 -55q-76 0 -130.5 54t-55.5 131l-315 74l-116 -366q327 -14 560 -166q64 58 151 58 q94 0 160 -66t66 -160q0 -62 -31 -114t-83 -82q5 -33 5 -61q0 -121 -68.5 -230.5t-197.5 -193.5q-125 -82 -285.5 -125.5t-335.5 -43.5q-176 0 -336.5 43.5t-284.5 125.5q-129 84 -197.5 193t-68.5 231q0 29 5 66q-48 [...]
+<glyph unicode="&#xf1a2;" d="M0 193v894q0 133 94 227t226 94h896q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227zM155 709q0 -37 19.5 -67.5t52.5 -45.5q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54 q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14 [...]
+<glyph unicode="&#xf1a3;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM320 502q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14 q19 0 32.5 -14t13.5 -33v-54l60 -28l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122zM806 500q0 -80 58 -137t139 -57t138.5 57t57.5 139v122h-150v-126q0 -20  [...]
+<glyph unicode="&#xf1a4;" horiz-adv-x="1920" d="M0 336v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58l-131 61v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5zM1062 332 v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275h328v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5z" />
+<glyph unicode="&#xf1a5;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM64 640h704v-704h480q93 0 158.5 65.5t65.5 158.5v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480z " />
+<glyph unicode="&#xf1a6;" horiz-adv-x="2048" d="M0 271v697h328v286h204v-983h-532zM205 435h123v369h-123v-369zM614 271h205v697h-205v-697zM614 1050h205v204h-205v-204zM901 26v163h328v82h-328v697h533v-942h-533zM1106 435h123v369h-123v-369zM1516 26v163h327v82h-327v697h532v-942h-532zM1720 435h123v369h-123 v-369z" />
+<glyph unicode="&#xf1a7;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM293 388l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229t-88.5 229t-213.5 95q-74 0 -141 -36h-186v-840z M504 804v277q28 17 70 17q53 0 91 -45t38 -109t-38 -109.5t-91 -45.5q-43 0 -70 15zM636 -39l211 41v206q51 -19 117 -19q125 0 213 95t88 229t-88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101v-636zM847 377 [...]
+<glyph unicode="&#xf1a8;" horiz-adv-x="2038" d="M41 455q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80 t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 [...]
+<glyph unicode="&#xf1a9;" d="M0 520q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5 t19.5 -177.5q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302zM333 256q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t [...]
+<glyph unicode="&#xf1aa;" d="M0 78q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160l151 -152l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5 t-60 145.5zM2 1202q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5t149.5 -87.5l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30  [...]
+<glyph unicode="&#xf1ab;" d="M0 -16v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5q20 0 20 -21v-418l147 -47v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3zM39 15l694 232v1032l-694 -233v-1031zM147 293q6 4 82 92 q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 [...]
+<glyph unicode="&#xf1ac;" horiz-adv-x="1792" d="M0 -96v1088q0 66 47 113t113 47h128q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113zM512 -96v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-163q58 -34 93 -93t35 -128v-768q0 -106 -75 -181 t-181 -75h-864q-66 0 -113 47t-47 113zM640 896h896v256h-160q-40 0 -68 28t-28 68v160h-640v-512zM736 0q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128zM736 256q0  [...]
+<glyph unicode="&#xf1ad;" d="M0 -192v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM256 160q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM256 416q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM256 672q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM256 928q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0  [...]
+<glyph unicode="&#xf1ae;" horiz-adv-x="1280" d="M64 1056q0 40 28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68zM416 1152q0 93 65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5z" />
+<glyph unicode="&#xf1b0;" horiz-adv-x="1664" d="M0 724q0 80 42 139.5t119 59.5q76 0 141.5 -55.5t100.5 -134t35 -152.5q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152zM256 19q0 86 56 191.5t139.5 192.5t187.5 146t193 59q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45 t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146zM333 1163q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5q0 -60 -19 -113.5t-63 -92.5t-105 [...]
+<glyph unicode="&#xf1b1;" horiz-adv-x="768" d="M64 1008q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5z" />
+<glyph unicode="&#xf1b2;" horiz-adv-x="1792" d="M0 256v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65zM134 1026l698 -254l698 254l-698 254zM896 -93l640 349v636l-640 -233v-752z" />
+<glyph unicode="&#xf1b3;" horiz-adv-x="2304" d="M0 96v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70v-400l434 -186q36 -16 57 -48t21 -70v-416q0 -36 -19 -67t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4 l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67zM172 531l404 -173l404 173l-404 173zM640 -96l384 192v314l-384 -164v-342zM647 1219l441 -189l441 189l-441 189zM1152 651l384 165v266l [...]
+<glyph unicode="&#xf1b4;" horiz-adv-x="2048" d="M0 22v1260h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5 t45.5 113.5q0 144 -190 144h-260v-294zM1137 477q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658q0 -111 57.5 -171.5t166.5 -60.5q63 0 122 32t76 87h221q-100 -307 -427 - [...]
+<glyph unicode="&#xf1b5;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM128 254h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5t-56.5 60.5t-79 29.5 t-97 8.5h-371v-787zM301 388v217h189q124 0 124 -113q0 -104 -128 -104h-185zM301 723v184h163q119 0 119 -90q0 -94 -106 -94h-176zM838 538q0 -135 79 -217t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20q-68 0 -104 [...]
+<glyph unicode="&#xf1b6;" horiz-adv-x="2048" d="M0 764q0 86 61 146.5t146 60.5q73 0 130 -46t73 -117l783 -315q49 29 106 29q14 0 21 -1l173 248q1 114 82 194.5t195 80.5q115 0 196.5 -81t81.5 -196t-81.5 -196.5t-196.5 -81.5l-265 -194q-8 -80 -67.5 -133.5t-138.5 -53.5q-73 0 -130 46t-73 117l-783 315 q-51 -30 -106 -30q-85 0 -146 61t-61 147zM55 764q0 -64 44.5 -108.5t107.5 -44.5q11 0 33 4l-64 26q-33 14 -52.5 44.5t-19.5 66.5q0 50 35.5 85.5t85.5 35.5q20 0 41 -8v1l76 -31q-20 37 -56.5 59t-78.5 22q-63 0 -1 [...]
+<glyph unicode="&#xf1b7;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM128 693q0 -53 38 -91t92 -38q36 0 66 18l489 -197q10 -44 45.5 -73t81.5 -29q50 0 86.5 34t41.5 83l167 122 q71 0 122 50.5t51 122.5t-51 123t-122 51q-72 0 -122.5 -50.5t-51.5 -121.5l-108 -155q-2 0 -6.5 0.5t-6.5 0.5q-35 0 -67 -19l-489 197q-10 44 -45.5 73t-80.5 29q-54 0 -92 -38t-38 -92zM162 693q0 40 28 68t68 28q27 0 49.5 -1 [...]
+<glyph unicode="&#xf1b8;" horiz-adv-x="1792" d="M16 970l433 -17l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188zM270.5 158q-3.5 28 4 65t12 55t21.5 64t19 53q78 -12 509 -28l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5 q-11 27 -14.5 55zM294 1124l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5t36 -39.5t32 -35q-47 -63 -265 -435l-317 187zM782 1524l405 -1q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 - [...]
+<glyph unicode="&#xf1b9;" horiz-adv-x="1984" d="M0 160v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h704q98 0 179 -63.5t104 -157.5l105 -419h28q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-128v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-928v-128q0 -80 -56 -136 t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23zM160 448q0 -66 47 -113t113 -47t113 47t47 113t-47 113t-113 47t-113 -47t-47 -113zM516 768h952l-89 357q-2 8 -14 17.5t-21 9.5h-704q-9 0 -21 -9.5t-1 [...]
+<glyph unicode="&#xf1ba;" horiz-adv-x="1984" d="M0 32v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h64q98 0 179 -63.5t104 -157.5l105 -419h28q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-128v-64q0 -80 -56 -136t-136 -56 t-136 56t-56 136v64h-928v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23zM160 320q0 -66 47 -113t113 -47t113 47t47 113t-47 113t-113 47t-113 -47t-47 -113zM516 640h952l-89 357q [...]
+<glyph unicode="&#xf1bb;" d="M32 64q0 26 19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45t-19 -45t-45 -19 h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45z" />
+<glyph unicode="&#xf1bc;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM237 886q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37q159 0 309.5 -34t253.5 -95q21 -12 40 -12 q29 0 50.5 20.5t21.5 51.5q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5zM289 637q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5  [...]
+<glyph unicode="&#xf1bd;" d="M0 11v1258q0 58 40.5 98.5t98.5 40.5h1258q58 0 98.5 -40.5t40.5 -98.5v-1258q0 -58 -40.5 -98.5t-98.5 -40.5h-1258q-58 0 -98.5 40.5t-40.5 98.5zM71 11q0 -28 20 -48t48 -20h1258q28 0 48 20t20 48v1258q0 28 -20 48t-48 20h-1258q-28 0 -48 -20t-20 -48v-1258z M121 11v141l711 195l-212 439q4 1 12 2.5t12 1.5q170 32 303.5 21.5t221 -46t143.5 -94.5q27 -28 -25 -42q-64 -16 -256 -62l-97 198q-111 7 -240 -16l188 -387l533 145v-496q0 -7 -5.5 -12.5t-12.5 -5.5h-1258q-7 0 -12.5 5.5t-5.5 1 [...]
+<glyph unicode="&#xf1be;" horiz-adv-x="2304" d="M0 405l17 128q2 9 9 9t9 -9l20 -128l-20 -126q-2 -9 -9 -9t-9 9zM79 405l23 207q0 9 9 9q8 0 10 -9l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10zM169 405l21 245q2 12 12 12q11 0 11 -12l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11zM259 405l21 252q0 13 13 13 q12 0 14 -13l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13zM350 405l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5zM401 159zM442 405l18 380q2 18 18 1 [...]
+<glyph unicode="&#xf1c0;" d="M0 0v170q119 -84 325 -127t443 -43t443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128zM0 384v170q119 -84 325 -127t443 -43t443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128zM0 768 v170q119 -84 325 -127t443 -43t443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128zM0 1152v128q0 69 103 128t280 93.5t385 34.5t385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-2 [...]
+<glyph unicode="&#xf1c1;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM257 60q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4 q52 85 107 197q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0  [...]
+<glyph unicode="&#xf1c2;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM233 661h70l164 -661h159l128 485q7 20 10 46q2 16 2 24 h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 4 [...]
+<glyph unicode="&#xf1c3;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM429 0h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4 h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107h-290v-107h68l189 -2 [...]
+<glyph unicode="&#xf1c4;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM416 0h327v106h-93v167h137q76 0 118 15q67 23 106.5 87 t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92v-106zM650 386v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15h-119zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
+<glyph unicode="&#xf1c5;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM256 0v192l192 192l128 -128l384 384l320 -320v-320 h-1024zM256 704q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
+<glyph unicode="&#xf1c6;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536zM384 192q0 25 8 52q21 63 120 396 v128h128v-128h79q22 0 39 -13t23 -34l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5zM512 192q0 -26 37.5 -45t90.5 -19t90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45zM512 896h128v1 [...]
+<glyph unicode="&#xf1c7;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM256 288v192q0 14 9 23t23 9h131l166 167q16 15 35 7 q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23zM762 206.5q1 -26.5 20 -44.5q20 -17 44 -17q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52  [...]
+<glyph unicode="&#xf1c8;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM256 256v384q0 52 38 90t90 38h384q52 0 90 -38t38 -90 v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90zM960 403v90l265 266q9 9 23 9q4 0 12 -2q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
+<glyph unicode="&#xf1c9;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM254 429q-14 19 0 38l226 301q8 11 21 12.5t24 -6.5 l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5zM636 43l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5l-63 10 [...]
+<glyph unicode="&#xf1ca;" d="M39 1286h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132 t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-1 [...]
+<glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M0 367v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64v-546q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64zM154 511l193 129l-193 129v-258zM216 367l603 -402v359l-334 223zM216 913l269 -180l334 223v359zM624 640 l272 -182l272 182l-272 182zM973 -35l603 402l-269 180l-334 -223v-359zM973 956l334 -223l269 180l-603 402v-359zM1445 640l193 -129v258z" />
+<glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M0 407q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5 h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 8 [...]
+<glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M0 640q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM128 640q0 -190 90 -361l194 194q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361zM512 640 q0 -159 112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5zM535 -38q171 -90 361 -90t361 90l-194 194q-82 -28 -167 -28t-167 28zM535 1318l194 -194q82 28 16 [...]
+<glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M0 640q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5 q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348z" />
+<glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115 [...]
+<glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M0 640q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM44 640q0 -173 67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331 t-67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331zM87 640q0 205 98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212l-83 -28q22 -60 49 -112l-57 [...]
+<glyph unicode="&#xf1d2;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 218q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5 t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85q0 -53 41 -77v-3q-113 -37 -113 -139zM382 225q0 64  [...]
+<glyph unicode="&#xf1d3;" horiz-adv-x="1792" d="M68 7q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47q98 0 218 47v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58q0 -31 22.5 -51.5t58 -32 t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5zM272 18q0 -101 172 -101q151 0 151 105q0 100 -165 100q-158 0 -158 -104zM293 775q0 -135 [...]
+<glyph unicode="&#xf1d4;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM368 1135l323 -589v-435h134v436l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3 q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150z" />
+<glyph unicode="&#xf1d5;" horiz-adv-x="1280" d="M57 953q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5t-78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153 t-153 102t-186 38t-186 -38t-153 -102t-102 -153t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265zM113.5 38.5q10.5 121.5 29.5 217t54 186t69 155.5t74 125q61 90 132 16 [...]
+<glyph unicode="&#xf1d6;" horiz-adv-x="1792" d="M18 264q0 275 252 466q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5 t3.5 -5t2 -3.5q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35. [...]
+<glyph unicode="&#xf1d7;" horiz-adv-x="2048" d="M0 858q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490z M380 1075q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5t-25 66t-66 25q-43 0 -76 -25.5t-33 -65.5zM816 404q0 143 81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5q0 -117 -68.5  [...]
+<glyph unicode="&#xf1d8;" horiz-adv-x="1792" d="M0 508q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55z" />
+<glyph unicode="&#xf1d9;" horiz-adv-x="1792" d="M0 508q-3 39 32 59l1664 960q35 21 68 -2q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55zM209 522l336 -137l863 639l-478 -797l492 -201 l221 1323z" />
+<glyph unicode="&#xf1da;" d="M0 832v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298t-61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12 q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45zM512 4 [...]
+<glyph unicode="&#xf1db;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5z" />
+<glyph unicode="&#xf1dc;" horiz-adv-x="1792" d="M62 1338q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -1 [...]
+<glyph unicode="&#xf1dd;" horiz-adv-x="1280" d="M24 926q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108 q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179q-64 117 -64 259z" />
+<glyph unicode="&#xf1de;" d="M0 736v64q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-64q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM128 -96v672h256v-672q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM128 960v416q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-416h-256zM512 224v64q0 40 28 68 t68 28h320q40 0 68 -28t28 -68v-64q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 64h256v-160q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v160zM640 448v928q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-928h-256zM1024 992v6 [...]
+<glyph unicode="&#xf1e0;" d="M0 640q0 133 93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86q133 0 226.5 -93.5t93.5 -226.5 t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5z" />
+<glyph unicode="&#xf1e1;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 640q0 -88 62.5 -150.5t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5 t150.5 62.5t62.5 150.5t-62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 [...]
+<glyph unicode="&#xf1e2;" horiz-adv-x="1792" d="M0 448q0 143 55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68l243 244l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5 t-225 150t-150 225t-55.5 273.5zM170 615q10 -24 35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49t-34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49zM1376 1472q0 13 9  [...]
+<glyph unicode="&#xf1e3;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1e4;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1e5;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1e6;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1e7;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1e8;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1e9;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1ea;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1eb;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1ec;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1ed;" horiz-adv-x="1792" />
+<glyph unicode="&#xf1ee;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+<glyph horiz-adv-x="1792" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/site/fonts/fontawesome-webfont.ttf b/site/fonts/fontawesome-webfont.ttf
new file mode 100755
index 0000000..5cd6cff
Binary files /dev/null and b/site/fonts/fontawesome-webfont.ttf differ
diff --git a/site/fonts/fontawesome-webfont.woff b/site/fonts/fontawesome-webfont.woff
new file mode 100755
index 0000000..9eaecb3
Binary files /dev/null and b/site/fonts/fontawesome-webfont.woff differ
diff --git a/site/img/article-footer.png b/site/img/article-footer.png
index 3f97403..d000cf0 100644
Binary files a/site/img/article-footer.png and b/site/img/article-footer.png differ
diff --git a/site/img/footer-arrow.png b/site/img/footer-arrow.png
index 048e37d..e06754b 100644
Binary files a/site/img/footer-arrow.png and b/site/img/footer-arrow.png differ
diff --git a/site/img/footer-logo.png b/site/img/footer-logo.png
index 210babb..721b856 100644
Binary files a/site/img/footer-logo.png and b/site/img/footer-logo.png differ
diff --git a/site/img/jekyll-sticker.jpg b/site/img/jekyll-sticker.jpg
new file mode 100644
index 0000000..7feb97a
Binary files /dev/null and b/site/img/jekyll-sticker.jpg differ
diff --git a/site/img/logo-2x.png b/site/img/logo-2x.png
index bc84a9e..28b9cd8 100644
Binary files a/site/img/logo-2x.png and b/site/img/logo-2x.png differ
diff --git a/site/img/logo-rss.png b/site/img/logo-rss.png
new file mode 100644
index 0000000..8a38383
Binary files /dev/null and b/site/img/logo-rss.png differ
diff --git a/site/img/octojekyll.png b/site/img/octojekyll.png
index dad6dbd..7c6d96d 100644
Binary files a/site/img/octojekyll.png and b/site/img/octojekyll.png differ
diff --git a/site/img/tube.png b/site/img/tube.png
deleted file mode 100644
index bb0ba9c..0000000
Binary files a/site/img/tube.png and /dev/null differ
diff --git a/site/img/tube1x.png b/site/img/tube1x.png
deleted file mode 100644
index 104c28b..0000000
Binary files a/site/img/tube1x.png and /dev/null differ
diff --git a/site/index.html b/site/index.html
index fb8e802..429723c 100644
--- a/site/index.html
+++ b/site/index.html
@@ -18,19 +18,19 @@ overview: true
       <p>
         No more databases, comment moderation, or pesky updates to install—just <em>your content</em>.
       </p>
-      <a href="/docs/usage/" class="">How Jekyll works →</a>
+      <a href="/docs/usage/">How Jekyll works →</a>
     </div>
     <div class="unit one-third">
       <h2>Static</h2>
-      <p><a href="http://daringfireball.net/projects/markdown/">Markdown</a> (or <a href="http://textile.sitemonks.com/">Textile</a>), <a href="http://wiki.shopify.com/Liquid">Liquid</a>, HTML <span class="amp">&</span> CSS go in. Static sites come out ready for deployment.</p>
-      <a href="/docs/templates/" class="">Jekyll template guide →</a>
+      <p><a href="http://daringfireball.net/projects/markdown/">Markdown</a> (or <a href="http://redcloth.org/textile">Textile</a>), <a href="http://wiki.shopify.com/Liquid">Liquid</a>, HTML <span class="amp">&</span> CSS go in. Static sites come out ready for deployment.</p>
+      <a href="/docs/templates/">Jekyll template guide →</a>
     </div>
     <div class="unit one-third">
       <h2>Blog-aware</h2>
       <p>
         Permalinks, categories, pages, posts, and custom layouts are all first-class citizens here.
       </p>
-      <a href="/docs/migrations/" class="">Migrate your blog →</a>
+      <a href="/docs/migrations/">Migrate your blog →</a>
     </div>
     <div class="clear"></div>
   </div>
@@ -76,11 +76,11 @@ overview: true
     <div class="unit whole">
       <div class="grid pane">
         <div class="unit whole center-on-mobiles">
-          <img src="img/octojekyll.png" alt="Free Jekyll hosting on GitHub Pages">
+          <img src="img/octojekyll.png" width="300" height="251" alt="Free Jekyll hosting on GitHub Pages">
           <div class="pane-content">
             <h2 class="center-on-mobiles"><strong>Free hosting</strong> with GitHub Pages</h2>
             <p>Sick of dealing with hosting companies? <a href="http://pages.github.com/">GitHub Pages</a> are <em>powered by Jekyll</em>, so you can easily deploy your site using GitHub for free—<a href="https://help.github.com/articles/setting-up-a-custom-domain-with-pages">custom domain name</a> and all.</p>
-            <a href="http://pages.github.com/" class="">Learn more about GitHub Pages →</a>
+            <a href="http://pages.github.com/">Learn more about GitHub Pages →</a>
           </div>
         </div>
         <div class="clear"></div>
diff --git a/test/helper.rb b/test/helper.rb
index 5eb4193..97be56a 100644
--- a/test/helper.rb
+++ b/test/helper.rb
@@ -1,11 +1,6 @@
-if RUBY_VERSION > '1.9'
-  require 'simplecov'
-  require 'simplecov-gem-adapter'
-  SimpleCov.start('gem')
-
-  require 'coveralls'
-  Coveralls.wear_merged!
-end
+require 'simplecov'
+require 'simplecov-gem-adapter'
+SimpleCov.start('gem')
 
 require 'rubygems'
 require 'test/unit'
@@ -19,7 +14,6 @@ require 'rdiscount'
 require 'kramdown'
 require 'redcarpet'
 
-require 'redgreen' if RUBY_VERSION < '1.9'
 require 'shoulda'
 require 'rr'
 
@@ -31,6 +25,17 @@ STDERR.reopen(test(?e, '/dev/null') ? '/dev/null' : 'NUL:')
 class Test::Unit::TestCase
   include RR::Adapters::TestUnit
 
+  def build_configs(overrides, base_hash = Jekyll::Configuration::DEFAULTS)
+    Utils.deep_merge_hashes(base_hash, overrides)
+  end
+
+  def site_configuration(overrides = {})
+    build_configs({
+      "source"      => source_dir,
+      "destination" => dest_dir
+    }, build_configs(overrides))
+  end
+
   def dest_dir(*subdirs)
     test_dir('dest', *subdirs)
   end
@@ -62,4 +67,14 @@ class Test::Unit::TestCase
   ensure
     $stdout = $old_stdout
   end
+
+  def capture_stderr
+    $old_stderr = $stderr
+    $stderr = StringIO.new
+    yield
+    $stderr.rewind
+    return $stderr.string
+  ensure
+    $stderr = $old_stderr
+  end
 end
diff --git a/test/source/+/%# +.md b/test/source/+/%# +.md
new file mode 100644
index 0000000..a850f4d
--- /dev/null
+++ b/test/source/+/%# +.md	
@@ -0,0 +1,6 @@
+---
+layout: default
+title : Page name with non-alphabetic character 
+---
+Line 1
+{{ page.title }}
diff --git a/test/source/+/foo.md b/test/source/+/foo.md
index cb4f8ce..30f9535 100644
--- a/test/source/+/foo.md
+++ b/test/source/+/foo.md
@@ -1,7 +1,7 @@
 ---
 layout: default
 title : Page inside +
-permalink: plus+in+url
+permalink: /+/plus+in+url
 ---
 Line 1
 {{ page.title }}
diff --git a/test/source/_data/categories/dairy.yaml b/test/source/_data/categories/dairy.yaml
new file mode 100644
index 0000000..c091a68
--- /dev/null
+++ b/test/source/_data/categories/dairy.yaml
@@ -0,0 +1,6 @@
+name: Dairy
+products:
+- name: cheese
+  price: 5.3
+- name: milk
+  price: 2.5
\ No newline at end of file
diff --git a/test/source/_data/members.json b/test/source/_data/members.json
new file mode 100644
index 0000000..5ca4821
--- /dev/null
+++ b/test/source/_data/members.json
@@ -0,0 +1,12 @@
+[
+  {
+    "name": "Jack",
+    "age": 27,
+    "blog": "http://example.com/jack"
+  },
+  {
+    "name": "John",
+    "age": 32,
+    "blog": "http://example.com/john"
+  }
+]
diff --git a/test/source/_drafts/draft-properties.text b/test/source/_drafts/draft-properties.text
new file mode 100644
index 0000000..da33d07
--- /dev/null
+++ b/test/source/_drafts/draft-properties.text
@@ -0,0 +1,11 @@
+---
+categories: foo bar baz
+foo: bar
+layout: default
+tags: ay bee cee
+title: Properties Draft
+---
+
+All the properties.
+
+Plus an excerpt.
diff --git a/test/source/_includes/include.html b/test/source/_includes/include.html
new file mode 100644
index 0000000..201a102
--- /dev/null
+++ b/test/source/_includes/include.html
@@ -0,0 +1 @@
+included
diff --git a/test/source/_includes/sig.markdown b/test/source/_includes/sig.markdown
index d280e8c..fbbf563 100644
--- a/test/source/_includes/sig.markdown
+++ b/test/source/_includes/sig.markdown
@@ -1,3 +1,3 @@
---
+---
 Tom Preston-Werner
-github.com/mojombo
\ No newline at end of file
+github.com/mojombo
diff --git a/test/source/_methods/_do_not_read_me.md b/test/source/_methods/_do_not_read_me.md
new file mode 100644
index 0000000..1b5ad07
--- /dev/null
+++ b/test/source/_methods/_do_not_read_me.md
@@ -0,0 +1,5 @@
+---
+title: The unreadable wonder
+---
+
+Don't read me, you fool! FILTER ME
diff --git a/test/source/_methods/configuration.md b/test/source/_methods/configuration.md
new file mode 100644
index 0000000..fd17980
--- /dev/null
+++ b/test/source/_methods/configuration.md
@@ -0,0 +1,8 @@
+---
+title: "Jekyll.configuration"
+whatever: foo.bar
+---
+
+Use `{{ page.title }}` to build a full configuration for use w/Jekyll.
+
+Whatever: {{ page.whatever }}
diff --git a/test/source/_methods/sanitized_path.md b/test/source/_methods/sanitized_path.md
new file mode 100644
index 0000000..8b4d767
--- /dev/null
+++ b/test/source/_methods/sanitized_path.md
@@ -0,0 +1,5 @@
+---
+title: "Jekyll.sanitized_path"
+---
+
+`{{ page.title }}` is used to make sure your path is in your source.
diff --git a/test/source/_methods/site/_dont_include_me_either.md b/test/source/_methods/site/_dont_include_me_either.md
new file mode 100644
index 0000000..6607961
--- /dev/null
+++ b/test/source/_methods/site/_dont_include_me_either.md
@@ -0,0 +1,5 @@
+---
+title: Don't Include Me Either
+---
+
+Don't include me either. FILTER ME PLZ
diff --git a/test/source/_methods/site/generate.md b/test/source/_methods/site/generate.md
new file mode 100644
index 0000000..1cab376
--- /dev/null
+++ b/test/source/_methods/site/generate.md
@@ -0,0 +1,6 @@
+---
+title: "Site#generate"
+layout: default
+---
+
+Run your generators! {{ page.layout }}
diff --git a/test/source/_methods/site/initialize.md b/test/source/_methods/site/initialize.md
new file mode 100644
index 0000000..af5641c
--- /dev/null
+++ b/test/source/_methods/site/initialize.md
@@ -0,0 +1,4 @@
+---
+---
+
+Page without title.
diff --git a/test/source/_methods/um_hi.md b/test/source/_methods/um_hi.md
new file mode 100644
index 0000000..1cab376
--- /dev/null
+++ b/test/source/_methods/um_hi.md
@@ -0,0 +1,6 @@
+---
+title: "Site#generate"
+layout: default
+---
+
+Run your generators! {{ page.layout }}
diff --git a/test/source/_posts/2009-01-27-no-category.textile b/test/source/_posts/2009-01-27-no-category.textile
new file mode 100644
index 0000000..af8382d
--- /dev/null
+++ b/test/source/_posts/2009-01-27-no-category.textile
@@ -0,0 +1,6 @@
+---
+layout: default
+title: Category in YAML
+---
+
+Best *post* ever
diff --git a/test/source/_posts/2011-04-12-md-extension.md b/test/source/_posts/2011-04-12-md-extension.md
index 163e913..2d2ae93 100644
--- a/test/source/_posts/2011-04-12-md-extension.md
+++ b/test/source/_posts/2011-04-12-md-extension.md
@@ -2,6 +2,6 @@
 date: 2011-04-12 13:07:09
 ---
 
-under default configuration, this post should get processed by the identity converter. By changing 
+under default configuration, this post should get processed by the identity converter. By changing
 textile extension or markdown extension configuration parameters, you should be able to associate
 it with either of those converters
\ No newline at end of file
diff --git a/test/source/_posts/2013-12-17-include-variable-filters.markdown b/test/source/_posts/2013-12-17-include-variable-filters.markdown
new file mode 100644
index 0000000..3d66e87
--- /dev/null
+++ b/test/source/_posts/2013-12-17-include-variable-filters.markdown
@@ -0,0 +1,21 @@
+---
+title: Post
+layout: post
+include1: include.html
+include2: include
+include3: INCLUDE
+include4: params
+---
+
+Liquid tests
+- 1 {% include {{ page.include1 }} %}
+- 2 {% include {{ page.include2 | append: '.html' }} %}
+- 3 {% include {{ page.include3 | downcase | append: '.html' }} %}
+
+Whitespace tests
+- 4 {% include {{page.include1}} %}
+- 5 {% include {{   page.include1}} %}
+- 6 {% include {{  page.include3   | downcase |   append:  '.html'}} %}
+
+Parameters test
+- 7 {% include {{ page.include4 | append: '.html' }} var1='foo' var2='bar' %}
diff --git a/test/source/_posts/2013-12-20-properties.text b/test/source/_posts/2013-12-20-properties.text
new file mode 100644
index 0000000..94ded59
--- /dev/null
+++ b/test/source/_posts/2013-12-20-properties.text
@@ -0,0 +1,11 @@
+---
+categories: foo bar baz
+foo: bar
+layout: default
+tags: ay bee cee
+title: Properties Post
+---
+
+All the properties.
+
+Plus an excerpt.
diff --git a/test/source/_posts/2014-03-03-yaml-with-dots.md b/test/source/_posts/2014-03-03-yaml-with-dots.md
new file mode 100644
index 0000000..09639b2
--- /dev/null
+++ b/test/source/_posts/2014-03-03-yaml-with-dots.md
@@ -0,0 +1,5 @@
+---
+title: Test Post Where YAML Ends in Dots
+...
+
+# Test
diff --git a/test/source/_posts/2014-03-22-escape-+ %20[].markdown b/test/source/_posts/2014-03-22-escape-+ %20[].markdown
new file mode 100644
index 0000000..abe120b
--- /dev/null
+++ b/test/source/_posts/2014-03-22-escape-+ %20[].markdown	
@@ -0,0 +1,6 @@
+---
+layout: default
+title: Plus space percent
+---
+
+Signs are nice
diff --git a/test/source/_sass/_grid.scss b/test/source/_sass/_grid.scss
new file mode 100644
index 0000000..606aaf2
--- /dev/null
+++ b/test/source/_sass/_grid.scss
@@ -0,0 +1 @@
+.half { width: 50%; }
\ No newline at end of file
diff --git a/test/source/_slides/example-slide-1.html b/test/source/_slides/example-slide-1.html
new file mode 100644
index 0000000..fcd89b3
--- /dev/null
+++ b/test/source/_slides/example-slide-1.html
@@ -0,0 +1,4 @@
+---
+  title: Example slide
+  layout: slide
+---
diff --git a/test/source/_slides/example-slide-2.html b/test/source/_slides/example-slide-2.html
new file mode 100644
index 0000000..1515899
--- /dev/null
+++ b/test/source/_slides/example-slide-2.html
@@ -0,0 +1,7 @@
+---
+  title: Override title
+  layout: slide
+  nested:
+    test1: override1
+    test2: override2
+---
diff --git a/test/source/_slides/example-slide-3.html b/test/source/_slides/example-slide-3.html
new file mode 100644
index 0000000..ecdc79e
--- /dev/null
+++ b/test/source/_slides/example-slide-3.html
@@ -0,0 +1,5 @@
+---
+  title: Override permalink
+  layout: slide
+  permalink: /slide/3/
+---
diff --git a/test/source/_with.dots/all.dots/2.4.0.md b/test/source/_with.dots/all.dots/2.4.0.md
new file mode 100644
index 0000000..74d96bb
--- /dev/null
+++ b/test/source/_with.dots/all.dots/2.4.0.md
@@ -0,0 +1,5 @@
+---
+title: v2.4.0
+---
+
+v2.4.0
\ No newline at end of file
diff --git a/test/source/_with.dots/file.with.dots.md b/test/source/_with.dots/file.with.dots.md
new file mode 100644
index 0000000..e69de29
diff --git a/test/source/css/main.scss b/test/source/css/main.scss
new file mode 100644
index 0000000..abc9ecd
--- /dev/null
+++ b/test/source/css/main.scss
@@ -0,0 +1,4 @@
+---
+---
+
+ at import "grid";
\ No newline at end of file
diff --git a/test/source/environment.html b/test/source/environment.html
new file mode 100644
index 0000000..b875a61
--- /dev/null
+++ b/test/source/environment.html
@@ -0,0 +1,5 @@
+---
+title: I'm a Jekyll environment exchequer
+---
+
+{{ jekyll.environment }}
diff --git a/test/source/js/coffeescript.coffee b/test/source/js/coffeescript.coffee
new file mode 100644
index 0000000..e0e066b
--- /dev/null
+++ b/test/source/js/coffeescript.coffee
@@ -0,0 +1,10 @@
+---
+---
+
+$ ->
+  list   = [1, 2, 3, 4, 5]
+  square = (x) -> x * x
+  cube   = (x) -> square(x) * x
+  cubes  = (math.cube num for num in list)
+
+  alert "I knew it!" if elvis?
diff --git a/test/source/pgp.key b/test/source/pgp.key
new file mode 100644
index 0000000..f7f799d
--- /dev/null
+++ b/test/source/pgp.key
@@ -0,0 +1,2 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
diff --git a/test/source/properties.html b/test/source/properties.html
new file mode 100644
index 0000000..fd40c45
--- /dev/null
+++ b/test/source/properties.html
@@ -0,0 +1,8 @@
+---
+foo: bar
+layout: default
+permalink: /properties/
+title: Properties Page
+---
+
+All the properties.
diff --git a/test/source/static_files.html b/test/source/static_files.html
new file mode 100644
index 0000000..878b7eb
--- /dev/null
+++ b/test/source/static_files.html
@@ -0,0 +1,4 @@
+---
+---
+{% for file in site.static_files %}
+- {{ file.path }} last edited at {{ file.modified_time }} with extname {{ file.extname }}{% endfor %}
diff --git a/test/source/unpublished.html b/test/source/unpublished.html
new file mode 100644
index 0000000..265b606
--- /dev/null
+++ b/test/source/unpublished.html
@@ -0,0 +1,7 @@
+---
+layout: default
+title: Not published!
+published: false
+---
+
+This should *not* be published!
diff --git a/test/test_cleaner.rb b/test/test_cleaner.rb
new file mode 100644
index 0000000..e9bcc0f
--- /dev/null
+++ b/test/test_cleaner.rb
@@ -0,0 +1,77 @@
+require 'helper'
+
+class TestCleaner < Test::Unit::TestCase
+  context "directory in keep_files" do
+    setup do
+      clear_dest
+      stub(Jekyll).configuration do
+        Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
+      end
+
+      FileUtils.mkdir_p(dest_dir('to_keep/child_dir'))
+      FileUtils.touch(File.join(dest_dir('to_keep'), 'index.html'))
+      FileUtils.touch(File.join(dest_dir('to_keep/child_dir'), 'index.html'))
+
+      @site = Site.new(Jekyll.configuration)
+      @site.keep_files = ['to_keep/child_dir']
+
+      @cleaner = Site::Cleaner.new(@site)
+      @cleaner.cleanup!
+    end
+
+    teardown do
+      FileUtils.rm_rf(dest_dir('to_keep'))
+    end
+
+    should "keep the parent directory" do
+      assert File.exist?(dest_dir('to_keep'))
+    end
+
+    should "keep the child directory" do
+      assert File.exist?(dest_dir('to_keep/child_dir'))
+    end
+
+    should "keep the file in the directory in keep_files" do
+      assert File.exist?(File.join(dest_dir('to_keep/child_dir'), 'index.html'))
+    end
+
+    should "delete the file in the directory not in keep_files" do
+      assert !File.exist?(File.join(dest_dir('to_keep'), 'index.html'))
+    end
+  end
+
+  context "directory containing no files and non-empty directories" do
+    setup do
+      clear_dest
+      stub(Jekyll).configuration do
+        Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
+      end
+
+      FileUtils.mkdir_p(source_dir('no_files_inside/child_dir'))
+      FileUtils.touch(File.join(source_dir('no_files_inside/child_dir'), 'index.html'))
+
+      @site = Site.new(Jekyll.configuration)
+      @site.process
+
+      @cleaner = Site::Cleaner.new(@site)
+      @cleaner.cleanup!
+    end
+
+    teardown do
+      FileUtils.rm_rf(source_dir('no_files_inside'))
+      FileUtils.rm_rf(dest_dir('no_files_inside'))
+    end
+
+    should "keep the parent directory" do
+      assert File.exist?(dest_dir('no_files_inside'))
+    end
+
+    should "keep the child directory" do
+      assert File.exist?(dest_dir('no_files_inside/child_dir'))
+    end
+
+    should "keep the file" do
+      assert File.exist?(File.join(dest_dir('no_files_inside/child_dir'), 'index.html'))
+    end
+  end
+end
diff --git a/test/test_coffeescript.rb b/test/test_coffeescript.rb
new file mode 100644
index 0000000..91fd623
--- /dev/null
+++ b/test/test_coffeescript.rb
@@ -0,0 +1,49 @@
+require 'helper'
+
+class TestCoffeeScript < Test::Unit::TestCase
+  context "converting CoffeeScript" do
+    setup do
+      @site = Jekyll::Site.new(Jekyll.configuration({
+        "source" => source_dir,
+        "destination" => dest_dir
+      }))
+      @site.process
+      @test_coffeescript_file = dest_dir("js/coffeescript.js")
+      @js_output = <<-JS
+(function() {
+  $(function() {
+    var cube, cubes, list, num, square;
+    list = [1, 2, 3, 4, 5];
+    square = function(x) {
+      return x * x;
+    };
+    cube = function(x) {
+      return square(x) * x;
+    };
+    cubes = (function() {
+      var _i, _len, _results;
+      _results = [];
+      for (_i = 0, _len = list.length; _i < _len; _i++) {
+        num = list[_i];
+        _results.push(math.cube(num));
+      }
+      return _results;
+    })();
+    if (typeof elvis !== \"undefined\" && elvis !== null) {
+      return alert(\"I knew it!\");
+    }
+  });
+
+}).call(this);
+JS
+    end
+
+    should "write a JS file in place" do
+      assert File.exist?(@test_coffeescript_file), "Can't find the converted CoffeeScript file in the dest_dir."
+    end
+
+    should "produce JS" do
+      assert_equal @js_output, File.read(@test_coffeescript_file)
+    end
+  end
+end
diff --git a/test/test_collections.rb b/test/test_collections.rb
new file mode 100644
index 0000000..97b891e
--- /dev/null
+++ b/test/test_collections.rb
@@ -0,0 +1,224 @@
+require 'helper'
+
+class TestCollections < Test::Unit::TestCase
+
+  def fixture_site(overrides = {})
+    Jekyll::Site.new(Jekyll.configuration(
+      overrides.merge({
+        "source"      => source_dir,
+        "destination" => dest_dir
+      })
+    ))
+  end
+
+  context "an evil collection" do
+    setup do
+      @collection = Jekyll::Collection.new(fixture_site, "../../etc/password")
+    end
+
+    should "sanitize the label name" do
+      assert_equal @collection.label, "....etcpassword"
+    end
+
+    should "have a sanitized relative path name" do
+      assert_equal @collection.relative_directory, "_....etcpassword"
+    end
+
+    should "have a sanitized full path" do
+      assert_equal @collection.directory, source_dir("_....etcpassword")
+    end
+  end
+
+  context "a simple collection" do
+    setup do
+      @collection = Jekyll::Collection.new(fixture_site, "methods")
+    end
+
+    should "sanitize the label name" do
+      assert_equal @collection.label, "methods"
+    end
+
+    should "have default url template" do
+      assert_equal @collection.url_template, "/:collection/:path:output_ext"
+    end
+
+    should "contain no docs when initialized" do
+      assert_empty @collection.docs
+    end
+
+    should "know its relative directory" do
+      assert_equal @collection.relative_directory, "_methods"
+    end
+
+    should "know the full path to itself on the filesystem" do
+      assert_equal @collection.directory, source_dir("_methods")
+    end
+
+    context "when turned into Liquid" do
+      should "have a label attribute" do
+        assert_equal @collection.to_liquid["label"], "methods"
+      end
+
+      should "have a docs attribute" do
+        assert_equal @collection.to_liquid["docs"], Array.new
+      end
+
+      should "have a directory attribute" do
+        assert_equal @collection.to_liquid["directory"], source_dir("_methods")
+      end
+
+      should "have a relative_directory attribute" do
+        assert_equal @collection.to_liquid["relative_directory"], "_methods"
+      end
+
+      should "have a output attribute" do
+        assert_equal @collection.to_liquid["output"], false
+      end
+    end
+
+    should "know whether it should be written or not" do
+      assert_equal @collection.write?, false
+      @collection.metadata['output'] = true
+      assert_equal @collection.write?, true
+      @collection.metadata.delete 'output'
+    end
+  end
+
+  context "with no collections specified" do
+    setup do
+      @site = fixture_site
+      @site.process
+    end
+
+    should "not contain any collections" do
+      assert_equal Hash.new, @site.collections
+    end
+  end
+
+  context "a collection with permalink" do
+    setup do
+      @site = fixture_site({
+        "collections" => {
+          "methods" => {
+            "permalink" => "/awesome/:path/"
+          }
+        }
+      })
+      @site.process
+      @collection = @site.collections["methods"]
+    end
+
+    should "have custom url template" do
+      assert_equal @collection.url_template, "/awesome/:path/"
+    end
+  end
+
+  context "with a collection" do
+    setup do
+      @site = fixture_site({
+        "collections" => ["methods"]
+      })
+      @site.process
+      @collection = @site.collections["methods"]
+    end
+
+    should "create a Hash on Site with the label mapped to the instance of the Collection" do
+      assert @site.collections.is_a?(Hash)
+      assert_not_nil @site.collections["methods"]
+      assert @site.collections["methods"].is_a? Jekyll::Collection
+    end
+
+    should "collects docs in an array on the Collection object" do
+      assert @site.collections["methods"].docs.is_a? Array
+      @site.collections["methods"].docs.each do |doc|
+        assert doc.is_a? Jekyll::Document
+        assert_include %w[
+          _methods/configuration.md
+          _methods/sanitized_path.md
+          _methods/site/generate.md
+          _methods/site/initialize.md
+          _methods/um_hi.md
+        ], doc.relative_path
+      end
+    end
+
+    should "not include files which start with an underscore in the base collection directory" do
+      assert_not_include @collection.filtered_entries, "_do_not_read_me.md"
+    end
+
+    should "not include files which start with an underscore in a subdirectory" do
+      assert_not_include @collection.filtered_entries, "site/_dont_include_me_either.md"
+    end
+
+    should "not include the underscored files in the list of docs" do
+      assert_not_include @collection.docs.map(&:relative_path), "_methods/_do_not_read_me.md"
+      assert_not_include @collection.docs.map(&:relative_path), "_methods/site/_dont_include_me_either.md"
+    end
+  end
+
+  context "with a collection with metadata" do
+    setup do
+      @site = fixture_site({
+        "collections" => {
+          "methods" => {
+            "foo" => "bar",
+            "baz" => "whoo"
+          }
+        }
+      })
+      @site.process
+      @collection = @site.collections["methods"]
+    end
+
+    should "extract the configuration collection information as metadata" do
+      assert_equal @collection.metadata, {"foo" => "bar", "baz" => "whoo"}
+    end
+  end
+
+  context "in safe mode" do
+    setup do
+      @site = fixture_site({
+        "collections" => ["methods"],
+        "safe"        => true
+      })
+      @site.process
+      @collection = @site.collections["methods"]
+    end
+
+    should "not allow symlinks" do
+      assert_not_include @collection.filtered_entries, "um_hi.md"
+    end
+
+    should "not include the symlinked file in the list of docs" do
+      assert_not_include @collection.docs.map(&:relative_path), "_methods/um_hi.md"
+    end
+  end
+
+  context "with dots in the filenames" do
+    setup do
+      @site = fixture_site({
+        "collections" => ["with.dots"],
+        "safe"        => true
+      })
+      @site.process
+      @collection = @site.collections["with.dots"]
+    end
+
+    should "exist" do
+      assert_not_nil @collection
+    end
+
+    should "contain one document" do
+      assert_equal 2, @collection.docs.size
+    end
+
+    should "allow dots in the filename" do
+      assert_equal "_with.dots", @collection.relative_directory
+    end
+
+    should "read document in subfolders with dots" do
+      assert @collection.docs.any? { |d| d.path.include?("all.dots") }
+    end
+  end
+
+end
diff --git a/test/test_command.rb b/test/test_command.rb
index 860c0c3..8d1a751 100644
--- a/test/test_command.rb
+++ b/test/test_command.rb
@@ -1,38 +1,52 @@
 require 'helper'
 
 class TestCommand < Test::Unit::TestCase
-  context "when calling .globs" do
-    context "when non-default dest & source dirs" do
-      setup do
-        @source = source_dir
-        @dest   = dest_dir
-        directory_with_contents(@dest)
-        @globs  = Command.globs(@source, @dest)
-      end
-      should "return an array without the destination dir" do
-        assert @globs.is_a?(Array)
-        assert !@globs.include?(@dest)
-      end
-      teardown do
-        clear_dest
+  context "when calling .ignore_paths" do
+    context "when source is absolute" do
+      setup { @source = source_dir }
+      should "return an array with regex for destination" do
+        absolute = source_dir('dest')
+        relative = Pathname.new(source_dir('dest')).relative_path_from(Pathname.new('.').expand_path).to_s
+        [absolute, relative].each do |dest|
+          config = build_configs("source" => @source, "destination" => dest)
+          assert Command.ignore_paths(config).include?(/dest/), "failed with destination: #{dest}"
+        end
       end
     end
-    context "when using default dest dir" do
-      setup do
-        @source = test_dir
-        @dest   = test_dir('_site')
-        directory_with_contents(@dest)
-        @globs  = Command.globs(@source, @dest)
-      end
-      should "return an array without the destination dir" do
-        assert @globs.is_a?(Array)
-        assert !@globs.include?(@dest)
-        @globs.each do |glob|
-           assert !glob.include?(File.basename(@dest))
+    context "when source is relative" do
+      setup { @source = Pathname.new(source_dir).relative_path_from(Pathname.new('.').expand_path).to_s }
+      should "return an array with regex for destination" do
+        absolute = source_dir('dest')
+        relative = Pathname.new(source_dir('dest')).relative_path_from(Pathname.new('.').expand_path).to_s
+        [absolute, relative].each do |dest|
+          config = build_configs("source" => @source, "destination" => dest)
+          assert Command.ignore_paths(config).include?(/dest/), "failed with destination: #{dest}"
         end
       end
-      teardown do
-        FileUtils.rm_r(@dest)
+    end
+    context "multiple config files" do
+      should "return an array with regex for config files" do
+        config = build_configs("config"=> ["_config.yaml", "_config2.yml"])
+        ignore_paths = Command.ignore_paths(config)
+        assert ignore_paths.include?(/_config\.yaml/), 'did not include _config.yaml'
+        assert ignore_paths.include?(/_config2\.yml/), 'did not include _config2.yml'
+      end
+    end
+  end
+  context "when calling .add_build_options" do
+    should "add common options" do
+      cmd = Object.new
+      mock(cmd).option.with_any_args.at_least(1)
+      Command.add_build_options(cmd)
+    end
+  end
+  context "when calling .process_site" do
+    context "when fatal error occurs" do
+      should "exit with non-zero error code" do
+        site = Object.new
+        stub(site).process { raise Jekyll::Errors::FatalException }
+        error = assert_raise(SystemExit) { Command.process_site(site) }
+        assert_not_equal 0, error.status
       end
     end
   end
diff --git a/test/test_configuration.rb b/test/test_configuration.rb
index d911b77..bdb4dc8 100644
--- a/test/test_configuration.rb
+++ b/test/test_configuration.rb
@@ -4,14 +4,14 @@ class TestConfiguration < Test::Unit::TestCase
   context "#stringify_keys" do
     setup do
       @mixed_keys = Configuration[{
-        'markdown' => 'maruku',
+        'markdown' => 'kramdown',
         :permalink => 'date',
         'baseurl'  => '/',
         :include   => ['.htaccess'],
         :source    => './'
       }]
       @string_keys = Configuration[{
-        'markdown'  => 'maruku',
+        'markdown'  => 'kramdown',
         'permalink' => 'date',
         'baseurl'   => '/',
         'include'   => ['.htaccess'],
@@ -39,7 +39,16 @@ class TestConfiguration < Test::Unit::TestCase
       assert @config.config_files(@multiple_files).is_a?(Array)
     end
     should "return the default config path if no config files are specified" do
-      assert_equal [File.join(source_dir, "_config.yml")], @config.config_files(@no_override)
+      assert_equal [source_dir("_config.yml")], @config.config_files(@no_override)
+    end
+    should "return .yaml if it exists but .yml does not" do
+      mock(File).exists?(source_dir("_config.yml")) { false }
+      mock(File).exists?(source_dir("_config.yaml")) { true }
+      assert_equal [source_dir("_config.yaml")], @config.config_files(@no_override)
+    end
+    should "return .yml if both .yml and .yaml exist" do
+      mock(File).exists?(source_dir("_config.yml")) { true }
+      assert_equal [source_dir("_config.yml")], @config.config_files(@no_override)
     end
     should "return the config if given one config file" do
       assert_equal %w[config.yml], @config.config_files(@one_config_file)
@@ -51,11 +60,12 @@ class TestConfiguration < Test::Unit::TestCase
   context "#backwards_compatibilize" do
     setup do
       @config = Configuration[{
-        "auto"    => true,
-        "watch"   => true,
-        "server"  => true,
-        "exclude" => "READ-ME.md, Gemfile,CONTRIBUTING.hello.markdown",
-        "include" => "STOP_THE_PRESSES.txt,.heloses, .git"
+        "auto"     => true,
+        "watch"    => true,
+        "server"   => true,
+        "exclude"  => "READ-ME.md, Gemfile,CONTRIBUTING.hello.markdown",
+        "include"  => "STOP_THE_PRESSES.txt,.heloses, .git",
+        "pygments" => true,
       }]
     end
     should "unset 'auto' and 'watch'" do
@@ -78,6 +88,11 @@ class TestConfiguration < Test::Unit::TestCase
       assert @config.backwards_compatibilize.has_key?("include")
       assert_equal @config.backwards_compatibilize["include"], %w[STOP_THE_PRESSES.txt .heloses .git]
     end
+    should "set highlighter to pygments" do
+      assert @config.has_key?("pygments")
+      assert !@config.backwards_compatibilize.has_key?("pygments")
+      assert_equal @config.backwards_compatibilize["highlighter"], "pygments"
+    end
   end
   context "#fix_common_issues" do
     setup do
@@ -100,31 +115,36 @@ class TestConfiguration < Test::Unit::TestCase
     end
 
     should "fire warning with no _config.yml" do
-      mock(YAML).safe_load_file(@path) { raise SystemCallError, "No such file or directory - #{@path}" }
+      mock(SafeYAML).load_file(@path) { raise SystemCallError, "No such file or directory - #{@path}" }
       mock($stderr).puts("Configuration file: none".yellow)
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "load configuration as hash" do
-      mock(YAML).safe_load_file(@path) { Hash.new }
+      mock(SafeYAML).load_file(@path) { Hash.new }
       mock($stdout).puts("Configuration file: #{@path}")
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "fire warning with bad config" do
-      mock(YAML).safe_load_file(@path) { Array.new }
+      mock(SafeYAML).load_file(@path) { Array.new }
       mock($stderr).puts(("WARNING: ".rjust(20) + "Error reading configuration. Using defaults (and options).").yellow)
       mock($stderr).puts("Configuration file: (INVALID) #{@path}".yellow)
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "fire warning when user-specified config file isn't there" do
-      mock(YAML).safe_load_file(@user_config) { raise SystemCallError, "No such file or directory - #{@user_config}" }
+      mock(SafeYAML).load_file(@user_config) { raise SystemCallError, "No such file or directory - #{@user_config}" }
       mock($stderr).puts(("Fatal: ".rjust(20) + "The configuration file '#{@user_config}' could not be found.").red)
       assert_raises LoadError do
         Jekyll.configuration({'config' => [@user_config]})
       end
     end
+
+    should "not clobber YAML.load to the dismay of other libraries" do
+      assert_equal :foo, YAML.load(':foo')
+      # as opposed to: assert_equal ':foo', SafeYAML.load(':foo')
+    end
   end
   context "loading config from external file" do
     setup do
@@ -137,32 +157,32 @@ class TestConfiguration < Test::Unit::TestCase
     end
 
     should "load default config if no config_file is set" do
-      mock(YAML).safe_load_file(@paths[:default]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:default]) { Hash.new }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "load different config if specified" do
-      mock(YAML).safe_load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
+      mock(SafeYAML).load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
       mock($stdout).puts("Configuration file: #{@paths[:other]}")
-      assert_equal Jekyll::Configuration::DEFAULTS.deep_merge({ "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => @paths[:other] })
+      assert_equal Utils.deep_merge_hashes(Jekyll::Configuration::DEFAULTS, { "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => @paths[:other] })
     end
 
     should "load default config if path passed is empty" do
-      mock(YAML).safe_load_file(@paths[:default]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:default]) { Hash.new }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({ "config" => @paths[:empty] })
     end
 
     should "successfully load a TOML file" do
-      Jekyll.logger.log_level = Jekyll::Stevenson::WARN
+      Jekyll.logger.log_level = :warn
       assert_equal Jekyll::Configuration::DEFAULTS.merge({ "baseurl" => "/you-beautiful-blog-you", "title" => "My magnificent site, wut" }), Jekyll.configuration({ "config" => [@paths[:toml]] })
-      Jekyll.logger.log_level = Jekyll::Stevenson::INFO
+      Jekyll.logger.log_level = :info
     end
 
     should "load multiple config files" do
-      mock(YAML).safe_load_file(@paths[:default]) { Hash.new }
-      mock(YAML).safe_load_file(@paths[:other]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:default]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:other]) { Hash.new }
       mock(TOML).load_file(@paths[:toml]) { Hash.new }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       mock($stdout).puts("Configuration file: #{@paths[:other]}")
@@ -171,11 +191,11 @@ class TestConfiguration < Test::Unit::TestCase
     end
 
     should "load multiple config files and last config should win" do
-      mock(YAML).safe_load_file(@paths[:default]) { {"baseurl" => "http://example.dev"} }
-      mock(YAML).safe_load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
+      mock(SafeYAML).load_file(@paths[:default]) { {"baseurl" => "http://example.dev"} }
+      mock(SafeYAML).load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       mock($stdout).puts("Configuration file: #{@paths[:other]}")
-      assert_equal Jekyll::Configuration::DEFAULTS.deep_merge({ "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => [@paths[:default], @paths[:other]] })
+      assert_equal Utils.deep_merge_hashes(Jekyll::Configuration::DEFAULTS, { "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => [@paths[:default], @paths[:other]] })
     end
   end
 end
diff --git a/test/test_convertible.rb b/test/test_convertible.rb
index 694c152..28f9995 100644
--- a/test/test_convertible.rb
+++ b/test/test_convertible.rb
@@ -21,7 +21,7 @@ class TestConvertible < Test::Unit::TestCase
 
     should "not parse if there is syntax error in front-matter" do
       name = 'broken_front_matter2.erb'
-      out = capture_stdout do
+      out = capture_stderr do
         ret = @convertible.read_yaml(@base, name)
         assert_equal({}, ret)
       end
@@ -30,22 +30,20 @@ class TestConvertible < Test::Unit::TestCase
     end
 
     should "not allow ruby objects in yaml" do
-      out = capture_stdout do
+      out = capture_stderr do
         @convertible.read_yaml(@base, 'exploit_front_matter.erb')
       end
       assert_no_match /undefined class\/module DoesNotExist/, out
     end
 
-    if RUBY_VERSION >= '1.9.2'
-      should "not parse if there is encoding error in file" do
-        name = 'broken_front_matter3.erb'
-        out = capture_stdout do
-          ret = @convertible.read_yaml(@base, name, :encoding => 'utf-8')
-          assert_equal({}, ret)
-        end
-        assert_match(/invalid byte sequence in UTF-8/, out)
-        assert_match(/#{File.join(@base, name)}/, out)
+    should "not parse if there is encoding error in file" do
+      name = 'broken_front_matter3.erb'
+      out = capture_stderr do
+        ret = @convertible.read_yaml(@base, name, :encoding => 'utf-8')
+        assert_equal({}, ret)
       end
+      assert_match(/invalid byte sequence in UTF-8/, out)
+      assert_match(/#{File.join(@base, name)}/, out)
     end
   end
 end
diff --git a/test/test_document.rb b/test/test_document.rb
new file mode 100644
index 0000000..330a184
--- /dev/null
+++ b/test/test_document.rb
@@ -0,0 +1,193 @@
+require 'helper'
+
+class TestDocument < Test::Unit::TestCase
+
+  context "a document in a collection" do
+    setup do
+      @site = Site.new(Jekyll.configuration({
+        "collections" => ["methods"],
+        "source"      => source_dir,
+        "destination" => dest_dir
+      }))
+      @site.process
+      @document = @site.collections["methods"].docs.first
+    end
+
+    should "know its relative path" do
+      assert_equal "_methods/configuration.md", @document.relative_path
+    end
+
+    should "knows its extname" do
+      assert_equal ".md", @document.extname
+    end
+
+    should "know its basename" do
+      assert_equal "configuration.md", @document.basename
+    end
+
+    should "allow the suffix to be specified for the basename" do
+      assert_equal "configuration", @document.basename(".*")
+    end
+
+    should "know whether its a yaml file" do
+      assert_equal false, @document.yaml_file?
+    end
+
+    should "know its data" do
+      assert_equal({
+        "title" => "Jekyll.configuration",
+        "whatever" => "foo.bar"
+      }, @document.data)
+    end
+
+    should "output the collection name in the #to_liquid method" do
+      assert_equal @document.to_liquid['collection'], "methods"
+    end
+
+  end
+
+  context "a document as part of a collection with frontmatter defaults" do
+    setup do
+      @site = Site.new(Jekyll.configuration({
+        "collections" => ["slides"],
+        "source"      => source_dir,
+        "destination" => dest_dir,
+        "defaults" => [{
+          "scope"=> {"path"=>"", "type"=>"slides"},
+          "values"=> {
+            "nested"=> {
+              "key"=>"myval",
+            }
+          }
+        }]
+      }))
+      @site.process
+      @document = @site.collections["slides"].docs.first
+    end
+
+    should "know the frontmatter defaults" do
+      assert_equal({
+        "title"=>"Example slide",
+        "layout"=>"slide",
+        "nested"=> { 
+          "key"=>"myval"
+        }
+      }, @document.data)
+    end
+  end
+
+  context "a document as part of a collection with overriden default values" do
+    setup do
+      @site = Site.new(Jekyll.configuration({
+        "collections" => ["slides"],
+        "source"      => source_dir,
+        "destination" => dest_dir,
+        "defaults" => [{
+          "scope"=> {"path"=>"", "type"=>"slides"},
+          "values"=> {
+            "nested"=> {
+              "test1"=>"default1",
+              "test2"=>"default1"
+            }
+          }
+        }]
+      }))
+      @site.process
+      @document = @site.collections["slides"].docs[1]
+    end
+
+    should "override default values in the document frontmatter" do
+      assert_equal({
+        "title"=>"Override title",
+        "layout"=>"slide",
+        "nested"=> { 
+          "test1"=>"override1",
+          "test2"=>"override2"
+        }
+      }, @document.data)
+    end
+  end
+
+  context "a document as part of a collection with valid path" do
+    setup do
+      @site = Site.new(Jekyll.configuration({
+        "collections" => ["slides"],
+        "source"      => source_dir,
+        "destination" => dest_dir,
+        "defaults" => [{
+          "scope"=> {"path"=>"slides", "type"=>"slides"},
+          "values"=> {
+            "nested"=> {
+              "key"=>"value123",
+            }
+          }
+        }]
+      }))
+      @site.process
+      @document = @site.collections["slides"].docs.first
+    end
+
+    should "know the frontmatter defaults" do
+      assert_equal({
+        "title"=>"Example slide",
+        "layout"=>"slide",
+        "nested"=> { 
+          "key"=>"value123"
+        }
+      }, @document.data)
+    end
+  end
+
+  context "a document as part of a collection with invalid path" do
+    setup do
+      @site = Site.new(Jekyll.configuration({
+        "collections" => ["slides"],
+        "source"      => source_dir,
+        "destination" => dest_dir,
+        "defaults" => [{
+          "scope"=> {"path"=>"somepath", "type"=>"slides"},
+          "values"=> {
+            "nested"=> {
+              "key"=>"myval",
+            }
+          }
+        }]
+      }))
+      @site.process
+      @document = @site.collections["slides"].docs.first
+    end
+
+    should "not know the specified frontmatter defaults" do
+      assert_equal({
+        "title"=>"Example slide",
+        "layout"=>"slide"
+      }, @document.data)
+    end
+  end
+
+  context "a document in a collection with a custom permalink" do
+    setup do
+      @site = Site.new(Jekyll.configuration({
+        "collections" => ["slides"],
+        "source"      => source_dir,
+        "destination" => dest_dir
+      }))
+      @site.process
+      @document = @site.collections["slides"].docs[2]
+      @dest_file = dest_dir("slide/3/index.html")
+    end
+
+    should "know its permalink" do
+      assert_equal "/slide/3/", @document.permalink
+    end
+
+    should "produce the right URL" do
+      assert_equal "/slide/3/", @document.url
+    end
+  end
+
+
+  context " a document part of a rendered collection" do
+  end
+
+end
diff --git a/test/test_draft.rb b/test/test_draft.rb
new file mode 100644
index 0000000..b1b3d08
--- /dev/null
+++ b/test/test_draft.rb
@@ -0,0 +1,56 @@
+require 'helper'
+
+class TestDraft < Test::Unit::TestCase
+  def setup_draft(file)
+    Draft.new(@site, source_dir, '', file)
+  end
+
+  context "A Draft" do
+    setup do
+      clear_dest
+      stub(Jekyll).configuration { Jekyll::Configuration::DEFAULTS }
+      @site = Site.new(Jekyll.configuration)
+    end
+
+    should "ensure valid drafts are valid" do
+      assert Draft.valid?("2008-09-09-foo-bar.textile")
+      assert Draft.valid?("foo/bar/2008-09-09-foo-bar.textile")
+      assert Draft.valid?("lol2008-09-09-foo-bar.textile")
+
+      assert !Draft.valid?("blah")
+    end
+
+    should "make properties accessible through #[]" do
+      draft = setup_draft('draft-properties.text')
+      # ! need to touch the file! Or get its timestamp
+      date = File.mtime(File.join(source_dir, '_drafts', 'draft-properties.text'))
+      ymd = date.strftime("%Y/%m/%d")
+
+      attrs = {
+        categories: %w(foo bar baz),
+        content: "All the properties.\n\nPlus an excerpt.\n",
+        date: date,
+        dir: "/foo/bar/baz/#{ymd}",
+        excerpt: "All the properties.\n\n",
+        foo: 'bar',
+        id: "/foo/bar/baz/#{ymd}/draft-properties",
+        layout: 'default',
+        name: nil,
+        path: "_drafts/draft-properties.text",
+        permalink: nil,
+        published: nil,
+        tags: %w(ay bee cee),
+        title: 'Properties Draft',
+        url: "/foo/bar/baz/#{ymd}/draft-properties.html"
+      }
+
+      attrs.each do |attr, val|
+        attr_str = attr.to_s
+        result = draft[attr_str]
+        assert_equal val, result, "For <draft[\"#{attr_str}\"]>:"
+      end
+    end
+
+  end
+
+end
diff --git a/test/test_entry_filter.rb b/test/test_entry_filter.rb
index c295a57..e562277 100644
--- a/test/test_entry_filter.rb
+++ b/test/test_entry_filter.rb
@@ -18,13 +18,29 @@ class TestEntryFilter < Test::Unit::TestCase
     end
 
     should "filter entries with exclude" do
-      excludes = %w[README TODO]
-      files = %w[index.html site.css .htaccess]
+      excludes = %w[README TODO vendor/bundle]
+      files = %w[index.html site.css .htaccess vendor]
 
       @site.exclude = excludes + ["exclude*"]
       assert_equal files, @site.filter_entries(excludes + files + ["excludeA"])
     end
 
+    should "filter entries with exclude relative to site source" do
+      excludes = %w[README TODO css]
+      files = %w[index.html vendor/css .htaccess]
+
+      @site.exclude = excludes
+      assert_equal files, @site.filter_entries(excludes + files + ["css"])
+    end
+
+    should "filter excluded directory and contained files" do
+      excludes = %w[README TODO css]
+      files = %w[index.html .htaccess]
+
+      @site.exclude = excludes
+      assert_equal files, @site.filter_entries(excludes + files + ["css", "css/main.css", "css/vendor.css"])
+    end
+
     should "not filter entries within include" do
       includes = %w[_index.html .htaccess include*]
       files = %w[index.html _index.html .htaccess includeA]
@@ -71,4 +87,38 @@ class TestEntryFilter < Test::Unit::TestCase
       assert_not_equal [], site.static_files
     end
   end
+
+  context "#glob_include?" do
+    setup do
+      stub(Jekyll).configuration do
+        Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
+      end
+      @site = Site.new(Jekyll.configuration)
+      @filter = EntryFilter.new(@site)
+    end
+
+    should "return false with no glob patterns" do
+      assert !@filter.glob_include?([], "a.txt")
+    end
+
+    should "return false with all not match path" do
+      data = ["a*", "b?"]
+      assert !@filter.glob_include?(data, "ca.txt")
+      assert !@filter.glob_include?(data, "ba.txt")
+    end
+
+    should "return true with match path" do
+      data = ["a*", "b?", "**/a*"]
+      assert @filter.glob_include?(data, "a.txt")
+      assert @filter.glob_include?(data, "ba")
+      assert @filter.glob_include?(data, "c/a/a.txt")
+      assert @filter.glob_include?(data, "c/a/b/a.txt")
+    end
+
+    should "match even if there is no leading slash" do
+      data = ['vendor/bundle']
+      assert @filter.glob_include?(data, '/vendor/bundle')
+      assert @filter.glob_include?(data, 'vendor/bundle')
+    end
+  end
 end
diff --git a/test/test_excerpt.rb b/test/test_excerpt.rb
index 410e9e7..b6300fd 100644
--- a/test/test_excerpt.rb
+++ b/test/test_excerpt.rb
@@ -35,6 +35,48 @@ class TestExcerpt < Test::Unit::TestCase
       @excerpt = @post.send :extract_excerpt
     end
 
+    context "#include(string)" do
+
+      setup do
+        @excerpt.output = "Here is a fake output stub"
+      end
+
+      should "return true only if an excerpt output contains a specified string" do
+        assert @excerpt.include?("fake output")
+        refute @excerpt.include?("real output")
+      end
+    end
+
+    context "#id" do
+      should "contain the UID for the post" do
+        assert_equal @excerpt.id, "#{@post.id}/#excerpt"
+      end
+      should "return a string" do
+        assert_same @post.id.class, String
+      end
+    end
+
+    context "#to_s" do
+      should "return its content if no output present" do
+        assert_equal @excerpt.content, @excerpt.to_s
+      end
+
+      should "return its output if output present" do
+        @excerpt.output = "Fake Output"
+        assert_equal @excerpt.output, @excerpt.to_s
+      end
+    end
+
+    context "#inspect" do
+      should "contain the excerpt id as a shorthand string identifier" do
+        assert_equal @excerpt.inspect, "<Excerpt: #{@excerpt.id}>"
+      end
+
+      should "return a string" do
+        assert_same @post.id.class, String
+      end
+    end
+
     context "#to_liquid" do
       should "contain the proper page data to mimick the post liquid" do
         assert_equal "Post Excerpt with Layout", @excerpt.to_liquid["title"]
@@ -44,6 +86,17 @@ class TestExcerpt < Test::Unit::TestCase
         assert_equal %w[first second third jekyllrb.com], @excerpt.to_liquid["tags"]
         assert_equal "_posts/2013-07-22-post-excerpt-with-layout.markdown", @excerpt.to_liquid["path"]
       end
+
+      should "consider inheritance" do
+        klass = Class.new(Jekyll::Post)
+        assert_gets_called = false
+        klass.send(:define_method, :assert_gets_called) { assert_gets_called = true }
+        klass.const_set(:EXCERPT_ATTRIBUTES_FOR_LIQUID, Jekyll::Post::EXCERPT_ATTRIBUTES_FOR_LIQUID + ['assert_gets_called'])
+        post = klass.new(@site, source_dir, '', "2008-02-02-published.textile")
+        Jekyll::Excerpt.new(post).to_liquid
+
+        assert assert_gets_called, 'assert_gets_called did not get called on post.'
+      end
     end
 
     context "#content" do
@@ -66,7 +119,7 @@ class TestExcerpt < Test::Unit::TestCase
         end
 
         should "be the first paragraph of the page" do
-          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>", @extracted_excerpt.content
+          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>\n\n", @extracted_excerpt.content
         end
 
         should "link properly" do
diff --git a/test/test_filters.rb b/test/test_filters.rb
index 28e9612..f248026 100644
--- a/test/test_filters.rb
+++ b/test/test_filters.rb
@@ -1,20 +1,29 @@
+# coding: utf-8
+
 require 'helper'
 
 class TestFilters < Test::Unit::TestCase
   class JekyllFilter
     include Jekyll::Filters
+    attr_accessor :site, :context
 
-    def initialize
-      site = Jekyll::Site.new(Jekyll.configuration({}))
-      @context = Liquid::Context.new({}, {}, { :site => site })
+    def initialize(opts = {})
+      @site = Jekyll::Site.new(Jekyll.configuration(opts))
+      @context = Liquid::Context.new({}, {}, { :site => @site })
     end
   end
 
   context "filters" do
     setup do
-      @filter = JekyllFilter.new
+      @filter = JekyllFilter.new({"source" => source_dir, "destination" => dest_dir, "timezone" => "UTC"})
       @sample_time = Time.utc(2013, 03, 27, 11, 22, 33)
       @time_as_string = "September 11, 2001 12:46:30 -0000"
+      @time_as_numeric = 1399680607
+      @array_of_objects = [
+        { "color" => "red",  "size" => "large"  },
+        { "color" => "red",  "size" => "medium" },
+        { "color" => "blue", "size" => "medium" }
+      ]
     end
 
     should "textilize with simple string" do
@@ -22,7 +31,7 @@ class TestFilters < Test::Unit::TestCase
     end
 
     should "markdownify with simple string" do
-      assert_equal "<p>something <strong>really</strong> simple</p>", @filter.markdownify("something **really** simple")
+      assert_equal "<p>something <strong>really</strong> simple</p>\n", @filter.markdownify("something **really** simple")
     end
 
     should "convert array to sentence string with no args" do
@@ -80,6 +89,24 @@ class TestFilters < Test::Unit::TestCase
           assert_equal "Tue, 11 Sep 2001 12:46:30 -0000", @filter.date_to_rfc822(@time_as_string)
         end
       end
+
+      context "with a Numeric object" do
+        should "format a date with short format" do
+          assert_equal "10 May 2014", @filter.date_to_string(@time_as_numeric)
+        end
+
+        should "format a date with long format" do
+          assert_equal "10 May 2014", @filter.date_to_long_string(@time_as_numeric)
+        end
+
+        should "format a time with xmlschema" do
+          assert_match /2014-05-10T00:10:07/, @filter.date_to_xmlschema(@time_as_numeric)
+        end
+
+        should "format a time according to RFC-822" do
+          assert_equal "Sat, 10 May 2014 00:10:07 +0000", @filter.date_to_rfc822(@time_as_numeric)
+        end
+      end
     end
 
     should "escape xml with ampersands" do
@@ -87,6 +114,10 @@ class TestFilters < Test::Unit::TestCase
       assert_equal "<code>command &lt;filename&gt;</code>", @filter.xml_escape("<code>command <filename></code>")
     end
 
+    should "not error when xml escaping nil" do
+      assert_equal "", @filter.xml_escape(nil)
+    end
+
     should "escape space as plus" do
       assert_equal "my+things", @filter.cgi_escape("my things")
     end
@@ -109,5 +140,68 @@ class TestFilters < Test::Unit::TestCase
         assert_equal "[{\"name\":\"Jack\"},{\"name\":\"Smith\"}]", @filter.jsonify([{:name => 'Jack'}, {:name => 'Smith'}])
       end
     end
+
+    context "group_by filter" do
+      should "successfully group array of Jekyll::Page's" do
+        @filter.site.process
+        grouping = @filter.group_by(@filter.site.pages, "layout")
+        grouping.each do |g|
+          assert ["default", "nil", ""].include?(g["name"]), "#{g['name']} isn't a valid grouping."
+          case g["name"]
+          when "default"
+            assert g["items"].is_a?(Array), "The list of grouped items for 'default' is not an Array."
+            assert_equal 5, g["items"].size
+          when "nil"
+            assert g["items"].is_a?(Array), "The list of grouped items for 'nil' is not an Array."
+            assert_equal 2, g["items"].size
+          when ""
+            assert g["items"].is_a?(Array), "The list of grouped items for '' is not an Array."
+            assert_equal 11, g["items"].size
+          end
+        end
+      end
+    end
+
+    context "where filter" do
+      should "return any input that is not an array" do
+        assert_equal Hash.new, @filter.where(Hash.new, nil, nil)
+        assert_equal "some string", @filter.where("some string", "la", "le")
+      end
+
+      should "filter objects appropriately" do
+        assert_equal 2, @filter.where(@array_of_objects, "color", "red").length
+      end
+    end
+
+    context "sort filter" do
+      should "return sorted numbers" do
+        assert_equal [1, 2, 2.2, 3], @filter.sort([3, 2.2, 2, 1])
+      end
+      should "return sorted strings" do
+        assert_equal ["10", "2"], @filter.sort(["10", "2"])
+        assert_equal [{"a" => "10"}, {"a" => "2"}], @filter.sort([{"a" => "10"}, {"a" => "2"}], "a")
+        assert_equal ["FOO", "Foo", "foo"], @filter.sort(["foo", "Foo", "FOO"])
+        assert_equal ["_foo", "foo", "foo_"], @filter.sort(["foo_", "_foo", "foo"])
+        # Cyrillic
+        assert_equal ["ВУЗ", "Вуз", "вуз"], @filter.sort(["Вуз", "вуз", "ВУЗ"])
+        assert_equal ["_вуз", "вуз", "вуз_"], @filter.sort(["вуз_", "_вуз", "вуз"])
+        # Hebrew
+        assert_equal ["אלף", "בית"], @filter.sort(["בית", "אלף"])
+      end
+      should "return sorted by property array" do
+        assert_equal [{"a" => 1}, {"a" => 2}, {"a" => 3}, {"a" => 4}],
+          @filter.sort([{"a" => 4}, {"a" => 3}, {"a" => 1}, {"a" => 2}], "a")
+      end
+      should "return sorted by property array with nils first" do
+        ary = [{"a" => 2}, {"b" => 1}, {"a" => 1}]
+        assert_equal [{"b" => 1}, {"a" => 1}, {"a" => 2}], @filter.sort(ary, "a")
+        assert_equal @filter.sort(ary, "a"), @filter.sort(ary, "a", "first")
+      end
+      should "return sorted by property array with nils last" do
+        assert_equal [{"a" => 1}, {"a" => 2}, {"b" => 1}],
+          @filter.sort([{"a" => 2}, {"b" => 1}, {"a" => 1}], "a", "last")
+      end
+    end
+
   end
 end
diff --git a/test/test_generated_site.rb b/test/test_generated_site.rb
index 866f753..ca3124c 100644
--- a/test/test_generated_site.rb
+++ b/test/test_generated_site.rb
@@ -14,7 +14,7 @@ class TestGeneratedSite < Test::Unit::TestCase
     end
 
     should "ensure post count is as expected" do
-      assert_equal 37, @site.posts.size
+      assert_equal 42, @site.posts.size
     end
 
     should "insert site.posts into the index" do
@@ -32,13 +32,27 @@ class TestGeneratedSite < Test::Unit::TestCase
       assert_equal "published.html", published.first
     end
 
+    should "hide unpublished page" do
+      assert !File.exist?(dest_dir('/unpublished.html'))
+    end
+
     should "not copy _posts directory" do
       assert !File.exist?(dest_dir('_posts'))
     end
 
     should "process other static files and generate correct permalinks" do
-      assert File.exists?(dest_dir('/about/index.html'))
-      assert File.exists?(dest_dir('/contacts.html'))
+      assert File.exist?(dest_dir('/about/index.html'))
+      assert File.exist?(dest_dir('/contacts.html'))
+    end
+
+    should "print a nice list of static files" do
+      expected_output = Regexp.new <<-OUTPUT
+- /css/screen.css last edited at \\d+ with extname .css
+- /pgp.key last edited at \\d+ with extname .key
+- /products.yml last edited at \\d+ with extname .yml
+- /symlink-test/symlinked-dir/screen.css last edited at \\d+ with extname .css
+OUTPUT
+      assert_match expected_output, File.read(dest_dir('static_files.html'))
     end
   end
 
diff --git a/test/test_kramdown.rb b/test/test_kramdown.rb
index 1d4c09f..f2bd8a0 100644
--- a/test/test_kramdown.rb
+++ b/test/test_kramdown.rb
@@ -26,7 +26,7 @@ class TestKramdown < Test::Unit::TestCase
       @markdown = Converters::Markdown.new(@config)
     end
 
-    # http://kramdown.rubyforge.org/converter/html.html#options
+    # http://kramdown.gettalong.org/converter/html.html#options
     should "pass kramdown options" do
       assert_equal "<h1>Some Header</h1>", @markdown.convert('# Some Header #').strip
     end
@@ -35,7 +35,7 @@ class TestKramdown < Test::Unit::TestCase
       assert_match /<p>(“|“)Pit(’|’)hy(”|”)<\/p>/, @markdown.convert(%{"Pit'hy"}).strip
 
       override = { 'kramdown' => { 'smart_quotes' => 'lsaquo,rsaquo,laquo,raquo' } }
-      markdown = Converters::Markdown.new(@config.deep_merge(override))
+      markdown = Converters::Markdown.new(Utils.deep_merge_hashes(@config, override))
       assert_match /<p>(«|«)Pit(›|›)hy(»|»)<\/p>/, markdown.convert(%{"Pit'hy"}).strip
     end
 
diff --git a/test/test_layout_reader.rb b/test/test_layout_reader.rb
new file mode 100644
index 0000000..ff979c2
--- /dev/null
+++ b/test/test_layout_reader.rb
@@ -0,0 +1,34 @@
+require 'helper'
+
+class TestLayoutReader < Test::Unit::TestCase
+  context "reading layouts" do
+    setup do
+      stub(Jekyll).configuration do
+        Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
+      end
+      @site = Site.new(Jekyll.configuration)
+    end
+
+    should "read layouts" do
+      layouts = LayoutReader.new(@site).read
+      assert_equal ["default", "simple", "post/simple"].sort, layouts.keys.sort
+    end
+
+    context "when no _layouts directory exists in CWD" do
+      should "know to use the layout directory relative to the site source" do
+        assert_equal LayoutReader.new(@site).layout_directory, source_dir("_layouts")
+      end
+    end
+
+    context "when a _layouts directory exists in CWD" do
+      setup do
+        stub(File).directory? { true }
+        stub(Dir).pwd { source_dir("blah") }
+      end
+
+      should "know to use the layout directory relative to CWD" do
+        assert_equal LayoutReader.new(@site).layout_directory, source_dir("blah/_layouts")
+      end
+    end
+  end
+end
diff --git a/test/test_liquid_extensions.rb b/test/test_liquid_extensions.rb
new file mode 100644
index 0000000..2395a8d
--- /dev/null
+++ b/test/test_liquid_extensions.rb
@@ -0,0 +1,31 @@
+require 'helper'
+
+class TestLiquidExtensions < Test::Unit::TestCase
+
+  context "looking up a variable in a Liquid context" do
+    class SayHi < Liquid::Tag
+      include Jekyll::LiquidExtensions
+
+      def initialize(tag_name, markup, tokens)
+        @markup = markup.strip
+      end
+
+      def render(context)
+        "hi #{lookup_variable(context, @markup)}"
+      end
+    end
+    Liquid::Template.register_tag('say_hi', SayHi)
+    setup do
+      @template = Liquid::Template.parse("{% say_hi page.name %}") # Parses and compiles the template
+    end
+
+    should "extract the var properly" do
+      assert_equal @template.render({'page' => {'name' => 'tobi'}}), 'hi tobi'
+    end
+
+    should "return the variable name if the value isn't there" do
+      assert_equal @template.render({'page' => {'title' => 'tobi'}}), 'hi page.name'
+    end
+  end
+
+end
diff --git a/test/test_log_adapter.rb b/test/test_log_adapter.rb
new file mode 100644
index 0000000..3dd3465
--- /dev/null
+++ b/test/test_log_adapter.rb
@@ -0,0 +1,59 @@
+require 'helper'
+
+class TestLogAdapter < Test::Unit::TestCase
+  class LoggerDouble
+    attr_accessor :level
+  end
+
+  context "#log_level=" do
+    should "set the writers logging level" do
+      subject = Jekyll::LogAdapter.new(LoggerDouble.new)
+      subject.log_level = :error
+      assert_equal Jekyll::LogAdapter::LOG_LEVELS[:error], subject.writer.level
+    end
+  end
+
+  context "#debug" do
+    should "call #debug on writer return true" do
+      writer = LoggerDouble.new
+      logger = Jekyll::LogAdapter.new(writer)
+      stub(writer).debug('topic '.rjust(20) + 'log message') { true }
+      assert logger.debug('topic', 'log message')
+    end
+  end
+
+  context "#info" do
+    should "call #info on writer return true" do
+      writer = LoggerDouble.new
+      logger = Jekyll::LogAdapter.new(writer)
+      stub(writer).info('topic '.rjust(20) + 'log message') { true }
+      assert logger.info('topic', 'log message')
+    end
+  end
+
+  context "#warn" do
+    should "call #warn on writer return true" do
+      writer = LoggerDouble.new
+      logger = Jekyll::LogAdapter.new(writer)
+      stub(writer).warn('topic '.rjust(20) + 'log message') { true }
+      assert logger.warn('topic', 'log message')
+    end
+  end
+
+  context "#error" do
+    should "call #error on writer return true" do
+      writer = LoggerDouble.new
+      logger = Jekyll::LogAdapter.new(writer)
+      stub(writer).error('topic '.rjust(20) + 'log message') { true }
+      assert logger.error('topic', 'log message')
+    end
+  end
+
+  context "#abort_with" do
+    should "call #error and abort" do
+      logger = Jekyll::LogAdapter.new(LoggerDouble.new)
+      stub(logger).error('topic', 'log message') { true }
+      assert_raise(SystemExit) { logger.abort_with('topic', 'log message') }
+    end
+  end
+end
diff --git a/test/test_new_command.rb b/test/test_new_command.rb
index bc9e658..bc58bd2 100644
--- a/test/test_new_command.rb
+++ b/test/test_new_command.rb
@@ -24,14 +24,14 @@ class TestNewCommand < Test::Unit::TestCase
     end
 
     should 'create a new directory' do
-      assert !File.exists?(@full_path)
+      assert !File.exist?(@full_path)
       capture_stdout { Jekyll::Commands::New.process(@args) }
-      assert File.exists?(@full_path)
+      assert File.exist?(@full_path)
     end
 
     should 'display a success message' do
       output = capture_stdout { Jekyll::Commands::New.process(@args) }
-      success_message = "New jekyll site installed in #{@full_path}.\n"
+      success_message = "New jekyll site installed in #{@full_path}. \n"
       assert_equal success_message, output
     end
 
@@ -83,9 +83,9 @@ class TestNewCommand < Test::Unit::TestCase
     end
 
     should 'create a new directory' do
-      assert !File.exists?(@site_name_with_spaces)
+      assert !File.exist?(@site_name_with_spaces)
       capture_stdout { Jekyll::Commands::New.process(@multiple_args) }
-      assert File.exists?(@site_name_with_spaces)
+      assert File.exist?(@site_name_with_spaces)
     end
   end
 
diff --git a/test/test_page.rb b/test/test_page.rb
index 9829b00..b34b511 100644
--- a/test/test_page.rb
+++ b/test/test_page.rb
@@ -25,6 +25,16 @@ class TestPage < Test::Unit::TestCase
         assert_equal "/contacts.html", @page.url
       end
 
+      should "not published when published yaml is false" do
+        @page = setup_page("unpublished.html")
+        assert_equal false, @page.published?
+      end
+
+      should "create url with non-alphabetic characters" do
+        @page = setup_page('+', '%# +.md')
+        assert_equal "/+/%25%23%20+.html", @page.url
+      end
+
       context "in a directory hierarchy" do
         should "create url based on filename" do
           @page = setup_page('/contacts', 'bar.html')
@@ -47,6 +57,29 @@ class TestPage < Test::Unit::TestCase
         assert_equal "deal.with.dots", @page.basename
       end
 
+      should "make properties accessible through #[]" do
+        page = setup_page('properties.html')
+        attrs = {
+          content: "All the properties.\n",
+          dir: "/properties/",
+          excerpt: nil,
+          foo: 'bar',
+          layout: 'default',
+          name: "properties.html",
+          path: "properties.html",
+          permalink: '/properties/',
+          published: nil,
+          title: 'Properties Page',
+          url: "/properties/"
+        }
+
+        attrs.each do |attr, val|
+          attr_str = attr.to_s
+          result = page[attr_str]
+          assert_equal val, result, "For <page[\"#{attr_str}\"]>:"
+        end
+      end
+
       context "with pretty url style" do
         setup do
           @site.permalink_style = :pretty
@@ -134,7 +167,7 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, 'contacts.html'))
+        assert File.exist?(File.join(dest_dir, 'contacts.html'))
       end
 
       should "write even when the folder name is plus and permalink has +" do
@@ -143,7 +176,16 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, '+', 'plus+in+url'))
+        assert File.exist?(File.join(dest_dir, '+', 'plus+in+url'))
+      end
+
+      should "write even when permalink has '%# +'" do
+        page = setup_page('+', '%# +.md')
+        do_render(page)
+        page.write(dest_dir)
+
+        assert File.directory?(dest_dir)
+        assert File.exist?(File.join(dest_dir, '+', '%# +.html'))
       end
 
       should "write properly without html extension" do
@@ -153,7 +195,7 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, 'contacts', 'index.html'))
+        assert File.exist?(File.join(dest_dir, 'contacts', 'index.html'))
       end
 
       should "write properly with extension different from html" do
@@ -165,7 +207,7 @@ class TestPage < Test::Unit::TestCase
         assert_equal("/sitemap.xml", page.url)
         assert_nil(page.url[/\.html$/])
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir,'sitemap.xml'))
+        assert File.exist?(File.join(dest_dir,'sitemap.xml'))
       end
 
       should "write dotfiles properly" do
@@ -174,7 +216,7 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, '.htaccess'))
+        assert File.exist?(File.join(dest_dir, '.htaccess'))
       end
 
       context "in a directory hierarchy" do
@@ -184,7 +226,7 @@ class TestPage < Test::Unit::TestCase
           page.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'contacts', 'index.html'))
+          assert File.exist?(File.join(dest_dir, 'contacts', 'index.html'))
         end
 
         should "write properly" do
@@ -193,7 +235,7 @@ class TestPage < Test::Unit::TestCase
           page.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'contacts', 'bar.html'))
+          assert File.exist?(File.join(dest_dir, 'contacts', 'bar.html'))
         end
 
         should "write properly without html extension" do
@@ -203,7 +245,7 @@ class TestPage < Test::Unit::TestCase
           page.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'contacts', 'bar', 'index.html'))
+          assert File.exist?(File.join(dest_dir, 'contacts', 'bar', 'index.html'))
         end
       end
     end
diff --git a/test/test_pager.rb b/test/test_pager.rb
deleted file mode 100644
index b066b9a..0000000
--- a/test/test_pager.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-require 'helper'
-
-class TestPager < Test::Unit::TestCase
-
-  def build_site(config = {})
-    base = Jekyll::Configuration::DEFAULTS.deep_merge({
-      'source'      => source_dir,
-      'destination' => dest_dir,
-      'paginate'    => 1
-    })
-    site = Jekyll::Site.new(base.deep_merge(config))
-    site.process
-    site
-  end
-
-  should "calculate number of pages" do
-    assert_equal(0, Pager.calculate_pages([], '2'))
-    assert_equal(1, Pager.calculate_pages([1], '2'))
-    assert_equal(1, Pager.calculate_pages([1,2], '2'))
-    assert_equal(2, Pager.calculate_pages([1,2,3], '2'))
-    assert_equal(2, Pager.calculate_pages([1,2,3,4], '2'))
-    assert_equal(3, Pager.calculate_pages([1,2,3,4,5], '2'))
-  end
-
-  should "determine the pagination path" do
-    assert_equal("/index.html",  Pager.paginate_path(build_site, 1))
-    assert_equal("/page2",       Pager.paginate_path(build_site, 2))
-    assert_equal("/index.html",  Pager.paginate_path(build_site({'paginate_path' => '/blog/page-:num'}), 1))
-    assert_equal("/blog/page-2", Pager.paginate_path(build_site({'paginate_path' => '/blog/page-:num'}), 2))
-    assert_equal("/index.html",  Pager.paginate_path(build_site({'paginate_path' => '/blog/page/:num'}), 1))
-    assert_equal("/blog/page/2", Pager.paginate_path(build_site({'paginate_path' => '/blog/page/:num'}), 2))
-    assert_equal("/contacts/index.html", Pager.paginate_path(build_site({'paginate_path' => '/contacts/page:num'}), 1))
-    assert_equal("/contacts/page2",      Pager.paginate_path(build_site({'paginate_path' => '/contacts/page:num'}), 2))
-    assert_equal("/contacts/index.html", Pager.paginate_path(build_site({'paginate_path' => '/contacts/page/:num'}), 1))
-    assert_equal("/contacts/page/2",     Pager.paginate_path(build_site({'paginate_path' => '/contacts/page/:num'}), 2))
-  end
-
-  context "pagination disabled" do
-    should "report that pagination is disabled" do
-      assert !Pager.pagination_enabled?(build_site('paginate' => nil))
-    end
-  end
-
-  context "pagination enabled for 2" do
-    setup do
-      @site  = build_site('paginate' => 2)
-      @posts = @site.posts
-    end
-
-    should "report that pagination is enabled" do
-      assert Pager.pagination_enabled?(@site)
-    end
-
-    context "with 4 posts" do
-      setup do
-        @posts = @site.posts[1..4] # limit to 4
-      end
-
-      should "create first pager" do
-        pager = Pager.new(@site, 1, @posts)
-        assert_equal(2, pager.posts.size)
-        assert_equal(2, pager.total_pages)
-        assert_nil(pager.previous_page)
-        assert_equal(2, pager.next_page)
-      end
-
-      should "create second pager" do
-        pager = Pager.new(@site, 2, @posts)
-        assert_equal(2, pager.posts.size)
-        assert_equal(2, pager.total_pages)
-        assert_equal(1, pager.previous_page)
-        assert_nil(pager.next_page)
-      end
-
-      should "not create third pager" do
-        assert_raise(RuntimeError) { Pager.new(@site, 3, @posts) }
-      end
-
-    end
-
-    context "with 5 posts" do
-      setup do
-        @posts = @site.posts[1..5] # limit to 5
-      end
-
-      should "create first pager" do
-        pager = Pager.new(@site, 1, @posts)
-        assert_equal(2, pager.posts.size)
-        assert_equal(3, pager.total_pages)
-        assert_nil(pager.previous_page)
-        assert_equal(2, pager.next_page)
-      end
-
-      should "create second pager" do
-        pager = Pager.new(@site, 2, @posts)
-        assert_equal(2, pager.posts.size)
-        assert_equal(3, pager.total_pages)
-        assert_equal(1, pager.previous_page)
-        assert_equal(3, pager.next_page)
-      end
-
-      should "create third pager" do
-        pager = Pager.new(@site, 3, @posts)
-        assert_equal(1, pager.posts.size)
-        assert_equal(3, pager.total_pages)
-        assert_equal(2, pager.previous_page)
-        assert_nil(pager.next_page)
-      end
-
-      should "not create fourth pager" do
-        assert_raise(RuntimeError) { Pager.new(@site, 4, @posts) }
-      end
-
-    end
-  end
-end
diff --git a/test/test_post.rb b/test/test_post.rb
index 2e7a32c..bf9b741 100644
--- a/test/test_post.rb
+++ b/test/test_post.rb
@@ -1,3 +1,5 @@
+# encoding: utf-8
+
 require 'helper'
 
 class TestPost < Test::Unit::TestCase
@@ -25,6 +27,34 @@ class TestPost < Test::Unit::TestCase
       assert !Post.valid?("blah")
     end
 
+    should "make properties accessible through #[]" do
+      post = setup_post('2013-12-20-properties.text')
+
+      attrs = {
+        categories: %w(foo bar baz),
+        content: "All the properties.\n\nPlus an excerpt.\n",
+        date: Time.new(2013, 12, 20),
+        dir: "/foo/bar/baz/2013/12/20",
+        excerpt: "All the properties.\n\n",
+        foo: 'bar',
+        id: "/foo/bar/baz/2013/12/20/properties",
+        layout: 'default',
+        name: nil,
+        path: "_posts/2013-12-20-properties.text",
+        permalink: nil,
+        published: nil,
+        tags: %w(ay bee cee),
+        title: 'Properties Post',
+        url: "/foo/bar/baz/2013/12/20/properties.html"
+      }
+
+      attrs.each do |attr, val|
+        attr_str = attr.to_s
+        result = post[attr_str]
+        assert_equal val, result, "For <post[\"#{attr_str}\"]>:"
+      end
+    end
+
     context "processing posts" do
       setup do
         @post = Post.allocate
@@ -46,6 +76,21 @@ class TestPost < Test::Unit::TestCase
         assert_equal "/2008/09/09/foo-bar", @post.id
       end
 
+      should "keep categories" do
+        post = Post.allocate
+        post.site = @site
+        post.process("cat1/2008-09-09-foo-bar.textile")
+        assert_equal 1, post.categories.size
+        assert_equal "cat1", post.categories[0]
+
+        post = Post.allocate
+        post.site = @site
+        post.process("cat2/CAT3/2008-09-09-foo-bar.textile")
+        assert_equal 2, post.categories.size
+        assert_equal "cat2", post.categories[0]
+        assert_equal "cat3", post.categories[1]
+      end
+
       should "create url based on date and title" do
         @post.categories = []
         @post.process(@fake_file)
@@ -53,18 +98,33 @@ class TestPost < Test::Unit::TestCase
       end
 
       should "raise a good error on invalid post date" do
-        assert_raise Jekyll::FatalException do
+        assert_raise Jekyll::Errors::FatalException do
           @post.process("2009-27-03-foo-bar.textile")
         end
       end
 
-      should "CGI escape urls" do
+      should "escape urls" do
         @post.categories = []
         @post.process("2009-03-12-hash-#1.markdown")
         assert_equal "/2009/03/12/hash-%231.html", @post.url
         assert_equal "/2009/03/12/hash-#1", @post.id
       end
 
+      should "escape urls with non-alphabetic characters" do
+        @post.categories = []
+        @post.process("2014-03-22-escape-+ %20[].markdown")
+        assert_equal "/2014/03/22/escape-+%20%2520%5B%5D.html", @post.url
+        assert_equal "/2014/03/22/escape-+ %20[]", @post.id
+      end
+
+      should "return a UTF-8 escaped string" do
+        assert_equal Encoding::UTF_8, URL.escape_path("/rails笔记/2014/04/20/escaped/").encoding
+      end
+
+      should "return a UTF-8 unescaped string" do
+        assert_equal Encoding::UTF_8, URL.unescape_path("/rails%E7%AC%94%E8%AE%B0/2014/04/20/escaped/".encode(Encoding::ASCII)).encoding
+      end
+
       should "respect permalink in yaml front matter" do
         file = "2008-12-03-permalinked-post.textile"
         @post.process(file)
@@ -99,6 +159,18 @@ class TestPost < Test::Unit::TestCase
         end
       end
 
+      context "with three dots ending YAML header" do
+        setup do
+          @real_file = "2014-03-03-yaml-with-dots.md"
+        end
+        should "should read the YAML header" do
+          @post.read_yaml(@source, @real_file)
+
+          assert_equal({"title" => "Test Post Where YAML Ends in Dots"},
+                       @post.data)
+        end
+      end
+
       context "with embedded triple dash" do
         setup do
           @real_file = "2010-01-08-triple-dash.markdown"
@@ -295,7 +367,7 @@ class TestPost < Test::Unit::TestCase
         end
 
         should "return rendered HTML" do
-          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>",
+          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>\n\n",
                        @post.excerpt
         end
 
@@ -368,16 +440,6 @@ class TestPost < Test::Unit::TestCase
     end
 
     context "initializing posts" do
-      should "publish when published yaml is no specified" do
-        post = setup_post("2008-02-02-published.textile")
-        assert_equal true, post.published
-      end
-
-      should "not published when published yaml is false" do
-        post = setup_post("2008-02-02-not-published.textile")
-        assert_equal false, post.published
-      end
-
       should "recognize date in yaml" do
         post = setup_post("2010-01-09-date-override.textile")
         do_render(post)
@@ -413,6 +475,17 @@ class TestPost < Test::Unit::TestCase
         assert_equal Time, post.to_liquid["date"].class
       end
 
+      should "to_liquid should consider inheritance" do
+        klass = Class.new(Jekyll::Post)
+        assert_gets_called = false
+        klass.send(:define_method, :assert_gets_called) { assert_gets_called = true }
+        klass.const_set(:EXCERPT_ATTRIBUTES_FOR_LIQUID, Jekyll::Post::EXCERPT_ATTRIBUTES_FOR_LIQUID + ['assert_gets_called'])
+        post = klass.new(@site, source_dir, '', "2008-02-02-published.textile")
+        do_render(post)
+
+        assert assert_gets_called, 'assert_gets_called did not get called on post.'
+      end
+
       should "recognize category in yaml" do
         post = setup_post("2009-01-27-category.textile")
         assert post.categories.include?('foo')
@@ -490,7 +563,27 @@ class TestPost < Test::Unit::TestCase
           post.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
+          assert File.exist?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
+        end
+
+        should "write properly when url has hash" do
+          post = setup_post("2009-03-12-hash-#1.markdown")
+          do_render(post)
+          post.write(dest_dir)
+
+          assert File.directory?(dest_dir)
+          assert File.exist?(File.join(dest_dir, '2009', '03', '12',
+                                        'hash-#1.html'))
+        end
+
+        should "write properly when url has space" do
+          post = setup_post("2014-03-22-escape-+ %20[].markdown")
+          do_render(post)
+          post.write(dest_dir)
+
+          assert File.directory?(dest_dir)
+          assert File.exist?(File.join(dest_dir, '2014', '03', '22',
+                                        'escape-+ %20[].html'))
         end
 
         should "write properly without html extension" do
@@ -500,7 +593,7 @@ class TestPost < Test::Unit::TestCase
           post.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'foo-bar', 'index.html'))
+          assert File.exist?(File.join(dest_dir, 'foo-bar', 'index.html'))
         end
 
         should "insert data" do
@@ -515,7 +608,7 @@ class TestPost < Test::Unit::TestCase
           post.site.source = File.join(File.dirname(__FILE__), 'source')
           do_render(post)
 
-          assert_equal "<<< <hr />\n<p>Tom Preston-Werner github.com/mojombo</p>\n\n<p>This <em>is</em> cool</p> >>>", post.output
+          assert_equal "<<< <hr />\n<p>Tom Preston-Werner\ngithub.com/mojombo</p>\n\n<p>This <em>is</em> cool</p>\n >>>", post.output
         end
 
         should "render date specified in front matter properly" do
@@ -537,7 +630,7 @@ class TestPost < Test::Unit::TestCase
 
     should "generate categories and topics" do
       post = Post.new(@site, File.join(File.dirname(__FILE__), *%w[source]), 'foo', 'bar/2008-12-12-topical-post.textile')
-      assert_equal ['foo'], post.categories
+      assert_equal ['foo', 'bar'], post.categories
     end
   end
 
@@ -589,4 +682,60 @@ class TestPost < Test::Unit::TestCase
 
   end
 
+  context "site config with category" do
+    setup do
+      config = Jekyll::Configuration::DEFAULTS.merge({
+        'defaults' => [
+          'scope' => {
+            'path' => ''
+          },
+          'values' => {
+            'category' => 'article'
+          }
+        ]
+      })
+      @site = Site.new(config)
+    end
+
+    should "return category if post does not specify category" do
+      post = setup_post("2009-01-27-no-category.textile")
+      assert post.categories.include?('article'), "Expected post.categories to include 'article' but did not."
+    end
+
+    should "override site category if set on post" do
+      post = setup_post("2009-01-27-category.textile")
+      assert post.categories.include?('foo'), "Expected post.categories to include 'foo' but did not."
+      assert !post.categories.include?('article'), "Did not expect post.categories to include 'article' but it did."
+    end
+  end
+
+  context "site config with categories" do
+    setup do
+      config = Jekyll::Configuration::DEFAULTS.merge({
+        'defaults' => [
+          'scope' => {
+            'path' => ''
+          },
+          'values' => {
+            'categories' => ['article']
+          }
+        ]
+      })
+      @site = Site.new(config)
+    end
+
+    should "return categories if post does not specify categories" do
+      post = setup_post("2009-01-27-no-category.textile")
+      assert post.categories.include?('article'), "Expected post.categories to include 'article' but did not."
+    end
+
+    should "override site categories if set on post" do
+      post = setup_post("2009-01-27-categories.textile")
+      ['foo', 'bar', 'baz'].each do |category|
+        assert post.categories.include?(category), "Expected post.categories to include '#{category}' but did not."
+      end
+      assert !post.categories.include?('article'), "Did not expect post.categories to include 'article' but it did."
+    end
+  end
+
 end
diff --git a/test/test_redcarpet.rb b/test/test_redcarpet.rb
index c6e8b92..ebf3b18 100644
--- a/test/test_redcarpet.rb
+++ b/test/test_redcarpet.rb
@@ -28,11 +28,11 @@ class TestRedcarpet < Test::Unit::TestCase
 
     context "with pygments enabled" do
       setup do
-        @markdown = Converters::Markdown.new @config.merge({ 'pygments' => true })
+        @markdown = Converters::Markdown.new @config.merge({ 'highlighter' => 'pygments' })
       end
 
       should "render fenced code blocks with syntax highlighting" do
-        assert_equal "<div class=\"highlight\"><pre><code class=\"ruby language-ruby\" data-lang=\"ruby\"><span class=\"nb\">puts</span> <span class=\"s2\">"Hello world"</span>\n</code></pre></div>", @markdown.convert(
+        assert_equal "<div class=\"highlight\"><pre><code class=\"language-ruby\" data-lang=\"ruby\"><span class=\"nb\">puts</span> <span class=\"s2\">"Hello world"</span>\n</code></pre></div>", @markdown.convert(
           <<-EOS
 ```ruby
 puts "Hello world"
@@ -42,13 +42,29 @@ puts "Hello world"
       end
     end
 
-    context "with pygments disabled" do
+    context "with rouge enabled" do
       setup do
-        @markdown = Converters::Markdown.new @config.merge({ 'pygments' => false })
+        @markdown = Converters::Markdown.new @config.merge({ 'highlighter' => 'rouge' })
+      end
+
+      should "render fenced code blocks with syntax highlighting" do
+        assert_equal "<div class=\"highlight\"><pre><code class=\"language-ruby\" data-lang=\"ruby\"><span class=\"nb\">puts</span> <span class=\"s2\">\"Hello world\"</span>\n</code></pre></div>", @markdown.convert(
+          <<-EOS
+```ruby
+puts "Hello world"
+```
+          EOS
+        ).strip
+      end
+    end
+
+    context "without any highlighter" do
+      setup do
+        @markdown = Converters::Markdown.new @config.merge({ 'highlighter' => nil })
       end
 
       should "render fenced code blocks without syntax highlighting" do
-        assert_equal "<div class=\"highlight\"><pre><code class=\"ruby language-ruby\" data-lang=\"ruby\">puts "Hello world"\n</code></pre></div>", @markdown.convert(
+        assert_equal "<div class=\"highlight\"><pre><code class=\"language-ruby\" data-lang=\"ruby\">puts "Hello world"\n</code></pre></div>", @markdown.convert(
           <<-EOS
 ```ruby
 puts "Hello world"
diff --git a/test/test_sass.rb b/test/test_sass.rb
new file mode 100644
index 0000000..102815a
--- /dev/null
+++ b/test/test_sass.rb
@@ -0,0 +1,26 @@
+require 'helper'
+
+class TestSass < Test::Unit::TestCase
+  context "importing partials" do
+    setup do
+      @site = Jekyll::Site.new(Jekyll.configuration({
+        "source" => source_dir,
+        "destination" => dest_dir
+      }))
+      @site.process
+      @test_css_file = dest_dir("css/main.css")
+    end
+
+    should "import SCSS partial" do
+      assert_equal ".half {\n  width: 50%; }\n", File.read(@test_css_file)
+    end
+
+    should "register the SCSS converter" do
+      assert !!@site.getConverterImpl(Jekyll::Converters::Scss), "SCSS converter implementation should exist."
+    end
+
+    should "register the Sass converter" do
+      assert !!@site.getConverterImpl(Jekyll::Converters::Sass), "Sass converter implementation should exist."
+    end
+  end
+end
diff --git a/test/test_site.rb b/test/test_site.rb
index 35359a2..0ca9093 100644
--- a/test/test_site.rb
+++ b/test/test_site.rb
@@ -154,9 +154,31 @@ class TestSite < Test::Unit::TestCase
       assert_equal @site.generators.sort_by(&:class).map{|g|g.class.priority}, @site.generators.map{|g|g.class.priority}
     end
 
-    should "read layouts" do
-      @site.read_layouts
-      assert_equal ["default", "simple", "post/simple"].sort, @site.layouts.keys.sort
+    should "sort pages alphabetically" do
+      stub.proxy(Dir).entries { |entries| entries.reverse }
+      @site.process
+      # files in symlinked directories may appear twice
+      sorted_pages = %w(
+        %#\ +.md
+        .htaccess
+        about.html
+        bar.html
+        coffeescript.coffee
+        contacts.html
+        deal.with.dots.html
+        environment.html
+        exploit.md
+        foo.md
+        index.html
+        index.html
+        main.scss
+        main.scss
+        properties.html
+        sitemap.xml
+        static_files.html
+        symlinked-file
+      )
+      assert_equal sorted_pages, @site.pages.map(&:name)
     end
 
     should "read posts" do
@@ -166,17 +188,35 @@ class TestSite < Test::Unit::TestCase
       assert_equal posts.size - @num_invalid_posts, @site.posts.size
     end
 
+    should "read pages with yaml front matter" do
+      abs_path = File.expand_path("about.html", @site.source)
+      assert_equal true, @site.send(:has_yaml_header?, abs_path)
+    end
+
+    should "enforce a strict 3-dash limit on the start of the YAML front-matter" do
+      abs_path = File.expand_path("pgp.key", @site.source)
+      assert_equal false, @site.send(:has_yaml_header?, abs_path)
+    end
+
+    should "expose jekyll version to site payload" do
+      assert_equal Jekyll::VERSION, @site.site_payload['jekyll']['version']
+    end
+
+    should "expose list of static files to site payload" do
+      assert_equal @site.static_files, @site.site_payload['site']['static_files']
+    end
+
     should "deploy payload" do
       clear_dest
       @site.process
 
       posts = Dir[source_dir("**", "_posts", "**", "*")]
       posts.delete_if { |post| File.directory?(post) && !Post.valid?(post) }
-      categories = %w(2013 bar baz category foo z_category publish_test win).sort
+      categories = %w(2013 bar baz category es foo z_category publish_test win).sort
 
       assert_equal posts.size - @num_invalid_posts, @site.posts.size
       assert_equal categories, @site.categories.keys.sort
-      assert_equal 4, @site.categories['foo'].size
+      assert_equal 5, @site.categories['foo'].size
     end
 
     context 'error handling' do
@@ -185,7 +225,7 @@ class TestSite < Test::Unit::TestCase
           Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => source_dir})
         end
 
-        assert_raise Jekyll::FatalException do
+        assert_raise Jekyll::Errors::FatalException do
           site = Site.new(Jekyll.configuration)
         end
       end
@@ -195,7 +235,7 @@ class TestSite < Test::Unit::TestCase
           Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => File.join(source_dir, "..")})
         end
 
-        assert_raise Jekyll::FatalException do
+        assert_raise Jekyll::Errors::FatalException do
           site = Site.new(Jekyll.configuration)
         end
       end
@@ -255,6 +295,52 @@ class TestSite < Test::Unit::TestCase
       end
     end
 
+    context 'using a non-default markdown processor in the configuration' do
+      should 'use the non-default markdown processor' do
+        class Jekyll::Converters::Markdown::CustomMarkdown
+          def initialize(*args)
+            @args = args
+          end
+
+          def convert(*args)
+            ""
+          end
+        end
+
+        custom_processor = "CustomMarkdown"
+        s = Site.new(Jekyll.configuration.merge({ 'markdown' => custom_processor }))
+        assert_nothing_raised do
+          s.process
+        end
+
+        # Do some cleanup, we don't like straggling stuff's.
+        Jekyll::Converters::Markdown.send(:remove_const, :CustomMarkdown)
+      end
+
+      should 'ignore, if there are any bad characters in the class name' do
+        module Jekyll::Converters::Markdown::Custom
+          class Markdown
+            def initialize(*args)
+              @args = args
+            end
+
+            def convert(*args)
+              ""
+            end
+          end
+        end
+
+        bad_processor = "Custom::Markdown"
+        s = Site.new(Jekyll.configuration.merge({ 'markdown' => bad_processor }))
+        assert_raise Jekyll::Errors::FatalException do
+          s.process
+        end
+
+        # Do some cleanup, we don't like straggling stuff's.
+        Jekyll::Converters::Markdown.send(:remove_const, :Custom)
+      end
+    end
+
     context 'with an invalid markdown processor in the configuration' do
       should 'not throw an error at initialization time' do
         bad_processor = 'not a processor name'
@@ -266,7 +352,7 @@ class TestSite < Test::Unit::TestCase
       should 'throw FatalException at process time' do
         bad_processor = 'not a processor name'
         s = Site.new(Jekyll.configuration.merge({ 'markdown' => bad_processor }))
-        assert_raise Jekyll::FatalException do
+        assert_raise Jekyll::Errors::FatalException do
           s.process
         end
       end
@@ -277,7 +363,7 @@ class TestSite < Test::Unit::TestCase
         site = Site.new(Jekyll.configuration)
         site.process
 
-        file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'members.yaml'))
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'members.yaml'))
 
         assert_equal site.data['members'], file_content
         assert_equal site.site_payload['site']['data']['members'], file_content
@@ -287,17 +373,37 @@ class TestSite < Test::Unit::TestCase
         site = Site.new(Jekyll.configuration)
         site.process
 
-        file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'languages.yml'))
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'languages.yml'))
 
         assert_equal site.data['languages'], file_content
         assert_equal site.site_payload['site']['data']['languages'], file_content
       end
 
+      should 'auto load json files' do
+        site = Site.new(Jekyll.configuration)
+        site.process
+
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'members.json'))
+
+        assert_equal site.data['members'], file_content
+        assert_equal site.site_payload['site']['data']['members'], file_content
+      end
+
+      should 'auto load yaml files in subdirectory' do
+        site = Site.new(Jekyll.configuration)
+        site.process
+
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'categories', 'dairy.yaml'))
+
+        assert_equal site.data['categories']['dairy'], file_content
+        assert_equal site.site_payload['site']['data']['categories']['dairy'], file_content
+      end
+
       should "load symlink files in unsafe mode" do
         site = Site.new(Jekyll.configuration.merge({'safe' => false}))
         site.process
 
-        file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'products.yml'))
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'products.yml'))
 
         assert_equal site.data['products'], file_content
         assert_equal site.site_payload['site']['data']['products'], file_content
@@ -311,23 +417,36 @@ class TestSite < Test::Unit::TestCase
         assert_nil site.site_payload['site']['data']['products']
       end
 
-      should "load symlink directory in unsafe mode" do
-        site = Site.new(Jekyll.configuration.merge({'safe' => false, 'data_source' => File.join('symlink-test', '_data')}))
-        site.process
+    end
 
-        assert_not_nil site.data['products']
-        assert_not_nil site.data['languages']
-        assert_not_nil site.data['members']
+    context "manipulating the Jekyll environment" do
+      setup do
+        @site = Site.new(site_configuration)
+        @site.process
+        @page = @site.pages.find { |p| p.name == "environment.html" }
       end
 
-      should "not load symlink directory in safe mode" do
-        site = Site.new(Jekyll.configuration.merge({'safe' => true, 'data_source' => File.join('symlink-test', '_data')}))
-        site.process
+      should "default to 'development'" do
+        assert_equal "development", @page.content.strip
+      end
 
-        assert_nil site.data['products']
-        assert_nil site.data['languages']
-        assert_nil site.data['members']
+      context "in production" do
+        setup do
+          ENV["JEKYLL_ENV"] = "production"
+          @site = Site.new(site_configuration)
+          @site.process
+          @page = @site.pages.find { |p| p.name == "environment.html" }
+        end
+
+        teardown do
+          ENV.delete("JEKYLL_ENV")
+        end
+
+        should "be overridden by JEKYLL_ENV" do
+          assert_equal "production", @page.content.strip
+        end
       end
     end
+
   end
 end
diff --git a/test/test_tags.rb b/test/test_tags.rb
index bda7a80..942b28c 100644
--- a/test/test_tags.rb
+++ b/test/test_tags.rb
@@ -6,7 +6,9 @@ class TestTags < Test::Unit::TestCase
 
   def create_post(content, override = {}, converter_class = Jekyll::Converters::Markdown)
     stub(Jekyll).configuration do
-      Jekyll::Configuration::DEFAULTS.deep_merge({'pygments' => true}).deep_merge(override)
+      site_configuration({
+        "highlighter" => "pygments"
+      }.merge(override))
     end
     site = Site.new(Jekyll.configuration)
 
@@ -16,8 +18,8 @@ class TestTags < Test::Unit::TestCase
 
     info = { :filters => [Jekyll::Filters], :registers => { :site => site } }
     @converter = site.converters.find { |c| c.class == converter_class }
-    payload = { "pygments_prefix" => @converter.pygments_prefix,
-                "pygments_suffix" => @converter.pygments_suffix }
+    payload = { "highlighter_prefix" => @converter.highlighter_prefix,
+                "highlighter_suffix" => @converter.highlighter_suffix }
 
     @result = Liquid::Template.parse(content).render!(payload, info)
     @result = @converter.convert(@result)
@@ -31,8 +33,12 @@ title: This is a test
 
 This document results in a markdown error with maruku
 
-{% highlight text %}#{code}{% endhighlight %}
-{% highlight text linenos %}#{code}{% endhighlight %}
+{% highlight text %}
+#{code}
+{% endhighlight %}
+{% highlight text linenos %}
+#{code}
+{% endhighlight %}
 CONTENT
     create_post(content, override)
   end
@@ -54,27 +60,64 @@ CONTENT
   end
 
   context "initialized tag" do
-    should "work" do
+    should "set the correct options" do
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby ', ["test", "{% endhighlight %}", "\n"])
       assert_equal({}, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos ', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'linenos' => 'inline' }, tag.instance_variable_get(:@options))
+      assert_equal({ :linenos => 'inline' }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table ', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'linenos' => 'table' }, tag.instance_variable_get(:@options))
+      assert_equal({ :linenos => 'table' }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table nowrap', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'linenos' => 'table', 'nowrap' => true }, tag.instance_variable_get(:@options))
+      assert_equal({ :linenos => 'table', :nowrap => true }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table cssclass=hl', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'cssclass' => 'hl', 'linenos' => 'table' }, tag.instance_variable_get(:@options))
+      assert_equal({ :cssclass => 'hl', :linenos => 'table' }, tag.instance_variable_get(:@options))
+
+      tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table cssclass=hl hl_linenos=3', ["test", "{% endhighlight %}", "\n"])
+      assert_equal({ :cssclass => 'hl', :linenos => 'table', :hl_linenos => '3' }, tag.instance_variable_get(:@options))
+
+      tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table cssclass=hl hl_linenos="3 5 6"', ["test", "{% endhighlight %}", "\n"])
+      assert_equal({ :cssclass => 'hl', :linenos => 'table', :hl_linenos => ['3', '5', '6'] }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'Ruby ', ["test", "{% endhighlight %}", "\n"])
       assert_equal "ruby", tag.instance_variable_get(:@lang), "lexers should be case insensitive"
     end
   end
 
+  context "in safe mode" do
+    setup do
+      @tag = Jekyll::Tags::HighlightBlock.new('highlight', 'text ', ["test", "{% endhighlight %}", "\n"])
+    end
+
+    should "allow linenos" do
+      sanitized = @tag.sanitized_opts({:linenos => true}, true)
+      assert_equal true, sanitized[:linenos]
+    end
+
+    should "allow hl_linenos" do
+      sanitized = @tag.sanitized_opts({:hl_linenos => %w[1 2 3 4]}, true)
+      assert_equal %w[1 2 3 4], sanitized[:hl_linenos]
+    end
+
+    should "allow cssclass" do
+      sanitized = @tag.sanitized_opts({:cssclass => "ahoy"}, true)
+      assert_equal "ahoy", sanitized[:cssclass]
+    end
+
+    should "allow startinline" do
+      sanitized = @tag.sanitized_opts({:startinline => true}, true)
+      assert_equal true, sanitized[:startinline]
+    end
+
+    should "strip unknown options" do
+      sanitized = @tag.sanitized_opts({:light => true}, true)
+      assert_nil sanitized[:light]
+    end
+  end
+
   context "post content has highlight tag" do
     setup do
       fill_post("test")
@@ -85,11 +128,11 @@ CONTENT
     end
 
     should "render markdown with pygments" do
-      assert_match %{<pre><code class='text'>test\n</code></pre>}, @result
+      assert_match %{<pre><code class="language-text" data-lang="text">test</code></pre>}, @result
     end
 
     should "render markdown with pygments with line numbers" do
-      assert_match %{<pre><code class='text'><span class='lineno'>1</span> test\n</code></pre>}, @result
+      assert_match %{<pre><code class="language-text" data-lang="text"><span class="lineno">1</span> test</code></pre>}, @result
     end
   end
 
@@ -99,7 +142,7 @@ CONTENT
     end
 
     should "not embed the file" do
-      assert_match %{<pre><code class='text'>./jekyll.gemspec\n</code></pre>}, @result
+      assert_match %{<pre><code class="language-text" data-lang="text">./jekyll.gemspec</code></pre>}, @result
     end
   end
 
@@ -109,7 +152,7 @@ CONTENT
     end
 
     should "render markdown with pygments line handling" do
-      assert_match %{<pre><code class='text'>Æ\n</code></pre>}, @result
+      assert_match %{<pre><code class="language-text" data-lang="text">Æ</code></pre>}, @result
     end
   end
 
@@ -232,117 +275,24 @@ CONTENT
     end
 
     should "have the url to the \"nested\" post from 2008-11-21" do
-      assert_match %r{3\s/2008/11/21/nested/}, @result
-      assert_match %r{4\s/2008/11/21/nested/}, @result
+      assert_match %r{3\s/es/2008/11/21/nested/}, @result
+      assert_match %r{4\s/es/2008/11/21/nested/}, @result
     end
   end
 
-  context "gist tag" do
-    context "simple" do
-      setup do
-        @gist = 358471
-        content = <<CONTENT
+  context "simple page with invalid post name linking" do
+    should "cause an error" do
+      content = <<CONTENT
 ---
-title: My Cool Gist
+title: Invalid post name linking
 ---
 
-{% gist #{@gist} %}
+{% post_url abc2008-11-21-complex %}
 CONTENT
-        create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
-      end
-
-      should "write script tag" do
-        assert_match "<script src='https://gist.github.com/#{@gist}.js'><![CDATA[\s]]></script>", @result
-      end
-    end
 
-    context "for private gist" do
-      context "when valid" do
-        setup do
-          @gist = "mattr-/24081a1d93d2898ecf0f"
-          @filename = "myfile.ext"
-          content = <<CONTENT
-  ---
-  title: My Cool Gist
-  ---
-
-  {% gist #{@gist} #{@filename} %}
-CONTENT
-          create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
-        end
-
-        should "write script tag with specific file in gist" do
-          assert_match "<script src='https://gist.github.com/#{@gist}.js?file=#{@filename}'><![CDATA[\s]]></script>", @result
-        end
-      end
-
-      should "raise ArgumentError when invalid" do
-        @gist = "mattr-24081a1d93d2898ecf0f"
-        @filename = "myfile.ext"
-        content = <<CONTENT
-  ---
-  title: My Cool Gist
-  ---
-
-  {% gist #{@gist} #{@filename} %}
-CONTENT
-
-        assert_raise ArgumentError do
-          create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
-        end
-      end
-    end
-
-    context "with specific file" do
-      setup do
-        @gist = 358471
-        @filename = 'somefile.rb'
-        content = <<CONTENT
----
-title: My Cool Gist
----
-
-{% gist #{@gist} #{@filename} %}
-CONTENT
+      assert_raise ArgumentError do
         create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
       end
-
-      should "write script tag with specific file in gist" do
-        assert_match "<script src='https://gist.github.com/#{@gist}.js?file=#{@filename}'><![CDATA[\s]]></script>", @result
-      end
-    end
-
-    context "with blank gist id" do
-      should "raise ArgumentError" do
-        content = <<CONTENT
----
-title: My Cool Gist
----
-
-{% gist %}
-CONTENT
-
-        assert_raise ArgumentError do
-          create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
-        end
-      end
-    end
-
-    context "with invalid gist id" do
-      should "raise ArgumentError" do
-        invalid_gist = 'invalid'
-        content = <<CONTENT
----
-title: My Cool Gist
----
-
-{% gist #{invalid_gist} %}
-CONTENT
-
-        assert_raise ArgumentError do
-          create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
-        end
-      end
     end
   end
 
@@ -397,11 +347,11 @@ CONTENT
       end
 
       should "correctly output include variable" do
-        assert_match "<span id='include-param'>value</span>", @result.strip
+        assert_match "<span id=\"include-param\">value</span>", @result.strip
       end
 
       should "ignore parameters if unused" do
-        assert_match "<hr />\n<p>Tom Preston-Werner github.com/mojombo</p>\n", @result
+        assert_match "<hr />\n<p>Tom Preston-Werner\ngithub.com/mojombo</p>\n", @result
       end
     end
 
@@ -449,7 +399,7 @@ CONTENT
       end
 
       should "not include previously used parameters" do
-        assert_match "<span id='include-param' />", @result
+        assert_match "<span id=\"include-param\"></span>", @result
       end
     end
 
@@ -466,7 +416,7 @@ CONTENT
       end
 
       should "include file with empty parameters" do
-        assert_match "<span id='include-param' />", @result
+        assert_match "<span id=\"include-param\"></span>", @result
       end
     end
 
@@ -483,7 +433,76 @@ CONTENT
       end
 
       should "include file with empty parameters within if statement" do
-        assert_match "<span id='include-param' />", @result
+        assert_match "<span id=\"include-param\"></span>", @result
+      end
+    end
+
+    context "with fenced code blocks with backticks" do
+
+      setup do
+        content = <<CONTENT
+```ruby
+puts "Hello world"
+```
+CONTENT
+        create_post(content, {
+          'markdown' => 'maruku',
+          'maruku' => {'fenced_code_blocks' => true}}
+        )
+      end
+
+      should "render fenced code blocks" do
+        assert_match %r{<pre class=\"ruby\"><code class=\"ruby\">puts "Hello world"</code></pre>}, @result.strip
+      end
+    end
+
+    context "include missing file" do
+      setup do
+        @content = <<CONTENT
+---
+title: missing file
+---
+
+{% include missing.html %}
+CONTENT
+      end
+
+      should "raise error relative to source directory" do
+        exception = assert_raise IOError do
+          create_post(@content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
+        end
+        assert_equal 'Included file \'_includes/missing.html\' not found', exception.message
+      end
+    end
+
+    context "include tag with variable and liquid filters" do
+      setup do
+        stub(Jekyll).configuration do
+          site_configuration({'pygments' => true})
+        end
+
+        site = Site.new(Jekyll.configuration)
+        post = Post.new(site, source_dir, '', "2013-12-17-include-variable-filters.markdown")
+        layouts = { "default" => Layout.new(site, source_dir('_layouts'), "simple.html")}
+        post.render(layouts, {"site" => {"posts" => []}})
+        @content = post.content
+      end
+
+      should "include file as variable with liquid filters" do
+        assert_match %r{1 included}, @content
+        assert_match %r{2 included}, @content
+        assert_match %r{3 included}, @content
+      end
+
+      should "include file as variable and liquid filters with arbitrary whitespace" do
+        assert_match %r{4 included}, @content
+        assert_match %r{5 included}, @content
+        assert_match %r{6 included}, @content
+      end
+
+      should "include file as variable and filters with additional parameters" do
+        assert_match '<li>var1 = foo</li>', @content
+        assert_match '<li>var2 = bar</li>', @content
       end
     end
   end
diff --git a/test/test_core_ext.rb b/test/test_utils.rb
similarity index 51%
rename from test/test_core_ext.rb
rename to test/test_utils.rb
index 0b79f33..de1ebba 100644
--- a/test/test_core_ext.rb
+++ b/test/test_utils.rb
@@ -1,88 +1,67 @@
 require 'helper'
 
-class TestCoreExt < Test::Unit::TestCase
+class TestUtils < Test::Unit::TestCase
   context "hash" do
 
     context "pluralized_array" do
 
       should "return empty array with no values" do
         data = {}
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return empty array with no matching values" do
         data = { 'foo' => 'bar' }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
-      should "return empty array with matching nil singular" do
+      should "return plural array with nil singular" do
         data = { 'foo' => 'bar', 'tag' => nil, 'tags' => ['dog', 'cat'] }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog', 'cat'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching singular" do
         data = { 'foo' => 'bar', 'tag' => 'dog', 'tags' => ['dog', 'cat'] }
-        assert_equal ['dog'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching singular with spaces" do
         data = { 'foo' => 'bar', 'tag' => 'dog cat', 'tags' => ['dog', 'cat'] }
-        assert_equal ['dog cat'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog cat'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return empty array with matching nil plural" do
         data = { 'foo' => 'bar', 'tags' => nil }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return empty array with matching empty array" do
         data = { 'foo' => 'bar', 'tags' => [] }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching plural with single string value" do
         data = { 'foo' => 'bar', 'tags' => 'dog' }
-        assert_equal ['dog'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return multiple value array with matching plural with single string value with spaces" do
         data = { 'foo' => 'bar', 'tags' => 'dog cat' }
-        assert_equal ['dog', 'cat'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog', 'cat'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching plural with single value array" do
         data = { 'foo' => 'bar', 'tags' => ['dog'] }
-        assert_equal ['dog'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return multiple value array with matching plural with multiple value array" do
         data = { 'foo' => 'bar', 'tags' => ['dog', 'cat'] }
-        assert_equal ['dog', 'cat'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog', 'cat'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
     end
 
   end
 
-  context "enumerable" do
-    context "glob_include?" do
-      should "return false with no glob patterns" do
-        assert ![].glob_include?("a.txt")
-      end
-
-      should "return false with all not match path" do
-        data = ["a*", "b?"]
-        assert !data.glob_include?("ca.txt")
-        assert !data.glob_include?("ba.txt")
-      end
-
-      should "return true with match path" do
-        data = ["a*", "b?", "**/a*"]
-        assert data.glob_include?("a.txt")
-        assert data.glob_include?("ba")
-        assert data.glob_include?("c/a/a.txt")
-        assert data.glob_include?("c/a/b/a.txt")
-      end
-    end
-  end
 end

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/jekyll.git



More information about the Pkg-ruby-extras-commits mailing list