void OManager::collectAll(const string & nonstdcaseheader){ // simple checks: if(oLinks.empty()) return; collectData(); collectHeader(); collectClosure(); addHeader(nonstdcaseheader); }
void WebVTTParser::parseBytes(const char* data, unsigned length) { // 4.8.10.13.3 WHATWG WebVTT Parser algorithm. // 1-3 - Initial setup. unsigned position = 0; while (position < length) { String line = collectNextLine(data, length, &position); switch (m_state) { case Initial: // Buffer up at least 9 bytes before proceeding with checking for the file identifier. m_identifierData.append(data, length); if (m_identifierData.size() < bomLength + fileIdentifierLength) return; // 4-12 - Collect the first line and check for "WEBVTT". if (!hasRequiredFileIdentifier()) { if (m_client) m_client->fileFailedToParse(); return; } m_state = Header; m_identifierData.clear(); break; case Header: // 13-18 - Allow a header (comment area) under the WEBVTT line. #if ENABLE(WEBVTT_REGIONS) if (line.isEmpty()) { if (m_client && m_regionList.size()) m_client->newRegionsParsed(); m_state = Id; break; } collectHeader(line); break; case Metadata: #endif if (line.isEmpty()) m_state = Id; break; case Id: // 19-29 - Allow any number of line terminators, then initialize new cue values. if (line.isEmpty()) break; resetCueValues(); // 30-39 - Check if this line contains an optional identifier or timing data. m_state = collectCueId(line); break; case TimingsAndSettings: // 40 - Collect cue timings and settings. m_state = collectTimingsAndSettings(line); break; case CueText: // 41-53 - Collect the cue text, create a cue, and add it to the output. m_state = collectCueText(line, length, position); break; case BadCue: // 54-62 - Collect and discard the remaining cue. m_state = ignoreBadCue(line); break; } } }