void HTMLParser::runParser(string url){ try{ inputStream = new URLInputStream(url); HTMLTokenizer * tokenizer = new HTMLTokenizer(inputStream); while(tokenizer->HasNextToken()){ HTMLToken curToken = tokenizer->GetNextToken(); if(isHTMLStart(curToken)) processHtml(*tokenizer); } delete tokenizer; inputStream->Close(); } catch (std::exception &e){ cout << "Exception Occurred:" << e.what() << endl; } catch (CS240Exception &e){ cout << "Exception Occurred:" << e.GetMessage() << endl; } catch (...){ cout << "Unknown Exception Occurred" << endl; } }
void HTMLParser::processScript(HTMLTokenizer & tokenizer){ while(tokenizer.HasNextToken()){ HTMLToken curToken = tokenizer.GetNextToken(); if(isScriptEnd(curToken)) return; } }
void HTMLParser::processHeader(HTMLTokenizer & tokenizer){ while(tokenizer.HasNextToken()){ HTMLToken curToken = tokenizer.GetNextToken(); if(isText(curToken)){ header += curToken.GetValue(); processText(curToken.GetValue()); }else if(isHeaderEnd(curToken)) return; else if(isLinkStart(curToken)) processLink(curToken); } }
void HTMLParser::processTitle(HTMLTokenizer & tokenizer){ assert(tokenizer.HasNextToken()); while(tokenizer.HasNextToken()){ HTMLToken titleToken = tokenizer.GetNextToken(); if(titleToken.GetType() == TEXT){ title += titleToken.GetValue(); processText(titleToken.GetValue()); } if(isTitleEnd(titleToken)) return; } }
void HTMLParser::processHtml(HTMLTokenizer & tokenizer){ assert(tokenizer.HasNextToken()); while(tokenizer.HasNextToken()){ HTMLToken curToken = tokenizer.GetNextToken(); if(isHeadStart(curToken)){ TRACE("Head Start"); processHead(tokenizer); }else if(isBodyStart(curToken)) processBody(tokenizer); } }
void GameLoader::LoadBoard(HTMLTokenizer & tokenizer, Board * boardPtr) const { HTMLToken currentToken = tokenizer.GetNextToken(); while (currentToken.GetValue() != "board") { CheckForEndToken(currentToken); currentToken = tokenizer.GetNextToken(); } currentToken = tokenizer.GetNextToken(); while (currentToken.GetValue() != "board") { CheckForEndToken(currentToken); if (currentToken.GetValue() == "piece") { int pieceType = ConvertTypeStrToInt(currentToken.GetAttribute("type")); int pieceColor = ConvertColorStrToInt(currentToken.GetAttribute("color")); int col = atoi(currentToken.GetAttribute("column").c_str()); int row = atoi(currentToken.GetAttribute("row").c_str()); boardPtr->SetPiece(BoardPosition(row, col), pieceType, pieceColor); } currentToken = tokenizer.GetNextToken(); } }
void HTMLParser::processHead(HTMLTokenizer & tokenizer){ assert(tokenizer.HasNextToken()); while(tokenizer.HasNextToken()){ HTMLToken headToken = tokenizer.GetNextToken(); if(isHeadEnd(headToken)) return; if(isTitleStart(headToken)){ processTitle(tokenizer); TRACE("TITLE Start"); } }// End While Loop }
void HTMLParser::processBody(HTMLTokenizer & tokenizer){ assert(tokenizer.HasNextToken()); while(tokenizer.HasNextToken()){ HTMLToken curToken = tokenizer.GetNextToken(); if(isText(curToken)){ string tmpstr = curToken.GetValue(); processDescription(tmpstr); processText(tmpstr); }else if(isLinkStart(curToken)) processLink(curToken); else if(isHeaderStart(curToken) && header.empty()){ processHeader(tokenizer); }else if(isScriptStart(curToken)){ processScript(tokenizer); }else if(isBodyEnd(curToken)){ return; } } }
void GameLoader::LoadMoveHistory(HTMLTokenizer & tokenizer, MoveHistory * gameHistory) const { HTMLToken currentToken = tokenizer.GetNextToken(); while (currentToken.GetValue() != "history") { CheckForEndToken(currentToken); currentToken = tokenizer.GetNextToken(); } currentToken = tokenizer.GetNextToken(); while (currentToken.GetValue() != "history") { CheckForEndToken(currentToken); if (currentToken.GetValue() == "move" && currentToken.GetType() == HTMLTokenType::TAG_START) { while (currentToken.GetValue() != "piece") { CheckForEndToken(currentToken); currentToken = tokenizer.GetNextToken(); } HTMLToken origin = currentToken; currentToken = tokenizer.GetNextToken(); while (currentToken.GetValue() != "piece") { CheckForEndToken(currentToken); currentToken = tokenizer.GetNextToken(); } HTMLToken destination = currentToken; currentToken = tokenizer.GetNextToken(); int originPieceType = ConvertTypeStrToInt(origin.GetAttribute("type")); int originPieceColor = ConvertColorStrToInt(origin.GetAttribute("color")); int originCol = atoi(origin.GetAttribute("column").c_str()); int originRow = atoi(origin.GetAttribute("row").c_str()); int destinationCol = atoi(destination.GetAttribute("column").c_str()); int destinationRow = atoi(destination.GetAttribute("row").c_str()); int capturedPieceType = -1; int capturedCol = -1; int capturedRow = -1; while (currentToken.GetValue() != "piece" && currentToken.GetValue() != "move") { CheckForEndToken(currentToken); currentToken = tokenizer.GetNextToken(); } if (currentToken.GetValue() == "piece") { capturedPieceType = ConvertTypeStrToInt(currentToken.GetAttribute("type")); capturedCol = atoi(currentToken.GetAttribute("column").c_str()); capturedRow = atoi(currentToken.GetAttribute("row").c_str()); } gameHistory->AddMove(Move(originPieceType, originPieceColor, BoardPosition(originRow, originCol), BoardPosition(destinationRow, destinationCol), capturedPieceType, BoardPosition(capturedRow, capturedCol))); } else { currentToken = tokenizer.GetNextToken(); } } }