source: trunk/lib/Configuration.h @ 1017

Last change on this file since 1017 was 1017, checked in by Peter Johansson, 11 years ago

updating copyright years

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