mirror of
https://github.com/rwinkhart/glamour-temp-MUTN.git
synced 2026-09-06 00:47:15 -04:00
Move text sanitizing to RenderContext
This commit is contained in:
+31
-2
@@ -1,8 +1,37 @@
|
|||||||
package gold
|
package gold
|
||||||
|
|
||||||
|
import (
|
||||||
|
"html"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/microcosm-cc/bluemonday"
|
||||||
|
)
|
||||||
|
|
||||||
type RenderContext struct {
|
type RenderContext struct {
|
||||||
style map[StyleType]ElementStyle
|
options Options
|
||||||
|
style map[StyleType]ElementStyle
|
||||||
|
|
||||||
blockStack *BlockStack
|
blockStack *BlockStack
|
||||||
table *TableElement
|
table *TableElement
|
||||||
options Options
|
|
||||||
|
stripper *bluemonday.Policy
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRenderContext(options Options) RenderContext {
|
||||||
|
return RenderContext{
|
||||||
|
options: options,
|
||||||
|
style: make(map[StyleType]ElementStyle),
|
||||||
|
blockStack: &BlockStack{},
|
||||||
|
table: &TableElement{},
|
||||||
|
stripper: bluemonday.StrictPolicy(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ctx RenderContext) SanitizeHTML(s string, trimSpaces bool) string {
|
||||||
|
s = ctx.stripper.Sanitize(s)
|
||||||
|
if trimSpaces {
|
||||||
|
s = strings.TrimSpace(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
return html.UnescapeString(s)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-5
@@ -1,9 +1,7 @@
|
|||||||
package gold
|
package gold
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"html"
|
|
||||||
"io"
|
"io"
|
||||||
"strings"
|
|
||||||
|
|
||||||
bf "gopkg.in/russross/blackfriday.v2"
|
bf "gopkg.in/russross/blackfriday.v2"
|
||||||
)
|
)
|
||||||
@@ -140,14 +138,14 @@ func (tr *TermRenderer) NewElement(node *bf.Node) Element {
|
|||||||
case bf.Text:
|
case bf.Text:
|
||||||
return Element{
|
return Element{
|
||||||
Renderer: &BaseElement{
|
Renderer: &BaseElement{
|
||||||
Token: html.UnescapeString(stripper.Sanitize(string(node.Literal))),
|
Token: tr.context.SanitizeHTML(string(node.Literal), false),
|
||||||
Style: ctx.style[Text],
|
Style: ctx.style[Text],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
case bf.HTMLBlock:
|
case bf.HTMLBlock:
|
||||||
return Element{
|
return Element{
|
||||||
Renderer: &BaseElement{
|
Renderer: &BaseElement{
|
||||||
Token: html.UnescapeString(strings.TrimSpace(stripper.Sanitize(string(node.Literal)))) + "\n",
|
Token: tr.context.SanitizeHTML(string(node.Literal), true) + "\n",
|
||||||
Style: ctx.style[HTMLBlock],
|
Style: ctx.style[HTMLBlock],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -185,7 +183,7 @@ func (tr *TermRenderer) NewElement(node *bf.Node) Element {
|
|||||||
case bf.HTMLSpan:
|
case bf.HTMLSpan:
|
||||||
return Element{
|
return Element{
|
||||||
Renderer: &BaseElement{
|
Renderer: &BaseElement{
|
||||||
Token: html.UnescapeString(strings.TrimSpace(stripper.Sanitize(string(node.Literal)))) + "\n",
|
Token: tr.context.SanitizeHTML(string(node.Literal), true) + "\n",
|
||||||
Style: ctx.style[HTMLSpan],
|
Style: ctx.style[HTMLSpan],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,14 +8,9 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/microcosm-cc/bluemonday"
|
|
||||||
bf "gopkg.in/russross/blackfriday.v2"
|
bf "gopkg.in/russross/blackfriday.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
stripper = bluemonday.StrictPolicy()
|
|
||||||
)
|
|
||||||
|
|
||||||
type Options struct {
|
type Options struct {
|
||||||
BaseURL string
|
BaseURL string
|
||||||
WordWrap int
|
WordWrap int
|
||||||
@@ -66,12 +61,7 @@ func NewTermRendererFromBytes(b []byte, options Options) (*TermRenderer, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
tr := &TermRenderer{
|
tr := &TermRenderer{
|
||||||
context: RenderContext{
|
context: NewRenderContext(options),
|
||||||
style: make(map[StyleType]ElementStyle),
|
|
||||||
blockStack: &BlockStack{},
|
|
||||||
table: &TableElement{},
|
|
||||||
options: options,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v := range e {
|
for k, v := range e {
|
||||||
|
|||||||
Reference in New Issue
Block a user