From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/xml/encodings_c.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Src/xml/encodings_c.cpp (limited to 'Src/xml/encodings_c.cpp') diff --git a/Src/xml/encodings_c.cpp b/Src/xml/encodings_c.cpp new file mode 100644 index 00000000..caf0ed19 --- /dev/null +++ b/Src/xml/encodings_c.cpp @@ -0,0 +1,90 @@ +#include "expat/expat.h" +#include +#include +// TODO: make this work + +struct AppleEncodings +{ + const wchar_t *name; + CFStringEncoding codePage; +}; + +static const AppleEncodings encodings[] = +{ + {L"iso-8859-2", kCFStringEncodingISOLatin2}, + {L"iso-8859-3", kCFStringEncodingISOLatin3}, + {L"iso-8859-4", kCFStringEncodingISOLatin4}, + {L"iso-8859-5", kCFStringEncodingISOLatinCyrillic}, + {L"iso-8859-6", kCFStringEncodingISOLatinArabic}, + {L"iso-8859-7", kCFStringEncodingISOLatinGreek}, + {L"iso-8859-8", kCFStringEncodingISOLatinHebrew}, + {L"iso-8859-9", kCFStringEncodingISOLatin5}, + {L"iso-8859-10", kCFStringEncodingISOLatin6}, + {L"iso-8859-11", kCFStringEncodingISOLatinThai}, + {L"iso-8859-13", kCFStringEncodingISOLatin7}, + {L"iso-8859-14", kCFStringEncodingISOLatin8}, + {L"iso-8859-15", kCFStringEncodingISOLatin9}, + {L"windows-1251", kCFStringEncodingWindowsCyrillic}, + {L"windows-1252", kCFStringEncodingWindowsLatin1}, + {L"windows-1253", kCFStringEncodingWindowsGreek}, + {L"windows-1254", kCFStringEncodingWindowsLatin5}, + {L"windows-1255", kCFStringEncodingWindowsHebrew}, + {L"windows-1256", kCFStringEncodingWindowsArabic}, + {L"windows-1257", kCFStringEncodingWindowsBalticRim}, + {L"windows-1258", kCFStringEncodingWindowsVietnamese}, + +}; + +static void MakeMap(int *map, CFStringEncoding encoding) +{ + unsigned char i=0; + unsigned char mb[2] = {0,0}; + do + { + mb[0]=i; + // if (IsDBLeadByteEx(codepage, i)) map[i]=-2; else { + CFStringRef cfstr = CFStringCreateWithBytes(kCFAllocatorDefault, (UInt8 *)mb, 1, encoding, false); + if (!cfstr || CFStringGetBytes(cfstr, CFRangeMake(0,1), kCFStringEncodingUTF32, 0, false, (UInt8 *)(map+i), sizeof(*map), 0)) + { + map[i]=-1; + } + // } + } while (i++ != 255); +} + +static bool wcsmatch(const wchar_t *a, const wchar_t *b) +{ + if (!a || !b) + return false; // wtf + + while (*a || *b) + { + if (!*a) + return false; + if (!*b) + return false; + + if (towlower(*a) != towlower(*b)) + return false; + a++; + b++; + } + + return true; +} +#define NUM_ENCODINGS (sizeof(encodings)/sizeof(AppleEncodings)) +int XMLCALL UnknownEncoding(void *data, const XML_Char *name, XML_Encoding *info) +{ + for (int i=0;imap, encodings[i].codePage); + info->data = 0; + info->convert = 0; + info->release = 0; + return XML_STATUS_OK; + } + } + return XML_STATUS_ERROR; +} -- cgit