22@ {
33from collections import OrderedDict
44from rosidl_generator_c import escape_string
5+ from rosidl_generator_c import escape_utf8
56from rosidl_generator_c import idl_structure_type_to_c_include_prefix
67from rosidl_generator_c import type_hash_to_c_definition
78from rosidl_parser .definition import NamespacedType
@@ -23,14 +24,12 @@ def static_seq_n(varname, n):
2324def static_seq (varname, values):
2425 """ Statically define a runtime Sequence or String type."""
2526 if values :
26- return f' {{{varname}, {len(values)}, {len(values)}}}'
27+ if isinstance (values, str):
28+ return f' {{{varname}, {len(values.encode(' utf- 8 ' ))}, {len(values.encode(' utf- 8 ' ))}}}'
29+ else :
30+ return f' {{{varname}, {len(values)}, {len(values)}}}'
2731 return ' {NULL, 0, 0}'
2832
29- def utf8_encode (value_string):
30- from rosidl_generator_c import escape_string
31- # Slice removes the b'' from the representation.
32- return escape_string (repr (value_string .encode (' utf-8' ))[2 : - 1 ])
33-
3433implicit_type_names = set (td[' type_description' ][' type_name' ] for td, _ in implicit_type_descriptions)
3534includes = OrderedDict ()
3635toplevel_msg, _ = toplevel_type_description
@@ -98,7 +97,7 @@ ref_tds = msg['referenced_type_descriptions']
9897@ [ for field in itype_description[' fields' ]]@
9998static char @ (td_c_typename)__FIELD_NAME__@ (field[' name' ])[] = " @(field['name'])" ;
10099@ [ if field[' default_value' ]]@
101- static char @ (td_c_typename)__DEFAULT_VALUE__@ (field[' name' ])[] = " @(utf8_encode( field['default_value']))" ;
100+ static char @ (td_c_typename)__DEFAULT_VALUE__@ (field[' name' ])[] = " @(escape_utf8(escape_string( field['default_value']) ))" ;
102101@ [ end if ]@
103102@ [ end for ]@
104103
@@ -167,9 +166,9 @@ c_typename = typename_to_c(ref_td['type_name'])
167166@ [if raw_source_content]@
168167static char toplevel_type_raw_source[] = @
169168@ [ for line in raw_source_content .splitlines ()[: - 1 ]]
170- " @(utf8_encode( line))\n " @
169+ " @(escape_utf8(escape_string( line) ))\n " @
171170@ [ end for ]
172- " @(utf8_encode( raw_source_content.splitlines()[-1]))" ;
171+ " @(escape_utf8(escape_string( raw_source_content.splitlines()[-1]) ))" ;
173172@ [end if ]@
174173
175174static char @ (toplevel_encoding)_encoding[] = " @(toplevel_encoding)" ;
0 commit comments