1 /* 2 ********************************************************************** 3 * Copyright (c) 2004-2011, International Business Machines 4 * Corporation and others. All Rights Reserved. 5 ********************************************************************** 6 * Author: Alan Liu 7 * Created: March 22 2004 8 * Since: ICU 3.0 9 ********************************************************************** 10 */ 11 #ifndef __ICU_INTLTEST_TOKITER__ 12 #define __ICU_INTLTEST_TOKITER__ 13 14 #include "intltest.h" 15 16 class TextFile; 17 18 /** 19 * An iterator class that returns successive string tokens from some 20 * source. String tokens are, in general, separated by Pattern_White_Space 21 * in the source test. Furthermore, they may be delimited by 22 * either single or double quotes (opening and closing quotes must 23 * match). Escapes are processed using standard ICU unescaping. 24 */ 25 class TokenIterator { 26 public: 27 28 /** 29 * Construct an iterator over the tokens returned by the given 30 * TextFile, ignoring blank lines and comment lines (first 31 * non-blank character is '#'). Note that trailing comments on a 32 * line, beginning with the first unquoted '#', are recognized. 33 */ 34 TokenIterator(TextFile* r); 35 36 virtual ~TokenIterator(); 37 38 /** 39 * Return the next token from this iterator. 40 * @return TRUE if a token was read, or FALSE if no more tokens 41 * are available or an error occurred. 42 */ 43 UBool next(UnicodeString& token, UErrorCode& ec); 44 45 /** 46 * Return the one-based line number of the line of the last token 47 * returned by next(). Should only be called after a call to 48 * next(); otherwise the return value is undefined. 49 */ 50 int32_t getLineNumber() const; 51 52 /** 53 * Return a string description of the position of the last line 54 * returned by readLine() or readLineSkippingComments(). 55 */ 56 //public String describePosition() { 57 // return reader.describePosition() + ':' + (lastpos+1); 58 //} 59 60 private: 61 UBool nextToken(UnicodeString& token, UErrorCode& ec); 62 63 TextFile* reader; // alias 64 UnicodeString line; 65 UBool done; 66 UBool haveLine; 67 int32_t pos; 68 int32_t lastpos; 69 }; 70 71 #endif 72