I'm a parser and object model for Microdown originally implemented by S. Ducasse, L. Dargaud and G. Polito. The implementation is based on the work on markdown of K. Osterbye. Further developments by S. Ducasse and K. Osterbye.
Microdown is a smaller markdown but it is more extensible. It contains a nice builder and some visitors. Microdown is now the default markup for the Pillar document compilation chain.
Microdown is a smaller markdown but it is more extensible. It is used to produce books, slides, websites, doc. It can be read on GitHub but also on Pharo itself using the DocumentationBrowser
It supports
But also
# Header
@anchor
% This is a line comment
```language=Pharo&caption=Beautiful&label=Fig1
code
![Pharo is cool .%anchor=fig:pharo&width=80](http://pharo.org)
- list
1. ordered list
`in text` and for Pharo hyperlinks to class, method and package:
`Point`, `Point class`, `Point>>#setX:setY:`, `#’Microdown-Tests’ (for packages)
References: *@ref@*
## Full Syntax
### Headers
Similar to markdown headers are composed of `#` space text on one line.
The headers can be from 1 to 6.
There is no support for other forms of declaration.
### Anchors
In Microdown we can define anchors and reference to them (see References).
There are three ways to create anchors:
- `@anchorlabel` will create an anchor to the preceding element.
- Figures, mathematical environments, and environment can specify labels as arguments (`anchor`)
- Code block can specify label as argument (argument named `anchor`)
### Various
- % comments
- *** horizontal line
- File metadata is plain JSON
{ "date" : "12 december 2025" }
- Raw text
{{ raw text }}
### Math support
- `$$` mathematical environment with a label for easy referencing.
$$ %label=refToTheGreatEquation V_i = C_0 - C_3 $$
- Math in text
'abc$ V_i = C_0 - C_3 $def'.
will generate a LaTeX equivalent and can be referenced using `*@refToTheGreatEquation@`*
### Codeblock
Microdown offers the same code block that markdown but arguments can be specified and the annotation should be named. The first line after the \`\`\` can be `language=pharo&label=code1&caption=this is my great piece of code`
The following code is not able to display it because markdown quote blocks are strange and interpret nested blocks. So we cannot use quoteblock for quoting!
codeBlockMarkupString
^ '```'
codeBlockMarkupString
^ '\`\`\`'
### Extensions
- `{! aTag | parameters!}` is the way to use an extension with parameters
- Environments are defined using `<!tag | parameters !>`
<!agenda|title=International Workshop on Smalltalk Technologies
<!day|start=2023 August 29th&title=Monday
<!segment|start=10:30
<!talk|subject=Pharo DataFrame: Past, Present, and Future&length=30&author=Safina, Zaitsev, Ferlicot-Delbecque and Sow&room=Room B!> <!talk|subject=Improving Performance Through Object Lifetime Profiling: the DataFrame Case&length=30&author=Jordan-Montaño, Palumbo, Polito, Ducasse and Tesone&room=Room B!> <!talk|subject=Garbage Collector Tuning in Pathological Allocation Pattern Applications&length=30&author=Palumbo, Jordan-Montaño, Polito, Tesone and Ducasse&room=Room B!> !> !> !>
- Citations `{!citation|ref=Blac09a!}` -- note that the bib file should be defined in the pillar.conf file
## Known limits
#### Math should be tested
#### Quote block
When a line starts with '> ' it delimits a quoteblock.
The markup is not interpreted.
#### Codeblock
Codeblock does not support more than four backticks.
## Development in Pharo 12!
### Loading specific version
To load the latest stable version load the master. If you have trouble loading in the latest Pharo just execute the preloading.st script in the .github folder.
This script will remove the existing Microdown package and clear the system.
```Smalltalk
Metacello new
baseline: 'Microdown';
repository: 'github://pillar-markup/Microdown:master/src';
load.
The process is the following:
The following script loads all groups in the Baseline:
#( 'Microdown' 'BeautifulComments' 'DocumentBrowser' ) do: [ :name |
(IceRepository repositoryNamed: name)
ifNil: [ self inform: 'Project not found: ' , name ]
ifNotNil: [ :found |
found
unload;
forget ] ].
Metacello new
baseline: 'Microdown';
repository: 'github://pillar-markup/Microdown:dev/src';
onConflict: [ :ex | ex useIncoming ];
onUpgrade: [ :ex | ex useIncoming ];
load: #('All').
We have two sources: Pharo in one hand and Pillar and both are not totally synchronized.
Using Pharo 12: v2.5.x
v2.5.5 - add support for top-level header as slide definition
v2.5.4 - add backward compatible anchor in caption + tonel V3 format
v2.5.1 - add LaTeX math with reference support for Pharo 12 and Pillar development up to v10.0.0
v2.4.2 for Pillar 9.0.1
Watch out v2.6.0 is older than v.2.5.4
For Pharo 12
For Pharo 11
For Pharo 10 -v8.3.2 fixed baseline and updated readme
The parser follows the design mentioned in https://github.github.com/gfm, in particular the parsing strategy in Appendix A.
In short, the strategy is that at any point in time, we might have several children of the root which are ""open"". The deepest in open in the tree is called ""current"". All the parents of the current are open.
When a new line is read we do the following:
The other packages in this repository are the extensions made to produce Pillar model. Such packages should be moved in the future to other locations (probably pillar itself).