export all names from Renderer struct

This enables new back-ends that are not part of the package
Basically a big search-and-replace for this commit
This commit is contained in:
Russ Ross 2011-05-30 21:44:52 -06:00
parent 679e1686db
commit 9d23b68fa5
6 changed files with 218 additions and 218 deletions

View File

@ -52,8 +52,8 @@ All features of upskirt are supported, including:
errors that were present in the C code).
* Good performance. I have not done rigorous benchmarking, but
informal testing suggests it is around 8x slower than upskirt.
This is still an ugly, direct translation from the C code, so
informal testing suggests it is around 3.5x slower than upskirt.
This is an ugly, direct translation from the C code, so
the difference is unlikely to be related to differences in
coding style. There is a lot of bounds checking that is
duplicated (by user code for the application and again by code

View File

@ -26,7 +26,7 @@ func parseBlock(out *bytes.Buffer, rndr *render, data []byte) {
data = data[blockPrefixHeader(out, rndr, data):]
continue
}
if data[0] == '<' && rndr.mk.blockhtml != nil {
if data[0] == '<' && rndr.mk.BlockHtml != nil {
if i := blockHtml(out, rndr, data, true); i > 0 {
data = data[i:]
continue
@ -36,9 +36,9 @@ func parseBlock(out *bytes.Buffer, rndr *render, data []byte) {
data = data[i:]
continue
}
if isHrule(data) {
if rndr.mk.hrule != nil {
rndr.mk.hrule(out, rndr.mk.opaque)
if isHRule(data) {
if rndr.mk.HRule != nil {
rndr.mk.HRule(out, rndr.mk.Opaque)
}
var i int
for i = 0; i < len(data) && data[i] != '\n'; i++ {
@ -118,8 +118,8 @@ func blockPrefixHeader(out *bytes.Buffer, rndr *render, data []byte) int {
if end > i {
work := bytes.NewBuffer(nil)
parseInline(work, rndr, data[i:end])
if rndr.mk.header != nil {
rndr.mk.header(out, work.Bytes(), level, rndr.mk.opaque)
if rndr.mk.Header != nil {
rndr.mk.Header(out, work.Bytes(), level, rndr.mk.Opaque)
}
}
return skip
@ -186,8 +186,8 @@ func blockHtml(out *bytes.Buffer, rndr *render, data []byte, do_render bool) int
if j > 0 {
size := i + j
if do_render && rndr.mk.blockhtml != nil {
rndr.mk.blockhtml(out, data[:size], rndr.mk.opaque)
if do_render && rndr.mk.BlockHtml != nil {
rndr.mk.BlockHtml(out, data[:size], rndr.mk.Opaque)
}
return size
}
@ -205,8 +205,8 @@ func blockHtml(out *bytes.Buffer, rndr *render, data []byte, do_render bool) int
j = isEmpty(data[i:])
if j > 0 {
size := i + j
if do_render && rndr.mk.blockhtml != nil {
rndr.mk.blockhtml(out, data[:size], rndr.mk.opaque)
if do_render && rndr.mk.BlockHtml != nil {
rndr.mk.BlockHtml(out, data[:size], rndr.mk.Opaque)
}
return size
}
@ -251,8 +251,8 @@ func blockHtml(out *bytes.Buffer, rndr *render, data []byte, do_render bool) int
}
// the end of the block has been found
if do_render && rndr.mk.blockhtml != nil {
rndr.mk.blockhtml(out, data[:i], rndr.mk.opaque)
if do_render && rndr.mk.BlockHtml != nil {
rndr.mk.BlockHtml(out, data[:i], rndr.mk.Opaque)
}
return i
@ -317,7 +317,7 @@ func isEmpty(data []byte) int {
return i + 1
}
func isHrule(data []byte) bool {
func isHRule(data []byte) bool {
// skip initial spaces
if len(data) < 3 {
return false
@ -478,13 +478,13 @@ func blockFencedCode(out *bytes.Buffer, rndr *render, data []byte) int {
work.WriteByte('\n')
}
if rndr.mk.blockcode != nil {
if rndr.mk.BlockCode != nil {
syntax := ""
if lang != nil {
syntax = *lang
}
rndr.mk.blockcode(out, work.Bytes(), syntax, rndr.mk.opaque)
rndr.mk.BlockCode(out, work.Bytes(), syntax, rndr.mk.Opaque)
}
return beg
@ -513,8 +513,8 @@ func blockTable(out *bytes.Buffer, rndr *render, data []byte) int {
i++
}
if rndr.mk.table != nil {
rndr.mk.table(out, header_work.Bytes(), body_work.Bytes(), col_data, rndr.mk.opaque)
if rndr.mk.Table != nil {
rndr.mk.Table(out, header_work.Bytes(), body_work.Bytes(), col_data, rndr.mk.Opaque)
}
}
@ -635,12 +635,12 @@ func blockTableRow(out *bytes.Buffer, rndr *render, data []byte, columns int, co
cell_work := bytes.NewBuffer(nil)
parseInline(cell_work, rndr, data[cell_start:cell_end+1])
if rndr.mk.tableCell != nil {
if rndr.mk.TableCell != nil {
cdata := 0
if col < len(col_data) {
cdata = col_data[col]
}
rndr.mk.tableCell(row_work, cell_work.Bytes(), cdata, rndr.mk.opaque)
rndr.mk.TableCell(row_work, cell_work.Bytes(), cdata, rndr.mk.Opaque)
}
i++
@ -648,17 +648,17 @@ func blockTableRow(out *bytes.Buffer, rndr *render, data []byte, columns int, co
for ; col < columns; col++ {
empty_cell := []byte{}
if rndr.mk.tableCell != nil {
if rndr.mk.TableCell != nil {
cdata := 0
if col < len(col_data) {
cdata = col_data[col]
}
rndr.mk.tableCell(row_work, empty_cell, cdata, rndr.mk.opaque)
rndr.mk.TableCell(row_work, empty_cell, cdata, rndr.mk.Opaque)
}
}
if rndr.mk.tableRow != nil {
rndr.mk.tableRow(out, row_work.Bytes(), rndr.mk.opaque)
if rndr.mk.TableRow != nil {
rndr.mk.TableRow(out, row_work.Bytes(), rndr.mk.Opaque)
}
}
@ -702,8 +702,8 @@ func blockQuote(out *bytes.Buffer, rndr *render, data []byte) int {
}
parseBlock(block, rndr, work.Bytes())
if rndr.mk.blockquote != nil {
rndr.mk.blockquote(out, block.Bytes(), rndr.mk.opaque)
if rndr.mk.BlockQuote != nil {
rndr.mk.BlockQuote(out, block.Bytes(), rndr.mk.Opaque)
}
return end
}
@ -759,8 +759,8 @@ func blockCode(out *bytes.Buffer, rndr *render, data []byte) int {
work.WriteByte('\n')
if rndr.mk.blockcode != nil {
rndr.mk.blockcode(out, work.Bytes(), "", rndr.mk.opaque)
if rndr.mk.BlockCode != nil {
rndr.mk.BlockCode(out, work.Bytes(), "", rndr.mk.Opaque)
}
return beg
@ -810,8 +810,8 @@ func blockList(out *bytes.Buffer, rndr *render, data []byte, flags int) int {
}
}
if rndr.mk.list != nil {
rndr.mk.list(out, work.Bytes(), flags, rndr.mk.opaque)
if rndr.mk.List != nil {
rndr.mk.List(out, work.Bytes(), flags, rndr.mk.Opaque)
}
return i
}
@ -883,7 +883,7 @@ func blockListItem(out *bytes.Buffer, rndr *render, data []byte, flags *int) int
// check for a new item
chunk := data[beg+i : end]
if (blockUliPrefix(chunk) > 0 && !isHrule(chunk)) || blockOliPrefix(chunk) > 0 {
if (blockUliPrefix(chunk) > 0 && !isHRule(chunk)) || blockOliPrefix(chunk) > 0 {
if in_empty {
has_inside_empty = true
}
@ -940,8 +940,8 @@ func blockListItem(out *bytes.Buffer, rndr *render, data []byte, flags *int) int
}
// render li itself
if rndr.mk.listitem != nil {
rndr.mk.listitem(out, inter.Bytes(), *flags, rndr.mk.opaque)
if rndr.mk.ListItem != nil {
rndr.mk.ListItem(out, inter.Bytes(), *flags, rndr.mk.Opaque)
}
return beg
@ -962,13 +962,13 @@ func blockParagraph(out *bytes.Buffer, rndr *render, data []byte) int {
}
if rndr.flags&EXTENSION_LAX_HTML_BLOCKS != 0 {
if data[i] == '<' && rndr.mk.blockhtml != nil && blockHtml(out, rndr, data[i:], false) > 0 {
if data[i] == '<' && rndr.mk.BlockHtml != nil && blockHtml(out, rndr, data[i:], false) > 0 {
end = i
break
}
}
if isPrefixHeader(rndr, data[i:]) || isHrule(data[i:]) {
if isPrefixHeader(rndr, data[i:]) || isHRule(data[i:]) {
end = i
break
}
@ -985,8 +985,8 @@ func blockParagraph(out *bytes.Buffer, rndr *render, data []byte) int {
if level == 0 {
tmp := bytes.NewBuffer(nil)
parseInline(tmp, rndr, work[:size])
if rndr.mk.paragraph != nil {
rndr.mk.paragraph(out, tmp.Bytes(), rndr.mk.opaque)
if rndr.mk.Paragraph != nil {
rndr.mk.Paragraph(out, tmp.Bytes(), rndr.mk.Opaque)
}
} else {
if size > 0 {
@ -1006,8 +1006,8 @@ func blockParagraph(out *bytes.Buffer, rndr *render, data []byte) int {
if size > 0 {
tmp := bytes.NewBuffer(nil)
parseInline(tmp, rndr, work[:size])
if rndr.mk.paragraph != nil {
rndr.mk.paragraph(out, tmp.Bytes(), rndr.mk.opaque)
if rndr.mk.Paragraph != nil {
rndr.mk.Paragraph(out, tmp.Bytes(), rndr.mk.Opaque)
}
work = work[beg:]
@ -1020,8 +1020,8 @@ func blockParagraph(out *bytes.Buffer, rndr *render, data []byte) int {
header_work := bytes.NewBuffer(nil)
parseInline(header_work, rndr, work[:size])
if rndr.mk.header != nil {
rndr.mk.header(out, header_work.Bytes(), level, rndr.mk.opaque)
if rndr.mk.Header != nil {
rndr.mk.Header(out, header_work.Bytes(), level, rndr.mk.Opaque)
}
}

138
html.go
View File

@ -36,87 +36,87 @@ const (
type htmlOptions struct {
flags int
close_tag string // how to end singleton tags: usually " />\n", possibly ">\n"
toc_data struct {
header_count int
current_level int
closeTag string // how to end singleton tags: usually " />\n", possibly ">\n"
tocData struct {
headerCount int
currentLevel int
}
smartypants *SmartypantsRenderer
}
var xhtml_close = " />\n"
var html_close = ">\n"
var xhtmlClose = " />\n"
var htmlClose = ">\n"
func HtmlRenderer(flags int) *Renderer {
// configure the rendering engine
r := new(Renderer)
if flags&HTML_GITHUB_BLOCKCODE == 0 {
r.blockcode = htmlBlockcode
r.BlockCode = htmlBlockCode
} else {
r.blockcode = htmlBlockcodeGithub
r.BlockCode = htmlBlockCodeGithub
}
r.blockquote = htmlBlockquote
r.BlockQuote = htmlBlockQuote
if flags&HTML_SKIP_HTML == 0 {
r.blockhtml = htmlRawBlock
r.BlockHtml = htmlRawBlock
}
r.header = htmlHeader
r.hrule = htmlHrule
r.list = htmlList
r.listitem = htmlListitem
r.paragraph = htmlParagraph
r.table = htmlTable
r.tableRow = htmlTableRow
r.tableCell = htmlTableCell
r.Header = htmlHeader
r.HRule = htmlHRule
r.List = htmlList
r.ListItem = htmlListItem
r.Paragraph = htmlParagraph
r.Table = htmlTable
r.TableRow = htmlTableRow
r.TableCell = htmlTableCell
r.autolink = htmlAutolink
r.codespan = htmlCodespan
r.doubleEmphasis = htmlDoubleEmphasis
r.emphasis = htmlEmphasis
r.AutoLink = htmlAutoLink
r.CodeSpan = htmlCodeSpan
r.DoubleEmphasis = htmlDoubleEmphasis
r.Emphasis = htmlEmphasis
if flags&HTML_SKIP_IMAGES == 0 {
r.image = htmlImage
r.Image = htmlImage
}
r.linebreak = htmlLinebreak
r.LineBreak = htmlLineBreak
if flags&HTML_SKIP_LINKS == 0 {
r.link = htmlLink
r.Link = htmlLink
}
r.rawHtmlTag = htmlRawTag
r.tripleEmphasis = htmlTripleEmphasis
r.strikethrough = htmlStrikethrough
r.RawHtmlTag = htmlRawTag
r.TripleEmphasis = htmlTripleEmphasis
r.StrikeThrough = htmlStrikeThrough
var cb *SmartypantsRenderer
if flags&HTML_USE_SMARTYPANTS == 0 {
r.normalText = htmlNormalText
r.NormalText = htmlNormalText
} else {
cb = Smartypants(flags)
r.normalText = htmlSmartypants
r.NormalText = htmlSmartypants
}
close_tag := html_close
closeTag := htmlClose
if flags&HTML_USE_XHTML != 0 {
close_tag = xhtml_close
closeTag = xhtmlClose
}
r.opaque = &htmlOptions{flags: flags, close_tag: close_tag, smartypants: cb}
r.Opaque = &htmlOptions{flags: flags, closeTag: closeTag, smartypants: cb}
return r
}
func HtmlTocRenderer(flags int) *Renderer {
// configure the rendering engine
r := new(Renderer)
r.header = htmlTocHeader
r.Header = htmlTocHeader
r.codespan = htmlCodespan
r.doubleEmphasis = htmlDoubleEmphasis
r.emphasis = htmlEmphasis
r.tripleEmphasis = htmlTripleEmphasis
r.strikethrough = htmlStrikethrough
r.CodeSpan = htmlCodeSpan
r.DoubleEmphasis = htmlDoubleEmphasis
r.Emphasis = htmlEmphasis
r.TripleEmphasis = htmlTripleEmphasis
r.StrikeThrough = htmlStrikeThrough
r.documentFooter = htmlTocFinalize
r.DocumentFooter = htmlTocFinalize
close_tag := ">\n"
closeTag := ">\n"
if flags&HTML_USE_XHTML != 0 {
close_tag = " />\n"
closeTag = " />\n"
}
r.opaque = &htmlOptions{flags: flags | HTML_TOC, close_tag: close_tag}
r.Opaque = &htmlOptions{flags: flags | HTML_TOC, closeTag: closeTag}
return r
}
@ -156,8 +156,8 @@ func htmlHeader(out *bytes.Buffer, text []byte, level int, opaque interface{}) {
}
if options.flags&HTML_TOC != 0 {
out.WriteString(fmt.Sprintf("<h%d id=\"toc_%d\">", level, options.toc_data.header_count))
options.toc_data.header_count++
out.WriteString(fmt.Sprintf("<h%d id=\"toc_%d\">", level, options.tocData.headerCount))
options.tocData.headerCount++
} else {
out.WriteString(fmt.Sprintf("<h%d>", level))
}
@ -185,17 +185,17 @@ func htmlRawBlock(out *bytes.Buffer, text []byte, opaque interface{}) {
out.WriteByte('\n')
}
func htmlHrule(out *bytes.Buffer, opaque interface{}) {
func htmlHRule(out *bytes.Buffer, opaque interface{}) {
options := opaque.(*htmlOptions)
if out.Len() > 0 {
out.WriteByte('\n')
}
out.WriteString("<hr")
out.WriteString(options.close_tag)
out.WriteString(options.closeTag)
}
func htmlBlockcode(out *bytes.Buffer, text []byte, lang string, opaque interface{}) {
func htmlBlockCode(out *bytes.Buffer, text []byte, lang string, opaque interface{}) {
if out.Len() > 0 {
out.WriteByte('\n')
}
@ -255,7 +255,7 @@ func htmlBlockcode(out *bytes.Buffer, text []byte, lang string, opaque interface
* E.g.
* ~~~~ {.python .numbered} => <pre lang="python"><code>
*/
func htmlBlockcodeGithub(out *bytes.Buffer, text []byte, lang string, opaque interface{}) {
func htmlBlockCodeGithub(out *bytes.Buffer, text []byte, lang string, opaque interface{}) {
if out.Len() > 0 {
out.WriteByte('\n')
}
@ -287,7 +287,7 @@ func htmlBlockcodeGithub(out *bytes.Buffer, text []byte, lang string, opaque int
}
func htmlBlockquote(out *bytes.Buffer, text []byte, opaque interface{}) {
func htmlBlockQuote(out *bytes.Buffer, text []byte, opaque interface{}) {
out.WriteString("<blockquote>\n")
out.Write(text)
out.WriteString("</blockquote>")
@ -349,7 +349,7 @@ func htmlList(out *bytes.Buffer, text []byte, flags int, opaque interface{}) {
}
}
func htmlListitem(out *bytes.Buffer, text []byte, flags int, opaque interface{}) {
func htmlListItem(out *bytes.Buffer, text []byte, flags int, opaque interface{}) {
out.WriteString("<li>")
size := len(text)
for size > 0 && text[size-1] == '\n' {
@ -396,7 +396,7 @@ func htmlParagraph(out *bytes.Buffer, text []byte, opaque interface{}) {
}
out.WriteString("<br>")
out.WriteString(options.close_tag)
out.WriteString(options.closeTag)
i++
}
} else {
@ -405,7 +405,7 @@ func htmlParagraph(out *bytes.Buffer, text []byte, opaque interface{}) {
out.WriteString("</p>\n")
}
func htmlAutolink(out *bytes.Buffer, link []byte, kind int, opaque interface{}) int {
func htmlAutoLink(out *bytes.Buffer, link []byte, kind int, opaque interface{}) int {
options := opaque.(*htmlOptions)
if len(link) == 0 {
@ -441,7 +441,7 @@ func htmlAutolink(out *bytes.Buffer, link []byte, kind int, opaque interface{})
return 1
}
func htmlCodespan(out *bytes.Buffer, text []byte, opaque interface{}) int {
func htmlCodeSpan(out *bytes.Buffer, text []byte, opaque interface{}) int {
out.WriteString("<code>")
attrEscape(out, text)
out.WriteString("</code>")
@ -485,14 +485,14 @@ func htmlImage(out *bytes.Buffer, link []byte, title []byte, alt []byte, opaque
}
out.WriteByte('"')
out.WriteString(options.close_tag)
out.WriteString(options.closeTag)
return 1
}
func htmlLinebreak(out *bytes.Buffer, opaque interface{}) int {
func htmlLineBreak(out *bytes.Buffer, opaque interface{}) int {
options := opaque.(*htmlOptions)
out.WriteString("<br")
out.WriteString(options.close_tag)
out.WriteString(options.closeTag)
return 1
}
@ -547,7 +547,7 @@ func htmlTripleEmphasis(out *bytes.Buffer, text []byte, opaque interface{}) int
return 1
}
func htmlStrikethrough(out *bytes.Buffer, text []byte, opaque interface{}) int {
func htmlStrikeThrough(out *bytes.Buffer, text []byte, opaque interface{}) int {
if len(text) == 0 {
return 0
}
@ -563,26 +563,26 @@ func htmlNormalText(out *bytes.Buffer, text []byte, opaque interface{}) {
func htmlTocHeader(out *bytes.Buffer, text []byte, level int, opaque interface{}) {
options := opaque.(*htmlOptions)
for level > options.toc_data.current_level {
if options.toc_data.current_level > 0 {
for level > options.tocData.currentLevel {
if options.tocData.currentLevel > 0 {
out.WriteString("<li>")
}
out.WriteString("<ul>\n")
options.toc_data.current_level++
options.tocData.currentLevel++
}
for level < options.toc_data.current_level {
for level < options.tocData.currentLevel {
out.WriteString("</ul>")
if options.toc_data.current_level > 1 {
if options.tocData.currentLevel > 1 {
out.WriteString("</li>\n")
}
options.toc_data.current_level--
options.tocData.currentLevel--
}
out.WriteString("<li><a href=\"#toc_")
out.WriteString(strconv.Itoa(options.toc_data.header_count))
out.WriteString(strconv.Itoa(options.tocData.headerCount))
out.WriteString("\">")
options.toc_data.header_count++
options.tocData.headerCount++
if len(text) > 0 {
out.Write(text)
@ -592,12 +592,12 @@ func htmlTocHeader(out *bytes.Buffer, text []byte, level int, opaque interface{}
func htmlTocFinalize(out *bytes.Buffer, opaque interface{}) {
options := opaque.(*htmlOptions)
for options.toc_data.current_level > 1 {
for options.tocData.currentLevel > 1 {
out.WriteString("</ul></li>\n")
options.toc_data.current_level--
options.tocData.currentLevel--
}
if options.toc_data.current_level > 0 {
if options.tocData.currentLevel > 0 {
out.WriteString("</ul>\n")
}
}

View File

@ -32,8 +32,8 @@ func parseInline(out *bytes.Buffer, rndr *render, data []byte) {
end++
}
if rndr.mk.normalText != nil {
rndr.mk.normalText(out, data[i:end], rndr.mk.opaque)
if rndr.mk.NormalText != nil {
rndr.mk.NormalText(out, data[i:end], rndr.mk.Opaque)
} else {
out.Write(data[i:end])
}
@ -102,7 +102,7 @@ func inlineEmphasis(out *bytes.Buffer, rndr *render, data []byte, offset int) in
return 0
}
func inlineCodespan(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
func inlineCodeSpan(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
data = data[offset:]
nb := 0
@ -138,15 +138,15 @@ func inlineCodespan(out *bytes.Buffer, rndr *render, data []byte, offset int) in
}
// real code span
if rndr.mk.codespan == nil {
if rndr.mk.CodeSpan == nil {
return 0
}
if f_begin < f_end {
if rndr.mk.codespan(out, data[f_begin:f_end], rndr.mk.opaque) == 0 {
if rndr.mk.CodeSpan(out, data[f_begin:f_end], rndr.mk.Opaque) == 0 {
end = 0
}
} else {
if rndr.mk.codespan(out, nil, rndr.mk.opaque) == 0 {
if rndr.mk.CodeSpan(out, nil, rndr.mk.Opaque) == 0 {
end = 0
}
}
@ -156,7 +156,7 @@ func inlineCodespan(out *bytes.Buffer, rndr *render, data []byte, offset int) in
}
// '\n' preceded by two spaces
func inlineLinebreak(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
func inlineLineBreak(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
if offset < 2 || data[offset-1] != ' ' || data[offset-2] != ' ' {
return 0
}
@ -169,10 +169,10 @@ func inlineLinebreak(out *bytes.Buffer, rndr *render, data []byte, offset int) i
}
out.Truncate(end)
if rndr.mk.linebreak == nil {
if rndr.mk.LineBreak == nil {
return 0
}
if rndr.mk.linebreak(out, rndr.mk.opaque) > 0 {
if rndr.mk.LineBreak(out, rndr.mk.Opaque) > 0 {
return 1
} else {
return 0
@ -192,7 +192,7 @@ func inlineLink(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
text_has_nl := false
// check whether the correct renderer exists
if (isImg && rndr.mk.image == nil) || (!isImg && rndr.mk.link == nil) {
if (isImg && rndr.mk.Image == nil) || (!isImg && rndr.mk.Link == nil) {
return 0
}
@ -428,9 +428,9 @@ func inlineLink(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
out.Truncate(outSize - 1)
}
ret = rndr.mk.image(out, u_link, title, content.Bytes(), rndr.mk.opaque)
ret = rndr.mk.Image(out, u_link, title, content.Bytes(), rndr.mk.Opaque)
} else {
ret = rndr.mk.link(out, u_link, title, content.Bytes(), rndr.mk.opaque)
ret = rndr.mk.Link(out, u_link, title, content.Bytes(), rndr.mk.Opaque)
}
if ret > 0 {
@ -440,7 +440,7 @@ func inlineLink(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
}
// '<' when tags or autolinks are allowed
func inlineLangle(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
func inlineLAngle(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
data = data[offset:]
altype := LINK_TYPE_NOT_AUTOLINK
end := tagLength(data, &altype)
@ -448,12 +448,12 @@ func inlineLangle(out *bytes.Buffer, rndr *render, data []byte, offset int) int
if end > 2 {
switch {
case rndr.mk.autolink != nil && altype != LINK_TYPE_NOT_AUTOLINK:
case rndr.mk.AutoLink != nil && altype != LINK_TYPE_NOT_AUTOLINK:
u_link := bytes.NewBuffer(nil)
unescapeText(u_link, data[1:end+1-2])
ret = rndr.mk.autolink(out, u_link.Bytes(), altype, rndr.mk.opaque)
case rndr.mk.rawHtmlTag != nil:
ret = rndr.mk.rawHtmlTag(out, data[:end], rndr.mk.opaque)
ret = rndr.mk.AutoLink(out, u_link.Bytes(), altype, rndr.mk.Opaque)
case rndr.mk.RawHtmlTag != nil:
ret = rndr.mk.RawHtmlTag(out, data[:end], rndr.mk.Opaque)
}
}
@ -474,8 +474,8 @@ func inlineEscape(out *bytes.Buffer, rndr *render, data []byte, offset int) int
return 0
}
if rndr.mk.normalText != nil {
rndr.mk.normalText(out, data[1:2], rndr.mk.opaque)
if rndr.mk.NormalText != nil {
rndr.mk.NormalText(out, data[1:2], rndr.mk.Opaque)
} else {
out.WriteByte(data[1])
}
@ -526,8 +526,8 @@ func inlineEntity(out *bytes.Buffer, rndr *render, data []byte, offset int) int
return 0 // lone '&'
}
if rndr.mk.entity != nil {
rndr.mk.entity(out, data[:end], rndr.mk.opaque)
if rndr.mk.Entity != nil {
rndr.mk.Entity(out, data[:end], rndr.mk.Opaque)
} else {
out.Write(data[:end])
}
@ -535,7 +535,7 @@ func inlineEntity(out *bytes.Buffer, rndr *render, data []byte, offset int) int
return end
}
func inlineAutolink(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
func inlineAutoLink(out *bytes.Buffer, rndr *render, data []byte, offset int) int {
// quick check to rule out most false hits on ':'
if len(data) < offset + 3 || data[offset+1] != '/' || data[offset+2] != '/' {
return 0
@ -631,11 +631,11 @@ func inlineAutolink(out *bytes.Buffer, rndr *render, data []byte, offset int) in
out.Truncate(len(out.Bytes()) - rewind)
}
if rndr.mk.autolink != nil {
if rndr.mk.AutoLink != nil {
u_link := bytes.NewBuffer(nil)
unescapeText(u_link, data[:link_end])
rndr.mk.autolink(out, u_link.Bytes(), LINK_TYPE_NORMAL, rndr.mk.opaque)
rndr.mk.AutoLink(out, u_link.Bytes(), LINK_TYPE_NORMAL, rndr.mk.Opaque)
}
return link_end - rewind
@ -687,7 +687,7 @@ func tagLength(data []byte, autolink *int) int {
}
if i > 1 && data[i] == '@' {
if j = isMailtoAutolink(data[i:]); j != 0 {
if j = isMailtoAutoLink(data[i:]); j != 0 {
*autolink = LINK_TYPE_EMAIL
return i + j
}
@ -741,7 +741,7 @@ func tagLength(data []byte, autolink *int) int {
// look for the address part of a mail autolink and '>'
// this is less strict than the original markdown e-mail address matching
func isMailtoAutolink(data []byte) int {
func isMailtoAutoLink(data []byte) int {
nb := 0
// address is assumed to be: [-@._a-zA-Z0-9]+ with exactly one '@'
@ -852,7 +852,7 @@ func inlineHelperFindEmphChar(data []byte, c byte) int {
func inlineHelperEmph1(out *bytes.Buffer, rndr *render, data []byte, c byte) int {
i := 0
if rndr.mk.emphasis == nil {
if rndr.mk.Emphasis == nil {
return 0
}
@ -886,7 +886,7 @@ func inlineHelperEmph1(out *bytes.Buffer, rndr *render, data []byte, c byte) int
work := bytes.NewBuffer(nil)
parseInline(work, rndr, data[:i])
r := rndr.mk.emphasis(out, work.Bytes(), rndr.mk.opaque)
r := rndr.mk.Emphasis(out, work.Bytes(), rndr.mk.Opaque)
if r > 0 {
return i + 1
} else {
@ -899,9 +899,9 @@ func inlineHelperEmph1(out *bytes.Buffer, rndr *render, data []byte, c byte) int
}
func inlineHelperEmph2(out *bytes.Buffer, rndr *render, data []byte, c byte) int {
render_method := rndr.mk.doubleEmphasis
render_method := rndr.mk.DoubleEmphasis
if c == '~' {
render_method = rndr.mk.strikethrough
render_method = rndr.mk.StrikeThrough
}
if render_method == nil {
@ -920,7 +920,7 @@ func inlineHelperEmph2(out *bytes.Buffer, rndr *render, data []byte, c byte) int
if i+1 < len(data) && data[i] == c && data[i+1] == c && i > 0 && !isspace(data[i-1]) {
work := bytes.NewBuffer(nil)
parseInline(work, rndr, data[:i])
r := render_method(out, work.Bytes(), rndr.mk.opaque)
r := render_method(out, work.Bytes(), rndr.mk.Opaque)
if r > 0 {
return i + 2
} else {
@ -950,12 +950,12 @@ func inlineHelperEmph3(out *bytes.Buffer, rndr *render, data []byte, offset int,
}
switch {
case (i+2 < len(data) && data[i+1] == c && data[i+2] == c && rndr.mk.tripleEmphasis != nil):
case (i+2 < len(data) && data[i+1] == c && data[i+2] == c && rndr.mk.TripleEmphasis != nil):
// triple symbol found
work := bytes.NewBuffer(nil)
parseInline(work, rndr, data[:i])
r := rndr.mk.tripleEmphasis(out, work.Bytes(), rndr.mk.opaque)
r := rndr.mk.TripleEmphasis(out, work.Bytes(), rndr.mk.Opaque)
if r > 0 {
return i + 3
} else {

View File

@ -19,40 +19,40 @@ import (
func LatexRenderer(flags int) *Renderer {
// block-level rendering
r := new(Renderer)
r.blockcode = latexBlockcode
r.blockquote = latexBlockquote
//r.blockhtml = ?
r.header = latexHeader
r.hrule = latexHrule
r.list = latexList
r.listitem = latexListitem
r.paragraph = latexParagraph
r.table = latexTable
r.tableRow = latexTableRow
r.tableCell = latexTableCell
r.BlockCode = latexBlockCode
r.BlockQuote = latexBlockQuote
//r.BlockHtml = ?
r.Header = latexHeader
r.HRule = latexHRule
r.List = latexList
r.ListItem = latexListItem
r.Paragraph = latexParagraph
r.Table = latexTable
r.TableRow = latexTableRow
r.TableCell = latexTableCell
// inline rendering
r.autolink = latexAutolink
r.codespan = latexCodespan
r.doubleEmphasis = latexDoubleEmphasis
r.emphasis = latexEmphasis
r.image = latexImage
r.linebreak = latexLinebreak
r.link = latexLink
r.AutoLink = latexAutoLink
r.CodeSpan = latexCodeSpan
r.DoubleEmphasis = latexDoubleEmphasis
r.Emphasis = latexEmphasis
r.Image = latexImage
r.LineBreak = latexLineBreak
r.Link = latexLink
//r.rawHtmlTag = ?
r.strikethrough = latexStrikethrough
r.StrikeThrough = latexStrikeThrough
r.normalText = latexNormalText
r.NormalText = latexNormalText
r.documentHeader = latexDocumentHeader
r.documentFooter = latexDocumentFooter
r.DocumentHeader = latexDocumentHeader
r.DocumentFooter = latexDocumentFooter
r.opaque = nil
r.Opaque = nil
return r
}
// render code chunks using verbatim, or listings if we have a language
func latexBlockcode(out *bytes.Buffer, text []byte, lang string, opaque interface{}) {
func latexBlockCode(out *bytes.Buffer, text []byte, lang string, opaque interface{}) {
if lang == "" {
out.WriteString("\n\\begin{verbatim}\n")
} else {
@ -68,13 +68,13 @@ func latexBlockcode(out *bytes.Buffer, text []byte, lang string, opaque interfac
}
}
func latexBlockquote(out *bytes.Buffer, text []byte, opaque interface{}) {
func latexBlockQuote(out *bytes.Buffer, text []byte, opaque interface{}) {
out.WriteString("\n\\begin{quotation}\n")
out.Write(text)
out.WriteString("\n\\end{quotation}\n")
}
//blockhtml func(out *bytes.Buffer, text []byte, opaque interface{})
//BlockHtml func(out *bytes.Buffer, text []byte, opaque interface{})
func latexHeader(out *bytes.Buffer, text []byte, level int, opaque interface{}) {
switch level {
@ -95,7 +95,7 @@ func latexHeader(out *bytes.Buffer, text []byte, level int, opaque interface{})
out.WriteString("}\n")
}
func latexHrule(out *bytes.Buffer, opaque interface{}) {
func latexHRule(out *bytes.Buffer, opaque interface{}) {
out.WriteString("\n\\HRule\n")
}
@ -113,7 +113,7 @@ func latexList(out *bytes.Buffer, text []byte, flags int, opaque interface{}) {
}
}
func latexListitem(out *bytes.Buffer, text []byte, flags int, opaque interface{}) {
func latexListItem(out *bytes.Buffer, text []byte, flags int, opaque interface{}) {
out.WriteString("\n\\item ")
out.Write(text)
}
@ -157,7 +157,7 @@ func latexTableCell(out *bytes.Buffer, text []byte, align int, opaque interface{
out.Write(text)
}
func latexAutolink(out *bytes.Buffer, link []byte, kind int, opaque interface{}) int {
func latexAutoLink(out *bytes.Buffer, link []byte, kind int, opaque interface{}) int {
out.WriteString("\\href{")
if kind == LINK_TYPE_EMAIL {
out.WriteString("mailto:")
@ -169,7 +169,7 @@ func latexAutolink(out *bytes.Buffer, link []byte, kind int, opaque interface{})
return 1
}
func latexCodespan(out *bytes.Buffer, text []byte, opaque interface{}) int {
func latexCodeSpan(out *bytes.Buffer, text []byte, opaque interface{}) int {
out.WriteString("\\texttt{")
escapeSpecialChars(out, text)
out.WriteString("}")
@ -206,7 +206,7 @@ func latexImage(out *bytes.Buffer, link []byte, title []byte, alt []byte, opaque
return 1
}
func latexLinebreak(out *bytes.Buffer, opaque interface{}) int {
func latexLineBreak(out *bytes.Buffer, opaque interface{}) int {
out.WriteString(" \\\\\n")
return 1
}
@ -231,7 +231,7 @@ func latexTripleEmphasis(out *bytes.Buffer, text []byte, opaque interface{}) int
return 1
}
func latexStrikethrough(out *bytes.Buffer, text []byte, opaque interface{}) int {
func latexStrikeThrough(out *bytes.Buffer, text []byte, opaque interface{}) int {
out.WriteString("\\sout{")
out.Write(text)
out.WriteString("}")

View File

@ -95,40 +95,40 @@ var block_tags = map[string]bool{
// Most users will use the convenience functions to fill in this structure.
type Renderer struct {
// block-level callbacks---nil skips the block
blockcode func(out *bytes.Buffer, text []byte, lang string, opaque interface{})
blockquote func(out *bytes.Buffer, text []byte, opaque interface{})
blockhtml func(out *bytes.Buffer, text []byte, opaque interface{})
header func(out *bytes.Buffer, text []byte, level int, opaque interface{})
hrule func(out *bytes.Buffer, opaque interface{})
list func(out *bytes.Buffer, text []byte, flags int, opaque interface{})
listitem func(out *bytes.Buffer, text []byte, flags int, opaque interface{})
paragraph func(out *bytes.Buffer, text []byte, opaque interface{})
table func(out *bytes.Buffer, header []byte, body []byte, columnData []int, opaque interface{})
tableRow func(out *bytes.Buffer, text []byte, opaque interface{})
tableCell func(out *bytes.Buffer, text []byte, flags int, opaque interface{})
BlockCode func(out *bytes.Buffer, text []byte, lang string, opaque interface{})
BlockQuote func(out *bytes.Buffer, text []byte, opaque interface{})
BlockHtml func(out *bytes.Buffer, text []byte, opaque interface{})
Header func(out *bytes.Buffer, text []byte, level int, opaque interface{})
HRule func(out *bytes.Buffer, opaque interface{})
List func(out *bytes.Buffer, text []byte, flags int, opaque interface{})
ListItem func(out *bytes.Buffer, text []byte, flags int, opaque interface{})
Paragraph func(out *bytes.Buffer, text []byte, opaque interface{})
Table func(out *bytes.Buffer, header []byte, body []byte, columnData []int, opaque interface{})
TableRow func(out *bytes.Buffer, text []byte, opaque interface{})
TableCell func(out *bytes.Buffer, text []byte, flags int, opaque interface{})
// span-level callbacks---nil or return 0 prints the span verbatim
autolink func(out *bytes.Buffer, link []byte, kind int, opaque interface{}) int
codespan func(out *bytes.Buffer, text []byte, opaque interface{}) int
doubleEmphasis func(out *bytes.Buffer, text []byte, opaque interface{}) int
emphasis func(out *bytes.Buffer, text []byte, opaque interface{}) int
image func(out *bytes.Buffer, link []byte, title []byte, alt []byte, opaque interface{}) int
linebreak func(out *bytes.Buffer, opaque interface{}) int
link func(out *bytes.Buffer, link []byte, title []byte, content []byte, opaque interface{}) int
rawHtmlTag func(out *bytes.Buffer, tag []byte, opaque interface{}) int
tripleEmphasis func(out *bytes.Buffer, text []byte, opaque interface{}) int
strikethrough func(out *bytes.Buffer, text []byte, opaque interface{}) int
// Span-level callbacks---nil or return 0 prints the span verbatim
AutoLink func(out *bytes.Buffer, link []byte, kind int, opaque interface{}) int
CodeSpan func(out *bytes.Buffer, text []byte, opaque interface{}) int
DoubleEmphasis func(out *bytes.Buffer, text []byte, opaque interface{}) int
Emphasis func(out *bytes.Buffer, text []byte, opaque interface{}) int
Image func(out *bytes.Buffer, link []byte, title []byte, alt []byte, opaque interface{}) int
LineBreak func(out *bytes.Buffer, opaque interface{}) int
Link func(out *bytes.Buffer, link []byte, title []byte, content []byte, opaque interface{}) int
RawHtmlTag func(out *bytes.Buffer, tag []byte, opaque interface{}) int
TripleEmphasis func(out *bytes.Buffer, text []byte, opaque interface{}) int
StrikeThrough func(out *bytes.Buffer, text []byte, opaque interface{}) int
// low-level callbacks---nil copies input directly into the output
entity func(out *bytes.Buffer, entity []byte, opaque interface{})
normalText func(out *bytes.Buffer, text []byte, opaque interface{})
// Low-level callbacks---nil copies input directly into the output
Entity func(out *bytes.Buffer, entity []byte, opaque interface{})
NormalText func(out *bytes.Buffer, text []byte, opaque interface{})
// header and footer
documentHeader func(out *bytes.Buffer, opaque interface{})
documentFooter func(out *bytes.Buffer, opaque interface{})
// Header and footer
DocumentHeader func(out *bytes.Buffer, opaque interface{})
DocumentFooter func(out *bytes.Buffer, opaque interface{})
// user data---passed back to every callback
opaque interface{}
// User data---passed back to every callback
Opaque interface{}
}
type inlineParser func(out *bytes.Buffer, rndr *render, data []byte, offset int) int
@ -166,28 +166,28 @@ func Markdown(input []byte, renderer *Renderer, extensions uint32) []byte {
rndr.maxNesting = 16
// register inline parsers
if rndr.mk.emphasis != nil || rndr.mk.doubleEmphasis != nil || rndr.mk.tripleEmphasis != nil {
if rndr.mk.Emphasis != nil || rndr.mk.DoubleEmphasis != nil || rndr.mk.TripleEmphasis != nil {
rndr.inline['*'] = inlineEmphasis
rndr.inline['_'] = inlineEmphasis
if extensions&EXTENSION_STRIKETHROUGH != 0 {
rndr.inline['~'] = inlineEmphasis
}
}
if rndr.mk.codespan != nil {
rndr.inline['`'] = inlineCodespan
if rndr.mk.CodeSpan != nil {
rndr.inline['`'] = inlineCodeSpan
}
if rndr.mk.linebreak != nil {
rndr.inline['\n'] = inlineLinebreak
if rndr.mk.LineBreak != nil {
rndr.inline['\n'] = inlineLineBreak
}
if rndr.mk.image != nil || rndr.mk.link != nil {
if rndr.mk.Image != nil || rndr.mk.Link != nil {
rndr.inline['['] = inlineLink
}
rndr.inline['<'] = inlineLangle
rndr.inline['<'] = inlineLAngle
rndr.inline['\\'] = inlineEscape
rndr.inline['&'] = inlineEntity
if extensions&EXTENSION_AUTOLINK != 0 {
rndr.inline[':'] = inlineAutolink
rndr.inline[':'] = inlineAutoLink
}
// first pass: look for references, copy everything else
@ -221,8 +221,8 @@ func Markdown(input []byte, renderer *Renderer, extensions uint32) []byte {
// second pass: actual rendering
output := bytes.NewBuffer(nil)
if rndr.mk.documentHeader != nil {
rndr.mk.documentHeader(output, rndr.mk.opaque)
if rndr.mk.DocumentHeader != nil {
rndr.mk.DocumentHeader(output, rndr.mk.Opaque)
}
if text.Len() > 0 {
@ -234,8 +234,8 @@ func Markdown(input []byte, renderer *Renderer, extensions uint32) []byte {
parseBlock(output, rndr, text.Bytes())
}
if rndr.mk.documentFooter != nil {
rndr.mk.documentFooter(output, rndr.mk.opaque)
if rndr.mk.DocumentFooter != nil {
rndr.mk.DocumentFooter(output, rndr.mk.Opaque)
}
if rndr.nesting != 0 {