summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html/parser/HTMLToken.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/parser/HTMLToken.h')
-rw-r--r--Source/WebCore/html/parser/HTMLToken.h55
1 files changed, 40 insertions, 15 deletions
diff --git a/Source/WebCore/html/parser/HTMLToken.h b/Source/WebCore/html/parser/HTMLToken.h
index 1cbc151..aa16ab2 100644
--- a/Source/WebCore/html/parser/HTMLToken.h
+++ b/Source/WebCore/html/parser/HTMLToken.h
@@ -64,20 +64,26 @@ public:
HTMLToken() { clear(); }
- void clear(int startIndex = 0)
+ void clear()
{
m_type = Uninitialized;
- m_range.m_start = startIndex;
- m_range.m_end = startIndex;
+ m_range.m_start = 0;
+ m_range.m_end = 0;
+ m_baseOffset = 0;
m_data.clear();
}
int startIndex() const { return m_range.m_start; }
int endIndex() const { return m_range.m_end; }
- void end(int endIndex)
+ void setBaseOffset(int offset)
{
- m_range.m_end = endIndex;
+ m_baseOffset = offset;
+ }
+
+ void end(int endOffset)
+ {
+ m_range.m_end = endOffset - m_baseOffset;
}
void makeEndOfFile()
@@ -172,29 +178,30 @@ public:
#endif
}
- void beginAttributeName(int index)
+ void beginAttributeName(int offset)
{
- m_currentAttribute->m_nameRange.m_start = index;
+ m_currentAttribute->m_nameRange.m_start = offset - m_baseOffset;
}
- void endAttributeName(int index)
+ void endAttributeName(int offset)
{
+ int index = offset - m_baseOffset;
m_currentAttribute->m_nameRange.m_end = index;
m_currentAttribute->m_valueRange.m_start = index;
m_currentAttribute->m_valueRange.m_end = index;
}
- void beginAttributeValue(int index)
+ void beginAttributeValue(int offset)
{
- m_currentAttribute->m_valueRange.m_start = index;
+ m_currentAttribute->m_valueRange.m_start = offset - m_baseOffset;
#ifndef NDEBUG
m_currentAttribute->m_valueRange.m_end = 0;
#endif
}
- void endAttributeValue(int index)
+ void endAttributeValue(int offset)
{
- m_currentAttribute->m_valueRange.m_end = index;
+ m_currentAttribute->m_valueRange.m_end = offset - m_baseOffset;
}
void appendToAttributeName(UChar character)
@@ -213,6 +220,13 @@ public:
m_currentAttribute->m_value.append(character);
}
+ void appendToAttributeValue(size_t i, const String& value)
+ {
+ ASSERT(!value.isEmpty());
+ ASSERT(m_type == StartTag || m_type == EndTag);
+ m_attributes[i].m_value.append(value.characters(), value.length());
+ }
+
Type type() const { return m_type; }
bool selfClosing() const
@@ -239,6 +253,18 @@ public:
return m_data;
}
+ void eraseCharacters()
+ {
+ ASSERT(m_type == Character);
+ m_data.clear();
+ }
+
+ void eraseValueOfAttribute(size_t i)
+ {
+ ASSERT(m_type == StartTag || m_type == EndTag);
+ m_attributes[i].m_value.clear();
+ }
+
const DataVector& characters() const
{
ASSERT(m_type == Character);
@@ -331,9 +357,8 @@ private:
};
Type m_type;
-
- // Which characters from the input stream are represented by this token.
- Range m_range;
+ Range m_range; // Always starts at zero.
+ int m_baseOffset;
// "name" for DOCTYPE, StartTag, and EndTag
// "characters" for Character