From 7bf8c8a84d9820577f308a2cf97e0a3d1b8c62f6 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sat, 28 Jun 2014 21:10:53 +0200
Subject: [PATCH] features of regexp

---
 alib2/src/regexp/RegExpFeatures.h           | 19 +++++++++++++++++++
 alib2/src/regexp/RegExpFromStringParser.cpp |  5 +++++
 alib2/src/regexp/RegExpFromStringParser.h   |  2 ++
 alib2/src/regexp/RegExpFromXMLParser.cpp    |  5 +++++
 alib2/src/regexp/RegExpFromXMLParser.h      |  4 +++-
 5 files changed, 34 insertions(+), 1 deletion(-)
 create mode 100644 alib2/src/regexp/RegExpFeatures.h

diff --git a/alib2/src/regexp/RegExpFeatures.h b/alib2/src/regexp/RegExpFeatures.h
new file mode 100644
index 0000000000..a1b64f7ced
--- /dev/null
+++ b/alib2/src/regexp/RegExpFeatures.h
@@ -0,0 +1,19 @@
+/*
+ * RegExpFeatures.h
+ *
+ *  Created on: Jun 19, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef REG_EXP_FEATURES_H_
+#define REG_EXP_FEATURES_H_
+
+namespace regexp {
+
+enum class FEATURES {
+	COMPACT
+};
+
+} /* namespace regexp */
+
+#endif /* REG_EXP_FEATURES_H_ */
diff --git a/alib2/src/regexp/RegExpFromStringParser.cpp b/alib2/src/regexp/RegExpFromStringParser.cpp
index 77995d4cb6..5af3a1e1a7 100644
--- a/alib2/src/regexp/RegExpFromStringParser.cpp
+++ b/alib2/src/regexp/RegExpFromStringParser.cpp
@@ -9,6 +9,11 @@ RegExpFromStringParser::RegExpFromStringParser(std::stringstream& input) : m_Reg
 }
 
 RegExp RegExpFromStringParser::parse() {
+	return parse(std::set<FEATURES>({FEATURES::COMPACT}));
+}
+
+RegExp RegExpFromStringParser::parse(const std::set<FEATURES>& features) {
+	if(!features.count(FEATURES::COMPACT)) throw alib::AlibException();
 	RegExpElement* element = this->alternation();
 	RegExp regexp(std::move(*element));
 	delete element;
diff --git a/alib2/src/regexp/RegExpFromStringParser.h b/alib2/src/regexp/RegExpFromStringParser.h
index f7775f82bb..f12db58fa6 100644
--- a/alib2/src/regexp/RegExpFromStringParser.h
+++ b/alib2/src/regexp/RegExpFromStringParser.h
@@ -13,6 +13,7 @@
 
 #include "RegExpFromStringLexer.h"
 #include "../alphabet/SymbolFromStringParser.h"
+#include "RegExpFeatures.h"
 
 namespace regexp {
 
@@ -32,6 +33,7 @@ class RegExpFromStringParser {
 	alphabet::SymbolFromStringParser m_SymbolParser;
 
 	RegExp parse();
+	RegExp parse(const std::set<FEATURES>& features);
 	RegExp* parsePointer();
 public:
 	RegExpFromStringParser(std::stringstream&);
diff --git a/alib2/src/regexp/RegExpFromXMLParser.cpp b/alib2/src/regexp/RegExpFromXMLParser.cpp
index 9d29abb388..ef747b99e4 100644
--- a/alib2/src/regexp/RegExpFromXMLParser.cpp
+++ b/alib2/src/regexp/RegExpFromXMLParser.cpp
@@ -14,6 +14,11 @@
 namespace regexp {
 
 RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input) const {
+	return parse(input, std::set<FEATURES>({FEATURES::COMPACT}));
+}
+
+RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const {
+	if(!features.count(FEATURES::COMPACT)) throw alib::AlibException();
 	popToken(input, sax::Token::TokenType::START_ELEMENT, "regexp");
 	
 	RegExp regexp;
diff --git a/alib2/src/regexp/RegExpFromXMLParser.h b/alib2/src/regexp/RegExpFromXMLParser.h
index 6ce576a756..5d868d9a03 100644
--- a/alib2/src/regexp/RegExpFromXMLParser.h
+++ b/alib2/src/regexp/RegExpFromXMLParser.h
@@ -10,6 +10,7 @@
 
 #include "../sax/FromXMLParser.h"
 #include "RegExp.h"
+#include "RegExpFeatures.h"
 #include "RegExpElements.h"
 #include "../sax/Token.h"
 #include "../alphabet/Symbol.h"
@@ -21,7 +22,7 @@ namespace regexp {
  */
 class RegExpFromXMLParser : public sax::FromXMLParser {
 	void parseAlphabet(std::list<sax::Token>& input, RegExp& regexp) const;
-  
+
 	RegExpElement* parseElement(std::list<sax::Token>& input) const;
 
 	RegExpEpsilon* parseEpsilon(std::list<sax::Token>& input) const;
@@ -31,6 +32,7 @@ class RegExpFromXMLParser : public sax::FromXMLParser {
 	Concatenation* parseConcatenation(std::list<sax::Token> &input) const;
 
 	RegExp parse(std::list<sax::Token>& input) const;
+	RegExp parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const;
 	RegExp* parsePointer(std::list<sax::Token>& input) const;
 public:
 	/**
-- 
GitLab