#include "outputparams.h"
#include "paragraph.h"
+#include "support/docstring.h"
#include "support/lstrings.h"
#include "support/std_ostream.h"
#include "support/convert.h"
-#include <boost/tuple/tuple.hpp>
-
#include <map>
#include <sstream>
-using lyx::support::subst;
-using std::make_pair;
+namespace lyx {
+
+using support::subst;
+
using std::map;
using std::ostream;
using std::ostringstream;
-using std::pair;
using std::string;
-namespace sgml {
-
-pair<bool, string> escapeChar(char c)
+docstring sgml::escapeChar(char_type c)
{
- string str;
-
+ docstring str;
switch (c) {
case ' ':
- return make_pair(true, string(" "));
- break;
- case '\0': // Ignore :-)
- str.erase();
+ str += " ";
break;
case '&':
- str = "&";
+ str += "&";
break;
case '<':
- str = "<";
+ str += "<";
break;
case '>':
- str = ">";
+ str += ">";
break;
#if 0
case '$':
- str = "$";
+ str += "$";
break;
case '#':
- str = "#";
+ str += "#";
break;
case '%':
- str = "%";
+ str += "%";
break;
case '[':
- str = "[";
+ str += "[";
break;
case ']':
- str = "]";
+ str += "]";
break;
case '{':
- str = "{";
+ str += "{";
break;
case '}':
- str = "}";
+ str += "}";
break;
case '~':
- str = "˜";
+ str += "˜";
break;
case '"':
- str = """;
+ str += """;
break;
case '\\':
- str = "\";
+ str += "\";
break;
#endif
default:
- str = c;
+ str += c;
break;
}
- return make_pair(false, str);
+ return str;
}
-string escapeString(string const & raw)
+docstring sgml::escapeString(docstring const & raw)
{
- ostringstream bin;
+ odocstringstream bin;
- for(string::size_type i = 0; i < raw.size(); ++i) {
- bool ws;
- string str;
- boost::tie(ws, str) = sgml::escapeChar(raw[i]);
- bin << str;
+ for(docstring::size_type i = 0; i < raw.size(); ++i) {
+ bin << sgml::escapeChar(raw[i]);
}
return bin.str();
}
-string const uniqueID(string const label)
+docstring const sgml::uniqueID(docstring const label)
{
static unsigned int seed = 1000;
- return label + convert<string>(++seed);
+ return label + convert<docstring>(++seed);
}
-string cleanID(Buffer const & buf, OutputParams const & runparams, std::string const & orig)
+docstring sgml::cleanID(Buffer const & buf, OutputParams const & runparams,
+ docstring const & orig)
{
// The standard DocBook SGML declaration only allows letters,
// digits, '-' and '.' in a name.
// If you know what you are doing, you can set allowed==""
// to disable this mangling.
LyXTextClass const & tclass = buf.params().getLyXTextClass();
- string const allowed = runparams.flavor == OutputParams::XML? ".-_:":tclass.options();
+ string const allowed =
+ runparams.flavor == OutputParams::XML? ".-_:":tclass.options();
if (allowed.empty())
return orig;
- string::const_iterator it = orig.begin();
- string::const_iterator end = orig.end();
+ docstring::const_iterator it = orig.begin();
+ docstring::const_iterator end = orig.end();
- string content;
+ docstring content;
- typedef map<string, string> MangledMap;
+ typedef map<docstring, docstring> MangledMap;
static MangledMap mangledNames;
static int mangleID = 1;
bool mangle = false;
for (; it != end; ++it) {
char c = *it;
- if (isalpha(c) || isdigit(c) || c == '-' || c == '.' || allowed.find(c) < allowed.size())
+ if (isalpha(c) || isdigit(c) || c == '-' || c == '.'
+ || allowed.find(c) < allowed.size())
content += c;
else if (c == '_' || c == ' ') {
mangle = true;
}
}
if (mangle) {
- content += "-" + convert<string>(mangleID++);
+ content += "-" + convert<docstring>(mangleID++);
}
else if (isdigit(content[content.size() - 1])) {
content += ".";
}
-void openTag(ostream & os, string const & name, string const & attribute)
+void sgml::openTag(odocstream & os, string const & name, string const & attribute)
{
+ // FIXME UNICODE
// This should be fixed in layout files later.
string param = subst(attribute, "<", "\"");
param = subst(param, ">", "\"");
if (!name.empty() && name != "!-- --") {
- os << '<' << name;
+ os << '<' << from_ascii(name);
if (!param.empty())
- os << " " << param;
+ os << ' ' << from_ascii(param);
os << '>';
}
}
-void closeTag(ostream & os, string const & name)
+void sgml::closeTag(odocstream & os, string const & name)
{
if (!name.empty() && name != "!-- --")
- os << "</" << name << '>';
+ os << "</" << from_ascii(name) << '>';
}
-void openTag(Buffer const & buf, ostream & os, OutputParams const & runparams, Paragraph const & par)
+void sgml::openTag(Buffer const & buf, odocstream & os,
+ OutputParams const & runparams, Paragraph const & par)
{
LyXLayout_ptr const & style = par.layout();
string const & name = style->latexname();
attribute = id + ' ' + param;
} else {
if (param.find('#') != string::npos) {
+ // FIXME UNICODE
if(!style->counter.empty())
counters.step(style->counter);
else
- counters.step(style->latexname());
- int i = counters.value(name);
+ counters.step(from_ascii(name));
+ int i = counters.value(from_ascii(name));
attribute = subst(param, "#", convert<string>(i));
} else {
attribute = param;
}
-void closeTag(ostream & os, Paragraph const & par)
+void sgml::closeTag(odocstream & os, Paragraph const & par)
{
LyXLayout_ptr const & style = par.layout();
closeTag(os, style->latexname());
}
-} // namespace sgml
+
+} // namespace lyx