32 lines
560 B
Plaintext
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);
|
|
}
|