26 PopulateStringTable();
27 return strings.find(
text) != strings.end();
33 PopulateStringTable();
34 Table::const_iterator it = strings.find(
text);
35 if (it == strings.end())
42 void C4LangStringTable::PopulateStringTable()
const
44 assert(strings.empty());
47 std::string key, value;
54 enum { PSTS_Key, PSTS_Val } state = PSTS_Key;
57 if (state == PSTS_Key)
63 else if (*data ==
'\0' || *data ==
'\n' || *data ==
'\r')
65 if (!key.empty() && key[0]!=
'#')
76 if (*data ==
'\0' || *data ==
'\n' || *data ==
'\r')
78 strings.insert(std::make_pair(key, value));
79 key.clear(); value.clear();
84 value.push_back(*data);
102 struct RP {
const char *Pos; std::string
String;
unsigned int Len; RP *Next; } *pRPList =
nullptr, *pRPListEnd =
nullptr;
108 if (*(pPos-1) !=
'$')
continue;
110 const char *pPos2 = szStringName;
114 if (*pPos2)
continue;
119 std::string pStrTblEntry =
Translate(szStringName);
122 pnRP->Pos = pPos -
SLen(szStringName) - 2;
123 pnRP->String = pStrTblEntry;
124 pnRP->Len =
SLen(szStringName) + 2;
125 pnRP->Next =
nullptr;
126 pRPListEnd = (pRPListEnd ? pRPListEnd->Next : pRPList) = pnRP;
128 iScriptLen += pStrTblEntry.size() - pnRP->Len;
141 const char *pRPos =
Data;
char *pWPos = pNewBuf;
142 for (RP *pRPPos = pRPList; pRPPos; pRPPos = pRPPos->Next)
145 SCopy(pRPos, pWPos, pRPPos->Pos - pRPos);
146 pWPos += pRPPos->Pos - pRPos;
148 SCopyUntil(pRPPos->String.c_str(), pWPos,
'\n');
151 pRPos = pRPPos->Pos + pRPPos->Len;
152 pWPos +=
SLen(pWPos);
165 rTarget.
Take(std::move(sNewBuf));
C4String * String(const char *str)
bool LogF(const char *strMessage,...)
void SReplaceChar(char *str, char fc, char tc)
const char * SSearch(const char *szString, const char *szIndex)
bool IsIdentifier(char cChar)
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
void SCopyUntil(const char *szSource, char *sTarget, char cUntil, int iMaxL, int iIndex)
size_t SLen(const char *sptr)
const char * GetData() const
const char * GetFilePath() const
const std::string & Translate(const std::string &text) const
bool HasTranslation(const std::string &text) const
void ReplaceStrings(StdStrBuf &rBuf)
void SetLength(size_t iLength)
const char * getData() const