Markdown extension library for Government editors
Ruby HTML Shell
Latest commit 9189893 Sep 23, 2016 @dougdroper dougdroper committed on GitHub Merge pull request #87 from alphagov/cli
CLI rendering via govspeak binary

Govspeak is our markdown-derived mark-up language.


Install the gem

gem install govspeak

or add it to your Gemfile

gem "govspeak", "~> 3.4.0"

then create a new document

require 'rubygems'
require 'govspeak'

doc = "^Test^"
puts doc.to_html

or alternatively, run it from the command line

$ govspeak "render-me"
$ govspeak --file
$ echo "render-me" | govspeak

options can be passed in through --options as a string of JSON or a file of JSON can be passed in as --options-file options.json.

if installed via bundler prefix commands with bundle exec eg $ bundle exec govspeak "render-me"


In addition to the standard Markdown syntax, we have added our own extensions.


Information callouts

^This is an information callout^

creates a callout with an info (i) icon.

<div role="note" aria-label="Information" class="application-notice info-notice">
    <p>This is an information callout</p>

Warning callouts

%This is a warning callout%

creates a callout with a warning or alert (!) icon

<div role="note" aria-label="Help" class="application-notice help-notice">
    <p>This is a warning callout</p>

Example callout

**Example**: Open the pod bay doors

creates an example box

<div class="example">
<p><strong>Example:</strong> Open the pod bay doors</p>



@This is a very important message or warning@

highlights the enclosed text in yellow

<h3 role="note" aria-label="Important" class="advisory">
    <span>This is a very important message or warning</span>


The VAT rate is *20%*

creates a large highlight box with optional preamble text and giant text denoted with **

<div class="highlight-answer">
<p>The VAT rate is <em>20%</em></p>

Statistic headline

Used in HTML publications.

Statistic headlines highlight important numbers in content. Displays a statistic as a large number with a description. The statistic and description must make sense when read aloud. The important number must be wrapped in **.

*13.8bn* years since the big bang

Creates the following:

<aside class="stat-headline">
  <p><em>13.8bn</em> years since the big bang</p>

Points of Contact


**Student Finance England**
**Telephone:** 0845 300 50 90
**Minicom:** 0845 604 44 34

creates a contact box

<div class="contact">
<p><strong>Student Finance England</strong><br><strong>Telephone:</strong> 0845 300 50 90<br><strong>Minicom:</strong> 0845 604 44 34</p>


Hercules House
Hercules Road
London SE1 7DU

creates an address box

<div class="address"><div class="adr org fn"><p>
Hercules House
<br>Hercules Road
<br>London SE1 7DU


[An example form download link]( "Example form")

Something about this form download

creates a file download box

<div class="form-download">
<p><a href="" title="Example form" rel="external">An example form download link.</a></p>


Steps can be created similar to an ordered list:

s1. numbers
s2. to the start
s3. of your list

Note that steps need an extra line break after the final step (ie. two full blank lines) or other markdown directly afterwards won't work. If you have a subhead after - add a line break after this.

Legislative Lists

For lists where you want to specify the numbering and have multiple indent levels.

* 1. Item 1
* 2. Item 2
  * a) Item 2a
  * b) Item 2b
    * i. Item 2 b i
    * ii. Item 2 b ii
* 3. Item 3
(to indent, add 2 spaces)


Abbreviations can be defined at the end of the document, and any occurrences elswhere in the document will wrapped in an <abbr> tag. They are parsed in the order in which they are defined, so PCSOs should be defined before PCSO, for example.

Special rules apply if you’re exporting a vehicle outside the EU.

*[EU]:European Union


<p>Special rules apply if you’re exporting a vehicle outside the <abbr title="European Union">EU</abbr>.</p>

Devolved content

:england:content goes here:england:
:scotland:content goes here:scotland:
:london:content goes here:london:
:wales:content goes here:wales:
:northern-ireland:content goes here:northern-ireland:
:england-wales:content goes here:england-wales: