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