mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 20:51:16 +00:00
fix: use C locale by default
This commit is contained in:

committed by
Jesse Beder

parent
1d8ca1f35e
commit
b95aa146ec
@@ -141,6 +141,7 @@ inline Emitter& Emitter::WriteIntegralType(T value) {
|
|||||||
PrepareNode(EmitterNodeType::Scalar);
|
PrepareNode(EmitterNodeType::Scalar);
|
||||||
|
|
||||||
std::stringstream stream;
|
std::stringstream stream;
|
||||||
|
stream.imbue(std::locale("C"));
|
||||||
PrepareIntegralStream(stream);
|
PrepareIntegralStream(stream);
|
||||||
stream << value;
|
stream << value;
|
||||||
m_stream << stream.str();
|
m_stream << stream.str();
|
||||||
@@ -158,6 +159,7 @@ inline Emitter& Emitter::WriteStreamable(T value) {
|
|||||||
PrepareNode(EmitterNodeType::Scalar);
|
PrepareNode(EmitterNodeType::Scalar);
|
||||||
|
|
||||||
std::stringstream stream;
|
std::stringstream stream;
|
||||||
|
stream.imbue(std::locale("C"));
|
||||||
SetStreamablePrecision<T>(stream);
|
SetStreamablePrecision<T>(stream);
|
||||||
|
|
||||||
bool special = false;
|
bool special = false;
|
||||||
|
@@ -171,6 +171,7 @@ ConvertStreamTo(std::stringstream& stream, T& rhs) {
|
|||||||
\
|
\
|
||||||
static Node encode(const type& rhs) { \
|
static Node encode(const type& rhs) { \
|
||||||
std::stringstream stream; \
|
std::stringstream stream; \
|
||||||
|
stream.imbue(std::locale("C")); \
|
||||||
stream.precision(std::numeric_limits<type>::max_digits10); \
|
stream.precision(std::numeric_limits<type>::max_digits10); \
|
||||||
conversion::inner_encode(rhs, stream); \
|
conversion::inner_encode(rhs, stream); \
|
||||||
return Node(stream.str()); \
|
return Node(stream.str()); \
|
||||||
@@ -182,6 +183,7 @@ ConvertStreamTo(std::stringstream& stream, T& rhs) {
|
|||||||
} \
|
} \
|
||||||
const std::string& input = node.Scalar(); \
|
const std::string& input = node.Scalar(); \
|
||||||
std::stringstream stream(input); \
|
std::stringstream stream(input); \
|
||||||
|
stream.imbue(std::locale("C")); \
|
||||||
stream.unsetf(std::ios::dec); \
|
stream.unsetf(std::ios::dec); \
|
||||||
if ((stream.peek() == '-') && std::is_unsigned<type>::value) { \
|
if ((stream.peek() == '-') && std::is_unsigned<type>::value) { \
|
||||||
return false; \
|
return false; \
|
||||||
|
@@ -121,6 +121,7 @@ template<typename Key, bool Streamable>
|
|||||||
struct streamable_to_string {
|
struct streamable_to_string {
|
||||||
static std::string impl(const Key& key) {
|
static std::string impl(const Key& key) {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
|
ss.imbue(std::locale("C"));
|
||||||
ss << key;
|
ss << key;
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
@@ -310,6 +310,7 @@ void node_data::convert_sequence_to_map(const shared_memory_holder& pMemory) {
|
|||||||
reset_map();
|
reset_map();
|
||||||
for (std::size_t i = 0; i < m_sequence.size(); i++) {
|
for (std::size_t i = 0; i < m_sequence.size(); i++) {
|
||||||
std::stringstream stream;
|
std::stringstream stream;
|
||||||
|
stream.imbue(std::locale("C"));
|
||||||
stream << i;
|
stream << i;
|
||||||
|
|
||||||
node& key = pMemory->create_node();
|
node& key = pMemory->create_node();
|
||||||
|
@@ -77,6 +77,7 @@ void Parser::HandleYamlDirective(const Token& token) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::stringstream str(token.params[0]);
|
std::stringstream str(token.params[0]);
|
||||||
|
str.imbue(std::locale("C"));
|
||||||
str >> m_pDirectives->version.major;
|
str >> m_pDirectives->version.major;
|
||||||
str.get();
|
str.get();
|
||||||
str >> m_pDirectives->version.minor;
|
str >> m_pDirectives->version.minor;
|
||||||
|
@@ -849,5 +849,17 @@ TEST_F(NodeEmitterTest, NestFlowMapListNode) {
|
|||||||
|
|
||||||
ExpectOutput("{position: [1.5, 2.25, 3.125]}", mapNode);
|
ExpectOutput("{position: [1.5, 2.25, 3.125]}", mapNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(NodeEmitterTest, RobustAgainstLocale) {
|
||||||
|
std::locale::global(std::locale(""));
|
||||||
|
Node node;
|
||||||
|
node.push_back(1.5);
|
||||||
|
node.push_back(2.25);
|
||||||
|
node.push_back(3.125);
|
||||||
|
node.push_back(123456789);
|
||||||
|
|
||||||
|
ExpectOutput("- 1.5\n- 2.25\n- 3.125\n- 123456789", node);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user