mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 23:50:19 +02:00
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. * module/language/assembly/compile-bytecode.scm (write-bytecode): add 32-bit char * module/language/assembly.scm (object->assembly): add 32-bit char (assembly->object): add 32-bit char * libguile/vm-i-system.c (make-char32): new op * libguile/print.c (iprin1): print 32-bit char * libguile/numbers.h: add type scm_t_wchar * libguile/numbers.c: add type scm_t_wchar * libguile/chars.h: new type scm_t_wchar (SCM_CODEPOINT_MAX): new (SCM_IS_UNICODE_CHAR): new (SCM_MAKE_CHAR): operate on 32-bit char * libguile/chars.c: comparison operators now use Unicode codepoints (scm_c_upcase): now receives and returns scm_t_wchar (scm_c_downcase): now receives and returns scm_t_wchar
This commit is contained in:
parent
77332b21a0
commit
904a78f11d
8 changed files with 126 additions and 43 deletions
|
@ -23,6 +23,7 @@
|
|||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#include <unictype.h>
|
||||
|
||||
#include "libguile/_scm.h"
|
||||
#include "libguile/chars.h"
|
||||
|
@ -436,7 +437,7 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
|
|||
case scm_tc3_imm24:
|
||||
if (SCM_CHARP (exp))
|
||||
{
|
||||
long i = SCM_CHAR (exp);
|
||||
scm_t_wchar i = SCM_CHAR (exp);
|
||||
const char *name;
|
||||
|
||||
if (SCM_WRITINGP (pstate))
|
||||
|
@ -445,10 +446,30 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
|
|||
name = scm_i_charname (exp);
|
||||
if (name != NULL)
|
||||
scm_puts (name, port);
|
||||
else if (i < 0 || i > '\177')
|
||||
scm_intprint (i, 8, port);
|
||||
else
|
||||
scm_putc (i, port);
|
||||
else if (uc_is_general_category_withtable (i, UC_CATEGORY_MASK_L
|
||||
| UC_CATEGORY_MASK_M
|
||||
| UC_CATEGORY_MASK_N
|
||||
| UC_CATEGORY_MASK_P
|
||||
| UC_CATEGORY_MASK_S))
|
||||
/* Print the character if is graphic character. */
|
||||
{
|
||||
if (i<256)
|
||||
{
|
||||
/* Character is graphic. Print it. */
|
||||
scm_putc (i, port);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Character is graphic but unrepresentable in
|
||||
this port's encoding. */
|
||||
scm_intprint (i, 8, port);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Character is a non-graphical character. */
|
||||
scm_intprint (i, 8, port);
|
||||
}
|
||||
}
|
||||
else
|
||||
scm_putc (i, port);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue