Djot markup language parser implemented in Go language
You can install godjot as a standalone binary:
$> go install github.com/sivukhin/godjot@latest
$> echo '*Hello*, _world_' | godjot
<p><strong>Hello</strong>, <em>world</em></p>
godjot provides API to parse AST from djot string
var djot []byte
ast := djot_parser.BuildDjotAst(djot)
AST is loosely typed and described with following simple struct:
type TreeNode[T ~int] struct {
Type T // one of DjotNode options
Attributes tokenizer.Attributes // string attributes of node
Children []TreeNode[T] // list of child
Text []byte // not nil only for TextNode
}
You can transform AST to HTML with predefined set of rules:
content := djot_parser.NewConversionContext(
"html",
djot_parser.DefaultConversionRegistry,
map[djot_parser.DjotNode]djot_parser.Conversion{
/*
You can overwrite default conversion rules with custom map
djot_parser.ImageNode: func(state djot_parser.ConversionState, next func(c djot_parser.Children)) {
state.Writer.
OpenTag("figure").
OpenTag("img", state.Node.Attributes.Entries()...).
OpenTag("figcaption").
WriteString(state.Node.Attributes.Get(djot_parser.ImgAltKey)).
CloseTag("figcaption").
CloseTag("figure")
}
*/
}
).ConvertDjotToHtml(&html_writer.HtmlWriter{}, ast...)
This implementation passes all examples provided in the spec but can diverge from original javascript implementation in some cases.