Convert HTML into Markdown with Go.
go get github.com/JohannesKaufmann/html-to-markdown
import "github.com/JohannesKaufmann/html-to-markdown"
converter := md.NewConverter("", true, nil)
html = `<strong>Important</strong>`
markdown, err := converter.ConvertString(html)
if err != nil {
log.Fatal(err)
}
fmt.Println("md ->", markdown)
If you are already using goquery you can pass a selection to Convert
.
markdown, err := converter.Convert(selec)
The third parameter to md.NewConverter
is *md.Options
.
For example you can change the character that is around a bold text ("**
") to a different one (for example "__
") by changing the value of StrongDelimiter
.
opt := &md.Options{
StrongDelimiter: "__", // default: **
// ...
}
converter := md.NewConverter("", true, opt)
For all the possible options look at godocs and for a example look at the example.
converter.AddRules(
md.Rule{
Filter: []string{"del", "s", "strike"},
Replacement: func(content string, selec *goquery.Selection, opt *md.Options) *string {
// You need to return a pointer to a string (md.String is just a helper function).
// If you return nil the next function for that html element
// will be picked. For example you could only convert an element
// if it has a certain class name and fallback if not.
content = strings.TrimSpace(content)
return md.String("~" + content + "~")
},
},
// more rules
)
For more information have a look at the example add_rules.
If you want plugins (github flavored markdown like striketrough, tables, ...) you can pass it to Use
.
import "github.com/JohannesKaufmann/html-to-markdown/plugin"
// Use the `GitHubFlavored` plugin from the `plugin` package.
converter.Use(plugin.GitHubFlavored())
Or if you only want to use the Strikethrough
plugin. You can change the character that distinguishes
the text that is crossed out by setting the first argument to a different value (for example "~~" instead of "~").
converter.Use(plugin.Strikethrough(""))
For more information have a look at the example github_flavored.
Have a look at the plugin folder for a reference implementation. The most basic one is Strikethrough.
Determines which elements are to be kept and rendered as HTML.
Determines which elements are to be removed altogether i.e. converted to an empty string.
- turndown (js), a very good library written in javascript.
- lunny/html2md, which is using regex instead of goquery. I came around a few edge case when using it (leaving some html comments, ...) so I wrote my own.