[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [rkward] rkward/rbackend: Revert most of 2d6d7f2c95531df17699b51a61f3024e9b8e123a and use a differen
From:       Thomas Friedrichsmeier <thomas.friedrichsmeier () ruhr-uni-bochum ! de>
Date:       2016-07-04 10:32:11
Message-ID: E1bK1Ah-0001sv-K7 () code ! kde ! org
[Download RAW message or body]

Git commit 47f09cf2c7dce00ec6dbd53869c53fe319586f37 by Thomas Friedrichsmeier.
Committed on 04/07/2016 at 10:29.
Pushed by tfry into branch 'master'.

Revert most of 2d6d7f2c95531df17699b51a61f3024e9b8e123a and use a different encoder, \
instead.

Problem with previous attempt was that R would understand the command was given in \
UTF8, but would not be smart enough to flag resulting strings as UTF8-encoded. This \
fix instead simply uses an encoder that will turn - e.g. - "รค" into "\303\244", \
instead of "".

M  +5    -4    rkward/rbackend/rkrbackend.cpp

http://commits.kde.org/rkward/47f09cf2c7dce00ec6dbd53869c53fe319586f37

diff --git a/rkward/rbackend/rkrbackend.cpp b/rkward/rbackend/rkrbackend.cpp
index a4f09e2..9550ed1 100644
--- a/rkward/rbackend/rkrbackend.cpp
+++ b/rkward/rbackend/rkrbackend.cpp
@@ -307,8 +307,6 @@ int RReadConsole (const char* prompt, unsigned char* buf, int \
buflen, int hist)  RKRBackend::repl_status.user_command_completely_transmitted = \
false;  RKRBackend::repl_status.user_command_parsed_up_to = 0;
 					RKRBackend::repl_status.user_command_successful_up_to = 0;
-					// TODO FIXME: This is a problem when sending characters which are not \
encodable in R's current locale. I wish we could simply tell R that the input is UTF8 \
                (as we do in parseCommand()).
-					// Or is there? Alternatively, perhaps we can somehow hack-in UTF8 character \
                positions?
 					RKRBackend::repl_status.user_command_buffer = \
RKRBackend::this_pointer->current_locale_codec->fromUnicode (command->command);  \
                RKTransmitNextUserCommandChunk (buf, buflen);
 					RKRBackend::repl_status.user_command_status = \
RKRBackend::RKReplStatus::UserCommandTransmitted; @@ -1029,6 +1027,9 @@ bool \
RKRBackend::startR () {  
 	RKSignalSupport::installSignalProxies ();	// for the crash signals
 	RKSignalSupport::installSigIntAndUsrHandlers (RK_scheduleIntr);
+	RKRBackend::this_pointer->current_locale_codec = RKGetCurrentLocaleCodec ();  // \
Ok, why is this needed? Beats me (mostly), but the result is different form \
codecForLocale() used in initialization: +	                                           \
// This one will turn non-representable characters into unicode numbers, the other \
one will just strip them... +	                                                        \
// KF5 TODO: Use makeEncoder() and makeDecoder() to get defined behavior on this  
 // register our functions
 	R_CallMethodDef callMethods [] = {
@@ -1135,11 +1136,11 @@ SEXP parseCommand (const QString &command_qstring, \
RKRBackend::RKWardRError *err  SafeParseWrap wrap;
 	wrap.status = PARSE_NULL;
 
-	QByteArray localc = command_qstring.toUtf8 (); // needed so the string below does \
not go out of scope +	QByteArray localc = \
RKRBackend::this_pointer->current_locale_codec->fromUnicode (command_qstring); // \
needed so the string below does not go out of scope  const char *command = \
localc.data ();  
 	PROTECT(wrap.cv=Rf_allocVector(STRSXP, 1));
-	SET_STRING_ELT(wrap.cv, 0, Rf_mkCharCE(command, CE_UTF8));
+	SET_STRING_ELT(wrap.cv, 0, Rf_mkChar(command));
 
 	// Yes, if there is an error in the parse, R does jump back to toplevel!
 	// trying to parse list(""=1) is an example in R 3.1.1


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic