blob: 6bbb11126257c8e4ee041a245e20a67139d93333 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package glob defines a globbing syntax and implements matching routines.
//
// Globs match a slash separated series of glob expressions.
//
// // Patterns:
// term ['/' term]*
// term:
// '*' matches any sequence of non-Separator characters
// '?' matches any single non-Separator character
// '[' [ '^' ] { character-range } ']'
// // Character classes (must be non-empty):
// c matches character c (c != '*', '?', '\\', '[', '/')
// '\\' c matches character c
// // Character-ranges:
// c matches character c (c != '\\', '-', ']')
// '\\' c matches character c
// lo '-' hi matches character c for lo <= c <= hi
//
// This package is DEPRECATED. Use v.io/v23/glob instead.
package glob
import (
"v.io/v23/glob"
)
// Glob represents a slash separated path glob pattern.
// This type is DEPRECATED. Use v.io/v23/glob.Glob instead.
type Glob struct {
*glob.Glob
}
// Parse returns a new Glob.
// This function is DEPRECATED.
func Parse(pattern string) (*Glob, error) {
g, err := glob.Parse(pattern)
return &Glob{g}, err
}
// Tail returns the suffix of g starting at the second element.
// This method is DEPRECATED.
func (g *Glob) Tail() *Glob {
return &Glob{g.Glob.Tail()}
}
// Finished returns true if the pattern cannot match anything.
// This method is DEPRECATED.
func (g *Glob) Finished() bool {
return g.Empty()
}
// Split returns the suffix of g starting at the path element corresponding to
// start.
// This method is DEPRECATED.
func (g *Glob) Split(start int) *Glob {
suffix := g
for i := start - 1; i >= 0; i-- {
suffix = suffix.Tail()
}
return suffix
}
// MatchInitialSegment tries to match segment against the initial element of g.
// Returns:
// matched, a boolean indicating whether the match was successful;
// exact, a boolean indicating whether segment matched a fixed string pattern;
// remainder, a Glob representing the unmatched remainder of g.
// This method is DEPRECATED.
func (g *Glob) MatchInitialSegment(segment string) (matched bool, exact bool, remainder *Glob) {
m := g.Head()
matched = m.Match(segment)
_, exact = m.FixedPrefix()
remainder = g.Tail()
return
}
// PartialMatch tries matching elems against part of a glob pattern.
// Returns:
// matched, a boolean indicating whether each element e_i of elems matches the
// (start + i)th element of the glob pattern;
// exact, a boolean indicating whether elems matched a fixed string pattern.
// <path> is considered an exact match for pattern <path>/...;
// remainder, a Glob representing the unmatched remainder of g. remainder will
// be empty if the pattern is completely matched.
//
// Note that if the glob is recursive elems can have more elements then
// the glob pattern and still get a true result.
// This method is DEPRECATED.
func (g *Glob) PartialMatch(start int, elems []string) (matched bool, exact bool, remainder *Glob) {
g = g.Split(start)
allExact := true
for i := 0; i < len(elems); i++ {
var matched, exact bool
if matched, exact, g = g.MatchInitialSegment(elems[i]); !matched {
return false, false, nil
} else if !exact {
allExact = false
}
}
return true, allExact, g
}
// SplitFixedElements returns the part of the glob pattern that contains only
// fixed elements, and the glob that follows it.
// This method is DEPRECATED.
func (g *Glob) SplitFixedElements() ([]string, *Glob) {
prefix, left := g.Glob.SplitFixedElements()
return prefix, &Glob{left}
}
// SplitFixedPrefix returns the part of the glob pattern that contains only
// fixed elements, and the glob that follows it.
// This method is DEPRECATED.
func (g *Glob) SplitFixedPrefix() ([]string, *Glob) {
return g.SplitFixedElements()
}