Skip to content

Commit 4fb71f6

Browse files
committed
Fix escaped strings to match changes from ros2/rosidl#862
Signed-off-by: Anthony Welte <[email protected]>
1 parent 141a240 commit 4fb71f6

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

rosidlcpp_generator_c/resource/full__description.c.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ const rosidl_runtime_c__type_description__TypeDescription *
109109
{% if raw_source.content %}
110110
static char toplevel_type_raw_source[] =
111111
{% for line in span(raw_source.content, 0, length(raw_source.content) - 1) %}
112-
"{{ utf8_encode(escape_tab(line)) }}\n"
112+
"{{ utf8_encode(line) }}\n"
113113
{% endfor %}
114-
"{{ utf8_encode(escape_tab(last(raw_source.content))) }}";
114+
"{{ utf8_encode(last(raw_source.content)) }}";
115115
{% endif %}
116116

117117
static char {{ raw_source.encoding }}_encoding[] = "{{ raw_source.encoding }}";

rosidlcpp_generator_c/src/rosidlcpp_generator_c/rosidlcpp_generator_c.cpp

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -608,27 +608,16 @@ auto static_seq(const std::string& varname, const nlohmann::json& value) -> std:
608608

609609
auto utf8_encode(const std::string& value_string) -> std::string {
610610
std::string utf8_encoded;
611-
for (const auto& c : value_string) {
611+
for (const auto& c : rosidlcpp_core::escape_string(value_string)) {
612612
if (static_cast<unsigned char>(c) < 0x80) {
613613
utf8_encoded += c;
614614
} else {
615615
utf8_encoded += fmt::format("\\x{:02x}", static_cast<unsigned char>(c));
616616
}
617617
}
618-
return rosidlcpp_core::escape_string(utf8_encoded);
618+
return utf8_encoded;
619619
}
620620

621-
auto escape_tab(const std::string& value_string) -> std::string {
622-
std::string escaped_string;
623-
for (const auto& c : value_string) {
624-
if (c == '\t') {
625-
escaped_string += "\\t";
626-
} else {
627-
escaped_string += c;
628-
}
629-
}
630-
return escaped_string;
631-
}
632621
auto field_type_id_to_name(int field_type_id) -> std::string {
633622
return FIELD_TYPE_ID_TO_NAME.at(field_type_id);
634623
}
@@ -656,7 +645,6 @@ GeneratorC::GeneratorC(rosidlcpp_core::GeneratorArguments generator_arguments, b
656645
GENERATOR_BASE_REGISTER_FUNCTION("static_seq_n", 2, static_seq_n);
657646
GENERATOR_BASE_REGISTER_FUNCTION("static_seq", 2, static_seq);
658647
GENERATOR_BASE_REGISTER_FUNCTION("utf8_encode", 1, utf8_encode);
659-
GENERATOR_BASE_REGISTER_FUNCTION("escape_tab", 1, escape_tab);
660648
GENERATOR_BASE_REGISTER_FUNCTION("FIELD_TYPE_ID_TO_NAME", 1, field_type_id_to_name);
661649
}
662650

rosidlcpp_generator_py/src/rosidlcpp_generator_py/rosidlcpp_generator_py.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,17 +132,29 @@ auto get_imports(const nlohmann::json& members) -> nlohmann::json {
132132
return result;
133133
}
134134

135+
std::string escape_string_py(std::string_view str, char quote_char) {
136+
std::string result;
137+
for (const auto& c : str) {
138+
if (c == '\\') {
139+
result += "\\\\";
140+
} else if (c == quote_char) {
141+
result += std::format("\\{}", quote_char);
142+
} else {
143+
result += c;
144+
}
145+
}
146+
return result;
147+
}
148+
135149
auto primitive_value_to_py(nlohmann::json type, nlohmann::json value) -> std::string {
136150
assert(!value.is_null());
137151

138152
if (rosidlcpp_core::is_string(type)) {
139153
const auto string_value = value.get<std::string>();
140-
if (!string_value.contains('\'')) {
141-
return std::format("'{}'", string_value);
142-
} else if (!string_value.contains('"')) {
143-
return std::format("\"{}\"", string_value);
154+
if (!string_value.contains('\'') || string_value.contains('"')) {
155+
return std::format("'{}'", escape_string_py(string_value, '\''));
144156
} else {
145-
return std::format("'''{}'''", string_value);
157+
return std::format("\"{}\"", escape_string_py(string_value, '\"'));
146158
}
147159
}
148160

0 commit comments

Comments
 (0)