summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-10-15 23:25:45 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-10-15 23:25:45 +0000
commit69c6fd7841394d492337a5b3e44da19ec7c7bc3b (patch)
treec7e5370bd8d68412161369e0404babefce9dcc68
parent26f6c03dbe7284b13168280c07e77112ebe854d5 (diff)
downloadcrawl-ref-69c6fd7841394d492337a5b3e44da19ec7c7bc3b.tar.gz
crawl-ref-69c6fd7841394d492337a5b3e44da19ec7c7bc3b.zip
Added basic HTML output functionality to formatted_string. Not used
anywhere yet. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2479 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/format.cc42
-rw-r--r--crawl-ref/source/format.h3
2 files changed, 44 insertions, 1 deletions
diff --git a/crawl-ref/source/format.cc b/crawl-ref/source/format.cc
index 400f900dff..33bb2a47d1 100644
--- a/crawl-ref/source/format.cc
+++ b/crawl-ref/source/format.cc
@@ -166,6 +166,48 @@ formatted_string::operator std::string() const
return (s);
}
+void replace_all_in_string(std::string& s, const std::string& search,
+ const std::string& replace)
+{
+ std::string::size_type pos = 0;
+ while ( (pos = s.find(search, pos)) != std::string::npos )
+ {
+ s.replace(pos, search.size(), replace);
+ pos += replace.size();
+ }
+}
+
+std::string formatted_string::html_dump() const
+{
+ std::string s;
+ for (unsigned i = 0; i < ops.size(); ++i)
+ {
+ std::string tmp;
+ switch (ops[i].type)
+ {
+ case FSOP_TEXT:
+ tmp = ops[i].text;
+ // (very) crude HTMLification
+ replace_all_in_string(tmp, "&", "&amp;");
+ replace_all_in_string(tmp, " ", "&nbsp;");
+ replace_all_in_string(tmp, "<", "&lt;");
+ replace_all_in_string(tmp, ">", "&gt;");
+ replace_all_in_string(tmp, "\n", "<br>");
+ s += tmp;
+ break;
+ case FSOP_COLOUR:
+ s += "<font color=";
+ s += colour_to_str(ops[i].x);
+ s += ">";
+ break;
+ case FSOP_CURSOR:
+ // FIXME error handling?
+ break;
+ }
+ }
+ return s;
+}
+
const formatted_string &
formatted_string::operator += (const formatted_string &other)
{
diff --git a/crawl-ref/source/format.h b/crawl-ref/source/format.h
index 8391c2cbb8..6376849b27 100644
--- a/crawl-ref/source/format.h
+++ b/crawl-ref/source/format.h
@@ -38,6 +38,7 @@ public:
void swap(formatted_string& other);
std::string::size_type length() const;
+ std::string html_dump() const;
const formatted_string &operator += (const formatted_string &other);
@@ -58,7 +59,7 @@ private:
int find_last_colour() const;
public:
-
+
struct fs_op
{
fs_op_type type;