source: trunk/lib/Configuration.h @ 1015

Last change on this file since 1015 was 1015, checked in by Peter Johansson, 13 years ago

closes #438. adding an option --format

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.1 KB
Line 
1#ifndef _theplu_svndigest_configuration_
2#define _theplu_svndigest_configuration_
3
4// $Id: Configuration.h 1015 2010-01-09 14:16:03Z peter $
5
6/*
7  Copyright (C) 2007, 2008, 2009 Jari Häkkinen, Peter Johansson
8
9  This file is part of svndigest, http://dev.thep.lu.se/svndigest
10
11  svndigest is free software; you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation; either version 3 of the License, or
14  (at your option) any later version.
15
16  svndigest is distributed in the hope that it will be useful, but
17  WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  General Public License for more details.
20
21  You should have received a copy of the GNU General Public License
22  along with svndigest. If not, see <http://www.gnu.org/licenses/>.
23*/
24
25#include "Alias.h"
26
27#include <iostream>
28#include <map>
29#include <stdexcept>
30#include <string>
31#include <utility>
32#include <vector>
33
34namespace theplu{
35namespace svndigest{
36
37  ///
38  /// Configuration class takes care of all setting defined in the
39  /// configuration file.
40  ///
41  class Configuration
42  {
43  public:
44    static Configuration& instance(void);
45
46    /**
47       \return Hexadecimal color code (e.g. 5aee4a) that is used in
48       blame output and as line colors in plots. If no color is
49       configured for \a author, an empty string is returned.
50     */
51    std::string author_str_color(const std::string& author) const;
52
53    /**
54       The map to lookup the author-color mapping set in the
55       configuration file. The color code is a six digit hexadecimal
56       number rrggbb.
57
58       \return The author-color map
59    */
60    const std::map<std::string, std::string>& author_colors(void) const;
61
62    /**
63       \return vector of parse codons for the given \a file_name
64     */
65    const std::vector<std::pair<std::string, std::string> >* 
66    codon(std::string file_name) const;
67
68    ///
69    /// @brief Aliases for Copyright
70    ///
71    const std::map<std::string, Alias>& copyright_alias(void) const;
72
73    /**
74       \return pdf, png, none, or svg
75     */
76    const std::string& image_anchor_format(void) const;
77
78    /**
79       \return png, none, svg, or svgz
80     */
81    const std::string& image_format(void) const;
82
83    /**
84       \brief set image_format
85     */
86    void image_format(const std::string&);
87
88    ///
89    /// throw if stream is not a valid config
90    ///
91    /// @brief load configuration from stream
92    ///
93    void load(std::istream&);
94
95    ///
96    /// @return true if we should warn about missing copyright statement
97    ///
98    bool  missing_copyright_warning(void) const;
99
100    ///
101    /// @return root for the trac envrionment, e.g.,
102    /// http://dev.thep.lu.se/svndigest/
103    ///
104    std::string trac_root(void) const;
105
106  private:
107    ///
108    /// Creates a Config object with default settings.
109    ///
110    /// @brief Default Constructor
111    ///
112    Configuration(void);
113    // Copy Constructor not implemented
114    Configuration(const Configuration&);
115    // assignment not implemented because assignment is always self-assignment
116    Configuration& operator=(const Configuration&);
117    // destructor not implemented
118    ~Configuration(void);
119
120    friend std::ostream& operator<<(std::ostream&, const Configuration&);
121
122    void add_codon(std::string, std::string, std::string);
123
124    void clear(void);
125    const std::pair<std::string,std::string>* dictionary(std::string lhs) const;
126    bool equal_false(const std::string&) const;
127    bool equal_true(const std::string&) const;
128    ///
129    /// @brief load deafult configuration
130    ///
131    void load(void);
132
133    void set_default(void);
134    /**
135       Translate string \a str using dictionary \a dict
136
137       \note \a str must be equal to d.first (see function equal),
138       or behavior is unspecified.
139
140       \throw if a '$' character is not followed by a positive integer
141       that is not larger than number of wildcards in dictionary \a d.
142     */
143    std::string translate(const std::string& str,
144                          const std::pair<std::string, std::string>& d) const;
145   
146    void validate_dictionary(void) const;
147
148    static Configuration* instance_;
149
150    std::map<std::string, std::string> author_color_;
151    std::map<std::string, Alias> copyright_alias_;
152
153    bool missing_copyright_warning_;
154   
155    typedef std::vector<std::pair<std::string, std::string> > VectorPair;
156    typedef std::vector<std::pair<std::string, VectorPair> > String2Codons; 
157    String2Codons string2codons_;
158
159    VectorPair dictionary_;
160    std::string image_anchor_format_;
161    std::string image_format_;
162    std::string trac_root_;
163  };
164
165  ///
166  /// @brief Output operator
167  ///
168  std::ostream& operator<<(std::ostream&, const Configuration&);
169
170  /**
171     If first character is '\n' replace it with "<NEWLINE>"
172   */
173  std::string trans_end_code(std::string);
174
175  /**
176     If last character is '\n' replace it with "<NEWLINE>"
177   */
178  std::string trans_beg_code(std::string);
179
180  /**
181     Trim \a c from beginning and end of string \a str;
182     
183     \return resulting string
184
185     \throw if first or last character of \a str is NOT character \a c
186  */
187  std::string trim(std::string str, char c);
188
189  /**
190     \brief Class for errors when reading config file.
191   */
192  class Config_error : public std::runtime_error
193  {
194  public:
195    Config_error(const std::string& line, const std::string& message);
196  };
197
198}} // end of namespace svndigest and namespace theplu
199
200#endif
201
202
Note: See TracBrowser for help on using the repository browser.