--- parser3/src/include/pa_charset.h 2003/11/20 16:34:24 1.27 +++ parser3/src/include/pa_charset.h 2008/07/16 17:07:11 1.37 @@ -1,14 +1,14 @@ /** @file Parser: Charset connection decl. - Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ #ifndef PA_CHARSET_H #define PA_CHARSET_H -static const char * const IDENT_CHARSET_H="$Date: 2003/11/20 16:34:24 $"; +static const char * const IDENT_CHARSET_H="$Date: 2008/07/16 17:07:11 $"; #include "pa_exception.h" @@ -24,7 +24,6 @@ namespace PCRE { #ifdef XML #include "libxml/encoding.h" -#include "gdome.h" #endif // defines @@ -40,10 +39,6 @@ namespace PCRE { typedef unsigned char XMLByte; # endif -// forwards - -class GdomeDOMString_auto_ptr; - // helpers typedef Hash HashStringString; @@ -57,12 +52,13 @@ public: Charset(Request_charsets* charsets, const String::Body ANAME, const String* afile_spec); const String::Body NAME() const { return FNAME; } + const char* NAME_CSTR() const { return FNAME_CSTR; } bool isUTF8() const { return fisUTF8; } static String::C transcode(const String::C src, - const Charset& source_transcoder, - const Charset& dest_transcoder + const Charset& source_charset, + const Charset& dest_charset ); static String& transcode(const String& src, @@ -81,6 +77,11 @@ public: const Charset& source_transcoder, const Charset& dest_transcoder); + static String::C escape(const String::C src, + const Charset& source_charset); + + void store_Char(XMLByte*& outPtr, XMLCh src, XMLByte not_found); + #ifdef XML xmlCharEncodingHandler& transcoder(const String::Body NAME); #endif @@ -136,25 +137,19 @@ private: void initTranscoder(const String::Body name, const char* name_cstr); public: - /// converts GdomeDOMString string to char* - String::C transcode_cstr(GdomeDOMString* s); - /// converts GdomeDOMString string to parser String - const String& transcode(GdomeDOMString* s); /// converts xmlChar* null-terminated string to char* - String::C transcode_cstr(xmlChar* s); + String::C transcode_cstr(const xmlChar* s); /// converts xmlChar* null-terminated string to parser String - const String& transcode(xmlChar* s); + const String& transcode(const xmlChar* s); /** converts sized char* to xmlChar* @returns xmlChar* WHICH CALLER SHOULD FREE */ xmlChar* transcode_buf2xchar(const char* buf, size_t buf_size); - /// converts char* to GdomeDOMString - GdomeDOMString_auto_ptr transcode_buf2dom(const char* buf, size_t buf_size); - /// converts parser String to GdomeDOMString - GdomeDOMString_auto_ptr transcode(const String& s); - /// converts parser String::Body to GdomeDOMString - GdomeDOMString_auto_ptr transcode(const String::Body s); + /// converts parser String to xmlChar* + xmlChar* transcode(const String& s); + /// converts parser String::Body to xmlChar* + xmlChar* transcode(const String::Body s); private: @@ -169,56 +164,11 @@ private: extern Charset::UTF8CaseTable UTF8CaseToUpper; extern Charset::UTF8CaseTable UTF8CaseToLower; -void change_case_UTF8(const XMLByte* srcData, XMLByte* toFill, +void change_case_UTF8(const XMLByte* srcData, size_t srcLen, + XMLByte* toFill, size_t toFillLen, const Charset::UTF8CaseTable& table); - - -#ifdef XML -/// Auto-object used to track GdomeDOMString usage -class GdomeDOMString_auto_ptr { - GdomeDOMString* fstring; -public: - /// frees astring afterwards!!! - explicit GdomeDOMString_auto_ptr(xmlChar* astring) : fstring(gdome_str_mkref_xml(astring)) {} - explicit GdomeDOMString_auto_ptr(GdomeDOMString* astring=0) : fstring(astring) { - // not ref-ing, owning - } - ~GdomeDOMString_auto_ptr() { - if(fstring) - gdome_str_unref(fstring); - } -/* GdomeDOMString* get() { - return fstring; - }*/ - GdomeDOMString* use() { - if(fstring) - gdome_str_ref(fstring); - return fstring; - } - GdomeDOMString* operator->() { - return fstring; - } -/* GdomeDOMString& operator*() { - return* fstring; - }*/ - - // copying - GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) { - gdome_str_ref(fstring); - } - GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) { - if(this == &src) - return* this; - - if(fstring) - gdome_str_unref(fstring); - fstring=src.fstring; - if(fstring) - gdome_str_ref(fstring); - - return* this; - } -}; -#endif +size_t getUTF8BytePos(const XMLByte* srcBegin, const XMLByte* srcEnd, size_t charPos/*position in characters*/); +size_t getUTF8CharPos(const XMLByte* srcBegin, const XMLByte* srcEnd, size_t bytePos/*position in bytes*/); +size_t lengthUTF8(const XMLByte* srcBegin, const XMLByte* srcEnd); #endif