56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
|
package nginx
|
||
|
|
||
|
// LineType enumerates available line types
|
||
|
type LineType byte
|
||
|
|
||
|
const (
|
||
|
// NONE is the default line type (invalid syntax)
|
||
|
NONE LineType = iota
|
||
|
// COMMENT represents a #-comment
|
||
|
COMMENT
|
||
|
// COLONCOMMENT represents a ;-comment
|
||
|
COLONCOMMENT
|
||
|
// ASSIGNMENT line
|
||
|
ASSIGNMENT
|
||
|
// INCLUDE line
|
||
|
INCLUDE
|
||
|
// SECTION start
|
||
|
SECTION
|
||
|
// SECTIONEND line '}'
|
||
|
SECTIONEND
|
||
|
)
|
||
|
|
||
|
// Line represents a meaningful line
|
||
|
type Line struct {
|
||
|
// Type of line
|
||
|
Type LineType
|
||
|
|
||
|
// Components of the line
|
||
|
Components []string
|
||
|
|
||
|
// Lines children of the current section (nil if not a section)
|
||
|
Lines []*Line
|
||
|
}
|
||
|
|
||
|
// Section returns the section with a given name *directly*
|
||
|
// inside the current line ; nil is returned if no match found
|
||
|
func (l *Line) Section(name string) *Line {
|
||
|
for _, elem := range l.Lines {
|
||
|
if elem.Type == SECTION && elem.Components[0] == name {
|
||
|
return elem
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Get returns a pointer to the assignment line the given name as key
|
||
|
// *directly* inside the current line ; nil is returned if no match found
|
||
|
func (l *Line) Get(name string) *Line {
|
||
|
for _, elem := range l.Lines {
|
||
|
if elem.Type == ASSIGNMENT && elem.Components[0] == name {
|
||
|
return elem
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|