/*
*******************************************************************************
* Copyright (C) 1997-1999, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
*
* 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 UBool 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
