[SCM] Development fot GoFind! branch, master, updated. d54b562af7ba17a79fdddc6d0d2a304fc4434d99
Miriam Ruiz
miriam at debian.org
Tue Apr 28 00:19:12 UTC 2009
The following commit has been merged in the master branch:
commit d54b562af7ba17a79fdddc6d0d2a304fc4434d99
Author: Miriam Ruiz <miriam at debian.org>
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!
More information about the Pkg-games-commits
mailing list