summaryrefslogtreecommitdiffstats
path: root/hugolib/shortcode.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-10-18 09:47:39 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-10-22 19:57:44 +0200
commit1b7ecfc2e176315b69914756c70b46306561e4d1 (patch)
treec1b9c74418e700123dff9e382e13fae99f95f43b /hugolib/shortcode.go
parent27f5a906a2a34e3b8348c8baeea48355352b5bbb (diff)
hugolib: Use []byte in shortcode parsing
See #5324
Diffstat (limited to 'hugolib/shortcode.go')
-rw-r--r--hugolib/shortcode.go24
1 files changed, 13 insertions, 11 deletions
diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go
index f7141031d..a21a10ad2 100644
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -553,9 +553,9 @@ Loop:
return sc, nil
case currItem.IsText():
- sc.inner = append(sc.inner, currItem.Val)
+ sc.inner = append(sc.inner, currItem.ValStr())
case currItem.IsShortcodeName():
- sc.name = currItem.Val
+ sc.name = currItem.ValStr()
// We pick the first template for an arbitrary output format
// if more than one. It is "all inner or no inner".
tmpl := getShortcodeTemplateForTemplateKey(scKey{}, sc.name, p.s.Tmpl)
@@ -576,11 +576,11 @@ Loop:
// named params
if sc.params == nil {
params := make(map[string]string)
- params[currItem.Val] = pt.Next().Val
+ params[currItem.ValStr()] = pt.Next().ValStr()
sc.params = params
} else {
if params, ok := sc.params.(map[string]string); ok {
- params[currItem.Val] = pt.Next().Val
+ params[currItem.ValStr()] = pt.Next().ValStr()
} else {
return sc, errShortCodeIllegalState
}
@@ -590,11 +590,11 @@ Loop:
// positional params
if sc.params == nil {
var params []string
- params = append(params, currItem.Val)
+ params = append(params, currItem.ValStr())
sc.params = params
} else {
if params, ok := sc.params.([]string); ok {
- params = append(params, currItem.Val)
+ params = append(params, currItem.ValStr())
sc.params = params
} else {
return sc, errShortCodeIllegalState
@@ -613,19 +613,21 @@ Loop:
return sc, nil
}
-func (s *shortcodeHandler) extractShortcodes(stringToParse string, p *PageWithoutContent) (string, error) {
+var shortCodeStart = []byte("{{")
- startIdx := strings.Index(stringToParse, "{{")
+func (s *shortcodeHandler) extractShortcodes(input []byte, p *PageWithoutContent) (string, error) {
+
+ startIdx := bytes.Index(input, shortCodeStart)
// short cut for docs with no shortcodes
if startIdx < 0 {
- return stringToParse, nil
+ return string(input), nil
}
// the parser takes a string;
// since this is an internal API, it could make sense to use the mutable []byte all the way, but
// it seems that the time isn't really spent in the byte copy operations, and the impl. gets a lot cleaner
- pt := pageparser.ParseFrom(stringToParse, startIdx)
+ pt := pageparser.ParseFrom(input, startIdx)
result := bp.GetBuffer()
defer bp.PutBuffer(result)
@@ -642,7 +644,7 @@ Loop:
switch {
case currItem.IsText():
- result.WriteString(currItem.Val)
+ result.WriteString(currItem.ValStr())
case currItem.IsLeftShortcodeDelim():
// let extractShortcode handle left delim (will do so recursively)
pt.Backup()