Skip to content
Write in Markdown, publish as JSON and HTML, present with any platform that can GET.
Ruby
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin
features
.gitignore
LICENSE.txt
README.md
switzerland.gemspec

README.md

✚ Switzerland

  • home to the Swiss Alps
  • a great place to stash some cash
  • eponymous graphic design: grids and Helvetica!
  • the frickin’ birthplace of the world wide web
  • famously ~ neutral ~

Mexican beetle

It’s also a static content generator written in Ruby. It’s like Jekyll and Middleman in that it offers:

Missing is anything involving templates, pages, or assets. Switzerland’s output is primarily JSON, intended for consumption client or server-side. Any platform capable of making a GET request is OK 200. Publish content to GitHub or a Dropbox and access it from your app, website, or even a web browser.

Usage

✚ gem install switzerland
✚ switz

If no arguments are provided Switzerland will inspect the local directory recursively and:

  • Duplicate your content’s folder structure wherever the published content will live
  • Pass any files ending in .md or .markdown through Kramdown
  • Generate and save “published” HTML and JSON versions of each Markdown file
  • Copy any image files alongside generated JSON/HTML

Specify a Source

One or more source files and folders can be specified just like cp. If source content is specified a publishing destination must also be provided.

✚ switz cheese overview.md published

The above command would create:

published/overview.html
published/overview.json
published/cheese/emmentaler.html
published/cheese/emmentaler.json
published/cheese/forked/jarlsberg.html
published/cheese/forked/jarlsberg.json
published/cheese/forked/leerdammer.html
published/cheese/forked/leerdammer.json
published/cheese/forked/maasdam.html
published/cheese/forked/maasdam.json

Specify a Publishing Destination

If no arguments are provided then published content will be automatically saved into a relative directory named published. This may be overridden with an argument that either appears after specified source paths or by itself as the only argument.

✚ switz cheese.md public

···

public/cheese.html
public/cheese.json

Demo

✚ echo "# Hallo" >> hallo.md
✚ switz hallo.md published
✚ ls -1 published
hallo.html
hallo.json

hallo.html

<h1>Hallo</h1>

hallo.json

{
    "anchors": [{
        "tag": "h1",
        "text": "Hallo",
        "anchor": "toc-hallo"
    }],
    "slug": "hallo",
    "body": "<h1 id=\"toc-hallo\">Hallo</h1>"
}

Syntax Highlighting

Use fenced code blocks to easily reference example code. The following format is also conveniently recognized by GitHub Flavored Markdown:

~~~ javascript
alert('hallo!');
~~~

Kramdown generates the following markup from the example above.

<pre>
    <code class="language-javascript">
        alert('hallo!');
    </code>
</pre>

If a language is specified in the opening fence it is used to generate a class as recommended. This is useful when using client-slide libraries such as google-code-prettify and Prism.js.

Go automatic with CodeRay

If the CodeRay gem is installed the above example would be automatically converted into this markup, with classes to select & style:

<div>
    alert(<span class="string"><span class="delimiter">'</span><span class="content">hallo!</span><span class="delimiter">'</span></span>);
</div>

YAML Front Matter

Provide key/value pairs in front of your Markdown content like so and they will be mixed into the published JSON:

---
layout: three-column
title: Switzerland Ain’t a Static Site Generator
---

# SAASSG

···

{
    "layout": "three-column",
    "title": "Switzerland Ain’t a Static Site Generator"
    "slug": "switzerland-aint-a-static-site-generator",
    "body": "<h1 id=\"toc-saassg\">SAASSG</h1>"
}

The following keys are reserved:

  • anchors
  • body
  • slug
Something went wrong with that request. Please try again.