+ fixes unicode support in expression engine

This commit is contained in:
wmayer 2015-09-24 13:10:54 +02:00
parent 12050b4c7d
commit 29c8e82dae
2 changed files with 15 additions and 1 deletions

View File

@ -172,6 +172,20 @@ PyObject* DocumentObjectPy::setExpression(PyObject * args)
getDocumentObjectPtr()->setExpression(p, shared_expr, comment);
}
else if (PyUnicode_Check(expr)) {
PyObject* unicode = PyUnicode_AsEncodedString(expr, "utf-8", 0);
if (unicode) {
std::string exprStr = PyString_AsString(unicode);
Py_DECREF(unicode);
boost::shared_ptr<Expression> shared_expr(ExpressionParser::parse(getDocumentObjectPtr(), exprStr.c_str()));
getDocumentObjectPtr()->setExpression(p, shared_expr, comment);
}
else {
// utf-8 encoding failed
return 0;
}
}
else
throw Py::TypeError("String or None expected.");
Py_Return;

View File

@ -112,7 +112,7 @@ bool ExpressionBinding::apply(const std::string & propName)
if (!docObj)
throw Base::Exception("Document object not found.");
Gui::Command::doCommand(Gui::Command::Doc,"App.getDocument('%s').%s.setExpression('%s', '%s')",
Gui::Command::doCommand(Gui::Command::Doc,"App.getDocument('%s').%s.setExpression('%s', u'%s')",
docObj->getDocument()->getName(),
docObj->getNameInDocument(),
path.toEscapedString().c_str(),