X-Git-Url: https://harishankar.org/repos/?p=biaweb2.git;a=blobdiff_plain;f=biawebdocumenttree.hpp;h=e1e64010e063063b6c1198a8fe0fd14a3c476281;hp=9122feb5cbd6bc09249d762acaf1ae621932cf15;hb=eda0b06c5328e232e12e0535528a528493caa90a;hpb=44d5fb1ff24147859c5f198dd47f6956ec5fea51 diff --git a/biawebdocumenttree.hpp b/biawebdocumenttree.hpp index 9122feb..e1e6401 100644 --- a/biawebdocumenttree.hpp +++ b/biawebdocumenttree.hpp @@ -11,6 +11,7 @@ #include "biawebstrings.hpp" #include "biawebutil.hpp" #include "biawebdoclist.hpp" +#include "biawebtemplate.hpp" // class to implement a document tree - both with or without subtrees namespace biaweb { @@ -29,17 +30,12 @@ namespace biaweb { std::string stub; // list of documents in this tree std::list docs; - // common strings used for template generation - std::array doc_strings; // set the parent - protected function as this has to be // called only by add_child void set_parent (DocumentTree *parent) { this->parent = parent; } - // load document generation strings from file stringbits.txt from template dir - void load_doc_strings (std::string templatedir); - public: // method to build a document tree from a path void document_tree_builder (std::string srcpath); @@ -77,7 +73,7 @@ namespace biaweb { } // create the document index for this tree - void create_tree_html (std::string templatedir, std::string destdir); + void create_tree_html (Template *t, std::string destdir); // set the title void set_title (std::string title) { @@ -136,22 +132,6 @@ namespace biaweb { return lev; } - // load document generation strings from file stringbits.txt from template dir - void DocumentTree::load_doc_strings (std::string templatedir) { - // load the template file - std::ifstream stringsfile (templatedir + "/stringbits.txt"); - - std::string line; - // read line by line and append it to doc_strings - int i = 0; - while (! stringsfile.eof () && i < this->doc_strings.size ()) { - std::getline (stringsfile, line); - this->doc_strings[i] = line; - i ++; - } - stringsfile.close (); - } - // get the stub hierarchy for this tree std::string DocumentTree::stub_hierarchy () { std::list levels; @@ -185,9 +165,7 @@ namespace biaweb { // create the tree - the index file for this tree and all the documents and // the child trees recursively - using the template specified - void DocumentTree::create_tree_html (std::string templatedir, std::string destdir) { - // load the document string bits to be used in templates - this->load_doc_strings (templatedir); + void DocumentTree::create_tree_html (Template *tpl, std::string destdir) { // create a document to represent the index of the tree. std::unique_ptr index (new Document (this->title)); @@ -208,13 +186,13 @@ namespace biaweb { // If this tree has a parent, create a sidebar link to the level up std::unique_ptr bar1 (new SideBar()); GenericLinkItem item0; - bar1.get()->set_title (this->doc_strings [NAVIGATION]); - item0.set_item_text (this->doc_strings[INDEX]); + bar1.get()->set_title (tpl->get_stringbit (NAVIGATION)); + item0.set_item_text (tpl->get_stringbit (INDEX)); item0.set_item_url (urlpath + "index.html"); bar1.get()->add_sidebar_item (item0); if (this->get_parent() != nullptr) { GenericLinkItem item1; - item1.set_item_text (this->doc_strings[GO_UP]); + item1.set_item_text (tpl->get_stringbit(GO_UP)); item1.set_item_url (this->stub_hierarchy() + "index.html"); bar1.get()->add_sidebar_item (item1); } @@ -222,7 +200,7 @@ namespace biaweb { // create a sidebar for the child levels if there are children std::unique_ptr bar2 (new SideBar ()); - bar2.get()->set_title (this->doc_strings[SUB_CAT] + this->title); + bar2.get()->set_title (tpl->get_stringbit (SUB_CAT) + this->title); for (DocumentTree tree : this->children) { // we use site relative URLs that rely on the base href tag // so for biaweb generated sites, the base href tag should be @@ -238,7 +216,7 @@ namespace biaweb { // Create the list of documents in this tree with links std::unique_ptr article_list (new DocList ()); - article_list.get()->set_title (this->title + ": " + this->doc_strings[ARTICLES_LIST]); + article_list.get()->set_title (this->title + ": " + tpl->get_stringbit (ARTICLES_LIST)); // sort the documents as per creation time and then add the document // links - newest documents should appear above older ones. sort_documents_creation_time (); @@ -253,7 +231,7 @@ namespace biaweb { navbit.get()->add_link_item (GenericLinkItem(par1->stub, par1->stub_hierarchy() + par1->stub + "/index.html")); else - navbit.get()->add_link_item (GenericLinkItem(this->doc_strings[HOME], "index.html")); + navbit.get()->add_link_item (GenericLinkItem(tpl->get_stringbit(HOME), "index.html")); par1 = par1->parent; } @@ -267,20 +245,20 @@ namespace biaweb { doc.set_navigation_bit (*navbit.get()); doc.add_side_bar (*bar1.get()); doc.add_side_bar (*bar2.get()); - doc.output_to_html (templatedir, filepath); + doc.output_to_html (tpl, filepath); } // add the navigation bit index.get()->set_navigation_bit (*navbit.get()); // index should contain the summary followed by the article list - index.get()->set_content (this->summary + article_list.get()->to_html(templatedir)); + index.get()->set_content (this->summary + article_list.get()->to_html(tpl)); // output the index file - index.get()->output_to_html (templatedir, filepath); + index.get()->output_to_html (tpl, filepath); // recursively create index for children for (DocumentTree tree : this->children) - tree.create_tree_html (templatedir, destdir); + tree.create_tree_html (tpl, destdir); } // build a document tree from a filesystem path recursively @@ -307,9 +285,7 @@ namespace biaweb { // the contents to the summary of the Doctree if (fsitem.path().stem().string() == "index") { - std::ifstream infile (fsitem.path()); - std::string infilestr ( (std::istreambuf_iterator (infile)), - (std::istreambuf_iterator ()) ); + std::string infilestr = load_from_file (fsitem.path ()); this->set_markdown_summary (infilestr); } // else it is a non-index file-