From bf447b47a5412ada018dea62512aa0f19b79f711 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Wed, 14 Jul 2021 12:39:55 +0000
Subject: [PATCH] moved into headers and code files

---
 gens/dot.h   |  159 ++-----------------------
 gens.h       |    1 
 gens/dot.cpp |  146 ++++++++++++++++++++++++
 3 files changed, 164 insertions(+), 142 deletions(-)

diff --git a/gens.h b/gens.h
new file mode 100644
index 0000000..f48784f
--- /dev/null
+++ b/gens.h
@@ -0,0 +1 @@
+#include "gens/dot.h"
diff --git a/gens/dot.cpp b/gens/dot.cpp
new file mode 100644
index 0000000..9f987b7
--- /dev/null
+++ b/gens/dot.cpp
@@ -0,0 +1,146 @@
+#include <fstream>
+#include <iostream>
+#include <string>
+#include "../ast.h"
+#include "../gens.h"
+
+dot_gen::dot_gen(std::string fname) {
+	out.open(fname);
+}
+
+dot_gen::~dot_gen() {
+	out.close();
+}
+
+std::string* dot_gen::new_node() {
+	std::string *o = new std::string();
+	*o = "Node"+std::to_string(node_cnt++);
+	return o;
+}
+
+void* dot_gen::visit_Document(Document *d) {
+	out << "digraph ast {" << std::endl;
+	node_cnt = 0;
+	std::string *doc_id = new_node();
+	out << *doc_id << " [label=\"Document\"];" << std::endl;
+	std::vector<Block*> *b = d->get_blocks();
+	for (std::vector<Block*>::size_type i = 0; i < b->size(); i++) {
+		std::string* ret_id = (std::string *)(*b)[i]->visit(this);
+		out << *doc_id << "->" << *ret_id << ";" << std::endl;
+		delete ret_id;
+	}
+	out << "}" << std::endl;
+	delete doc_id;
+	return NULL;
+}
+
+void* dot_gen::visit_Block_Table(Block_Table *bt) {
+	std::string *b_id = new_node();
+	out << *b_id << " [label=\"Block Table\"];" << std::endl;
+	return b_id;
+}
+
+void* dot_gen::visit_Block_Code(Block_Code *bc) {
+	std::string *c_id = new_node();
+	out << *c_id << " [label=\"Block Code(" << *(bc->get_lang()) << ")];" << std::endl;
+	return c_id;
+}
+
+void* dot_gen::visit_Block_Line(Block_Line *bl) {
+	std::string *bl_id = new_node();
+	std::vector<Line*> *l = bl->get_lines();
+	out << *bl_id << " [label=\"Block Line\"];" << std::endl;
+	for (std::vector<Line*>::size_type i = 0; i < l->size(); i++) {
+		std::string *ret_id = (std::string*)(*l)[i]->visit(this);
+		out << *bl_id << "->" << *ret_id << ";" << std::endl;
+		delete ret_id;
+	}
+	return bl_id;
+}
+
+void* dot_gen::visit_Heading(Heading *h) {
+	std::string *h_id = new_node();
+	std::vector<Word*> *w = h->get_words();
+	out << *h_id << " [label=\"Heading\"];" << std::endl;
+	for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
+		std::string *ret_id = (std::string*)(*w)[i]->visit(this);
+		out << *h_id << "->" << *ret_id << ";" << std::endl;
+		delete ret_id;
+	}
+	return h_id;
+}
+
+void* dot_gen::visit_List(List *l) {
+	std::string *l_id = new_node();
+	std::vector<Word*> *w = l->get_words();
+	out << *l_id << " [label=\"List(l: " << l->get_level() << ", n:" << l->get_number() << "\"];" << std::endl;
+	for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
+		std::string *ret_id = (std::string*)(*w)[i]->visit(this);
+		out << *l_id << "->" << *ret_id << ";" << std::endl;
+		delete ret_id;
+	}
+	return l_id;
+}
+
+void* dot_gen::visit_MathDisp(MathDisp *md) {
+	std::string *md_id = new_node();
+	out << *md_id << " [label=\"MathDisp(" << *(md->get_expr()) << ")\"];" << std::endl;
+	return md_id;
+}
+
+void* dot_gen::visit_Line_Word(Line_Word *lw) {
+	std::string *lw_id = new_node();
+	std::vector<Word*> *w = lw->get_words();
+	out << *lw_id << " [label=\"Line Word\"];" << std::endl;
+	for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
+		std::string *ret_id = (std::string*)(*w)[i]->visit(this);
+		out << *lw_id << "->" << *ret_id << ";" << std::endl;
+		delete ret_id;
+	}
+	return lw_id;
+}
+
+void* dot_gen::visit_MathInline(MathInline *mi) {
+	std::string *mi_id = new_node();
+	out << *mi_id << " [label=\"Math Inline(" << *(mi->get_expr()) << ")];" << std::endl;
+	return mi_id;
+}
+
+void* dot_gen::visit_Link(Link *l) {
+	std::string *l_id = new_node();
+	out << *l_id << " [label=\"Link(" << l->get_link() << "," << l->get_text() << ")\"];" << std::endl;
+	return l_id;
+}
+
+void* dot_gen::visit_Text(Text *t) {
+	std::string *t_id = new_node();
+	out << *t_id << " [label=\"Text(" << *(t->get_text()) << ")\"];" << std::endl;
+	return t_id;
+}
+
+void* dot_gen::visit_Format_Bold(Format_Bold *fb) {
+	std::string *fb_id = new_node();
+	out << *fb_id << " [label=\"Format Bold\"];" << std::endl;
+	std::string *ret_id = (std::string*)fb->get_f()->visit(this);
+	out << *fb_id << "->" << *ret_id << ";" << std::endl;
+	delete ret_id;
+	return fb_id;
+}
+
+void* dot_gen::visit_Format_Italic(Format_Italic *fi) {
+	std::string *fi_id = new_node();
+	out << *fi_id << " [label=\"Format Italic\"];" << std::endl;
+	std::string *ret_id = (std::string*)fi->get_f()->visit(this);
+	out << *fi_id << "->" << *ret_id << ";" << std::endl;
+	delete ret_id;
+	return fi_id;
+}
+
+void* dot_gen::visit_Format_Verbatim(Format_Verbatim *fv) {
+	std::string *fv_id = new_node();
+	out << *fv_id << " [label=\"Format Verbatim\"];" << std::endl;
+	std::string *ret_id = (std::string*)fv->get_f()->visit(this);
+	out << *fv_id << "->" << *ret_id << ";" << std::endl;
+	delete ret_id;
+	return fv_id;
+}
diff --git a/gens/dot.h b/gens/dot.h
index fa8cd94..748215e 100644
--- a/gens/dot.h
+++ b/gens/dot.h
@@ -1,153 +1,28 @@
 #ifndef DOT_H
 #define DOT_H
 #include <fstream>
-#include <iostream>
-#include <string>
 #include "../ast.h"
-#include "../gens.h"
 
 class dot_gen: public ast_visitor {
 	std::ofstream out;
 	int node_cnt;
 public:
-	dot_gen(std::string fname) {
-		out.open(fname);
-	}
-	~dot_gen() {
-		out.close();
-	}
-
-	std::string *new_node() {
-		std::string *o = new std::string();
-		*o = "Node"+std::to_string(node_cnt++);
-		return o;
-	}
-
-	void* visit_Document(Document *d) {
-		out << "digraph ast {" << std::endl;
-		node_cnt = 0;
-		std::string *doc_id = new_node();
-		out << *doc_id << " [label=\"Document\"];" << std::endl;
-		std::vector<Block*> *b = d->get_blocks();
-		for (std::vector<Block*>::size_type i = 0; i < b->size(); i++) {
-			std::string* ret_id = (std::string *)(*b)[i]->visit(this);
-			out << *doc_id << "->" << *ret_id << ";" << std::endl;
-			delete ret_id;
-		}
-		out << "}" << std::endl;
-		delete doc_id;
-		return NULL;
-	}
-
-	void* visit_Block_Table(Block_Table *bt) {
-		std::string *b_id = new_node();
-		out << *b_id << " [label=\"Block Table\"];" << std::endl;
-		return b_id;
-	}
-
-	void* visit_Block_Code(Block_Code *bc) {
-		std::string *c_id = new_node();
-		out << *c_id << " [label=\"Block Code(" << *(bc->get_lang()) << ")];" << std::endl;
-		return c_id;
-	}
-
-	void* visit_Block_Line(Block_Line *bl) {
-		std::string *bl_id = new_node();
-		std::vector<Line*> *l = bl->get_lines();
-		out << *bl_id << " [label=\"Block Line\"];" << std::endl;
-		for (std::vector<Line*>::size_type i = 0; i < l->size(); i++) {
-			std::string *ret_id = (std::string*)(*l)[i]->visit(this);
-			out << *bl_id << "->" << *ret_id << ";" << std::endl;
-			delete ret_id;
-		}
-		return bl_id;
-	}
-
-	void* visit_Heading(Heading *h) {
-		std::string *h_id = new_node();
-		std::vector<Word*> *w = h->get_words();
-		out << *h_id << " [label=\"Heading\"];" << std::endl;
-		for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
-			std::string *ret_id = (std::string*)(*w)[i]->visit(this);
-			out << *h_id << "->" << *ret_id << ";" << std::endl;
-			delete ret_id;
-		}
-		return h_id;
-	}
-
-	void* visit_List(List *l) {
-		std::string *l_id = new_node();
-		std::vector<Word*> *w = l->get_words();
-		out << *l_id << " [label=\"List(l: " << l->get_level() << ", n:" << l->get_number() << "\"];" << std::endl;
-		for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
-			std::string *ret_id = (std::string*)(*w)[i]->visit(this);
-			out << *l_id << "->" << *ret_id << ";" << std::endl;
-			delete ret_id;
-		}
-		return l_id;
-	}
-
-	void* visit_MathDisp(MathDisp *md) {
-		std::string *md_id = new_node();
-		out << *md_id << " [label=\"MathDisp(" << *(md->get_expr()) << ")\"];" << std::endl;
-		return md_id;
-	}
-
-	void* visit_Line_Word(Line_Word *lw) {
-		std::string *lw_id = new_node();
-		std::vector<Word*> *w = lw->get_words();
-		out << *lw_id << " [label=\"Line Word\"];" << std::endl;
-		for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
-			std::string *ret_id = (std::string*)(*w)[i]->visit(this);
-			out << *lw_id << "->" << *ret_id << ";" << std::endl;
-			delete ret_id;
-		}
-		return lw_id;
-	}
-
-	void* visit_MathInline(MathInline *mi) {
-		std::string *mi_id = new_node();
-		out << *mi_id << " [label=\"Math Inline(" << *(mi->get_expr()) << ")];" << std::endl;
-		return mi_id;
-	}
-
-	void* visit_Link(Link *l) {
-		std::string *l_id = new_node();
-		out << *l_id << " [label=\"Link(" << l->get_link() << "," << l->get_text() << ")\"];" << std::endl;
-		return l_id;
-	}
-
-	void* visit_Text(Text *t) {
-		std::string *t_id = new_node();
-		out << *t_id << " [label=\"Text(" << *(t->get_text()) << ")\"];" << std::endl;
-		return t_id;
-	}
-
-	void* visit_Format_Bold(Format_Bold *fb) {
-		std::string *fb_id = new_node();
-		out << *fb_id << " [label=\"Format Bold\"];" << std::endl;
-		std::string *ret_id = (std::string*)fb->get_f()->visit(this);
-		out << *fb_id << "->" << *ret_id << ";" << std::endl;
-		delete ret_id;
-		return fb_id;
-	}
-
-	void* visit_Format_Italic(Format_Italic *fi) {
-		std::string *fi_id = new_node();
-		out << *fi_id << " [label=\"Format Italic\"];" << std::endl;
-		std::string *ret_id = (std::string*)fi->get_f()->visit(this);
-		out << *fi_id << "->" << *ret_id << ";" << std::endl;
-		delete ret_id;
-		return fi_id;
-	}
-
-	void* visit_Format_Verbatim(Format_Verbatim *fv) {
-		std::string *fv_id = new_node();
-		out << *fv_id << " [label=\"Format Verbatim\"];" << std::endl;
-		std::string *ret_id = (std::string*)fv->get_f()->visit(this);
-		out << *fv_id << "->" << *ret_id << ";" << std::endl;
-		delete ret_id;
-		return fv_id;
-	}
+	dot_gen(std::string fname);
+	~dot_gen();
+	std::string* new_node();
+	void* visit_Document(Document *d);
+	void* visit_Block_Table(Block_Table *bt);
+	void* visit_Block_Code(Block_Code *bc);
+	void* visit_Block_Line(Block_Line *bl);
+	void* visit_Heading(Heading *h);
+	void* visit_List(List *l);
+	void* visit_MathDisp(MathDisp *md);
+	void* visit_Line_Word(Line_Word *lw);
+	void* visit_MathInline(MathInline *mi);
+	void* visit_Link(Link *l);
+	void* visit_Text(Text *t);
+	void* visit_Format_Bold(Format_Bold *fb);
+	void* visit_Format_Italic(Format_Italic *fi);
+	void* visit_Format_Verbatim(Format_Verbatim *fv);
 };
 #endif

--
Gitblit v1.10.0