fix smartypants and html entity escaping

This commit is contained in:
Russ Ross 2011-05-28 22:50:33 -06:00
parent de40da7ad6
commit 59dc1f8599
3 changed files with 14 additions and 6 deletions

View File

@ -15,7 +15,7 @@ package main
import ( import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"github.com/russross/blackfriday" "github.com/russross/blackfriday"
"os" "os"
) )
@ -54,7 +54,7 @@ func main() {
html_flags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS html_flags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
html_flags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES html_flags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
// render the data // render the data
output := blackfriday.Markdown(input, blackfriday.HtmlRenderer(html_flags), extensions) output := blackfriday.Markdown(input, blackfriday.HtmlRenderer(html_flags), extensions)
// output the result // output the result

View File

@ -255,7 +255,7 @@ func Markdown(input []byte, renderer *Renderer, extensions uint32) []byte {
} }
// second pass: actual rendering // second pass: actual rendering
output := bytes.NewBuffer(nil) output := bytes.NewBuffer(nil)
if rndr.mk.doc_header != nil { if rndr.mk.doc_header != nil {
rndr.mk.doc_header(output, rndr.mk.opaque) rndr.mk.doc_header(output, rndr.mk.opaque)
} }
@ -277,7 +277,7 @@ func Markdown(input []byte, renderer *Renderer, extensions uint32) []byte {
panic("Nesting level did not end at zero") panic("Nesting level did not end at zero")
} }
return output.Bytes() return output.Bytes()
} }

View File

@ -218,9 +218,11 @@ func smartypants_cb__number_generic(ob *bytes.Buffer, smrt *smartypants_data, pr
num_end++ num_end++
} }
if num_end == 0 { if num_end == 0 {
ob.WriteByte(text[0])
return 0 return 0
} }
if len(text) < num_end+2 || text[num_end] != '/' { if len(text) < num_end+2 || text[num_end] != '/' {
ob.WriteByte(text[0])
return 0 return 0
} }
den_end := num_end + 1 den_end := num_end + 1
@ -228,6 +230,7 @@ func smartypants_cb__number_generic(ob *bytes.Buffer, smrt *smartypants_data, pr
den_end++ den_end++
} }
if den_end == num_end+1 { if den_end == num_end+1 {
ob.WriteByte(text[0])
return 0 return 0
} }
if len(text) == den_end || word_boundary(text[den_end]) { 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) options := opaque.(*htmlOptions)
smrt := smartypants_data{false, false} smrt := smartypants_data{false, false}
// first do normal entity escaping
escaped := bytes.NewBuffer(nil)
attr_escape(escaped, text)
text = escaped.Bytes()
mark := 0 mark := 0
for i := 0; i < len(text); i++ { for i := 0; i < len(text); i++ {
if action := options.smartypants[text[i]]; action != nil { if action := options.smartypants[text[i]]; action != nil {
if i > mark { if i > mark {
attr_escape(ob, text[mark:i]) ob.Write(text[mark:i])
} }
previous_char := byte(0) previous_char := byte(0)
@ -345,6 +353,6 @@ func rndr_smartypants(ob *bytes.Buffer, text []byte, opaque interface{}) {
} }
if mark < len(text) { if mark < len(text) {
attr_escape(ob, text[mark:]) ob.Write(text[mark:])
} }
} }