1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*
- __ __ _
- ___\ \/ /_ __ __ _| |_
- / _ \\ /| '_ \ / _` | __|
- | __// \| |_) | (_| | |_
- \___/_/\_\ .__/ \__,_|\__|
- |_| XML parser
- Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
- Copyright (c) 2000 Clark Cooper <[email protected]>
- Copyright (c) 2002 Fred L. Drake, Jr. <[email protected]>
- Copyright (c) 2005-2006 Karl Waclawek <[email protected]>
- Copyright (c) 2016-2019 Sebastian Pipping <[email protected]>
- Copyright (c) 2019 David Loffredo <[email protected]>
- Licensed under the MIT license:
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to permit
- persons to whom the Software is furnished to do so, subject to the
- following conditions:
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
- #include "codepage.h"
- #include "internal.h" /* for UNUSED_P only */
- #if defined(_WIN32)
- # define STRICT 1
- # define WIN32_LEAN_AND_MEAN 1
- # include <windows.h>
- #endif /* defined(_WIN32) */
- int
- codepageMap(int cp, int *map) {
- #if defined(_WIN32)
- int i;
- CPINFO info;
- if (! GetCPInfo(cp, &info) || info.MaxCharSize > 2)
- return 0;
- for (i = 0; i < 256; i++)
- map[i] = -1;
- if (info.MaxCharSize > 1) {
- for (i = 0; i < MAX_LEADBYTES; i += 2) {
- int j, lim;
- if (info.LeadByte[i] == 0 && info.LeadByte[i + 1] == 0)
- break;
- lim = info.LeadByte[i + 1];
- for (j = info.LeadByte[i]; j <= lim; j++)
- map[j] = -2;
- }
- }
- for (i = 0; i < 256; i++) {
- if (map[i] == -1) {
- char c = (char)i;
- unsigned short n;
- if (MultiByteToWideChar(cp, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, &c, 1,
- &n, 1)
- == 1)
- map[i] = n;
- }
- }
- return 1;
- #else
- UNUSED_P(cp);
- UNUSED_P(map);
- return 0;
- #endif
- }
- int
- codepageConvert(int cp, const char *p) {
- #if defined(_WIN32)
- unsigned short c;
- if (MultiByteToWideChar(cp, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, p, 2, &c,
- 1)
- == 1)
- return c;
- return -1;
- #else
- UNUSED_P(cp);
- UNUSED_P(p);
- return -1;
- #endif
- }
|