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 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 Pattern_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 
getLineNumber()68 inline int32_t TextFile::getLineNumber() const {
69     return lineNo;
70 }
71 
72 #endif
73