The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Swim::Design

This document describes the Swim markup format, its goals and its specific design decisions.

Swim Goals

  • Beautiful input syntax and beautiful output renderings

  • (re)Use the best existing markup syntaxes

  • Render to many formats

    • HTML

    • Plain text

    • Other common text markups (Markdown, Pod, etc)

  • Core info model supports most common, useful constructs

  • Support everything else via pluggable extension syntax

The Swim Informational Model

Swim defines an information model for text documents. The 2 main generic components are blocks and phrases. This pretty directly corresponds to the HTML concepts of divs and spans.

The model is roughly expressed by this grammar:

    # A document is a set of blocks
    document: block*
    # A block is /either/ a set of more blocks /or/ a set of phrases
    block: block* | phrase*
    # A phrase is moer or less a sentence fragement
    phrase: bold | italic | link | … | plain-text

Swim is literally defined by this grammar: