src/share/classes/sun/util/locale/provider/BreakDictionary.java

Print this page
rev 5615 : 6336885: RFE: Locale Data Deployment Enhancements
4609153: Provide locale data for Indic locales
5104387: Support for gl_ES locale (galician language)
6337471: desktop/system locale preferences support
7056139: (cal) SPI support for locale-dependent Calendar parameters
7058206: Provide CalendarData SPI for week params and display field value names
7073852: Support multiple scripts for digits and decimal symbols per locale
7079560: [Fmt-Da] Context dependent month names support in SimpleDateFormat
7171324: getAvailableLocales() of locale sensitive services should return the actual availability of locales
7151414: (cal) Support calendar type identification
7168528: LocaleServiceProvider needs to be aware of Locale extensions
7171372: (cal) locale's default Calendar should be created if unknown calendar is specified
Summary: JEP 127: Improve Locale Data Packaging and Adopt Unicode CLDR Data (part 1 w/o Jigsaw. by Naoto Sato and Masayoshi Okutsu)

*** 1,7 **** /* ! * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 35,47 **** * is protected by multiple US and International patents. * * This notice and attribution to Taligent may not be removed. * Taligent is a registered trademark of Taligent, Inc. */ ! package java.text; ! import java.io.*; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.MissingResourceException; import sun.text.CompactByteArray; --- 35,48 ---- * is protected by multiple US and International patents. * * This notice and attribution to Taligent may not be removed. * Taligent is a registered trademark of Taligent, Inc. */ ! package sun.util.locale.provider; ! import java.io.BufferedInputStream; ! import java.io.IOException; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.MissingResourceException; import sun.text.CompactByteArray;
*** 132,142 **** //========================================================================= // deserialization //========================================================================= ! public BreakDictionary(String dictionaryName) throws IOException, MissingResourceException { readDictionaryFile(dictionaryName); } --- 133,143 ---- //========================================================================= // deserialization //========================================================================= ! BreakDictionary(String dictionaryName) throws IOException, MissingResourceException { readDictionaryFile(dictionaryName); }
*** 145,154 **** --- 146,156 ---- BufferedInputStream in; try { in = AccessController.doPrivileged( new PrivilegedExceptionAction<BufferedInputStream>() { + @Override public BufferedInputStream run() throws Exception { return new BufferedInputStream(getClass().getResourceAsStream("/sun/text/resources/" + dictionaryName)); } } );
*** 161,179 **** if (in.read(buf) != 8) { throw new MissingResourceException("Wrong data length", dictionaryName, ""); } ! // check vesion ! int version = BreakIterator.getInt(buf, 0); if (version != supportedVersion) { throw new MissingResourceException("Dictionary version(" + version + ") is unsupported", dictionaryName, ""); } // get data size ! int len = BreakIterator.getInt(buf, 4); buf = new byte[len]; if (in.read(buf) != len) { throw new MissingResourceException("Wrong data length", dictionaryName, ""); } --- 163,181 ---- if (in.read(buf) != 8) { throw new MissingResourceException("Wrong data length", dictionaryName, ""); } ! // check version ! int version = RuleBasedBreakIterator.getInt(buf, 0); if (version != supportedVersion) { throw new MissingResourceException("Dictionary version(" + version + ") is unsupported", dictionaryName, ""); } // get data size ! int len = RuleBasedBreakIterator.getInt(buf, 4); buf = new byte[len]; if (in.read(buf) != len) { throw new MissingResourceException("Wrong data length", dictionaryName, ""); }
*** 184,257 **** int l; int offset = 0; // read in the column map for BMP characteres (this is serialized in // its internal form: an index array followed by a data array) ! l = BreakIterator.getInt(buf, offset); offset += 4; short[] temp = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! temp[i] = BreakIterator.getShort(buf, offset); } ! l = BreakIterator.getInt(buf, offset); offset += 4; byte[] temp2 = new byte[l]; for (int i = 0; i < l; i++, offset++) { temp2[i] = buf[offset]; } columnMap = new CompactByteArray(temp, temp2); // read in numCols and numColGroups ! numCols = BreakIterator.getInt(buf, offset); offset += 4; ! numColGroups = BreakIterator.getInt(buf, offset); offset += 4; // read in the row-number index ! l = BreakIterator.getInt(buf, offset); offset += 4; rowIndex = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! rowIndex[i] = BreakIterator.getShort(buf, offset); } // load in the populated-cells bitmap: index first, then bitmap list ! l = BreakIterator.getInt(buf, offset); offset += 4; rowIndexFlagsIndex = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! rowIndexFlagsIndex[i] = BreakIterator.getShort(buf, offset); } ! l = BreakIterator.getInt(buf, offset); offset += 4; rowIndexFlags = new int[l]; for (int i = 0; i < l; i++, offset+=4) { ! rowIndexFlags[i] = BreakIterator.getInt(buf, offset); } // load in the row-shift index ! l = BreakIterator.getInt(buf, offset); offset += 4; rowIndexShifts = new byte[l]; for (int i = 0; i < l; i++, offset++) { rowIndexShifts[i] = buf[offset]; } // load in the actual state table ! l = BreakIterator.getInt(buf, offset); offset += 4; table = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! table[i] = BreakIterator.getShort(buf, offset); } // finally, prepare the column map for supplementary characters ! l = BreakIterator.getInt(buf, offset); offset += 4; int[] temp3 = new int[l]; for (int i = 0; i < l; i++, offset+=4) { ! temp3[i] = BreakIterator.getInt(buf, offset); } supplementaryCharColumnMap = new SupplementaryCharacterData(temp3); } //========================================================================= --- 186,259 ---- int l; int offset = 0; // read in the column map for BMP characteres (this is serialized in // its internal form: an index array followed by a data array) ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; short[] temp = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! temp[i] = RuleBasedBreakIterator.getShort(buf, offset); } ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; byte[] temp2 = new byte[l]; for (int i = 0; i < l; i++, offset++) { temp2[i] = buf[offset]; } columnMap = new CompactByteArray(temp, temp2); // read in numCols and numColGroups ! numCols = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; ! numColGroups = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; // read in the row-number index ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; rowIndex = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! rowIndex[i] = RuleBasedBreakIterator.getShort(buf, offset); } // load in the populated-cells bitmap: index first, then bitmap list ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; rowIndexFlagsIndex = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! rowIndexFlagsIndex[i] = RuleBasedBreakIterator.getShort(buf, offset); } ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; rowIndexFlags = new int[l]; for (int i = 0; i < l; i++, offset+=4) { ! rowIndexFlags[i] = RuleBasedBreakIterator.getInt(buf, offset); } // load in the row-shift index ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; rowIndexShifts = new byte[l]; for (int i = 0; i < l; i++, offset++) { rowIndexShifts[i] = buf[offset]; } // load in the actual state table ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; table = new short[l]; for (int i = 0; i < l; i++, offset+=2) { ! table[i] = RuleBasedBreakIterator.getShort(buf, offset); } // finally, prepare the column map for supplementary characters ! l = RuleBasedBreakIterator.getInt(buf, offset); offset += 4; int[] temp3 = new int[l]; for (int i = 0; i < l; i++, offset+=4) { ! temp3[i] = RuleBasedBreakIterator.getInt(buf, offset); } supplementaryCharColumnMap = new SupplementaryCharacterData(temp3); } //=========================================================================
*** 303,313 **** /** * Given (logical) row and column numbers, returns true if the * cell in that position is populated */ ! private final boolean cellIsPopulated(int row, int col) { // look up the entry in the bitmap index for the specified row. // If it's a negative number, it's the column number of the only // populated cell in the row if (rowIndexFlagsIndex[row] < 0) { return col == -rowIndexFlagsIndex[row]; --- 305,315 ---- /** * Given (logical) row and column numbers, returns true if the * cell in that position is populated */ ! private boolean cellIsPopulated(int row, int col) { // look up the entry in the bitmap index for the specified row. // If it's a negative number, it's the column number of the only // populated cell in the row if (rowIndexFlagsIndex[row] < 0) { return col == -rowIndexFlagsIndex[row];
*** 330,340 **** * populated. * @param row The PHYSICAL row number of the cell * @param col The PHYSICAL column number of the cell * @return The value stored in the cell */ ! private final short internalAt(int row, int col) { // the table is a one-dimensional array, so this just does the math necessary // to treat it as a two-dimensional array (we don't just use a two-dimensional // array because two-dimensional arrays are inefficient in Java) return table[row * numCols + col]; } --- 332,342 ---- * populated. * @param row The PHYSICAL row number of the cell * @param col The PHYSICAL column number of the cell * @return The value stored in the cell */ ! private short internalAt(int row, int col) { // the table is a one-dimensional array, so this just does the math necessary // to treat it as a two-dimensional array (we don't just use a two-dimensional // array because two-dimensional arrays are inefficient in Java) return table[row * numCols + col]; }