diff --git a/parser/pageparser/pagelexer.go b/parser/pageparser/pagelexer.go index a5f64b037..612fb75f4 100644 --- a/parser/pageparser/pagelexer.go +++ b/parser/pageparser/pagelexer.go @@ -18,6 +18,7 @@ import ( "fmt" "unicode" "unicode/utf8" + "unique" ) const eof = -1 @@ -78,7 +79,7 @@ func newPageLexer(input []byte, stateStart stateFunc, cfg Config) *pageLexer { lexerShortcodeState: lexerShortcodeState{ currLeftDelimItem: tLeftDelimScNoMarkup, currRightDelimItem: tRightDelimScNoMarkup, - openShortcodes: make(map[string]bool), + openShortcodes: make(map[unique.Handle[string]]bool), }, items: make([]Item, 0, 5), } diff --git a/parser/pageparser/pagelexer_shortcode.go b/parser/pageparser/pagelexer_shortcode.go index 12d07cd68..3a656263a 100644 --- a/parser/pageparser/pagelexer_shortcode.go +++ b/parser/pageparser/pagelexer_shortcode.go @@ -13,15 +13,17 @@ package pageparser +import "unique" + type lexerShortcodeState struct { currLeftDelimItem ItemType currRightDelimItem ItemType isInline bool - currShortcodeName string // is only set when a shortcode is in opened state - closingState int // > 0 = on its way to be closed - elementStepNum int // step number in element - paramElements int // number of elements (name + value = 2) found first - openShortcodes map[string]bool // set of shortcodes in open state + currShortcodeName string // is only set when a shortcode is in opened state + closingState int // > 0 = on its way to be closed + elementStepNum int // step number in element + paramElements int // number of elements (name + value = 2) found first + openShortcodes map[unique.Handle[string]]bool // set of shortcodes in open state } // Shortcode syntax @@ -254,10 +256,10 @@ Loop: } default: l.backup() - word := string(l.input[l.start:l.pos]) + word := unique.Make(string(l.input[l.start:l.pos])) if l.closingState > 0 { if !l.openShortcodes[word] { - return l.errorf("closing tag for shortcode '%s' does not match start tag", word) + return l.errorf("closing tag for shortcode '%s' does not match start tag", word.Value()) } l.openShortcodes[word] = false lookForEnd = true @@ -266,7 +268,7 @@ Loop: } l.closingState = 0 - l.currShortcodeName = word + l.currShortcodeName = word.Value() l.elementStepNum++ if l.isInline { l.emit(tScNameInline)