[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