summaryrefslogtreecommitdiffstats
path: root/filter.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-10-22 13:44:38 -0400
committerKaz Kylheku <kaz@kylheku.com>2011-10-22 13:44:38 -0400
commit70a3b3ae47671a8a73ac517cd7c3f6a4bce782e5 (patch)
treeb0fbceca521bf6ba1fe381999f9239d69a598ee3 /filter.c
parent6729d88a6f8f5fc1ae4ea07b96a979bb6ca71ee8 (diff)
downloadtxr-70a3b3ae47671a8a73ac517cd7c3f6a4bce782e5.tar.gz
txr-70a3b3ae47671a8a73ac517cd7c3f6a4bce782e5.tar.bz2
txr-70a3b3ae47671a8a73ac517cd7c3f6a4bce782e5.zip
Task #11474
* filter.c (filter_equal): New function. (upcase_k, downcase_k): New keyword variables. (filter_init): New keyword variables initialized, and new upcase and downcase filters registered. * filter.h (filter_equal): Declared. * lib.c (tree_find): Takes new argument, the equality test function. (upcase_str, downcase_str): New functions. (do_curry_123_23): New static function. (curry_123_23): New function. * lib.h (tree_find): Declaration updated. (upcase_str, downcase_str, curry_123_23): Declared. * match.c (dest_bind): Updated to take equality function. Uses it and passes it down to tree_find. (v_bind): Filter feature implemented. (h_var, v_try): Add equal_f to dest_bind argument list. * txr.1: Updated to describe new filters and bind arguments.
Diffstat (limited to 'filter.c')
-rw-r--r--filter.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/filter.c b/filter.c
index e6940315..d5bdf262 100644
--- a/filter.c
+++ b/filter.c
@@ -212,6 +212,13 @@ val filter_string(val filter, val str)
uw_throwf(error_s, lit("filter_string: invalid filter ~a"), filter, nao);
}
+val filter_equal(val filter, val left, val right)
+{
+ if (stringp(left) && stringp(right))
+ return equal(filter_string(filter, left), filter_string(filter, right));
+ return equal(left, right);
+}
+
val register_filter(val sym, val table)
{
return sethash(filters, sym, build_filter_from_list(table));
@@ -540,6 +547,7 @@ static val html_numeric_handler(val ch)
val filters;
val filter_k, to_html_k, from_html_k;
+val upcase_k, downcase_k;
void filter_init(void)
{
@@ -549,6 +557,8 @@ void filter_init(void)
filter_k = intern(lit("filter"), keyword_package);
to_html_k = intern(lit("to_html"), keyword_package);
from_html_k = intern(lit("from_html"), keyword_package);
+ upcase_k = intern(lit("upcase"), keyword_package);
+ downcase_k = intern(lit("downcase"), keyword_package);
sethash(filters, to_html_k, build_filter(to_html_table, t));
{
val trie = build_filter(from_html_table, nil);
@@ -556,4 +566,6 @@ void filter_init(void)
trie_compress(&trie);
sethash(filters, from_html_k, trie);
}
+ sethash(filters, upcase_k, func_n1(upcase_str));
+ sethash(filters, downcase_k, func_n1(downcase_str));
}