ParseResult IEbmlElement::ParseFromFile() { //std::cout << "On parsing IEbmlElement from file\n"; PreClean(); if (this->m_pReader == nullptr) return FAILED; long long total, available; m_pReader->Length(&total, &available); if (total > available) return E_FILE_FORMAT_INVALID; BytePostion cur_pos = this->GetDataStart(); BytePostion stop_pos = this->GetDataSize() + cur_pos; if (stop_pos > total) return E_FILE_FORMAT_INVALID; if (cur_pos > stop_pos) return E_FILE_FORMAT_INVALID; while (cur_pos < stop_pos) { //std::cout << "e_start: " << cur_pos << std::endl; Uint64 status; long length = -1; BytePostion e_start = cur_pos; // Read ID status = ReadID(this->m_pReader, cur_pos, length); if (status < 0) return E_FILE_FORMAT_INVALID; if (!CheckIDLength(length)) return E_FILE_FORMAT_INVALID; cur_pos += length; // Consumes ID EbmlID id = (EbmlID)status; //std::cout << "ID: " << id << std::endl; // Read DataSize status = ReadUInt(this->m_pReader, cur_pos, length); if (status < 0) return E_FILE_FORMAT_INVALID; if (!CheckElementSize(length)) return E_FILE_FORMAT_INVALID; //std::cout << "d_size: " << status << std::endl; cur_pos += length; // Consumes Size Uint64 d_size = status; // Read Data //std::cout << "d_start: " << cur_pos << std::endl; //std::cout << std::endl; status = ParseChild(e_start, cur_pos + d_size - e_start, cur_pos, d_size, id); if (status != SUCCESS) return status; if (cur_pos > stop_pos) return E_FILE_FORMAT_INVALID; cur_pos += d_size; } if (cur_pos != stop_pos) return E_FILE_FORMAT_INVALID; AFewMoreActions(); return SUCCESS; }
bool TemplateParser::ParseMacro() { Ident ident; ident = ParseIdent(); switch (ident) { case ID_WXPARENT: return ParseWxParent(); break; case ID_PARENT: return ParseParent(); break; case ID_FORM: return ParseForm(); break; case ID_IFNOTNULL: return ParseIfNotNull(); break; case ID_IFNULL: return ParseIfNull(); break; case ID_FOREACH: return ParseForEach(); break; case ID_PREDEFINED: return ParsePred(); break; case ID_PREDEFINED_INDEX: return ParseNPred(); break; case ID_CHILD: return ParseChild(); break; case ID_NEWLINE: return ParseNewLine(); break; case ID_IFEQUAL: ParseIfEqual(); break; case ID_IFNOTEQUAL: ParseIfNotEqual(); break; case ID_IFPARENTTYPEEQUAL: ParseIfParentTypeEqual(); break; case ID_IFPARENTCLASSEQUAL: ParseIfParentClassEqual(); break; case ID_IFPARENTTYPENOTEQUAL: ParseIfParentTypeNotEqual(); break; case ID_IFPARENTCLASSNOTEQUAL: ParseIfParentClassNotEqual(); break; case ID_APPEND: ParseAppend(); break; case ID_CLASS: ParseClass(); break; case ID_INDENT: ParseIndent(); break; case ID_UNINDENT: ParseUnindent(); break; case ID_IFTYPEEQUAL: ParseIfTypeEqual(); break; case ID_IFTYPENOTEQUAL: ParseIfTypeNotEqual(); break; case ID_UTBL: ParseLuaTable(); break; default: THROW_WXFBEX( wxT("Invalid Macro Type") ); break; } return true; }