diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-10-15 02:21:12 +0100 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-10-15 02:21:12 +0100 | 
| commit | 477a50661f2cf744b6eea59f865d82fd9d245315 (patch) | |
| tree | 677cb0ebc71b96e6be43f7a45591153b5d307b6a | |
| parent | Set cxxflags specifically, not cflags (diff) | |
| download | gentoobrowse-api-477a50661f2cf744b6eea59f865d82fd9d245315.tar.bz2 gentoobrowse-api-477a50661f2cf744b6eea59f865d82fd9d245315.tar.xz gentoobrowse-api-477a50661f2cf744b6eea59f865d82fd9d245315.zip | |
Use file utils and lexer now in libadhocutilgentoobrowse-api-0.5
21 files changed, 132 insertions, 440 deletions
| diff --git a/gentoobrowse-api/service/depend.cpp b/gentoobrowse-api/service/depend.cpp index 0a0dd4d..86f9646 100644 --- a/gentoobrowse-api/service/depend.cpp +++ b/gentoobrowse-api/service/depend.cpp @@ -1,12 +1,13 @@  #include "depend.h"  #include <boost/algorithm/string/split.hpp> +#include <lexer-regex.h> -Gentoo::Utils::Lexer::PatternPtr WhenUse_Begin(Gentoo::Utils::Lexer::regex("\\s*(!?[[:alnum:]-_@]+)\\?\\s*\\(\\s*", G_REGEX_OPTIMIZE)); -Gentoo::Utils::Lexer::PatternPtr WhenUse_End(Gentoo::Utils::Lexer::regex("\\s*\\)\\s*", G_REGEX_OPTIMIZE)); -Gentoo::Utils::Lexer::PatternPtr Or_Begin(Gentoo::Utils::Lexer::regex("\\s*\\|\\|\\s*\\(\\s*", G_REGEX_OPTIMIZE)); -Gentoo::Utils::Lexer::PatternPtr Or_Group(Gentoo::Utils::Lexer::regex("\\s*\\(\\s*", G_REGEX_OPTIMIZE)); -Gentoo::Utils::Lexer::PatternPtr Or_End(Gentoo::Utils::Lexer::regex("\\s*\\)\\s*", G_REGEX_OPTIMIZE)); -Gentoo::Utils::Lexer::PatternPtr AtomSpec(Gentoo::Utils::Lexer::regex("\\s*" +AdHoc::Lexer::PatternPtr WhenUse_Begin(AdHoc::LexerMatchers::regex("\\s*(!?[[:alnum:]-_@]+)\\?\\s*\\(\\s*", G_REGEX_OPTIMIZE)); +AdHoc::Lexer::PatternPtr WhenUse_End(AdHoc::LexerMatchers::regex("\\s*\\)\\s*", G_REGEX_OPTIMIZE)); +AdHoc::Lexer::PatternPtr Or_Begin(AdHoc::LexerMatchers::regex("\\s*\\|\\|\\s*\\(\\s*", G_REGEX_OPTIMIZE)); +AdHoc::Lexer::PatternPtr Or_Group(AdHoc::LexerMatchers::regex("\\s*\\(\\s*", G_REGEX_OPTIMIZE)); +AdHoc::Lexer::PatternPtr Or_End(AdHoc::LexerMatchers::regex("\\s*\\)\\s*", G_REGEX_OPTIMIZE)); +AdHoc::Lexer::PatternPtr AtomSpec(AdHoc::LexerMatchers::regex("\\s*"  		"([[:punct:]]+)?" // op  		"([[:alnum:]-]+)\\/" // cat  		"([^ ]+)" // package @@ -37,42 +38,44 @@ namespace Portage {  			return rtn;  		} -		Depend::Depend() +		Depend::Depend() : +			AdHoc::Lexer({ +				// use? ( +				{ { InitialState, InWhen, InOr }, WhenUse_Begin, [this](auto es) { +						es->pushState(InWhen); +						when.push_back(*es->pattern()->match(1)); +					} }, +				// ) +				{ { InWhen }, WhenUse_End, [this](auto es) { +						es->popState(); +						when.pop_back(); +					} }, +				// || ( +				{ { InitialState, InWhen, InOr }, Or_Begin, [this](auto es) { +						es->pushState(InOr); +					} }, +				// ( +				{ { InitialState, InWhen, InOr }, Or_Group, [this](auto es) { +						es->pushState(InOr); +					} }, +				// ) +				{ { InOr }, Or_End, [this](auto es) { +						es->popState(); +					} }, +				// [op]some-cat/package[-version][:slot][uses] +				{ { InitialState, InWhen, InOr }, AtomSpec, [this](auto es) { +						ds.push_back(new Gentoo::Dependency( +								when, +								iuo<std::string>(es->pattern()->match(1)), // op +								*es->pattern()->match(2), // category +								*es->pattern()->match(3), // package +								iuo<std::string>(es->pattern()->match(5)), // version +								iuo<std::string>(es->pattern()->match(11)), // slot +								split<std::string>(es->pattern()->match(14)) // use +							)); +					} } +				})  		{ -			// use? ( -			rules.push_back({ { InitialState, InWhen, InOr }, WhenUse_Begin, [this](auto es) { -					es->pushState(InWhen); -					when.push_back(*es->pattern->match(1)); -				} }); -			// ) -			rules.push_back({ { InWhen }, WhenUse_End, [this](auto es) { -					es->popState(); -					when.pop_back(); -				} }); -			// || ( -			rules.push_back({ { InitialState, InWhen, InOr }, Or_Begin, [this](auto es) { -					es->pushState(InOr); -				} }); -			// ( -			rules.push_back({ { InitialState, InWhen, InOr }, Or_Group, [this](auto es) { -					es->pushState(InOr); -				} }); -			// ) -			rules.push_back({ { InOr }, Or_End, [this](auto es) { -					es->popState(); -				} }); -			// [op]some-cat/package[-version][:slot][uses] -			rules.push_back({ { InitialState, InWhen, InOr }, AtomSpec, [this](auto es) { -					ds.push_back(new Gentoo::Dependency( -							when, -							iuo<std::string>(es->pattern->match(1)), // op -							*es->pattern->match(2), // category -							*es->pattern->match(3), // package -							iuo<std::string>(es->pattern->match(5)), // version -							iuo<std::string>(es->pattern->match(11)), // slot -							split<std::string>(es->pattern->match(14)) // use -						)); -				} });  		}  		std::vector<Gentoo::DependencyPtr> diff --git a/gentoobrowse-api/service/depend.h b/gentoobrowse-api/service/depend.h index c384a11..abd9f06 100644 --- a/gentoobrowse-api/service/depend.h +++ b/gentoobrowse-api/service/depend.h @@ -4,11 +4,11 @@  #include <istream>  #include <vector>  #include <portage-models.h> -#include "utils/lexer.h" +#include <lexer.h>  namespace Portage {  	namespace Utils { -		class Depend : Gentoo::Utils::Lexer { +		class Depend : AdHoc::Lexer {  			private:  				Depend();  				Gentoo::StringList when; diff --git a/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp b/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp index 235faa2..bf75b16 100644 --- a/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/categoryMetaProcessor.cpp @@ -1,12 +1,12 @@  #include "categoryMetaProcessor.h"  #include <modifycommand.h> -#include "utils/fileUtils.h" +#include <fileUtils.h>  #include "utils/xmlUtils.h"  #include "utils/dbUtils.h"  #include <sql/maintenance/categoryMetaUpdate.sql.h>  namespace U = Gentoo::Utils; -using namespace Gentoo::Utils::File; +using namespace AdHoc::FileUtils;  namespace Gentoo {  	namespace Service { diff --git a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp index 4560e95..cbc74bd 100644 --- a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp @@ -8,7 +8,6 @@  #include <glibmm/regex.h>  #include <tablepatch.h>  #include "depend.h" -#include "utils/fileUtils.h"  #include "utils/dbUtils.h"  #include "utils/ebuildCacheParser.h"  #include "utils/splitEbuildProps.h" @@ -26,7 +25,7 @@  #include <sql/maintenance/ebuildArchsInsert.sql.h>  namespace U = Gentoo::Utils; -using namespace Gentoo::Utils::File; +using namespace AdHoc::FileUtils;  static Glib::RefPtr<Glib::Regex> packageVersion = Glib::Regex::create("^(.+)-([0-9].*)$"); diff --git a/gentoobrowse-api/service/maintenance/masksProcessor.cpp b/gentoobrowse-api/service/maintenance/masksProcessor.cpp index 58975f1..1634167 100644 --- a/gentoobrowse-api/service/maintenance/masksProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/masksProcessor.cpp @@ -4,15 +4,12 @@  #include <modifycommand.h>  #include <sqlWriter.h>  #include <tablepatch.h> -#include "utils/fileUtils.h"  #include "utils/dbUtils.h"  #include <glibmm/regex.h>  #include <glibmm/iochannel.h>  #include "sql/maintenance/masksSets.sql.h"  #include "sql/maintenance/masksEbuilds.sql.h" -using namespace Gentoo::Utils::File; -  static Glib::RefPtr<Glib::Regex> maskHead = Glib::Regex::create(  		"^# ([^<]+)? ?<(.+?@[^>]+)> \\((\\d+ *(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec) \\d+)\\)",  		Glib::RegexCompileFlags::REGEX_CASELESS); diff --git a/gentoobrowse-api/service/maintenance/newsProcessor.cpp b/gentoobrowse-api/service/maintenance/newsProcessor.cpp index 0b5b920..848d704 100644 --- a/gentoobrowse-api/service/maintenance/newsProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/newsProcessor.cpp @@ -1,7 +1,5 @@  #include "newsProcessor.h" -#include "utils/fileUtils.h" -#include "utils/xmlUtils.h" -#include "utils/dbUtils.h" +#include <fileUtils.h>  #include "news.h"  #include <modifycommand.h>  #include <slicer/slicer.h> @@ -9,9 +7,6 @@  #include <db/sqlUpdateSerializer.h>  #include <sql/maintenance/newsDelete.sql.h> -namespace U = Gentoo::Utils; -using namespace Gentoo::Utils::File; -  namespace Gentoo {  	namespace Service {  		const int NewsProcessor::FILETYPEID = 11; @@ -32,7 +27,7 @@ namespace Gentoo {  		void  		NewsProcessor::importNews(DB::Connection * dbc, const boost::filesystem::path & path)  		{ -			Gentoo::Utils::MemMap m(path); +			AdHoc::FileUtils::MemMap m(path);  			auto news = Portage::Utils::News::parse(reinterpret_cast<const gchar *>(m.data), m.getStat().st_size);  			news->newsid = path.parent_path().leaf().string();  			Slicer::SerializeAny<Serializer>(news, dbc, "gentoobrowse.news"); diff --git a/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp b/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp index 5be86ec..837cc18 100644 --- a/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/packageMetaProcessor.cpp @@ -1,12 +1,12 @@  #include "packageMetaProcessor.h"  #include <modifycommand.h> -#include "utils/fileUtils.h" +#include <fileUtils.h>  #include "utils/xmlUtils.h"  #include "utils/dbUtils.h"  #include <sql/maintenance/packageMetaUpdate.sql.h>  namespace U = Gentoo::Utils; -using namespace Gentoo::Utils::File; +using namespace AdHoc::FileUtils;  namespace Gentoo {  	namespace Service { diff --git a/gentoobrowse-api/service/maintenance/useGlobalProcessor.cpp b/gentoobrowse-api/service/maintenance/useGlobalProcessor.cpp index 457383f..f3b3b5a 100644 --- a/gentoobrowse-api/service/maintenance/useGlobalProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/useGlobalProcessor.cpp @@ -1,11 +1,11 @@  #include "useGlobalProcessor.h"  #include <modifycommand.h>  #include <tablepatch.h> -#include "utils/fileUtils.h" +#include <fileUtils.h>  #include "utils/dbUtils.h"  #include <glibmm/regex.h> -using namespace Gentoo::Utils::File; +using namespace AdHoc::FileUtils;  static Glib::RefPtr<Glib::Regex> useDesc = Glib::Regex::create("^([^#\\s][^ ]*)\\s+-\\s+(.*)$", Glib::RegexCompileFlags::REGEX_MULTILINE); @@ -28,7 +28,7 @@ namespace Gentoo {  			p.pk = { "use" };  			p.cols = { "use", "description" }; -			Utils::MemMap u(path); +			AdHoc::FileUtils::MemMap u(path);  			Glib::ustring d(std::string(reinterpret_cast<const char *>(u.data), u.getStat().st_size));  			Glib::MatchInfo matches;  			auto i = Utils::Database::tablePatchInserter(dbc, p); diff --git a/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp b/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp index 9749ba7..52e4e31 100644 --- a/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp @@ -2,7 +2,7 @@  #include <modifycommand.h>  #include <selectcommandUtil.impl.h>  #include <tablepatch.h> -#include "utils/fileUtils.h" +#include <fileUtils.h>  #include "utils/dbUtils.h"  #include "utils/entityWhereFilter.h"  #include <glibmm/regex.h> @@ -49,7 +49,7 @@ namespace Gentoo {  			p.cols = { "useGroupId", "use", "description" };  			p.where = &gwf; -			Utils::MemMap u(path); +			AdHoc::FileUtils::MemMap u(path);  			Glib::ustring d(std::string(reinterpret_cast<const char *>(u.data), u.getStat().st_size));  			Glib::MatchInfo matches;  			auto i = Utils::Database::tablePatchInserter(dbc, p); diff --git a/gentoobrowse-api/service/maintenance/useLocalProcessor.cpp b/gentoobrowse-api/service/maintenance/useLocalProcessor.cpp index 1738e9c..62b1180 100644 --- a/gentoobrowse-api/service/maintenance/useLocalProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/useLocalProcessor.cpp @@ -2,12 +2,12 @@  #include <modifycommand.h>  #include <sqlWriter.h>  #include <tablepatch.h> -#include "utils/fileUtils.h" +#include <fileUtils.h>  #include "utils/dbUtils.h"  #include <glibmm/regex.h>  #include "sql/maintenance/useLocalMap.sql.h" -using namespace Gentoo::Utils::File; +using namespace AdHoc::FileUtils;  static Glib::RefPtr<Glib::Regex> useDesc = Glib::Regex::create("^([^#\\s][^/]*)/([^:]+):([^ ]+)\\s+-\\s+(.*)$", Glib::RegexCompileFlags::REGEX_MULTILINE); @@ -37,7 +37,7 @@ namespace Gentoo {  			p.pk = { "packageId", "use" };  			p.cols = { "packageId", "use", "description" }; -			Utils::MemMap u(path); +			AdHoc::FileUtils::MemMap u(path);  			Glib::ustring d(std::string(reinterpret_cast<const char *>(u.data), u.getStat().st_size));  			Glib::MatchInfo matches;  			auto i = tempTable.second; diff --git a/gentoobrowse-api/service/maintenanceBugs.cpp b/gentoobrowse-api/service/maintenanceBugs.cpp index c850929..6526923 100644 --- a/gentoobrowse-api/service/maintenanceBugs.cpp +++ b/gentoobrowse-api/service/maintenanceBugs.cpp @@ -10,23 +10,24 @@  #include <curlStream.h>  #include <libxml++/parsers/saxparser.h>  #pragma GCC diagnostic pop -#include <utils/lexer.h> +#include <lexer.h> +#include <lexer-regex.h>  #include <utils/dbUtils.h>  namespace Gentoo {  	namespace Service { -		Utils::Lexer::PatternPtr bugLink = Utils::Lexer::regex( +		AdHoc::Lexer::PatternPtr bugLink = AdHoc::LexerMatchers::regex(  				"Bug:(\\d+) - \"\" status:(\\w*) resolution:(\\w*) severity:(\\w*).*", G_REGEX_OPTIMIZE); -		class BugListParser : public xmlpp::SaxParser, Utils::Lexer { +		class BugListParser : public xmlpp::SaxParser, AdHoc::Lexer {  			public:  				BugListParser(DB::ModifyCommandPtr i) :  					ins(i)  				{  					rules.push_back({ { InitialState }, bugLink, [this](auto es) { -							ins->bindParamI(0, boost::lexical_cast<int64_t>(*es->pattern->match(1))); -							ins->bindParamS(2, *es->pattern->match(2)); -							ins->bindParamS(1, *es->pattern->match(4)); +							ins->bindParamI(0, boost::lexical_cast<int64_t>(*es->pattern()->match(1))); +							ins->bindParamS(2, *es->pattern()->match(2)); +							ins->bindParamS(1, *es->pattern()->match(4));  						}});  				} diff --git a/gentoobrowse-api/service/news.cpp b/gentoobrowse-api/service/news.cpp index 726f9b4..34b811a 100644 --- a/gentoobrowse-api/service/news.cpp +++ b/gentoobrowse-api/service/news.cpp @@ -1,14 +1,15 @@  #include "news.h"  #include <boost/algorithm/string/split.hpp> +#include <lexer-regex.h> -Gentoo::Utils::Lexer::PatternPtr Title(Gentoo::Utils::Lexer::regex("^Title: (.+)$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); -Gentoo::Utils::Lexer::PatternPtr DisplayIfInstalled(Gentoo::Utils::Lexer::regex("^Display-If-Installed: (.+)$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); -Gentoo::Utils::Lexer::PatternPtr Author(Gentoo::Utils::Lexer::regex("^Author: (.+) <([^>]+)>$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); -Gentoo::Utils::Lexer::PatternPtr Posted(Gentoo::Utils::Lexer::regex("^Posted: ([0-9]{4}-[0-9]{2}-[0-9]{2})$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); -Gentoo::Utils::Lexer::PatternPtr IgnoredHeader(Gentoo::Utils::Lexer::regex("^[^ :]+: .+$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); -Gentoo::Utils::Lexer::PatternPtr BlankLine(Gentoo::Utils::Lexer::regex("^$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); -Gentoo::Utils::Lexer::PatternPtr BodyText(Gentoo::Utils::Lexer::regex("^(.*)$\\s?", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); -Gentoo::Utils::Lexer::PatternPtr Link(Gentoo::Utils::Lexer::regex("^\\[[[:digit:]]+\\] ([[:alpha:]]+://.*)$\\s?", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr Title(AdHoc::LexerMatchers::regex("^Title: (.+)$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr DisplayIfInstalled(AdHoc::LexerMatchers::regex("^Display-If-Installed: (.+)$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr Author(AdHoc::LexerMatchers::regex("^Author: (.+) <([^>]+)>$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr Posted(AdHoc::LexerMatchers::regex("^Posted: ([0-9]{4}-[0-9]{2}-[0-9]{2})$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr IgnoredHeader(AdHoc::LexerMatchers::regex("^[^ :]+: .+$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr BlankLine(AdHoc::LexerMatchers::regex("^$\\s", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr BodyText(AdHoc::LexerMatchers::regex("^(.*)$\\s?", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE))); +AdHoc::Lexer::PatternPtr Link(AdHoc::LexerMatchers::regex("^\\[[[:digit:]]+\\] ([[:alpha:]]+://.*)$\\s?", (GRegexCompileFlags)(G_REGEX_OPTIMIZE | G_REGEX_MULTILINE)));  const std::string Body("Body"); @@ -32,49 +33,51 @@ namespace Portage {  			return rtn;  		} -		News::News() +		News::News() : +			AdHoc::Lexer({ +				// title: words +				{ { InitialState }, Title, [this](auto es) { +						news->title = *es->pattern()->match(1); +					} }, +				// posted: date +				{ { InitialState }, Posted, [this](auto es) { +						news->posted = *es->pattern()->match(1); +					} }, +				// display-if-installed: atomspec +				{ { InitialState }, DisplayIfInstalled, [this](auto es) { +						news->atomspec.push_back(*es->pattern()->match(1)); +					} }, +				// author: name <email> +				{ { InitialState }, Author, [this](auto es) { +						news->authorname = *es->pattern()->match(1); +						news->authoremail = *es->pattern()->match(2); +					} }, +				// other headers +				{ { InitialState }, IgnoredHeader, [this](auto) { +					} }, +				// blank +				{ { InitialState }, BlankLine, [this](auto es) { +						es->setState(Body); +						news->body.push_back(std::string()); +					} }, +				// body blank +				{ { Body }, BlankLine, [this](auto) { +						news->body.push_back(std::string()); +					} }, +				// link +				{ { Body }, Link, [this](auto es) { +						news->urls.push_back(*es->pattern()->match(1)); +					} }, +				// body text +				{ { Body }, BodyText, [this](auto es) { +						if (!news->body.back().empty()) { +							news->body.back().append(" "); +						} +						news->body.back().append(*es->pattern()->match(1)); +					} } +			}), +			news(new Gentoo::NewsItem())  		{ -			// title: words -			rules.push_back({ { InitialState }, Title, [this](auto es) { -					news->title = *es->pattern->match(1); -				} }); -			// posted: date -			rules.push_back({ { InitialState }, Posted, [this](auto es) { -					news->posted = *es->pattern->match(1); -				} }); -			// display-if-installed: atomspec -			rules.push_back({ { InitialState }, DisplayIfInstalled, [this](auto es) { -					news->atomspec.push_back(*es->pattern->match(1)); -				} }); -			// author: name <email> -			rules.push_back({ { InitialState }, Author, [this](auto es) { -					news->authorname = *es->pattern->match(1); -					news->authoremail = *es->pattern->match(2); -				} }); -			// other headers -			rules.push_back({ { InitialState }, IgnoredHeader, [this](auto) { -					} }); -			// blank -			rules.push_back({ { InitialState }, BlankLine, [this](auto es) { -					es->setState(Body); -					news->body.push_back(std::string()); -				} }); -			// body blank -			rules.push_back({ { Body }, BlankLine, [this](auto) { -					news->body.push_back(std::string()); -				} }); -			// link -			rules.push_back({ { Body }, Link, [this](auto es) { -					news->urls.push_back(*es->pattern->match(1)); -				} }); -			// body text -			rules.push_back({ { Body }, BodyText, [this](auto es) { -					if (!news->body.back().empty()) { -						news->body.back().append(" "); -					} -					news->body.back().append(*es->pattern->match(1)); -				} }); -			news = new Gentoo::NewsItem();  		}  		Gentoo::NewsItemPtr diff --git a/gentoobrowse-api/service/news.h b/gentoobrowse-api/service/news.h index 2887b5d..7c7b495 100644 --- a/gentoobrowse-api/service/news.h +++ b/gentoobrowse-api/service/news.h @@ -4,11 +4,11 @@  #include <istream>  #include <vector>  #include <portage-models.h> -#include "utils/lexer.h" +#include <lexer.h>  namespace Portage {  	namespace Utils { -		class News : Gentoo::Utils::Lexer { +		class News : AdHoc::Lexer {  			private:  				News(); diff --git a/gentoobrowse-api/service/utils/ebuildCacheParser.cpp b/gentoobrowse-api/service/utils/ebuildCacheParser.cpp index 068d10b..c305578 100644 --- a/gentoobrowse-api/service/utils/ebuildCacheParser.cpp +++ b/gentoobrowse-api/service/utils/ebuildCacheParser.cpp @@ -1,11 +1,9 @@  #include "ebuildCacheParser.h" -namespace U = Gentoo::Utils; -  namespace Gentoo {  	namespace Utils {  		EbuildCacheParser::EbuildCacheParser(const boost::filesystem::path & p) : -			U::MemMap(p) +			AdHoc::FileUtils::MemMap(p)  		{  			const char * chardata = (const char *)this->data;  			while (const char * eq = strchr(chardata, '=')) { diff --git a/gentoobrowse-api/service/utils/ebuildCacheParser.h b/gentoobrowse-api/service/utils/ebuildCacheParser.h index c7449c7..3aa5573 100644 --- a/gentoobrowse-api/service/utils/ebuildCacheParser.h +++ b/gentoobrowse-api/service/utils/ebuildCacheParser.h @@ -1,7 +1,7 @@  #ifndef GENTOOBROWSE_API_SERVICE_MAINTENANCE_EBUILDCACHEPARSER_H  #define GENTOOBROWSE_API_SERVICE_MAINTENANCE_EBUILDCACHEPARSER_H -#include "fileUtils.h" +#include <fileUtils.h>  #include <map>  #include <boost/optional.hpp>  #include <boost/filesystem/path.hpp> @@ -9,7 +9,7 @@  namespace Gentoo {  	namespace Utils { -		class EbuildCacheParser : public Gentoo::Utils::MemMap { +		class EbuildCacheParser : public AdHoc::FileUtils::MemMap {  			public:  				typedef std::pair<const char *, const char *> Range;  				typedef std::map<std::string, const Range> KVs; diff --git a/gentoobrowse-api/service/utils/fileUtils.cpp b/gentoobrowse-api/service/utils/fileUtils.cpp deleted file mode 100644 index 1446b9f..0000000 --- a/gentoobrowse-api/service/utils/fileUtils.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "fileUtils.h" -#include <fcntl.h> -#include <unistd.h> -#include <sys/mman.h> - -namespace Gentoo { -	namespace Utils { -		namespace File { -			boost::filesystem::path operator/(const boost::filesystem::path & p, unsigned int n) -			{ -				auto pp = p.begin(); -				while (n--) ++pp; -				return *pp; -			} -		} - -		FileHandle::FileHandle(const boost::filesystem::path & path) : -			fh(open(path.c_str(), O_RDONLY)) -		{ -			if (fh < 0) { -				throw std::runtime_error("Failed to open " + path.string()); -			} -		} - -		FileHandle::~FileHandle() -		{ -			close(fh); -		} - -		FileHandleStat::FileHandleStat(const boost::filesystem::path & path) : -			FileHandle(path) -		{ -			if (fstat(fh, &st)) { -				throw std::runtime_error("Failed to stat " + path.string()); -			} -		} - -		const struct stat & -		FileHandleStat::getStat() const -		{ -			return st; -		} - -		MemMap::MemMap(const boost::filesystem::path & path) : -			FileHandleStat(path), -			data(mmap(0, st.st_size, PROT_READ, MAP_SHARED, fh, 0)) -		{ -			if (data == (void*)-1) { -				throw std::runtime_error("Failed to mmap " + path.string()); -			} -		} - -		MemMap::~MemMap() -		{ -			munmap(data, st.st_size); -		} - -	} -} - diff --git a/gentoobrowse-api/service/utils/fileUtils.h b/gentoobrowse-api/service/utils/fileUtils.h deleted file mode 100644 index d73b1ef..0000000 --- a/gentoobrowse-api/service/utils/fileUtils.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef GENTOOBROWSE_API_SERVICE_FILEUTILS_H -#define GENTOOBROWSE_API_SERVICE_FILEUTILS_H - -#include <boost/filesystem/path.hpp> -#include <sys/stat.h> - -namespace Gentoo { -	namespace Utils { -		namespace File { -			boost::filesystem::path operator/(const boost::filesystem::path & p, unsigned int n); -		} - -		class FileHandle { -			public: -				FileHandle(const boost::filesystem::path & path); -				virtual ~FileHandle(); - -			protected: -				const int fh; -		}; - -		class FileHandleStat : public FileHandle { -			public: -				FileHandleStat(const boost::filesystem::path & path); - -				const struct stat & getStat() const; - -			protected: -				struct stat st; -		}; - -		class MemMap : public FileHandleStat { -			public: -				MemMap(const boost::filesystem::path & path); -				~MemMap(); - -				void * const data; -		}; - -	} -} - -#endif - - diff --git a/gentoobrowse-api/service/utils/lexer.cpp b/gentoobrowse-api/service/utils/lexer.cpp deleted file mode 100644 index a3352f8..0000000 --- a/gentoobrowse-api/service/utils/lexer.cpp +++ /dev/null @@ -1,137 +0,0 @@ -#include "lexer.h" - -namespace Gentoo { -	namespace Utils { -		const Lexer::State Lexer::InitialState = ""; - -		class Regex : public Lexer::Pattern { -			public: -				Regex(const Glib::ustring & pattern, GRegexCompileFlags compile, GRegexMatchFlags match) : -					err(nullptr), -					regex(g_regex_new(pattern.c_str(), compile, match, &err)), -					info(nullptr) -				{ -					if (!regex) { -						std::runtime_error e(std::string("Failed to create GRegex: ") + err->message); -						g_error_free(err); -						throw e; -					} -				} - -				~Regex() -				{ -					if (err) { -						g_error_free(err); -					} -					if (info) { -						g_match_info_free(info); -					} -					g_regex_unref(regex); -				} - -				bool matches(const gchar * string, size_t length, size_t position) const override -				{ -					if (info) { -						g_match_info_free(info); -					} -					g_regex_match_full(regex, string, length, position, G_REGEX_MATCH_ANCHORED, &info, &err); -					if (err) { -						std::runtime_error e(std::string("Failed to execute regex: ") + err->message); -						g_error_free(err); -						throw e; -					} -					str = string; -					return g_match_info_matches(info); -				} - -				size_t matchedLength() const override -				{ -					gint start, end; -					g_match_info_fetch_pos(info, 0, &start, &end); -					return end - start; -				} - -				boost::optional<Glib::ustring> match(int n) const override -				{ -					gint start, end; -					if (g_match_info_fetch_pos(info, n, &start, &end)) { -						if (start == -1 && end == -1) { -							return boost::optional<Glib::ustring>(); -						} -						return Glib::ustring(str + start, end - start); -					} -					return boost::optional<Glib::ustring>(); -				} - -			private: -				mutable GError * err; -				GRegex * regex; -				mutable GMatchInfo * info; -				mutable const gchar * str; -		}; - -		Lexer::PatternPtr -		Lexer::regex(const Glib::ustring & pattern, GRegexCompileFlags compile, GRegexMatchFlags match) -		{ -			return PatternPtr(new Regex(pattern, compile, match)); -		} - -		void -		Lexer::extract(const gchar * string, size_t length) const -		{ -			ExecuteState es; -			while (es.position < length) { -				const Rule * selected = nullptr; -				for (const auto & r : rules) { -					const auto & s = boost::get<0>(r); -					if (s.find(es.getState()) == s.end()) { -						continue; -					} -					const auto & p = boost::get<1>(r); -					if (p->matches(string, length, es.position)) { -						selected = &r; -						break; -					} -				} -				if (!selected) { -					throw std::runtime_error(std::string("Unexpected input in state (" + es.getState() + ") at ") + (string + es.position)); -				} -				es.pattern = boost::get<1>(*selected); -				const auto & h = boost::get<2>(*selected); -				h(&es); -				es.position += es.pattern->matchedLength(); -			} -			 -		} - -		Lexer::ExecuteState::ExecuteState() : -			position(0) -		{ -			stateStack.push_back(InitialState); -		} - -		void -		Lexer::ExecuteState::setState(const State & s) -		{ -			stateStack.back() = s; -		} - -		void -		Lexer::ExecuteState::pushState(const State & s) -		{ -			stateStack.push_back(s); -		} - -		void -		Lexer::ExecuteState::popState() -		{ -			stateStack.pop_back(); -		} - -		const Lexer::State & -		Lexer::ExecuteState::getState() const -		{ -			return stateStack.back(); -		} -	} -} diff --git a/gentoobrowse-api/service/utils/lexer.h b/gentoobrowse-api/service/utils/lexer.h deleted file mode 100644 index 44d3d57..0000000 --- a/gentoobrowse-api/service/utils/lexer.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef GENTOOBROWSE_SERVICE_UTILS_LEXER_H -#define GENTOOBROWSE_SERVICE_UTILS_LEXER_H - -#include <vector> -#include <glibmm/ustring.h> -#include <set> -#include <boost/tuple/tuple.hpp> -#include <boost/function.hpp> -#include <boost/shared_ptr.hpp> -#include <boost/optional.hpp> - -namespace Gentoo { -	namespace Utils { -		class Lexer { -			public: -				class Pattern { -					public: -						virtual ~Pattern() = default; - -						virtual bool matches(const gchar *, size_t, size_t) const = 0; -						virtual size_t matchedLength() const = 0; -						virtual boost::optional<Glib::ustring> match(int) const = 0; -				}; -				typedef boost::shared_ptr<Pattern> PatternPtr; - -				typedef std::string State; -				typedef std::set<State> States; - -				class ExecuteState { -					public: -						ExecuteState(); - -						void pushState(const State &); -						void popState(); -						void setState(const State &); -						const State & getState() const; - -						size_t position; -						PatternPtr pattern; - -					private: -						std::vector<State> stateStack; -				}; - -				typedef boost::function<void(ExecuteState *)> Handler; -				typedef boost::tuple<States, PatternPtr, Handler> Rule; -				typedef std::vector<Rule> Rules; - -				static const State InitialState; -				Rules rules; - -				static PatternPtr regex(const Glib::ustring &, GRegexCompileFlags compile = (GRegexCompileFlags)0, GRegexMatchFlags match = (GRegexMatchFlags)0); - -			public: -				void extract(const gchar * string, size_t length) const; -		}; - -	} -} - -#endif - diff --git a/gentoobrowse-api/unittests/Jamfile.jam b/gentoobrowse-api/unittests/Jamfile.jam index 0bedd4f..92501c0 100644 --- a/gentoobrowse-api/unittests/Jamfile.jam +++ b/gentoobrowse-api/unittests/Jamfile.jam @@ -43,7 +43,7 @@ lib testCommon :  	;  run -	testDepend.cpp ../service/depend.cpp ../service/utils/lexer.cpp +	testDepend.cpp ../service/depend.cpp  	: : :  	<define>BOOST_TEST_DYN_LINK  	<library>testCommon @@ -51,7 +51,7 @@ run  explicit testDependAll ;  run -	testDependAll.cpp ../service/utils/fileUtils.cpp ../service/utils/ebuildCacheParser.cpp ../service/depend.cpp ../service/utils/lexer.cpp +	testDependAll.cpp ../service/utils/ebuildCacheParser.cpp ../service/depend.cpp  	: : :  	<define>BOOST_TEST_DYN_LINK  	<library>testCommon @@ -66,7 +66,7 @@ run  	: testChangeLog ;  run -	testNews.cpp ../service/utils/fileUtils.cpp ../service/news.cpp ../service/utils/lexer.cpp +	testNews.cpp ../service/news.cpp  	: : :  	<define>BOOST_TEST_DYN_LINK  	<library>testCommon diff --git a/gentoobrowse-api/unittests/testNews.cpp b/gentoobrowse-api/unittests/testNews.cpp index 734a91e..291f49c 100644 --- a/gentoobrowse-api/unittests/testNews.cpp +++ b/gentoobrowse-api/unittests/testNews.cpp @@ -2,12 +2,12 @@  #include <boost/test/unit_test.hpp>  #include <news.h> -#include <utils/fileUtils.h> +#include <fileUtils.h>  #include <definedDirs.h>  BOOST_AUTO_TEST_CASE( news_2016_04_07_kde_plasma5_stable )  { -	Gentoo::Utils::MemMap m(rootDir / "fixtures" / "4156eb45cf3b0ce1d7125b84efd8688c2d6e831d" / "metadata" / "news" / "2016-04-07-kde-plasma5-stable" / "2016-04-07-kde-plasma5-stable.en.txt"); +	AdHoc::FileUtils::MemMap m(rootDir / "fixtures" / "4156eb45cf3b0ce1d7125b84efd8688c2d6e831d" / "metadata" / "news" / "2016-04-07-kde-plasma5-stable" / "2016-04-07-kde-plasma5-stable.en.txt");  	auto news = Portage::Utils::News::parse(reinterpret_cast<const gchar *>(m.data), m.getStat().st_size);  	BOOST_REQUIRE_EQUAL(news->title, "KDE Plasma 5 Upgrade");  	BOOST_REQUIRE(news->authorname); @@ -28,7 +28,7 @@ BOOST_AUTO_TEST_CASE( news_2016_04_07_kde_plasma5_stable )  BOOST_AUTO_TEST_CASE( news_2010_03_23_new_subprofiles )  { -	Gentoo::Utils::MemMap m(rootDir / "fixtures" / "4156eb45cf3b0ce1d7125b84efd8688c2d6e831d" / "metadata" / "news" / "2010-03-23-new-subprofiles" / "2010-03-23-new-subprofiles.en.txt"); +	AdHoc::FileUtils::MemMap m(rootDir / "fixtures" / "4156eb45cf3b0ce1d7125b84efd8688c2d6e831d" / "metadata" / "news" / "2010-03-23-new-subprofiles" / "2010-03-23-new-subprofiles.en.txt");  	auto news = Portage::Utils::News::parse(reinterpret_cast<const gchar *>(m.data), m.getStat().st_size);  	BOOST_REQUIRE_EQUAL(news->title, "New desktop subprofiles for GNOME and KDE");  	BOOST_REQUIRE(news->authorname); | 
