#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 {
std::string stub;
// list of documents in this tree
std::list<Document> docs;
- // common strings used for template generation
- std::array<std::string, 6> 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);
}
// 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) {
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<std::string> levels;
// 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<Document> index (new Document (this->title));
// If this tree has a parent, create a sidebar link to the level up
std::unique_ptr<SideBar> 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);
}
// create a sidebar for the child levels if there are children
std::unique_ptr<SideBar> 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
// Create the list of documents in this tree with links
std::unique_ptr<DocList> 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 ();
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;
}
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
// 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<char> (infile)),
- (std::istreambuf_iterator<char> ()) );
+ std::string infilestr = load_from_file (fsitem.path ());
this->set_markdown_summary (infilestr);
}
// else it is a non-index file-