parseutil

package
v1.6.0 Latest Latest
Warning

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

Go to latest
Published: Dec 12, 2022 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ExtraRunes = "_-~.%@&?!=#+:^" + "(){}[]<>" + "\\/" + " "
View Source
var NoMatchErr = errors.New("no match")

Functions

func AbsFilenameToUrl

func AbsFilenameToUrl(filename string) (string, error)

func AddEscapes

func AddEscapes(str string, escape rune, escapeRunes string) string

func CleanMultiplePathSeps

func CleanMultiplePathSeps(str string, sep rune) string

func ContainsRune added in v1.3.7

func ContainsRune(rs []rune, ru rune) bool

func CtxErrorStr added in v1.3.3

func CtxErrorStr(rd iorw.ReaderAt, filename string, pos int, msg string, contextSize int) string

func CtxString added in v1.3.3

func CtxString(rd iorw.ReaderAt, pos int, contextSize int) (string, error)

func DetectEnvVar

func DetectEnvVar(str, name string) bool

func EscapeFilename

func EscapeFilename(str string) string

func ExpandIndexEscape

func ExpandIndexEscape(r iorw.ReaderAt, i int, truth bool, fn func(rune) bool, escape rune) int

func ExpandIndexesEscape

func ExpandIndexesEscape(rd iorw.ReaderAt, index int, truth bool, fn func(rune) bool, escape rune) (int, int)

func ExpandLastIndexEscape

func ExpandLastIndexEscape(r iorw.ReaderAt, i int, truth bool, fn func(rune) bool, escape rune) int

func ImproveExpandIndexEscape

func ImproveExpandIndexEscape(r iorw.ReaderAt, i int, escape rune) int

func IndexLineColumn

func IndexLineColumn(rd iorw.ReaderAt, index int) (int, int, error)

Returned line/col values are one-based.

func IndexLineColumn2 added in v1.3.7

func IndexLineColumn2(b []byte, index int) (int, int)

Returned line/col values are one-based.

func IsQuoted added in v1.3.7

func IsQuoted(s string) bool

func IsScFatalError added in v1.6.0

func IsScFatalError(err error) bool

func LineColumnIndex

func LineColumnIndex(rd iorw.ReaderAt, line, column int) (int, error)

Line/col args are one-based.

func ParseFields added in v1.3.1

func ParseFields(s string, fieldSep rune) ([]string, error)

func RemoveEscapes

func RemoveEscapes(str string, escape rune) string

func RemoveEscapes2 added in v1.3.7

func RemoveEscapes2(rs []rune, escapable []rune, escape rune) []rune

func RemoveEscapesEscapable

func RemoveEscapesEscapable(str string, escape rune, escapable string) string

func RemoveFilenameEscapes

func RemoveFilenameEscapes(f string, escape, pathSep rune) string

func RunesExcept

func RunesExcept(runes, except string) string

func RunesQuote added in v1.3.7

func RunesQuote(rs []rune) (rune, error)

func SurroundingString added in v1.3.7

func SurroundingString(b []byte, k int, pad int) string

func TrimLineSpaces

func TrimLineSpaces(str string) string

Useful to compare src code lines.

func TrimLineSpaces2 added in v1.3.1

func TrimLineSpaces2(str string, pre string) string

func UnquoteString added in v1.3.7

func UnquoteString(s string, esc rune) (string, error)

removes escapes runes (keeping the escaped) if quoted

func UnquoteStringBs added in v1.3.7

func UnquoteStringBs(s string) (string, error)

unquote string with backslash as escape

func UrlToAbsFilename

func UrlToAbsFilename(url2 string) (string, error)

func VersionLessThan added in v1.3.1

func VersionLessThan(a, b string) bool

func VersionOrdinal added in v1.3.1

func VersionOrdinal(version string) string

constructs a byte array (returned as a string) with the count of sequential digits to be able to compare "1.9"<"1.10"

Types

type FilePos

type FilePos struct {
	Filename     string
	Offset, Len  int // length after offset for a range
	Line, Column int // bigger than zero to be considered
}

func (*FilePos) HasOffset

func (fp *FilePos) HasOffset() bool

type RuneRange added in v1.6.0

type RuneRange [2]rune // assume [0]<[1]

func (RuneRange) HasRune added in v1.6.0

func (rr RuneRange) HasRune(ru rune) bool

func (RuneRange) IntersectsRange added in v1.6.0

func (rr RuneRange) IntersectsRange(rr2 RuneRange) bool

func (RuneRange) String added in v1.6.0

func (rr RuneRange) String() string

type RuneRanges added in v1.6.0

type RuneRanges []RuneRange

func (RuneRanges) HasRune added in v1.6.0

func (rrs RuneRanges) HasRune(ru rune) bool

type ScFatalError added in v1.6.0

type ScFatalError struct {
	ScPosError
}

type ScFn added in v1.6.0

type ScFn func() error

type ScMatch added in v1.6.0

type ScMatch struct {
	P *ScParse
	// contains filtered or unexported fields
}

scanner match utility funcs

func (*ScMatch) And added in v1.6.0

func (m *ScMatch) And(fns ...ScFn) error

func (*ScMatch) Digit added in v1.6.0

func (m *ScMatch) Digit() error

func (*ScMatch) Digits added in v1.6.0

func (m *ScMatch) Digits() error

func (*ScMatch) DoubleQuotedString added in v1.6.0

func (m *ScMatch) DoubleQuotedString(maxLen int) error

func (*ScMatch) Eof added in v1.6.0

func (m *ScMatch) Eof() bool

func (*ScMatch) EscapeAny added in v1.6.0

func (m *ScMatch) EscapeAny(escape rune) error

func (*ScMatch) Float added in v1.6.0

func (m *ScMatch) Float() error

func (*ScMatch) Integer added in v1.6.0

func (m *ScMatch) Integer() error

func (*ScMatch) Letter added in v1.6.0

func (m *ScMatch) Letter() error

func (*ScMatch) NRunes added in v1.6.0

func (m *ScMatch) NRunes(n int) error

func (*ScMatch) Optional added in v1.6.0

func (m *ScMatch) Optional(fn ScFn) error

func (*ScMatch) Or added in v1.6.0

func (m *ScMatch) Or(fns ...ScFn) error

func (*ScMatch) QuotedString added in v1.6.0

func (m *ScMatch) QuotedString() error

func (*ScMatch) QuotedString2 added in v1.6.0

func (m *ScMatch) QuotedString2(esc rune, maxLen1, maxLen2 int) error

allows escaped runes (if esc!=0)

func (*ScMatch) RegexpFromStart added in v1.6.0

func (m *ScMatch) RegexpFromStart(res string, cache bool, maxLen int) error

func (*ScMatch) RegexpFromStartCached added in v1.6.0

func (m *ScMatch) RegexpFromStartCached(res string, maxLen int) error

func (*ScMatch) Rune added in v1.6.0

func (m *ScMatch) Rune(ru rune) error

func (*ScMatch) RuneAny added in v1.6.0

func (m *ScMatch) RuneAny(rs []rune) error

func (*ScMatch) RuneAnyNot added in v1.6.0

func (m *ScMatch) RuneAnyNot(rs []rune) error

func (*ScMatch) RuneFn added in v1.6.0

func (m *ScMatch) RuneFn(fn func(rune) bool) error

func (*ScMatch) RuneFnLoop added in v1.6.0

func (m *ScMatch) RuneFnLoop(fn func(rune) bool) error

one or more

func (*ScMatch) RuneRange added in v1.6.0

func (m *ScMatch) RuneRange(rr RuneRange) error

func (*ScMatch) RuneRangeNot added in v1.6.0

func (m *ScMatch) RuneRangeNot(rr RuneRange) error

func (*ScMatch) RuneSequence added in v1.6.0

func (m *ScMatch) RuneSequence(seq []rune) error

func (*ScMatch) RuneSequenceMid added in v1.6.0

func (m *ScMatch) RuneSequenceMid(rs []rune) error

func (*ScMatch) RunesAndRuneRanges added in v1.6.0

func (m *ScMatch) RunesAndRuneRanges(rs []rune, rrs RuneRanges) error

func (*ScMatch) RunesAndRuneRangesNot added in v1.6.0

func (m *ScMatch) RunesAndRuneRangesNot(rs []rune, rrs RuneRanges) error

func (*ScMatch) Section added in v1.6.0

func (m *ScMatch) Section(open, close string, esc rune, failOnNewline bool, maxLen int, eofClose bool) error

match opened/closed sections.

func (*ScMatch) Sequence added in v1.6.0

func (m *ScMatch) Sequence(seq string) error

func (*ScMatch) SequenceMid added in v1.6.0

func (m *ScMatch) SequenceMid(seq string) error

func (*ScMatch) Spaces added in v1.6.0

func (m *ScMatch) Spaces(includeNL bool, escape rune) error

func (*ScMatch) SpacesExcludingNL added in v1.6.0

func (m *ScMatch) SpacesExcludingNL() bool

func (*ScMatch) SpacesIncludingNL added in v1.6.0

func (m *ScMatch) SpacesIncludingNL() bool

func (*ScMatch) StringSection added in v1.6.0

func (m *ScMatch) StringSection(openclose string, esc rune, failOnNewline bool, maxLen int, eofClose bool) error

func (*ScMatch) ToNLExcludeOrEnd added in v1.6.0

func (m *ScMatch) ToNLExcludeOrEnd(esc rune) int

func (*ScMatch) ToNLIncludeOrEnd added in v1.6.0

func (m *ScMatch) ToNLIncludeOrEnd(esc rune) int

type ScParse added in v1.6.0

type ScParse struct {
	M *ScMatch
	// contains filtered or unexported fields
}

scanner parse utility funcs

func (*ScParse) And added in v1.6.0

func (p *ScParse) And(fns ...ScFn) ScFn

func (*ScParse) DoubleQuotedString added in v1.6.0

func (p *ScParse) DoubleQuotedString(maxLen int) ScFn

func (*ScParse) EscapeAny added in v1.6.0

func (p *ScParse) EscapeAny(esc rune) ScFn

func (*ScParse) FatalOnErr added in v1.6.0

func (p *ScParse) FatalOnErr(str string, fn ScFn) ScFn

func (*ScParse) Float added in v1.6.0

func (p *ScParse) Float() ScFn

func (*ScParse) GetCacheFunc added in v1.6.0

func (p *ScParse) GetCacheFunc(name string) *ScParseCacheFn

WARNING: best used when there are no closure variables in the function, otherwise the variables will contain values of previous runs

func (*ScParse) Integer added in v1.6.0

func (p *ScParse) Integer() ScFn

func (*ScParse) Loop added in v1.6.0

func (p *ScParse) Loop(fn, sep ScFn, lastSep bool) ScFn

func (*ScParse) Loop2 added in v1.6.0

func (p *ScParse) Loop2(fn ScFn) ScFn

func (*ScParse) NRunes added in v1.6.0

func (p *ScParse) NRunes(n int) ScFn

func (*ScParse) Optional added in v1.6.0

func (p *ScParse) Optional(fn ScFn) ScFn

func (*ScParse) OptionalSpaces added in v1.6.0

func (p *ScParse) OptionalSpaces() ScFn

func (*ScParse) Or added in v1.6.0

func (p *ScParse) Or(fns ...ScFn) ScFn

func (*ScParse) QuotedString2 added in v1.6.0

func (p *ScParse) QuotedString2(esc rune, maxLen1, maxLen2 int) ScFn

func (*ScParse) RegexpFromStartCached added in v1.6.0

func (p *ScParse) RegexpFromStartCached(res string, maxLen int) ScFn

func (*ScParse) Rune added in v1.6.0

func (p *ScParse) Rune(ru rune) ScFn

func (*ScParse) RuneAny added in v1.6.0

func (p *ScParse) RuneAny(rs []rune) ScFn

func (*ScParse) RuneFn added in v1.6.0

func (p *ScParse) RuneFn(fn func(rune) bool) ScFn

func (*ScParse) Sequence added in v1.6.0

func (p *ScParse) Sequence(seq string) ScFn

func (*ScParse) SequenceMid added in v1.6.0

func (p *ScParse) SequenceMid(seq string) ScFn

func (*ScParse) Spaces added in v1.6.0

func (p *ScParse) Spaces(includeNL bool, escape rune) ScFn

type ScParseCacheFn added in v1.6.0

type ScParseCacheFn struct {
	PreRun func()
	Data   func() any
	// contains filtered or unexported fields
}

scanner parse cache func

func (*ScParseCacheFn) IsSet added in v1.6.0

func (cf *ScParseCacheFn) IsSet() bool

func (*ScParseCacheFn) Run added in v1.6.0

func (cf *ScParseCacheFn) Run() error

func (*ScParseCacheFn) Set added in v1.6.0

func (cf *ScParseCacheFn) Set(fn ScFn)

type ScPosError added in v1.6.0

type ScPosError struct {
	Err error
	Pos int
}

error with position

func (*ScPosError) Error added in v1.6.0

func (e *ScPosError) Error() string

type ScValueFn added in v1.6.0

type ScValueFn func() (any, error)

type ScValueKeeper added in v1.6.0

type ScValueKeeper struct {
	Value any
	// contains filtered or unexported fields
}

func (*ScValueKeeper) BytesOrNil added in v1.6.0

func (vk *ScValueKeeper) BytesOrNil() []byte

func (*ScValueKeeper) Int added in v1.6.0

func (vk *ScValueKeeper) Int() (int, error)

func (*ScValueKeeper) IntOrZero added in v1.6.0

func (vk *ScValueKeeper) IntOrZero() int

func (*ScValueKeeper) KeepBytes added in v1.6.0

func (vk *ScValueKeeper) KeepBytes(fn ScFn) ScFn

func (*ScValueKeeper) KeepValue added in v1.6.0

func (vk *ScValueKeeper) KeepValue(fn ScValueFn) ScFn

func (*ScValueKeeper) Reset added in v1.6.0

func (vk *ScValueKeeper) Reset()

func (*ScValueKeeper) String added in v1.6.0

func (vk *ScValueKeeper) String() string

func (*ScValueKeeper) StringOptional added in v1.6.0

func (vk *ScValueKeeper) StringOptional() string

type Scanner added in v1.3.3

type Scanner struct {
	Src []byte
	Pos int
	M   ScMatch
	P   ScParse

	Reverse     bool // read direction
	Debug       bool
	ErrFilename string // used for errors only
}

not safe to parse concurrently (match/parse uses closures)

func NewScanner added in v1.3.3

func NewScanner() *Scanner

func (*Scanner) KeepPos added in v1.6.0

func (sc *Scanner) KeepPos() ScannerPos

func (*Scanner) NewValueKeeper added in v1.6.0

func (sc *Scanner) NewValueKeeper() *ScValueKeeper

func (*Scanner) PeekRune added in v1.3.3

func (sc *Scanner) PeekRune() (rune, error)

func (*Scanner) ReadRune added in v1.3.3

func (sc *Scanner) ReadRune() (rune, error)

func (*Scanner) RestorePosOnErr added in v1.6.0

func (sc *Scanner) RestorePosOnErr(fn func() error) error

func (*Scanner) SetSrc added in v1.6.0

func (sc *Scanner) SetSrc(src []byte)

func (*Scanner) SrcError added in v1.6.0

func (sc *Scanner) SrcError(err error) error

func (*Scanner) SrcError2 added in v1.6.0

func (sc *Scanner) SrcError2(err error, maxLen int) error

func (*Scanner) SrcErrorf added in v1.6.0

func (sc *Scanner) SrcErrorf(f string, args ...any) error

type ScannerPos added in v1.6.0

type ScannerPos struct {
	Pos int
	// contains filtered or unexported fields
}

func (*ScannerPos) Bytes added in v1.6.0

func (sp *ScannerPos) Bytes() []byte

func (*ScannerPos) IsEmpty added in v1.6.0

func (sp *ScannerPos) IsEmpty() bool

func (*ScannerPos) Len added in v1.6.0

func (sp *ScannerPos) Len() int

func (*ScannerPos) Restore added in v1.6.0

func (sp *ScannerPos) Restore()

func (*ScannerPos) StartEnd added in v1.6.0

func (sp *ScannerPos) StartEnd() (int, int)

type ScannerR added in v1.6.0

type ScannerR struct {
	*Scanner
	R iorw.ReaderAt
}

scanner wrapper to be use with iorw.ReaderAt. Needed because the scanner deals with a []byte src, and the position starts at zero. While the reader first position is at r.Min(), where reading a position less then r.Min() gives error.

func NewScannerR added in v1.6.0

func NewScannerR(r iorw.ReaderAt, index int) *ScannerR

func (*ScannerR) KeepPos added in v1.6.0

func (sc *ScannerR) KeepPos() ScannerRPos

func (*ScannerR) Pos added in v1.6.0

func (sc *ScannerR) Pos() int

func (*ScannerR) SetPos added in v1.6.0

func (sc *ScannerR) SetPos(v int)

func (*ScannerR) SetSrc added in v1.6.0

func (sc *ScannerR) SetSrc(donotuse int)

func (*ScannerR) Src added in v1.6.0

func (sc *ScannerR) Src(donotuse int)

type ScannerRPos added in v1.6.0

type ScannerRPos struct {
	Pos int
	// contains filtered or unexported fields
}

func (*ScannerRPos) Bytes added in v1.6.0

func (sp *ScannerRPos) Bytes() []byte

func (*ScannerRPos) IsEmpty added in v1.6.0

func (sp *ScannerRPos) IsEmpty() bool

func (*ScannerRPos) Restore added in v1.6.0

func (sp *ScannerRPos) Restore()

func (*ScannerRPos) StartEnd added in v1.6.0

func (sp *ScannerRPos) StartEnd() (int, int)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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