| /** | 
|  * @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; | 
|     } | 
| }; |