parser

package
v0.0.0-...-7dc970a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2024 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package parser is an internal package that parses template source into an abstract syntax tree.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Errorf

func Errorf(loc Locatable, format string, a ...interface{}) *sourceLocError

Errorf creates a parser.Error.

Types

type ASTBlock

type ASTBlock struct {
	Token

	Body    []ASTNode   // Body is the nodes before the first branch
	Clauses []*ASTBlock // E.g. else and elseif w/in an if
	// contains filtered or unexported fields
}

ASTBlock represents a {% tag %}…{% endtag %}.

type ASTNode

type ASTNode interface {
	SourceLocation() SourceLoc
	SourceText() string
}

ASTNode is a node of an AST.

type ASTObject

type ASTObject struct {
	Token
	Expr expressions.Expression
}

ASTObject is an {{ object }} object.

type ASTRaw

type ASTRaw struct {
	Slices []string
	// contains filtered or unexported fields
}

ASTRaw holds the text between the start and end of a raw tag.

func (*ASTRaw) SourceLocation

func (n *ASTRaw) SourceLocation() SourceLoc

func (*ASTRaw) SourceText

func (n *ASTRaw) SourceText() string

type ASTSeq

type ASTSeq struct {
	Children []ASTNode
	// contains filtered or unexported fields
}

ASTSeq is a sequence of nodes.

func (*ASTSeq) SourceLocation

func (n *ASTSeq) SourceLocation() SourceLoc

func (*ASTSeq) SourceText

func (n *ASTSeq) SourceText() string

type ASTTag

type ASTTag struct {
	Token
}

ASTTag is a tag {% tag %} that is not a block start or end.

type ASTText

type ASTText struct {
	Token
}

ASTText is a text span, that is rendered verbatim.

type ASTTrim

type ASTTrim struct {
	TrimDirection
	// contains filtered or unexported fields
}

ASTTrim is a trim object.

func (*ASTTrim) SourceLocation

func (n *ASTTrim) SourceLocation() SourceLoc

func (*ASTTrim) SourceText

func (n *ASTTrim) SourceText() string

type BlockSyntax

type BlockSyntax interface {
	IsBlock() bool
	CanHaveParent(BlockSyntax) bool
	IsBlockEnd() bool
	IsBlockStart() bool
	IsClause() bool
	ParentTags() []string
	RequiresParent() bool
	TagName() string
}

BlockSyntax supplies the parser with syntax information about blocks.

type Config

type Config struct {
	expressions.Config
	Grammar Grammar
	Delims  []string
}

A Config holds configuration information for parsing and rendering.

func NewConfig

func NewConfig(g Grammar) Config

NewConfig creates a parser Config.

func (Config) Parse

func (c Config) Parse(source string, loc SourceLoc) (ASTNode, Error)

Parse parses a source template. It returns an AST root, that can be compiled and evaluated.

type Error

type Error interface {
	error
	Cause() error
	Path() string
	LineNumber() int
}

An Error is a syntax error during template parsing.

func WrapError

func WrapError(err error, loc Locatable) Error

WrapError wraps its argument in a parser.Error if this argument is not already a parser.Error and is not locatable.

type Grammar

type Grammar interface {
	BlockSyntax(string) (BlockSyntax, bool)
}

Grammar supplies the parser with syntax information about blocks.

type Locatable

type Locatable interface {
	SourceLocation() SourceLoc
	SourceText() string
}

A Locatable provides source location information for error reporting.

type SourceLoc

type SourceLoc struct {
	Pathname string
	LineNo   int
}

SourceLoc contains a Token's source location. Pathname is in the local file system; for example "dir/file.html" on Linux and macOS; "dir\file.html" on Windows.

func (SourceLoc) IsZero

func (s SourceLoc) IsZero() bool

IsZero returns a boolean indicating whether the location doesn't have a set path.

func (SourceLoc) String

func (s SourceLoc) String() string

type Token

type Token struct {
	Type      TokenType
	SourceLoc SourceLoc
	Name      string // Name is the tag name of a tag Chunk. E.g. the tag name of "{% if 1 %}" is "if".
	Args      string // Parameters is the tag arguments of a tag Chunk. E.g. the tag arguments of "{% if 1 %}" is "1".
	Source    string // Source is the entirety of the token, including the "{{", "{%", etc. markers.
}

A Token is an object {{ a.b }}, a tag {% if a>b %}, or a text chunk (anything outside of {{}} and {%%}.)

func Scan

func Scan(data string, loc SourceLoc, delims []string) (tokens []Token)

Scan breaks a string into a sequence of Tokens.

func (Token) SourceLocation

func (c Token) SourceLocation() SourceLoc

SourceLocation returns the token's source location, for use in error reporting.

func (Token) SourceText

func (c Token) SourceText() string

SourceText returns the token's source text, for use in error reporting.

func (Token) String

func (c Token) String() string

type TokenType

type TokenType int

TokenType is the type of a Chunk

const (
	// TextTokenType is the type of a text Chunk
	TextTokenType TokenType = iota
	// TagTokenType is the type of a tag Chunk "{%…%}"
	TagTokenType
	// ObjTokenType is the type of an object Chunk "{{…}}"
	ObjTokenType
	// TrimLeftTokenType is the type of a left trim tag "-"
	TrimLeftTokenType
	// TrimRightTokenType is the type of a right trim tag "-"
	TrimRightTokenType
)

func (TokenType) String

func (i TokenType) String() string

type TrimDirection

type TrimDirection int

TrimDirection determines the trim direction of an ASTTrim object.

const (
	Left TrimDirection = iota
	Right
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL