]> git.lyx.org Git - lyx.git/blob - src/support/docstring.C
This commit moves system font initialization and restoration to new support/fontutils...
[lyx.git] / src / support / docstring.C
1 /**
2  * \file docstring.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Georg Baum
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "docstring.h"
14 #include "unicode.h"
15
16 #include <boost/assert.hpp>
17
18
19 namespace lyx {
20
21 docstring const from_ascii(char const * ascii)
22 {
23         docstring s;
24         for (char const * c = ascii; *c; ++c) {
25                 BOOST_ASSERT(static_cast<unsigned char>(*c) < 0x80);
26                 s.push_back(*c);
27         }
28         return s;
29 }
30
31
32 docstring const from_ascii(std::string const & ascii)
33 {
34         int const len = ascii.length();
35         for (int i = 0; i < len; ++i)
36                 BOOST_ASSERT(static_cast<unsigned char>(ascii[i]) < 0x80);
37         return docstring(ascii.begin(), ascii.end());
38 }
39
40
41 docstring const from_utf8(std::string const & utf8)
42 {
43         std::vector<lyx::char_type> const ucs4 =
44                 utf8_to_ucs4(utf8.data(), utf8.size());
45         return docstring(ucs4.begin(), ucs4.end());
46 }
47
48
49 std::string const to_utf8(docstring const & ucs4)
50 {
51         std::vector<char> const utf8 =
52                 ucs4_to_utf8(ucs4.data(), ucs4.size());
53         return std::string(utf8.begin(), utf8.end());
54 }
55
56 }
57
58
59 bool operator==(lyx::docstring const & l, char const * r)
60 {
61         int const len = l.length();
62         for (int i = 0; i < len; ++i) {
63                 BOOST_ASSERT(static_cast<unsigned char>(r[i]) < 0x80);
64                 if (!r[i])
65                         return false;
66                 if (l[i] != lyx::docstring::value_type(r[i]))
67                         return false;
68         }
69         return r[len] == '\0';
70 }
71
72
73 lyx::docstring operator+(lyx::docstring const & l, char const * r)
74 {
75         lyx::docstring s(l);
76         for (char const * c = r; *c; ++c) {
77                 BOOST_ASSERT(static_cast<unsigned char>(*c) < 0x80);
78                 s.push_back(*c);
79         }
80         return s;
81 }
82
83
84 lyx::docstring operator+(char const * l, lyx::docstring const & r)
85 {
86         lyx::docstring s;
87         for (char const * c = l; *c; ++c) {
88                 BOOST_ASSERT(static_cast<unsigned char>(*c) < 0x80);
89                 s.push_back(*c);
90         }
91         s += r;
92         return s;
93 }
94
95
96 lyx::docstring operator+(lyx::docstring const & l, char r)
97 {
98         BOOST_ASSERT(static_cast<unsigned char>(r) < 0x80);
99         return l + lyx::docstring::value_type(r);
100 }
101
102
103 lyx::docstring operator+(char l, lyx::docstring const & r)
104 {
105         BOOST_ASSERT(static_cast<unsigned char>(l) < 0x80);
106         return lyx::docstring::value_type(l) + r;
107 }