]> git.lyx.org Git - lyx.git/blobdiff - src/output_xhtml.cpp
A bit of renaming, plus default values for htmlTag() and htmlClass().
[lyx.git] / src / output_xhtml.cpp
index 376de29c25c0eac3e601f9e5a51d6e84e405daa1..3d11f25f89cbfef2608b5d02c35abea162e5f159 100644 (file)
@@ -75,6 +75,66 @@ docstring htmlize(docstring const & str) {
 }
 
 
+string escapeChar(char c)
+{
+       string str;
+       switch (c) {
+       case ' ':
+               str += " ";
+               break;
+       case '&':
+               str += "&";
+               break;
+       case '<':
+               str += "&lt;";
+               break;
+       case '>':
+               str += "&gt;";
+               break;
+       default:
+               str += c;
+               break;
+       }
+       return str;
+}
+
+
+// escape what needs escaping
+string htmlize(string const & str) {
+       ostringstream d;
+       string::const_iterator it = str.begin();
+       string::const_iterator en = str.end();
+       for (; it != en; ++it)
+               d << escapeChar(*it);
+       return d.str();
+}
+
+
+string cleanAttr(string const & str)
+{
+       string newname;
+       string::const_iterator it = str.begin();
+       string::const_iterator en = str.end();
+       for (; it != en; ++it)
+               newname += isalnum(*it) ? *it : '_';
+       return newname; 
+}
+
+
+docstring cleanAttr(docstring const & str)
+{
+       docstring newname;
+       docstring::const_iterator it = str.begin();
+       docstring::const_iterator en = str.end();
+       for (; it != en; ++it)
+               if (isalnum(*it))
+                       newname += *it;
+               else
+                       newname += '_';
+       return newname; 
+}
+
+
 bool isFontTag(string const & s)
 {
        return s == "em" || s == "strong"; // others?
@@ -86,7 +146,7 @@ docstring StartTag::asTag() const
 {
        string output = "<" + tag_;
        if (!attr_.empty())
-               output += " " + attr_;
+               output += " " + html::htmlize(attr_);
        output += ">";
        return from_utf8(output);
 }
@@ -110,7 +170,7 @@ docstring CompTag::asTag() const
 {
        string output = "<" + tag_;
        if (!attr_.empty())
-               output += " " + attr_;
+               output += " " + html::htmlize(attr_);
        output += " />";
        return from_utf8(output);
 }