regexoid/test/sussy.mjs

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('')
]
}