]> git.lyx.org Git - lyx.git/blob - src/sgml.C
more code in the menu backend == less code in the menu frontends; add support for...
[lyx.git] / src / sgml.C
1 /**
2  * \file sgml.C
3  * Copyright 2002 the LyX Team
4  * Read the file COPYING
5  *
6  * \author José Matos
7  * \author John Levon <levon@movementarian.org>
8  */
9
10 #include <config.h>
11
12 #include "support/LOstream.h"
13
14 #include "paragraph.h"
15 #include "sgml.h"
16
17 using std::pair;
18 using std::make_pair;
19 using std::ostream;
20 using std::endl;
21
22 namespace sgml {
23
24 pair<bool, string> escapeChar(char c)
25 {
26         string str;
27
28         switch (c) {
29         case Paragraph::META_HFILL:
30                 break;
31         case Paragraph::META_NEWLINE:
32                 str = '\n';
33                 break;
34         case ' ':
35                 return make_pair(true, string(" "));
36                 break;
37         case '\0': // Ignore :-)
38                 str.erase();
39                 break;
40         case '&':
41                 str = "&amp;";
42                 break;
43         case '<':
44                 str = "&lt;";
45                 break;
46         case '>':
47                 str = "&gt;";
48                 break;
49         case '$':
50                 str = "&dollar;";
51                 break;
52         case '#':
53                 str = "&num;";
54                 break;
55         case '%':
56                 str = "&percnt;";
57                 break;
58         case '[':
59                 str = "&lsqb;";
60                 break;
61         case ']':
62                 str = "&rsqb;";
63                 break;
64         case '{':
65                 str = "&lcub;";
66                 break;
67         case '}':
68                 str = "&rcub;";
69                 break;
70         case '~':
71                 str = "&tilde;";
72                 break;
73         case '"':
74                 str = "&quot;";
75                 break;
76         case '\\':
77                 str = "&bsol;";
78                 break;
79         default:
80                 str = c;
81                 break;
82         }
83         return make_pair(false, str);
84 }
85
86
87 int openTag(ostream & os, Paragraph::depth_type depth,
88             bool mixcont, string const & latexname)
89 {
90         if (!latexname.empty() && latexname != "!-- --") {
91                 if (!mixcont)
92                         os << string(depth, ' ');
93                 os << '<' << latexname << '>';
94         }
95
96         if (!mixcont)
97                 os << endl;
98
99         return !mixcont;
100 }
101
102
103 int closeTag(ostream & os, Paragraph::depth_type depth,
104              bool mixcont, string const & latexname)
105 {
106         if (!latexname.empty() && latexname != "!-- --") {
107                 if (!mixcont)
108                         os << endl << string(depth, ' ');
109                 os << "</" << latexname << '>';
110         }
111
112         if (!mixcont)
113                 os << endl;
114
115         return !mixcont;
116 }
117
118 } // namespace sgml