2
2
@ {
3
3
from collections import OrderedDict
4
4
from rosidl_generator_c import escape_string
5
+ from rosidl_generator_c import escape_utf8
5
6
from rosidl_generator_c import idl_structure_type_to_c_include_prefix
6
7
from rosidl_generator_c import type_hash_to_c_definition
7
8
from rosidl_parser .definition import NamespacedType
@@ -23,14 +24,13 @@ def static_seq_n(varname, n):
23
24
def static_seq (varname, values):
24
25
""" Statically define a runtime Sequence or String type."""
25
26
if values :
26
- return f' {{{varname}, {len(values)}, {len(values)}}}'
27
+ if isinstance (values, str):
28
+ utf8_values = values .encode (' utf-8' )
29
+ return f' {{{varname}, {len(utf8_values)}, {len(utf8_values)}}}'
30
+ else :
31
+ return f' {{{varname}, {len(values)}, {len(values)}}}'
27
32
return ' {NULL, 0, 0}'
28
33
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
-
34
34
implicit_type_names = set (td[' type_description' ][' type_name' ] for td, _ in implicit_type_descriptions)
35
35
includes = OrderedDict ()
36
36
toplevel_msg, _ = toplevel_type_description
@@ -98,7 +98,7 @@ ref_tds = msg['referenced_type_descriptions']
98
98
@ [ for field in itype_description[' fields' ]]@
99
99
static char @ (td_c_typename)__FIELD_NAME__@ (field[' name' ])[] = " @(field['name'])" ;
100
100
@ [ if field[' default_value' ]]@
101
- static char @ (td_c_typename)__DEFAULT_VALUE__@ (field[' name' ])[] = " @(utf8_encode( field['default_value']))" ;
101
+ static char @ (td_c_typename)__DEFAULT_VALUE__@ (field[' name' ])[] = " @(escape_utf8(escape_string( field['default_value']) ))" ;
102
102
@ [ end if ]@
103
103
@ [ end for ]@
104
104
@@ -167,9 +167,9 @@ c_typename = typename_to_c(ref_td['type_name'])
167
167
@ [if raw_source_content]@
168
168
static char toplevel_type_raw_source[] = @
169
169
@ [ for line in raw_source_content .splitlines ()[: - 1 ]]
170
- " @(utf8_encode( line))\n " @
170
+ " @(escape_utf8(escape_string( line) ))\n " @
171
171
@ [ end for ]
172
- " @(utf8_encode( raw_source_content.splitlines()[-1]))" ;
172
+ " @(escape_utf8(escape_string( raw_source_content.splitlines()[-1]) ))" ;
173
173
@ [end if ]@
174
174
175
175
static char @ (toplevel_encoding)_encoding[] = " @(toplevel_encoding)" ;
0 commit comments