From 1de2a7dd87744dd7a14ce67081b32b7920c345e7 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 21 Oct 2011 00:30:19 -0400 Subject: * lib.c (proper_plist_to_alist, improper_plist_to_alist): New functions. * lib.h (proper_plist_to_alist, improper_plist_to_alist): New functions declared. * match.c (append_k): New keyword symbol variable. (complex_open): New append argument. (v_output): Streamlined parsing of keywords. Support :append keyword. * txr.1: Output directive's keyword documentation revised. --- lib.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'lib.c') diff --git a/lib.c b/lib.c index e490228c..91e958b8 100644 --- a/lib.c +++ b/lib.c @@ -661,6 +661,38 @@ val getplist(val list, val key) return nil; } +val proper_plist_to_alist(val list) +{ + list_collect_decl (out, tail); + + for (; list; list = cdr(cdr(list))) { + val ind = first(list); + val prop = second(list); + list_collect (tail, cons(ind, prop)); + } + + return out; +} + +val improper_plist_to_alist(val list, val boolean_keys) +{ + list_collect_decl (out, tail); + + for (; list; list = cdr(list)) { + val ind = first(list); + + if (memqual(ind, boolean_keys)) { + list_collect (tail, cons(ind, t)); + } else { + val prop = second(list); + list_collect (tail, cons(ind, prop)); + list = cdr(list); + } + } + + return out; +} + val num(cnum n) { numeric_assert (n >= NUM_MIN && n <= NUM_MAX); -- cgit v1.2.3