From 176ce5deab2b6a71789c14a401b8f9ed10399fde Mon Sep 17 00:00:00 2001 From: bep Date: Fri, 27 Feb 2015 11:57:23 +0100 Subject: [PATCH] Allow hyphens in shortcode name Fixes #929 --- hugolib/shortcode_test.go | 8 ++++++++ hugolib/shortcodeparser.go | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go index 5df969f49..92089f644 100644 --- a/hugolib/shortcode_test.go +++ b/hugolib/shortcode_test.go @@ -33,6 +33,14 @@ func TestNonSC(t *testing.T) { CheckShortCodeMatch(t, "{{%/* movie 47238zzb */%}}", "{{% movie 47238zzb %}}", tem) } +// Issue #929 +func TestHyphenatedSC(t *testing.T) { + tem := tpl.New() + tem.AddInternalShortcode("hyphenated-video.html", `Playing Video {{ .Get 0 }}`) + + CheckShortCodeMatch(t, "{{< hyphenated-video 47238zzb >}}", "Playing Video 47238zzb", tem) +} + func TestPositionalParamSC(t *testing.T) { tem := tpl.New() tem.AddInternalShortcode("video.html", `Playing Video {{ .Get 0 }}`) diff --git a/hugolib/shortcodeparser.go b/hugolib/shortcodeparser.go index 457c295c1..5621a382f 100644 --- a/hugolib/shortcodeparser.go +++ b/hugolib/shortcodeparser.go @@ -382,7 +382,7 @@ func lexShortcodeParam(l *pagelexer, escapedQuoteStart bool) stateFunc { break } - if !isValidParamRune(r) { + if !isAlphaNumericOrHyphen(r) { l.backup() break } @@ -477,7 +477,7 @@ func lexIdentifierInShortcode(l *pagelexer) stateFunc { Loop: for { switch r := l.next(); { - case isAlphaNumeric(r): + case isAlphaNumericOrHyphen(r): default: l.backup() word := l.input[l.start:l.pos] @@ -541,7 +541,7 @@ func lexInsideShortcode(l *pagelexer) stateFunc { if l.peek() == '"' { return lexShortcodeParam(l, true) } - case l.elementStepNum > 0 && (isValidParamRune(r) || r == '"'): // positional params can have quotes + case l.elementStepNum > 0 && (isAlphaNumericOrHyphen(r) || r == '"'): // positional params can have quotes l.backup() return lexShortcodeParam(l, false) case isAlphaNumeric(r): @@ -584,7 +584,7 @@ func isSpace(r rune) bool { return r == ' ' || r == '\t' } -func isValidParamRune(r rune) bool { +func isAlphaNumericOrHyphen(r rune) bool { // let unquoted YouTube ids as positional params slip through (they contain hyphens) return isAlphaNumeric(r) || r == '-' }