Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

rbbi_bld.h

Go to the documentation of this file.
00001 /*
00002 * Copyright © {1999}, International Business Machines Corporation and others. All Rights Reserved.
00003 **********************************************************************
00004 *   Date        Name        Description
00005 *   12/15/99    rgillam     Port from Java.
00006 **********************************************************************
00007 */
00008 
00009 #ifndef RBBI_BLD_H
00010 #define RBBI_BLD_H
00011 
00012 #include "rbbi.h"
00013 #include "rbbi_tbl.h"
00014 #include "unicode/uniset.h"
00015 #include "uvector.h"
00016 
00017 class ExpressionList;
00018 
00019 //=======================================================================
00020 // RuleBasedBreakIterator.Builder
00021 //=======================================================================
00044 class RuleBasedBreakIteratorBuilder {
00045 
00046 protected:
00050     RuleBasedBreakIterator& iterator;
00051 
00055     RuleBasedBreakIteratorTables* tables;
00056 
00060     UVector tempRuleList;
00061     
00066     UVector categories;
00067 
00071     int32_t numCategories;
00072 
00077     ExpressionList* expressions;
00078 
00082     UnicodeSet ignoreChars;
00083 
00087     UVector tempStateTable;
00088 
00094     UVector decisionPointList;
00095 
00100     UStack decisionPointStack;
00101 
00105     UVector loopingStates;
00106 
00112     UVector statesToBackfill;
00113 
00120     UVector mergeList;
00121 
00126     UBool clearLoopingStates;
00127 
00133     UnicodeString errorMessage;
00134 
00139     static const int32_t END_STATE_FLAG /*= 0x8000*/;
00140 
00145     static const int32_t DONT_LOOP_FLAG /*= 0x4000*/;
00146 
00151     static const int32_t LOOKAHEAD_STATE_FLAG /*= 0x2000*/;
00152 
00157     static const int32_t ALL_FLAGS /*= END_STATE_FLAG | LOOKAHEAD_STATE_FLAG
00158             | DONT_LOOP_FLAG*/;
00159 
00160 public:
00161 
00165     RuleBasedBreakIteratorBuilder(RuleBasedBreakIterator& iteratorToBuild);
00166 
00170     ~RuleBasedBreakIteratorBuilder();
00171 
00176     virtual void buildBreakIterator(const UnicodeString&    description,
00177                                     UErrorCode& err);
00178 
00179 private:
00180 
00189     virtual void buildRuleList(UnicodeString& description,
00190                                UErrorCode& err);
00191 
00192 protected:
00193 
00201     virtual void processSubstitution(UnicodeString& description,
00202                                      UTextOffset ruleStart,
00203                                      UTextOffset ruleEnd,
00204                                      UTextOffset startPos,
00205                                      UErrorCode& err);
00206 
00216     virtual void handleSpecialSubstitution(const UnicodeString& replace,
00217                                            const UnicodeString& replaceWith,
00218                                            int32_t startPos,
00219                                            const UnicodeString& description,
00220                                            UErrorCode& err);
00221 
00226     virtual void mungeExpressionList();
00227 
00236     virtual void buildCharCategories(UErrorCode& err);
00237 
00238 private:
00239 
00245     virtual void buildStateTable(UErrorCode& err);
00246 
00254     virtual void parseRule(const UnicodeString& rule,
00255                            UBool               forward);
00256 
00265     virtual void updateStateTable(const UVector&       rows,
00266                                   const UnicodeString& pendingChars,
00267                                   int16_t              newValue);
00268 
00289     virtual void mergeStates(int32_t  rowNum,
00290                              int16_t* newValues,
00291                              const UVector& rowsBeingUpdated);
00292 
00300     virtual int32_t searchMergeList(int32_t a, int32_t b);
00301 
00312     virtual void setLoopingStates(const UVector* newLoopingStates,
00313                                   const UVector& endStates);
00314 
00320     virtual void eliminateBackfillStates(int32_t baseState);
00321 
00326     virtual void backfillLoopingStates(void);
00327 
00334     virtual void finishBuildingStateTable(UBool forward);
00335 
00341     virtual void buildBackwardsStateTable(UErrorCode& err);
00342 
00343 protected:
00344 
00353     virtual void setUpErrorMessage(const UnicodeString& message,
00354                                    int32_t position,
00355                                    const UnicodeString& context);
00356 };
00357 
00358 #endif

Generated at Tue Dec 5 17:55:30 2000 for ICU by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000