1 /* 2 ********************************************************************** 3 * Copyright (c) 2004-2006, International Business Machines 4 * Corporation and others. All Rights Reserved. 5 ********************************************************************** 6 * Author: Alan Liu 7 * Created: March 19 2004 8 * Since: ICU 3.0 9 ********************************************************************** 10 */ 11 #ifndef __ICU_INTLTEST_TEXTFILE__ 12 #define __ICU_INTLTEST_TEXTFILE__ 13 14 #include "intltest.h" 15 #include "filestrm.h" 16 17 /** 18 * This class implements access to a text data file located in the 19 * icu/source/test/testdata/ directory. 20 */ 21 class TextFile { 22 public: 23 /** 24 * Open a file with the given name, in the given encoding, in the 25 * ICU testdata directory. See textfile.cpp to determine if the 26 * 'name' and 'encoding' parameters are aliased or copied. 27 */ 28 TextFile(const char* name, const char* encoding, UErrorCode& ec); 29 30 virtual ~TextFile(); 31 32 /** 33 * Read a line terminated by ^J or ^M or ^M^J, and convert it from 34 * this file's encoding to Unicode. The EOL character(s) are not 35 * included in 'line'. 36 * @return TRUE if a line was read, or FALSE if the EOF 37 * was reached or an error occurred 38 */ 39 UBool readLine(UnicodeString& line, UErrorCode& ec); 40 41 /** 42 * Read a line, ignoring blank lines and lines that start with 43 * '#'. Trim leading white space. 44 * @param trim if TRUE then remove leading rule white space 45 * @return TRUE if a line was read, or FALSE if the EOF 46 * was reached or an error occurred 47 */ 48 UBool readLineSkippingComments(UnicodeString& line, UErrorCode& ec, 49 UBool trim = FALSE); 50 51 /** 52 * Return the line number of the last line returned by readLine(). 53 */ 54 inline int32_t getLineNumber() const; 55 56 private: 57 UBool ensureCapacity(int32_t capacity); 58 UBool setBuffer(int32_t index, char c, UErrorCode& ec); 59 60 FileStream* file; 61 char* name; 62 char* encoding; 63 char* buffer; 64 int32_t capacity; 65 int32_t lineNo; 66 }; 67 68 inline int32_t TextFile::getLineNumber() const { 69 return lineNo; 70 } 71 72 #endif 73