diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-09-29 14:51:51 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-09-29 23:22:41 +0200 |
commit | 329e88db1f6d043d32c7083570773dccfd4f11fc (patch) | |
tree | a4bab342aa28523be8c854ceb88fece17f634410 /parser/pageparser/pagelexer_shortcode.go | |
parent | e073f4efb1345f6408000ef3f389873f8cf7179e (diff) | |
download | hugo-329e88db1f6d043d32c7083570773dccfd4f11fc.tar.gz hugo-329e88db1f6d043d32c7083570773dccfd4f11fc.zip |
Support typed bool, int and float in shortcode params
This means that you now can do:
{{< vidur 9KvBeKu false true 32 3.14 >}}
And the boolean and numeric values will be converted to `bool`, `int` and `float64`.
If you want these to be strings, they must be quoted:
{{< vidur 9KvBeKu "false" "true" "32" "3.14" >}}
Fixes #6371
Diffstat (limited to 'parser/pageparser/pagelexer_shortcode.go')
-rw-r--r-- | parser/pageparser/pagelexer_shortcode.go | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/parser/pageparser/pagelexer_shortcode.go b/parser/pageparser/pagelexer_shortcode.go index d503d1797..dea1b317e 100644 --- a/parser/pageparser/pagelexer_shortcode.go +++ b/parser/pageparser/pagelexer_shortcode.go @@ -112,7 +112,7 @@ func lexShortcodeParam(l *pageLexer, escapedQuoteStart bool) stateFunc { break } - if !isAlphaNumericOrHyphen(r) { + if !isAlphaNumericOrHyphen(r) && r != '.' { // Floats have period l.backup() break } @@ -137,6 +137,12 @@ func lexShortcodeParam(l *pageLexer, escapedQuoteStart bool) stateFunc { } +func lexShortcodeParamVal(l *pageLexer) stateFunc { + l.consumeToSpace() + l.emit(tScParamVal) + return lexInsideShortcode +} + func lexShortcodeQuotedParamVal(l *pageLexer, escapedQuotedValuesAllowed bool, typ ItemType) stateFunc { openQuoteFound := false escapedInnerQuoteFound := false @@ -176,9 +182,9 @@ Loop: } if escapedInnerQuoteFound { - l.ignoreEscapesAndEmit(typ) + l.ignoreEscapesAndEmit(typ, true) } else { - l.emit(typ) + l.emitString(typ) } r := l.next() @@ -273,8 +279,13 @@ func lexInsideShortcode(l *pageLexer) stateFunc { case isSpace(r), isEndOfLine(r): l.ignore() case r == '=': + l.consumeSpace() l.ignore() - return lexShortcodeQuotedParamVal(l, l.peek() != '\\', tScParamVal) + peek := l.peek() + if peek == '"' || peek == '\\' { + return lexShortcodeQuotedParamVal(l, peek != '\\', tScParamVal) + } + return lexShortcodeParamVal case r == '/': if l.currShortcodeName == "" { return l.errorf("got closing shortcode, but none is open") |