Glib::ustring mapping fails with non ascii-7 characters
This commit is contained in:
1 parent
f9d39f961a
commit
692698b0a7
1 file changed
+23
-30
@@ -237,22 +237,20 @@ class GlibStringParam(Parameter):
|
||||
wrapper.before_call.write_code(
|
||||
"%s = (%s).c_str();" % (ptr, self.value))
|
||||
wrapper.before_call.write_code(
|
||||
"%s = (%s).size();" % (len_, self.value))
|
||||
"%s = (%s).bytes();" % (len_, self.value))
|
||||
wrapper.build_params.add_parameter('s#', [ptr, len_])
|
||||
|
||||
def convert_python_to_c(self, wrapper):
|
||||
assert isinstance(wrapper, ForwardWrapperBase)
|
||||
if self.default_value is None:
|
||||
name = wrapper.declarations.declare_variable("const char *", self.name)
|
||||
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
|
||||
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value)
|
||||
wrapper.call_params.append('Glib::ustring(%s, %s)' % (name, name_len))
|
||||
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value)
|
||||
wrapper.call_params.append('Glib::ustring(%s)' % (name))
|
||||
else:
|
||||
name = wrapper.declarations.declare_variable("const char *", self.name, 'NULL')
|
||||
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
|
||||
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value, optional=True)
|
||||
wrapper.call_params.append('(%s ? Glib::ustring(%s, %s) : %s)'
|
||||
% (name, name, name_len, self.default_value))
|
||||
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value, optional=True)
|
||||
wrapper.call_params.append('(%s ? Glib::ustring(%s) : %s)'
|
||||
% (name, name, self.default_value))
|
||||
|
||||
|
||||
class GlibStringRefParam(Parameter):
|
||||
@@ -272,31 +270,29 @@ class GlibStringRefParam(Parameter):
|
||||
wrapper.before_call.write_code(
|
||||
"%s = (%s).c_str();" % (ptr, self.value))
|
||||
wrapper.before_call.write_code(
|
||||
"%s = (%s).size();" % (len_, self.value))
|
||||
"%s = (%s).bytes();" % (len_, self.value))
|
||||
wrapper.build_params.add_parameter('s#', [ptr, len_])
|
||||
|
||||
if self.direction & Parameter.DIRECTION_OUT:
|
||||
if ptr is None:
|
||||
ptr = wrapper.declarations.declare_variable("const char *", self.name + "_ptr")
|
||||
len_ = wrapper.declarations.declare_variable("Py_ssize_t", self.name + "_len")
|
||||
wrapper.parse_params.add_parameter("s#", ['&'+ptr, '&'+len_], self.value)
|
||||
wrapper.parse_params.add_parameter("et", ['"utf-8"', '&'+ptr], self.value)
|
||||
wrapper.after_call.write_code(
|
||||
"%s = Glib::ustring(%s, %s);" % (self.value, ptr, len_))
|
||||
"%s = Glib::ustring(%s);" % (self.value, ptr))
|
||||
|
||||
def convert_python_to_c(self, wrapper):
|
||||
assert isinstance(wrapper, ForwardWrapperBase)
|
||||
name = wrapper.declarations.declare_variable("const char *", self.name)
|
||||
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
|
||||
name_std = wrapper.declarations.declare_variable("Glib::ustring", self.name + '_std')
|
||||
wrapper.call_params.append(name_std)
|
||||
|
||||
if self.direction & Parameter.DIRECTION_IN:
|
||||
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value)
|
||||
wrapper.before_call.write_code('%s = Glib::ustring(%s, %s);' %
|
||||
(name_std, name, name_len))
|
||||
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value)
|
||||
wrapper.before_call.write_code('%s = Glib::ustring(%s);' %
|
||||
(name_std, name))
|
||||
|
||||
if self.direction & Parameter.DIRECTION_OUT:
|
||||
wrapper.build_params.add_parameter("s#", ['('+name_std+').c_str()', '('+name_std+').size()'])
|
||||
wrapper.build_params.add_parameter("s#", ['('+name_std+').c_str()', '('+name_std+').bytes()'])
|
||||
|
||||
|
||||
class GlibStringPtrParam(PointerParameter):
|
||||
@@ -315,16 +311,15 @@ class GlibStringPtrParam(PointerParameter):
|
||||
wrapper.before_call.write_code(
|
||||
"%s = %s->c_str();" % (ptr, self.value))
|
||||
wrapper.before_call.write_code(
|
||||
"%s = %s->size();" % (len_, self.value))
|
||||
"%s = %s->bytes();" % (len_, self.value))
|
||||
wrapper.build_params.add_parameter('s#', [ptr, len_])
|
||||
|
||||
if self.direction & Parameter.DIRECTION_OUT:
|
||||
if ptr is None:
|
||||
ptr = wrapper.declarations.declare_variable("const char *", self.name + "_ptr")
|
||||
len_ = wrapper.declarations.declare_variable("Py_ssize_t", self.name + "_len")
|
||||
wrapper.parse_params.add_parameter("s#", ['&'+ptr, '&'+len_], self.value)
|
||||
wrapper.parse_params.add_parameter("et", ['"utf-8"', '&'+ptr], self.value)
|
||||
wrapper.after_call.write_code(
|
||||
"*%s = Glib::ustring(%s, %s);" % (self.value, ptr, len_))
|
||||
"*%s = Glib::ustring(%s);" % (self.value, ptr))
|
||||
if self.transfer_ownership:
|
||||
wrapper.after_call.write_code("delete %s;" % (self.value,))
|
||||
|
||||
@@ -333,7 +328,6 @@ class GlibStringPtrParam(PointerParameter):
|
||||
assert isinstance(wrapper, ForwardWrapperBase)
|
||||
assert self.default_value is None, "default_value not implemented yet"
|
||||
name = wrapper.declarations.declare_variable("const char *", self.name)
|
||||
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
|
||||
if self.transfer_ownership:
|
||||
name_std = wrapper.declarations.declare_variable("Glib::ustring*", self.name + '_std', 'new Glib::ustring')
|
||||
wrapper.call_params.append('%s' % name_std)
|
||||
@@ -344,12 +338,12 @@ class GlibStringPtrParam(PointerParameter):
|
||||
name_std_value = name_std
|
||||
|
||||
if self.direction & Parameter.DIRECTION_IN:
|
||||
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value)
|
||||
wrapper.before_call.write_code('%s = Glib::ustring(%s, %s);' %
|
||||
(name_std_value, name, name_len))
|
||||
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value)
|
||||
wrapper.before_call.write_code('%s = Glib::ustring(%s);' %
|
||||
(name_std_value, name))
|
||||
|
||||
if self.direction & Parameter.DIRECTION_OUT:
|
||||
wrapper.build_params.add_parameter("s#", ['('+name_std_value+').c_str()', '('+name_std_value+').size()'])
|
||||
wrapper.build_params.add_parameter("s#", ['('+name_std_value+').c_str()', '('+name_std_value+').bytes()'])
|
||||
|
||||
|
||||
class GlibStringReturn(ReturnValue):
|
||||
@@ -361,13 +355,12 @@ class GlibStringReturn(ReturnValue):
|
||||
|
||||
def convert_python_to_c(self, wrapper):
|
||||
ptr = wrapper.declarations.declare_variable("const char *", "retval_ptr")
|
||||
len_ = wrapper.declarations.declare_variable("Py_ssize_t", "retval_len")
|
||||
wrapper.parse_params.add_parameter("s#", ['&'+ptr, '&'+len_])
|
||||
wrapper.parse_params.add_parameter("et", ['"utf-8"', '&'+ptr])
|
||||
wrapper.after_call.write_code(
|
||||
"%s = Glib::ustring(%s, %s);" % (self.value, ptr, len_))
|
||||
"%s = Glib::ustring(%s);" % (self.value, ptr))
|
||||
|
||||
def convert_c_to_python(self, wrapper):
|
||||
wrapper.build_params.add_parameter("s#", ['(%s).c_str()' % self.value,
|
||||
'(%s).size()' % self.value],
|
||||
'(%s).bytes()' % self.value],
|
||||
prepend=True)
|
||||
|
||||
Reference in new issue
Block a user