forked from teamnwah/openmw-tes3coop
Improve format specifiers for message boxes
parent
6f376bd499
commit
f6f3f71db5
@ -0,0 +1,68 @@
|
|||||||
|
#include "messageformatparser.hpp"
|
||||||
|
|
||||||
|
namespace Misc
|
||||||
|
{
|
||||||
|
void MessageFormatParser::process(const std::string& m)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < m.size(); ++i)
|
||||||
|
{
|
||||||
|
if (m[i] == '%')
|
||||||
|
{
|
||||||
|
if (++i < m.size())
|
||||||
|
{
|
||||||
|
if (m[i] == '%')
|
||||||
|
visitedCharacter('%');
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char pad = ' ';
|
||||||
|
if (m[i] == '0' || m[i] == ' ')
|
||||||
|
{
|
||||||
|
pad = m[i];
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
int width = 0;
|
||||||
|
bool widthSet = false;
|
||||||
|
while (i < m.size() && m[i] >= '0' && m[i] <= '9')
|
||||||
|
{
|
||||||
|
width = width * 10 + (m[i] - '0');
|
||||||
|
widthSet = true;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i < m.size())
|
||||||
|
{
|
||||||
|
int precision = 0;
|
||||||
|
bool precisionSet = false;
|
||||||
|
if (m[i] == '.')
|
||||||
|
{
|
||||||
|
while (++i < m.size() && m[i] >= '0' && m[i] <= '9')
|
||||||
|
{
|
||||||
|
precision = precision * 10 + (m[i] - '0');
|
||||||
|
precisionSet = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i < m.size())
|
||||||
|
{
|
||||||
|
width = (widthSet) ? width : -1;
|
||||||
|
precision = (precisionSet) ? precision : -1;
|
||||||
|
|
||||||
|
if (m[i] == 'S' || m[i] == 's')
|
||||||
|
visitedPlaceholder(StringPlaceholder, pad, width, precision);
|
||||||
|
else if (m[i] == 'g' || m[i] == 'G')
|
||||||
|
visitedPlaceholder(IntegerPlaceholder, pad, width, precision);
|
||||||
|
else if (m[i] == 'f' || m[i] == 'F')
|
||||||
|
visitedPlaceholder(FloatPlaceholder, pad, width, precision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
visitedCharacter(m[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef OPENMW_COMPONENTS_MISC_MESSAGEFORMATPARSER_H
|
||||||
|
#define OPENMW_COMPONENTS_MISC_MESSAGEFORMATPARSER_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Misc
|
||||||
|
{
|
||||||
|
class MessageFormatParser
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
enum Placeholder
|
||||||
|
{
|
||||||
|
StringPlaceholder,
|
||||||
|
IntegerPlaceholder,
|
||||||
|
FloatPlaceholder
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void visitedPlaceholder(Placeholder placeholder, char padding, int width, int precision) = 0;
|
||||||
|
virtual void visitedCharacter(char c) = 0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void process(const std::string& message);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue