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