Djot

From Wikipedia, the free encyclopedia
Djot
Filename extension
.dj[1]
Internet media typeunknown value
Developed byJohn MacFarlane
Latest release
0.2.0[2] Edit this on Wikidata
3 January 2023; 15 months ago (3 January 2023)
Type of formatLightweight markup language
Extended fromCommonMark
Open format?Yes
Free format?Yes
Websitedjot.net Edit this at Wikidata

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.[3] It was created in 2022 by John MacFarlane, the author of Pandoc and a member of the CommonMark standardization group.[4][5]

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.[3]

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

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

Difference from CommonMark[edit]

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

Blank lines[edit]

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[edit]

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[edit]

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[edit]

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[edit]

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[edit]

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.
Jotdown MIT License Rust https://github.com/hellux/jotdown Pull parser implemented as a Rust library
Djota BSD 3-clause license Prolog https://github.com/aarroyoc/djota Implementation in Prolog
djoths MIT License Haskell https://github.com/jgm/djoths Haskell library and command-line tool
godjot MIT License Go https://github.com/sivukhin/godjot Implementation in Go

Uses[edit]

  • Starting from version 3.1.12, Pandoc supports Djot as an input format and an output format.[9]

References[edit]

  1. ^ "File extension". github.com. Retrieved 2023-01-24.
  2. ^ "Release 0.2.0". 3 January 2023. Retrieved 8 January 2023.
  3. ^ a b "Djot (/dʒɑt/)". djot.net. Retrieved 2022-08-13.
  4. ^ MacFarlane, John (2022-07-11). "Initial commit". github.com. Retrieved 2022-08-13.
  5. ^ MacFarlane, John. "Tools". johnmacfarlane.net. Retrieved 2022-08-13.
  6. ^ "README.md". github.com. Retrieved 2023-01-24.
  7. ^ "License". github.com. Retrieved 2022-08-13.
  8. ^ "Quick Start for Markdown users". github.com. Retrieved 2022-08-14.
  9. ^ "pandoc 3.1.12 (2024-02-14)". pandoc.org. Retrieved 2024-03-05.

External links[edit]