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: XMLMsgLoader.hpp,v $ 00059 * Revision 1.1 2002/05/11 21:19:35 bhavani 00060 * CR#CR062582# adding xercesc 1.7 file 00061 * 00062 * Revision 1.1.1.1 2002/02/01 22:22:15 peiyongz 00063 * sane_include 00064 * 00065 * Revision 1.5 2000/03/28 19:43:20 roddey 00066 * Fixes for signed/unsigned warnings. New work for two way transcoding 00067 * stuff. 00068 * 00069 * Revision 1.4 2000/03/02 19:54:49 roddey 00070 * This checkin includes many changes done while waiting for the 00071 * 1.1.0 code to be finished. I can't list them all here, but a list is 00072 * available elsewhere. 00073 * 00074 * Revision 1.3 2000/02/24 20:05:26 abagchi 00075 * Swat for removing Log from API docs 00076 * 00077 * Revision 1.2 2000/02/06 07:48:05 rahulj 00078 * Year 2K copyright swat. 00079 * 00080 * Revision 1.1.1.1 1999/11/09 01:05:47 twl 00081 * Initial checkin 00082 * 00083 * Revision 1.2 1999/11/08 20:45:20 rahul 00084 * Swat for adding in Product name and CVS comment log variable. 00085 * 00086 */ 00087 00088 00089 #if !defined(XMLMSGLOADER_HPP) 00090 #define XMLMSGLOADER_HPP 00091 00092 #include <xercesc/util/XercesDefs.hpp> 00093 00094 // 00095 // This header defines an abstract message loading API. This is the API via 00096 // which the parser system loads translatable text, and there can be multiple 00097 // actual implementations of this mechanism. The API is very simple because 00098 // there can be many kinds of underlying systems on which implementations are 00099 // based and we don't want to get into portability trouble by being overly 00100 // smart. 00101 // 00102 // Each instance of the message loader loads a file of messages, which are 00103 // accessed by key and which are associated with a particular language. The 00104 // actual source information may be in many forms, but by the time it is 00105 // extracted for use it will be in Unicode format. The language is always 00106 // the default language for the local machine. 00107 // 00108 // Msg loader derivatives are not required to be thread safe. The parser will 00109 // never use a single instance in more than one thread. 00110 // 00111 class XMLUTIL_EXPORT XMLMsgLoader 00112 { 00113 public : 00114 // ----------------------------------------------------------------------- 00115 // Class specific types 00116 // 00117 // XMLMsgId 00118 // A simple typedef to give us flexibility about the representation 00119 // of a message id. 00120 // ----------------------------------------------------------------------- 00121 typedef unsigned int XMLMsgId; 00122 00123 00124 // ----------------------------------------------------------------------- 00125 // Public Constructors and Destructor 00126 // ----------------------------------------------------------------------- 00127 virtual ~XMLMsgLoader(); 00128 00129 00130 // ----------------------------------------------------------------------- 00131 // The virtual message loader API 00132 // ----------------------------------------------------------------------- 00133 virtual bool loadMsg 00134 ( 00135 const XMLMsgId msgToLoad 00136 , XMLCh* const toFill 00137 , const unsigned int maxChars 00138 ) = 0; 00139 00140 virtual bool loadMsg 00141 ( 00142 const XMLMsgId msgToLoad 00143 , XMLCh* const toFill 00144 , const unsigned int maxChars 00145 , const XMLCh* const repText1 00146 , const XMLCh* const repText2 = 0 00147 , const XMLCh* const repText3 = 0 00148 , const XMLCh* const repText4 = 0 00149 ) = 0; 00150 00151 virtual bool loadMsg 00152 ( 00153 const XMLMsgId msgToLoad 00154 , XMLCh* const toFill 00155 , const unsigned int maxChars 00156 , const char* const repText1 00157 , const char* const repText2 = 0 00158 , const char* const repText3 = 0 00159 , const char* const repText4 = 0 00160 ) = 0; 00161 00162 00163 // ----------------------------------------------------------------------- 00164 // Getter methods 00165 // ----------------------------------------------------------------------- 00166 const XMLCh* getLanguageName() const; 00167 00168 00169 protected : 00170 // ----------------------------------------------------------------------- 00171 // Hidden Constructors 00172 // ----------------------------------------------------------------------- 00173 XMLMsgLoader(); 00174 00175 00176 // ----------------------------------------------------------------------- 00177 // Protected helper methods 00178 // ----------------------------------------------------------------------- 00179 void setLanguageName(XMLCh* const nameToAdopt); 00180 00181 00182 private : 00183 // ----------------------------------------------------------------------- 00184 // Unimplemented constructors and operators 00185 // ----------------------------------------------------------------------- 00186 XMLMsgLoader(const XMLMsgLoader&); 00187 void operator=(const XMLMsgLoader&); 00188 00189 00190 // ----------------------------------------------------------------------- 00191 // Private data members 00192 // 00193 // fLanguage 00194 // This is the language that is represented by this instance of the 00195 // loader. The derived class must pass this through for storage and 00196 // we adopt it and delete it when we go. 00197 // ----------------------------------------------------------------------- 00198 XMLCh* fLanguage; 00199 }; 00200 00201 00202 // --------------------------------------------------------------------------- 00203 // XMLMsgLoader: Public Constructors and Destructor 00204 // --------------------------------------------------------------------------- 00205 inline XMLMsgLoader::~XMLMsgLoader() 00206 { 00207 delete [] fLanguage; 00208 } 00209 00210 00211 // --------------------------------------------------------------------------- 00212 // XMLMsgLoader: Hidden Constructors 00213 // --------------------------------------------------------------------------- 00214 inline XMLMsgLoader::XMLMsgLoader() : 00215 00216 fLanguage(0) 00217 { 00218 } 00219 00220 00221 // --------------------------------------------------------------------------- 00222 // XMLMsgLoader: Getter methods 00223 // --------------------------------------------------------------------------- 00224 inline const XMLCh* XMLMsgLoader::getLanguageName() const 00225 { 00226 return fLanguage; 00227 } 00228 00229 00230 // --------------------------------------------------------------------------- 00231 // XMLMsgLoader: Protected helper methods 00232 // --------------------------------------------------------------------------- 00233 inline void XMLMsgLoader::setLanguageName(XMLCh* const nameToAdopt) 00234 { 00235 delete [] fLanguage; 00236 fLanguage = nameToAdopt; 00237 } 00238 00239 #endif