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
@@ -52,8 +52,8 @@ than upskirt (Go's bounds-checking uncovered a few off-by-one
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
@@ -26,7 +26,7 @@ if isPrefixHeader(rndr, data) {
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 @@ if i := isEmpty(data); i > 0 {
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 @@ }
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 @@ }
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 @@ i++
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 @@ return 0
} // 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 @@ }
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 @@ if work.Len() > 0 && work.Bytes()[work.Len()-1] != '\n' {
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 @@ blockTableRow(body_work, rndr, data[row_start:i], columns, col_data)
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 @@
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 @@ }
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 @@ beg = end
} 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 @@ }
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 @@ break
} } - 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 @@ }
// 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 @@ }
} // 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 @@ break
} 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 @@
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 @@
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 @@
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) } }
@@ -36,87 +36,87 @@ )
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 @@ out.WriteByte('\n')
} 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 @@ out.Write(text[org:sz])
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 @@ * Note that we only generate HTML for the first specifier.
* 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 @@ out.WriteString("</code></pre>\n")
} -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 @@ out.WriteString("</ul>\n")
} } -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 @@ break
} out.WriteString("<br>") - out.WriteString(options.close_tag) + out.WriteString(options.closeTag) i++ } } else {@@ -405,7 +405,7 @@ }
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 @@
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 @@ attrEscape(out, title)
} 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 @@ out.WriteString("</em></strong>")
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 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 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") } }
@@ -32,8 +32,8 @@ for end < len(data) && rndr.inline[data[end]] == nil {
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 @@
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 @@ f_end--
} // 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 @@
} // '\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 @@ end--
} 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 @@ var title, link []byte
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 @@ if outSize > 0 && outBytes[outSize-1] == '!' {
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 @@ return 0
} // '<' 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 @@ ret := 0
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 @@ if bytes.IndexByte(escapeChars, data[1]) < 0 {
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 @@ } else {
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 @@
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 @@ if out.Len() >= rewind {
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 @@ i++
} 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 @@ }
// 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 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 @@ }
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 @@ return 0
} 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 @@
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 @@ continue
} 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 {
@@ -19,40 +19,40 @@
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 @@ out.WriteString("\n\\end{lstlisting}\n")
} } -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 @@ out.Write(text)
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 @@ out.WriteString("\n\\end{itemize}\n")
} } -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 @@ }
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 @@ out.WriteString("}")
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 @@ }
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 @@ out.WriteString("}}")
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("}")
@@ -95,40 +95,40 @@ // This is mostly of interest if you are implementing a new rendering format.
// 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 @@ rndr.refs = make(map[string]*reference)
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 @@ }
// 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 @@ }
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 {