# Instiki Syntax

## Markdown

Instiki sports a variety of markup options, but the main one for use with mathematics (that’s why you’re here, after all) is Markdown.

The Markdown implementation is based on Maruku, a greatly enhanced implementation which augments John Gruber’s orginal Markdown syntax with Michel Fortin’s Markdown-Extra extensions (tables, footnotes, definition-lists, …). It also sports a very nice metadata syntax for adding attributes (id, class, style, etc.) to the generated XHTML, which is especially useful in combination with its syntax for creating <div>s.

### Itex

With the (default) Markdown+itex2MML filter, you can enter equations in itex, a LaTeX-like dialect. Inline and display equations are supported, as is automatic equation numbering and other such niceties.

Here’s a simple example:

 $\label{Gaussian} {\int_{-\infty}^\infty e^{-a x^2} d x} = \sqrt{\frac{\pi}{a}}$

produces

(1)${\int_{-\infty}^\infty e^{-a x^2} d x} = \sqrt{\frac{\pi}{a}}$

For more examples, see the Sandbox.

### Theorems

Instiki support a range of Theorem-like environments, modeled on amsthm. (Indeed, the LaTeX-export is amsthm-compatible.). See here for details.

### Figures

Instiki allows you to embed SVG directly onto any wiki page. There’s a WYSIWYG editor available to help in creating SVG graphics.

Alternatively, if you enable it, Instiki also supports Tikz pictures.

### Syntax Colouring

The Markdown filters also support syntax-colouring of code blocks. Ruby and (X)HTML flavours are supported.

Here’s an example of Ruby syntax-colouring:

require 'chunks/chunk'

# Contains all the methods for finding and replacing wiki links.
module WikiChunk
include Chunk

# A wiki reference is the top-level class for anything that refers to
# another wiki page.
class WikiReference < Chunk::Abstract

# Name of the referenced page

# Name of the referenced page

# the referenced page
def refpage
@content.web.page(@page_name)
end

end

which is generated by

~~~~~~~~~~ {: lang=ruby}
require 'chunks/chunk'

# Contains all the methods for finding and replacing wiki links.
module WikiChunk
include Chunk
⋮
~~~~~~~~~~~~~~~~~~~~~~~~

(Note the use of Markdown-Extra fenced code-blocks.) Here’s an example of CSS syntax-colouring

 body {
background-color:#FFF;
color:#333;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:1em;
line-height:1.3em;
}

.skipNav {
position:relative;
left:-1000em;
font-size:0em;
}

div#Content {
border-top:none;
margin:auto;
text-align:left;
width:100%;
max-width:55em;
}

a:visited {
color:#555 !important;
}

which is generated by appending

     body {
background-color:#FFF;
color:#333;
⋮
{: lang=css}

to a standard Markdown indented code-block.

The syntax-colouring modes, supported in Instiki 0.18.1, are:

 html, xml, ruby, ansic, javascript, yaml, sqlite, css, fortran

## Wiki Syntax

Internal Wiki links can be generated by

 [[Name of Page]]

or

 [[Name of Page|Alternate link text]]

If the page already exists (or if there’s an existing page that redirects for it), then the result is a link to that page. If not, then a ‘new’ page link is created. Click on the question-mark to create the new page.

You can also link to other Webs on the same Instiki installation, using

 [[Name of Web:Name of Page]]

or

 [[Name of Web:Name of Page|Alternate link text]]

Finally, you can add a URL fragment, to link to a particular element on a page

 [[Name of Page#foo]]

links to the element with id=foo. (See here for the Markdown syntax to add an id to an arbitrary element on the page.) URL fragments can be combined with alternate-text and/or interWeb links, as you’d expect

[[Name of Web:Name of Page#foo|Alternate link text]]

If you so choose, camel-cased words, like “HomePage” and “FileUploads”, can also generate Wiki links, turning, respectively, into HomePage and File Uploads. Personally, I prefer to disable that feature in the Edit Web page. If you do turn it on, you can “escape” camel-cased words, preventing them from being turned into hyperlinks, by prepending a “\”.

It’s easy to upload files and pictures to your Wiki. To display an uploaded image, called mypic.jpg, you can use

 [[mypic.jpg:pic]]

or

 [[mypic.jpg|some alt text:pic]]

Similarly, you can link to an uploaded file, myfile.pdf, with

 [[myfile.pdf:file]]

or

 [[myfile.pdf|some link text:file]]

If you are interested in the HTML5 <audio> and <video> elements, they can be, in similar fashion, created using :audio and :video links.

Instiki also supports :youtube and :cdf links, respectively, to embed Youtube videos and Wolfram CDF files.

### Suppressing Wiki Syntax

<nowiki>...</nowiki>

protects its contents from being interpreted. Thus, you can type

<nowiki>[[Not a link]]</nowiki>

and have it appear as [[Not a link]]. At least in this case, the same effect can be achieved using backslashes for escaping, i.e., by typing $\[Not a link$\].

### Including Pages

You’ve probably noticed the sidebar on the pages of this Wiki. That’s achieved with via a Wiki-include

[[!include Name of Page]]

Say you have a page named “liquor”. Now, you create a Wiki-link, [[booze]]. If a page by the latter name already exists, then this Wiki-link will point to that. If no such page exists, it would normally create a “wanted page” link. But, perhaps you don’t want that. Perhaps [[booze]] should point to the “liquor” page.

Edit the “liquor” page, and add a

 [[!redirects booze]]

directive to it. Now all [[booze]] links (or [[!include booze]] directives) point to the “liquor” page, instead.

Rules:

1. A real page always trumps a [[!redirects ...]] directive.
2. A page can have multiple [[!redirects ...]] directives.
3. When you change the name of a page, a [[!redirects Old Name]] directive is added to the page, so that existing Wiki-links will continue to function. (Of course, you can remove it, if you wish.)
4. Instiki automatically does HTTP 301 Redirects for redirected pages, so that (for instance) external links won’t break when you rename a page.

## XHTML

If, for whatever reason, the extended Markdown syntax, and Wiki syntax, are not rich enough to express what you want, you can always include XHTML in your page. Note that Markdown processing is disabled inside XHTML. Thus

<div>This is **very** bad.</div>

is rendered as

If you want to mix XHTML and Markdown syntax, include the markdown="1" attribute.
<div markdown="1">This is **very** good.</div>