RawKeywordPtr Parser::createRawKeyword(const DeckConstPtr deck, const std::string& filename , size_t lineNR , const std::string& keywordString, bool strictParsing) const { if (hasKeyword(keywordString)) { ParserKeywordConstPtr parserKeyword = m_parserKeywords.find(keywordString)->second; ParserKeywordActionEnum action = parserKeyword->getAction(); if (action == THROW_EXCEPTION) throw std::invalid_argument("Parsing terminated by fatal keyword: " + keywordString); if (parserKeyword->getSizeType() == SLASH_TERMINATED) return RawKeywordPtr(new RawKeyword(keywordString , filename , lineNR)); else { size_t targetSize; if (parserKeyword->hasFixedSize()) targetSize = parserKeyword->getFixedSize(); else { const std::pair<std::string, std::string> sizeKeyword = parserKeyword->getSizeDefinitionPair(); DeckKeywordConstPtr sizeDefinitionKeyword = deck->getKeyword(sizeKeyword.first); DeckItemConstPtr sizeDefinitionItem; { DeckRecordConstPtr record = sizeDefinitionKeyword->getRecord(0); sizeDefinitionItem = record->getItem(sizeKeyword.second); } targetSize = sizeDefinitionItem->getInt(0); } return RawKeywordPtr(new RawKeyword(keywordString, filename , lineNR , targetSize , parserKeyword->isTableCollection())); } } else { if (strictParsing) { throw std::invalid_argument("Keyword " + keywordString + " not recognized "); } else { return RawKeywordPtr(new RawKeyword(keywordString, filename , lineNR , 0)); } } }
boost::posix_time::ptime TimeMap::timeFromEclipse(DeckRecordConstPtr dateRecord) { static const std::string errorMsg("The datarecord must consist of the for values " "\"DAY(int), MONTH(string), YEAR(int), TIME(string)\".\n"); if (dateRecord->size() != 4) { throw std::invalid_argument( errorMsg); } DeckItemConstPtr dayItem = dateRecord->getItem( 0 ); DeckItemConstPtr monthItem = dateRecord->getItem( 1 ); DeckItemConstPtr yearItem = dateRecord->getItem( 2 ); DeckItemConstPtr timeItem = dateRecord->getItem( 3 ); try { int day = dayItem->getInt(0); const std::string& month = monthItem->getString(0); int year = yearItem->getInt(0); std::string eclipseTimeString = timeItem->getString(0); return TimeMap::timeFromEclipse(day, month, year, eclipseTimeString); } catch (...) { throw std::invalid_argument( errorMsg ); } }