1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0022484: UNICODE characters support

Initial UNICODE (UFT-8) characters support for OCCT file operations

Fix for compilation errors and fix for StepFile (avoid objects in pure c code)

Fixes for set unicode symbols to OCAF and visualization
This commit is contained in:
pdn
2014-10-02 15:39:25 +04:00
committed by bugmaster
parent d3dfddaebc
commit d9ff84e8ea
34 changed files with 617 additions and 510 deletions

View File

@@ -49,48 +49,6 @@
#define TCL_USES_UTF8
#endif
//
// Auxiliary tool to convert strings in command arguments from UTF-8
// (Tcl internal encoding since Tcl 8.1) to system local encoding,
// normally extended Ascii as expected by OCC commands
//
class TclUTFToLocalStringSentry {
public:
#ifdef TCL_USES_UTF8
TclUTFToLocalStringSentry (int argc, const char **argv) :
nb(0),
TclArgv(new Tcl_DString[argc]),
Argv(new char*[argc])
{
for (; nb < argc; nb++ ) {
Tcl_UtfToExternalDString ( NULL, argv[nb], -1, &TclArgv[nb] );
Argv[nb] = Tcl_DStringValue ( &TclArgv[nb] );
}
}
~TclUTFToLocalStringSentry ()
{
delete[] Argv;
while ( nb-- >0 ) Tcl_DStringFree ( &TclArgv[nb] );
delete[] TclArgv;
}
#else
TclUTFToLocalStringSentry (int, const char **argv) :
nb(0),
TclArgv(NULL),
Argv((char**)argv)
{}
#endif
const char **GetArgv () const { return (const char **)Argv; }
private:
int nb;
Tcl_DString *TclArgv;
char **Argv;
};
// logging helpers
namespace {
void dumpArgs (Standard_OStream& os, int argc, const char *argv[])
@@ -217,10 +175,9 @@ static Standard_Integer CommandCmd
// get exception if control-break has been pressed
OSD::ControlBreak();
// OCC63: Convert strings from UTF-8 to local encoding, normally expected by OCC commands
TclUTFToLocalStringSentry anArgs ( argc, (const char**)argv );
// OCC680: Transfer UTF-8 directly to OCC commands without locale usage
Standard_Integer fres = aCallback->Invoke ( di, argc, anArgs.GetArgv() );
Standard_Integer fres = aCallback->Invoke ( di, argc, argv /*anArgs.GetArgv()*/ );
if (fres != 0)
code = TCL_ERROR;
}