download-manager.js: fix bug resulting in un-killable special buffers
[conkeror.git] / modules / keywords.js
blobff3886fce6349169d996c4ee256c31cad369c3c7
1 /**
2  * (C) Copyright 2007-2008 Jeremy Maitin-Shepard
3  *
4  * Use, modification, and distribution are subject to the terms specified in the
5  * COPYING file.
6 **/
8 function keyword_argument(name, value)
10     this.name = name;
11     this.value = value;
14 function keyword_argument_forwarder(args)
16     this.args = args;
19 function _get_keyword_argument_setter(name) {
20     return function (value) { return new keyword_argument(name, value); }
23 function _get_keyword_argument_getter(name) {
24     return function () { return new keyword_argument(name, true); }
27 // This function must be called with all string arguments, all of
28 // which must begin with "$".
29 function define_keywords()
31     for (var i = 0; i < arguments.length; ++i)
32     {
33         var name = arguments[i];
34         this.__defineSetter__(name, _get_keyword_argument_setter(name));
35         this.__defineGetter__(name, _get_keyword_argument_getter(name));
36     }
39 var define_keyword = define_keywords;
41 function forward_keywords(args)
43     return new keyword_argument_forwarder(args);
46 // This is called with a function's `arguments' variable.  Additional
47 // default values can also be specified as subsequent arguments.
48 function keywords(args)
50     /* First add our own arguments. */
51     for (var i = 1; i < arguments.length; ++i)
52     {
53         var arg = arguments[i];
54         args[arg.name] = arg.value;
55     }
56     function helper(in_args)
57     {
58         // Begin at the first "undeclared" argument
59         for (var i = in_args.callee.length; i < in_args.length; ++i)
60         {
61             var arg = in_args[i];
62             if (arg instanceof keyword_argument)
63                 args[arg.name] = arg.value;
64             else if (arg instanceof keyword_argument_forwarder)
65                 helper(arg.args);
66         }
67     }
68     helper(args);