lyx_mirror/src/sgml.C

142 lines
2.3 KiB
C++
Raw Normal View History

/**
* \file sgml.C
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Jos<EFBFBD> Matos
* \author John Levon
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "support/std_ostream.h"
#include "paragraph.h"
#include "sgml.h"
using std::endl;
using std::make_pair;
using std::ostream;
using std::pair;
using std::string;
namespace sgml {
pair<bool, string> escapeChar(char c)
{
string str;
switch (c) {
case ' ':
return make_pair(true, string(" "));
break;
case '\0': // Ignore :-)
str.erase();
break;
case '&':
str = "&amp;";
break;
case '<':
str = "&lt;";
break;
case '>':
str = "&gt;";
break;
#if 0
case '$':
str = "&dollar;";
break;
case '#':
str = "&num;";
break;
case '%':
str = "&percnt;";
break;
case '[':
str = "&lsqb;";
break;
case ']':
str = "&rsqb;";
break;
case '{':
str = "&lcub;";
break;
case '}':
str = "&rcub;";
break;
case '~':
str = "&tilde;";
break;
case '"':
str = "&quot;";
break;
case '\\':
str = "&bsol;";
break;
#endif
default:
str = c;
break;
}
return make_pair(false, str);
}
int openTag(ostream & os, Paragraph::depth_type depth,
bool mixcont, string const & latexname,
string const & latexparam)
{
if (!latexname.empty() && latexname != "!-- --") {
if (!mixcont)
os << string(depth, ' ');
os << '<' << latexname;
if (!latexparam.empty())
os << " " << latexparam;
os << '>';
}
if (!mixcont)
os << endl;
return !mixcont;
}
int closeTag(ostream & os, Paragraph::depth_type depth,
bool mixcont, string const & latexname)
{
if (!latexname.empty() && latexname != "!-- --") {
if (!mixcont)
os << endl << string(depth, ' ');
os << "</" << latexname << '>';
}
if (!mixcont)
os << endl;
return !mixcont;
}
unsigned int closeEnvTags(ostream & os, bool mixcont,
string const & environment_inner_depth,
string const & itemtag,
lyx::depth_type total_depth)
{
unsigned int lines = 0;
if (environment_inner_depth != "!-- --") {
lines += closeTag(os, total_depth, mixcont, itemtag);
if (!environment_inner_depth.empty())
lines += closeTag(os, total_depth, mixcont,
environment_inner_depth);
}
return lines;
}
} // namespace sgml