diff -r fd16c54261b3 -r 7f561c08de6b jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,124 @@ +/* + * reserved comment block + * DO NOT REMOVE OR ALTER! + */ +/* + * Copyright 1999-2002,2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.sun.org.apache.xml.internal.serialize; + + +import java.io.UnsupportedEncodingException; +import java.util.Hashtable; +import java.util.Locale; + +import com.sun.org.apache.xerces.internal.util.EncodingMap; + + +/** + * Provides information about encodings. Depends on the Java runtime + * to provides writers for the different encodings, but can be used + * to override encoding names and provide the last printable character + * for each encoding. + * + * @author Assaf Arkin + */ +public class Encodings +{ + + + /** + * The last printable character for unknown encodings. + */ + static final int DEFAULT_LAST_PRINTABLE = 0x7F; + + // last printable character for Unicode-compatible encodings + static final int LAST_PRINTABLE_UNICODE = 0xffff; + // unicode-compliant encodings; can express plane 0 + static final String[] UNICODE_ENCODINGS = { + "Unicode", "UnicodeBig", "UnicodeLittle", "GB2312", "UTF8", "UTF-16", + }; + // default (Java) encoding if none supplied: + static final String DEFAULT_ENCODING = "UTF8"; + + // note that the size of this Hashtable + // is bounded by the number of encodings recognized by EncodingMap; + // therefore it poses no static mutability risk. + static Hashtable _encodings = new Hashtable(); + + /** + * @param encoding a MIME charset name, or null. + */ + static EncodingInfo getEncodingInfo(String encoding, boolean allowJavaNames) throws UnsupportedEncodingException { + EncodingInfo eInfo = null; + if (encoding == null) { + if((eInfo = (EncodingInfo)_encodings.get(DEFAULT_ENCODING)) != null) + return eInfo; + eInfo = new EncodingInfo(EncodingMap.getJava2IANAMapping(DEFAULT_ENCODING), DEFAULT_ENCODING, LAST_PRINTABLE_UNICODE); + _encodings.put(DEFAULT_ENCODING, eInfo); + return eInfo; + } + // need to convert it to upper case: + encoding = encoding.toUpperCase(Locale.ENGLISH); + String jName = EncodingMap.getIANA2JavaMapping(encoding); + if(jName == null) { + // see if the encoding passed in is a Java encoding name. + if(allowJavaNames ) { + EncodingInfo.testJavaEncodingName(encoding); + if((eInfo = (EncodingInfo)_encodings.get(encoding)) != null) + return eInfo; + // is it known to be unicode-compliant? + int i=0; + for(; i