mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-21 14:53:44 +03:00
175 lines
3.4 KiB
C
175 lines
3.4 KiB
C
/*
|
|
* chvalid.c: this module implements the character range
|
|
* validation APIs
|
|
*/
|
|
|
|
#define IN_LIBXML
|
|
#include "libxml.h"
|
|
#include <libxml/chvalid.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
/*
|
|
* The initial tables ({func_name}_tab) are used to validate whether a
|
|
* single-byte character is within the specified group. Each table
|
|
* contains 256 bytes, with each byte representing one of the 256
|
|
* possible characters. If the table byte is set, the character is
|
|
* allowed.
|
|
*
|
|
*/
|
|
|
|
#include "codegen/ranges.inc"
|
|
|
|
/**
|
|
* Does a binary search of the range table to determine if char
|
|
* is valid
|
|
*
|
|
* @param val character to be validated
|
|
* @param rptr pointer to range to be used to validate
|
|
* @returns true if character valid, false otherwise
|
|
*/
|
|
int
|
|
xmlCharInRange (unsigned int val, const xmlChRangeGroup *rptr) {
|
|
int low, high, mid;
|
|
const xmlChSRange *sptr;
|
|
const xmlChLRange *lptr;
|
|
|
|
if (rptr == NULL) return(0);
|
|
if (val < 0x10000) { /* is val in 'short' or 'long' array? */
|
|
if (rptr->nbShortRange == 0)
|
|
return 0;
|
|
low = 0;
|
|
high = rptr->nbShortRange - 1;
|
|
sptr = rptr->shortRange;
|
|
while (low <= high) {
|
|
mid = (low + high) / 2;
|
|
if ((unsigned short) val < sptr[mid].low) {
|
|
high = mid - 1;
|
|
} else {
|
|
if ((unsigned short) val > sptr[mid].high) {
|
|
low = mid + 1;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (rptr->nbLongRange == 0) {
|
|
return 0;
|
|
}
|
|
low = 0;
|
|
high = rptr->nbLongRange - 1;
|
|
lptr = rptr->longRange;
|
|
while (low <= high) {
|
|
mid = (low + high) / 2;
|
|
if (val < lptr[mid].low) {
|
|
high = mid - 1;
|
|
} else {
|
|
if (val > lptr[mid].high) {
|
|
low = mid + 1;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsBaseChar_ch or #xmlIsBaseCharQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsBaseChar(unsigned int ch) {
|
|
return(xmlIsBaseCharQ(ch));
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsBlank_ch or #xmlIsBlankQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsBlank(unsigned int ch) {
|
|
return(xmlIsBlankQ(ch));
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsChar_ch or #xmlIsCharQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsChar(unsigned int ch) {
|
|
return(xmlIsCharQ(ch));
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsCombiningQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsCombining(unsigned int ch) {
|
|
return(xmlIsCombiningQ(ch));
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsDigit_ch or #xmlIsDigitQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsDigit(unsigned int ch) {
|
|
return(xmlIsDigitQ(ch));
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsExtender_ch or #xmlIsExtenderQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsExtender(unsigned int ch) {
|
|
return(xmlIsExtenderQ(ch));
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsIdeographicQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsIdeographic(unsigned int ch) {
|
|
return(xmlIsIdeographicQ(ch));
|
|
}
|
|
|
|
|
|
/**
|
|
* @deprecated Use #xmlIsPubidChar_ch or #xmlIsPubidCharQ.
|
|
*
|
|
* @param ch character to validate
|
|
* @returns true if argument valid, false otherwise
|
|
*/
|
|
int
|
|
xmlIsPubidChar(unsigned int ch) {
|
|
return(xmlIsPubidCharQ(ch));
|
|
}
|
|
|