We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Atlas
- The subject of this entry is neither a fictional character named Atlas from Greek mythology nor a humanoid robot series called Atlas.
Atlas is a Markup language designed by PSTF.
Syntax Overview
Basic formatting
Bold
To make a bold text, you need to surround the text by two equal signs. For example,
Atlas is ==not== based on Markdown.
Displays as:
Atlas is not based on Markdown.
Slanted
You add two slashes to italicize the text. For example,
Recently, I read //Red Star over China//.
Displays as:
Recently, I read Red Star over China.
Underline
You add two underscores to underline the text. For example,
__This part of the text is important!!!__
Displays as:
This part of the text is important!!!
Deletion Line
You add two bars or two tildes to cross out a part of text. For example,
This language is used for --programming-- ~~speaking~~ formatting.
Displays as:
This language is used for programming speaking formatting.
Inline code
To make an inline code, you add two backticks. For example,
Numbers are arbitrary‑precision decimals (implemented via Python's ``Decimal``). They can be integers or floating‑point.
Displays as:
Numbers are arbitrary‑precision decimals (implemented via Python's Decimal). They can be integers or floating‑point.
Deformat
To make a piece of text raw text, you can put three dollar signs before and after the text. For example,
$$$Recently, I read //Red Star over China//.$$$
Displays as:
Recently, I read //Red Star over China//.
Superscript and Subscript
Superscript text is shown by putting two ^ before and after it, while subscript text is shown by putting two commas before and after it. For example,
E = mc^^2^^
Displays as:
E = mc2
Line break and Seperation line
A line break is achieved by two backslashes. For example,
First line \\ Second line
Displays as:
First line
Second line
And also there is a syntax for seperation line, which represents by 3 equal signs.
Deformat
To make an unformatted special symbol, you add a backslash before the symbol.
Built-in LaTeX
Anything surrounded by double hash marks will be recognized as LaTeX code and rendered in LaTeX format. For example,
## \phi = \frac{1 + \sqrt{5}}{2} ##
Displays as:
Block Syntax
No matter what kind of block it is, each block starts with an @ followed by the block format name and ends with two @s, except pre blocks.
Paragraph and Heading
Paragraph blocks are represented by p, and headings are represented by h plus the heading level (the lowest level heading is level 9).
To make it easier to directly embed main titles in an article, we added a level 0 heading (the highest-level heading). Its level is above level 1 headings, and it is centered by default.
@h0 Spring @p Looking forward, looking forward, the east wind has come, and the footsteps of spring are near. @@ @p Everything seems as if it has just woken up, joyfully opening its eyes. The mountains have become bright and clear, the water has risen, and the sun’s face has turned red. @@ @p Little grass secretly sprouts from the soil, tender and green. In the gardens and fields, look around, there are vast patches everywhere. Sitting, lying down, rolling around, kicking a few balls, racing a few laps, playing hide-and-seek a few times. The wind is gentle, and the grass is soft. @@ @p Peach trees, apricot trees, pear trees—all of them are blooming, competing with each other. Red like fire, pink like clouds, white like snow. The flowers carry a sweet scent; with eyes closed, the trees seem already full of peaches, apricots, and pears. Under the flowers, thousands of bees are buzzing, and butterflies of all sizes are fluttering about. Wildflowers are everywhere: various kinds, some named, some unnamed, scattered in the grass like eyes, like stars, twinkling. @@ @p “The breeze that brushes the face brings no chill,” indeed, it feels like a mother’s hand caressing you. The wind carries the smell of freshly turned soil, mixed with the scent of grass and various flowers, all brewing in the slightly damp air. Birds nest among the blooming buds and green leaves, happy, calling their friends to show off their clear voices, singing melodious songs in response to the gentle wind and flowing water. The shepherd boy’s flute on the cow’s back also rings out loudly at this time. @@ @p Rain is most common, lasting two or three days at a time. But don’t get annoyed. Look, falling like cow’s hair, flower needles, or fine threads, weaving a dense slanting pattern, covering the rooftops with a thin smoke-like layer. But the leaves are vivid green, and the grass is eye-poppingly bright. In the evening, when lamps are lit, the faint yellow glow sets a peaceful and calm night. In the countryside, on the small paths or by stone bridges, there are people walking slowly under umbrellas; in the fields, farmers are still working, wearing raincoats and bamboo hats. Their scattered houses stand quietly in the rain. @@ @p Kites gradually increase in the sky, and children on the ground also grow in number. In both cities and villages, every family, young and old, seem to come out as if keeping to a schedule. Stretching their muscles, shaking off fatigue, everyone gets to their own tasks. “The whole year’s plan depends on spring,” it has just begun, there is plenty of work and hope ahead. @@ @p Spring is like a newborn baby, fresh from head to toe, growing. @@ @p Spring is like a young girl, dressed with blossoming branches, smiling and walking. @@ @p Spring is like a strong young man, with arms and legs like iron, leading us forward. @@
Renders as:
Looking forward, looking forward, the east wind has come, and the footsteps of spring are near.
Everything seems as if it has just woken up, joyfully opening its eyes. The mountains have become bright and clear, the water has risen, and the sun’s face has turned red.
Little grass secretly sprouts from the soil, tender and green. In the gardens and fields, look around, there are vast patches everywhere. Sitting, lying down, rolling around, kicking a few balls, racing a few laps, playing hide-and-seek a few times. The wind is gentle, and the grass is soft.
Peach trees, apricot trees, pear trees—all of them are blooming, competing with each other. Red like fire, pink like clouds, white like snow. The flowers carry a sweet scent; with eyes closed, the trees seem already full of peaches, apricots, and pears. Under the flowers, thousands of bees are buzzing, and butterflies of all sizes are fluttering about. Wildflowers are everywhere: various kinds, some named, some unnamed, scattered in the grass like eyes, like stars, twinkling.
“The breeze that brushes the face brings no chill,” indeed, it feels like a mother’s hand caressing you. The wind carries the smell of freshly turned soil, mixed with the scent of grass and various flowers, all brewing in the slightly damp air. Birds nest among the blooming buds and green leaves, happy, calling their friends to show off their clear voices, singing melodious songs in response to the gentle wind and flowing water. The shepherd boy’s flute on the cow’s back also rings out loudly at this time.
Rain is most common, lasting two or three days at a time. But don’t get annoyed. Look, falling like cow’s hair, flower needles, or fine threads, weaving a dense slanting pattern, covering the rooftops with a thin smoke-like layer. But the leaves are vivid green, and the grass is eye-poppingly bright. In the evening, when lamps are lit, the faint yellow glow sets a peaceful and calm night. In the countryside, on the small paths or by stone bridges, there are people walking slowly under umbrellas; in the fields, farmers are still working, wearing raincoats and bamboo hats. Their scattered houses stand quietly in the rain.
Kites gradually increase in the sky, and children on the ground also grow in number. In both cities and villages, every family, young and old, seem to come out as if keeping to a schedule. Stretching their muscles, shaking off fatigue, everyone gets to their own tasks. “The whole year’s plan depends on spring,” it has just begun, there is plenty of work and hope ahead.
Spring is like a newborn baby, fresh from head to toe, growing.
Spring is like a young girl, dressed with blossoming branches, smiling and walking.
Spring is like a strong young man, with arms and legs like iron, leading us forward.
List
The format name for a list block is 'list'. A list block has a property called 'ordered'. If it's set to false, the index in front of each list item will be the same (usually shown as a bullet). If it's set to digit, the index will be numbers (if there's a 'brak' after 'digit', it means using 1), 2) instead of 1., 2.). If it's set to alpha, the index will be letters (same deal if there's a 'brak' after 'alpha'). For example,
@list[ordered=false] @item ==Assignment==: ``x <- 10`` — binds a value to a name in the current scope. @item ==Equality test==: ``x = 10`` — returns a Boolean; not an assignment. @item ==Scopes==: Functions create new lexical scopes that capture their enclosing environment (closures). Blocks (``if``, ``while``, ``do``) do not create new scopes – they share the surrounding scope. @item ==Variable lookup== searches the current scope, then outer scopes recursively. @@
Renders as:
- Assignment:
x <- 10— binds a value to a name in the current scope. - Equality test:
x = 10— returns a Boolean; not an assignment. - Scopes: Functions create new lexical scopes that capture their enclosing environment (closures). Blocks (
if,while,do) do not create new scopes – they share the surrounding scope. - Variable lookup searches the current scope, then outer scopes recursively.
Code Block
The format name for a code block is 'code'. You can also highlight it by the syntax determined by "lang". For example,
@code[lang=python]
import math
def fib_closed_form(n: int) -> int:
sqrt5 = math.sqrt(5)
phi = (1 + sqrt5) / 2
psi = (1 - sqrt5) / 2
# Use round() to correct tiny floating-point errors
return round((phi**n - psi**n) / sqrt5)
LIMIT = 4_000_000
total = 0
n = 3 # first even Fibonacci number: F(3) = 2
while True:
f = fib_closed_form(n)
if f >= LIMIT:
break
total += f
n += 3 # every third term is even
print(total) # If it's not malfunctioning, it should output 4613732
Displays as (without syntaxhighlight):
import math
def fib_closed_form(n: int) -> int:
sqrt5 = math.sqrt(5)
phi = (1 + sqrt5) / 2
psi = (1 - sqrt5) / 2
# Use round() to correct tiny floating-point errors
return round((phi**n - psi**n) / sqrt5)
LIMIT = 4_000_000
total = 0
n = 3 # first even Fibonacci number: F(3) = 2
while True:
f = fib_closed_form(n)
if f >= LIMIT:
break
total += f
n += 3 # every third term is even
print(total) # If it's not malfunctioning, it should output 4613732
@@
Meta Block
The format name for a meta block is 'meta'. For example,
@meta title: "Brief introduction to Λ-calculus" author: "Stephen Abel" date: 20345 @@
When you try to output the information from this document, it will show the following:
title: "Brief introduction to Λ-calculus" author: "Stephen Abel" date: 20345
The date here is counted as the number of days since January 1, 1970, so 20345 corresponds to September 14, 2025.
Table
The format name for a table block is 'table,' and its attributes include 'subtitle,' 'direction,' 'caption,' and 'columns.' It has a sub-block called 'row,' which represents a row in the table. If the table contains a subtitle, the first 'row' should be changed to 'titlerow.' After that, every item in the table must be enclosed in triple square brackets.
For example,
@table[col=3, subtitle=true, caption="Type Table"]
@titlerow [[[Type name]]] [[[Description]]] [[[Data Range]]]
@row [[[IntX]]] [[[Limited integer type. X can only be 16, 32, 64 or 128, or be omitted.]]] [[[[-2<sup>x-1</sup>, 2<sup>x-1</sup>) if x exists otherwise ℤ]]]
@row [[[UIntX]]] [[[Limited integer type. X can only be 16, 32, 64 or 128, or be omitted.]]] [[[[0, 2<sup>x</sup>) if x exists otherwise ℕ]]]
@row [[[FloatX]]] [[[Limited float type. X can only be 16, 32, 64 or 128, or be omitted.]]] [[[Similar to C++, but if x is omitted then the range is ℝ]]]
@row [[[Doc]]] [[[A string enclosed by double or single quotes, supporting escape sequences (except for multi-line documents, which are enclosed by triple or sextuple quotes)]]] [[[No range]]]
@row [[[Rune]]] [[[A string with length of 1 and prefix of r]]] [[[[0x0000, 0xD7FF] ∪ [0xE000, 0x10FFFF]]]]
@row [[[Bool]]] [[[A logical value]]] [[[true or false]]]
@row [[[List]]] [[[A list of elements in any type enclosed in brackets]]] [[[No range]]]
@row [[[Func]]] [[[A function reference]]] [[[No range]]]
@row [[[Pointer]]] [[[An address reference]]] [[[Depends with your memory]]]
@row [[[Pair]]] [[[A pair of value]]] [[[No range]]]
@row [[[Key-value bind]]] [[[Format: <code>"key": value</code>]]] [[[No range]]]
@row [[[Unit]]] [[[Just simply a placeholder that indicates the expression is in fact a "code block"]]] [[[Range not available]]]
@row [[[Nothing]]] [[[Just nothing]]] [[[Range not available]]]
@row [[[Everything]]] [[[Just everything]]] [[[Range not available]]]
@row [[[Set<T>]]] [[[Like what in SLetScript but one type(Format: {$x1, x2, x3, x4})]]] [[[Range not available]]]
@row [[[Array<T>]]] [[[Like Set<T> but unsorted(Format: {x1, x2, x3, x4})]]] [[[Range not available]]]
@@
Displays as:
| Type name | Description | Data Range |
|---|---|---|
| IntX | Limited integer type. X can only be 16, 32, 64 or 128, or be omitted. | [-2x-1, 2x-1) if x exists otherwise ℤ |
| UIntX | Limited integer type. X can only be 16, 32, 64 or 128, or be omitted. | [0, 2x) if x exists otherwise ℕ |
| FloatX | Limited float type. X can only be 16, 32, 64 or 128, or be omitted. | Similar to C++, but if x is omitted then the range is ℝ |
| Doc | A string enclosed by double or single quotes, supporting escape sequences (except for multi-line documents, which are enclosed by triple or sextuple quotes) | No range |
| Rune | A string with length of 1 and prefix of r | [0x0000, 0xD7FF] ∪ [0xE000, 0x10FFFF] |
| Bool | A logical value | true or false |
| List | A list of elements in any type enclosed in brackets | No range |
| Func | A function reference | No range |
| Pointer | An address reference | Depends with your memory |
| Pair | A pair of value | No range |
| Key-value bind | Format: "key": value |
No range |
| Unit | Just simply a placeholder that indicates the expression is in fact a "code block" | Range not available |
| Nothing | Just nothing | Range not available |
| Everything | Just everything | Range not available |
| Set<T> | Like what in SLetScript but one type(Format: {$x1, x2, x3, x4}) | Range not available |
| Array<T> | Like Set<T> but unsorted(Format: {x1, x2, x3, x4}) | Range not available |
Quoting
The format name for a blockquote is 'quote'. It has a property called 'source,' which indicates where the cited content comes from. For example,
@quote[source="Marcus Aurelius"] The happiness of your life depends upon the quality of your thoughts. @@
Displays as:
The happiness of your life depends upon the quality of your thoughts.
——Marcus Aurelius
Preformatted Paragraphs
The format name for a preformatted paragraph is 'pre'.
- It starts with
@pre{{and ends with}}@@, without white characters in it. - Preserves all whitespace (including trailing spaces, if any—though we recommend avoiding them for clarity).
- Does not parse any inline formatting inside it (no bold, no italic, and no other things). Everything is literal.
- Tabs are allowed inside the @pre content (despite the global "no tabs" rule for the rest of Parchment), because preformatted text often relies on them.
For example,
@pre{{
┌─────────────┐ ┌─────────────┐
│ Client │────▶│ Load │
│ (Browser) │ │ Balancer │
└─────────────┘ └──────┬──────┘
│
▼
┌─────────────┐
│ App Server │
└─────────────┘
}}@@
Renders as:
┌─────────────┐ ┌─────────────┐
│ Client │────▶│ Load │
│ (Browser) │ │ Balancer │
└─────────────┘ └──────┬──────┘
│
▼
┌─────────────┐
│ App Server │
└─────────────┘
Mathematics
For large, standalone mathematical expressions that need to be centered on their own line, there are two blocks called equation and align. For example,
@equation[tag=E=mc^2] E = mc^2 @@
Renders as placed in middle with a tag flushed to right.
Important rule: The LaTeX content is read verbatim from the line immediately following the sigil, until the block meets @@. Indentation inside the math block is ignored for rendering purposes (since LaTeX ignores leading whitespace anyway), but you may indent the lines for visual clarity in your source file.
Links, Images, and Footnotes
- Link:
{Display Text | url}- Example:
{Shidinn Transcriber | https://哼.site/xdi8-transcriber/} - Effect: Shidinn Transcriber
- Example:
- Image:
{!Alt description | image-url | width=x}- Example:
{!The mascot I designed for one of my conlangs which is called "Vespanican"| https://tikolu.net/i/rrblb | width=256} - Effect: Not shown here.
- Example:
- Footnote Reference: {fn:1} (renders as superscript link).
- The definition is a top-level block:
@fn[1] This is the footnote content.
- The definition is a top-level block:
Examples
Because this is a markup language rather than a programming language, there are no sample programs here, but if you want, I welcome all users (including myself) to contribute to the example documentation.