Djot

From HandWiki
Short description: Lightweight markup language
Djot
Filename extension.dj[1]
Developed byJohn MacFarlane
Type of formatLightweight markup language
Extended fromCommonMark
Open format?Yes
Website{{{1}}}

Djot (/dʒɑt/) is a lightweight markup language that aims to improve on CommonMark's syntax where it is complex and difficult to parse efficiently.[2] It was created in 2022 by John MacFarlane, the author of Pandoc and a member of the CommonMark standardization group.[3][4]

It derives most of its features from CommonMark, but includes a wider set of features, including description lists, footnotes, tables, several new kinds of inline formatting, math and smart punctuation.[2]

The original reference implementation is written in a scripting language (Lua), but the language is designed to parse efficiently, so it is very fast.[5]

The code and documentation are released under the MIT License.[6]

Difference from CommonMark

Djot's syntax is similar to CommonMark's, but there are some differences.[7]

Blank lines

CommonMark does not need blank lines around block-level elements, but Djot does.

Example:

Input Corresponding HTML produced by a CommonMark processor Corresponding HTML produced by a Djot processor
# Heading
Paragraphs.
<h1>Heading</h1>

<p>Paragraphs.</p>
<h1>Heading Paragraphs.</h1>
# Heading

Paragraphs.
<h1>Heading</h1>

<p>Paragraphs.</p>
<h1>Heading</h1>

<p>Paragraphs.</p>
Input Corresponding HTML produced by a CommonMark processor Corresponding HTML produced by a Djot processor
* fruits
  * apple
  * banana
<ul>
  <li>fruits
    <ul>
      <li>apple</li>
      <li>banana</li>
    </ul>
  </li>
</ul>
<ul>
  <li>fruits
  * apple
  * banana
  </li>
</ul>
* fruits

  * apple
  * banana
<ul>
  <li><p>fruits</p>
    <ul>
      <li>apple</li>
      <li>banana</li>
    </ul>
  </li>
</ul>
<ul>
  <li>fruits
    <ul>
      <li>apple</li>
      <li>banana</li>
    </ul>
  </li>
</ul>

Headings

Djot has no setext (= or -) headings, only ATX (#) headings.

Example:

Text using CommonMark syntax Text using Djot syntax Corresponding HTML produced
Heading
=======

Sub-heading
-----------
# Heading

## Sub-heading
<h1>Heading</h1>

<h2>Sub-heading</h2>

Emphasis

CommonMark uses single * or _ for emphasis, and double * or _ for strong emphasis. Djot uses single _ for emphasis, and single * for strong emphasis.

Example:

Text using CommonMark syntax Text using Djot syntax Corresponding HTML produced
Text attributes _italic_, **bold**.
Text attributes _italic_, *bold*.
<p>Text attributes <em>italic</em>, <strong>bold</strong>.</p>

Links

Unlike CommonMark, Djot has no special syntax for adding a title to a link. A title can be added by using the general attribute syntax instead.

Example:

Text using CommonMark syntax Text using Djot syntax Corresponding HTML produced
A [link](http://example.com "title").
A [link](http://example.com){title="title"}.
<p>A <a href="http://example.com" title="title">link</a>.</p>


Examples

Text using Djot syntax Corresponding HTML produced by a Djot processor Text viewed in a browser
# Heading

## Sub-heading

Paragraphs are separated
by a blank line.

The backslash at the end of a line\
produces a line break.
<h1>Heading</h1>

<h2>Sub-heading</h2>

<p>Paragraphs are separated
by a blank line.</p>

<p>The backslash at the end of a line<br>
produces a line break.</p>
Heading
Sub-heading

Paragraphs are separated by a blank line.

The backslash at the end of a line
produces a line break.

Text attributes _italic_, *bold*, `monospace`.

Horizontal rule:

* * *
<p>Text attributes <em>italic</em>, <strong>bold</strong>, <code>monospace</code>.</p>

<p>Horizontal rule:</p>

<hr>
Text attributes italic, bold, monospace.

Horizontal rule:


Bullet lists nested within a numbered list:

  1. fruits

     * apple
     * banana

  2. vegetables

     - carrot
     - broccoli
<p>Bullet lists nested within a numbered list:</p>

<ol>
  <li>fruits
    <ul>
      <li>apple</li>
      <li>banana</li>
    </ul>
  </li>
  <li>vegetables
    <ul>
      <li>carrot</li>
      <li>broccoli</li>
    </ul>
  </li>
</ol>
Bullet lists nested within a numbered list:
  1. fruits
    • apple
    • banana
  2. vegetables
    • carrot
    • broccoli
A [link](http://example.com).

![Image](Icon-pictures.png){title="icon"}

> Djot uses email-style
characters for blockquoting.
>
> Multiple paragraphs need to be prepended individually.

Raw content such as inline `<abbr title="Hypertext Markup Language">HTML</abbr>`{=html} tags must be explicitly marked.
<p>A <a href="http://example.com">link</a>.</p>

<p><img alt="Image" title="icon" src="Icon-pictures.png"></p>

<blockquote>
<p>Djot uses email-style characters for blockquoting.</p>
<p>Multiple paragraphs need to be prepended individually.</p>
</blockquote>

<p>Raw content such as inline <abbr title="Hypertext Markup Language">HTML</abbr> tags must be explicitly marked.</p>
A link.

Image

Djot uses email-style characters for blockquoting.

Multiple paragraphs need to be prepended individually.

Raw content such as inline HTML tags must be explicitly marked.

Implementations

Implementations of Djot
Name License Language Repository Description
djot.js MIT License TypeScript https://github.com/jgm/djot.js This is a TypeScript rewrite of the original reference implementation.
djot.lua MIT License Lua https://github.com/jgm/djot.lua The original reference implementation.

References

External links