]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/tools/quickbook/src/stream.cpp
bump version to 18.2.4-pve3
[ceph.git] / ceph / src / boost / tools / quickbook / src / stream.cpp
1 /*=============================================================================
2 Copyright (c) 2009 Daniel James
3
4 Use, modification and distribution is subject to the Boost Software
5 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 http://www.boost.org/LICENSE_1_0.txt)
7 =============================================================================*/
8
9 #include "stream.hpp"
10 #include "files.hpp"
11 #include "path.hpp"
12
13 #if QUICKBOOK_WIDE_PATHS || QUICKBOOK_WIDE_STREAMS
14 #include <fcntl.h>
15 #include <io.h>
16 #endif
17
18 namespace quickbook
19 {
20 namespace detail
21 {
22 namespace
23 {
24 bool ms_errors = false;
25 }
26
27 void set_ms_errors(bool x) { ms_errors = x; }
28
29 #if QUICKBOOK_WIDE_STREAMS
30
31 void initialise_output()
32 {
33 if (_isatty(_fileno(stdout))) _setmode(_fileno(stdout), _O_U16TEXT);
34 if (_isatty(_fileno(stderr))) _setmode(_fileno(stderr), _O_U16TEXT);
35 }
36
37 void write_utf8(ostream::base_ostream& out, quickbook::string_view x)
38 {
39 out << from_utf8(x);
40 }
41
42 ostream& out()
43 {
44 static ostream x(std::wcout);
45 return x;
46 }
47
48 namespace
49 {
50 inline ostream& error_stream()
51 {
52 static ostream x(std::wcerr);
53 return x;
54 }
55 }
56
57 #else
58
59 void initialise_output() {}
60
61 void write_utf8(ostream::base_ostream& out, quickbook::string_view x)
62 {
63 out << x;
64 }
65
66 ostream& out()
67 {
68 static ostream x(std::cout);
69 return x;
70 }
71
72 namespace
73 {
74 inline ostream& error_stream()
75 {
76 static ostream x(std::clog);
77 return x;
78 }
79 }
80
81 #endif
82
83 ostream& outerr() { return error_stream() << "Error: "; }
84
85 ostream& outerr(fs::path const& file, std::ptrdiff_t line)
86 {
87 if (line >= 0) {
88 if (ms_errors)
89 return error_stream() << path_to_stream(file) << "(" << line
90 << "): error: ";
91 else
92 return error_stream() << path_to_stream(file) << ":" << line
93 << ": error: ";
94 }
95 else {
96 return error_stream() << path_to_stream(file) << ": error: ";
97 }
98 }
99
100 ostream& outerr(file_ptr const& f, string_iterator pos)
101 {
102 return outerr(f->path, f->position_of(pos).line);
103 }
104
105 ostream& outwarn(fs::path const& file, std::ptrdiff_t line)
106 {
107 if (line >= 0) {
108 if (ms_errors)
109 return error_stream() << path_to_stream(file) << "(" << line
110 << "): warning: ";
111 else
112 return error_stream() << path_to_stream(file) << ":" << line
113 << ": warning: ";
114 }
115 else {
116 return error_stream() << path_to_stream(file) << ": warning: ";
117 }
118 }
119
120 ostream& outwarn(file_ptr const& f, string_iterator pos)
121 {
122 return outwarn(f->path, f->position_of(pos).line);
123 }
124
125 ostream& ostream::operator<<(char c)
126 {
127 assert(c && !(c & 0x80));
128 base << c;
129 return *this;
130 }
131
132 inline bool check_ascii(char const* x)
133 {
134 for (; *x; ++x)
135 if (*x & 0x80) return false;
136 return true;
137 }
138
139 ostream& ostream::operator<<(char const* x)
140 {
141 assert(check_ascii(x));
142 base << x;
143 return *this;
144 }
145
146 ostream& ostream::operator<<(std::string const& x)
147 {
148 write_utf8(base, x);
149 return *this;
150 }
151
152 ostream& ostream::operator<<(quickbook::string_view x)
153 {
154 write_utf8(base, x);
155 return *this;
156 }
157
158 ostream& ostream::operator<<(int x)
159 {
160 base << x;
161 return *this;
162 }
163
164 ostream& ostream::operator<<(unsigned int x)
165 {
166 base << x;
167 return *this;
168 }
169
170 ostream& ostream::operator<<(long x)
171 {
172 base << x;
173 return *this;
174 }
175
176 ostream& ostream::operator<<(unsigned long x)
177 {
178 base << x;
179 return *this;
180 }
181
182 #if !defined(BOOST_NO_LONG_LONG)
183 ostream& ostream::operator<<(boost::long_long_type x)
184 {
185 base << x;
186 return *this;
187 }
188
189 ostream& ostream::operator<<(boost::ulong_long_type x)
190 {
191 base << x;
192 return *this;
193 }
194 #endif
195
196 ostream& ostream::operator<<(fs::path const& x)
197 {
198 base << path_to_stream(x);
199 return *this;
200 }
201
202 ostream& ostream::operator<<(base_ostream& (*x)(base_ostream&))
203 {
204 base << x;
205 return *this;
206 }
207
208 ostream& ostream::operator<<(base_ios& (*x)(base_ios&))
209 {
210 base << x;
211 return *this;
212 }
213 }
214 }