Libasciidoc is an open source Go library to convert from Asciidoc to HTML. It is is available under the terms of the Apache License 2.0.
Although it does not support the full Asciidoc/Asciidoctor syntax, Libasciidoc already provides users with the following features:
-
Title and Sections level 1 to 6
-
Document authors and revision
-
Attribute declaration and substitution
-
Paragraphs and admonition paragraphs
-
Delimited Blocks (fenced blocks, listing blocks, example blocks, comment blocks, quoted blocks, sidebar blocks, verse blocks)
-
Literal blocks (paragraph starting with a space, with the
....
delimiter or with the[literal]
attribute) -
Quoted text (bold, italic, monospace, superscript and subscript) and substitution prevention using the backslash (
\
) character -
Passtrough (wrapping with a single plus or a triple plus, or using the
pass:[]
orpass:q[]
macros) -
External links in paragraphs (
https://
,http://
,ftp://
,irc://
,mailto:
) -
Inline images in paragraphs (
image:
) -
Image blocks (
image::
) -
Element attributes (
ID
,link
,title
,role
, etc.) -
Labeled, ordered and unordered lists (with nested lists and attributes on items)
-
Tables (basic support: header line and cells on multiple lines)
-
Table of contents
-
YAML front-matter
See also the known limitations page for differences between Asciidoc/Asciidoctor and Libasciidoc.
Further elements will be supported in the future. Feel free to open issues here to help prioritizing the upcoming work.
The libasciidoc library includes a minimalist command line interface to generate the HTML content from a given file:
$ libasciidoc -s content.adoc
use libasciidoc --help
to check all available options.
Libasciidoc provides 2 functions to convert an Asciidoc content into HTML:
-
Converting an
io.Reader
into an HTML document:ConvertToHTML(r io.Reader, output io.Writer, config configuration.Configuration) (types.Metadata, error)
-
Converting a file (given its name) into an HTML document:
ConvertFileToHTML(output io.Writer, config configuration.Configuration) (types.Metadata, error)
where the returned types.Metadata
object contains the document’s title which is not part of the generated HTML <body>
part, as well as the other attributes of the source document.
All options/settings are passed via the config
parameter.
The user can define a macro by calling renderer.WithMacroTemplate()
and passing return value to conversion functions.
renderer.WithMacroTemplate()
defines a macro by the given name and associates the given template. The template is an implementation of renderer.MacroTemplate
interface (ex. text.Template
)
Libasciidoc calls Execute()
method and passes types.UserMacro
object to template when rendering.
An example the following:
var tmplStr = `<span>Example: {{.Value}}{{.Attributes.GetAsString "suffix"}}</span>`
var t = template.New("example")
var tmpl = template.Must(t.Parse(tmplStr))
output := &strings.Builder{}
content := strings.NewReader(`example::hello world[suffix=!!!!!]`)
libasciidoc.ConvertToHTML(context.Background(), content, output, renderer.WithMacroTemplate(tmpl.Name(), tmpl))
Please refer to the Contribute page.