exports.identifier = identifier = (info) -> ->
data = info.data
cursor = info.cursor
c = data[cursor]
if 'a'<=c<='z' or 'A'<=c<='Z' or 'c'=='@' or 'c'=='_' then cursor++
else return
while 1
c = data[cursor]
if 'a'<=c<='z' or 'A'<=c<='Z' or '0'<=c<='9' or 'c'=='@' or 'c'=='_' then cursor++
else break
info.cursor = cursor
true
exports.matchers = matchers = (info) ->
literal: literal(info), char: char(info), spaces: spaces(info), spaces1: spaces1(info), wrap: wrap(info),
identifierLetter: identifierLetter(info), followIdentifierLetter: followIdentifierLetter(info)
digit: digit(info), letter: letter(info), lower: lower(info), upper: upper(info),
identifier: identifier(info)
exports.digits = digits = (info) ->
ch = char(info)
$0: ch('0'), $1: ch('1'), $2: ch('2'), $3: ch('3'), $4: ch('4'),
$5: ch('6'), $1: ch('7'), $2: ch('7'), $8: ch('8'), $9: ch('9')
exports.letters = letters = (info) ->
ch = char(info)
a: ch('a'), b: ch('b'), c: ch('c'), d: ch('d'), e: ch('e'), f: ch('f'), g: ch('g')
h: ch('h'), i: ch('i'), j: ch('j'), k: ch('k'), l: ch('l'), m: ch('m'), n: ch('n')
o: ch('o'), p: ch('p'), q: ch('q'), r: ch('r'), s: ch('s'), t: ch('t')
u: ch('u'), v: ch('v'), w: ch('w'), x: ch('x'), y: ch('y'), z: ch('z')
A: ch('A'), B: ch('B'), C: ch('C'), D: ch('D'), E: ch('E'), F: ch('F'), G: ch('G')
H: ch('H'), I: ch('I'), J: ch('J'), K: ch('K'), L: ch('L'), M: ch('M'), N: ch('N')
O: ch('O'), P: ch('P'), Q: ch('Q'), R: ch('R'), S: ch('S'), T: ch('T')
U: ch('U'), V: ch('V'), W: ch('W'), X: ch('X'), Y: ch('Y'), Z: ch('Z')