stream.hpp
2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*=============================================================================
Copyright (c) 2009 Daniel James
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
// For handling native strings and streams.
#if !defined(BOOST_QUICKBOOK_DETAIL_STREAM_HPP)
#define BOOST_QUICKBOOK_DETAIL_STREAM_HPP
#include <iostream>
#include <boost/filesystem/path.hpp>
#include "native_text.hpp"
namespace quickbook
{
namespace fs = boost::filesystem;
namespace detail
{
// A light wrapper around C++'s streams that gets things right
// in the quickbook context.
//
// This is far from perfect but it fixes some issues.
struct ostream
{
typedef stream_string string;
#if QUICKBOOK_WIDE_STREAMS
typedef std::wostream base_ostream;
typedef std::wios base_ios;
#else
typedef std::ostream base_ostream;
typedef std::ios base_ios;
#endif
base_ostream& base;
explicit ostream(base_ostream& x) : base(x) {}
// C strings should always be ascii.
ostream& operator<<(char);
ostream& operator<<(char const*);
// std::string should be UTF-8 (what a mess!)
ostream& operator<<(std::string const&);
ostream& operator<<(quickbook::string_view);
// Other value types.
ostream& operator<<(int x);
ostream& operator<<(unsigned int x);
ostream& operator<<(long x);
ostream& operator<<(unsigned long x);
#if !defined(BOOST_NO_LONG_LONG)
ostream& operator<<(boost::long_long_type x);
ostream& operator<<(boost::ulong_long_type x);
#endif
ostream& operator<<(fs::path const&);
// Modifiers
ostream& operator<<(base_ostream& (*)(base_ostream&));
ostream& operator<<(base_ios& (*)(base_ios&));
};
void initialise_output();
ostream& out();
// Preformats an error/warning message so that it can be parsed by
// common IDEs. Set 'ms_errors' to determine if VS format
// or GCC format. Returns the stream to continue ouput of the verbose
// error message.
void set_ms_errors(bool);
ostream& outerr();
ostream& outerr(fs::path const& file, std::ptrdiff_t line = -1);
ostream& outwarn(fs::path const& file, std::ptrdiff_t line = -1);
ostream& outerr(file_ptr const&, string_iterator);
ostream& outwarn(file_ptr const&, string_iterator);
}
}
#endif