Skip to content

Commit

Permalink
Allow hyphens in shortcode name
Browse files Browse the repository at this point in the history
  • Loading branch information
bep authored and tychoish committed Aug 13, 2017
1 parent a829a74 commit e060c0f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
8 changes: 8 additions & 0 deletions hugolib/shortcode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}`)
Expand Down
8 changes: 4 additions & 4 deletions hugolib/shortcodeparser.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ func lexShortcodeParam(l *pagelexer, escapedQuoteStart bool) stateFunc {
break
}

if !isValidParamRune(r) {
if !isAlphaNumericOrHyphen(r) {
l.backup()
break
}
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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 == '-'
}
Expand Down

0 comments on commit e060c0f

Please sign in to comment.