forked from External/ergo
fix #1003
This commit is contained in:
parent
21958768d8
commit
be0dedf260
12 changed files with 199 additions and 437 deletions
7
vendor/github.com/goshuirc/irc-go/ircmatch/doc.go
generated
vendored
7
vendor/github.com/goshuirc/irc-go/ircmatch/doc.go
generated
vendored
|
|
@ -1,7 +0,0 @@
|
|||
// written by Daniel Oaks <daniel@danieloaks.net>
|
||||
// released under the ISC license
|
||||
|
||||
/*
|
||||
Package ircmatch handles matching IRC strings with the traditional glob-like syntax.
|
||||
*/
|
||||
package ircmatch
|
||||
57
vendor/github.com/goshuirc/irc-go/ircmatch/ircmatch.go
generated
vendored
57
vendor/github.com/goshuirc/irc-go/ircmatch/ircmatch.go
generated
vendored
|
|
@ -1,57 +0,0 @@
|
|||
package ircmatch
|
||||
|
||||
import enfa "github.com/goshuirc/e-nfa"
|
||||
|
||||
// Matcher represents an object that can match IRC strings.
|
||||
type Matcher struct {
|
||||
internalENFA *enfa.ENFA
|
||||
}
|
||||
|
||||
// MakeMatch creates a Matcher.
|
||||
func MakeMatch(globTemplate string) Matcher {
|
||||
var newmatch Matcher
|
||||
|
||||
// assemble internal enfa
|
||||
newmatch.internalENFA = enfa.NewENFA(0, false)
|
||||
|
||||
var currentState int
|
||||
var lastWasStar bool
|
||||
for _, char := range globTemplate {
|
||||
if char == '*' {
|
||||
if lastWasStar {
|
||||
continue
|
||||
}
|
||||
newmatch.internalENFA.AddTransition(currentState, "*", currentState)
|
||||
lastWasStar = true
|
||||
continue
|
||||
} else if char == '?' {
|
||||
newmatch.internalENFA.AddState(currentState+1, false)
|
||||
newmatch.internalENFA.AddTransition(currentState, "?", currentState+1)
|
||||
currentState++
|
||||
} else {
|
||||
newmatch.internalENFA.AddState(currentState+1, false)
|
||||
newmatch.internalENFA.AddTransition(currentState, string(char), currentState+1)
|
||||
currentState++
|
||||
}
|
||||
|
||||
lastWasStar = false
|
||||
}
|
||||
|
||||
// create end state
|
||||
newmatch.internalENFA.AddState(currentState+1, true)
|
||||
newmatch.internalENFA.AddTransition(currentState, "", currentState+1)
|
||||
|
||||
return newmatch
|
||||
}
|
||||
|
||||
// Match returns true if the given string matches this glob.
|
||||
func (menfa *Matcher) Match(search string) bool {
|
||||
var searchChars []string
|
||||
for _, char := range search {
|
||||
searchChars = append(searchChars, string(char))
|
||||
}
|
||||
|
||||
isMatch := menfa.internalENFA.VerifyInputs(searchChars)
|
||||
menfa.internalENFA.Reset()
|
||||
return isMatch
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue