You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: lex.go
    path of file: ./repos/tegola/vendor/github.com/BurntSushi/toml
    
    the code of the file until where you have to start completion: package toml

import (
	"fmt"
	"reflect"
	"runtime"
	"strings"
	"unicode"
	"unicode/utf8"
)

type itemType int

const (
	itemError itemType = iota
	itemNIL            // used in the parser to indicate no type
	itemEOF
	itemText
	itemString
	itemRawString
	itemMultilineString
	itemRawMultilineString
	itemBool
	itemInteger
	itemFloat
	itemDatetime
	itemArray // the start of an array
	itemArrayEnd
	itemTableStart
	itemTableEnd
	itemArrayTableStart
	itemArrayTableEnd
	itemKeyStart
	itemKeyEnd
	itemCommentStart
	itemInlineTableStart
	itemInlineTableEnd
)

const (
	eof              = 0
	comma            = ','
	tableStart       = '['
	tableEnd         = ']'
	arrayTableStart  = '['
	arrayTableEnd    = ']'
	tableSep         = '.'
	keySep           = '='
	arrayStart       = '['
	arrayEnd         = ']'
	commentStart     = '#'
	stringStart      = '"'
	stringEnd        = '"'
	rawStringStart   = '\''
	rawStringEnd     = '\''
	inlineTableStart = '{'
	inlineTableEnd   = '}'
)

type stateFn func(lx *lexer) stateFn

type lexer struct {
	input string
	start int
	pos   int
	line  int
	state stateFn
	items chan item

    
func lexMultilineRawString(lx *lexer) stateFn {
	r := lx.next()
	switch r {
	case eof:
		return lx.errorf(`unexpected EOF; expected "'''"`)
	case '\r':
		if lx.peek() != '\n' {
			return lx.errorf("control characters are not allowed inside strings: '0x%02x'", r)
		}
		return lexMultilineRawString
	case rawStringEnd:
		/// Found ' → try to read two more ''.
		if lx.accept(rawStringEnd) {
			if lx.accept(rawStringEnd) {
				/// Peek ahead: the string can contain ' and '', including at the
				/// end: '''str'''''
				/// 6 or more at the end, however, is an error.
				if lx.peek() == rawStringEnd {
					/// Check if we already lexed 5 's; if so we have 6 now, and
					/// that's just too many man!
					if strings.HasSuffix(lx.current(), "'''''") {
						return lx.errorf(`unexpected "''''''"`)
					}
					lx.backup()
					lx.backup()
					return lexMultilineRawString
				}

				lx.backup() /// backup: don't include the ''' in the item.
				lx.backup()
				lx.backup()
				lx.emit(itemRawMultilineString)
				lx.next() /// Read over ''' again and discard it.
				lx.next()
				lx.next()
				lx.ignore()
				return lx.pop()
			}
			lx.backup()
		}
	}

	if isControl(r) {
		return lx.errorf("control characters are not allowed inside strings: '0x%02x'", r)
	}
	return lexMultilineRawString
}