HTMLParserIdioms.h [plain text]
#pragma once
#include <unicode/uchar.h>
#include <wtf/Forward.h>
#include <wtf/Optional.h>
#include <wtf/Vector.h>
#include <wtf/text/StringView.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 std::optional<int> parseHTMLInteger(StringView);
WEBCORE_EXPORT std::optional<unsigned> parseHTMLNonNegativeInteger(StringView);
std::optional<int> parseValidHTMLNonNegativeInteger(StringView);
std::optional<double> parseValidHTMLFloatingPointNumber(StringView);
Vector<double> parseHTMLListOfOfFloatingPointNumberValues(StringView);
bool parseMetaHTTPEquivRefresh(const StringView&, double& delay, String& url);
String parseCORSSettingsAttribute(const AtomicString&);
bool threadSafeMatch(const QualifiedName&, const QualifiedName&);
AtomicString parseHTMLHashNameReference(StringView);
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(StringView 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(StringView stringValue, unsigned defaultValue = 0)
{
ASSERT(defaultValue <= maxHTMLNonNegativeInteger);
unsigned value = parseHTMLNonNegativeInteger(stringValue).value_or(defaultValue);
ASSERT(value <= maxHTMLNonNegativeInteger);
return value;
}
}