--- parser3/src/include/pa_charset.h 2011/02/21 22:57:47 1.47 +++ parser3/src/include/pa_charset.h 2026/04/25 13:38:46 1.63 @@ -1,14 +1,14 @@ /** @file Parser: Charset connection decl. - Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexandr Petrosian (http://paf.design.ru) + Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com) + Authors: Konstantin Morshnev , Alexandr Petrosian */ #ifndef PA_CHARSET_H #define PA_CHARSET_H -static const char * const IDENT_CHARSET_H="$Date: 2011/02/21 22:57:47 $"; +#define IDENT_PA_CHARSET_H "$Id: pa_charset.h,v 1.63 2026/04/25 13:38:46 moko Exp $" #include "pa_exception.h" @@ -16,13 +16,16 @@ static const char * const IDENT_CHARSET_ #include "pa_hash.h" #include "pa_array.h" -// pcre.h must be included BEFORE pcre_internal.h -#include "pcre.h" -// have to call config.h for using pcre_internal.h as well -#include "../lib/pcre/config.h" -#include "pcre_internal.h" +#ifdef HAVE_PCRE2 +#include +#else +#include +#endif +// we are using some pcre_internal.h stuff as well +#include "../lib/pcre/pa_pcre_internal.h" #ifdef XML +#include "libxml/xmlstring.h" #include "libxml/encoding.h" #endif @@ -56,46 +59,23 @@ public: bool isUTF8() const { return fisUTF8; } - static String::C transcode(const String::C src, - const Charset& source_charset, - const Charset& dest_charset); - - static String& transcode(const String& src, - const Charset& source_transcoder, - const Charset& dest_transcoder); - - static String::Body transcode(const String::Body src, - const Charset& source_transcoder, - const Charset& dest_transcoder); - - static void transcode(ArrayString& src, - const Charset& source_transcoder, - const Charset& dest_transcoder); - - static void transcode(HashStringString& src, - const Charset& source_transcoder, - const Charset& dest_transcoder); - - static String::C escape(const String::C src, - const Charset& source_charset); - static String::Body escape(const String::Body src, - const Charset& source_charset); - static String& escape(const String& src, - const Charset& source_charset); - - static String::C escape_JSON(const String::C src, - const Charset& source_charset); - static String::Body escape_JSON(const String::Body src, - const Charset& source_charset); - static String& escape_JSON(const String& src, - const Charset& source_charset); + static String::C transcode(const String::C src, const Charset& source_charset, const Charset& dest_charset); + static String::Body transcode(const String::Body src, const Charset& source_transcoder, const Charset& dest_transcoder); + static String::Body transcode(const char* src,const Charset& source_transcoder, const Charset& dest_transcoder){ return transcode(String::Body(src), source_transcoder, dest_transcoder); } + static String& transcode(const String& src, const Charset& source_transcoder, const Charset& dest_transcoder); + static void transcode(ArrayString& src, const Charset& source_transcoder, const Charset& dest_transcoder); + static void transcode(HashStringString& src, const Charset& source_transcoder, const Charset& dest_transcoder); + + static String::C escape(const String::C src, const Charset& source_charset); + static String::Body escape(const String::Body src, const Charset& source_charset); + static String& escape(const String& src, const Charset& source_charset); + + static String::C escape_JSON(const String::C src, const Charset& source_charset); + static String::Body escape_JSON(const String::Body src, const Charset& source_charset); + static String& escape_JSON(const String& src, const Charset& source_charset); void store_Char(XMLByte*& outPtr, XMLCh src, XMLByte not_found); -#ifdef XML - xmlCharEncodingHandler& transcoder(const String::Body NAME); -#endif - public: unsigned char pcre_tables[tables_length]; @@ -156,7 +136,6 @@ private: private: void addEncoding(char* name_cstr); - void initTranscoder(const String::Body name, const char* name_cstr); public: /// converts xmlChar* null-terminated string to char* @@ -175,7 +154,8 @@ public: private: - xmlCharEncodingHandler* ftranscoder; + xmlCharEncodingInputFunc ftranscoder_input; + xmlCharEncodingOutputFunc ftranscoder_output; #endif @@ -194,6 +174,7 @@ size_t getUTF8CharPos(const XMLByte* src size_t lengthUTF8(const XMLByte* srcBegin, const XMLByte* srcEnd); unsigned int lengthUTF8Char(const XMLByte c); +const char *fixUTF8(const char *src); class UTF8_string_iterator { public: