diff options
Diffstat (limited to 'core/parse/parse.go')
-rw-r--r-- | core/parse/parse.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/core/parse/parse.go b/core/parse/parse.go new file mode 100644 index 000000000..faef36c28 --- /dev/null +++ b/core/parse/parse.go @@ -0,0 +1,32 @@ +// Package parse provides facilities for parsing configuration files. +package parse + +import "io" + +// ServerBlocks parses the input just enough to organize tokens, +// in order, by server block. No further parsing is performed. +// If checkDirectives is true, only valid directives will be allowed +// otherwise we consider it a parse error. Server blocks are returned +// in the order in which they appear. +func ServerBlocks(filename string, input io.Reader, checkDirectives bool) ([]ServerBlock, error) { + p := parser{Dispenser: NewDispenser(filename, input)} + p.checkDirectives = checkDirectives + blocks, err := p.parseAll() + return blocks, err +} + +// allTokens lexes the entire input, but does not parse it. +// It returns all the tokens from the input, unstructured +// and in order. +func allTokens(input io.Reader) (tokens []token) { + l := new(lexer) + l.load(input) + for l.next() { + tokens = append(tokens, l.token) + } + return +} + +// ValidDirectives is a set of directives that are valid (unordered). Populated +// by config package's init function. +var ValidDirectives = make(map[string]struct{}) |