package parser

// Token types for PML parsing
type TokenType int

const (
	TokenError TokenType = iota
	TokenOpenTag
	TokenCloseTag
	TokenSelfCloseTag
	TokenText
	TokenComment
	TokenEOF
)

// Represents a parsed token with string ranges instead of copies
type Token struct {
	Type       TokenType
	TagStart   int // Start index in input for tag name
	TagEnd     int // End index in input for tag name
	TextStart  int // Start index for text content
	TextEnd    int // End index for text content
	Attributes map[string]string
	Line       int
	Col        int
}

// Gets tag name from input (avoids allocation until needed)
func (t *Token) Tag(input string) string {
	if t.TagStart >= 0 && t.TagEnd > t.TagStart {
		return input[t.TagStart:t.TagEnd]
	}
	return ""
}

// Gets text content from input
func (t *Token) Text(input string) string {
	if t.TextStart >= 0 && t.TextEnd > t.TextStart {
		return input[t.TextStart:t.TextEnd]
	}
	return ""
}
