aboutsummaryrefslogtreecommitdiff
path: root/0.8.0/paludis/args/args_dumper.cc
blob: afdc747c04c6c5cff02f4abcc46bbee03ad4a367 (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
/* vim: set sw=4 sts=4 et foldmethod=syntax : */

/*
 * Copyright (c) 2006 Stephen Bennett <spb@gentoo.org>
 *
 * This file is part of the Paludis package manager. Paludis is free software;
 * you can redistribute it and/or modify it under the terms of the GNU General
 * Public License as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 *
 * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include <paludis/args/args_dumper.hh>
#include <paludis/args/args_option.hh>

#include <sstream>

/** \file
 * Implementation of ArgsDumper.
 *
 * \ingroup grplibpaludisargs
 */

using namespace paludis;
using namespace paludis::args;

ArgsDumper::ArgsDumper(std::ostream & os) :
    _os(os)
{
}

void ArgsDumper::visit(const ArgsOption * const a)
{
    std::stringstream p;
    p << "  --" << a->long_name();
    if (a->short_name())
        p << ", -" << a->short_name();
    if (p.str().length() < 24)
        p << std::string(24 - p.str().length(), ' ');
    else
        p << std::endl << std::string(24, ' ');
    _os << p.str();
    _os << " " << a->description() << std::endl;
}

#ifndef DOXYGEN
#define VISIT(type) void ArgsDumper::visit(const type * const a) \
    { visit(static_cast<const ArgsOption *>(a)); }

VISIT(SwitchArg)
VISIT(StringArg)
VISIT(IntegerArg)
VISIT(AliasArg)
VISIT(StringSetArg)
#endif

void ArgsDumper::visit(const EnumArg * const a)
{
    visit(static_cast<const ArgsOption *>(a));
    for (EnumArg::AllowedArgIterator it = a->begin_allowed_args(), it_end = a->end_allowed_args();
            it != it_end; ++it)
    {
        std::stringstream p;
        p << "      " << (*it).first;
        if (p.str().length() < 26)
            p << std::string(26 - p.str().length(), ' ');
        _os << p.str();
        _os << " " << (*it).second;
        if ((*it).first == a->default_arg())
            _os << " (default)";
        _os << std::endl;
    }
}