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 22 2004
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Since: ICU 3.0
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef __ICU_INTLTEST_TOKITER__
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define __ICU_INTLTEST_TOKITER__
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "intltest.h"
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TextFile;
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * An iterator class that returns successive string tokens from some
20b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * source.  String tokens are, in general, separated by Pattern_White_Space
21b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * in the source test.  Furthermore, they may be delimited by
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * either single or double quotes (opening and closing quotes must
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * match).  Escapes are processed using standard ICU unescaping.
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TokenIterator {
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public:
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Construct an iterator over the tokens returned by the given
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * TextFile, ignoring blank lines and comment lines (first
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * non-blank character is '#').  Note that trailing comments on a
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * line, beginning with the first unquoted '#', are recognized.
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    TokenIterator(TextFile* r);
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~TokenIterator();
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Return the next token from this iterator.
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return TRUE if a token was read, or FALSE if no more tokens
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * are available or an error occurred.
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool next(UnicodeString& token, UErrorCode& ec);
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Return the one-based line number of the line of the last token
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * returned by next(). Should only be called after a call to
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * next(); otherwise the return value is undefined.
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t getLineNumber() const;
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Return a string description of the position of the last line
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * returned by readLine() or readLineSkippingComments().
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //public String describePosition() {
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //    return reader.describePosition() + ':' + (lastpos+1);
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //}
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private:
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool nextToken(UnicodeString& token, UErrorCode& ec);
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    TextFile* reader; // alias
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString line;
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool done;
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool haveLine;
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t pos;
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t lastpos;
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif
72