Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: third_party/hunspell_new/google/bdict_reader.h

Issue 1135173004: Rename third_party/hunspell_new back to third_party/hunspell. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_DIC_READER_H__
6 #define CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_DIC_READER_H__
7
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "third_party/hunspell_new/google/bdict.h"
13
14 namespace hunspell {
15
16 class BDictReader;
17 class NodeReader;
18
19 // Iterators -------------------------------------------------------------------
20
21 // Iterates through all words in the dictionary. It will fill the word into
22 // a caller-specified buffer.
23 class WordIterator {
24 public:
25 WordIterator(const WordIterator& other);
26 ~WordIterator();
27
28 // This must be explicitly declared and implemneted in the .cc file so it will
29 // compile without knowing the size of NodeInfo.
30 WordIterator& operator=(const WordIterator&);
31
32 // Fills the buffer with the next word and the affixes for it into the given
33 // array. Returns the number of affixes. A return value of 0 means there are
34 // no more words.
35 int Advance(char* output_buffer, size_t output_len,
36 int affix_ids[BDict::MAX_AFFIXES_PER_WORD]);
37
38 private:
39 friend class BDictReader;
40 struct NodeInfo;
41
42 WordIterator(const NodeReader& reader);
43
44 // Called by Advance when a leaf is found to generate the word, affix list,
45 // and return value.
46 int FoundLeaf(const NodeReader& node, char cur_char,
47 char* output_buffer, size_t output_len,
48 int affix_ids[BDict::MAX_AFFIXES_PER_WORD]);
49
50 std::vector<NodeInfo> stack_;
51 };
52
53 // Will iterate over a list of lines separated by NULLs.
54 class LineIterator {
55 public:
56 // Returns the next word in the sequence or NULL if there are no mode.
57 const char* Advance();
58
59 // Advances to the next word in the sequence and copies it into the given
60 // buffer, of the given length. If it doesn't fit, it will be truncated.
61 // Returns true on success.
62 bool AdvanceAndCopy(char* buf, size_t buf_len);
63
64 // Returns true when all data has been read. We're done when we reach a
65 // double-NULL or a the end of the input (shouldn't happen).
66 bool IsDone() const;
67
68 protected:
69 friend class BDictReader;
70
71 LineIterator(const unsigned char* bdict_data, size_t bdict_length,
72 size_t first_offset);
73
74 const unsigned char* bdict_data_;
75 size_t bdict_length_;
76
77 // Current offset within bdict_data of the next string to read.
78 size_t cur_offset_;
79 };
80
81 // Created by GetReplacementIterator to iterate over all replacement pairs.
82 class ReplacementIterator : public LineIterator {
83 public:
84 // Fills pointers to NULL terminated strings into the given output params.
85 // Returns false if there are no more pairs and nothing was filled in.
86 bool GetNext(const char** first, const char** second);
87
88 private:
89 friend class BDictReader;
90
91 ReplacementIterator(const unsigned char* bdict_data, size_t bdict_length,
92 size_t first_offset)
93 : LineIterator(bdict_data, bdict_length, first_offset) {
94 }
95 };
96
97 // Reads a BDict file mapped into memory.
98 class BDictReader {
99 public:
100 // You must call Init and it must succeed before calling any other functions.
101 BDictReader();
102
103 // Initializes the reader with the given data. The data does not transfer
104 // ownership, and the caller must keep it valid until the reader is destroyed.
105 // Returns true on success.
106 bool Init(const unsigned char* bdic_data, size_t bdic_length);
107
108 // Returns true if Init() succeeded and other functions can be called.
109 bool IsValid() const { return !!bdict_data_; }
110
111 // Locates the given word in the dictionary. There may be multiple matches if
112 // the word is listed multiple times in the dictionary with different affix
113 // rules.
114 //
115 // The number of matches is returned, and that number of corresponding affix
116 // group IDs are filled into |*affix_indices|. These IDs may be 0 to indicate
117 // there is no affix for that particular match. A return valuf of 0 means that
118 // there are no matches.
119 int FindWord(const char* word,
120 int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const;
121
122 // Returns an iterator that will go over all AF lines ("affix groups").
123 LineIterator GetAfLineIterator() const;
124
125 // Returns an iterator that will go over all SFX/PFX lines ("affix rules").
126 LineIterator GetAffixLineIterator() const;
127
128 // Returns an iterator that will go over all "other" lines.
129 LineIterator GetOtherLineIterator() const;
130
131 // Returns an iterator that can be used to iterate all replacements.
132 ReplacementIterator GetReplacementIterator() const;
133
134 // Used for testing, returns an iterator for all words in the dictionary.
135 WordIterator GetAllWordIterator() const;
136
137 private:
138 // Non-NULL indicates Init succeeded.
139 const unsigned char* bdict_data_;
140 size_t bdict_length_;
141
142 // Pointer not owned by this class. It will point into the data. It will be
143 // NULL if the data is invalid.
144 const BDict::Header* header_;
145
146 const BDict::AffHeader* aff_header_;
147
148 DISALLOW_EVIL_CONSTRUCTORS(BDictReader);
149 };
150
151 } // namespace hunspell
152
153 #endif // CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_DIC_READER_H__
OLDNEW
« no previous file with comments | « third_party/hunspell_new/google/bdict.cc ('k') | third_party/hunspell_new/google/bdict_reader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698