84af181997-11-14Per Hedbor /* This is a Roxen Challenger(r) module. Copyright (c) Idonex 1997. * Released under GPL * made by Per Hedbor */
d4542b1998-07-19Henrik Grubbström (Grubba) constant cvs_version = "$Id: wizard_tag.pike,v 1.10 1998/07/19 16:26:37 grubba Exp $";
84af181997-11-14Per Hedbor constant thread_safe=1; #include <module.h> inherit "module"; inherit "wizard"; mixed *register_module() {
276a371997-11-14Per Hedbor  return ({MODULE_PARSER,"Wizard generator",
fc57521998-03-06Per Hedbor  "Generates wizards<p>See &lt;wizard help&gt; for more information\n", ({}),1,});
84af181997-11-14Per Hedbor }
f1be801998-02-22Per Hedbor string internal_page(string t, mapping args, string contents, int l, int ol, mapping f)
84af181997-11-14Per Hedbor {
f1be801998-02-22Per Hedbor  f->pages +=({({contents,ol+l})});
84af181997-11-14Per Hedbor }
f1be801998-02-22Per Hedbor string fix_relative(string file, object id) { if(file != "" && file[0] == '/') return file; file = combine_path(dirname(id->not_query) + "/", file); return file; } string old_pike = ""; object old_wizard = 0;
959a491998-07-03Marcus Comstedt string tag_wizard(string t, mapping args, string contents, object id, object file, mapping defines)
84af181997-11-14Per Hedbor {
959a491998-07-03Marcus Comstedt  if(!defines->line)
d4542b1998-07-19Henrik Grubbström (Grubba)  defines->line=1;
84af181997-11-14Per Hedbor  mapping f = ([ "pages":({}) ]); string pike = ("inherit \"wizard\";\n"
959a491998-07-03Marcus Comstedt  "# "+defines->line+" \""+id->not_query+"\"\n"
84af181997-11-14Per Hedbor  "string name=\""+(args->name||"unnamed")+"\";\n"); int p;
41d0f91998-02-20Per Hedbor  foreach(glob("*-label", indices(args)), string a) {
959a491998-07-03Marcus Comstedt  pike += ("# "+defines->line+" \""+id->not_query+"\"\n");
41d0f91998-02-20Per Hedbor  pike += " string "+replace(replace(a,"-","_"),({"(",")","+",">"}), ({"","","",""}))+ " = \""+replace(args[a], ({"\"","\n","\r", "\\"}), ({"\\\"", "\\n", "\\r", "\\\\"}))+"\";\n"; }
f1be801998-02-22Per Hedbor  if(args->ok) {
959a491998-07-03Marcus Comstedt  pike += ("# "+defines->line+" \""+id->not_query+"\"\n");
f1be801998-02-22Per Hedbor  pike += ("mixed wizard_done(object id)\n" "{\n" " id->not_query = \""+ fix_relative(replace(args->ok, ({"\"","\n","\r", "\\"}), ({"\\\"", "\\n", "\\r", "\\\\"})),id)+"\";\n" " return roxen->get_file( id );\n" "}\n\n"); } parse_html_lines(contents, ([]), (["page":internal_page]),
959a491998-07-03Marcus Comstedt  (int)defines->line,f);
f1be801998-02-22Per Hedbor  foreach(f->pages, array q)
84af181997-11-14Per Hedbor  {
f1be801998-02-22Per Hedbor  pike += ("# "+q[1]+" \""+id->not_query+"\"\n");
84af181997-11-14Per Hedbor  pike += ("string page_"+p+"(object id) {" +
f1be801998-02-22Per Hedbor  "return \""+replace(q[0], ({"\"","\n","\r", "\\"}),
84af181997-11-14Per Hedbor  ({"\\\"", "\\n", "\\r", "\\\\"}))+"\";}\n"); p++; }
f1be801998-02-22Per Hedbor  object w; if(pike == old_pike) w = old_wizard; else { old_wizard = w = compile_string(pike)(); old_pike = pike; } mixed res = w->wizard_for(id,fix_relative(args->cancel||args->done,id));
84af181997-11-14Per Hedbor  if(mappingp(res)) {
959a491998-07-03Marcus Comstedt  defines[" _error"] = res->error; defines[" _extra_heads"] = res->extra_heads;
f1be801998-02-22Per Hedbor  return res->data||(res->file&&res->file->read())||"";
84af181997-11-14Per Hedbor  } return res; } mapping query_container_callers() { return ([ "wizard" : tag_wizard ]); }
b956721998-02-03Per Hedbor void start() { }