func (ctx Context) String() string {
	switch ctx {
	case ContextText:
		return "text"
	case ContextHTML:
		return "HTML"
	case ContextCSS:
		return "CSS"
	case ContextJS:
		return "JavaScript"
	case ContextJSON:
		return "JSON"
	case ContextMarkdown:
		return "Markdown"
	case ContextTag:
		return "tag"
	case ContextQuotedAttr:
		return "quoted attribute"
	case ContextUnquotedAttr:
		return "unquoted attribute"
	case ContextCSSString:
		return "CSS string"
	case ContextJSString:
		return "JavaScript string"
	case ContextJSONString:
		return "JSON string"
	case ContextTabCodeBlock:
		return "tab code block"
	case ContextSpacesCodeBlock:
		return "spaces code block"
	}
	panic("invalid context")
}
String returns the name of the context.
package ast
import (
	"fmt"
	"reflect"
	"strconv"
	"strings"
)
var expandedPrint = false
type OperatorType int
const (
	OperatorEqual          OperatorType = iota  
	OperatorNotEqual                            
	OperatorLess                                
	OperatorLessEqual                           
	OperatorGreater                             
	OperatorGreaterEqual                        
	OperatorNot                                 
	OperatorBitAnd                              
	OperatorBitOr                               
	OperatorAnd                                 
	OperatorOr                                  
	OperatorAddition                            
	OperatorSubtraction                         
	OperatorMultiplication                      
	OperatorDivision                            
	OperatorModulo                              
	OperatorXor                                 
	OperatorAndNot                              
	OperatorLeftShift                           
	OperatorRightShift                          
	OperatorContains                            
	OperatorNotContains                         
	OperatorReceive                             
	OperatorAddress                             
	OperatorPointer                             
	OperatorExtendedAnd                         
	OperatorExtendedOr                          
	OperatorExtendedNot                         
)
func (op OperatorType) String() string {
	return []string{"==", "!=", "<", "<=", ">", ">=", "!", "&", "|", "&&", "||",
		"+", "-", "*", "/", "%", "^", "&^", "<<", ">>", "contains", "not contains",
		"<-", "&", "*", "and", "or", "not", "", ""}[op]
}
type AssignmentType int
const (
	AssignmentSimple         AssignmentType = iota  
	AssignmentDeclaration                           
	AssignmentAddition                              
	AssignmentSubtraction                           
	AssignmentMultiplication                        
	AssignmentDivision                              
	AssignmentModulo                                
	AssignmentAnd                                   
	AssignmentOr                                    
	AssignmentXor                                   
	AssignmentAndNot                                
	AssignmentLeftShift                             
	AssignmentRightShift                            
	AssignmentIncrement                             
	AssignmentDecrement                             
)
type Format int
const (
	FormatText Format = iota
	FormatHTML
	FormatCSS
	FormatJS
	FormatJSON
	FormatMarkdown
)
func (format Format) String() string {
	switch format {
	case FormatText:
		return "text"
	case FormatHTML:
		return "HTML"
	case FormatCSS:
		return "CSS"
	case FormatJS:
		return "JavaScript"
	case FormatJSON:
		return "JSON"
	case FormatMarkdown:
		return "Markdown"
	}
	panic("invalid format")
}
type Context int
const (
	ContextText Context = iota
	ContextHTML
	ContextCSS
	ContextJS
	ContextJSON
	ContextMarkdown
	ContextTag
	ContextQuotedAttr
	ContextUnquotedAttr
	ContextCSSString
	ContextJSString
	ContextJSONString
	ContextTabCodeBlock
	ContextSpacesCodeBlock
)