source: trunk/lib/Configuration.h @ 986

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

refs #405. added suopport to set image format in config file.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.9 KB
Line 
1#ifndef _theplu_svndigest_configuration_
2#define _theplu_svndigest_configuration_
3
4// $Id: Configuration.h 986 2009-12-13 20:41:15Z 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 png, none, svg, or svgz
75     */
76    const std::string& image_format(void) const;
77
78    ///
79    /// throw if stream is not a valid config
80    ///
81    /// @brief load configuration from stream
82    ///
83    void load(std::istream&);
84
85    ///
86    /// @return true if we should warn about missing copyright statement
87    ///
88    bool  missing_copyright_warning(void) const;
89
90    ///
91    /// @return root for the trac envrionment, e.g.,
92    /// http://dev.thep.lu.se/svndigest/
93    ///
94    std::string trac_root(void) const;
95
96  private:
97    ///
98    /// Creates a Config object with default settings.
99    ///
100    /// @brief Default Constructor
101    ///
102    Configuration(void);
103    // Copy Constructor not implemented
104    Configuration(const Configuration&);
105    // assignment not implemented because assignment is always self-assignment
106    Configuration& operator=(const Configuration&);
107    // destructor not implemented
108    ~Configuration(void);
109
110    friend std::ostream& operator<<(std::ostream&, const Configuration&);
111
112    void add_codon(std::string, std::string, std::string);
113
114    void clear(void);
115    const std::pair<std::string,std::string>* dictionary(std::string lhs) const;
116    bool equal_false(const std::string&) const;
117    bool equal_true(const std::string&) const;
118    ///
119    /// @brief load deafult configuration
120    ///
121    void load(void);
122
123    void set_default(void);
124    /**
125       Translate string \a str using dictionary \a dict
126
127       \note \a str must be equal to d.first (see function equal),
128       or behavior is unspecified.
129
130       \throw if a '$' character is not followed by a positive integer
131       that is not larger than number of wildcards in dictionary \a d.
132     */
133    std::string translate(const std::string& str,
134                          const std::pair<std::string, std::string>& d) const;
135   
136    void validate_dictionary(void) const;
137
138    static Configuration* instance_;
139
140    std::map<std::string, std::string> author_color_;
141    std::map<std::string, Alias> copyright_alias_;
142
143    bool missing_copyright_warning_;
144   
145    typedef std::vector<std::pair<std::string, std::string> > VectorPair;
146    typedef std::vector<std::pair<std::string, VectorPair> > String2Codons; 
147    String2Codons string2codons_;
148
149    VectorPair dictionary_;
150    std::string image_format_;
151    std::string trac_root_;
152  };
153
154  ///
155  /// @brief Output operator
156  ///
157  std::ostream& operator<<(std::ostream&, const Configuration&);
158
159  /**
160     If first character is '\n' replace it with "<NEWLINE>"
161   */
162  std::string trans_end_code(std::string);
163
164  /**
165     If last character is '\n' replace it with "<NEWLINE>"
166   */
167  std::string trans_beg_code(std::string);
168
169  /**
170     Trim \a c from beginning and end of string \a str;
171     
172     \return resulting string
173
174     \throw if first or last character of \a str is NOT character \a c
175  */
176  std::string trim(std::string str, char c);
177
178  /**
179     \brief Class for errors when reading config file.
180   */
181  class Config_error : public std::runtime_error
182  {
183  public:
184    Config_error(const std::string& line, const std::string& message);
185  };
186
187}} // end of namespace svndigest and namespace theplu
188
189#endif
190
191
Note: See TracBrowser for help on using the repository browser.