blob: dd66db1083efe88ca13932c922cbc86d736843e9 [file] [log] [blame] [edit]
/*
* 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));
}