Added default Jekyll framework.
authorDavid Given <dg@cowlark.com>
Sat, 4 Jun 2016 15:15:26 +0000 (17:15 +0200)
committerDavid Given <dg@cowlark.com>
Sat, 4 Jun 2016 15:15:26 +0000 (17:15 +0200)
22 files changed:
_config.yml [new file with mode: 0644]
_includes/footer.html [new file with mode: 0644]
_includes/head.html [new file with mode: 0644]
_includes/header.html [new file with mode: 0644]
_includes/icon-github.html [new file with mode: 0644]
_includes/icon-github.svg [new file with mode: 0644]
_includes/icon-twitter.html [new file with mode: 0644]
_includes/icon-twitter.svg [new file with mode: 0644]
_layouts/default.html [new file with mode: 0644]
_layouts/page.html [new file with mode: 0644]
_layouts/post.html [new file with mode: 0644]
_posts/2016-06-04-welcome-to-jekyll.markdown [new file with mode: 0644]
_sass/_base.scss [new file with mode: 0644]
_sass/_layout.scss [new file with mode: 0644]
_sass/_normalize.scss [new file with mode: 0644]
_sass/_syntax-highlighting.scss [new file with mode: 0644]
about.md [new file with mode: 0644]
css/main.scss [new file with mode: 0644]
feed.xml [new file with mode: 0644]
index.html
js/html5shiv.js [new file with mode: 0644]
js/respond.js [new file with mode: 0644]

diff --git a/_config.yml b/_config.yml
new file mode 100644 (file)
index 0000000..1c5e5bc
--- /dev/null
@@ -0,0 +1,21 @@
+# Welcome to Jekyll!
+#
+# This config file is meant for settings that affect your whole blog, values
+# which you are expected to set up once and rarely need to edit after that.
+# For technical reasons, this file is *NOT* reloaded automatically when you use
+# 'jekyll serve'. If you change this file, please restart the server process.
+
+# Site settings
+title: Your awesome title
+email: your-email@domain.com
+description: > # this means to ignore newlines until "baseurl:"
+  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: "" # the subpath of your site, e.g. /blog
+url: "http://yourdomain.com" # the base hostname & protocol for your site
+twitter_username: jekyllrb
+github_username:  jekyll
+
+# Build settings
+markdown: kramdown
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644 (file)
index 0000000..72239f1
--- /dev/null
@@ -0,0 +1,38 @@
+<footer class="site-footer">
+
+  <div class="wrapper">
+
+    <h2 class="footer-heading">{{ site.title }}</h2>
+
+    <div class="footer-col-wrapper">
+      <div class="footer-col footer-col-1">
+        <ul class="contact-list">
+          <li>{{ site.title }}</li>
+          <li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
+        </ul>
+      </div>
+
+      <div class="footer-col footer-col-2">
+        <ul class="social-media-list">
+          {% if site.github_username %}
+          <li>
+            {% include icon-github.html username=site.github_username %}
+          </li>
+          {% endif %}
+
+          {% if site.twitter_username %}
+          <li>
+            {% include icon-twitter.html username=site.twitter_username %}
+          </li>
+          {% endif %}
+        </ul>
+      </div>
+
+      <div class="footer-col footer-col-3">
+        <p>{{ site.description }}</p>
+      </div>
+    </div>
+
+  </div>
+
+</footer>
diff --git a/_includes/head.html b/_includes/head.html
new file mode 100644 (file)
index 0000000..41340ae
--- /dev/null
@@ -0,0 +1,12 @@
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+
+  <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
+  <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
+
+  <link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
+  <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
+  <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
+</head>
diff --git a/_includes/header.html b/_includes/header.html
new file mode 100644 (file)
index 0000000..b3f86db
--- /dev/null
@@ -0,0 +1,27 @@
+<header class="site-header">
+
+  <div class="wrapper">
+
+    <a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>
+
+    <nav class="site-nav">
+      <a href="#" class="menu-icon">
+        <svg viewBox="0 0 18 15">
+          <path fill="#424242" 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="#424242" 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="#424242" 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 my_page in site.pages %}
+          {% if my_page.title %}
+          <a class="page-link" href="{{ my_page.url | prepend: site.baseurl }}">{{ my_page.title }}</a>
+          {% endif %}
+        {% endfor %}
+      </div>
+    </nav>
+
+  </div>
+
+</header>
diff --git a/_includes/icon-github.html b/_includes/icon-github.html
new file mode 100644 (file)
index 0000000..e501a16
--- /dev/null
@@ -0,0 +1 @@
+<a href="https://github.com/{{ include.username }}"><span class="icon icon--github">{% include icon-github.svg %}</span><span class="username">{{ include.username }}</span></a>
diff --git a/_includes/icon-github.svg b/_includes/icon-github.svg
new file mode 100644 (file)
index 0000000..4422c4f
--- /dev/null
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16"><path fill="#828282" 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>
diff --git a/_includes/icon-twitter.html b/_includes/icon-twitter.html
new file mode 100644 (file)
index 0000000..e623dbd
--- /dev/null
@@ -0,0 +1 @@
+<a href="https://twitter.com/{{ include.username }}"><span class="icon icon--twitter">{% include icon-twitter.svg %}</span><span class="username">{{ include.username }}</span></a>
diff --git a/_includes/icon-twitter.svg b/_includes/icon-twitter.svg
new file mode 100644 (file)
index 0000000..dcf660e
--- /dev/null
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16"><path fill="#828282" 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.809c-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>
diff --git a/_layouts/default.html b/_layouts/default.html
new file mode 100644 (file)
index 0000000..e4ab96f
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+
+  {% include head.html %}
+
+  <body>
+
+    {% include header.html %}
+
+    <div class="page-content">
+      <div class="wrapper">
+        {{ content }}
+      </div>
+    </div>
+
+    {% include footer.html %}
+
+  </body>
+
+</html>
diff --git a/_layouts/page.html b/_layouts/page.html
new file mode 100644 (file)
index 0000000..ce233ad
--- /dev/null
@@ -0,0 +1,14 @@
+---
+layout: default
+---
+<article class="post">
+
+  <header class="post-header">
+    <h1 class="post-title">{{ page.title }}</h1>
+  </header>
+
+  <div class="post-content">
+    {{ content }}
+  </div>
+
+</article>
diff --git a/_layouts/post.html b/_layouts/post.html
new file mode 100644 (file)
index 0000000..3a0fb52
--- /dev/null
@@ -0,0 +1,15 @@
+---
+layout: default
+---
+<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
+
+  <header class="post-header">
+    <h1 class="post-title" itemprop="name headline">{{ page.title }}</h1>
+    <p class="post-meta"><time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">{{ page.date | date: "%b %-d, %Y" }}</time>{% if page.author %} • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>{% endif %}</p>
+  </header>
+
+  <div class="post-content" itemprop="articleBody">
+    {{ content }}
+  </div>
+
+</article>
diff --git a/_posts/2016-06-04-welcome-to-jekyll.markdown b/_posts/2016-06-04-welcome-to-jekyll.markdown
new file mode 100644 (file)
index 0000000..62e3a75
--- /dev/null
@@ -0,0 +1,25 @@
+---
+layout: post
+title:  "Welcome to Jekyll!"
+date:   2016-06-04 17:12:58 +0200
+categories: jekyll update
+---
+You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
+
+To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.
+
+Jekyll also offers powerful support for code snippets:
+
+{% highlight ruby %}
+def print_hi(name)
+  puts "Hi, #{name}"
+end
+print_hi('Tom')
+#=> prints 'Hi, Tom' to STDOUT.
+{% endhighlight %}
+
+Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
+
+[jekyll-docs]: http://jekyllrb.com/docs/home
+[jekyll-gh]:   https://github.com/jekyll/jekyll
+[jekyll-talk]: https://talk.jekyllrb.com/
diff --git a/_sass/_base.scss b/_sass/_base.scss
new file mode 100644 (file)
index 0000000..0883c3c
--- /dev/null
@@ -0,0 +1,206 @@
+/**
+ * Reset some basic elements
+ */
+body, h1, h2, h3, h4, h5, h6,
+p, blockquote, pre, hr,
+dl, dd, ol, ul, figure {
+    margin: 0;
+    padding: 0;
+}
+
+
+
+/**
+ * Basic styling
+ */
+body {
+    font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;
+    color: $text-color;
+    background-color: $background-color;
+    -webkit-text-size-adjust: 100%;
+    -webkit-font-feature-settings: "kern" 1;
+    -moz-font-feature-settings: "kern" 1;
+    -o-font-feature-settings: "kern" 1;
+    font-feature-settings: "kern" 1;
+    font-kerning: normal;
+}
+
+
+
+/**
+ * Set `margin-bottom` to maintain vertical rhythm
+ */
+h1, h2, h3, h4, h5, h6,
+p, blockquote, pre,
+ul, ol, dl, figure,
+%vertical-rhythm {
+    margin-bottom: $spacing-unit / 2;
+}
+
+
+
+/**
+ * Images
+ */
+img {
+    max-width: 100%;
+    vertical-align: middle;
+}
+
+
+
+/**
+ * Figures
+ */
+figure > img {
+    display: block;
+}
+
+figcaption {
+    font-size: $small-font-size;
+}
+
+
+
+/**
+ * Lists
+ */
+ul, ol {
+    margin-left: $spacing-unit;
+}
+
+li {
+    > ul,
+    > ol {
+         margin-bottom: 0;
+    }
+}
+
+
+
+/**
+ * Headings
+ */
+h1, h2, h3, h4, h5, h6 {
+    font-weight: $base-font-weight;
+}
+
+
+
+/**
+ * Links
+ */
+a {
+    color: $brand-color;
+    text-decoration: none;
+
+    &:visited {
+        color: darken($brand-color, 15%);
+    }
+
+    &:hover {
+        color: $text-color;
+        text-decoration: underline;
+    }
+}
+
+
+
+/**
+ * Blockquotes
+ */
+blockquote {
+    color: $grey-color;
+    border-left: 4px solid $grey-color-light;
+    padding-left: $spacing-unit / 2;
+    font-size: 18px;
+    letter-spacing: -1px;
+    font-style: italic;
+
+    > :last-child {
+        margin-bottom: 0;
+    }
+}
+
+
+
+/**
+ * Code formatting
+ */
+pre,
+code {
+    font-size: 15px;
+    border: 1px solid $grey-color-light;
+    border-radius: 3px;
+    background-color: #eef;
+}
+
+code {
+    padding: 1px 5px;
+}
+
+pre {
+    padding: 8px 12px;
+    overflow-x: auto;
+
+    > code {
+        border: 0;
+        padding-right: 0;
+        padding-left: 0;
+    }
+}
+
+
+
+/**
+ * Wrapper
+ */
+.wrapper {
+    max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));
+    max-width:         calc(#{$content-width} - (#{$spacing-unit} * 2));
+    margin-right: auto;
+    margin-left: auto;
+    padding-right: $spacing-unit;
+    padding-left: $spacing-unit;
+    @extend %clearfix;
+
+    @include media-query($on-laptop) {
+        max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));
+        max-width:         calc(#{$content-width} - (#{$spacing-unit}));
+        padding-right: $spacing-unit / 2;
+        padding-left: $spacing-unit / 2;
+    }
+}
+
+
+
+/**
+ * Clearfix
+ */
+%clearfix {
+
+    &:after {
+        content: "";
+        display: table;
+        clear: both;
+    }
+}
+
+
+
+/**
+ * Icons
+ */
+.icon {
+
+    > svg {
+        display: inline-block;
+        width: 16px;
+        height: 16px;
+        vertical-align: middle;
+
+        path {
+            fill: $grey-color;
+        }
+    }
+}
diff --git a/_sass/_layout.scss b/_sass/_layout.scss
new file mode 100644 (file)
index 0000000..9cbfdde
--- /dev/null
@@ -0,0 +1,242 @@
+/**
+ * Site header
+ */
+.site-header {
+    border-top: 5px solid $grey-color-dark;
+    border-bottom: 1px solid $grey-color-light;
+    min-height: 56px;
+
+    // Positioning context for the mobile navigation icon
+    position: relative;
+}
+
+.site-title {
+    font-size: 26px;
+    font-weight: 300;
+    line-height: 56px;
+    letter-spacing: -1px;
+    margin-bottom: 0;
+    float: left;
+
+    &,
+    &:visited {
+        color: $grey-color-dark;
+    }
+}
+
+.site-nav {
+    float: right;
+    line-height: 56px;
+
+    .menu-icon {
+        display: none;
+    }
+
+    .page-link {
+        color: $text-color;
+        line-height: $base-line-height;
+
+        // Gaps between nav items, but not on the last one
+        &:not(:last-child) {
+            margin-right: 20px;
+        }
+    }
+
+    @include media-query($on-palm) {
+        position: absolute;
+        top: 9px;
+        right: $spacing-unit / 2;
+        background-color: $background-color;
+        border: 1px solid $grey-color-light;
+        border-radius: 5px;
+        text-align: right;
+
+        .menu-icon {
+            display: block;
+            float: right;
+            width: 36px;
+            height: 26px;
+            line-height: 0;
+            padding-top: 10px;
+            text-align: center;
+
+            > svg {
+                width: 18px;
+                height: 15px;
+
+                path {
+                    fill: $grey-color-dark;
+                }
+            }
+        }
+
+        .trigger {
+            clear: both;
+            display: none;
+        }
+
+        &:hover .trigger {
+            display: block;
+            padding-bottom: 5px;
+        }
+
+        .page-link {
+            display: block;
+            padding: 5px 10px;
+
+            &:not(:last-child) {
+                margin-right: 0;
+            }
+            margin-left: 20px;
+        }
+    }
+}
+
+
+
+/**
+ * Site footer
+ */
+.site-footer {
+    border-top: 1px solid $grey-color-light;
+    padding: $spacing-unit 0;
+}
+
+.footer-heading {
+    font-size: 18px;
+    margin-bottom: $spacing-unit / 2;
+}
+
+.contact-list,
+.social-media-list {
+    list-style: none;
+    margin-left: 0;
+}
+
+.footer-col-wrapper {
+    font-size: 15px;
+    color: $grey-color;
+    margin-left: -$spacing-unit / 2;
+    @extend %clearfix;
+}
+
+.footer-col {
+    float: left;
+    margin-bottom: $spacing-unit / 2;
+    padding-left: $spacing-unit / 2;
+}
+
+.footer-col-1 {
+    width: -webkit-calc(35% - (#{$spacing-unit} / 2));
+    width:         calc(35% - (#{$spacing-unit} / 2));
+}
+
+.footer-col-2 {
+    width: -webkit-calc(20% - (#{$spacing-unit} / 2));
+    width:         calc(20% - (#{$spacing-unit} / 2));
+}
+
+.footer-col-3 {
+    width: -webkit-calc(45% - (#{$spacing-unit} / 2));
+    width:         calc(45% - (#{$spacing-unit} / 2));
+}
+
+@include media-query($on-laptop) {
+    .footer-col-1,
+    .footer-col-2 {
+        width: -webkit-calc(50% - (#{$spacing-unit} / 2));
+        width:         calc(50% - (#{$spacing-unit} / 2));
+    }
+
+    .footer-col-3 {
+        width: -webkit-calc(100% - (#{$spacing-unit} / 2));
+        width:         calc(100% - (#{$spacing-unit} / 2));
+    }
+}
+
+@include media-query($on-palm) {
+    .footer-col {
+        float: none;
+        width: -webkit-calc(100% - (#{$spacing-unit} / 2));
+        width:         calc(100% - (#{$spacing-unit} / 2));
+    }
+}
+
+
+
+/**
+ * Page content
+ */
+.page-content {
+    padding: $spacing-unit 0;
+}
+
+.page-heading {
+    font-size: 20px;
+}
+
+.post-list {
+    margin-left: 0;
+    list-style: none;
+
+    > li {
+        margin-bottom: $spacing-unit;
+    }
+}
+
+.post-meta {
+    font-size: $small-font-size;
+    color: $grey-color;
+}
+
+.post-link {
+    display: block;
+    font-size: 24px;
+}
+
+
+
+/**
+ * Posts
+ */
+.post-header {
+    margin-bottom: $spacing-unit;
+}
+
+.post-title {
+    font-size: 42px;
+    letter-spacing: -1px;
+    line-height: 1;
+
+    @include media-query($on-laptop) {
+        font-size: 36px;
+    }
+}
+
+.post-content {
+    margin-bottom: $spacing-unit;
+
+    h2 {
+        font-size: 32px;
+
+        @include media-query($on-laptop) {
+            font-size: 28px;
+        }
+    }
+
+    h3 {
+        font-size: 26px;
+
+        @include media-query($on-laptop) {
+            font-size: 22px;
+        }
+    }
+
+    h4 {
+        font-size: 20px;
+
+        @include media-query($on-laptop) {
+            font-size: 18px;
+        }
+    }
+}
diff --git a/_sass/_normalize.scss b/_sass/_normalize.scss
new file mode 100644 (file)
index 0000000..08f8950
--- /dev/null
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+  font-family: sans-serif; /* 1 */
+  -ms-text-size-adjust: 100%; /* 2 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+  margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+  display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+  display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+  background: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+  outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+  font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+  background: #ff0;
+  color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+  border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+  overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ *    Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit; /* 1 */
+  font: inherit; /* 2 */
+  margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+  overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+  text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+  cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+  line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  -moz-box-sizing: content-box;
+  -webkit-box-sizing: content-box; /* 2 */
+  box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+  border: 0; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+  font-weight: bold;
+}
+
+/* Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+td,
+th {
+  padding: 0;
+}
diff --git a/_sass/_syntax-highlighting.scss b/_sass/_syntax-highlighting.scss
new file mode 100644 (file)
index 0000000..8fac597
--- /dev/null
@@ -0,0 +1,71 @@
+/**
+ * Syntax highlighting styles
+ */
+.highlight {
+    background: #fff;
+    @extend %vertical-rhythm;
+
+    .highlighter-rouge & {
+      background: #eef;
+    }
+
+    .c     { color: #998; font-style: italic } // Comment
+    .err   { color: #a61717; background-color: #e3d2d2 } // Error
+    .k     { font-weight: bold } // Keyword
+    .o     { font-weight: bold } // Operator
+    .cm    { color: #998; font-style: italic } // Comment.Multiline
+    .cp    { color: #999; font-weight: bold } // Comment.Preproc
+    .c1    { color: #998; font-style: italic } // Comment.Single
+    .cs    { color: #999; font-weight: bold; font-style: italic } // Comment.Special
+    .gd    { color: #000; background-color: #fdd } // Generic.Deleted
+    .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
+    .ge    { font-style: italic } // Generic.Emph
+    .gr    { color: #a00 } // Generic.Error
+    .gh    { color: #999 } // Generic.Heading
+    .gi    { color: #000; background-color: #dfd } // Generic.Inserted
+    .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
+    .go    { color: #888 } // Generic.Output
+    .gp    { color: #555 } // Generic.Prompt
+    .gs    { font-weight: bold } // Generic.Strong
+    .gu    { color: #aaa } // Generic.Subheading
+    .gt    { color: #a00 } // Generic.Traceback
+    .kc    { font-weight: bold } // Keyword.Constant
+    .kd    { font-weight: bold } // Keyword.Declaration
+    .kp    { font-weight: bold } // Keyword.Pseudo
+    .kr    { font-weight: bold } // Keyword.Reserved
+    .kt    { color: #458; font-weight: bold } // Keyword.Type
+    .m     { color: #099 } // Literal.Number
+    .s     { color: #d14 } // Literal.String
+    .na    { color: #008080 } // Name.Attribute
+    .nb    { color: #0086B3 } // Name.Builtin
+    .nc    { color: #458; font-weight: bold } // Name.Class
+    .no    { color: #008080 } // Name.Constant
+    .ni    { color: #800080 } // Name.Entity
+    .ne    { color: #900; font-weight: bold } // Name.Exception
+    .nf    { color: #900; font-weight: bold } // Name.Function
+    .nn    { color: #555 } // Name.Namespace
+    .nt    { color: #000080 } // Name.Tag
+    .nv    { color: #008080 } // Name.Variable
+    .ow    { font-weight: bold } // Operator.Word
+    .w     { color: #bbb } // Text.Whitespace
+    .mf    { color: #099 } // Literal.Number.Float
+    .mh    { color: #099 } // Literal.Number.Hex
+    .mi    { color: #099 } // Literal.Number.Integer
+    .mo    { color: #099 } // Literal.Number.Oct
+    .sb    { color: #d14 } // Literal.String.Backtick
+    .sc    { color: #d14 } // Literal.String.Char
+    .sd    { color: #d14 } // Literal.String.Doc
+    .s2    { color: #d14 } // Literal.String.Double
+    .se    { color: #d14 } // Literal.String.Escape
+    .sh    { color: #d14 } // Literal.String.Heredoc
+    .si    { color: #d14 } // Literal.String.Interpol
+    .sx    { color: #d14 } // Literal.String.Other
+    .sr    { color: #009926 } // Literal.String.Regex
+    .s1    { color: #d14 } // Literal.String.Single
+    .ss    { color: #990073 } // Literal.String.Symbol
+    .bp    { color: #999 } // Name.Builtin.Pseudo
+    .vc    { color: #008080 } // Name.Variable.Class
+    .vg    { color: #008080 } // Name.Variable.Global
+    .vi    { color: #008080 } // Name.Variable.Instance
+    .il    { color: #099 } // Literal.Number.Integer.Long
+}
diff --git a/about.md b/about.md
new file mode 100644 (file)
index 0000000..d0e6de5
--- /dev/null
+++ b/about.md
@@ -0,0 +1,15 @@
+---
+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:
+{% include icon-github.html username="jglovier" %} /
+[jekyll-new](https://github.com/jglovier/jekyll-new)
+
+You can find the source code for Jekyll at
+{% include icon-github.html username="jekyll" %} /
+[jekyll](https://github.com/jekyll/jekyll)
diff --git a/css/main.scss b/css/main.scss
new file mode 100644 (file)
index 0000000..f2e566e
--- /dev/null
@@ -0,0 +1,53 @@
+---
+# Only the main Sass file needs front matter (the dashes are enough)
+---
+@charset "utf-8";
+
+
+
+// Our variables
+$base-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+$base-font-size:   16px;
+$base-font-weight: 400;
+$small-font-size:  $base-font-size * 0.875;
+$base-line-height: 1.5;
+
+$spacing-unit:     30px;
+
+$text-color:       #111;
+$background-color: #fdfdfd;
+$brand-color:      #2a7ae2;
+
+$grey-color:       #828282;
+$grey-color-light: lighten($grey-color, 40%);
+$grey-color-dark:  darken($grey-color, 25%);
+
+// Width of the content area
+$content-width:    800px;
+
+$on-palm:          600px;
+$on-laptop:        800px;
+
+
+
+// Use media queries like this:
+// @include media-query($on-palm) {
+//     .wrapper {
+//         padding-right: $spacing-unit / 2;
+//         padding-left: $spacing-unit / 2;
+//     }
+// }
+@mixin media-query($device) {
+    @media screen and (max-width: $device) {
+        @content;
+    }
+}
+
+
+
+// Import partials from `sass_dir` (defaults to `_sass`)
+@import
+        "base",
+        "layout",
+        "syntax-highlighting"
+;
diff --git a/feed.xml b/feed.xml
new file mode 100644 (file)
index 0000000..a6628bd
--- /dev/null
+++ b/feed.xml
@@ -0,0 +1,30 @@
+---
+layout: null
+---
+<?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>
index b919a8f..83d9398 100644 (file)
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- ACK site HTML. -->
-<!-- Written in 2005 by David Given, dg@cowlark.com. -->
-<!-- This file is in the public domain. -->
-<!-- $Source$ -->
-<!-- $State$ -->
+---
+layout: default
+---
 
-<html lang="en">
-<head>
-  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
-       <meta http-equiv="Content-Script-Type" content="text/javascript">
-       <title>The Amsterdam Compiler Kit</title>
-  <link type="text/css" href="site.css" rel="stylesheet">
-       <script type="text/javascript" src="pager.js"></script>
-</head>
-<body onload="showpage(page)">
-<div class="title">
-<h1>The
-Amsterdam Compiler Kit</h1>
-</div>
-<div class="contents">
-<h3><a href="#home" onclick="showpage('home'); return false">Home</a></h3>
-<h3><a href="#introduction" onclick="showpage('introduction'); return false">Introduction</a></h3>
-<h3><a href="#mailinglist" onclick="showpage('mailinglist'); return false">Mailing Lists</a></h3>
-<h3><a href="#documentation" onclick="showpage('documentation'); return false">Documentation</a></h3>
-<h3><a href="#installation" onclick="showpage('installation'); return false">Installation</a></h3>
-<p class="c"><a href="http://sourceforge.net/projects/tack"><img
- src="http://sourceforge.net/sflogo.php?group_id=108104&amp;type=1"
- alt="SourceForge.net Logo" border="0" height="31" width="88"></a></p>
-<p class="c">
-<a href="http://validator.w3.org/check?uri=referer"><img border="0"
-src="http://www.w3.org/Icons/valid-html401"
-alt="Valid HTML 4.01!" height="31" width="88"></a>
-</p>
-</div>
-<div class="body">
-
-<div class="page" id="home"><h2><a name="home">Home</a></h2>
-
-<h3>2007-02-25</h3>
-<p>Finally, <i>finally</i>, after several years work, we finally have an initial
-release of the ACK 6.0!
-</p>
-<p>This is a preview release, and is extremely limited. It supports on platform,
-which will generate PC bootable floppy disk images containing 8086 machine code.
-However, it does support ANSI C, K&R C, Pascal, Modula-2, Basic and Occam, and
-should form a good basis for evaluation and further development. Let me know what
-you think.
-</p>
-<p>This is known to build cleanly on Ubuntu Edgy Linux and OpenBSD 4.0, both on
-i386. However, it hasn't had a lot of testing otherwise; Sourceforge have shut
-down their compile farm service, and I don't have access to many machines. Bug
-reports are extremely welcome.
-</p>
-<p>You can get it <a href="http://sourceforge.net/project/showfiles.php?group_id=130811">get it
-from the Sourceforge download page</a>.
-</p>
-<p>(Note that the ACK 5.6, using the old build mechanism, still remains available
-for those that wish to use it; it's in the 6.0pre1 download area as a previous
-version.)
-</p>
-
-
-<h3>2006-02-04</h3>
-<p>LLgen has just been released as a seperate package!</p>
-<p>LLgen is a LL(1) parser generator, quite similar to yacc or bison, that can generate
-recursive descent parsers from Extended Context-Free grammars (which makes it quite a
-bit more useful than yacc or bison). The ACK uses it extensively, but as it's a
-standalone component, I've decided that it would be useful to distribute this
-separately. LLgen's input files are almost identical to yacc's, so if you can use yacc
-and have been getting frustrated with its limitations, LLgen is for you.</p>
-<p>I've rewritten the build system and overhauled the source so it compiles
-cleanly with gcc; it should work fine on modern systems (and extremely quickly). The
-package contains full documentation, and LLgen is, like the ACK, licensed under the
-new-style BSD license.</p>
-<p>You can <a href="http://sourceforge.net/project/showfiles.php?group_id=130811">get it
-from the Sourceforge download page</a> right next to the ACK.</p>
-
-<h3>2005-06-25</h3>
-<p>We make our first release!</p>
-<p>Version 5.6 of the ACK has now hit Sourceforge and is
-<a href="http://sourceforge.net/project/showfiles.php?group_id=130811">ready to download</a>.
-This version has been tweaked and fiddled with until it compiles, very nearly cleanly, on
-Linux systems (all that were available for testing): it should work without too much hassle
-on most other platforms. This release contains full documentation, all the front ends,
-all the back ends, all the libraries, and all the binary conversion tools, and should
-actually be useful. Don't forget to <a href="http://sourceforge.net/mail/?group_id=130811">join
-the mailing list</a> if you want to use it!
-</p>
-
-<h3>2005-06-10</h3>
-<p>CVS repository goes live!</p>
-<p>After great efforts by Ceriel Jacobs, to which I am extremely grateful, we
-now have a complete copy of the original development repository. The
-original distribution mechanism doesn't quite work on modern machines,
-but I'm working on it, and in the meantime it makes fascinating browsing ---
-I believe we may now have some of the oldest timestamps on SourceForge.
-(Several of the files were last touched in 1985!)</p>
-<p>For casual perusal it's probably simplest <a href="http://cvs.sourceforge.net/viewcvs.py/tack/Ack/"
->to use CVSWeb</a>. Alternatively, check out the <tt>Ack</tt> module --- full instructions on the <a
-href="http://sourceforge.net/cvs/?group_id=130811">project CVS page</a>.
-</p>
-
-<h3>2005-02-14</h3>
-<p>Initial version of this web page set up.</p>
-
-<h3>2005-02-11</h3>
-<p>Converted the troff documentation into (dodgy) HTML and PDF files; see the documentation section for the list. The man pages haven't been converted yet, but at least the main documentation is available.
+<div class="home">
 
-</p>
-</div>
-
-<div class="page" id="introduction"><h2><a name="introduction">Introduction</a></h2>
-<p>The Amsterdam Compiler Kit is
-fast, lightweight and retargetable compiler suite and toolchain written
-by <a href="http://www.cs.vu.nl/%7East/">Andrew
-Tanenbaum</a> and <a href="http://www.cs.vu.nl/%7Eceriel">Ceriel Jacobs</a>,
-and was Minix' native toolchain. The ACK was originally closed-source
-software (that allowed binaries to be distributed for Minix as a
-special case), but in April 2003 it was released under a BSD open
-source license.</p>
-<p>The ACK achieves maximum
-portability by using an intermediate byte-code language called EM. Each
-language front-end produces EM object files, which are then processed
-through a number of generic optimisers before being translated by a
-back-end into native machine code. The logic flow is as follows:</p>
-<p style="text-align: center;">
-<table class="grid">
-  <tbody>
-    <tr>
-      <th class="c">Front-End</th>
-      <th class="c">Generic
-Optimisation</th>
-      <th class="c">Back-End</th>
-      <th class="c">Specific
-Optimisation</th>
-    </tr>
-    <tr>
-      <td class="c">
-      <table>
-        <tbody>
-          <tr>
-            <td class="c">ANSI C</td>
-          </tr>
-          <tr>
-            <td class="c">K&amp;R C</td>
-          </tr>
-          <tr>
-            <td class="c">Pascal</td>
-          </tr>
-          <tr>
-            <td class="c">Modula-2</td>
-          </tr>
-          <tr>
-            <td class="c">Fortran</td>
-          </tr>
-          <tr>
-            <td class="c">Occam</td>
-          </tr>
-          <tr>
-            <td class="c">Basic</td>
-          </tr>
-        </tbody>
-      </table>
-      </td>
-      <td class="c">
-      <table>
-        <tbody>
-          <tr>
-            <td class="c">Peephole optimiser</td>
-          </tr>
-          <tr>
-            <td class="c">Global optimisation</td>
-          </tr>
-        </tbody>
-      </table>
-      </td>
-      <td class="c">
-      <table>
-        <tbody>
-          <tr>
-            <td class="c">6500</td>
-          </tr>
-          <tr>
-            <td class="c">6800</td>
-          </tr>
-          <tr>
-            <td class="c">6805</td>
-          </tr>
-          <tr>
-            <td class="c">6809</td>
-          </tr>
-          <tr>
-            <td class="c">ARM</td>
-          </tr>
-          <tr>
-            <td class="c">i80</td>
-          </tr>
-          <tr>
-            <td class="c">Z80</td>
-          </tr>
-          <tr>
-            <td class="c">Z8000</td>
-          </tr>
-          <tr>
-            <td class="c">i86</td>
-          </tr>
-          <tr>
-            <td class="c">i386</td>
-          </tr>
-          <tr>
-            <td class="c">68000</td>
-          </tr>
-          <tr>
-            <td class="c">NS16032</td>
-          </tr>
-          <tr>
-            <td class="c">SPARC</td>
-          </tr>
-          <tr>
-            <td class="c">VAX</td>
-          </tr>
-          <tr>
-            <td class="c">PDP11</td>
-          </tr>
-        </tbody>
-      </table>
-      </td>
-      <td class="c">Peephole
-optimiser</td>
-    </tr>
-  </tbody>
-</table>
-<p>Unlike <a href="http://gcc.gnu.org/">gcc</a>'s
-intermediate language, EM is a real programming language and could be
-implemented in hardware; a number of the language front-ends have
-libraries implemented in EM assembly. EM is a relatively high-level
-stack-based machine, and one of the tools supplied with ACK is an
-interpreter capable of executing EM binaries directly, with a high
-degree of safety checking. See the <tt>em</tt>
-document referenced below for more information.</p>
-<p>ACK comes with a generic linker and librarian capable of
-manipulating files in the ACK's own a.out-based format; it will work on
-files containing EM code as well as native machine code. (You can not,
-however, link EM code to native machine code without translating the EM
-binary first.)
-</p>
-</div>
-
-<div class="page" id="mailinglist"><h2><a name="mailinglist">Mailing Lists</a></h2>
-<p>If you are developing with or for the ACK, please join the mailing list.
-</p>
-
-<p>To subscribe or to browse the archives, visit Sourceforge's
-<a href="http://sourceforge.net/mail/?group_id=130811"> ACK mailing list page</a>.
-</p>
+  <h1 class="page-heading">Posts</h1>
 
-<p><br/></p>
-<p><br/></p>
-<p><br/></p>
-<p><br/></p>
-<p><br/></p>
-<p><br/></p>
-<p><br/></p>
-<p><br/></p>
-<p><br/></p> <!-- weird style workaround -->
-</div>
-
-<div class="page" id="documentation"><h2><a name="documentation">Documentation</a></h2>
-<p>The following documentation is
-available online, generated from the troff source supplied with the
-package. The HTML here is automatically converted and not of the
-greatest quality, but is readable:</p>
-<p style="text-align: center;">
-<table 
- class="grid" border="0" cellpadding="2" cellspacing="2">
-  <tbody>
-    <tr>
-      <td>6500</td>
-      <td><a href="doc/6500.html">html</a></td>
-      <td><a href="doc/6500.pdf">pdf</a></td>
-      <td>the MOS 6500 code
-generator</td>
-    </tr>
-    <tr>
-      <td>LLgen</td>
-      <td><a href="doc/LLgen.html">html</a></td>
-      <td><a href="doc/LLgen.pdf">pdf</a></td>
-      <td>the LL(1) parser
-generator</td>
-    </tr>
-    <tr>
-      <td>ack</td>
-      <td><a href="doc/ack.html">html</a></td>
-      <td><a href="doc/ack.pdf">pdf</a></td>
-      <td>the description files
-used to drive the compiler front-end</td>
-    </tr>
-    <tr>
-      <td>ansi_C</td>
-      <td><a href="doc/ansi_C.html">html</a></td>
-      <td><a href="doc/ansi_C.pdf">pdf</a></td>
-      <td>the ANSI C compiler</td>
-    </tr>
-    <tr>
-      <td>basic</td>
-      <td><a href="doc/basic.html">html</a></td>
-      <td><a href="doc/basic.pdf">pdf</a></td>
-      <td>the BASIC compiler</td>
-    </tr>
-    <tr>
-      <td>ceg</td>
-      <td><a href="doc/ceg.html">html</a></td>
-      <td><a href="doc/ceg.pdf">pdf</a></td>
-      <td>the fast code generator</td>
-    </tr>
-    <tr>
-      <td>cg</td>
-      <td><a href="doc/cg.html">html</a></td>
-      <td><a href="doc/cg.pdf">pdf</a></td>
-      <td>the old code generator</td>
-    </tr>
-    <tr>
-      <td>crefman</td>
-      <td><a href="doc/crefman.html">html</a></td>
-      <td><a href="doc/crefman.pdf">pdf</a></td>
-      <td>the K&amp;R C
-compiler</td>
-    </tr>
-    <tr>
-      <td>ego</td>
-      <td><a href="doc/ego.html">html</a></td>
-      <td><a href="doc/ego.pdf">pdf</a></td>
-      <td>the EM optimiser</td>
-    </tr>
-    <tr>
-      <td>em</td>
-      <td><a href="doc/em.html">html</a></td>
-      <td><a href="doc/em.pdf">pdf</a></td>
-      <td>the EM intermediate code
-format &amp; virtual machine</td>
-    </tr>
-    <tr>
-      <td>i80</td>
-      <td><a href="doc/i80.html">html</a></td>
-      <td><a href="doc/i80.pdf">pdf</a></td>
-      <td>the Intel i80 code
-generator</td>
-    </tr>
-    <tr>
-      <td>install</td>
-      <td><a href="doc/install.html">html</a></td>
-      <td><a href="doc/install.pdf">pdf</a></td>
-      <td>installation instructions</td>
-    </tr>
-    <tr>
-      <td>int</td>
-      <td><a href="doc/int.html">html</a></td>
-      <td><a href="doc/int.pdf">pdf</a></td>
-      <td>the EM interpreter</td>
-    </tr>
-    <tr>
-      <td>lint</td>
-      <td><a href="doc/lint.html">html</a></td>
-      <td><a href="doc/lint.pdf">pdf</a></td>
-      <td>the off-line C program
-checker</td>
-    </tr>
-    <tr>
-      <td>m2ref</td>
-      <td><a href="doc/m2ref.html">html</a></td>
-      <td><a href="doc/m2ref.pdf">pdf</a></td>
-      <td>the Module-2 compiler</td>
-    </tr>
-    <tr>
-      <td>m68020</td>
-      <td><a href="doc/m68020.html">html</a></td>
-      <td><a href="doc/m68020.pdf">pdf</a></td>
-      <td>the Motorola
-68000-series code generator</td>
-    </tr>
-    <tr>
-      <td>ncg</td>
-      <td><a href="doc/ncg.html">html</a></td>
-      <td><a href="doc/ncg.pdf">pdf</a></td>
-      <td>the new code generator</td>
-    </tr>
-    <tr>
-      <td>nopt</td>
-      <td><a href="doc/nopt.html">html</a></td>
-      <td><a href="doc/nopt.pdf">pdf</a></td>
-      <td>the new peephole
-optimiser</td>
-    </tr>
-    <tr>
-      <td>occam</td>
-      <td><a href="doc/occam.html">html</a></td>
-      <td><a href="doc/occam.pdf">pdf</a></td>
-      <td>the Occam compiler</td>
-    </tr>
-    <tr>
-      <td>pascal</td>
-      <td><a href="doc/pascal.html">html</a></td>
-      <td><a href="doc/pascal.pdf">pdf</a></td>
-      <td>the Pascal compiler
-implementation</td>
-    </tr>
-    <tr>
-      <td>pcref</td>
-      <td><a href="doc/pcref.html">html</a></td>
-      <td><a href="doc/pcref.pdf">pdf</a></td>
-      <td>the Pascal compiler user
-reference</td>
-    </tr>
-    <tr>
-      <td>peep</td>
-      <td><a href="doc/peep.html">html</a></td>
-      <td><a href="doc/peep.pdf">pdf</a></td>
-      <td>the old peephole
-optimiser</td>
-    </tr>
-    <tr>
-      <td>regadd</td>
-      <td><a href="doc/regadd.html">html</a></td>
-      <td><a href="doc/regadd.pdf">pdf</a></td>
-      <td>report on adding support
-for register variables</td>
-    </tr>
-    <tr>
-      <td>toolkit</td>
-      <td><a href="doc/toolkit.html">html</a></td>
-      <td><a href="doc/toolkit.pdf">pdf</a></td>
-      <td>high-level overview</td>
-    </tr>
-    <tr>
-      <td>top</td>
-      <td><a href="doc/top.html">html</a></td>
-      <td><a href="doc/top.pdf">pdf</a></td>
-      <td>native assembly level
-optimiser</td>
-    </tr>
-    <tr>
-      <td>v7bugs</td>
-      <td><a href="doc/v7bugs.html">html</a></td>
-      <td><a href="doc/v7bugs.pdf">pdf</a></td>
-      <td>a list of bugs found in
-V7 Unix</td>
-    </tr>
-    <tr>
-      <td>val</td>
-      <td><a href="doc/val.html">html</a></td>
-      <td><a href="doc/val.pdf">pdf</a></td>
-      <td>Pascal validation suite
-report</td>
-    </tr>
-    <tr>
-      <td>z80</td>
-      <td><a href="doc/z80.html">html</a></td>
-      <td><a href="doc/z80.pdf">pdf</a></td>
-      <td>the Zilog Z80 code
-generator</td>
-    </tr>
-  </tbody>
-</table>
-</div>
+  <ul class="post-list">
+    {% for post in site.posts %}
+      <li>
+        <span class="post-meta">{{ post.date | date: "%b %-d, %Y" }}</span>
 
-<div class="page" id="installation"><h2><a name="installation">Installation</a></h2>
+        <h2>
+          <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
+        </h2>
+      </li>
+    {% endfor %}
+  </ul>
 
-<h3>The ACK</h3>
-<p>To install the ACK, you need to <a href="http://sourceforge.net/project/showfiles.php?group_id=130811">download
-the source package</a> and compile it.
-</p>
-<p><b>Version 6.0</b> uses the new build mechanism, based around the
-<a href="http://primemover.sf.net">Prime Mover</a> build tool. Full instructions
-are in the enclosed README.
-</p>
-<p><b>Version 5.6</b> uses the old mechanism. This does compiles cleanly on Linux,
-most of the time, but is extremely old and rather difficult to maintain.
-The installation instructions are complex but straightforward provided you
-follow the instructions. <i>Please</i> read the README; it provides a detailed
-walk-through of the compilation process, telling you what to type at each stage.
-I'm afraid you may not get much help with building the 5.6 release, simply because
-I don't understand it very well myself.
-</p>
-<p>If you find yourself using the ACK, or have any questions, bug reports or patches,
-please remember to <a href="http://sourceforge.net/mail/?group_id=130811">join
-the mailing list</a>.
-</p>
-<p>Enjoy.</p>
+  <p class="rss-subscribe">subscribe <a href="{{ "/feed.xml" | prepend: site.baseurl }}">via RSS</a></p>
 
-<h3>LLgen</h3>
-<p>LLgen is <a href="http://sourceforge.net/project/showfiles.php?group_id=130811">available
-on its own</a> (<b>note:</b> you do <i>not</i> need to download this if you want to
-install the ACK; the ACK comes with its own version). It is a very simple package;
-to install, decompress and follow the instructions in the README.</p>
-<p>LLgen should work on any modern system with gcc and groff.</p>
-
-<p>&nbsp;</p> <!-- style bug workaround -->
-<p>&nbsp;</p> <!-- style bug workaround -->
-<p>&nbsp;</p> <!-- style bug workaround -->
-<p>&nbsp;</p> <!-- style bug workaround -->
-<p>&nbsp;</p> <!-- style bug workaround -->
-</div>
 </div>
-<div class="footer"></div>
-</body>
-</html>
-<!-- vim: set ts=2 sw=2: -->
diff --git a/js/html5shiv.js b/js/html5shiv.js
new file mode 100644 (file)
index 0000000..77dace4
--- /dev/null
@@ -0,0 +1,322 @@
+/**
+* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+;(function(window, document) {
+/*jshint evil:true */
+  /** version */
+  var version = '3.7.2';
+
+  /** Preset options */
+  var options = window.html5 || {};
+
+  /** Used to skip problem elements */
+  var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+  /** Not all elements can be cloned in IE **/
+  var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+  /** Detect whether the browser supports default html5 styles */
+  var supportsHtml5Styles;
+
+  /** Name of the expando, to work with multiple documents or to re-shiv one document */
+  var expando = '_html5shiv';
+
+  /** The id for the the documents expando */
+  var expanID = 0;
+
+  /** Cached data for each document */
+  var expandoData = {};
+
+  /** Detect whether the browser supports unknown elements */
+  var supportsUnknownElements;
+
+  (function() {
+    try {
+        var a = document.createElement('a');
+        a.innerHTML = '<xyz></xyz>';
+        //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
+        supportsHtml5Styles = ('hidden' in a);
+
+        supportsUnknownElements = a.childNodes.length == 1 || (function() {
+          // assign a false positive if unable to shiv
+          (document.createElement)('a');
+          var frag = document.createDocumentFragment();
+          return (
+            typeof frag.cloneNode == 'undefined' ||
+            typeof frag.createDocumentFragment == 'undefined' ||
+            typeof frag.createElement == 'undefined'
+          );
+        }());
+    } catch(e) {
+      // assign a false positive if detection fails => unable to shiv
+      supportsHtml5Styles = true;
+      supportsUnknownElements = true;
+    }
+
+  }());
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Creates a style sheet with the given CSS text and adds it to the document.
+   * @private
+   * @param {Document} ownerDocument The document.
+   * @param {String} cssText The CSS text.
+   * @returns {StyleSheet} The style element.
+   */
+  function addStyleSheet(ownerDocument, cssText) {
+    var p = ownerDocument.createElement('p'),
+        parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+    p.innerHTML = 'x<style>' + cssText + '</style>';
+    return parent.insertBefore(p.lastChild, parent.firstChild);
+  }
+
+  /**
+   * Returns the value of `html5.elements` as an array.
+   * @private
+   * @returns {Array} An array of shived element node names.
+   */
+  function getElements() {
+    var elements = html5.elements;
+    return typeof elements == 'string' ? elements.split(' ') : elements;
+  }
+
+  /**
+   * Extends the built-in list of html5 elements
+   * @memberOf html5
+   * @param {String|Array} newElements whitespace separated list or array of new element names to shiv
+   * @param {Document} ownerDocument The context document.
+   */
+  function addElements(newElements, ownerDocument) {
+    var elements = html5.elements;
+    if(typeof elements != 'string'){
+      elements = elements.join(' ');
+    }
+    if(typeof newElements != 'string'){
+      newElements = newElements.join(' ');
+    }
+    html5.elements = elements +' '+ newElements;
+    shivDocument(ownerDocument);
+  }
+
+   /**
+   * Returns the data associated to the given document
+   * @private
+   * @param {Document} ownerDocument The document.
+   * @returns {Object} An object of data.
+   */
+  function getExpandoData(ownerDocument) {
+    var data = expandoData[ownerDocument[expando]];
+    if (!data) {
+        data = {};
+        expanID++;
+        ownerDocument[expando] = expanID;
+        expandoData[expanID] = data;
+    }
+    return data;
+  }
+
+  /**
+   * returns a shived element for the given nodeName and document
+   * @memberOf html5
+   * @param {String} nodeName name of the element
+   * @param {Document} ownerDocument The context document.
+   * @returns {Object} The shived element.
+   */
+  function createElement(nodeName, ownerDocument, data){
+    if (!ownerDocument) {
+        ownerDocument = document;
+    }
+    if(supportsUnknownElements){
+        return ownerDocument.createElement(nodeName);
+    }
+    if (!data) {
+        data = getExpandoData(ownerDocument);
+    }
+    var node;
+
+    if (data.cache[nodeName]) {
+        node = data.cache[nodeName].cloneNode();
+    } else if (saveClones.test(nodeName)) {
+        node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+    } else {
+        node = data.createElem(nodeName);
+    }
+
+    // Avoid adding some elements to fragments in IE < 9 because
+    // * Attributes like `name` or `type` cannot be set/changed once an element
+    //   is inserted into a document/fragment
+    // * Link elements with `src` attributes that are inaccessible, as with
+    //   a 403 response, will cause the tab/window to crash
+    // * Script elements appended to fragments will execute when their `src`
+    //   or `text` property is set
+    return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+  }
+
+  /**
+   * returns a shived DocumentFragment for the given document
+   * @memberOf html5
+   * @param {Document} ownerDocument The context document.
+   * @returns {Object} The shived DocumentFragment.
+   */
+  function createDocumentFragment(ownerDocument, data){
+    if (!ownerDocument) {
+        ownerDocument = document;
+    }
+    if(supportsUnknownElements){
+        return ownerDocument.createDocumentFragment();
+    }
+    data = data || getExpandoData(ownerDocument);
+    var clone = data.frag.cloneNode(),
+        i = 0,
+        elems = getElements(),
+        l = elems.length;
+    for(;i<l;i++){
+        clone.createElement(elems[i]);
+    }
+    return clone;
+  }
+
+  /**
+   * Shivs the `createElement` and `createDocumentFragment` methods of the document.
+   * @private
+   * @param {Document|DocumentFragment} ownerDocument The document.
+   * @param {Object} data of the document.
+   */
+  function shivMethods(ownerDocument, data) {
+    if (!data.cache) {
+        data.cache = {};
+        data.createElem = ownerDocument.createElement;
+        data.createFrag = ownerDocument.createDocumentFragment;
+        data.frag = data.createFrag();
+    }
+
+
+    ownerDocument.createElement = function(nodeName) {
+      //abort shiv
+      if (!html5.shivMethods) {
+          return data.createElem(nodeName);
+      }
+      return createElement(nodeName, ownerDocument, data);
+    };
+
+    ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+      'var n=f.cloneNode(),c=n.createElement;' +
+      'h.shivMethods&&(' +
+        // unroll the `createElement` calls
+        getElements().join().replace(/[\w\-:]+/g, function(nodeName) {
+          data.createElem(nodeName);
+          data.frag.createElement(nodeName);
+          return 'c("' + nodeName + '")';
+        }) +
+      ');return n}'
+    )(html5, data.frag);
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Shivs the given document.
+   * @memberOf html5
+   * @param {Document} ownerDocument The document to shiv.
+   * @returns {Document} The shived document.
+   */
+  function shivDocument(ownerDocument) {
+    if (!ownerDocument) {
+        ownerDocument = document;
+    }
+    var data = getExpandoData(ownerDocument);
+
+    if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+      data.hasCSS = !!addStyleSheet(ownerDocument,
+        // corrects block display not defined in IE6/7/8/9
+        'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+        // adds styling not present in IE6/7/8/9
+        'mark{background:#FF0;color:#000}' +
+        // hides non-rendered elements
+        'template{display:none}'
+      );
+    }
+    if (!supportsUnknownElements) {
+      shivMethods(ownerDocument, data);
+    }
+    return ownerDocument;
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * The `html5` object is exposed so that more elements can be shived and
+   * existing shiving can be detected on iframes.
+   * @type Object
+   * @example
+   *
+   * // options can be changed before the script is included
+   * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
+   */
+  var html5 = {
+
+    /**
+     * An array or space separated string of node names of the elements to shiv.
+     * @memberOf html5
+     * @type Array|String
+     */
+    'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
+
+    /**
+     * current version of html5shiv
+     */
+    'version': version,
+
+    /**
+     * A flag to indicate that the HTML5 style sheet should be inserted.
+     * @memberOf html5
+     * @type Boolean
+     */
+    'shivCSS': (options.shivCSS !== false),
+
+    /**
+     * Is equal to true if a browser supports creating unknown/HTML5 elements
+     * @memberOf html5
+     * @type boolean
+     */
+    'supportsUnknownElements': supportsUnknownElements,
+
+    /**
+     * A flag to indicate that the document's `createElement` and `createDocumentFragment`
+     * methods should be overwritten.
+     * @memberOf html5
+     * @type Boolean
+     */
+    'shivMethods': (options.shivMethods !== false),
+
+    /**
+     * A string to describe the type of `html5` object ("default" or "default print").
+     * @memberOf html5
+     * @type String
+     */
+    'type': 'default',
+
+    // shivs the document according to the specified `html5` object options
+    'shivDocument': shivDocument,
+
+    //creates a shived element
+    createElement: createElement,
+
+    //creates a shived documentFragment
+    createDocumentFragment: createDocumentFragment,
+
+    //extends list of elements
+    addElements: addElements
+  };
+
+  /*--------------------------------------------------------------------------*/
+
+  // expose html5
+  window.html5 = html5;
+
+  // shiv the document
+  shivDocument(document);
+
+}(this, document));
diff --git a/js/respond.js b/js/respond.js
new file mode 100644 (file)
index 0000000..58883e4
--- /dev/null
@@ -0,0 +1,353 @@
+/* Respond.js: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */
+(function( w ){
+
+       "use strict";
+
+       //exposed namespace
+       var respond = {};
+       w.respond = respond;
+
+       //define update even in native-mq-supporting browsers, to avoid errors
+       respond.update = function(){};
+
+       //define ajax obj
+       var requestQueue = [],
+               xmlHttp = (function() {
+                       var xmlhttpmethod = false;
+                       try {
+                               xmlhttpmethod = new w.XMLHttpRequest();
+                       }
+                       catch( e ){
+                               xmlhttpmethod = new w.ActiveXObject( "Microsoft.XMLHTTP" );
+                       }
+                       return function(){
+                               return xmlhttpmethod;
+                       };
+               })(),
+
+               //tweaked Ajax functions from Quirksmode
+               ajax = function( url, callback ) {
+                       var req = xmlHttp();
+                       if (!req){
+                               return;
+                       }
+                       req.open( "GET", url, true );
+                       req.onreadystatechange = function () {
+                               if ( req.readyState !== 4 || req.status !== 200 && req.status !== 304 ){
+                                       return;
+                               }
+                               callback( req.responseText );
+                       };
+                       if ( req.readyState === 4 ){
+                               return;
+                       }
+                       req.send( null );
+               },
+               isUnsupportedMediaQuery = function( query ) {
+                       return query.replace( respond.regex.minmaxwh, '' ).match( respond.regex.other );
+               };
+
+       //expose for testing
+       respond.ajax = ajax;
+       respond.queue = requestQueue;
+       respond.unsupportedmq = isUnsupportedMediaQuery;
+       respond.regex = {
+               media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,
+               keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,
+               comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,
+               urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,
+               findStyles: /@media *([^\{]+)\{([\S\s]+?)$/,
+               only: /(only\s+)?([a-zA-Z]+)\s?/,
+               minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
+               maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
+               minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,
+               other: /\([^\)]*\)/g
+       };
+
+       //expose media query support flag for external use
+       respond.mediaQueriesSupported = w.matchMedia && w.matchMedia( "only all" ) !== null && w.matchMedia( "only all" ).matches;
+
+       //if media queries are supported, exit here
+       if( respond.mediaQueriesSupported ){
+               return;
+       }
+
+       //define vars
+       var doc = w.document,
+               docElem = doc.documentElement,
+               mediastyles = [],
+               rules = [],
+               appendedEls = [],
+               parsedSheets = {},
+               resizeThrottle = 30,
+               head = doc.getElementsByTagName( "head" )[0] || docElem,
+               base = doc.getElementsByTagName( "base" )[0],
+               links = head.getElementsByTagName( "link" ),
+
+               lastCall,
+               resizeDefer,
+
+               //cached container for 1em value, populated the first time it's needed
+               eminpx,
+
+               // returns the value of 1em in pixels
+               getEmValue = function() {
+                       var ret,
+                               div = doc.createElement('div'),
+                               body = doc.body,
+                               originalHTMLFontSize = docElem.style.fontSize,
+                               originalBodyFontSize = body && body.style.fontSize,
+                               fakeUsed = false;
+
+                       div.style.cssText = "position:absolute;font-size:1em;width:1em";
+
+                       if( !body ){
+                               body = fakeUsed = doc.createElement( "body" );
+                               body.style.background = "none";
+                       }
+
+                       // 1em in a media query is the value of the default font size of the browser
+                       // reset docElem and body to ensure the correct value is returned
+                       docElem.style.fontSize = "100%";
+                       body.style.fontSize = "100%";
+
+                       body.appendChild( div );
+
+                       if( fakeUsed ){
+                               docElem.insertBefore( body, docElem.firstChild );
+                       }
+
+                       ret = div.offsetWidth;
+
+                       if( fakeUsed ){
+                               docElem.removeChild( body );
+                       }
+                       else {
+                               body.removeChild( div );
+                       }
+
+                       // restore the original values
+                       docElem.style.fontSize = originalHTMLFontSize;
+                       if( originalBodyFontSize ) {
+                               body.style.fontSize = originalBodyFontSize;
+                       }
+
+
+                       //also update eminpx before returning
+                       ret = eminpx = parseFloat(ret);
+
+                       return ret;
+               },
+
+               //enable/disable styles
+               applyMedia = function( fromResize ){
+                       var name = "clientWidth",
+                               docElemProp = docElem[ name ],
+                               currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp,
+                               styleBlocks     = {},
+                               lastLink = links[ links.length-1 ],
+                               now = (new Date()).getTime();
+
+                       //throttle resize calls
+                       if( fromResize && lastCall && now - lastCall < resizeThrottle ){
+                               w.clearTimeout( resizeDefer );
+                               resizeDefer = w.setTimeout( applyMedia, resizeThrottle );
+                               return;
+                       }
+                       else {
+                               lastCall = now;
+                       }
+
+                       for( var i in mediastyles ){
+                               if( mediastyles.hasOwnProperty( i ) ){
+                                       var thisstyle = mediastyles[ i ],
+                                               min = thisstyle.minw,
+                                               max = thisstyle.maxw,
+                                               minnull = min === null,
+                                               maxnull = max === null,
+                                               em = "em";
+
+                                       if( !!min ){
+                                               min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );
+                                       }
+                                       if( !!max ){
+                                               max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );
+                                       }
+
+                                       // if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true
+                                       if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){
+                                               if( !styleBlocks[ thisstyle.media ] ){
+                                                       styleBlocks[ thisstyle.media ] = [];
+                                               }
+                                               styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] );
+                                       }
+                               }
+                       }
+
+                       //remove any existing respond style element(s)
+                       for( var j in appendedEls ){
+                               if( appendedEls.hasOwnProperty( j ) ){
+                                       if( appendedEls[ j ] && appendedEls[ j ].parentNode === head ){
+                                               head.removeChild( appendedEls[ j ] );
+                                       }
+                               }
+                       }
+                       appendedEls.length = 0;
+
+                       //inject active styles, grouped by media type
+                       for( var k in styleBlocks ){
+                               if( styleBlocks.hasOwnProperty( k ) ){
+                                       var ss = doc.createElement( "style" ),
+                                               css = styleBlocks[ k ].join( "\n" );
+
+                                       ss.type = "text/css";
+                                       ss.media = k;
+
+                                       //originally, ss was appended to a documentFragment and sheets were appended in bulk.
+                                       //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!
+                                       head.insertBefore( ss, lastLink.nextSibling );
+
+                                       if ( ss.styleSheet ){
+                                               ss.styleSheet.cssText = css;
+                                       }
+                                       else {
+                                               ss.appendChild( doc.createTextNode( css ) );
+                                       }
+
+                                       //push to appendedEls to track for later removal
+                                       appendedEls.push( ss );
+                               }
+                       }
+               },
+               //find media blocks in css text, convert to style blocks
+               translate = function( styles, href, media ){
+                       var qs = styles.replace( respond.regex.comments, '' )
+                                       .replace( respond.regex.keyframes, '' )
+                                       .match( respond.regex.media ),
+                               ql = qs && qs.length || 0;
+
+                       //try to get CSS path
+                       href = href.substring( 0, href.lastIndexOf( "/" ) );
+
+                       var repUrls = function( css ){
+                                       return css.replace( respond.regex.urls, "$1" + href + "$2$3" );
+                               },
+                               useMedia = !ql && media;
+
+                       //if path exists, tack on trailing slash
+                       if( href.length ){ href += "/"; }
+
+                       //if no internal queries exist, but media attr does, use that
+                       //note: this currently lacks support for situations where a media attr is specified on a link AND
+                               //its associated stylesheet has internal CSS media queries.
+                               //In those cases, the media attribute will currently be ignored.
+                       if( useMedia ){
+                               ql = 1;
+                       }
+
+                       for( var i = 0; i < ql; i++ ){
+                               var fullq, thisq, eachq, eql;
+
+                               //media attr
+                               if( useMedia ){
+                                       fullq = media;
+                                       rules.push( repUrls( styles ) );
+                               }
+                               //parse for styles
+                               else{
+                                       fullq = qs[ i ].match( respond.regex.findStyles ) && RegExp.$1;
+                                       rules.push( RegExp.$2 && repUrls( RegExp.$2 ) );
+                               }
+
+                               eachq = fullq.split( "," );
+                               eql = eachq.length;
+
+                               for( var j = 0; j < eql; j++ ){
+                                       thisq = eachq[ j ];
+
+                                       if( isUnsupportedMediaQuery( thisq ) ) {
+                                               continue;
+                                       }
+
+                                       mediastyles.push( {
+                                               media : thisq.split( "(" )[ 0 ].match( respond.regex.only ) && RegExp.$2 || "all",
+                                               rules : rules.length - 1,
+                                               hasquery : thisq.indexOf("(") > -1,
+                                               minw : thisq.match( respond.regex.minw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ),
+                                               maxw : thisq.match( respond.regex.maxw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" )
+                                       } );
+                               }
+                       }
+
+                       applyMedia();
+               },
+
+               //recurse through request queue, get css text
+               makeRequests = function(){
+                       if( requestQueue.length ){
+                               var thisRequest = requestQueue.shift();
+
+                               ajax( thisRequest.href, function( styles ){
+                                       translate( styles, thisRequest.href, thisRequest.media );
+                                       parsedSheets[ thisRequest.href ] = true;
+
+                                       // by wrapping recursive function call in setTimeout
+                                       // we prevent "Stack overflow" error in IE7
+                                       w.setTimeout(function(){ makeRequests(); },0);
+                               } );
+                       }
+               },
+
+               //loop stylesheets, send text content to translate
+               ripCSS = function(){
+
+                       for( var i = 0; i < links.length; i++ ){
+                               var sheet = links[ i ],
+                               href = sheet.href,
+                               media = sheet.media,
+                               isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
+
+                               //only links plz and prevent re-parsing
+                               if( !!href && isCSS && !parsedSheets[ href ] ){
+                                       // selectivizr exposes css through the rawCssText expando
+                                       if (sheet.styleSheet && sheet.styleSheet.rawCssText) {
+                                               translate( sheet.styleSheet.rawCssText, href, media );
+                                               parsedSheets[ href ] = true;
+                                       } else {
+                                               if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) ||
+                                                       href.replace( RegExp.$1, "" ).split( "/" )[0] === w.location.host ){
+                                                       // IE7 doesn't handle urls that start with '//' for ajax request
+                                                       // manually add in the protocol
+                                                       if ( href.substring(0,2) === "//" ) { href = w.location.protocol + href; }
+                                                       requestQueue.push( {
+                                                               href: href,
+                                                               media: media
+                                                       } );
+                                               }
+                                       }
+                               }
+                       }
+                       makeRequests();
+               };
+
+       //translate CSS
+       ripCSS();
+
+       //expose update for re-running respond later on
+       respond.update = ripCSS;
+
+       //expose getEmValue
+       respond.getEmValue = getEmValue;
+
+       //adjust on resize
+       function callMedia(){
+               applyMedia( true );
+       }
+
+       if( w.addEventListener ){
+               w.addEventListener( "resize", callMedia, false );
+       }
+       else if( w.attachEvent ){
+               w.attachEvent( "onresize", callMedia );
+       }
+})(this);