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