#include "ast.h" #include #include MathInline::MathInline(std::string e) { expr = e; } std::string MathInline::get_expr() { return expr; } void *MathInline::visit(ast_visitor *v) { return v->visit_MathInline(this); } Link::Link(std::string l, std::string t) { link = l; text = t; } std::string Link::get_link() { return link; } std::string Link::get_text() { return text; } void *Link::visit(ast_visitor *v) { return v->visit_Link(this); } Text::Text(std::string tt) { t = tt; } std::string Text::get_text() { return t; } void *Text::visit(ast_visitor *v) { return v->visit_Text(this); } Format_Bold::Format_Bold(Format *ff) { f = ff; } Format_Bold::~Format_Bold() { delete f; } Format *Format_Bold::get_f() { return f; } void *Format_Bold::visit(ast_visitor *v) { return v->visit_Format_Bold(this); } Format_Italic::Format_Italic(Format *ff) { f = ff; } Format_Italic::~Format_Italic() { delete f; } Format *Format_Italic::get_f() { return f; } void *Format_Italic::visit(ast_visitor *v) { return v->visit_Format_Italic(this); } Format_Verbatim::Format_Verbatim(Format *ff) { f = ff; } Format_Verbatim::~Format_Verbatim() { delete f; } Format *Format_Verbatim::get_f() { return f; } void *Format_Verbatim::visit(ast_visitor *v) { return v->visit_Format_Verbatim(this); } Format_Underline::Format_Underline(Format *ff) { f = ff; } Format_Underline::~Format_Underline() { delete f; } Format *Format_Underline::get_f() { return f; } void *Format_Underline::visit(ast_visitor *v) { return v->visit_Format_Underline(this); } Format_Strikethrough::Format_Strikethrough(Format *ff) { f = ff; } Format_Strikethrough::~Format_Strikethrough() { delete f; } Format *Format_Strikethrough::get_f() { return f; } void *Format_Strikethrough::visit(ast_visitor *v) { return v->visit_Format_Strikethrough(this); } Heading::Heading(int l, Line_Word *w) { level = l; words = w; } Heading::~Heading() { delete words; } int Heading::get_level() { return level; } Line_Word *Heading::get_words() { return words; } void *Heading::visit(ast_visitor *v) { return v->visit_Heading(this); } List::List(int l, int n, Line_Word *w) { level = l; number = n; words = w; } List::~List() { delete words; } int List::get_level() { return level; } int List::get_number() { return number; } Line_Word *List::get_words() { return words; } void *List::visit(ast_visitor *v) { return v->visit_List(this); } MathDisp::MathDisp(std::string e) { expr = e; } std::string MathDisp::get_expr() { return expr; } void *MathDisp::visit(ast_visitor *v) { return v->visit_MathDisp(this); } Line_Word::~Line_Word() { for (std::vector::size_type i = 0; i < words.size(); i++) { delete words[i]; } words.clear(); } int Line_Word::add_word(Word *w) { words.push_back(w); return 0; } std::vector *Line_Word::get_words() { return &words; } void *Line_Word::visit(ast_visitor *v) { return v->visit_Line_Word(this); } Block_Table::~Block_Table() { for (std::vector *>::size_type i = 0; i < table.size(); i++) { std::vector *t = table[i]; for (std::vector::size_type j = 0; j < t->size(); j++) { delete (*t)[j]; } t->clear(); delete t; } table.clear(); } std::vector *> *Block_Table::get_table() { return &table; } int Block_Table::add_row(std::vector *row) { table.push_back(row); return 0; } std::vector * Block_Table::get_row(std::vector::size_type i) { if (i < table.size()) { return table[i]; } else { return NULL; } } void *Block_Table::visit(ast_visitor *v) { return v->visit_Block_Table(this); } Block_Code::Block_Code(std::string l) { lang = l; c = ""; } int Block_Code::add_line(std::string add) { c = c + add + "\n"; return 0; } std::string Block_Code::get_lang() { return lang; } std::string Block_Code::get_code() { return c; } void *Block_Code::visit(ast_visitor *v) { return v->visit_Block_Code(this); } Block_Word::Block_Word(Line_Word *lw) { words = lw; } Block_Word::~Block_Word() { delete words; } int Block_Word::add_word(Word *w) { return words->add_word(w); } Line_Word *Block_Word::get_words() { return words; } void *Block_Word::visit(ast_visitor *v) { return v->visit_Block_Word(this); } Document::Document(std::string t, std::string a, std::string d) { title = t; author = a; date = d; } Document::~Document() { for (std::vector::size_type i = 0; i < blocks.size(); i++) { delete blocks[i]; } blocks.clear(); } std::string Document::get_title() { return title; } std::string Document::get_author() { return author; } std::string Document::get_date() { return date; } std::vector *Document::get_blocks() { return &blocks; } int Document::add_block(Block *b) { blocks.push_back(b); return 0; } void *Document::visit(ast_visitor *v) { return v->visit_Document(this); }