mirror of
https://github.com/russross/blackfriday.git
synced 2024-03-22 13:40:34 +08:00
fix smartypants and html entity escaping
This commit is contained in:
parent
de40da7ad6
commit
59dc1f8599
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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:])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user