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