all repos — grayfriday @ 59dc1f8599d7fa0c0328a1bf5704a3f0ca397de6

blackfriday fork with a few changes

fix smartypants and html entity escaping
Russ Ross russ@russross.com
Sat, 28 May 2011 22:50:33 -0600
commit

59dc1f8599d7fa0c0328a1bf5704a3f0ca397de6

parent

de40da7ad692f7fb0c81bbc68ad49d27217c49f7

3 files changed, 14 insertions(+), 6 deletions(-)

jump to
M example/main.goexample/main.go

@@ -15,7 +15,7 @@

import ( "fmt" "io/ioutil" - "github.com/russross/blackfriday" + "github.com/russross/blackfriday" "os" )

@@ -54,7 +54,7 @@ html_flags |= blackfriday.HTML_USE_SMARTYPANTS

html_flags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS html_flags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES - // render the data + // render the data output := blackfriday.Markdown(input, blackfriday.HtmlRenderer(html_flags), extensions) // output the result
M markdown.gomarkdown.go

@@ -255,7 +255,7 @@ sort.Sort(rndr.refs)

} // second pass: actual rendering - output := bytes.NewBuffer(nil) + output := bytes.NewBuffer(nil) if rndr.mk.doc_header != nil { rndr.mk.doc_header(output, rndr.mk.opaque) }

@@ -277,7 +277,7 @@ if rndr.nesting != 0 {

panic("Nesting level did not end at zero") } - return output.Bytes() + return output.Bytes() }
M smartypants.gosmartypants.go

@@ -218,9 +218,11 @@ for len(text) > num_end && isdigit(text[num_end]) {

num_end++ } if num_end == 0 { + ob.WriteByte(text[0]) return 0 } if len(text) < num_end+2 || text[num_end] != '/' { + ob.WriteByte(text[0]) return 0 } den_end := num_end + 1

@@ -228,6 +230,7 @@ for len(text) > den_end && isdigit(text[den_end]) {

den_end++ } if den_end == num_end+1 { + ob.WriteByte(text[0]) return 0 } if len(text) == den_end || word_boundary(text[den_end]) {

@@ -328,11 +331,16 @@ func rndr_smartypants(ob *bytes.Buffer, text []byte, opaque interface{}) {

options := opaque.(*htmlOptions) smrt := smartypants_data{false, false} + // first do normal entity escaping + escaped := bytes.NewBuffer(nil) + attr_escape(escaped, text) + text = escaped.Bytes() + mark := 0 for i := 0; i < len(text); i++ { if action := options.smartypants[text[i]]; action != nil { if i > mark { - attr_escape(ob, text[mark:i]) + ob.Write(text[mark:i]) } previous_char := byte(0)

@@ -345,6 +353,6 @@ }

} if mark < len(text) { - attr_escape(ob, text[mark:]) + ob.Write(text[mark:]) } }