The following commit has been merged in the master branch:
commit e598dc6b4a127386aeb21861fc2559de15b2a480
Author: Miriam Ruiz <[email protected]>
Date:   Mon Apr 27 23:18:16 2009 +0200

    Start developing XML configuration loader

diff --git a/filter.cpp b/filter.cpp
index d47d930..6385f8c 100644
--- a/filter.cpp
+++ b/filter.cpp
@@ -21,7 +21,6 @@
 #include "filter.h"
 #include "taghandler.h"
 #include "boolparser.h"
-#include "slre.h"
 
 #ifdef UNIT_TEST
 #include "CuTest.h"
@@ -32,9 +31,14 @@
 #include <vector>
 
 #include <string.h>
+#include <stdio.h>
+#include <errno.h>
 
 #include <ept/debtags/tag.h>
 
+#include "rapidxml/rapidxml.hpp"
+#include "rapidxml/rapidxml_print.hpp"
+
 #define GREEN_MINIMUM 2
 
 PackageFilter::PackageFilter()
@@ -162,6 +166,52 @@ using namespace std;
 
 bool PackageFilter::Load(const char *filename)
 {
+       cout << "Loading filter: \"" << filename << "\"" << std::endl;
+
+       FILE *fd = fopen(filename, "rb"); // Read-only mode
+       if ( fd == NULL) {
+               fprintf( stderr, "fopen failed, errno = %d (%s)\n", errno, 
strerror( errno));
+               return false;
+       }
+
+       fseek( fd, 0, SEEK_END);
+       int fsize = ftell(fd);
+       fseek( fd, 0, SEEK_SET);
+
+       char *buffer = new char[fsize + 1];
+       fread(buffer, fsize, 1, fd);
+       fclose(fd);
+       buffer[fsize + 1] = '\0';
+
+       rapidxml::xml_document<> doc;
+       try {
+               doc.parse<0>(buffer);
+       } catch (...) {
+               std::cerr << "Error loading filter: \"" << filename << "\"" << 
std::endl;
+               return false;
+       }
+
+       //std::cout << doc;
+
+       for (rapidxml::xml_node<> *filter = doc.first_node("filter");
+                       filter; filter = filter->next_sibling("filter"))
+       {
+               rapidxml::xml_attribute<> *target = 
filter->first_attribute("target");
+               if (!target) break;
+               std::cout << target->name() << " = " << target->value() << 
std::endl;
+
+               for (rapidxml::xml_node<> *rule = filter->first_node("rule");
+                       rule; rule = rule->next_sibling("rule"))
+               {
+                       rapidxml::xml_attribute<> *condition = 
rule->first_attribute("condition");
+                       if (!condition) break;
+                       std::cout << condition->name() << " = " << 
condition->value() << std::endl;
+               }
+       }
+
+       return true;
+
+/*
        struct slre_pattern pattern[1];
        const char *pattern_text[1];
        const char pattern_type[] = { 'd', '\0' };
@@ -213,6 +263,7 @@ bool PackageFilter::Load(const char *filename)
        std::cerr << std::endl;
 
        return true;
+*/
 }
 
 /* Find out the color of a single tag */

-- 
Development fot GoFind!

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to