Roxen.git / server / modules / examples / newstyle_fnord.pike

version» Context lines:

Roxen.git/server/modules/examples/newstyle_fnord.pike:1:   // This is a roxen module. Copyright © 2000, Roxen IS.      // This is a small sample module intended to show how a newstyle tag   // is written. Note that this is only a very brief overview and that   // the new parser is still under development and incompatible changes   // might be done in the future.      // See fnord.pike for more information of what this tag does.      // This variable is shown in the configinterface as the version of the module. - string cvs_version = "$Id: newstyle_fnord.pike,v 1.3 2000/02/24 05:39:03 nilsson Exp $"; + string cvs_version = "$Id: newstyle_fnord.pike,v 1.4 2000/03/31 12:44:42 nilsson Exp $";      // Tell Roxen that this module is threadsafe.   int thread_safe=1;      // Include and inherit code that is needed in every module.   #include <module.h>   inherit "module";         // Define the fnord tag class. It must begin with "Tag".   class TagFnord {       inherit RXML.Tag;       // This constant tells the parser that the tag should be called "fnord".    constant name = "fnord";       // Declare the type of the attribute, which happens to be optional.    // Since we declare it to be text, we really don't need this line to    // get things to work. -  constant opt_arg_types = ([ "alt" : RXML.t_text ]); +  mapping(string:RXML.Type) opt_arg_types = ([ "alt" : RXML.t_text ]);       // This class is where all the action are.    class Frame {    inherit RXML.Frame;       // When the parser starts to parse the tag it calls    // do_enter. We get a normal request object as argument.    // We also have an args mapping at our disposal, containing    // the attributes given to the tag.       // When do_enter has been called the function do_iterate    // will be called. If do_iterate is a number, as in this case,    // the contents will be iterated that number of times.       // Finally we want to set the return value if the attribute    // alt is set. We do this by modifying the result string.       array do_enter(RequestID id) {    if(id->prestate->fnord) -  do_iterate=1; +  do_iterate=0;    else {    if(args->alt)    result=args->alt; -  do_iterate=0; +  do_iterate=-1;    }    return 0;    }       int do_iterate;    }   }         // Some constants to register the module in the RXML parser.