HTMLParserIdioms.h [plain text]
#ifndef HTMLParserIdioms_h
#define HTMLParserIdioms_h
#include <unicode/uchar.h>
#include <wtf/Forward.h>
#include <wtf/Optional.h>
namespace WebCore {
class Decimal;
class QualifiedName;
template<typename CharacterType> bool isHTMLSpace(CharacterType);
template<typename CharacterType> bool isComma(CharacterType);
template<typename CharacterType> bool isHTMLSpaceOrComma(CharacterType);
bool isHTMLLineBreak(UChar);
bool isNotHTMLSpace(UChar);
bool isHTMLSpaceButNotLineBreak(UChar);
static const unsigned maxHTMLNonNegativeInteger = 2147483647;
WEBCORE_EXPORT String stripLeadingAndTrailingHTMLSpaces(const String&);
String serializeForNumberType(const Decimal&);
String serializeForNumberType(double);
Decimal parseToDecimalForNumberType(const String&);
Decimal parseToDecimalForNumberType(const String&, const Decimal& fallbackValue);
double parseToDoubleForNumberType(const String&);
double parseToDoubleForNumberType(const String&, double fallbackValue);
WEBCORE_EXPORT Optional<int> parseHTMLInteger(const String&);
WEBCORE_EXPORT Optional<int> parseHTMLNonNegativeInteger(const String&);
String parseCORSSettingsAttribute(const AtomicString&);
bool threadSafeMatch(const QualifiedName&, const QualifiedName&);
template<typename CharacterType> inline bool isHTMLSpace(CharacterType character)
{
return character <= ' ' && (character == ' ' || character == '\n' || character == '\t' || character == '\r' || character == '\f');
}
inline bool isHTMLLineBreak(UChar character)
{
return character <= '\r' && (character == '\n' || character == '\r');
}
template<typename CharacterType> inline bool isComma(CharacterType character)
{
return character == ',';
}
template<typename CharacterType> inline bool isHTMLSpaceOrComma(CharacterType character)
{
return isComma(character) || isHTMLSpace(character);
}
inline bool isNotHTMLSpace(UChar character)
{
return !isHTMLSpace(character);
}
inline bool isHTMLSpaceButNotLineBreak(UChar character)
{
return isHTMLSpace(character) && !isHTMLLineBreak(character);
}
inline unsigned limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(unsigned value, unsigned defaultValue = 1)
{
return (value > 0 && value <= maxHTMLNonNegativeInteger) ? value : defaultValue;
}
inline unsigned limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(const String& stringValue, unsigned defaultValue = 1)
{
ASSERT(defaultValue > 0);
ASSERT(defaultValue <= maxHTMLNonNegativeInteger);
auto optionalValue = parseHTMLNonNegativeInteger(stringValue);
unsigned value = optionalValue && optionalValue.value() ? optionalValue.value() : defaultValue;
ASSERT(value > 0);
ASSERT(value <= maxHTMLNonNegativeInteger);
return value;
}
inline unsigned limitToOnlyHTMLNonNegative(unsigned value, unsigned defaultValue = 0)
{
ASSERT(defaultValue <= maxHTMLNonNegativeInteger);
return value <= maxHTMLNonNegativeInteger ? value : defaultValue;
}
inline unsigned limitToOnlyHTMLNonNegative(const String& stringValue, unsigned defaultValue = 0)
{
ASSERT(defaultValue <= maxHTMLNonNegativeInteger);
unsigned value = parseHTMLNonNegativeInteger(stringValue).valueOr(defaultValue);
ASSERT(value <= maxHTMLNonNegativeInteger);
return value;
}
}
#endif