scuffed-code/icu4c/source/i18n/wdbkdat.cpp
Unknown User aa0b0a88e8 Initial revision
X-SVN-Rev: 2
1999-08-16 21:50:52 +00:00

435 lines
26 KiB
C++

/*
*****************************************************************************************
* *
* COPYRIGHT: *
* (C) Copyright Taligent, Inc., 1997 *
* (C) Copyright International Business Machines Corporation, 1997-1998 *
* Licensed Material - Program-Property of IBM - All Rights Reserved. *
* US Government Users Restricted Rights - Use, duplication, or disclosure *
* restricted by GSA ADP Schedule Contract with IBM Corp. *
* *
*****************************************************************************************
*
* 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