home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Metrowerks CodeWarrior / Java Support / Java_Source / Java2 / src / java / text / LineBreakData.java < prev    next >
Encoding:
Java Source  |  1999-05-28  |  21.7 KB  |  412 lines  |  [TEXT/CWIE]

  1. /*
  2.  * @(#)LineBreakData.java    1.12 98/07/24
  3.  *
  4.  * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
  5.  * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
  6.  *
  7.  * Portions copyright (c) 1996-1998 Sun Microsystems, Inc.
  8.  * All Rights Reserved.
  9.  *
  10.  * The original version of this source code and documentation
  11.  * is copyrighted and owned by Taligent, Inc., a wholly-owned
  12.  * subsidiary of IBM. These materials are provided under terms
  13.  * of a License Agreement between Taligent and Sun. This technology
  14.  * is protected by multiple US and International patents.
  15.  *
  16.  * This notice and attribution to Taligent may not be removed.
  17.  * Taligent is a registered trademark of Taligent, Inc.
  18.  *
  19.  * Permission to use, copy, modify, and distribute this software
  20.  * and its documentation for NON-COMMERCIAL purposes and without
  21.  * fee is hereby granted provided that this copyright notice
  22.  * appears in all copies. Please refer to the file "copyright.html"
  23.  * for further important copyright and licensing information.
  24.  *
  25.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  26.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  27.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  28.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  29.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  30.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  31.  *
  32.  */
  33.  
  34. package java.text;
  35.  
  36. /**
  37.  * The LineBreakData contains data used by SimpleTextBoundary
  38.  * to determine line breaks.
  39.  * @see #BreakIterator
  40.  */
  41. final class LineBreakData extends TextBoundaryData
  42. {
  43.     private static final byte BREAK                 = 0;
  44.     //always breaks (must be present as first item)
  45.     private static final byte blank                 = 1;
  46.     //spaces, tabs, nulls.
  47.     private static final byte cr                    = 2;
  48.     //carriage return
  49.     private static final byte nonBlank              = 3;
  50.     //everything not included elsewhere
  51.     private static final byte op                    = 4;
  52.     //hyphens....
  53.     private static final byte jwrd                  = 5;
  54.     //hiragana, katakana, and kanji
  55.     private static final byte preJwrd               = 6;
  56.     //characters that bind to the beginning of a Japanese word
  57.     private static final byte postJwrd              = 7;
  58.     //characters that bind to the end of a Japanese word
  59.     private static final byte digit                 = 8;
  60.     //digits
  61.     private static final byte numPunct              = 9;
  62.     //punctuation that can appear within a number
  63.     private static final byte currency              = 10;
  64.     //currency symbols that can precede a number
  65.     private static final byte nsm                   = 11;
  66.     // non-spacing marks
  67.     private static final byte nbsp                  = 12;
  68.     // non-breaking characters
  69.     private static final byte EOS                   = 13;
  70.     private static final int COL_COUNT = 14;
  71.  
  72.     private static final byte SI = (byte)0x80;
  73.     private static final byte STOP = (byte) 0;
  74.     private static final byte SI_STOP = (byte)SI + STOP;
  75.  
  76.     public LineBreakData() {
  77.         super(kLineForward, kLineBackward, kLineMap);
  78.     }
  79.  
  80.     private static final byte kLineForwardData[] =
  81.     {
  82.         // brk         bl             cr             nBl
  83.         // op          kan            prJ            poJ
  84.         // dgt         np             curr           nsm
  85.         // nbsp        EOS
  86.         /*00*/
  87.         STOP,          STOP,          STOP,          STOP,
  88.         STOP,          STOP,          STOP,          STOP,
  89.         STOP,          STOP,          STOP,          STOP,
  90.         STOP,          STOP,
  91.         /*01*/
  92.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  (byte)(SI+3),
  93.         (byte)(SI+6),  (byte)(SI+5),  (byte)(SI+1),  (byte)(SI+8),
  94.         (byte)(SI+9),  (byte)(SI+8),  (byte)(SI+1),  (byte)(SI+1),
  95.         (byte)(SI+1),  SI_STOP,
  96.         /*02*/
  97.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  98.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  99.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+2),
  100.         (byte)(SI+1),  SI_STOP,
  101.         /*03*/
  102.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  (byte)(SI+3),
  103.         (byte)(SI+6),  SI_STOP,       SI_STOP,       (byte)(SI+8),
  104.         (byte)(SI+9),  (byte)(SI+8),  SI_STOP,       (byte)(SI+3),
  105.         (byte)(SI+1),  SI_STOP,
  106.         /*04*/
  107.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  108.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  109.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  110.         SI_STOP,       SI_STOP,
  111.         /*05*/
  112.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  113.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+8),
  114.         SI_STOP,       (byte)(SI+8),  SI_STOP,       (byte)(SI+5),
  115.         (byte)(SI+1),  SI_STOP,
  116.         /*06*/
  117.         (byte)(SI+4),  SI_STOP,       (byte)(SI+7),  SI_STOP,
  118.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  119.         (byte)(SI+9),  SI_STOP,       (byte)(SI+11), (byte)(SI+6),
  120.         (byte)(SI+1),  SI_STOP,
  121.         /*07*/
  122.         (byte)(SI+4),  SI_STOP,       SI_STOP,       SI_STOP,
  123.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  124.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  125.         SI_STOP,       SI_STOP,
  126.         /*08*/
  127.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  128.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+8),
  129.         SI_STOP,       (byte)(SI+8),  SI_STOP,       (byte)(SI+8),
  130.         (byte)(SI+1),  SI_STOP,
  131.         /*09*/
  132.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  (byte)(SI+3),
  133.         (byte)(SI+6),  SI_STOP,       SI_STOP,       (byte)(SI+8),
  134.         (byte)(SI+9),  (byte)(SI+10), (byte)(SI+10), (byte)(SI+9),
  135.         (byte)(SI+1),  SI_STOP,
  136.         /*10*/
  137.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  138.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+8),
  139.         (byte)(SI+9),  (byte)(SI+8),  SI_STOP,       (byte)(SI+10),
  140.         (byte)(SI+1),  SI_STOP,
  141.         /*11*/
  142.         STOP,          STOP,          STOP,          STOP,
  143.         STOP,          STOP,          STOP,          STOP,
  144.         (byte)(SI+9),  STOP,          STOP,          (byte)(11),
  145.         (byte)(SI+1),  STOP
  146.     };
  147.  
  148.     private static final WordBreakTable kLineForward
  149.         = new WordBreakTable(COL_COUNT, kLineForwardData);
  150.  
  151.     private static final byte kLineBackwardData[] =
  152.     {
  153.         // brk         bl             cr             nBl
  154.         // op          kan            prJ            poJ
  155.         // dgt         np             curr           nsm
  156.         // nbsp        EOS
  157.         /*00*/
  158.         STOP,          STOP,          STOP,          STOP,
  159.         STOP,          STOP,          STOP,          STOP,
  160.         STOP,          STOP,          STOP,          STOP,
  161.         STOP,          STOP,
  162.         /*01*/
  163.         (byte)(SI+1),  (byte)(SI+1),  (byte)(SI+1),  (byte)(SI+2),
  164.         (byte)(SI+2),  (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+3),
  165.         (byte)(SI+2),  (byte)(SI+3),  (byte)(SI+2),  (byte)(SI+1),
  166.         (byte)(SI+2),  STOP,
  167.         /*02*/
  168.         STOP,          STOP,          STOP,          (byte)(SI+2),
  169.         (byte)(SI+2),  STOP,          (byte)(SI+2),  (byte)(SI+3),
  170.         (byte)(SI+2),  (byte)(SI+3),  (byte)(SI+2),  (byte)(SI+2),
  171.         (byte)(SI+2),  STOP,
  172.         /*03*/
  173.         STOP,          STOP,          STOP,          (byte)(SI+2),
  174.         STOP,          (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+3),
  175.         (byte)(SI+2),  (byte)(SI+3),  (byte)(SI+2),  (byte)(SI+3),
  176.         (byte)(SI+2),  STOP,
  177.         /*04*/
  178.         STOP,          STOP,          STOP,          STOP,
  179.         STOP,          STOP,          (byte)(SI+2),  STOP,
  180.         STOP,          STOP,          (byte)(SI+2),  (byte)(SI+4),
  181.         (byte)(SI+4),  STOP
  182.     };
  183.  
  184.     private static final WordBreakTable kLineBackward
  185.         = new WordBreakTable(COL_COUNT, kLineBackwardData);
  186.  
  187.     private static final int kRawMapping[] =
  188.     {
  189.         nonBlank, //UNASSIGNED             = 0,
  190.         nonBlank, //UPPERCASE_LETTER       = 1,
  191.         nonBlank, //LOWERCASE_LETTER       = 2,
  192.         nonBlank, //TITLECASE_LETTER       = 3,
  193.         nonBlank, //MODIFIER_LETTER        = 4,
  194.         nonBlank, //OTHER_LETTER           = 5,
  195.         nsm,      //NON_SPACING_MARK       = 6,
  196.         nsm,      //ENCLOSING_MARK         = 7,
  197.         nonBlank, //COMBINING_SPACING_MARK = 8,
  198.         digit, //DECIMAL_DIGIT_NUMBER      = 9,
  199.         nonBlank, //LETTER_NUMBER          = 10,
  200.         digit, //OTHER_NUMBER              = 11,
  201.         blank, //SPACE_SEPARATOR           = 12,
  202.         blank, //LINE_SEPARATOR            = 13,
  203.         blank, //PARAGRAPH_SEPARATOR       = 14,     ???????????
  204.         blank, //CONTROL                   = 15,
  205.         nonBlank, //PRIVATE_USE            = 16,
  206.         nonBlank, //FORMAT                 = 17
  207.         nonBlank, //????                   = 18,
  208.         nonBlank, //SURROGATE              = 19,
  209.         op, //DASH_PUNCTUATION             = 20,
  210.         preJwrd, //START_PUNCTUATION       = 21,
  211.         postJwrd, //END_PUNCTUATION        = 22,
  212.         nonBlank, //CONNECTOR_PUNCTUATION  = 23,
  213.         nonBlank, //OTHER_PUNCTUATION      = 24,
  214.         nonBlank, //MATH_SYMBOL            = 25,
  215.         preJwrd, //CURRENCY_SYMBOL         = 26,
  216.         nonBlank, //MODIFIER_SYMBOL        = 27,
  217.         nonBlank  //OTHER_SYMBOL           = 28;
  218.     };
  219.  
  220.     private static SpecialMapping kExceptionChar[] =
  221.     {
  222.         //note: the ranges in this table must be sorted in ascending order as
  223.         //      required by the UnicodeClassMapping class.
  224.         new SpecialMapping(ASCII_END_OF_TEXT, BREAK),
  225.         new SpecialMapping(ASCII_HORIZONTAL_TABULATION,
  226.                            ASCII_FORM_FEED, BREAK),
  227.         new SpecialMapping(ASCII_CARRIAGE_RETURN, cr),
  228.         new SpecialMapping(ASCII_EXCLAMATION_MARK, postJwrd),
  229.         new SpecialMapping(ASCII_DOLLAR_SIGN, preJwrd),
  230.         new SpecialMapping(ASCII_PERCENT, postJwrd),
  231.         new SpecialMapping(ASCII_COMMA, numPunct),
  232.         new SpecialMapping(ASCII_FULL_STOP, numPunct),
  233.         new SpecialMapping(ASCII_COLON, ASCII_SEMICOLON, postJwrd),
  234.         new SpecialMapping(ASCII_QUESTION_MARK, postJwrd),
  235.         new SpecialMapping(ASCII_NONBREAKING_SPACE, nbsp),
  236.         new SpecialMapping(ASCII_CENT_SIGN, postJwrd),
  237.         new SpecialMapping(LATIN1_SOFTHYPHEN, op),
  238.         new SpecialMapping(LATIN1_DEGREE_SIGN, postJwrd),
  239.         new SpecialMapping(ARABIC_PERCENT_SIGN, postJwrd),
  240.         new SpecialMapping(FIGURE_SPACE, nbsp),
  241.         new SpecialMapping(NONBREAKING_HYPHEN, nbsp),
  242.         new SpecialMapping(PUNCTUATION_LINE_SEPARATOR,
  243.                            PUNCTUATION_PARAGRAPH_SEPARATOR, BREAK),
  244.         new SpecialMapping(PER_MILLE_SIGN, postJwrd),
  245.         new SpecialMapping(PER_TEN_THOUSAND_SIGN, postJwrd),
  246.         new SpecialMapping(PRIME, TRIPLE_PRIME, postJwrd),
  247.         new SpecialMapping(DEGREE_CELSIUS, postJwrd),
  248.         new SpecialMapping(DEGREE_FAHRENHEIT, postJwrd),
  249.         new SpecialMapping(PUNCTUATION_IDEOGRAPHIC_COMMA,
  250.                            PUNCTUATION_IDEOGRAPHIC_FULL_STOP, postJwrd),
  251.         new SpecialMapping(IDEOGRAPHIC_ITERATION_MARK, postJwrd),
  252.         new SpecialMapping(HIRAGANA_LETTER_SMALL_A, postJwrd),
  253.         new SpecialMapping(HIRAGANA_LETTER_A, jwrd),
  254.         new SpecialMapping(HIRAGANA_LETTER_SMALL_I, postJwrd),
  255.         new SpecialMapping(HIRAGANA_LETTER_I, jwrd),
  256.         new SpecialMapping(HIRAGANA_LETTER_SMALL_U, postJwrd),
  257.         new SpecialMapping(HIRAGANA_LETTER_U, jwrd),
  258.         new SpecialMapping(HIRAGANA_LETTER_SMALL_E, postJwrd),
  259.         new SpecialMapping(HIRAGANA_LETTER_E, jwrd),
  260.         new SpecialMapping(HIRAGANA_LETTER_SMALL_O, postJwrd),
  261.         new SpecialMapping(HIRAGANA_LETTER_O, HIRAGANA_LETTER_DI, jwrd),
  262.         new SpecialMapping(HIRAGANA_LETTER_SMALL_TU, postJwrd),
  263.         new SpecialMapping(HIRAGANA_LETTER_TU, HIRAGANA_LETTER_MO, jwrd),
  264.         new SpecialMapping(HIRAGANA_LETTER_SMALL_YA, postJwrd),
  265.         new SpecialMapping(HIRAGANA_LETTER_YA, jwrd),
  266.         new SpecialMapping(HIRAGANA_LETTER_SMALL_YU, postJwrd),
  267.         new SpecialMapping(HIRAGANA_LETTER_YU, jwrd),
  268.         new SpecialMapping(HIRAGANA_LETTER_SMALL_YO, postJwrd),
  269.         new SpecialMapping(HIRAGANA_LETTER_YO, HIRAGANA_LETTER_RO, jwrd),
  270.         new SpecialMapping(HIRAGANA_LETTER_SMALL_WA, postJwrd),
  271.         new SpecialMapping(HIRAGANA_LETTER_WA, HIRAGANA_LETTER_VU, jwrd),
  272.         new SpecialMapping(COMBINING_KATAKANA_HIRAGANA_VOICED_SOUND_MARK,
  273.                            HIRAGANA_SEMIVOICED_SOUND_MARK, postJwrd),
  274.         new SpecialMapping(HIRAGANA_ITERATION_MARK, HIRAGANA_VOICED_ITERATION_MARK, postJwrd),
  275.         new SpecialMapping(KATAKANA_LETTER_SMALL_A, postJwrd),
  276.         new SpecialMapping(KATAKANA_LETTER_A, jwrd),
  277.         new SpecialMapping(KATAKANA_LETTER_SMALL_I, postJwrd),
  278.         new SpecialMapping(KATAKANA_LETTER_I, jwrd),
  279.         new SpecialMapping(KATAKANA_LETTER_SMALL_U, postJwrd),
  280.         new SpecialMapping(KATAKANA_LETTER_U, jwrd),
  281.         new SpecialMapping(KATAKANA_LETTER_SMALL_E, postJwrd),
  282.         new SpecialMapping(KATAKANA_LETTER_E, jwrd),
  283.         new SpecialMapping(KATAKANA_LETTER_SMALL_O, postJwrd),
  284.         new SpecialMapping(KATAKANA_LETTER_O, KATAKANA_LETTER_DI, jwrd),
  285.         new SpecialMapping(KATAKANA_LETTER_SMALL_TU, postJwrd),
  286.         new SpecialMapping(KATAKANA_LETTER_TU, KATAKANA_LETTER_MO, jwrd),
  287.         new SpecialMapping(KATAKANA_LETTER_SMALL_YA, postJwrd),
  288.         new SpecialMapping(KATAKANA_LETTER_YA, jwrd),
  289.         new SpecialMapping(KATAKANA_LETTER_SMALL_YU, postJwrd),
  290.         new SpecialMapping(KATAKANA_LETTER_YU, jwrd),
  291.         new SpecialMapping(KATAKANA_LETTER_SMALL_YO, postJwrd),
  292.         new SpecialMapping(KATAKANA_LETTER_YO, KATAKANA_LETTER_RO, jwrd),
  293.         new SpecialMapping(KATAKANA_LETTER_SMALL_WA, postJwrd),
  294.         new SpecialMapping(KATAKANA_LETTER_WA, KATAKANA_LETTER_VU, jwrd),
  295.         new SpecialMapping(KATAKANA_LETTER_SMALL_KA, KATAKANA_LETTER_SMALL_KE, postJwrd),
  296.         new SpecialMapping(KATAKANA_LETTER_VA, KATAKANA_LETTER_VO, jwrd),
  297.         new SpecialMapping(KATAKANA_HIRAGANA_PROLONGED_SOUND_MARK, postJwrd),
  298.         new SpecialMapping(KATAKANA_ITERATION_MARK, KATAKANA_VOICED_ITERATION_MARK, postJwrd),
  299.         new SpecialMapping(UNICODE_LOW_BOUND_HAN,UNICODE_HIGH_BOUND_HAN,jwrd),
  300.         new SpecialMapping(CJK_COMPATIBILITY_F900,
  301.                            CJK_COMPATIBILITY_FA2D, jwrd),
  302.         new SpecialMapping(UNICODE_ZERO_WIDTH_NON_BREAKING_SPACE, nbsp),
  303.         new SpecialMapping(FULLWIDTH_EXCLAMATION_MARK, postJwrd),
  304.         new SpecialMapping(FULLWIDTH_FULL_STOP, postJwrd),
  305.         new SpecialMapping(FULLWIDTH_QUESTION_MARK, postJwrd),
  306.         new SpecialMapping(END_OF_STRING, EOS)
  307.     };
  308.  
  309.     private static final boolean LineExceptionFlags[] = {
  310.         false,          // kNonCharacter            = 0,
  311.         false,          // kUppercaseLetter         = 1,
  312.         false,          // kLowercaseLetter         = 2,
  313.         false,          // kTitlecaseLetter         = 3,
  314.         true,           // kModifierLetter          = 4,
  315.         true,           // kOtherLetter             = 5,
  316.         true,           // kNonSpacingMark          = 6,
  317.         false,          // kEnclosingMark           = 7,
  318.         false,          // kCombiningSpacingMark    = 8,
  319.         false,          // kDecimalNumber           = 9,
  320.         false,          // kLetterNumber            = 10,
  321.         false,          // kOtherNumber             = 11,
  322.         true,           // kSpaceSeparator          = 12,
  323.         true,           // kLineSeparator           = 13,
  324.         true,           // kParagraphSeparator      = 14,
  325.         true,           // kControlCharacter        = 15,
  326.         true,           // kFormatCharacter         = 16,
  327.         false,          // UNDEFINED                = 17,
  328.         false,          // kPrivateUseCharacter     = 18,
  329.         false,          // kSurrogate               = 19,
  330.         true,           // kDashPunctuation         = 20,
  331.         false,          // kOpenPunctuation         = 21,
  332.         false,          // kClosePunctuation        = 22,
  333.         false,          // kConnectorPunctuation    = 23,
  334.         true,           // kOtherPunctuation        = 24,
  335.         false,          // kMathSymbol              = 25,
  336.         true,           // kCurrencySymbol          = 26,
  337.         false,          // kModifierSymbol          = 27,
  338.         true            // kOtherSymbol             = 28
  339.     };
  340.  
  341.     private static final int kLineAsciiValues[] = {
  342.         //  null    soh     stx     etx     eot     enq     ask     bell
  343.             blank,  blank,  blank,  BREAK,  blank,  blank,  blank,  blank,
  344.         //  bs      ht      lf      vt      ff      cr      so      si
  345.             blank,  BREAK,  BREAK,  BREAK,  BREAK,  cr,     blank,  blank,
  346.         //  dle     dc1     dc2     dc3     dc4     nak     syn     etb
  347.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  348.         //  can     em      sub     esc     fs      gs      rs      us
  349.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  350.         //  sp      !         "         #         $         %         &         '
  351.             blank,  postJwrd, nonBlank, nonBlank, currency, postJwrd, nonBlank, nonBlank,
  352.         //  (       )          *         +         ,         -   .         /
  353.             preJwrd, postJwrd, nonBlank, nonBlank, numPunct, op, numPunct, nonBlank,
  354.         //  0         1         2         3         4         5         6         7
  355.             digit,    digit,    digit,    digit,    digit,    digit,    digit,    digit,
  356.         //  8         9         :         ;         <         =         >         ?
  357.             digit,    digit,    postJwrd, postJwrd, nonBlank, nonBlank, nonBlank, postJwrd,
  358.         //  @         A         B         C         D         E         F         G
  359.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  360.         //  H         I         J         K         L         M         N         O
  361.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  362.         //  P         Q         R         S         T         U         V         W
  363.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  364.         //  X         Y         Z         [        \         ]         ^         _
  365.             nonBlank, nonBlank, nonBlank, preJwrd, nonBlank, postJwrd, nonBlank, nonBlank,
  366.         //  `         a         b         c         d         e         f         g
  367.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  368.         //  h         i         j         k         l         m         n         o
  369.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  370.         //  p         q         r         s         t         u         v         w
  371.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  372.         //  x         y         z         {        |         }         ~         del
  373.             nonBlank, nonBlank, nonBlank, preJwrd, nonBlank, postJwrd, nonBlank, blank,
  374.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  375.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  376.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  377.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  378.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  379.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  380.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  381.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  382.         //  nbsp      inv-!     cents     pounds    currency  yen       broken-bar  section
  383.             nbsp,  nonBlank, postJwrd, currency, currency, currency, nonBlank, nonBlank,
  384.         //  umlaut    copyright super-a   gui-left  not       soft-hyph registered  macron
  385.             nonBlank, nonBlank, nonBlank, preJwrd, nonBlank, op, nonBlank, nonBlank,
  386.         //  degree    +/-       super-2   super-3   acute     micro     paragraph  bullet
  387.             postJwrd, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  388.         //  cedilla   super-1   super-o   gui-right 1/4       1/2       3/4      inv-?
  389.             nonBlank, nonBlank, nonBlank, postJwrd, digit,    digit,    digit,    nonBlank,
  390.         //  A-grave   A-acute   A-hat     A-tilde   A-umlaut A-ring    AE        C-cedilla
  391.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  392.         //  E-grave   E-acute   E-hat     E-umlaut  I-grave   I-acute   I-hat    I-umlaut
  393.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  394.         //  Edh       N-tilde   O-grave   O-acute   O-hat     O-tilde   O-umlaut times
  395.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  396.         //  O=slash   U-grave   U-acute   U-hat     U-umlaut  Y-acute   Thorn    ess-zed
  397.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  398.         //  a-grave   a-acute   a-hat     a-tilde   a-umlaut  a-ring    ae       c-cedilla
  399.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  400.         //  e-grave   e-acute   e-hat     e-umlaut  i-grave   i-acute   i-hat    i-umlaut
  401.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  402.         //  edh       n-tilde   o-grave   o-acute   o-hat     o-tilde   o-umlaut  over
  403.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  404.         //  o-slash   u-grave   u-acute   u-hat     u-umlaut  y-acute   thorn    y=umlaut
  405.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank
  406.     };
  407.  
  408.     private static final UnicodeClassMapping kLineMap
  409.         = new UnicodeClassMapping(kRawMapping, kExceptionChar, LineExceptionFlags,
  410.         kLineAsciiValues);
  411. }
  412.