if toks[0] == '?'
console.log "Lazy repeaters may provide incorrect results"
toks.shift()
gens.push(generator.repeat(gens.pop(), 0, 10))
else
gens.push(generator.repeat(gens.pop(), 0, 100))
else if token is '?'
gens.push(generator.repeat(gens.pop(), 0, 1))
else if token is '+'
if toks[0] == '?'
console.log "Lazy repeaters may provide incorrect results"
toks.shift()
gens.push(generator.repeat(gens.pop(), 1, 10))
else
gens.push(generator.repeat(gens.pop(), 1, 100))
else if token is '|'
return qc.oneOf(qc.string.concat(gens), generatorForPattern(toks))
else if token is '['
charachters = []
negative = false
loop
char = toks.shift()
if char == ']'
break
else if char is '^'
negative = true
else if char is '\\'
charachters = charachters.concat(handleClass(toks.shift()))
else if char is '-'
charachters = charachters.concat(makeRange(charachters.pop(), toks.shift(), caseInsensitive))
else
charachters.push(char)
if negative
gens.push(qc.pick(makeComplimentaryRange(charachters)))
else
gens.push(qc.pick(charachters))
else if token is ')'
break
else if token is '\\'
chars = handleClass(toks.shift(), captures, captureLevel)
if typeof chars is 'function'
gens.push(chars)
else
gens.push(qc.pick(chars))
else if token is '{'
subtoken = toks.shift()
str = ''
until subtoken == ',' || subtoken == '}'
str += subtoken
subtoken = toks.shift()
from = parseInt(str, 10)
if subtoken == '}'
to = from
else
str = ''
subtoken = toks.shift()
if subtoken == '}'
to = 100
else
until subtoken == '}'
str += subtoken
subtoken = toks.shift()
to = parseInt(str, 10)
gens.push(generator.repeat(gens.pop(), from, to))
else if token is '('
if toks[0] == '?' && (toks[1] == ':' || toks[1] == '=')
toks.shift()
toks.shift()
gens.push(generatorForPattern(toks, caseInsensitive, captures, captureLevel))
else if toks[0] == '?' && toks[1] == '!'
toks.shift()
toks.shift()
throw "Negative lookahead is not supported."
else
gens.push(capture(generatorForPattern(toks, caseInsensitive, captures, captureLevel + 1), captures, captureLevel))
else
gens.push(-> token)
qc.string.concat(gens)
qc.string.matching = (pattern) ->
toks = pattern.source.split('')
captures = {}
patternGenerator = capture(generatorForPattern(toks, pattern.ignoreCase, captures, 1), captures, 0)
if pattern.global && !captures.isHookedFromStart && !captures.isHookedFromEnd
generator.repeat(qc.oneOf(patternGenerator, qc.string), 1, 10)
else if !captures.isHookedFromStart && !captures.isHookedFromEnd
qc.string.concat([qc.string, patternGenerator, qc.string])
else if !captures.isHookedFromStart && captures.isHookedFromEnd
qc.string.concat([qc.string, patternGenerator])
else if captures.isHookedFromStart && !captures.isHookedFromEnd
qc.string.concat([patternGenerator, qc.string])
else
patternGenerator