blob: 1f2facb1576cdf4ee85eced0396b8a465834b48a (
plain)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
|
// file : cli/context.hxx
// author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file
#ifndef CLI_CONTEXT_HXX
#define CLI_CONTEXT_HXX
#include <set>
#include <map>
#include <string>
#include <ostream>
#include <cstddef> // std::size_t
#include <cutl/shared-ptr.hxx>
#include "options.hxx"
#include "semantics.hxx"
#include "traversal.hxx"
using std::endl;
class context
{
public:
typedef std::size_t size_t;
typedef std::string string;
typedef ::options options_type;
private:
struct data;
cutl::shared_ptr<data> data_;
public:
std::ostream& os;
semantics::cli_unit& unit;
options_type const& options;
string const& inl;
string const& opt_prefix;
string const& opt_sep;
typedef std::map<string, string> reserved_name_map_type;
reserved_name_map_type const& reserved_name_map;
typedef std::set<string> keyword_set_type;
keyword_set_type const& keyword_set;
private:
struct data
{
string inl_;
keyword_set_type keyword_set_;
};
public:
// Escape C++ keywords, reserved names, and illegal characters.
//
string
escape (string const&) const;
public:
static string const&
ename (semantics::nameable& n)
{
return n.context ().get<string> ("name");
}
static string const&
emember (semantics::nameable& n)
{
return n.context ().get<string> ("member");
}
public:
context (std::ostream&, semantics::cli_unit&, options_type const&);
context (context&);
private:
context&
operator= (context const&);
};
// Standard namespace traverser.
//
struct namespace_: traversal::namespace_, context
{
namespace_ (context& c) : context (c) {}
virtual void
pre (type&);
virtual void
post (type&);
};
#endif // CLI_CONTEXT_HXX
|