godjot

command module
v2.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2025 License: MIT Imports: 6 Imported by: 0

README

godjot

Go Report Card Build status

Djot markup language parser implemented in Go language

This is a fork

The original project is on github. I submit PRs upstream; you may want to check that project first. I use this library in a few different projects, and depend on some of the changes.

Installation

You can install godjot as a standalone binary:

$> go install git.sr.ht/~ser/godjot/v2@latest
$> echo '*Hello*, _world_' | godjot
<p><strong>Hello</strong>, <em>world</em></p>

Usage

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_html.New().ConvertDjot(&djot_html.HtmlWriter{}, ast...).String()

Or, you can override some default conversion rules:

content := djot_html.New(
    djot_html.DefaultConversionRegistry,
    map[djot_parser.DjotNode]djot_parser.Conversion[*djot_html.HtmlWriter]{
        djot_parser.ImageNode: func(state djot_parser.ConversionState[*djot_html.HtmlWriter], 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")
        },
    }
).ConvertDjot(&djot_html.HtmlWriter{}, ast...).String()

This implementation passes all examples provided in the spec but can diverge from original javascript implementation in some cases.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL