| /** |
| * @fileoverview Define the cursor which ignores specified tokens. |
| * @author Toru Nagashima |
| */ |
| "use strict"; |
| |
| //------------------------------------------------------------------------------ |
| // Requirements |
| //------------------------------------------------------------------------------ |
| |
| const DecorativeCursor = require("./decorative-cursor"); |
| |
| //------------------------------------------------------------------------------ |
| // Exports |
| //------------------------------------------------------------------------------ |
| |
| /** |
| * The decorative cursor which ignores specified tokens. |
| */ |
| module.exports = class FilterCursor extends DecorativeCursor { |
| |
| /** |
| * Initializes this cursor. |
| * @param {Cursor} cursor - The cursor to be decorated. |
| * @param {Function} predicate - The predicate function to decide tokens this cursor iterates. |
| */ |
| constructor(cursor, predicate) { |
| super(cursor); |
| this.predicate = predicate; |
| } |
| |
| /** @inheritdoc */ |
| moveNext() { |
| const predicate = this.predicate; |
| |
| while (super.moveNext()) { |
| if (predicate(this.current)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| }; |