1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-22 03:40:49 +00:00

Merged merge request !33

This commit is contained in:
Marc Zinnschlag 2018-08-18 12:08:05 +02:00
commit dc9aedca7d
5 changed files with 47 additions and 10 deletions

View File

@ -557,7 +557,7 @@ namespace Compiler
mExplicit.clear();
}
void GetArgumentsFromMessageFormat::visitedPlaceholder(Placeholder placeholder, char /*padding*/, int /*width*/, int /*precision*/)
void GetArgumentsFromMessageFormat::visitedPlaceholder(Placeholder placeholder, char /*padding*/, int /*width*/, int /*precision*/, Notation /*notation*/)
{
switch (placeholder)
{

View File

@ -83,7 +83,7 @@ namespace Compiler
std::string mArguments;
protected:
virtual void visitedPlaceholder(Placeholder placeholder, char padding, int width, int precision);
virtual void visitedPlaceholder(Placeholder placeholder, char padding, int width, int precision, Notation notation);
virtual void visitedCharacter(char c) {}
public:

View File

@ -24,7 +24,7 @@ namespace Interpreter
Runtime& mRuntime;
protected:
virtual void visitedPlaceholder(Placeholder placeholder, char padding, int width, int precision)
virtual void visitedPlaceholder(Placeholder placeholder, char padding, int width, int precision, Notation notation)
{
std::ostringstream out;
out.fill(padding);
@ -58,8 +58,34 @@ namespace Interpreter
float value = mRuntime[0].mFloat;
mRuntime.pop();
out << std::fixed << value;
mFormattedMessage += out.str();
if (notation == FixedNotation)
{
out << std::fixed << value;
mFormattedMessage += out.str();
}
else if (notation == ShortestNotation)
{
std::string scientific;
std::string fixed;
out << std::scientific << value;
scientific = out.str();
out.str(std::string());
out.clear();
out << std::fixed << value;
fixed = out.str();
mFormattedMessage += fixed.length() < scientific.length() ? fixed : scientific;
}
else
{
out << std::scientific << value;
mFormattedMessage += out.str();
}
}
break;
default:

View File

@ -49,11 +49,15 @@ namespace Misc
width = (widthSet) ? width : -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);
visitedPlaceholder(StringPlaceholder, pad, width, precision, FixedNotation);
else if (m[i] == 'd' || m[i] == 'i')
visitedPlaceholder(IntegerPlaceholder, pad, width, precision, FixedNotation);
else if (m[i] == 'f' || m[i] == 'F')
visitedPlaceholder(FloatPlaceholder, pad, width, precision);
visitedPlaceholder(FloatPlaceholder, pad, width, precision, FixedNotation);
else if (m[i] == 'e' || m[i] == 'E')
visitedPlaceholder(FloatPlaceholder, pad, width, precision, ScientificNotation);
else if (m[i] == 'g' || m[i] == 'G')
visitedPlaceholder(FloatPlaceholder, pad, width, precision, ShortestNotation);
}
}
}

View File

@ -15,7 +15,14 @@ namespace Misc
FloatPlaceholder
};
virtual void visitedPlaceholder(Placeholder placeholder, char padding, int width, int precision) = 0;
enum Notation
{
FixedNotation,
ScientificNotation,
ShortestNotation
};
virtual void visitedPlaceholder(Placeholder placeholder, char padding, int width, int precision, Notation notation) = 0;
virtual void visitedCharacter(char c) = 0;
public: