summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Andreas Krennmair <ak@synflood.at> 2006-11-12 21:33:02 +0000
committerGravatar Andreas Krennmair <ak@synflood.at> 2006-11-12 21:33:02 +0000
commit1997de13eb395bc240a84fa609ee95ee61d3b5ba (patch)
treecd4a2e98b26bf23dbaaf53a5e907a73e3458cb56 /src
parent50366a504f098ca4c0c7e75d1421fb0d3b0255c4 (diff)
downloadnewsboat-1997de13eb395bc240a84fa609ee95ee61d3b5ba.tar.gz
newsboat-1997de13eb395bc240a84fa609ee95ee61d3b5ba.tar.zst
newsboat-1997de13eb395bc240a84fa609ee95ee61d3b5ba.zip
Andreas Krennmair:
implemented (broken) renderer.
Diffstat (limited to 'src')
-rw-r--r--src/htmlrenderer.cpp53
-rw-r--r--src/view.cpp14
2 files changed, 64 insertions, 3 deletions
diff --git a/src/htmlrenderer.cpp b/src/htmlrenderer.cpp
new file mode 100644
index 00000000..7783800f
--- /dev/null
+++ b/src/htmlrenderer.cpp
@@ -0,0 +1,53 @@
+#include <htmlrenderer.h>
+
+using namespace noos;
+
+htmlrenderer::htmlrenderer(unsigned int width) : w(width) { }
+
+std::vector<std::string> htmlrenderer::render(const std::string& source) {
+ std::vector<std::string> lines;
+ std::string curline, cleaned_source;
+
+ const char * begin = source.c_str();
+ bool addchar = true;
+
+ // clean up source:
+ while (*begin) {
+ if (addchar) {
+ if (*begin != '<') {
+ char str[2];
+ str[0] = *begin;
+ str[1] = '\0';
+ cleaned_source.append(str);
+ } else {
+ addchar = false;
+ }
+ } else {
+ if (*begin == '>') {
+ addchar = true;
+ }
+ }
+ ++begin;
+ }
+
+ begin = cleaned_source.c_str();
+ while (strlen(begin) >= w) {
+ const char * end = begin + w;
+ while (end > begin && !strchr(" \t\r\n",*end)) ++end;
+ if (begin == end) {
+ char x[w+1];
+ strncpy(x,begin,w);
+ x[w] = '\0';
+ curline = x;
+ } else {
+ char x[end-begin+1];
+ strncpy(x,begin,end-begin);
+ x[w] = '\0';
+ curline = x;
+ }
+ lines.push_back(curline);
+ begin += w;
+ }
+ lines.push_back(begin);
+ return lines;
+}
diff --git a/src/view.cpp b/src/view.cpp
index 70a62671..357adbdd 100644
--- a/src/view.cpp
+++ b/src/view.cpp
@@ -8,6 +8,7 @@ extern "C" {
#include <view.h>
#include <rss.h>
+#include <htmlrenderer.h>
#include <cstring>
#include <cstdio>
#include <iostream>
@@ -106,6 +107,8 @@ void view::run_itemlist(rss_feed& feed) {
bool rebuild_list = true;
std::vector<rss_item>& items = feed.items();
+ stfl_set(itemlist_form,"itempos","0");
+
do {
if (rebuild_list) {
@@ -200,9 +203,14 @@ void view::run_itemview(rss_item& item) {
code.append("{listitem text:\"\"}");
- code.append("{listitem text:");
- code.append(stfl_quote(item.description().c_str()));
- code.append("}");
+ htmlrenderer rnd;
+
+ std::vector<std::string> lines = rnd.render(item.description());
+
+ for (std::vector<std::string>::iterator it = lines.begin(); it != lines.end(); ++it) {
+ std::string line = std::string("{listitem text:") + std::string(stfl_quote(it->c_str())) + std::string("}");
+ code.append(line);
+ }
code.append("}");