00001 /* 00002 * The Apache Software License, Version 1.1 00003 * 00004 * Copyright (c) 1999-2000 The Apache Software Foundation. All rights 00005 * reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * 1. Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * 00014 * 2. Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in 00016 * the documentation and/or other materials provided with the 00017 * distribution. 00018 * 00019 * 3. The end-user documentation included with the redistribution, 00020 * if any, must include the following acknowledgment: 00021 * "This product includes software developed by the 00022 * Apache Software Foundation (http://www.apache.org/)." 00023 * Alternately, this acknowledgment may appear in the software itself, 00024 * if and wherever such third-party acknowledgments normally appear. 00025 * 00026 * 4. The names "Xerces" and "Apache Software Foundation" must 00027 * not be used to endorse or promote products derived from this 00028 * software without prior written permission. For written 00029 * permission, please contact apache\@apache.org. 00030 * 00031 * 5. Products derived from this software may not be called "Apache", 00032 * nor may "Apache" appear in their name, without prior written 00033 * permission of the Apache Software Foundation. 00034 * 00035 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 00036 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00037 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00038 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 00039 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00040 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00041 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 00042 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00043 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00044 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 00045 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00046 * SUCH DAMAGE. 00047 * ==================================================================== 00048 * 00049 * This software consists of voluntary contributions made by many 00050 * individuals on behalf of the Apache Software Foundation, and was 00051 * originally based on software copyright (c) 1999, International 00052 * Business Machines, Inc., http://www.ibm.com . For more information 00053 * on the Apache Software Foundation, please see 00054 * <http://www.apache.org/>. 00055 */ 00056 00057 /* 00058 * $Log: XML256TableTranscoder.hpp,v $ 00059 * Revision 1.1 2002/05/11 21:16:11 bhavani 00060 * CR#CR062582# adding xercesc 1.7 file 00061 * 00062 * Revision 1.1.1.1 2002/02/01 22:22:13 peiyongz 00063 * sane_include 00064 * 00065 * Revision 1.1 2000/03/18 00:00:32 roddey 00066 * Initial updates for two way transcoding support 00067 * 00068 */ 00069 00070 00071 #ifndef XML256TABLETRANSCODER_HPP 00072 #define XML256TABLETRANSCODER_HPP 00073 00074 #include <xercesc/util/TransService.hpp> 00075 00076 // 00077 // This class implements the functionality of a common type of transcoder 00078 // for an 8 bit, single byte encoding based on a set of 'to' and 'from' 00079 // translation tables. Actual derived classes are trivial and just have to 00080 // provide us with pointers to their tables and we do all the work. 00081 // 00082 class XMLUTIL_EXPORT XML256TableTranscoder : public XMLTranscoder 00083 { 00084 public : 00085 // ----------------------------------------------------------------------- 00086 // Public constructors and destructor 00087 // ----------------------------------------------------------------------- 00088 virtual ~XML256TableTranscoder(); 00089 00090 00091 // ----------------------------------------------------------------------- 00092 // The virtual transcoding interface 00093 // ----------------------------------------------------------------------- 00094 virtual unsigned int transcodeFrom 00095 ( 00096 const XMLByte* const srcData 00097 , const unsigned int srcCount 00098 , XMLCh* const toFill 00099 , const unsigned int maxChars 00100 , unsigned int& bytesEaten 00101 , unsigned char* const charSizes 00102 ); 00103 00104 virtual unsigned int transcodeTo 00105 ( 00106 const XMLCh* const srcData 00107 , const unsigned int srcCount 00108 , XMLByte* const toFill 00109 , const unsigned int maxBytes 00110 , unsigned int& charsEaten 00111 , const UnRepOpts options 00112 ); 00113 00114 virtual bool canTranscodeTo 00115 ( 00116 const unsigned int toCheck 00117 ) const; 00118 00119 00120 protected : 00121 // ----------------------------------------------------------------------- 00122 // Hidden constructors 00123 // ----------------------------------------------------------------------- 00124 XML256TableTranscoder 00125 ( 00126 const XMLCh* const encodingName 00127 , const unsigned int blockSize 00128 , const XMLCh* const fromTable 00129 , const XMLTransService::TransRec* const toTable 00130 , const unsigned int toTableSize 00131 ); 00132 00133 00134 // ----------------------------------------------------------------------- 00135 // Protected helper methods 00136 // ----------------------------------------------------------------------- 00137 XMLByte xlatOneTo 00138 ( 00139 const XMLCh toXlat 00140 ) const; 00141 00142 00143 private : 00144 // ----------------------------------------------------------------------- 00145 // Unimplemented constructors and operators 00146 // ----------------------------------------------------------------------- 00147 XML256TableTranscoder(); 00148 XML256TableTranscoder(const XML256TableTranscoder&); 00149 void operator=(const XML256TableTranscoder&); 00150 00151 00152 // ----------------------------------------------------------------------- 00153 // Private data members 00154 // 00155 // fFromTable 00156 // This is the 'from' table that we were given during construction. 00157 // It is a 256 entry table of XMLCh chars. Each entry is the 00158 // Unicode code point for the external encoding point of that value. 00159 // So fFromTable[N] is the Unicode translation of code point N of 00160 // the source encoding. 00161 // 00162 // We don't own this table, we just refer to it. It is assumed that 00163 // the table is static, for performance reasons. 00164 // 00165 // fToSize 00166 // The 'to' table is variable sized. This indicates how many records 00167 // are in it. 00168 // 00169 // fToTable 00170 // This is a variable sized table of TransRec structures. It must 00171 // be sorted by the intCh field, i.e. the XMLCh field. It is searched 00172 // binarily to find the record for a particular Unicode char. Then 00173 // that record's extch field is the translation record. 00174 // 00175 // We don't own this table, we just refer to it. It is assumed that 00176 // the table is static, for performance reasons. 00177 // 00178 // NOTE: There may be dups of the extCh field, since there might be 00179 // multiple Unicode code points which map to the same external code 00180 // point. Normally this won't happen, since the parser assumes that 00181 // internalization is normalized, but we have to be prepared to do 00182 // the right thing if some client code gives us non-normalized data 00183 // itself. 00184 // ----------------------------------------------------------------------- 00185 const XMLCh* fFromTable; 00186 unsigned int fToSize; 00187 const XMLTransService::TransRec* fToTable; 00188 }; 00189 00190 #endif