bool GetLine(TextFile& Input, std::wstring& dest) { std::wstring Buffer = Input.readLine(); dest = L""; if (Input.hasError()) Logger::printError(Logger::Warning,Input.getErrorText()); int InputPos = 0; while (InputPos < (int)Buffer.size() && (Buffer[InputPos] == '\t' || Buffer[InputPos] == ' ')) InputPos++; while (InputPos < (int)Buffer.size() && CheckEndLine(Buffer,InputPos) == false) { switch (Buffer[InputPos]) { case ' ': case '\t': while (InputPos < (int)Buffer.size() && (Buffer[InputPos] == '\t' || Buffer[InputPos] == ' ')) InputPos++; if (CheckEndLine(Buffer,InputPos) == true) { return true; } dest += ' '; break; case '"': // string dest += towlower(Buffer[InputPos++]); while (InputPos < (int)Buffer.size() && Buffer[InputPos] != '"') { if (InputPos+1 < (int)Buffer.size() && Buffer[InputPos] == '\\' && Buffer[InputPos+1] == '"') { dest += '\\'; dest += '"'; InputPos += 2; continue; } if (InputPos+1 < (int)Buffer.size() && Buffer[InputPos] == '\\' && Buffer[InputPos+1] == '\\') { dest += '\\'; dest += '\\'; InputPos += 2; continue; } if (Buffer[InputPos] == '\n' || Buffer[InputPos] == 0) { Logger::printError(Logger::Error,L"Unexpected end of line in string constant"); return false; } dest += Buffer[InputPos++]; } if (InputPos == (int)Buffer.size()) { Logger::printError(Logger::Error,L"Unexpected end of line in string constant"); return false; } dest += towlower(Buffer[InputPos++]); break; case '\'': if (Buffer[InputPos+2] == '\'') { dest += Buffer[InputPos++]; dest += Buffer[InputPos++]; dest += Buffer[InputPos++]; } else { Logger::printError(Logger::Error,L"Invalid character constant"); return false; } break; default: dest += towlower(Buffer[InputPos++]); break; } } return true; }