From 71b04e69a8a7c11e154bf19ea4e3598107dbc9ed Mon Sep 17 00:00:00 2001
From: Martin Zak <zakmart1@fit.cvut.cz>
Date: Mon, 11 Nov 2013 19:39:57 +0100
Subject: [PATCH] Adds formatting into GrammarPrinter

---
 alib/src/grammar/GrammarPrinter.cpp | 58 +++++++++++++++--------------
 alib/src/grammar/GrammarPrinter.h   | 15 ++++----
 2 files changed, 38 insertions(+), 35 deletions(-)

diff --git a/alib/src/grammar/GrammarPrinter.cpp b/alib/src/grammar/GrammarPrinter.cpp
index 10122134fd..fea3634a9a 100644
--- a/alib/src/grammar/GrammarPrinter.cpp
+++ b/alib/src/grammar/GrammarPrinter.cpp
@@ -9,58 +9,60 @@
 
 namespace grammar {
 
+const string GrammarPrinter::INDENTATION = "\t";
+
 void GrammarPrinter::toXML(const Grammar& grammar, ostream& out) {
 	out << "<grammar>\n";
-	printNonTerminals(grammar, out);
-	printTerminals(grammar, out);
-	printRules(grammar, out);
-	printStartSymbol(grammar, out);
+	printNonTerminalSymbols(grammar, out, INDENTATION);
+	printTerminalSymbols(grammar, out, INDENTATION);
+	printRules(grammar, out, INDENTATION);
+	printStartSymbol(grammar, out, INDENTATION);
 	out << "</grammar>\n";
 }
 
-void GrammarPrinter::printNonTerminals(const Grammar& grammar, ostream& out) {
-	out << "<nonTerminalSymbols>\n";
+void GrammarPrinter::printNonTerminalSymbols(const Grammar& grammar, ostream& out, string prefix) {
+	out << prefix << "<nonTerminalSymbols>\n";
 	for (auto &symbol : grammar.getNonTerminalSymbols()) {
-		symbol.toXML(out, "");
+		symbol.toXML(out, prefix + INDENTATION);
 	}
-	out << "</nonTerminalSymbols>\n";
+	out << prefix << "</nonTerminalSymbols>\n";
 }
 
-void GrammarPrinter::printTerminals(const Grammar& grammar, ostream& out) {
-	out << "<terminalSymbols>\n";
+void GrammarPrinter::printTerminalSymbols(const Grammar& grammar, ostream& out, string prefix) {
+	out << prefix << "<terminalSymbols>\n";
 	for (auto& symbol : grammar.getTerminalSymbols()) {
-		symbol.toXML(out, "");
+		symbol.toXML(out, prefix + INDENTATION);
 	}
-	out << "</terminalSymbols>\n";
+	out << prefix <<"</terminalSymbols>\n";
 }
 
-void GrammarPrinter::printRules(const Grammar& grammar, ostream& out) {
-	out << "<rules>\n";
+void GrammarPrinter::printRules(const Grammar& grammar, ostream& out, string prefix) {
+	out << prefix << "<rules>\n";
 	for (auto& rule : grammar.getRules()) {
-		printRule(rule, out);
+		printRule(rule, out, prefix + INDENTATION);
 	}
-	out << "</rules>\n";
+	out << prefix << "</rules>\n";
 }
 
-void GrammarPrinter::printRule(const Rule& rule, ostream& out) {
-	out << "<rule>\n";
-	out << "<leftSide>\n";
+void GrammarPrinter::printRule(const Rule& rule, ostream& out, string prefix) {
+	out << prefix << "<rule>\n";
+	out << prefix << INDENTATION << "<leftSide>\n";
 	for (auto& symbol : rule.getLeftSide()) {
-		symbol.toXML(out, "");
+		symbol.toXML(out, prefix + INDENTATION + INDENTATION);
 	}
-	out << "</leftSide>\n";
-	out << "<rightSide>\n";
+	out << prefix << INDENTATION << "</leftSide>\n";
+	out << prefix << INDENTATION << "<rightSide>\n";
 	for (auto& symbol : rule.getRightSide()) {
-		symbol.toXML(out, "");
+		symbol.toXML(out, prefix + INDENTATION + INDENTATION);
 	}
-	out << "</rightSide>\n";
-	out << "</rule>\n";
+	out << prefix << INDENTATION << "</rightSide>\n";
+	out << prefix << "</rule>\n";
 }
 
-void GrammarPrinter::printStartSymbol(const Grammar& grammar, ostream& out) {
-	out << "<startSymbol>";
+void GrammarPrinter::printStartSymbol(const Grammar& grammar, ostream& out, string prefix) {
+	out << prefix << "<startSymbol>";
 	out << grammar.getStartSymbol().getSymbol();
-	out << "</startSymbol>\n";
+	out <<"</startSymbol>\n";
 }
 
 } /* namespace grammar */
diff --git a/alib/src/grammar/GrammarPrinter.h b/alib/src/grammar/GrammarPrinter.h
index 28a15c0bea..c3ad03b67b 100644
--- a/alib/src/grammar/GrammarPrinter.h
+++ b/alib/src/grammar/GrammarPrinter.h
@@ -16,15 +16,16 @@ namespace grammar {
 using namespace std;
 
 class GrammarPrinter {
-public:
-	static void toXML(const Grammar& grammar, ostream& out);
 protected:
-	static void printNonTerminals(const Grammar& grammar, ostream& out);
-	static void printTerminals(const Grammar& grammar, ostream& out);
-	static void printRules(const Grammar& grammar, ostream& out);
-	static void printRule(const Rule& rule, ostream& out);
-	static void printStartSymbol(const Grammar& grammar, ostream& out);
+	static const string INDENTATION;
 
+	static void printNonTerminalSymbols(const Grammar& grammar, ostream& out, string prefix);
+	static void printTerminalSymbols(const Grammar& grammar, ostream& out, string prefix);
+	static void printRules(const Grammar& grammar, ostream& out, string prefix);
+	static void printRule(const Rule& rule, ostream& out, string prefix);
+	static void printStartSymbol(const Grammar& grammar, ostream& out, string prefix);
+public:
+	static void toXML(const Grammar& grammar, ostream& out);
 };
 
 } /* namespace grammar */
-- 
GitLab