summaryrefslogtreecommitdiffstats
path: root/filter.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-11-17 19:37:01 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-11-20 16:17:19 -0800
commite557d7bc37def93fb56196dd286b6a337fdfa0c4 (patch)
tree2358aebb110a3649e913e6f834cb4a478028a82b /filter.c
parent230b56a2da15cb6a7fb0855a78c81123d522cd61 (diff)
downloadtxr-e557d7bc37def93fb56196dd286b6a337fdfa0c4.tar.gz
txr-e557d7bc37def93fb56196dd286b6a337fdfa0c4.tar.bz2
txr-e557d7bc37def93fb56196dd286b6a337fdfa0c4.zip
New :to_html_relaxed filter and html-encode*.
* filter.c (to_html_relaxed_k): New keyword symbol variable. (to_html_relaxed_table): New static array. (html_encode_star): New static function. (filter_init): Initialize new symbol variable. Register new filter. Register html-encode* function. * txr.1: Documented :to_html_relaxed filter and html-encode* function.
Diffstat (limited to 'filter.c')
-rw-r--r--filter.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/filter.c b/filter.c
index d7812454..70e6cf87 100644
--- a/filter.c
+++ b/filter.c
@@ -45,6 +45,7 @@
val filters;
val filter_k, lfilt_k, rfilt_k, to_html_k, from_html_k;
+val to_html_relaxed_k;
val upcase_k, downcase_k;
val topercent_k, frompercent_k, tourl_k, fromurl_k;
val tonumber_k, toint_k, tofloat_k, hextoint_k;
@@ -284,6 +285,13 @@ static struct filter_pair to_html_table[] = {
{ 0, 0 }
};
+static struct filter_pair to_html_relaxed_table[] = {
+ { wli("<"), wli("&lt;") },
+ { wli(">"), wli("&gt;") },
+ { wli("&"), wli("&amp;") },
+ { 0, 0 }
+};
+
static struct filter_pair from_html_table[] = {
{ wli("&quot;"), wli("\"") },
{ wli("&amp;"), wli("&") },
@@ -675,6 +683,11 @@ static val html_encode(val str)
return trie_filter_string(get_filter(to_html_k), str);
}
+static val html_encode_star(val str)
+{
+ return trie_filter_string(get_filter(to_html_relaxed_k), str);
+}
+
static val html_decode(val str)
{
return trie_filter_string(get_filter(from_html_k), str);
@@ -689,6 +702,7 @@ void filter_init(void)
lfilt_k = intern(lit("lfilt"), keyword_package);
rfilt_k = intern(lit("rfilt"), keyword_package);
to_html_k = intern(lit("to_html"), keyword_package);
+ to_html_relaxed_k = intern(lit("to_html_relaxed"), 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);
@@ -702,6 +716,7 @@ void filter_init(void)
hextoint_k = intern(lit("hextoint"), keyword_package);
sethash(filters, to_html_k, build_filter(to_html_table, t));
+ sethash(filters, to_html_relaxed_k, build_filter(to_html_relaxed_table, t));
{
val trie = build_filter(from_html_table, nil);
trie_add(trie, lit("&#"), func_n1(html_numeric_handler));
@@ -731,5 +746,7 @@ void filter_init(void)
reg_fun(intern(lit("url-encode"), user_package), func_n2o(url_encode, 1));
reg_fun(intern(lit("url-decode"), user_package), func_n2o(url_decode, 1));
reg_fun(intern(lit("html-encode"), user_package), func_n1(html_encode));
+ reg_fun(intern(lit("html-encode*"), user_package),
+ func_n1(html_encode_star));
reg_fun(intern(lit("html-decode"), user_package), func_n1(html_decode));
}