mast/parser/filter_js.peg
2025-02-19 23:18:05 -08:00

32 lines
560 B
Plaintext

{
function makeIdFilter(ids) {
return {
type: 'id_filter',
ids: ids.flat(),
reconstruct: function() {
return this.ids.join(',');
}
};
}
}
Filter = first:(IdRange / SingleId) rest:("," (IdRange / SingleId))* {
return makeIdFilter([first, ...rest.map(r => r[1])]);
}
IdRange = start:Integer "-" end:Integer {
const ids = [];
for (let i = start; i <= end; i++) {
ids.push(i);
}
return ids;
}
SingleId = id:Integer {
return [id];
}
Integer = digits:[0-9]+ {
return parseInt(digits.join(''), 10);
}