16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (c) 2004-2011, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Author: Alan Liu 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Created: March 22 2004 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Since: ICU 3.0 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __ICU_INTLTEST_TOKITER__ 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __ICU_INTLTEST_TOKITER__ 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "intltest.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass TextFile; 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * An iterator class that returns successive string tokens from some 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * source. String tokens are, in general, separated by Pattern_White_Space 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the source test. Furthermore, they may be delimited by 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * either single or double quotes (opening and closing quotes must 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * match). Escapes are processed using standard ICU unescaping. 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass TokenIterator { 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public: 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Construct an iterator over the tokens returned by the given 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TextFile, ignoring blank lines and comment lines (first 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * non-blank character is '#'). Note that trailing comments on a 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * line, beginning with the first unquoted '#', are recognized. 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TokenIterator(TextFile* r); 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~TokenIterator(); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the next token from this iterator. 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if a token was read, or FALSE if no more tokens 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are available or an error occurred. 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool next(UnicodeString& token, UErrorCode& ec); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the one-based line number of the line of the last token 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * returned by next(). Should only be called after a call to 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * next(); otherwise the return value is undefined. 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getLineNumber() const; 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return a string description of the position of the last line 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * returned by readLine() or readLineSkippingComments(). 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //public String describePosition() { 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // return reader.describePosition() + ':' + (lastpos+1); 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool nextToken(UnicodeString& token, UErrorCode& ec); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TextFile* reader; // alias 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString line; 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool done; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool haveLine; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos; 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lastpos; 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 72