From 538459a8abf62bc85cc73b9e4eab9c29f732b282 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Tue, 20 Jul 2021 14:02:56 +0000
Subject: [PATCH] Added test document parser to check generators

---
 main.cpp           |   21 ++++------
 parsers.h          |   14 +++++++
 parsers/tester.h   |   11 +++++
 parsers/tester.cpp |   73 ++++++++++++++++++++++++++++++++++++
 4 files changed, 107 insertions(+), 12 deletions(-)

diff --git a/main.cpp b/main.cpp
index 07f61cb..9105006 100644
--- a/main.cpp
+++ b/main.cpp
@@ -2,21 +2,18 @@
 #include <string>
 #include "ast.h"
 #include "gens.h"
+#include "parsers.h"
 
 int main(int argc, char** argv)
 {
-	Document *d = new Document(NULL, NULL, NULL);
-	Block_Line *b = new Block_Line();
-	Line_Word *lw = new Line_Word();
-	std::string s = "Hello";
-	dot_gen *v = new dot_gen("temp.dot");
+	Document *d;
+	parser *p = new tester();
+	gen *g = new dot_gen();
+	g->set_file("temp.dot");
+	d = p->parse();
+	d->visit(g);
 
-	d->add_block(b);
-	b->add_line(lw);
-	lw->add_word(new Format_Bold(new Text("Hello")));
-	lw->add_word(new Format_Italic(new Text("World")));
-	lw->add_word(new Text("Test"));
-	d->visit(v);
+	delete p;
+	delete g;
 	delete d;
-	delete v;
 }
diff --git a/parsers.h b/parsers.h
new file mode 100644
index 0000000..8ba827b
--- /dev/null
+++ b/parsers.h
@@ -0,0 +1,14 @@
+#ifndef PARSERS_H
+#define PARSERS_H
+#include <string>
+#include "ast.h"
+
+class parser {
+public:
+	virtual ~parser()=default;
+	virtual void set_file(std::string file_name)=0;
+	virtual Document* parse()=0;
+};
+
+#include "parsers/tester.h"
+#endif
diff --git a/parsers/tester.cpp b/parsers/tester.cpp
new file mode 100644
index 0000000..bfbdbda
--- /dev/null
+++ b/parsers/tester.cpp
@@ -0,0 +1,73 @@
+#include <string>
+#include "../ast.h"
+#include "tester.h"
+
+void tester::set_file(std::string file_name)
+{
+	return;
+}
+
+Document* tester::parse()
+{
+	Document *d = new Document("a","b","c");
+
+	//block line test
+	Block_Line *bl = new Block_Line();
+	Line_Word *lw = new Line_Word();
+	d->add_block(bl);
+	bl->add_line(lw);
+	lw->add_word(new Format_Bold(new Text("Bold")));
+	lw->add_word(new Format_Italic(new Text("Italic")));
+	lw->add_word(new Format_Verbatim(new Text("Verbatim")));
+	lw->add_word(new Text("Text"));
+	lw->add_word(new Format_Bold(new Format_Italic(new Text("BoldItalic"))));
+	lw->add_word(new MathInline("1+1=2"));
+	lw->add_word(new Link("link","text"));
+
+	//heading test
+	lw = new Line_Word();
+	lw->add_word(new Text("heading"));
+	Heading *h = new Heading(1, lw);
+	bl->add_line(h);
+
+	//list test
+	lw = new Line_Word();
+	lw->add_word(new Text("ordered"));
+	List *l = new List(1,1,lw);
+	bl->add_line(l);
+	lw = new Line_Word();
+	lw->add_word(new Text("unordered"));
+	l = new List(1,0,lw);
+	bl->add_line(l);
+
+	//mathdisp test
+	bl->add_line(new MathDisp("1+1=2"));
+
+	//table test
+	Block_Table *bt = new Block_Table();
+	std::vector<Line_Word*>* row = new std::vector<Line_Word*>();
+	lw = new Line_Word();
+	lw->add_word(new Text("Table1"));
+	row->push_back(lw);
+	lw = new Line_Word();
+	lw->add_word(new Text("Table2"));
+	row->push_back(lw);
+	bt->add_row(row);
+	row = new std::vector<Line_Word*>();
+	lw = new Line_Word();
+	lw->add_word(new Text("Table3"));
+	row->push_back(lw);
+	lw = new Line_Word();
+	lw->add_word(new Text("Table4"));
+	row->push_back(lw);
+	bt->add_row(row);
+	d->add_block(bt);
+
+	//code test
+	Block_Code *bc = new Block_Code("C");
+	bc->add_line("#include <stdio.h>");
+	bc->add_line("int main(void)\n{\nprintf(\"Hello World!\\n\");\n}");
+	d->add_block(bc);
+
+	return d;
+}
diff --git a/parsers/tester.h b/parsers/tester.h
new file mode 100644
index 0000000..7c287fe
--- /dev/null
+++ b/parsers/tester.h
@@ -0,0 +1,11 @@
+#ifndef TESTER_H
+#define TESTER_H
+#include "../parsers.h"
+#include "../ast.h"
+
+class tester: public parser {
+public:
+	void set_file(std::string file_name);
+	Document* parse();
+};
+#endif

--
Gitblit v1.10.0