64 std::vector<char>
tok;
136 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
287 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
348 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
448 &&
options & GenericDocument::OPTION_ALLOW_NAKED_STRINGS)
457 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
623 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
702 doc.
tokens.push_back({ TokenType::BOOL, 1.f });
708 doc.
tokens.push_back({ TokenType::BOOL, 0.f });
777 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
869 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
921 doc.
tokens.push_back({ TokenType::INT, (float)Ogre::StringConverter::parseInt(
tok.data()) });
925 doc.
tokens.push_back({ TokenType::FLOAT, (float)Ogre::StringConverter::parseReal(
tok.data()) });
1003 doc.
tokens.push_back({ TokenType::LINEBREAK, 0.f });
1019 while (!datastream->eof())
1022 for (
size_t i = 0; i < buf_len; i++)
1024 const char c = buf[i];
1032#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
1040 std::string separator;
1041 const char* pool_str =
nullptr;
1042 const size_t BUF_MAX = 100;
1055 datastream->write(
";", 1);
1057 datastream->write(pool_str, strlen(pool_str));
1061 datastream->write(separator.data(), separator.size());
1063 datastream->write(pool_str, strlen(pool_str));
1068 datastream->write(separator.data(), separator.size());
1069 snprintf(buf, BUF_MAX,
"%g", tok.data);
1070 datastream->write(buf, strlen(buf));
1075 datastream->write(separator.data(), separator.size());
1076 snprintf(buf, BUF_MAX,
"%d", (
int)tok.data);
1077 datastream->write(buf, strlen(buf));
1082 datastream->write(separator.data(), separator.size());
1083 snprintf(buf, BUF_MAX,
"%s", tok.data == 1.f ?
"true" :
"false");
1084 datastream->write(buf, strlen(buf));
1090 datastream->write(pool_str, strlen(pool_str));
1101 Ogre::DataStreamPtr datastream = Ogre::ResourceGroupManager::getSingleton().openResource(resource_name, resource_group_name);
1105 catch (Ogre::Exception& eeh)
1108 fmt::format(
"GenericDocument: could not load file '{}' from resource group '{}': {}", resource_name, resource_group_name, eeh.getDescription()));
1117 Ogre::DataStreamPtr datastream = Ogre::ResourceGroupManager::getSingleton().createResource(resource_name, resource_group_name);
1121 catch (Ogre::Exception& eeh)
1124 fmt::format(
"GenericDocument: could not write file '{}' to resource group '{}': {}", resource_name, resource_group_name, eeh.getDescription()));
1164 for (
int i = 0; i < count; i++)
1200 std::copy(data.begin(), data.end(), std::back_inserter(
doc->
string_pool));
Central state/object manager and communications hub.
static const int LINE_BUF_MAX
@ CONSOLE_MSGTYPE_INFO
Generic message.
void putMessage(MessageArea area, MessageType type, std::string const &msg, std::string icon="")
void DiscontinueKeyword()
PartialToken partial_tok_type
void BeginToken(const char c)
Ogre::DataStreamPtr datastream
void UpdateTitle(const char c)
void ProcessSeparatorWithinBool()
void UpdateString(const char c)
DocumentParser(GenericDocument &d, const BitMask_t opt, Ogre::DataStreamPtr ds)
void UpdateComment(const char c)
void UpdateGarbage(const char c)
void UpdateBool(const char c)
void UpdateKeyword(const char c)
void ProcessChar(const char c)
void FlushStringishToken(RoR::TokenType type)
void UpdateNumber(const char c)
void appendTokens(int count)
Appends a series of TokenType::NONE and sets Pos at the first one added; use setTok* functions to fil...
bool setFloatData(int offset, TokenType type, float data)
bool setStringData(int offset, TokenType type, const std::string &data)
bool insertToken(int offset=0)
Inserts TokenType::NONE;.
bool eraseToken(int offset=0)
bool endOfFile(int offset=0) const
bool isTokLineBreak(int offset=0) const
bool isTokComment(int offset=0) const
TokenType tokenType(int offset=0) const
static const BitMask_t OPTION_ALLOW_SLASH_COMMENTS
Allow comments starting with //.
std::vector< char > string_pool
static const BitMask_t OPTION_ALLOW_SEPARATOR_COLON
Allow ':' as separator between tokens.
virtual bool saveToResource(std::string resource_name, std::string resource_group_name)
virtual void loadFromDataStream(Ogre::DataStreamPtr datastream, BitMask_t options=0)
virtual void saveToDataStream(Ogre::DataStreamPtr datastream)
virtual bool loadFromResource(std::string resource_name, std::string resource_group_name, BitMask_t options=0)
static const BitMask_t OPTION_FIRST_LINE_IS_TITLE
First non-empty & non-comment line is a naked string with spaces.
static const BitMask_t OPTION_ALLOW_NAKED_STRINGS
Allow strings without quotes, for backwards compatibility.
static const BitMask_t OPTION_ALLOW_SEPARATOR_EQUALS
Allow '=' as separator between tokens.
std::vector< Token > tokens
static const BitMask_t OPTION_ALLOW_HASH_COMMENTS
Allow comments starting with #.
static const BitMask_t OPTION_ALLOW_BRACED_KEYWORDS
Allow INI-like '[keyword]' tokens.
static const BitMask_t OPTION_PARENTHESES_CAPTURE_SPACES
If non-empty NAKED string encounters '(', following spaces will be captured until matching ')' is fou...