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