The following commit has been merged in the master branch:
commit d54b562af7ba17a79fdddc6d0d2a304fc4434d99
Author: Miriam Ruiz <[email protected]>
Date:   Tue Apr 28 02:24:54 2009 +0200

    Start processing of the logic behind the boolean expressions in the filter

diff --git a/filter.cfg b/filter.cfg
index 043b9f3..c313fdc 100644
--- a/filter.cfg
+++ b/filter.cfg
@@ -1,18 +1,18 @@
 <gofind version="1">
-       <filter target="black">
+       <filter target="black" id="B 1">
                <rule condition="sex::violent" />
        </filter>
-       <filter target="red">
+       <filter target="red" id="R 1">
                <rule condition="violence::non-realistic-optional" />
-               <rule condition="violence::non-realistic" />
+               <rule condition="violence::non-realistic" id="R 1 b" />
        </filter>
-       <filter target="yellow">
-               <rule condition="  issues::horror" />
+       <filter target="yellow" id="Y 1">
+               <rule condition=" ! issues::horror" />
        </filter>
-       <filter target="yellow">
+       <filter target="yellow" id="Y 2">
                <rule 
condition="issues::horror&(issues::horror|issues::cruelty)" />
        </filter>
-       <filter target="green">
+       <filter target="green" id="G 1">
                <rule condition="violence::none & sex::none & 
!issues::bad-words & !  issues::discrimination    " />
        </filter>
 </gofind>
\ No newline at end of file
diff --git a/filter.cpp b/filter.cpp
index acab118..1e485ff 100644
--- a/filter.cpp
+++ b/filter.cpp
@@ -49,112 +49,115 @@ PackageFilter::PackageFilter()
        // BLACK
 
        element = new ResultList("black 1", PackageFilter::Black);
-       tagdata.SetTag(element, "rating:sex::violence");
+       tagdata.SetTag(&element->positive, "rating:sex::violence");
        AddLast(element);
 
        // RED
 
        element = new ResultList("red 1", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:violence::non-realistic:optional");
+       tagdata.SetTag(&element->positive, 
"rating:violence::non-realistic:optional");
        AddLast(element);
 
        element = new ResultList("red 2", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:violence::non-realistic");
+       tagdata.SetTag(&element->positive, "rating:violence::non-realistic");
        AddLast(element);
 
        element = new ResultList("red 3", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:violence::realistic:optional");
+       tagdata.SetTag(&element->positive, 
"rating:violence::realistic:optional");
        AddLast(element);
 
        element = new ResultList("red 4", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:violence::realistic");
+       tagdata.SetTag(&element->positive, "rating:violence::realistic");
        AddLast(element);
 
        element = new ResultList("red 5", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:sex::non-realistic");
+       tagdata.SetTag(&element->positive, "rating:sex::non-realistic");
        AddLast(element);
 
        element = new ResultList("red 6", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:sex::realistic:optional");
+       tagdata.SetTag(&element->positive, "rating:sex::realistic:optional");
        AddLast(element);
 
        element = new ResultList("red 7", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:sex::realistic");
+       tagdata.SetTag(&element->positive, "rating:sex::realistic");
        AddLast(element);
 
        element = new ResultList("red 8", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:sex::hard:optional");
+       tagdata.SetTag(&element->positive, "rating:sex::hard:optional");
        AddLast(element);
 
        element = new ResultList("red 9", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:sex::hard");
+       tagdata.SetTag(&element->positive, "rating:sex::hard");
        AddLast(element);
 
        element = new ResultList("red A", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:sex::violence:optional");
+       tagdata.SetTag(&element->positive, "rating:sex::violence:optional");
        AddLast(element);
 
        element = new ResultList("red B", PackageFilter::Red);
-       tagdata.SetTag(element, "rating:theme::cruelty");
+       tagdata.SetTag(&element->positive, "rating:theme::cruelty");
        AddLast(element);
 
        // YELLOW
 
        element = new ResultList("yellow 1", PackageFilter::Yellow);
-       tagdata.SetTag(element, "rating:violence::minor");
+       tagdata.SetTag(&element->positive, "rating:violence::minor");
        AddLast(element);
 
        element = new ResultList("yellow 2", PackageFilter::Yellow);
-       tagdata.SetTag(element, "rating:violence::brief");
+       tagdata.SetTag(&element->positive, "rating:violence::brief");
        AddLast(element);
 
        element = new ResultList("yellow 3", PackageFilter::Yellow);
-       tagdata.SetTag(element, "rating:sex::nudity");
+       tagdata.SetTag(&element->positive, "rating:sex::nudity");
        AddLast(element);
 
        element = new ResultList("yellow 4", PackageFilter::Yellow);
-       tagdata.SetTag(element, "rating:sex::non-realistic:optional");
+       tagdata.SetTag(&element->positive, 
"rating:sex::non-realistic:optional");
        AddLast(element);
 
        element = new ResultList("yellow 5", PackageFilter::Yellow);
-       tagdata.SetTag(element, "rating:theme::death");
+       tagdata.SetTag(&element->positive, "rating:theme::death");
        AddLast(element);
 
        element = new ResultList("yellow 6", PackageFilter::Yellow);
-       tagdata.SetTag(element, "rating:theme::horror");
+       tagdata.SetTag(&element->positive, "rating:theme::horror");
        AddLast(element);
 
        // GREEN
 
        element = new ResultList("green 1", PackageFilter::Green);
-       tagdata.SetTag(element,  "rating:violence::none");
-       tagdata.SetTag(element,  "rating:sex::none");
-       tagdata.SetTag(element,  "rating:language::benign");
-       tagdata.SetTag(element,  "rating:discrimination::none");
+       tagdata.SetTag(&element->positive,  "rating:violence::none");
+       tagdata.SetTag(&element->positive,  "rating:sex::none");
+       tagdata.SetTag(&element->positive,  "rating:language::benign");
+       tagdata.SetTag(&element->positive,  "rating:discrimination::none");
        AddLast(element);
 
        element = new ResultList("green 2", PackageFilter::Green);
-       tagdata.SetTag(element,  "rating:violence::minor:optional");
-       tagdata.SetTag(element,  "rating:sex::none");
-       tagdata.SetTag(element,  "rating:language::benign");
-       tagdata.SetTag(element,  "rating:discrimination::none");
+       tagdata.SetTag(&element->positive,  "rating:violence::minor:optional");
+       tagdata.SetTag(&element->positive,  "rating:sex::none");
+       tagdata.SetTag(&element->positive,  "rating:language::benign");
+       tagdata.SetTag(&element->positive,  "rating:discrimination::none");
        AddLast(element);
 
        element = new ResultList("green 3", PackageFilter::Green);
-       tagdata.SetTag(element,  "rating:violence::none");
-       tagdata.SetTag(element,  "rating:sex::nudity:optional");
-       tagdata.SetTag(element,  "rating:language::benign");
-       tagdata.SetTag(element,  "rating:discrimination::none");
+       tagdata.SetTag(&element->positive,  "rating:violence::none");
+       tagdata.SetTag(&element->positive,  "rating:sex::nudity:optional");
+       tagdata.SetTag(&element->positive,  "rating:language::benign");
+       tagdata.SetTag(&element->positive,  "rating:discrimination::none");
        AddLast(element);
 
        element = new ResultList("green 4", PackageFilter::Green);
-       tagdata.SetTag(element,  "rating:violence::minor:optional");
-       tagdata.SetTag(element,  "rating:sex::nudity:optional");
-       tagdata.SetTag(element,  "rating:language::benign");
-       tagdata.SetTag(element,  "rating:discrimination::none");
+       tagdata.SetTag(&element->positive,  "rating:violence::minor:optional");
+       tagdata.SetTag(&element->positive,  "rating:sex::nudity:optional");
+       tagdata.SetTag(&element->positive,  "rating:language::benign");
+       tagdata.SetTag(&element->positive,  "rating:discrimination::none");
        AddLast(element);
 
-       AddLast("a&(b|c|d)&d");
+       AddLast("green 4", PackageFilter::Green, "a&(b|c|d)&d");
+
+       Print(std::cerr);
+       std::cerr << std::endl;
 }
 
 PackageFilter::~PackageFilter()
@@ -206,13 +209,24 @@ bool PackageFilter::Load(const char *filename)
                if (!target) break;
                std::cout << target->name() << " = " << target->value() << 
std::endl;
 
+               rapidxml::xml_attribute<> *tid = filter->first_attribute("id");
+               if (tid)
+                       std::cout << tid->name() << " = " << tid->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;
+                       rapidxml::xml_attribute<> *rid = 
rule->first_attribute("id");
+                       if (rid)
+                               std::cout << rid->name() << " = " << 
rid->value() << std::endl;
                        std::cout << condition->name() << " = " << 
condition->value() << std::endl;
-                       if (!AddLast( condition->value() ))
+                       if (!AddLast(
+                               rid ? rid->name() : tid ? tid->name() : "?" ,
+                               PackageFilter::Unknown,
+                               condition->value()
+                       ))
                                std::cerr << "Error Adding '"<< 
condition->value() << "'" << endl;
                }
        }
@@ -232,7 +246,7 @@ int PackageFilter::TagValue(const Tag &tag)
        // The order is important
        PackageFilter::ResultList *item = list;
        while (item != NULL) {
-               if (tagdata.CheckTag(item, name))
+               if (tagdata.CheckTag(&item->positive, name))
                        return item->type;
                item = item->next;
        }
@@ -264,7 +278,7 @@ int PackageFilter::TagsValue(const TagSet &tags)
 //             std::cerr << "With table value " << i++ << ": ";
 //             item->Print(std::cerr);
 //             std::cerr << std::endl;
-               if (t.CompareAll(*item))
+               if (t.CompareAll(item->positive))
                        return item->type;
                item = item->next;
        }
@@ -272,7 +286,7 @@ int PackageFilter::TagsValue(const TagSet &tags)
        return PackageFilter::Unknown;
 }
 
-bool PackageFilter::AddLast(const std::string &bool_expr)
+bool PackageFilter::AddLast(const std::string str, Type t, const std::string 
&bool_expr)
 {
        bool success = true;
        BoolParser parser;
@@ -287,7 +301,26 @@ bool PackageFilter::AddLast(const std::string &bool_expr)
                        std::cout << "result too large" << std::endl;
                        success = false;
                }
-               else std::cout << expr << std::endl;
+               else
+               {
+                       //std::cout << expr << std::endl;
+                       switch (expr->getType())
+                       {
+                               case boolstuff::BoolExpr<std::string>::VALUE:
+                                       std::cerr << expr->getValue() << 
std::endl;
+                                       break;
+                               case boolstuff::BoolExpr<std::string>::AND:
+                                       break;
+                               case boolstuff::BoolExpr<std::string>::OR:
+                                       break;
+                               case boolstuff::BoolExpr<std::string>::NOT:
+                                       if 
(expr->getRight()->getType()==boolstuff::BoolExpr<std::string>::VALUE)
+                                               std::cerr << "!" << 
expr->getRight()->getValue() << std::endl;
+                                       break;
+                               default:
+                                       break;
+                       }
+               }
 
                delete expr;
        }
diff --git a/filter.h b/filter.h
index 40b00a1..c2bcdcf 100644
--- a/filter.h
+++ b/filter.h
@@ -49,7 +49,7 @@ public:
        int TagsValue(const TagSet &tags);
 
 protected:
-       class ResultList : public FilterTagHandler::Result
+       class ResultList
        {
                public:
                        inline ResultList(const std::string str, Type t) {
@@ -66,6 +66,8 @@ protected:
 
                        std::string name;
                        Type type;
+                       FilterTagHandler::Result positive;
+                       FilterTagHandler::Result negative;
                        PackageFilter::ResultList *next;
        };
 
@@ -87,7 +89,7 @@ protected:
                list->GetLast()->next = old_list;
        }
 
-       bool AddLast(const std::string &bool_expr);
+       bool AddLast(const std::string str, Type t, const std::string 
&bool_expr);
 
        inline void AddLast(PackageFilter::ResultList *new_list) {
                if (!list) { list = new_list; }
@@ -107,8 +109,11 @@ protected:
                inline void Print(std::ostream &out) const {
                        PackageFilter::ResultList *item = list;
                        while (item) {
-                               out << item->name << ": ";
-                               tagdata.Print(out, item);
+                               out << item->name << ": " << std::endl;
+                               out << " +: ";
+                               tagdata.Print(out, &item->positive);
+                               out << " -: ";
+                               tagdata.Print(out, &item->negative);
                                item = item->next;
                        }
                }

-- 
Development fot GoFind!

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

Reply via email to