[gambit-list] Printing unicode characters in Gambit

Marc Feeley feeley at iro.umontreal.ca
Sun Jun 26 08:43:17 EDT 2016


Indeed the use of the -:t8 runtime option avoids this problem by allowing all Unicode characters to be output to the terminal.  However, the REPL should not go into an infinite loop when it tries to display an error message containing a character beyond the highest character encodable by the terminal.

I found that the REPL’s implementation is using the idiom (##write-string (##object->string message) port) to output to the console the Scheme objects in error messages.  But ##object->string does not know the limits of the character encoding of the port and can produce an output string with characters that can’t be encoded by the port.  So I have added an argument to ##object->string to specify the character encoding limit and fixed the REPL’s implementation accordingly.  The REPL now behaves properly:

% gsi
Gambit v4.8.5

> (println #\u221E)
*** ERROR IN ##wr-ch -- Can't convert to C char-string
(write-char #\u221e '#<input-output-port #2 (console)>)
1> 

and

% gsi -:t8
Gambit v4.8.5

> (println #\u221E)
∞

Marc

> On Jun 26, 2016, at 3:12 AM, Vijay Mathew <vijay.the.lisper at gmail.com> wrote:
> 
> 
> ---------- Forwarded message ----------
> From: Vijay Mathew <vijay.the.lisper at gmail.com>
> Date: Sun, Jun 26, 2016 at 10:51 AM
> Subject: Re: [gambit-list] Printing unicode characters in Gambit
> To: Adam <adam.mlmb at gmail.com>
> 
> 
> Thanks Adam, will try what you suggested. But I really don't understand why a special switch is required to properly print Unicode characters. Even if the user is unaware of this, 'print' going into a loop is bad behavior.
> 
> --Vijay
> 
> 
> On Jun 26, 2016 8:26 AM, "Adam" <adam.mlmb at gmail.com> wrote:
> You need to switch on unicode output for the output medium (gsc -t8) and maybe also specify the maximum unicode character number that the writer will accept to write. Please report back when you figured.
> 
> 2016-06-26 10:34 GMT+08:00 Vijay Mathew <vijay.the.lisper at gmail.com>:
> How can I make gambit to print a Unicode character's symbol (or glyph)?
> For example, I want to display the Unicode infinity symbol ∞ (#\u221E).
> Calling `(display #\u221E)` or `(print #\u221E)` throws the REPL into an infinite loop.
> (This happens for most Unicode literals I tried, not just the infinity symbol :-))
> 
>       $ gsc
>       Gambit v4.8.4
> 
>> (print #\u221E)
> *** ERROR IN ##wr-ch -- Can't convert to C char-string
> (write-char #\*** ERROR IN ##wr-ch -- Can't convert to C char-string
> (write-char #\*** ERROR IN ##wr-ch -- Can't convert to C char-string
> (write-char #\*** ERROR IN ##wr-ch -- Can't convert to C char-string
> (write-char #\*** ERROR IN ##wr-ch -- Can't convert to C char-string
> 
> Thanks,
> 
> --- Vijay
> 
> 
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
> 
> 
> 
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list




More information about the Gambit-list mailing list