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