diff options
Diffstat (limited to 'server/src')
| -rw-r--r-- | server/src/macro.h | 6 | ||||
| -rw-r--r-- | server/src/macro_parser.cc | 26 | ||||
| -rw-r--r-- | server/src/server.cc | 16 | 
3 files changed, 30 insertions, 18 deletions
diff --git a/server/src/macro.h b/server/src/macro.h index 2252d90..9d4692f 100644 --- a/server/src/macro.h +++ b/server/src/macro.h @@ -29,13 +29,17 @@  #include <string>  #include <vector> +#include <map> +/*  class WidgetProperty {  public:    std::string name;    std::string value;  }; -typedef std::vector< WidgetProperty > WidgetPropertyList;  +*/ +//typedef std::vector< WidgetProperty > WidgetPropertyList;  +typedef std::map< std::string, std::string > WidgetPropertyList;  class Widget;  typedef std::vector< Widget > WidgetList;  diff --git a/server/src/macro_parser.cc b/server/src/macro_parser.cc index 62c74ca..9161613 100644 --- a/server/src/macro_parser.cc +++ b/server/src/macro_parser.cc @@ -70,13 +70,6 @@ static void start_hndl(void *p, const char *el, const char **attr)    // Do something reasonable with them... -  if(name == "macro") { -    //    printf("Macro %s %s\n", attributes["name"].c_str(), attributes["resume"].c_str()); -    parser->macro->name = attributes["name"]; -    parser->macro->format = attributes["resume"]; -    //    return; -  } -    if(name == "include") {      Macro inc; @@ -91,6 +84,15 @@ static void start_hndl(void *p, const char *el, const char **attr)      return; // Don't do further parsing of this tag.    } +  if(name == "macro") { + +    parser->macro->name = attributes["name"]; +    parser->macro->version = attributes["version"]; +    parser->macro->format = attributes["resume"]; + +    return; // Don't do further parsing of this tag. +  } +    Widget widget;    widget.type = name; @@ -107,11 +109,11 @@ static void start_hndl(void *p, const char *el, const char **attr)    std::map< std::string, std::string >::iterator i = attributes.begin();    while(i != attributes.end()) { -    WidgetProperty prop; -    prop.name = i->first; -    prop.value = i->second; - -    wp->properties.push_back(prop); +    //    WidgetProperty prop; +    //    prop.name = i->first; +    //    prop.value = i->second; +    //    wp->properties.push_back(prop); +    wp->properties[i->first] = i->second;      i++;    } diff --git a/server/src/server.cc b/server/src/server.cc index c88de4d..2a4c882 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -57,10 +57,15 @@ static void send_macro_widget(Widget &widget, TCPSocket &socket, std::string tab    socket.write(tabs + "<" + widget.type);    WidgetPropertyList::iterator p = widget.properties.begin();    while(p != widget.properties.end()) { -    WidgetProperty &property = *p; -    socket.write(" " + property.name + "=\"" + property.value + "\""); +    socket.write(" " + p->first + "=\"" + p->second + "\"");      p++;    } + +  if(widget.widgets.size() == 0) { // If node is empty, use short tag form +    socket.write("/>\n"); +    return; +  } +    socket.write(">\n");    WidgetList::iterator w = widget.widgets.begin(); @@ -91,11 +96,14 @@ static void connection(TCPSocket &socket)      Macro macro;      parse_macro(request.macro, macro); +    socket.write("  <macro version=\"" + macro.version + "\" name=\""  +                 + macro.name + "\" resume=\"" + macro.format + "\">\n");      WidgetList::iterator w = macro.widgets.begin();      while(w != macro.widgets.end()) { -      send_macro_widget(*w, socket, "  "); +      send_macro_widget(*w, socket, "    ");        w++;      } +    socket.write("  </macro>\n");      printf("done.\n"); @@ -125,8 +133,6 @@ static void connection(TCPSocket &socket)                       journal_commit_addr.c_str(), journal_commit_port,                       resume.c_str(), resume.length()); -      //      printf(resume.c_str()); -        i++;      }    }  | 
