diff options
author | 2006-11-12 21:33:02 +0000 | |
---|---|---|
committer | 2006-11-12 21:33:02 +0000 | |
commit | 1997de13eb395bc240a84fa609ee95ee61d3b5ba (patch) | |
tree | cd4a2e98b26bf23dbaaf53a5e907a73e3458cb56 /src | |
parent | 50366a504f098ca4c0c7e75d1421fb0d3b0255c4 (diff) | |
download | newsboat-1997de13eb395bc240a84fa609ee95ee61d3b5ba.tar.gz newsboat-1997de13eb395bc240a84fa609ee95ee61d3b5ba.tar.zst newsboat-1997de13eb395bc240a84fa609ee95ee61d3b5ba.zip |
Andreas Krennmair:
implemented (broken) renderer.
Diffstat (limited to 'src')
-rw-r--r-- | src/htmlrenderer.cpp | 53 | ||||
-rw-r--r-- | src/view.cpp | 14 |
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("}"); |