| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | package jsonimport (	"io")type State byteconst (	StateContent              State = 0	StateEscape               State = 1	StateDoubleQuote          State = 2	StateSingleQuote          State = 3	StateComment              State = 4	StateSlash                State = 5	StateMultilineComment     State = 6	StateMultilineCommentStar State = 7)type Reader struct {	io.Reader	state State}func (v *Reader) Read(b []byte) (int, error) {	n, err := v.Reader.Read(b)	if err != nil {		return n, err	}	p := b[:0]	for _, x := range b[:n] {		switch v.state {		case StateContent:			switch x {			case '"':				v.state = StateDoubleQuote				p = append(p, x)			case '\'':				v.state = StateSingleQuote				p = append(p, x)			case '\\':				v.state = StateEscape			case '#':				v.state = StateComment			case '/':				v.state = StateSlash			default:				p = append(p, x)			}		case StateEscape:			p = append(p, x)			v.state = StateContent		case StateDoubleQuote:			if x == '"' {				v.state = StateContent			}			p = append(p, x)		case StateSingleQuote:			if x == '\'' {				v.state = StateContent			}			p = append(p, x)		case StateComment:			if x == '\n' {				v.state = StateContent			}		case StateSlash:			switch x {			case '/':				v.state = StateComment			case '*':				v.state = StateMultilineComment			default:				p = append(p, '/', x)			}		case StateMultilineComment:			if x == '*' {				v.state = StateMultilineCommentStar			}		case StateMultilineCommentStar:			switch x {			case '/':				v.state = StateContent			case '*':				// Stay			default:				v.state = StateMultilineComment			}		default:			panic("Unknown state.")		}	}	return len(p), nil}
 |