Skip to content

unimarkup/specification

Repository files navigation

Specification

This repository contains the specification for the Unimarkup markup language.

The goal of Unimarkup is to combine conventions of other well-known markup languages, and create a markup language that can easily scale from simple README files to scientific papers, and full program documentation.

The focus of Unimarkup is

  • Usability
  • Consistency
  • Internationalization

Since Unimarkup is a markup language, the content will mostly be converted to other formats like PDF or HTML as defined in the output-formats folder. Besides those more final formats, the i18n folder defines intermediate formats to help with content localization.

Unimarkup also integrates a more programming language like markup that is defined in the markup/logic folder. This makes the construction of more complex content easier, and improves content reusability.

Example

The following example uses some Unimarkup elements. Detailed description about those elements, and others may be found in the markup section.

# Heading
## Sub-Heading

Some pragraph inside the sub-heading section.
Common **inline** ||markup|| that *all*ows ***inner* word** and `nesting`. 

## Escaping, links, references and text-box

Escape any character using a single backslash.
Also inside `verbatim \` text`.

[links](uri) should look familiar if you know Markdown.

Reference [##unimarkup-elements], [^^notes], or [&&literature].

Use a [text-box]{ color : red } to apply additional styling.

# Blocks

|||
First column with a task list:

-[] Main task (still open)
  -[x] Completed sub-task
  -[ ] Remaining task

:::

Second column with a table:

===
| column 1 row 1 | column 2 row 1 |
| column 1 row 2 | column 2 row 2 |
===
|||

Credit

This language was inspired by many other markup and programming languages.

Other great markup languages (given in alphabetical order):

Structure

The following structure of the Unimarkup specification is given in alphabetical order.

  • addons ... contains language addons that are not part of the core specification
  • associated extensions ... defines file extensions that should be associated with Unimarkup content
  • configuration ... contains the configuration options for Unimarkup files that must be supported by Unimarkup implementations
  • glossary ... contains definitions for terms used in the Unimarkup specification
  • i18n ... contains internationalization aspects of the Unimarkup specification that must be supported by Unimarkup implementations
  • markup ... contains the core markup syntax for the Unimarkup language
  • output-formats ... contains the output formats that must be supported by Unimarkup implementations, and defines the conversion from Unimarkup markup to the output format

Specification notes

The specification is written mostly in Unimarkup. Due to the similarity to Markdown, it is not that obvious. Minor differences are nested verbatim blocks being inverted in Unimarkup.

Notable differences between Markdown and Unimarkup:

Stability

Most block, inline, and decorator elements are already quite stable. The HTML output is also stable for many elements, but some complex elements require more testing and feedback.

There are still many built-in field elements missing, but this requires external feedback. The logic section is also pretty rough, but most users won't use them excessively, but rather use predefined macros and memorables.

Placeholder text

Any verbatim text that is between <> is used as placeholder value that may be replaced by any other text. The <> graphemes are also part of the placeholder value.

If an element breaks this convention, it must be stated explicitly.

Notes

A note is used to highlight information concerning usage restrictions, to prevent wrong usage, or about the rendering behavior of an element.

Note: Notes are set by starting a new line with **Note:** followed by one space and surrounded by blank lines.

Indicating requirement levels

The keywords must, must not, should, should not, may and optional are used as described in rfc2119.

License

Creative Commons License
This work is licensed under a Creative Commons Attribution-NoDerivatives 4.0 International License.

Short explanation: The No Derivatives part should help to encourage people to get involved in improving the core specification, rather than spin-off their own variation.

About

Contains the specification of the Unimarkup language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published