home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / main.bin / LineBreakData.java < prev    next >
Text File  |  1997-05-20  |  23KB  |  470 lines

  1. /*
  2.  * @(#)LineBreakData.java    1.5 97/01/17
  3.  *
  4.  * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved
  5.  * (C) Copyright IBM Corp. 1996 - All Rights Reserved
  6.  *
  7.  * Portions copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved.
  8.  *
  9.  *   The original version of this source code and documentation is copyrighted
  10.  * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
  11.  * materials are provided under terms of a License Agreement between Taligent
  12.  * and Sun. This technology is protected by multiple US and International
  13.  * patents. This notice and attribution to Taligent may not be removed.
  14.  *   Taligent is a registered trademark of Taligent, Inc.
  15.  *
  16.  * Permission to use, copy, modify, and distribute this software
  17.  * and its documentation for NON-COMMERCIAL purposes and without
  18.  * fee is hereby granted provided that this copyright notice
  19.  * appears in all copies. Please refer to the file "copyright.html"
  20.  * for further important copyright and licensing information.
  21.  *
  22.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  23.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  24.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  25.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  26.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  27.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  28.  *
  29.  */
  30.  
  31. package java.text;
  32.  
  33. /**
  34.  * The LineBreakData contains data used by SimpleTextBoundary
  35.  * to determine line breaks.
  36.  * @see #BreakIterator
  37.  */
  38. final class LineBreakData extends TextBoundaryData
  39. {
  40.     private static final byte BREAK                 = 0;
  41.     //always breaks (must be present as first item)
  42.     private static final byte blank                 = 1;
  43.     //spaces, tabs, nulls.
  44.     private static final byte cr                    = 2;
  45.     //carriage return
  46.     private static final byte nonBlank              = 3;
  47.     //everything not included elsewhere
  48.     private static final byte op                    = 4;
  49.     //hyphens....
  50.     private static final byte nami                  = 5;
  51.     //namigata (indicates range or section to be filled in) ACTS
  52.     //like non-breaking character except when next to a break or CR
  53.     private static final byte kata                  = 6;
  54.     //large katakana
  55.     private static final byte smlKata               = 7;
  56.     //small katakana (except 'tsu')
  57.     private static final byte smlKtsu               = 8;
  58.     //small katakana tsu
  59.     private static final byte choon                 = 9;
  60.     //choon mark (katakana vowel extender)
  61.     private static final byte hira                  = 10;
  62.     //large hiragana
  63.     private static final byte smlHira               = 11;
  64.     //small hiragana (except 'tsu')
  65.     private static final byte smlHtsu               = 12;
  66.     //small hiragana tsu
  67.     private static final byte hiraDitto             = 13;
  68.     //hiragana dittos
  69.     private static final byte diacrit               = 14;
  70.     // kana diacriticals (dakuten, han-dakuten)
  71.     private static final byte kanji                 = 15;
  72.     private static final byte kanjiDitto            = 16;
  73.     //kanji ditto
  74.     private static final byte preJwrd               = 17;
  75.     //characters that bind to the beginning of a Japanese word
  76.     private static final byte postJwrd              = 18;
  77.     //characters that bind to the end of a Japanese word
  78.     private static final int COL_COUNT = 19;
  79.     private static final byte SI = (byte)0x80;
  80.  
  81.     private static final byte kLineForwardData[] =
  82.     {
  83.         // brk        bl            cr            nBl
  84.         // op         nmi           kat           smK
  85.         // sKT        cho           hir           smH
  86.         // sHT        hDi           dia           kan
  87.         // kDi        prJ           poJ
  88.         /*00*/
  89.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  90.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  91.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  92.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  93.         (byte)(0),    (byte)(0),    (byte)(0),
  94.         /*01*/
  95.         (byte)(SI+4), (byte)(SI+2), (byte)(SI+4), (byte)(SI+3),
  96.         (byte)(SI+17),(byte)(SI+10), (byte)(SI+5), (byte)(SI+9),
  97.         (byte)(SI+9), (byte)(SI+9), (byte)(SI+6), (byte)(SI+9),
  98.         (byte)(SI+9), (byte)(SI+9), (byte)(SI+9), (byte)(SI+7),
  99.         (byte)(SI+9), (byte)(SI+8), (byte)(SI+3),
  100.         /*02*/
  101.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+0), (byte)(SI+0),
  102.         (byte)(SI+0),(byte)(SI+ 0), (byte)(SI+0), (byte)(SI+0),
  103.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  104.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  105.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  106.         /*03*/
  107.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+0), (byte)(SI+3),
  108.         (byte)(SI+17),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  109.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  110.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  111.         (byte)(SI+0), (byte)(SI+8), (byte)(SI+3),
  112.         /*04*/
  113.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  114.         (byte)(SI+0),(byte)(SI+ 0), (byte)(SI+0), (byte)(SI+0),
  115.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  116.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  117.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  118.         /*05*/
  119.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  120.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+12),
  121.         (byte)(SI+11),(byte)(SI+13), (byte)(SI+0), (byte)(SI+0),
  122.         (byte)(SI+0), (byte)(SI+0),(byte)(SI+12), (byte)(SI+0),
  123.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  124.         /*06*/
  125.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  126.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  127.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),(byte)(SI+15),
  128.         (byte)(SI+14),(byte)(SI+16),(byte)(SI+15), (byte)(SI+0),
  129.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  130.         /*07*/
  131.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  132.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  133.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  134.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  135.         (byte)(SI+7), (byte)(SI+0), (byte)(SI+3),
  136.         /*08*/
  137.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+3),
  138.         (byte)(SI+17),(byte)(SI+10), (byte)(SI+5), (byte)(SI+9),
  139.         (byte)(SI+9), (byte)(SI+9), (byte)(SI+6), (byte)(SI+9),
  140.         (byte)(SI+9), (byte)(SI+9), (byte)(SI+9), (byte)(SI+7),
  141.         (byte)(SI+9), (byte)(SI+8), (byte)(SI+3),
  142.         /*09*/
  143.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  144.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  145.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  146.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  147.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  148.         /*10*/
  149.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+3),
  150.         (byte)(SI+17),(byte)(SI+10), (byte)(SI+5), (byte)(SI+9),
  151.         (byte)(SI+9), (byte)(SI+9), (byte)(SI+6), (byte)(SI+9),
  152.         (byte)(SI+9), (byte)(SI+9), (byte)(SI+9), (byte)(SI+7),
  153.         (byte)(SI+9), (byte)(SI+8), (byte)(SI+3),
  154.         /*11*/
  155.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  156.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+5), (byte)(SI+0),
  157.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  158.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  159.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  160.         /*12*/
  161.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  162.         (byte)(SI+0), (byte)(SI+10), (byte)(SI+0),(byte)(SI+12),
  163.         (byte)(SI+11),(byte)(SI+13),(byte)(SI+0), (byte)(SI+0),
  164.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  165.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  166.         /*13*/
  167.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  168.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  169.         (byte)(SI+11),(byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  170.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  171.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  172.         /*14*/
  173.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  174.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  175.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+6), (byte)(SI+0),
  176.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  177.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  178.         /*15*/
  179.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  180.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  181.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),(byte)(SI+15),
  182.         (byte)(SI+14),(byte)(SI+16), (byte)(SI+0), (byte)(SI+0),
  183.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  184.         /*16*/
  185.         (byte)(SI+0), (byte)(SI+2), (byte)(SI+4), (byte)(SI+0),
  186.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  187.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  188.         (byte)(SI+14),(byte)(SI+16), (byte)(SI+0), (byte)(SI+0),
  189.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+3),
  190.         /*17*/
  191.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+4), (byte)(SI+0),
  192.         (byte)(SI+0),(byte)(SI+10), (byte)(SI+0), (byte)(SI+0),
  193.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  194.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0), (byte)(SI+0),
  195.         (byte)(SI+0), (byte)(SI+0), (byte)(SI+0)
  196.     };
  197.  
  198.     private static final WordBreakTable kLineForward
  199.         = new WordBreakTable(COL_COUNT, kLineForwardData);
  200.  
  201.     private static final byte kLineBackwardData[] =
  202.     {
  203.         // brk         bl            cr            nBl
  204.         // op          nmi           kat           smK
  205.         // sKT         cho           hir           smH
  206.         // sHT         hDi           dia           kan
  207.         // kDi         prJ           poJ
  208.         /*00*/
  209.         (byte)(0),     (byte)(0),    (byte)(0),    (byte)(0),
  210.         (byte)(0),     (byte)(0),    (byte)(0),    (byte)(0),
  211.         (byte)(0),     (byte)(0),    (byte)(0),    (byte)(0),
  212.         (byte)(0),     (byte)(0),    (byte)(0),    (byte)(0),
  213.         (byte)(0),     (byte)(0),    (byte)(0),
  214.         /*01*/
  215.         (byte)(SI+4),  (byte)(SI+1), (byte)(SI+2), (byte)(SI+3),
  216.         (byte)(SI+3),  (byte)(SI+6),(byte)(SI+16), (byte)(SI+9),
  217.         (byte)(SI+10), (byte)(SI+9),(byte)(SI+17),(byte)(SI+11),
  218.         (byte)(SI+12),(byte)(SI+12), (byte)(SI+8), (byte)(SI+7),
  219.         (byte)(SI+13), (byte)(SI+3), (byte)(SI+5),
  220.         /*02*/
  221.         (byte)(SI+4),  (byte)(SI+2),    (byte)(0), (byte)(SI+3),
  222.         (byte)(SI+3),  (byte)(SI+6),(byte)(SI+16), (byte)(SI+9),
  223.         (byte)(SI+10), (byte)(SI+9),(byte)(SI+17),(byte)(SI+11),
  224.         (byte)(SI+12),(byte)(SI+12), (byte)(SI+8), (byte)(SI+7),
  225.         (byte)(SI+13),(byte)(SI+3),  (byte)(SI+5),
  226.         /*03*/
  227.         (byte)(0),    (byte)(0),    (byte)(0), (byte)(SI+3),
  228.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  229.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  230.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  231.         (byte)(0), (byte)(SI+3), (byte)(SI+5),
  232.         /*04*/
  233.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  234.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  235.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  236.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  237.         (byte)(0),    (byte)(0),    (byte)(0),
  238.         /*05*/
  239.         (byte)(0),    (byte)(0),    (byte)(0), (byte)(SI+3),
  240.         (byte)(0), (byte)(SI+6),(byte)(SI+16), (byte)(SI+9),
  241.         (byte)(SI+10), (byte)(SI+9),(byte)(SI+17),(byte)(SI+11),
  242.         (byte)(SI+12),(byte)(SI+12), (byte)(SI+8), (byte)(SI+7),
  243.         (byte)(SI+13), (byte)(SI+3), (byte)(SI+5),
  244.         /*06*/
  245.         (byte)(SI+4),    (byte)(0),    (byte)(0), (byte)(SI+3),
  246.         (byte)(SI+3), (byte)(SI+6),(byte)(SI+16), (byte)(SI+9),
  247.         (byte)(SI+10), (byte)(SI+9),(byte)(SI+17),(byte)(SI+11),
  248.         (byte)(SI+12),(byte)(SI+12), (byte)(SI+8), (byte)(SI+7),
  249.         (byte)(SI+13), (byte)(SI+3), (byte)(SI+5),
  250.         /*07*/
  251.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  252.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  253.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  254.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  255.         (byte)(0), (byte)(SI+3),    (byte)(0),
  256.         /*08*/
  257.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  258.         (byte)(0), (byte)(SI+6),(byte)(SI+16),  (byte)(0),
  259.         (byte)(0),    (byte)(0),(byte)(SI+17),    (byte)(0),
  260.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  261.         (byte)(0), (byte)(SI+3),    (byte)(0),
  262.         /*09*/
  263.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  264.         (byte)(0), (byte)(SI+6),(byte)(SI+16),  (byte)(9),
  265.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  266.         (byte)(0),    (byte)(0),   (byte)(14),    (byte)(0),
  267.         (byte)(0), (byte)(SI+3),    (byte)(0),
  268.         /*10*/
  269.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  270.         (byte)(0), (byte)(SI+6),(byte)(SI+16),  (byte)(9),
  271.         (byte)(0),    (byte)(9),    (byte)(0),    (byte)(0),
  272.         (byte)(0),    (byte)(0),   (byte)(14),    (byte)(0),
  273.         (byte)(0), (byte)(SI+3),    (byte)(0),
  274.         /*11*/
  275.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  276.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  277.         (byte)(0),    (byte)(0),(byte)(SI+17),   (byte)(11),
  278.         (byte)(0),    (byte)(0),   (byte)(15),    (byte)(0),
  279.         (byte)(0), (byte)(SI+3),    (byte)(0),
  280.         /*12*/
  281.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  282.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  283.         (byte)(0),    (byte)(0),(byte)(SI+17),   (byte)(11),
  284.         (byte)(0),   (byte)(12),   (byte)(15),    (byte)(0),
  285.         (byte)(0), (byte)(SI+3),    (byte)(0),
  286.         /*13*/
  287.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  288.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  289.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  290.         (byte)(0),    (byte)(0),    (byte)(0), (byte)(SI+7),
  291.         (byte)(13),(byte)(SI+3),    (byte)(0),
  292.         /*14*/
  293.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  294.         (byte)(0), (byte)(SI+6),(byte)(SI+16),  (byte)(0),
  295.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  296.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  297.         (byte)(0), (byte)(SI+3),    (byte)(0),
  298.         /*15*/
  299.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  300.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  301.         (byte)(0),    (byte)(0),(byte)(SI+17),    (byte)(0),
  302.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  303.         (byte)(0), (byte)(SI+3),    (byte)(0),
  304.         /*16*/
  305.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  306.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  307.         (byte)(10),    (byte)(0),    (byte)(0),    (byte)(0),
  308.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  309.         (byte)(0), (byte)(SI+3),    (byte)(0),
  310.         /*17*/
  311.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  312.         (byte)(0), (byte)(SI+6),    (byte)(0),    (byte)(0),
  313.         (byte)(0),    (byte)(0),    (byte)(0),    (byte)(0),
  314.         (byte)(12),    (byte)(0),    (byte)(0),    (byte)(0),
  315.         (byte)(0), (byte)(SI+3),    (byte)(0)
  316.     };
  317.  
  318.     private static final WordBreakTable kLineBackward
  319.         = new WordBreakTable(COL_COUNT, kLineBackwardData);
  320.  
  321.     private static final int kRawMapping[] =
  322.     {
  323.         nonBlank, //UNASSIGNED        = 0,
  324.         nonBlank, //UPPERCASE_LETTER    = 1,
  325.         nonBlank, //LOWERCASE_LETTER    = 2,
  326.         nonBlank, //TITLECASE_LETTER    = 3,
  327.         nonBlank, //MODIFIER_LETTER        = 4,
  328.         nonBlank, //OTHER_LETTER        = 5,
  329.         nonBlank, //NON_SPACING_MARK    = 6,
  330.         nonBlank, //ENCLOSING_MARK        = 7,
  331.         nonBlank, //COMBINING_SPACING_MARK    = 8,
  332.         nonBlank, //DECIMAL_DIGIT_NUMBER    = 9,
  333.         nonBlank, //LETTER_NUMBER        = 10,
  334.         nonBlank, //OTHER_NUMBER        = 11,
  335.         blank, //SPACE_SEPARATOR        = 12,
  336.         blank, //LINE_SEPARATOR        = 13,
  337.         blank, //PARAGRAPH_SEPARATOR    = 14,        ???????????
  338.         blank, //CONTROL            = 15,
  339.         nonBlank, //PRIVATE_USE        = 16,
  340.         nonBlank, //FORMAT        = 17
  341.         nonBlank, //????        = 18,
  342.         nonBlank, //SURROGATE        = 19,
  343.         op, //DASH_PUNCTUATION    = 20,
  344.         preJwrd, //START_PUNCTUATION    = 21,
  345.         postJwrd, //END_PUNCTUATION        = 22,
  346.         nonBlank, //CONNECTOR_PUNCTUATION    = 23,
  347.         nonBlank, //OTHER_PUNCTUATION    = 24,
  348.         nonBlank, //MATH_SYMBOL        = 25,
  349.         nonBlank, //CURRENCY_SYMBOL        = 26,
  350.         nonBlank, //MODIFIER_SYMBOL        = 27,
  351.         nonBlank  //OTHER_SYMBOL        = 28;
  352.     };
  353. /*
  354.     private static final int kRawMapping[] =
  355.     {
  356.         nonBlank, //00   Invalid
  357.         blank,    //01   SpaceWhitespace
  358.         blank,    //02   ZerowidthSpaceWhitespace
  359.         nonBlank, //03   ISOcontrol
  360.         blank,    //04   WhitespaceISOcontrol
  361.         nonBlank, //05   Dash
  362.         nonBlank, //06   Punctuation
  363.         op,       //07   DashPunctuation
  364.         nonBlank, //08   HyphenPunctuation
  365.         op,       //09   DashHyphenPunctuation
  366.         nonBlank, //10   PunctuationQuotationmark
  367.         nonBlank, //11   PunctuationTerminalpunctuation
  368.         nonBlank, //12   Currencysymbol
  369.         postJwrd, //13   PunctuationPairedpunctuation
  370.         postJwrd, //14   PunctuationQuotationmarkPairedpunctuation
  371.         preJwrd,  //15   PunctuationPairedpunctuationLeftofpair
  372.         preJwrd,  //16   PunctuationQuotationmarkPairedpunctuationLeftofpair
  373.         nonBlank, //17   PunctuationPairedpunctuationCombining
  374.         nonBlank, //18   PunctuationPairedpunctuationLeftofpairCombining
  375.         nonBlank, //19   Composite
  376.         nonBlank, //20   Numeric
  377.         nonBlank, //21   CompositeNumeric
  378.         nonBlank, //22   PunctuationAlphabetic
  379.         nonBlank, //23   Diacritic
  380.         nonBlank, //24   CompositeDiacritic
  381.         nonBlank, //25   PunctuationIdentifierpart
  382.         nonBlank, //26   DecimaldigitNumericIdentifierpart
  383.         nonBlank, //27   HexdigitDecimaldigitNumericIdentifierpart
  384.         nonBlank, //28   AlphabeticIdentifierpart
  385.         nonBlank, //29   CombiningAlphabeticIdentifierpart
  386.         nonBlank, //30   CompositeAlphabeticIdentifierpart
  387.         nonBlank, //31   CombiningCompositeAlphabeticIdentifierpart
  388.         nonBlank, //32   NumericAlphabeticIdentifierpart
  389.         nonBlank, //33   CompositeNumericAlphabeticIdentifierpart
  390.         nonBlank, //34   IdeographicIdentifierpart
  391.         nonBlank, //35   NumericIdeographicIdentifierpart
  392.         nonBlank, //36   CombiningDiacriticIdentifierpart
  393.         nonBlank, //37   ExtenderIdentifierpart
  394.         nonBlank, //38   CompositeExtenderIdentifierpart
  395.         nonBlank, //39   DiacriticExtenderIdentifierpart
  396.         nonBlank, //40   PunctuationDiacriticExtenderIdentifierpart
  397.         blank,    //41   ZerowidthWhitespaceBidicontrolIgnorablecontrol
  398.         blank,    //42   ZerowidthWhitespaceJoincontrolIgnorablecontrol
  399.         blank,    //43   ZerowidthWhitespaceFormatcontrolIgnorablecontrol
  400.         nonBlank, //44   AlphabeticIdentifierpartLower
  401.         nonBlank, //45   CompositeAlphabeticIdentifierpartLower
  402.         nonBlank, //46   HexdigitAlphabeticIdentifierpartLower
  403.         nonBlank, //47   AlphabeticIdentifierpartUpper
  404.         nonBlank, //48   CompositeAlphabeticIdentifierpartUpper
  405.         nonBlank, //49   HexdigitAlphabeticIdentifierpartUpper
  406.         nonBlank, //50   CompositeAlphabeticIdentifierpartTitle
  407.         nonBlank, //51   Marknonspacing
  408.         nonBlank, //52   CombiningMarknonspacing
  409.         nonBlank, //53   CombiningIdentifierpartMarknonspacing
  410.         nonBlank, //54   AlphabeticIdentifierpartMarknonspacing
  411.         nonBlank, //55   CombiningAlphabeticIdentifierpartMarknonspacing
  412.         nonBlank, //56   CompositeAlphabeticIdentifierpartMarknonspacing
  413.         nonBlank, //57 CombiningCompositeAlphabeticIdentifierpartMarknonspacing
  414.         nonBlank, //58   CombiningDiacriticIdentifierpartMarknonspacing
  415.         nonBlank, //59  CombiningCompositeDiacriticIdentifierpartMarknonspacing
  416.         blank,    //60   WhitespaceNongraphicSeparator
  417.         nonBlank, //61   WhitespaceISOcontrolNongraphicSeparator
  418.         nonBlank, //62   SpaceWhitespaceNongraphicNobreak
  419.         nonBlank, //63 ZerowidthSpaceWhitespaceIgnorablecontrolNongraphicNobreak
  420.     }; */
  421.  
  422.     private static SpecialMapping kExceptionChar[] =
  423.     {
  424.         //note: the ranges in this table must be sorted in ascending order as
  425.         //      required by the UnicodeClassMapping class.
  426.         new SpecialMapping(ASCII_END_OF_TEXT, BREAK),
  427.         new SpecialMapping(ASCII_HORIZONTAL_TABULATION,
  428.                            ASCII_CARRIAGE_RETURN, BREAK),
  429.         new SpecialMapping(ASCII_EXCLAMATION_MARK, postJwrd),
  430.         new SpecialMapping(ASCII_PERCENT, postJwrd),
  431.         new SpecialMapping(ASCII_COMMA, postJwrd),
  432.         new SpecialMapping(ASCII_FULL_STOP, postJwrd),
  433.         new SpecialMapping(ASCII_COLON, ASCII_SEMICOLON, postJwrd),
  434.         new SpecialMapping(ASCII_QUESTION_MARK, postJwrd),
  435.         new SpecialMapping(LATIN1_SOFTHYPHEN, nonBlank),
  436.         new SpecialMapping(ARABIC_PERCENT_SIGN, postJwrd),
  437.         new SpecialMapping(PUNCTUATION_LINE_SEPARATOR,
  438.                            PUNCTUATION_PARAGRAPH_SEPARATOR, BREAK),
  439.         new SpecialMapping(PUNCTUATION_IDEOGRAPHIC_FULL_STOP, postJwrd),
  440.         new SpecialMapping(PER_MILLE_SIGN, postJwrd),
  441.         new SpecialMapping(PER_TEN_THOUSAND_SIGN, postJwrd),
  442.         new SpecialMapping(HIRAGANA_LETTER_SMALL_A, HIRAGANA_LETTER_VU, hira),
  443.         new SpecialMapping(COMBINING_KATAKANA_HIRAGANA_VOICED_SOUND_MARK,
  444.                            HIRAGANA_SEMIVOICED_SOUND_MARK, diacrit),
  445.         new SpecialMapping(KATAKANA_LETTER_SMALL_A,
  446.                            KATAKANA_LETTER_SMALL_KE, kata),
  447.         new SpecialMapping(UNICODE_LOW_BOUND_HAN,UNICODE_HIGH_BOUND_HAN,kanji),
  448.         new SpecialMapping(CJK_COMPATIBILITY_F900,
  449.                            CJK_COMPATIBILITY_FA2D, kanji),
  450.     };
  451.  
  452.     private static final UnicodeClassMapping kLineMap
  453.         = new UnicodeClassMapping(kRawMapping, kExceptionChar);
  454.  
  455.     public WordBreakTable forward()
  456.     {
  457.         return kLineForward;
  458.     }
  459.  
  460.     public WordBreakTable backward()
  461.     {
  462.         return kLineBackward;
  463.     }
  464.  
  465.     public UnicodeClassMapping map()
  466.     {
  467.         return kLineMap;
  468.     }
  469. }
  470.