code: func lexIdentifierInShortcode(l *pageLexer) stateFunc {
  	lookForEnd := false
  Loop:
  	for {
  		switch r := l.next(); {
  		case isAlphaNumericOrHyphen(r):
  		// Allow forward slash inside names to make it possible to create namespaces.
  		case r == '/':
  		case r == '.':
  			l.isInline = l.hasPrefix(inlineIdentifier)
  			if !l.isInline {
  				return l.errorf("period in shortcode name only allowed for inline identifiers")
  			}
  		default:
  			l.backup()
  			word := string(l.input[l.start:l.pos])
  			if l.closingState > 0 && !l.openShortcodes[word] {
  				return l.errorf("closing tag for shortcode '%s' does not match start tag", word)
  			} else if l.closingState > 0 {
  				l.openShortcodes[word] = false
  				lookForEnd = true
  			}
  
  			l.closingState = 0
  			l.currShortcodeName = word
  			l.openShortcodes[word] = true
  			l.elementStepNum++
  			if l.isInline {
  				l.emit(tScNameInline)
  			} else {
  				l.emit(tScName)
  			}
  			break Loop
  		}
  	}
  
  	if lookForEnd {
  		return lexEndOfShortcode
  	}
  	return lexInsideShortcode
  }
docs: // scans an alphanumeric inside shortcode