windows-nt/Source/XPSP1/NT/base/win32/fusion/xmlparser/xmlhelper.hxx
2020-09-26 16:20:57 +08:00

204 lines
4.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////////
//
// fusion\xmlparser\xmlhelper.hxx
//
/////////////////////////////////////////////////////////////////////////////////
#ifndef _FUSION_XMLPARSER__XMLHELPER_H_INCLUDE_
#define _FUSION_XMLPARSER__XMLHELPER_H_INCLUDE_
#pragma once
#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <windows.h>
#include "core.hxx"
#define checknull(a) if (!(a)) { hr = E_OUTOFMEMORY; goto error; }
#define breakhr(a) hr = (a); if (hr != S_OK) break;
#define checkhr2(a) hr = a; if (hr != S_OK) return hr;
// resolve built-in entities.
WCHAR BuiltinEntity(const WCHAR* text, ULONG len);
HRESULT HexToUnicode(const WCHAR* text, ULONG len, WCHAR& ch);
HRESULT DecimalToUnicode(const WCHAR* text, ULONG len, WCHAR& ch);
// --------------------------------------------------------------------
// A little helper class for setting a boolean flag and clearing it
// on destruction.
class BoolLock
{
bool* _pFlag;
public:
BoolLock(bool* pFlag)
{
_pFlag = pFlag;
*pFlag = true;
}
~BoolLock()
{
*_pFlag = false;
}
};
//helper Functions
int DecimalToBuffer(long, char*, int, long);
int StrToBuffer(const WCHAR*, WCHAR*, int);
bool StringEquals(const WCHAR*, const WCHAR*, long, bool);
//////////////////////////////////////////////////////////
enum
{
FWHITESPACE = 1,
FDIGIT = 2,
FLETTER = 4,
FMISCNAME = 8,
FSTARTNAME = 16,
FCHARDATA = 32
};
static const short TABLE_SIZE = 128;
static int g_anCharType[TABLE_SIZE] = {
0,
0,
0,
0,
0,
0,
0,
0,
0,
0 | FWHITESPACE | FCHARDATA,
0 | FWHITESPACE | FCHARDATA,
0,
0,
0 | FWHITESPACE | FCHARDATA,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0 | FWHITESPACE | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FMISCNAME | FCHARDATA,
0 | FMISCNAME | FCHARDATA,
0 | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FDIGIT | FCHARDATA,
0 | FSTARTNAME | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FMISCNAME | FSTARTNAME | FCHARDATA,
0 | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FLETTER | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
0 | FCHARDATA,
};
bool isDigit(WCHAR ch);
bool isHexDigit(WCHAR ch);
bool isLetter(WCHAR ch);
int isStartNameChar(WCHAR ch);
bool isCombiningChar(WCHAR ch);
bool isExtender(WCHAR ch);
bool isAlphaNumeric(WCHAR ch);
int isNameChar(WCHAR ch);
int isCharData(WCHAR ch);
#endif