/*
*****************************************************************************************
*                                                                                       *
* 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 LNBKDAT.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.
*   07/12/99    helena      HPUX 11 CC port.
*****************************************************************************************
*/

// *****************************************************************************
// This file was generated from the java source file LineBreakData.java
// *****************************************************************************

#include "txtbdat.h"
#include "wdbktbl.h"
#include "unicdcm.h"

// *****************************************************************************
// class LineBreakData
// The following tables contain the transition state data for line break.
// For more detailed explanation on the boundary break state machine, please
// see the internal documentation of wdbktbl.cpp.
// *****************************************************************************

// The forward transition states of line boundary data.
TextBoundaryData::Node TextBoundaryData::kLineForwardData[] =
{
        // brk          bl              cr              nBl
        // op           kan             prJ             poJ
        // dgt          np              curr            nsm
        // nbsp         EOS
        /*00*/
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,
        /*01*/
        kSI_4,          kSI_2,          kSI_7,          kSI_3,
        kSI_6,          kSI_5,          kSI_1,          kSI_8,
        kSI_9,          kSI_8,          kSI_1,          kSI_1,
        kSI_1,          kSI_Stop,
        /*02*/
        kSI_4,          kSI_2,          kSI_7,          kSI_Stop,
        kSI_Stop,       kSI_Stop,       kSI_Stop,       kSI_Stop,
        kSI_Stop,       kSI_Stop,       kSI_Stop,       kSI_2,
        kSI_1,          kSI_Stop,
        /*03*/
        kSI_4,          kSI_2,          kSI_7,          kSI_3,
        kSI_6,          kSI_Stop,       kSI_Stop,       kSI_8,
        kSI_9,          kSI_8,          kSI_Stop,       kSI_3,
        kSI_1,          kSI_Stop,
        /*04*/
        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,
        /*05*/
        kSI_4,          kSI_2,          kSI_7,          kSI_Stop,
        kSI_Stop,       kSI_Stop,       kSI_Stop,       kSI_8,
        kSI_Stop,       kSI_8,          kSI_Stop,       kSI_5,
        kSI_1,          kSI_Stop,
        /*06*/
        kSI_4,          kSI_Stop,       kSI_7,          kSI_Stop,
        kSI_Stop,       kSI_Stop,       kSI_Stop,       kSI_Stop,
        kSI_9,          kSI_Stop,       kSI_11,         kSI_6,
        kSI_1,          kSI_Stop,
        /*07*/
        kSI_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,
        /*08*/
        kSI_4,          kSI_2,          kSI_7,          kSI_Stop,
        kSI_Stop,       kSI_Stop,       kSI_Stop,       kSI_8,
        kSI_Stop,       kSI_8,          kSI_Stop,       kSI_8,
        kSI_1,          kSI_Stop,
        /*09*/
        kSI_4,          kSI_2,          kSI_7,          kSI_3,
        kSI_6,          kSI_Stop,       kSI_Stop,       kSI_8,
        kSI_9,          kSI_10,         kSI_10,         kSI_9,
        kSI_1,          kSI_Stop,
        /*10*/
        kSI_4,          kSI_2,          kSI_7,          kSI_Stop,
        kSI_Stop,       kSI_Stop,       kSI_Stop,       kSI_8,
        kSI_9,          kSI_8,          kSI_Stop,       kSI_10,
        kSI_1,          kSI_Stop,
        /*11*/
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,          kStop,          kStop,
        kSI_9,          kStop,          kStop,          11,
        kSI_1,          kStop
};

const int32_t TextBoundaryData::kLineForwardData_length =
    sizeof(TextBoundaryData::kLineForwardData) / sizeof(TextBoundaryData::kLineForwardData[0]);

WordBreakTable* TextBoundaryData::kLineForward =
    new WordBreakTable(kLineCol_count, kLineForwardData, kLineForwardData_length);

// The backward transition states of line boundary data.
TextBoundaryData::Node TextBoundaryData::kLineBackwardData[] =
{
        // brk          bl              cr              nBl
        // op           kan             prJ             poJ
        // dgt          np              curr            nsm
        // nbsp         EOS
        /*00*/
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,
        /*01*/
        kSI_1,          kSI_1,          kSI_1,          kSI_2,
        kSI_2,          kSI_4,          kSI_2,          kSI_3,
        kSI_2,          kSI_3,          kSI_2,          kSI_1,
        kSI_2,          kStop,
        /*02*/
        kStop,          kStop,          kStop,          kSI_2,
        kSI_2,          kStop,          kSI_2,          kSI_3,
        kSI_2,          kSI_3,          kSI_2,          kSI_2,
        kSI_2,          kStop,
        /*03*/
        kStop,          kStop,          kStop,          kSI_2,
        kStop,          kSI_4,          kSI_2,          kSI_3,
        kSI_2,          kSI_3,          kSI_2,          kSI_3,
        kSI_2,          kStop,
        /*04*/
        kStop,          kStop,          kStop,          kStop,
        kStop,          kStop,          kSI_2,          kStop,
        kStop,          kStop,          kSI_2,          kSI_4,
        kSI_4,          kStop
};

const int32_t TextBoundaryData::kLineBackwardData_length =
    sizeof(TextBoundaryData::kLineBackwardData) / sizeof(TextBoundaryData::kLineBackwardData[0]);

WordBreakTable* TextBoundaryData::kLineBackward =
    new WordBreakTable(kLineCol_count, kLineBackwardData, kLineBackwardData_length);

// The line type mapping of the break table.
TextBoundaryData::Type TextBoundaryData::kLineRawMapping[] = {
    // Re-coded to match Unicode 2 types [LIU]
    kLineNonBlank,  // UNASSIGNED               = 0,
    kLineNonBlank,  // UPPERCASE_LETTER         = 1,
    kLineNonBlank,  // LOWERCASE_LETTER         = 2,
    kLineNonBlank,  // TITLECASE_LETTER         = 3,
    kLineNonBlank,  // MODIFIER_LETTER          = 4,
    kLineNonBlank,  // OTHER_LETTER             = 5,
    kLineNsm,       // NON_SPACING_MARK         = 6,
    kLineNsm,       // ENCLOSING_MARK           = 7,
    kLineNonBlank,  // COMBINING_SPACING_MARK   = 8,
    kLineDigit,     // DECIMAL_DIGIT_NUMBER     = 9,
    kLineNonBlank,  // LETTER_NUMBER            = 10,
    kLineDigit,     // OTHER_NUMBER             = 11,
    kLineBlank,     // SPACE_SEPARATOR          = 12,
    kLineBlank,     // LINE_SEPARATOR           = 13,
    kLineBlank,     // PARAGRAPH_SEPARATOR      = 14,
    kLineBlank,     // CONTROL                  = 15,
    kLineNonBlank,  // FORMAT                   = 16,
    kLineNonBlank,  // PRIVATE_USE              = 17,
    kLineNonBlank,  // SURROGATE                = 18,
    kLineOp,        // DASH_PUNCTUATION         = 19,
    kLinePreJwrd,   // START_PUNCTUATION        = 20,
    kLinePostJwrd,  // END_PUNCTUATION          = 21,
    kLineNonBlank,  // CONNECTOR_PUNCTUATION    = 22,
    kLineNonBlank,  // OTHER_PUNCTUATION        = 23,
    kLineNonBlank,  // MATH_SYMBOL              = 24,
    kLinePreJwrd,   // CURRENCY_SYMBOL          = 25,
    kLineNonBlank,  // MODIFIER_SYMBOL          = 26,
    kLineNonBlank,  // OTHER_SYMBOL             = 27,
    kLineNonBlank   // UNDEFINED                = 28
};

const int32_t TextBoundaryData::kLineRawMapping_length =
    sizeof(TextBoundaryData::kLineRawMapping)/sizeof(TextBoundaryData::kLineRawMapping[0]);

// The exceptions of the line break data.
SpecialMapping TextBoundaryData::kLineExceptionChar[] = {
        //note: the ranges in this table must be sorted in ascending order as
        //      required by the UnicodeClassMapping class.
        SpecialMapping(TextBoundaryData::ASCII_END_OF_TEXT, TextBoundaryData::kLineBreak),
        SpecialMapping(TextBoundaryData::ASCII_HORIZONTAL_TABULATION,
                       TextBoundaryData::ASCII_FORM_FEED, TextBoundaryData::kLineBreak),
        SpecialMapping(TextBoundaryData::ASCII_CARRIAGE_RETURN, TextBoundaryData::kLineCR),
        SpecialMapping(TextBoundaryData::ASCII_EXCLAMATION_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::ASCII_DOLLAR_SIGN, TextBoundaryData::kLinePreJwrd),
        SpecialMapping(TextBoundaryData::ASCII_PERCENT, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::ASCII_COMMA, TextBoundaryData::kLineNumPunct),
        SpecialMapping(TextBoundaryData::ASCII_FULL_STOP, TextBoundaryData::kLineNumPunct),
        SpecialMapping(TextBoundaryData::ASCII_COLON, TextBoundaryData::ASCII_SEMICOLON, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::ASCII_QUESTION_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::ASCII_NONBREAKING_SPACE, TextBoundaryData::kLineNbsp),
        SpecialMapping(TextBoundaryData::ASCII_CENT_SIGN, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::LATIN1_SOFTHYPHEN, TextBoundaryData::kLineOp),
        SpecialMapping(TextBoundaryData::LATIN1_DEGREE_SIGN, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::ARABIC_PERCENT_SIGN, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::FIGURE_SPACE, TextBoundaryData::kLineNbsp),
        SpecialMapping(TextBoundaryData::NONBREAKING_HYPHEN, TextBoundaryData::kLineNbsp),
        SpecialMapping(TextBoundaryData::PUNCTUATION_LINE_SEPARATOR,
                       TextBoundaryData::PUNCTUATION_PARAGRAPH_SEPARATOR, TextBoundaryData::kLineBreak),
        SpecialMapping(TextBoundaryData::PER_MILLE_SIGN, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::PER_TEN_THOUSAND_SIGN, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::PRIME, TextBoundaryData::TRIPLE_PRIME, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::DEGREE_CELSIUS, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::DEGREE_FAHRENHEIT, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::PUNCTUATION_IDEOGRAPHIC_COMMA,
                       TextBoundaryData::PUNCTUATION_IDEOGRAPHIC_FULL_STOP, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::IDEOGRAPHIC_ITERATION_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_A, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_A, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_I, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_I, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_U, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_U, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_E, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_E, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_O, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_O, TextBoundaryData::HIRAGANA_LETTER_DI, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_TU, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_TU, TextBoundaryData::HIRAGANA_LETTER_MO, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_YA, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_YA, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_YU, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_YU, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_YO, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_YO, TextBoundaryData::HIRAGANA_LETTER_RO, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_SMALL_WA, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_LETTER_WA, TextBoundaryData::HIRAGANA_LETTER_VU, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::COMBINING_KATAKANA_HIRAGANA_VOICED_SOUND_MARK,
                       TextBoundaryData::HIRAGANA_SEMIVOICED_SOUND_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::HIRAGANA_ITERATION_MARK, TextBoundaryData::HIRAGANA_VOICED_ITERATION_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_A, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_A, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_I, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_I, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_U, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_U, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_E, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_E, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_O, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_O, TextBoundaryData::KATAKANA_LETTER_DI, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_TU, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_TU, TextBoundaryData::KATAKANA_LETTER_MO, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_YA, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_YA, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_YU, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_YU, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_YO, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_YO, TextBoundaryData::KATAKANA_LETTER_RO, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_WA, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_WA, TextBoundaryData::KATAKANA_LETTER_VU, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_SMALL_KA, TextBoundaryData::KATAKANA_LETTER_SMALL_KE, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_LETTER_VA, TextBoundaryData::KATAKANA_LETTER_VO, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_HIRAGANA_PROLONGED_SOUND_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::KATAKANA_ITERATION_MARK, TextBoundaryData::KATAKANA_VOICED_ITERATION_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::UNICODE_LOW_BOUND_HAN, TextBoundaryData::UNICODE_HIGH_BOUND_HAN,TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::CJK_COMPATIBILITY_F900,
                       TextBoundaryData::CJK_COMPATIBILITY_FA2D, TextBoundaryData::kLineJwrd),
        SpecialMapping(TextBoundaryData::UNICODE_ZERO_WIDTH_NON_BREAKING_SPACE, TextBoundaryData::kLineNbsp),
        SpecialMapping(TextBoundaryData::FULLWIDTH_EXCLAMATION_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::FULLWIDTH_FULL_STOP, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::FULLWIDTH_QUESTION_MARK, TextBoundaryData::kLinePostJwrd),
        SpecialMapping(TextBoundaryData::END_OF_STRING, TextBoundaryData::kLineEOS)
};

const int32_t TextBoundaryData::kLineExceptionChar_length =
    sizeof(TextBoundaryData::kLineExceptionChar)/sizeof(TextBoundaryData::kLineExceptionChar[0]);

const bool_t TextBoundaryData::kLineExceptionFlags[] = {
        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,
        TRUE,           // kSpaceSeparator          = 12,
        TRUE,           // kLineSeparator           = 13,
        TRUE,           // kParagraphSeparator      = 14,
        TRUE,           // kControlCharacter        = 15,
        TRUE,           // 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,
        TRUE,           // kOtherSymbol             = 27
        FALSE           // UNDEFINED                = 28,
    };

TextBoundaryData::Type TextBoundaryData::kLineAsciiValues[] = {

        //  null            soh             stx             etx             eot             enq             ask             bell
            kLineBlank,     kLineBlank,     kLineBlank,     kLineBreak,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,
        //  bs              ht              lf              vt              ff              cr              so              si
            kLineBlank,     kLineBreak,     kLineBreak,     kLineBreak,     kLineBreak,     kLineCR,        kLineBlank,     kLineBlank,
        //  dle             dc1             dc2             dc3             dc4             nak             syn             etb
            kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,
        //  can             em              sub             esc             fs              gs              rs              us
            kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,
        //  sp              !               "               #               $               %               &               '
            kLineBlank,     kLinePostJwrd,  kLineNonBlank,  kLineNonBlank,  kLineCurrency,  kLinePostJwrd,  kLineNonBlank,  kLineNonBlank,
        //  (               )               *               +               ,               -               .               /
            kLinePreJwrd,   kLinePostJwrd,  kLineNonBlank,  kLineNonBlank,  kLineNumPunct,  kLineOp,        kLineNumPunct,  kLineNonBlank,
        //  0               1               2               3               4               5               6               7
            kLineDigit,     kLineDigit,     kLineDigit,     kLineDigit,     kLineDigit,     kLineDigit,     kLineDigit,     kLineDigit,
        //  8               9               :               ;               <               =               >               ?
            kLineDigit,     kLineDigit,     kLinePostJwrd,  kLinePostJwrd,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,   kLinePostJwrd,
        //  @               A               B               C               D               E               F               G
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  H               I               J               K               L               M               N               O
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  P               Q               R               S               T               U               V               W
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  X               Y               Z               [               \               ]               ^               _
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLinePreJwrd,   kLineNonBlank,  kLinePostJwrd,  kLineNonBlank,  kLineNonBlank,
        //  `               a               b               c               d               e               f               g
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  h               i               j               k               l               m               n               o
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  p               q               r               s               t               u               v               w
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  x               y               z               {               |               }               ~               del
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLinePreJwrd,   kLineNonBlank,  kLinePostJwrd,  kLineNonBlank,  kLineBlank,
        //  ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl
            kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,
        //  ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl
            kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,
        //  ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl
            kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,
        //  ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl            ctrl
            kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,     kLineBlank,
        //  kLineNbsp       inv-!           cents           pounds          currency        yen             broken-bar      section
            kLineNbsp,      kLineNonBlank,  kLinePostJwrd,  kLineCurrency,  kLineCurrency,  kLineCurrency,  kLineNonBlank,  kLineNonBlank,
        //  umlaut          copyright       super-a         gui-left        not             soft-hyph       registered      macron
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLinePreJwrd,   kLineNonBlank,  kLineOp,        kLineNonBlank,  kLineNonBlank,
        //  degree          +/-             super-2         super-3         acute           micro           paragraph       bullet
            kLinePostJwrd,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  cedilla         super-1         super-o         gui-right       1/4             1/2             3/4             inv-?
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLinePostJwrd,  kLineDigit,     kLineDigit,     kLineDigit,     kLineNonBlank,
        //  A-grave         A-acute         A-hat           A-tilde         A-umlaut        A-ring          AE              C-cedilla
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  E-grave         E-acute         E-hat           E-umlaut        I-grave         I-acute         I-hat           I-umlaut
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  Edh             N-tilde         O-grave         O-acute         O-hat           O-tilde         O-umlaut        times
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  O=slash         U-grave         U-acute         U-hat           U-umlaut        Y-acute         Thorn           ess-zed
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  a-grave         a-acute         a-hat           a-tilde         a-umlaut        a-ring          ae              c-cedilla
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  e-grave         e-acute         e-hat           e-umlaut        i-grave         i-acute         i-hat           i-umlaut
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  edh             n-tilde         o-grave         o-acute         o-hat           o-tilde         o-umlaut        over
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,
        //  o-slash         u-grave         u-acute         u-hat           u-umlaut        y-acute         thorn           y-umlaut
            kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank,  kLineNonBlank
    };


UnicodeClassMapping* TextBoundaryData::kLineMap =
    new UnicodeClassMapping(kLineRawMapping, kLineRawMapping_length, 
                            kLineExceptionChar, kLineExceptionChar_length,
                            kLineExceptionFlags,
                            kLineAsciiValues );

/**
 * This is the single instance of TextBoundaryData containing line
 * break data.
 */
const TextBoundaryData TextBoundaryData::kLineBreakData(TextBoundaryData::kLineForward,
                                                        TextBoundaryData::kLineBackward,
                                                        TextBoundaryData::kLineMap);

//eof
