diff options
Diffstat (limited to 'Source/WebCore/html/track/WebVTTToken.h')
-rw-r--r-- | Source/WebCore/html/track/WebVTTToken.h | 172 |
1 files changed, 29 insertions, 143 deletions
diff --git a/Source/WebCore/html/track/WebVTTToken.h b/Source/WebCore/html/track/WebVTTToken.h index 7cf1a27d3..317e1006d 100644 --- a/Source/WebCore/html/track/WebVTTToken.h +++ b/Source/WebCore/html/track/WebVTTToken.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2011 Google Inc. All rights reserved. + * Copyright (C) 2011, 2013 Google Inc. All rights reserved. + * Copyright (C) 2014 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -28,8 +29,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef WebVTTToken_h -#define WebVTTToken_h +#pragma once #if ENABLE(VIDEO_TRACK) @@ -43,170 +43,56 @@ public: StartTag, EndTag, TimestampTag, - EndOfFile, }; }; class WebVTTToken { - WTF_MAKE_NONCOPYABLE(WebVTTToken); - WTF_MAKE_FAST_ALLOCATED; public: typedef WebVTTTokenTypes Type; - typedef WTF::Vector<UChar, 1024> DataVector; // FIXME: Is this too large for WebVTT? - WebVTTToken() { clear(); } + WebVTTToken() + : m_type(Type::Uninitialized) { } - void appendToName(UChar character) + static WebVTTToken StringToken(const String& characterData) { - ASSERT(m_type == WebVTTTokenTypes::StartTag || m_type == WebVTTTokenTypes::EndTag); - ASSERT(character); - m_data.append(character); + return WebVTTToken(Type::Character, characterData); } - Type::Type type() const { return m_type; } - - const DataVector& name() const - { - return m_data; - } - - const DataVector& characters() const - { - ASSERT(m_type == Type::Character || m_type == Type::TimestampTag); - return m_data; - } - - // Starting a character token works slightly differently than starting - // other types of tokens because we want to save a per-character branch. - void ensureIsCharacterToken() - { - ASSERT(m_type == Type::Uninitialized || m_type == Type::Character); - m_type = Type::Character; - } - - void appendToCharacter(char character) - { - ASSERT(m_type == Type::Character); - m_data.append(character); - } - - void appendToCharacter(UChar character) - { - ASSERT(m_type == Type::Character); - m_data.append(character); - } - - void appendToCharacter(const Vector<LChar, 32>& characters) - { - ASSERT(m_type == Type::Character); - m_data.appendVector(characters); - } - - void beginEmptyStartTag() - { - ASSERT(m_type == Type::Uninitialized); - m_type = Type::StartTag; - m_data.clear(); - } - - void beginStartTag(UChar character) - { - ASSERT(character); - ASSERT(m_type == Type::Uninitialized); - m_type = Type::StartTag; - m_data.append(character); - } - - void beginEndTag(LChar character) - { - ASSERT(m_type == Type::Uninitialized); - m_type = Type::EndTag; - m_data.append(character); - } - - void beginTimestampTag(UChar character) - { - ASSERT(character); - ASSERT(m_type == Type::Uninitialized); - m_type = Type::TimestampTag; - m_data.append(character); - } - - void appendToTimestamp(UChar character) + static WebVTTToken StartTag(const String& tagName, const AtomicString& classes = emptyAtom, const AtomicString& annotation = emptyAtom) { - ASSERT(character); - ASSERT(m_type == Type::TimestampTag); - m_data.append(character); + WebVTTToken token(Type::StartTag, tagName); + token.m_classes = classes; + token.m_annotation = annotation; + return token; } - void appendToClass(UChar character) + static WebVTTToken EndTag(const String& tagName) { - appendToStartType(character); + return WebVTTToken(Type::EndTag, tagName); } - void addNewClass() - { - ASSERT(m_type == Type::StartTag); - if (!m_classes.isEmpty()) - m_classes.append(' '); - m_classes.appendVector(m_currentBuffer); - m_currentBuffer.clear(); - } - - const DataVector& classes() const + static WebVTTToken TimestampTag(const String& timestampData) { - return m_classes; + return WebVTTToken(Type::TimestampTag, timestampData); } - void appendToAnnotation(UChar character) - { - appendToStartType(character); - } - - void addNewAnnotation() - { - ASSERT(m_type == Type::StartTag); - m_annotation.clear(); - m_annotation.appendVector(m_currentBuffer); - m_currentBuffer.clear(); - } - - const DataVector& annotation() const - { - return m_annotation; - } - - void makeEndOfFile() - { - ASSERT(m_type == Type::Uninitialized); - m_type = Type::EndOfFile; - } - - void clear() - { - m_type = Type::Uninitialized; - m_data.clear(); - m_annotation.clear(); - m_classes.clear(); - m_currentBuffer.clear(); - } + Type::Type type() const { return m_type; } + const String& name() const { return m_data; } + const String& characters() const { return m_data; } + const AtomicString& classes() const { return m_classes; } + const AtomicString& annotation() const { return m_annotation; } private: - void appendToStartType(UChar character) - { - ASSERT(character); - ASSERT(m_type == Type::StartTag); - m_currentBuffer.append(character); - } + WebVTTToken(Type::Type type, const String& data) + : m_type(type) + , m_data(data) { } Type::Type m_type; - DataVector m_data; - DataVector m_annotation; - DataVector m_classes; - DataVector m_currentBuffer; + String m_data; + AtomicString m_annotation; + AtomicString m_classes; }; -} +} // namespace WebCore -#endif -#endif +#endif // ENABLE(VIDEO_TRACK) |