68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
export function test(regexoid) {
|
|
let o = regexoid(({
|
|
seq, any, rep, chars,
|
|
mark, markMulti,
|
|
capture, captureMulti,
|
|
map, abort,
|
|
}) => (
|
|
(({field, spc}) => (
|
|
field = (field => () => any(
|
|
field(),
|
|
captureMulti('unknownFields',
|
|
rep([1,], chars.any(['a','z'],['A','Z'])),
|
|
any('',seq('(',rep([],chars(c => c != ')')),')'))
|
|
),
|
|
))(field),
|
|
seq(
|
|
spc(), rep([], field(), any(',',';'), spc()), field(), spc()
|
|
)
|
|
))({
|
|
field: () => (any(
|
|
...['meow', 'meower', 'sigma', 'susser']
|
|
.map(k => (
|
|
seq(
|
|
seq(
|
|
...[...k]
|
|
.map(e => [e.toLowerCase(),e.toUpperCase()])
|
|
.map(([l,h]) => chars(e => e==l || e==h))
|
|
),
|
|
any(
|
|
mark('value', true),
|
|
seq('(',
|
|
capture('value',
|
|
rep([], chars(c => c != ')'))
|
|
)
|
|
,
|
|
')')
|
|
),
|
|
map(({ get, set, add }) => {
|
|
let v = get('value');
|
|
if (v == 'BAD')
|
|
return false;
|
|
set('value');
|
|
add(k, v);
|
|
}),
|
|
)
|
|
))
|
|
)),
|
|
spc: (lim=[]) => rep(
|
|
lim,
|
|
chars(c => c==' '
|
|
|| c == '\t'
|
|
|| c == '\n'
|
|
|| c == '\r'))
|
|
})
|
|
))();
|
|
|
|
return [
|
|
o(`
|
|
meow(sussy);
|
|
Meower, meo`),o(`wer(2), meower(3),
|
|
Unknownus(hmm?),
|
|
meower(BAD),
|
|
sigma(meo`),
|
|
o(`wer)`),
|
|
o('')
|
|
]
|
|
}
|