markdown [![GoDoc](http://godoc.org/gitlab.com/golang-commonmark/markdown?status.svg)](http://godoc.org/gitlab.com/golang-commonmark/markdown) [![License](https://img.shields.io/badge/licence-BSD--2--Clause-blue.svg)](https://opensource.org/licenses/BSD-2-Clause) [![Pipeline status](https://gitlab.com/golang-commonmark/markdown/badges/master/pipeline.svg)](https://gitlab.com/golang-commonmark/markdown/commits/master) [![Coverage report](https://gitlab.com/golang-commonmark/markdown/badges/master/coverage.svg)](https://gitlab.com/golang-commonmark/markdown/commits/master)
========

Package golang-commonmark/markdown provides a CommonMark-compliant markdown parser and renderer, written in Go.

## Installation

    go get -u gitlab.com/golang-commonmark/markdown

You can also go get [mdtool](https://gitlab.com/golang-commonmark/mdtool), an example command-line tool:

    go get -u gitlab.com/golang-commonmark/mdtool

## Standards support

Currently supported CommonMark spec: [v0.28](http://spec.commonmark.org/0.28/).

## Extensions

Besides the features required by CommonMark, golang-commonmark/markdown supports:

  * Tables (GFM)
  * Strikethrough (GFM)
  * Autoconverting plain-text URLs to links
  * Typographic replacements (smart quotes and other)

## Usage

``` go
md := markdown.New(markdown.XHTMLOutput(true))
fmt.Println(md.RenderToString([]byte("Header\n===\nText")))
```

Check out [the source of mdtool](https://gitlab.com/golang-commonmark/mdtool/blob/master/main.go) for a more complete example.

The following options are currently supported:

  Name            |  Type     |                        Description                          | Default
  --------------- | --------- | ----------------------------------------------------------- | ---------
  HTML            | bool      | whether to enable raw HTML                                  | false
  Tables          | bool      | whether to enable GFM tables                                | true
  Linkify         | bool      | whether to autoconvert plain-text URLs to links             | true
  Typographer     | bool      | whether to enable typographic replacements                  | true
  Quotes          | string / []string | double + single quote replacement pairs for the typographer | “”‘’
  MaxNesting      | int       | maximum nesting level                                       | 20
  LangPrefix      | string    | CSS language prefix for fenced blocks                       | language-
  Breaks          | bool      | whether to convert newlines inside paragraphs into `<br>`   | false
  XHTMLOutput     | bool      | whether to output XHTML instead of HTML                     | false

## Benchmarks

Rendering spec/spec-0.28.txt on a Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz

    BenchmarkRenderSpecNoHTML         100    10254720 ns/op    2998037 B/op    18225 allocs/op
    BenchmarkRenderSpec               100    10180241 ns/op    2997307 B/op    18214 allocs/op
    BenchmarkRenderSpecBlackFriday    200     7241749 ns/op    2834340 B/op    17101 allocs/op
    BenchmarkRenderSpecBlackFriday2   200     7448256 ns/op    2991202 B/op    16705 allocs/op

## See also

https://github.com/jgm/CommonMark — the reference CommonMark implementations in C and JavaScript,
  also contains the latest spec and an online demo.

http://talk.commonmark.org — the CommonMark forum, a good place to join together the efforts of the developers.