/* ***************************************************************************************** * Copyright (C) 1997-1999, International Business Machines * Corporation and others. All Rights Reserved. ***************************************************************************************** * * File WDBKDAT.CPP * * Modification History: * * Date Name Description * 02/18/97 aliu Converted from OpenClass. * Recoded kRawMapping table for Unicode::getType() type codes. * Made static data members const where appropriate. * 03/25/97 aliu Moved into TextBoundaryData; no longer a subclass. * 04/15/97 aliu Worked around bug in AIX xlC compiler which occurs if static * arrays contain const elements. * 05/06/97 aliu Made SpecialMapping an array of objects instead of pointers, * to help out non-compliant compilers. * 08/14/98 helena Sync-up JDK1.2. ***************************************************************************************** */ // ***************************************************************************** // This file was generated from the java source file WordBreakData.java // ***************************************************************************** #include "txtbdat.h" #include "wdbktbl.h" #include "unicdcm.h" // ***************************************************************************** // class WordBreakData // This class contains the following transition state data for word break. // For more detailed explanation on the boundary break state machine, please // see the internal documentation of wdbktbl.cpp. // ***************************************************************************** // The forward transition states of word boundary data. TextBoundaryData::Node TextBoundaryData::kWordForwardData[] = { // brk let num mLe mLN // prN poN mNu pMN blk // lf kat hir kan dia // cr nsm EOS // 0 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, // 1 kSI_14, kSI_2, kSI_3, kSI_14, kSI_14, kSI_5, kSI_14, kSI_14, kSI_5, kSI_6, kSI_4, kSI_10, kSI_11, kSI_12, kSI_9, kSI_13, 1, kSI_Stop, // 2 kSI_Stop, kSI_2, kSI_3, kSI_7, kSI_7, kSI_Stop, kSI_Stop, kSI_Stop, kSI_7, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, 2, kSI_Stop, // 3 kSI_Stop, kSI_2, kSI_3, kSI_Stop, kSI_8, kSI_Stop, kSI_14, kSI_8, kSI_8, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, 3, kSI_Stop, // 4 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, // 5 kSI_Stop, kSI_Stop, kSI_3, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, 5, kSI_Stop, // 6 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_6, kSI_4, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_13, 6, kSI_Stop, // 7 kStop, kSI_2, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 7, kStop, // 8 kStop, kStop, kSI_3, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 8, kStop, // 9 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_10, kSI_11, kSI_Stop, kSI_9, kSI_Stop, 9, kSI_Stop, // 10 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_10, kSI_Stop, kSI_Stop, kSI_10, kSI_Stop, 10, kSI_Stop, // 11 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_11, kSI_Stop, kSI_11, kSI_Stop, 11, kSI_Stop, // 12 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_12, kSI_Stop, kSI_Stop, 12, kSI_Stop, // 13 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_4, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, // 14 kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, kSI_Stop, 14, kSI_Stop }; const int32_t TextBoundaryData::kWordForwardData_length = sizeof(TextBoundaryData::kWordForwardData) / sizeof(TextBoundaryData::kWordForwardData[0]); WordBreakTable* TextBoundaryData::kWordForward = new WordBreakTable(kWordCol_count, kWordForwardData, kWordForwardData_length); // The forward transition states of word boundary data. TextBoundaryData::Node TextBoundaryData::kWordBackwardData[] = { // brk let num mLe mLN // prN poN mNu pMN blk // lf kat hir kan dia // cr nsm EOS // 0 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, // 1 kSI_6, kSI_2, kSI_3, kSI_4, kSI_5, kSI_6, kSI_7, kSI_7, kSI_5, kSI_8, kSI_8, kSI_9, kSI_10, kSI_12, kSI_11, kSI_8, 1, kStop, // 2 kStop, kSI_2, kSI_3, 4, 4, kStop, kStop, kStop, 4, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 2, kStop, // 3 kStop, kSI_2, kSI_3, kStop, 7, kSI_Stop, kStop, 7, kSI_7, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 3, kStop, // 4 kStop, kSI_2, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 4, kStop, // 5 kStop, kSI_2, kSI_3, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 5, kStop, // 6 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 6, kStop, // 7 kStop, kStop, kSI_3, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, 7, kStop, // 8 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kSI_8, kSI_8, kStop, kStop, kStop, kStop, kSI_8, 8, kStop, // 9 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kSI_9, kStop, kStop, 9, kStop, 9, kStop, // 10 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kSI_10, kStop, 10, kStop, 10, kStop, // 11 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kSI_9, kSI_10, kStop, kSI_11, kStop, 11, kStop, // 12 kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kStop, kSI_12, kStop, kStop, 12, kStop }; const int32_t TextBoundaryData::kWordBackwardData_length = sizeof(TextBoundaryData::kWordBackwardData) / sizeof(TextBoundaryData::kWordBackwardData[0]); WordBreakTable* TextBoundaryData::kWordBackward = new WordBreakTable(kWordCol_count, kWordBackwardData, kWordBackwardData_length); // The word type mapping of the break table. TextBoundaryData::Type TextBoundaryData::kWordRawMapping[] = { // Re-coded to match Unicode 2 types [LIU] kBreak, // UNASSIGNED = 0, kLetter, // UPPERCASE_LETTER = 1, kLetter, // LOWERCASE_LETTER = 2, kLetter, // TITLECASE_LETTER = 3, kLetter, // MODIFIER_LETTER = 4, kLetter, // OTHER_LETTER = 5, kNsm, // NON_SPACING_MARK = 6, kNsm, // ENCLOSING_MARK = 7, kBreak, // COMBINING_SPACING_MARK = 8, kNumber, // DECIMAL_DIGIT_NUMBER = 9, kLetter, // LETTER_NUMBER = 10, kNumber, // OTHER_NUMBER = 11, kBlank, // SPACE_SEPARATOR = 12, kBreak, // LINE_SEPARATOR = 13, kBreak, // PARAGRAPH_SEPARATOR = 14, kBreak, // CONTROL = 15, kBreak, // FORMAT = 16, kBreak, // PRIVATE_USE = 17, kBreak, // SURROGATE = 18, kMidLetter, // DASH_PUNCTUATION = 19, kBreak, // START_PUNCTUATION = 20, kBreak, // END_PUNCTUATION = 21, kBreak, // CONNECTOR_PUNCTUATION = 22, kBreak, // OTHER_PUNCTUATION = 23, kBreak, // MATH_SYMBOL = 24, kPreNum, // CURRENCY_SYMBOL = 25, kBreak, // MODIFIER_SYMBOL = 26, kBreak, // OTHER_SYMBOL = 27, kBreak // UNDEFINED = 28 }; const int32_t TextBoundaryData::kWordRawMapping_length = sizeof(TextBoundaryData::kWordRawMapping) / sizeof(TextBoundaryData::kWordRawMapping[0]); // The exceptions of the word break data. SpecialMapping TextBoundaryData::kWordExceptionChar[] = { //note: the ranges in this table must be sorted in ascending order //as required by the UnicodeClassMapping class. SpecialMapping(TextBoundaryData::ASCII_HORIZONTAL_TABULATION, TextBoundaryData::kBlank), SpecialMapping(TextBoundaryData::ASCII_LINEFEED, TextBoundaryData::kLF), SpecialMapping(TextBoundaryData::ASCII_FORM_FEED, TextBoundaryData::kLF), SpecialMapping(TextBoundaryData::ASCII_CARRIAGE_RETURN, TextBoundaryData::kCR), SpecialMapping(TextBoundaryData::ASCII_QUOTATION_MARK, TextBoundaryData::kMidLetNum), SpecialMapping(TextBoundaryData::ASCII_NUMBER_SIGN, TextBoundaryData::kPreNum), SpecialMapping(TextBoundaryData::ASCII_PERCENT, TextBoundaryData::kPostNum), SpecialMapping(TextBoundaryData::ASCII_AMPERSAND, TextBoundaryData::kPostNum), SpecialMapping(TextBoundaryData::ASCII_APOSTROPHE, TextBoundaryData::kMidLetNum), SpecialMapping(TextBoundaryData::ASCII_COMMA, TextBoundaryData::kMidNum), SpecialMapping(TextBoundaryData::ASCII_FULL_STOP, TextBoundaryData::kPreMidNum), SpecialMapping(TextBoundaryData::ASCII_CENT_SIGN, TextBoundaryData::kPostNum), SpecialMapping(TextBoundaryData::LATIN1_SOFTHYPHEN, TextBoundaryData::kMidLetter), SpecialMapping(TextBoundaryData::ARABIC_PERCENT_SIGN, TextBoundaryData::kPostNum), SpecialMapping(TextBoundaryData::ARABIC_DECIMAL_SEPARATOR, TextBoundaryData::kMidNum), SpecialMapping(TextBoundaryData::PUNCTUATION_HYPHENATION_POINT, TextBoundaryData::kMidLetter), SpecialMapping(TextBoundaryData::PUNCTUATION_LINE_SEPARATOR, TextBoundaryData::PUNCTUATION_PARAGRAPH_SEPARATOR, TextBoundaryData::kLF), SpecialMapping(TextBoundaryData::PER_MILLE_SIGN, TextBoundaryData::kPostNum), SpecialMapping(TextBoundaryData::PER_TEN_THOUSAND_SIGN, TextBoundaryData::kPostNum), SpecialMapping(TextBoundaryData::IDEOGRAPHIC_ITERATION_MARK, TextBoundaryData::kKanji), SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_A, TextBoundaryData::HIRAGANA_LETTER_VU, TextBoundaryData::kHira), SpecialMapping(TextBoundaryData::COMBINING_KATAKANA_HIRAGANA_VOICED_SOUND_MARK, TextBoundaryData::HIRAGANA_SEMIVOICED_SOUND_MARK, TextBoundaryData::kDiacrit), SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_A, TextBoundaryData::KATAKANA_LETTER_SMALL_KE, TextBoundaryData::kKata), SpecialMapping(TextBoundaryData::UNICODE_LOW_BOUND_HAN, TextBoundaryData::UNICODE_HIGH_BOUND_HAN, TextBoundaryData::kKanji), SpecialMapping(TextBoundaryData::HANGUL_SYL_LOW, TextBoundaryData::HANGUL_SYL_HIGH, TextBoundaryData::kLetter), SpecialMapping(TextBoundaryData::CJK_COMPATIBILITY_F900, TextBoundaryData::CJK_COMPATIBILITY_FA2D, TextBoundaryData::kKanji), SpecialMapping(TextBoundaryData::END_OF_STRING, TextBoundaryData::kwEOS) }; const bool_t TextBoundaryData::kWordExceptionFlags[] = { FALSE, // kNonCharacter = 0, FALSE, // kUppercaseLetter = 1, FALSE, // kLowercaseLetter = 2, FALSE, // kTitlecaseLetter = 3, TRUE, // kModifierLetter = 4, TRUE, // kOtherLetter = 5, TRUE, // kNonSpacingMark = 6, FALSE, // kEnclosingMark = 7, FALSE, // kCombiningSpacingMark = 8, FALSE, // kDecimalNumber = 9, FALSE, // kLetterNumber = 10, FALSE, // kOtherNumber = 11, FALSE, // kSpaceSeparator = 12, TRUE, // kLineSeparator = 13, TRUE, // kParagraphSeparator = 14, TRUE, // kControlCharacter = 15, FALSE, // kFormatCharacter = 16, FALSE, // kPrivateUseCharacter = 17, FALSE, // kSurrogate = 18, TRUE, // kDashPunctuation = 19, FALSE, // kOpenPunctuation = 20, FALSE, // kClosePunctuation = 21, FALSE, // kConnectorPunctuation = 22, TRUE, // kOtherPunctuation = 23, FALSE, // kMathSymbol = 24, TRUE, // kCurrencySymbol = 25, FALSE, // kModifierSymbol = 26, FALSE, // kOtherSymbol = 27 FALSE // UNDEFINED = 28, }; const int32_t TextBoundaryData::kWordExceptionChar_length = sizeof(TextBoundaryData::kWordExceptionChar) / sizeof(TextBoundaryData::kWordExceptionChar[0]); TextBoundaryData::Type TextBoundaryData::kWordAsciiValues[] = { // null soh stx etx eot enq ask bell kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // bs ht kLF vt ff cr so si kBreak, kBlank, kLF, kBreak, kLF, kCR, kBreak, kBreak, // dle dc1 dc2 dc3 dc4 nak syn etb kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // can em sub esc fs gs rs us kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // sp ! " # $ % & ' kBlank, kBreak, kMidLetNum, kPreNum, kPreNum, kPostNum, kPostNum, kMidLetNum, // ( ) * + , - . / kBreak, kBreak, kBreak, kBreak, kMidNum, kMidLetter, kPreMidNum, kBreak, // 0 1 2 3 4 5 6 7 kNumber, kNumber, kNumber, kNumber, kNumber, kNumber, kNumber, kNumber, // 8 9 : ; < = > ? kNumber, kNumber, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // @ A B C D E F G kBreak, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // H I J K L M N O kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // P Q R S T U V W kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // X Y Z [ \ ] ^ _ kLetter, kLetter, kLetter, kBreak, kBreak, kBreak, kBreak, kBreak, // ` a b c d e f g kBreak, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // h i j k l m n o kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // p q r s t u v w kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // x y z { | } ~ del kLetter, kLetter, kLetter, kBreak, kBreak, kBreak, kBreak, kBreak, // ctrl ctrl ctrl ctrl ctrl ctrl ctrl ctrl kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // ctrl ctrl ctrl ctrl ctrl ctrl ctrl ctrl kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // ctrl ctrl ctrl ctrl ctrl ctrl ctrl ctrl kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // ctrl ctrl ctrl ctrl ctrl ctrl ctrl ctrl kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, kBreak, // nbsp inv-! cents pounds currency yen broken-bar section kBlank, kBreak, kPostNum, kPreNum, kPreNum, kPreNum, kBreak, kBreak, // umlaut copyright super-a gui-left not soft-hyph registered macron kBreak, kBreak, kLetter, kBreak, kBreak, kMidLetter, kBreak, kBreak, // degree +/- super-2 super-3 acute micro paragraph bullet kBreak, kBreak, kNumber, kNumber, kBreak, kLetter, kBreak, kBreak, // cedilla super-1 super-o gui-right 1/4 1/2 3/4 inv-? kBreak, kLetter, kBreak, kBreak, kNumber, kNumber, kNumber, kBreak, // A-grave A-acute A-hat A-tilde A-umlaut A-ring AE C-cedilla kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // E-grave E-acute E-hat E-umlaut I-grave I-acute I-hat I-umlaut kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // Edh N-tilde O-grave O-acute O-hat O-tilde O-umlaut times kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kBreak, // O-slash U-grave U-acute U-hat U-umlaut Y-acute Thorn ess-zed kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // a-grave a-acute a-hat a-tilde a-umlaut a-ring ae c-cedilla kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // e-grave e-acute e-hat e-umlaut i-grave i-acute i-hat i-umlaut kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, // edh n-tilde o-grave o-acute o-hat o-tilde o-umlaut over kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kBreak, // o-slash u-grave u-acute u-hat u-umlaut y-acute thorn y-umlaut kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter, kLetter }; UnicodeClassMapping* TextBoundaryData::kWordMap = new UnicodeClassMapping(kWordRawMapping, kWordRawMapping_length, kWordExceptionChar, kWordExceptionChar_length, kWordExceptionFlags, kWordAsciiValues ); /** * This is the single instance of TextBoundaryData containing word * break data. */ const TextBoundaryData TextBoundaryData::kWordBreakData(TextBoundaryData::kWordForward, TextBoundaryData::kWordBackward, TextBoundaryData::kWordMap); //eof