diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-12-07 09:01:26 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-12-07 09:01:26 -0800 |
commit | b3540d10efec1c3d27d0206d67635eaeb39141ec (patch) | |
tree | 19d302ab079edb0f744b5ca9feb11239038722c3 /lib.c | |
parent | b4d0fe33246175c0ac8e094ca46036444136a3be (diff) | |
download | txr-b3540d10efec1c3d27d0206d67635eaeb39141ec.tar.gz txr-b3540d10efec1c3d27d0206d67635eaeb39141ec.tar.bz2 txr-b3540d10efec1c3d27d0206d67635eaeb39141ec.zip |
* eval.c (eval_init): New character functions registered.
* lib.c (c_num): Generalized to convert characters to numbers also.
This allows functions like gt and lt to work with characters.
(chr_isalnum, chr_isalpha, chr_isascii, chr_iscntrl, chr_isdigit,
chr_isgraph, chr_islower, chr_isprint, chr_ispunct, chr_isspace,
chr_isupper, chr_isxdigit): New functions added.
* lib.h: (chr_isalnum, chr_isalpha, chr_isascii, chr_iscntrl,
* chr_isdigit, chr_isgraph, chr_islower, chr_isprint, chr_ispunct,
* chr_isspace, chr_isupper, chr_isxdigit): New functions declared.
(c_true): New macro.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 67 |
1 files changed, 65 insertions, 2 deletions
@@ -794,9 +794,12 @@ val num(cnum n) cnum c_num(val num) { - if (!is_num(num)) + switch (tag(num)) { + case TAG_CHR: case TAG_NUM: + return ((cnum) num) >> TAG_SHIFT; + default: type_mismatch(lit("~s is not a number"), num, nao); - return ((cnum) num) >> TAG_SHIFT; + } } val nump(val num) @@ -1465,6 +1468,66 @@ wchar_t c_chr(val chr) return (wchar_t) ((cnum) chr >> TAG_SHIFT); } +val chr_isalnum(val ch) +{ + return c_true(iswalnum(c_chr(ch))); +} + +val chr_isalpha(val ch) +{ + return c_true(iswalpha(c_chr(ch))); +} + +val chr_isascii(val ch) +{ + return c_true(c_chr(ch) >= 0 && c_chr(ch) < 128); +} + +val chr_iscntrl(val ch) +{ + return c_true(iswcntrl(c_chr(ch))); +} + +val chr_isdigit(val ch) +{ + return c_true(iswdigit(c_chr(ch))); +} + +val chr_isgraph(val ch) +{ + return c_true(iswgraph(c_chr(ch))); +} + +val chr_islower(val ch) +{ + return c_true(iswlower(c_chr(ch))); +} + +val chr_isprint(val ch) +{ + return c_true(iswprint(c_chr(ch))); +} + +val chr_ispunct(val ch) +{ + return c_true(iswpunct(c_chr(ch))); +} + +val chr_isspace(val ch) +{ + return c_true(iswspace(c_chr(ch))); +} + +val chr_isupper(val ch) +{ + return c_true(iswupper(c_chr(ch))); +} + +val chr_isxdigit(val ch) +{ + return c_true(iswxdigit(c_chr(ch))); +} + val chr_str(val str, val index) { bug_unless (length_str_gt(str, index)); |