From: ludo@gnu.org (Ludovic Courtès)
To: "Michael Gran" <spk121@yahoo.com>
Cc: guile-devel@gnu.org
Subject: Re: [Guile-commits] GNU Guile branch, master, updated. release_1-9-1-18-g904a78f
Date: Fri, 31 Jul 2009 01:21:47 +0200 [thread overview]
Message-ID: <87fxcd92pg.fsf@gnu.org> (raw)
In-Reply-To: <E1MW9af-0007pM-IW@cvs.savannah.gnu.org> (Michael Gran's message of "Wed, 29 Jul 2009 13:53:09 +0000")
"Michael Gran" <spk121@yahoo.com> writes:
> commit 904a78f11d2d11a58d5df365a44c4fbbd4c96df3
> Author: Michael Gran <spk121@yahoo.com>
> Date: Wed Jul 29 06:38:32 2009 -0700
>
> Add 32-bit characters
>
> This adds the 32-bit standalone characters. Strings are still
> 8-bit. Characters larger than 8-bit can only be entered or
> displayed in octal format at this point. At this point, the
> terminal's display encoding is expected to be Latin-1.
It looks like Unicode is approaching, good news! :-)
My remark about user-visibility was actually regarding this commit, not
the previous one.
> +#ifndef SCM_WCHAR_DEFINED
> +typedef scm_t_int32 scm_t_wchar;
> +#define SCM_WCHAR_DEFINED
> +#endif
Why is this #ifdef hack needed?
> +#define SCM_CHAR(x) ((scm_t_wchar)SCM_ITAG8_DATA(x))
Please, use GCS style.
> +#define SCM_MAKE_CHAR(x) ({scm_t_int32 _x = (x); \
> + _x < 0 \
> + ? SCM_MAKE_ITAG8((scm_t_bits)(unsigned char)_x, scm_tc8_char) \
> + : SCM_MAKE_ITAG8((scm_t_bits)_x, scm_tc8_char);})
This macro uses a GCC extension, which is not acceptable for Guile. Can
you please rewrite it in standard C? (The only risk is multiple
expansion of X, but that's OK.)
Does X < 0 mean ASCII? And why is it truncated to 8 bits? A comment
just above indicating the encoding trick would be handy IMO.
(And style isn't OK.)
> +#define SCM_CODEPOINT_MAX (0x10ffff)
> +#define SCM_IS_UNICODE_CHAR(c) \
> + ((scm_t_wchar)(c)<=0xd7ff || \
> + ((scm_t_wchar)(c)>=0xe000 && (scm_t_wchar)(c)<=SCM_CODEPOINT_MAX))
Style.
> + if (i<256)
> + {
> + /* Character is graphic. Print it. */
> + scm_putc (i, port);
> + }
Style (extraneous braces).
> +VM_DEFINE_INSTRUCTION (42, make_char32, "make-char32", 4, 0, 1)
> +{
> + scm_t_wchar v = 0;
> + v += FETCH ();
> + v <<= 8; v += FETCH ();
> + v <<= 8; v += FETCH ();
> + v <<= 8; v += FETCH ();
> + PUSH (SCM_MAKE_CHAR (v));
> + NEXT;
> +}
The doc will need to be augmented.
> + ((char? x)
> + (cond ((<= (char->integer x) #xff)
> + `(make-char8 ,(char->integer x)))
> + (else
> + `(make-char32 ,(char->integer x)))))
Sounds cool! :-)
Thanks,
Ludo'.
next parent reply other threads:[~2009-07-30 23:21 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <E1MW9af-0007pM-IW@cvs.savannah.gnu.org>
2009-07-30 23:21 ` Ludovic Courtès [this message]
2009-08-01 17:58 ` [Guile-commits] GNU Guile branch, master, updated. release_1-9-1-18-g904a78f Mike Gran
2009-08-04 16:11 ` Andy Wingo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fxcd92pg.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=guile-devel@gnu.org \
--cc=spk121@yahoo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).