Separated the strings used for document tree generation from code
authorHarishankar <v.harishankar@gmail.com>
Thu, 21 May 2020 07:05:24 +0000 (12:35 +0530)
committerHarishankar <v.harishankar@gmail.com>
Thu, 21 May 2020 07:05:24 +0000 (12:35 +0530)
Separated the string bits used for document tree generation from
constant in-code strings to a separate template file
stringbits.txt. This will allow for customizability of common
strings.

biawebdocument.hpp
biawebdocumenttree.hpp
biawebstrings.hpp
templates/stringbits.txt [new file with mode: 0644]

index 3fc15e1..65005dd 100644 (file)
@@ -182,10 +182,9 @@ namespace biaweb {
         this->mdate = this->cdate;
         // read the rest of contents
         std::string line;
-        std::getline (infile, line);
         while (! infile.eof ()) {
-            contents.append (line + "\n");
             std::getline (infile, line);
+            contents.append (line + "\n");
         }
         this->set_markdown_content (contents);
     }
index c070131..9122feb 100644 (file)
@@ -2,7 +2,9 @@
 #define __BIAWEBDOCUMENTTREE__
 #include <memory>
 #include <list>
+#include <array>
 #include <iostream>
+#include <fstream>
 #include <filesystem>
 #include <sys/stat.h>
 #include "biawebdocument.hpp"
@@ -27,12 +29,17 @@ 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);
@@ -129,6 +136,22 @@ 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<std::string> levels;
@@ -163,6 +186,9 @@ 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);
+
         // create a document to represent the index of the tree.
         std::unique_ptr<Document> index (new Document (this->title));
         index.get()->set_index ();
@@ -182,13 +208,13 @@ namespace biaweb {
         // 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 (NAVIGATE);
-        item0.set_item_text (INDEX);
+        bar1.get()->set_title (this->doc_strings [NAVIGATION]);
+        item0.set_item_text (this->doc_strings[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 (GO_UP);
+            item1.set_item_text (this->doc_strings[GO_UP]);
             item1.set_item_url (this->stub_hierarchy() + "index.html");
             bar1.get()->add_sidebar_item (item1);
         }
@@ -196,7 +222,7 @@ namespace biaweb {
 
         // create a sidebar for the child levels if there are children
         std::unique_ptr<SideBar> bar2 (new SideBar ());
-        bar2.get()->set_title (SUB_CAT + this->title);
+        bar2.get()->set_title (this->doc_strings[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 
@@ -212,7 +238,7 @@ namespace biaweb {
 
         // 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 + ": " + ART_LIST);
+        article_list.get()->set_title (this->title + ": " + this->doc_strings[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 ();
@@ -227,7 +253,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(HOME, "index.html"));
+                navbit.get()->add_link_item (GenericLinkItem(this->doc_strings[HOME], "index.html"));
             par1 = par1->parent;
         }
 
@@ -305,7 +331,7 @@ namespace biaweb {
             }
         }
         catch (std::filesystem::filesystem_error) {
-            std::cout << "No such path! Specify an existing file path" << std::endl;
+            std::cout << NO_SUCH_PATH_ERROR << std::endl;
         }
 
         // add the trees for the children recursively
index 1e15e57..c87f882 100644 (file)
@@ -2,16 +2,18 @@
 #define __BIAWEBSTRINGS__
 
 namespace biaweb {
-    // COMMON STRINGS
-    const char* GO_UP = "Go up";
-    const char* SUB_CAT = "Sub categories: ";
-    const char* ART_LIST = "List of Articles";
-    const char* INDEX = "Index Page";
-    const char* NAVIGATE = "Navigation";
+    // COMMON APPLICATION STRINGS
     const char* WARNING_PARSE_FAILED = "Warning: date parse failed on " ;
-    const char* HOME = "Home";
-    // DATE FORMAT
+    const char* NO_SUCH_PATH_ERROR = "No such path! Specify an existing file path" ;
     const char* DATE_IN_FORMAT = "%Y-%m-%d %H:%M %Z";
+
+    // NAMED INDEX FOR DOCUMENT STRING BITS (LOADED FROM TEMPLATE FILE stringbits.txt)
+    const unsigned int HOME = 0;
+    const unsigned int ARTICLES_LIST = 1;
+    const unsigned int INDEX = 2;
+    const unsigned int NAVIGATION = 3;
+    const unsigned int SUB_CAT = 4;
+    const unsigned int GO_UP = 5;
 }
 
 #endif
diff --git a/templates/stringbits.txt b/templates/stringbits.txt
new file mode 100644 (file)
index 0000000..70341af
--- /dev/null
@@ -0,0 +1,6 @@
+Home
+List of Articles
+Index Page
+Navigation
+Sub categories: 
+Go up
\ No newline at end of file