source: icXML/icXML-devel/src/icxercesc/util/XMLUTF8Transcoder.hpp

Last change on this file was 3564, checked in by cameron, 6 years ago

Changes to icxercesc files

File size: 4.3 KB
Line 
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * $Id: XMLUTF8Transcoder.hpp 932887 2010-04-11 13:04:59Z borisk $
20 */
21
22#if !defined(XERCESC_INCLUDE_GUARD_XMLUTF8TRANSCODER_HPP)
23#define XERCESC_INCLUDE_GUARD_XMLUTF8TRANSCODER_HPP
24
25#include <xercesc/util/XercesDefs.hpp>
26#include <icxercesc/util/TransService.hpp>
27#include <xercesc/util/UTFDataFormatException.hpp>
28#include <icxercesc/internal/XMLReader.hpp>
29
30XERCES_CPP_NAMESPACE_BEGIN
31
32class XMLUTF8CharacterSetAdapter;
33
34//
35//  This class provides an implementation of the XMLTranscoder interface
36//  for a simple UTF8 transcoder. The parser does some encodings
37//  intrinsically without depending upon external transcoding services.
38//  To make everything more orthogonal, we implement these internal
39//  transcoders using the same transcoder abstraction as the pluggable
40//  transcoding services do.
41//
42class XMLUTIL_EXPORT XMLUTF8Transcoder : public XMLTranscoder
43{
44    friend class XMLUTF8CharacterSetAdapter;
45
46public :
47        // -----------------------------------------------------------------------
48        //  Public constructors and destructor
49        // -----------------------------------------------------------------------
50        XMLUTF8Transcoder
51        (
52                const   XMLCh* const   encodingName
53                , const XMLSize_t      blockSize
54                , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
55        );
56
57        virtual ~XMLUTF8Transcoder();
58
59        // -----------------------------------------------------------------------
60        //  Implementation of the XMLTranscoder interface
61        // -----------------------------------------------------------------------
62        virtual XMLSize_t transcodeFrom
63        (
64                const   XMLByte* const          srcData
65                , const XMLSize_t               srcCount
66                ,       XMLCh* const            toFill
67                , const XMLSize_t               maxChars
68                ,       XMLSize_t&              bytesEaten
69                ,       unsigned char* const    charSizes
70        );
71
72    virtual XMLSize_t transcodeFrom
73    (
74        const   XMLByte* const          srcData
75        , const XMLSize_t               srcCount
76        ,       XMLCh* const            toFill
77        , const XMLSize_t               maxChars
78        ,       XMLSize_t&              bytesEaten
79    );
80
81        virtual XMLSize_t transcodeFrom
82        (
83                  const XMLByte* const          srcData
84                , const XMLSize_t               srcCount
85                ,       XMLBuffer &             toFill
86        );
87
88        virtual XMLSize_t transcodeTo
89        (
90                const   XMLCh* const    srcData
91                , const XMLSize_t       srcCount
92                ,       XMLByte* const  toFill
93                , const XMLSize_t       maxBytes
94                ,       XMLSize_t&      charsEaten
95                , const UnRepOpts       options
96        );
97
98        virtual bool canTranscodeTo
99        (
100                const   unsigned int    toCheck
101        );
102
103private :
104
105        inline void checkTrailingBytes
106        (
107                  const XMLByte      toCheck
108                , const unsigned int trailingBytes
109                , const unsigned int position
110        ) const;
111
112private :
113        // -----------------------------------------------------------------------
114        //  Unimplemented constructors and operators
115        // -----------------------------------------------------------------------
116        XMLUTF8Transcoder(const XMLUTF8Transcoder&);
117        XMLUTF8Transcoder& operator=(const XMLUTF8Transcoder&);
118
119};
120
121inline
122void XMLUTF8Transcoder::checkTrailingBytes(const XMLByte      toCheck
123                                                                                  , const unsigned int trailingBytes
124                                                                                  , const unsigned int position) const
125{
126
127        if ((toCheck & 0xC0) != 0x80)
128        {
129                char len[2]  = {(char)(trailingBytes+0x31), 0};
130                char pos[2]  = {(char)(position+0x31), 0};
131        char byte[2] = {(char)toCheck,0};
132                ThrowXMLwithMemMgr3(UTFDataFormatException, XMLExcepts::UTF8_FormatError, pos, byte, len, getMemoryManager());
133        }
134
135}
136
137XERCES_CPP_NAMESPACE_END
138
139#endif
Note: See TracBrowser for help on using the repository browser.