summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-12-07 09:01:26 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-12-07 09:01:26 -0800
commitb3540d10efec1c3d27d0206d67635eaeb39141ec (patch)
tree19d302ab079edb0f744b5ca9feb11239038722c3 /lib.c
parentb4d0fe33246175c0ac8e094ca46036444136a3be (diff)
downloadtxr-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.c67
1 files changed, 65 insertions, 2 deletions
diff --git a/lib.c b/lib.c
index 672efa4a..82ab73a1 100644
--- a/lib.c
+++ b/lib.c
@@ -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));