#include <string>
#include <fstream>
#include <iostream>
+#include <iomanip>
#include <list>
+#include <fmt/format.h>
+#include <fmt/chrono.h>
#include "biawebstrings.hpp"
#include "biawebdocument.hpp"
public:
DocListItem (std::string title, std::string url,
std::time_t ctime, std::time_t mtime ) {
- this->title = title;
+ this->title = escape_html (title);
this->url = url;
this->ctime = ctime;
this->mtime = mtime;
return this->title;
}
void set_title(std::string title) {
- this->title = title;
+ this->title = escape_html (title);
}
- // output to HTML
+ // output to HTML vide the template
std::string to_html (std::string templatedir);
};
(std::istreambuf_iterator<char> ()) );
templ.close ();
- // Allocate enough size for the output buffer
- std::unique_ptr<char[]> outputstr (new char [templstr.size() +
- this->title.size() +
- this->url.size () +
- 200]);
+ std::string outputhtml = fmt::format (templstr, fmt::arg("url", this->url),
+ fmt::arg("doctitle", this->title),
+ fmt::arg("cdate", *std::localtime (&this->ctime)),
+ fmt::arg("mdate", *std::localtime (&this->mtime)));
- char ctm_str[100];
- char mtm_str[100];
- strftime (ctm_str, 100, DATE_FORMAT, std::localtime (&this->ctime));
- strftime (mtm_str, 100, DATE_FORMAT, std::localtime (&this->mtime));
-
- sprintf (outputstr.get(), templstr.c_str(),
- this->url.c_str(),
- this->title.c_str(),
- ctm_str, mtm_str);
-
- std::string outputhtml;
- outputhtml.append (outputstr.get());
return outputhtml;
}
std::list<DocListItem> items;
public:
void set_title (std::string title) {
- this->title = title;
+ this->title = escape_html (title);
}
// add a document item
void add_document_item (DocListItem docitem) {
std::string templstr ( (std::istreambuf_iterator<char> (templ) ),
(std::istreambuf_iterator<char> ()));
- std::string docitems = "";
+ templ.close ();
+
std::string outputhtml = "";
// if the number of elements is non zero
if (this->items.size () != 0) {
+ std::string docitems = "";
for (DocListItem item : this->items)
docitems += item.to_html (templatedir);
-
- // Allocate space for output buffer
- std::unique_ptr<char[]> outputstr (new char [
- templstr.size () +
- docitems.size () +
- this->title.size ()
- ]);
- sprintf (outputstr.get(), templstr.c_str(),
- this->title.c_str(),
- docitems.c_str() );
-
- outputhtml.append (outputstr.get());
+
+ outputhtml = fmt::format (templstr,
+ fmt::arg ("title", this->title),
+ fmt::arg ("docitems", docitems));
}
return outputhtml;
}