source: trunk/lib/Configuration.h @ 768

Last change on this file since 768 was 768, checked in by Peter Johansson, 12 years ago

Merged patch release 0.6.7 to trunk. Delta 0.6.7 - 0.6.6

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.2 KB
Line 
1#ifndef _theplu_svndigest_configuration_
2#define _theplu_svndigest_configuration_
3
4// $Id: Configuration.h 768 2009-01-31 21:30:37Z peter $
5
6/*
7  Copyright (C) 2007, 2008 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 vector of parse codons for the given \a file_name
48     */
49    const std::vector<std::pair<std::string, std::string> >* 
50    codon(std::string file_name) const;
51
52    ///
53    /// @brief Aliases for Copyright
54    ///
55    const std::map<std::string, Alias>& copyright_alias(void) const;
56
57    ///
58    /// throw if stream is not a valid config
59    ///
60    /// @brief load configuration from stream
61    ///
62    void load(std::istream&);
63
64    ///
65    /// @return true if we should warn about missing copyright statement
66    ///
67    bool  missing_copyright_warning(void) const;
68
69    ///
70    /// @return root for the trac envrionment, e.g.,
71    /// http://dev.thep.lu.se/svndigest/
72    ///
73    std::string trac_root(void) const;
74
75  private:
76    ///
77    /// Creates a Config object with default settings.
78    ///
79    /// @brief Default Constructor
80    ///
81    Configuration(void);
82    // Copy Constructor not implemented
83    Configuration(const Configuration&);
84    // assignment not implemented because assignment is always self-assignment
85    Configuration& operator=(const Configuration&);
86    // destructor not implemented
87    ~Configuration(void);
88
89    friend std::ostream& operator<<(std::ostream&, const Configuration&);
90
91    void add_codon(std::string, std::string, std::string);
92
93    void clear(void);
94    const std::pair<std::string,std::string>* dictionary(std::string lhs) const;
95    bool equal_false(const std::string&) const;
96    bool equal_true(const std::string&) const;
97    ///
98    /// @brief load deafult configuration
99    ///
100    void load(void);
101
102    void set_default(void);
103    /**
104       Translate string \a str using dictionary \a dict
105
106       \note \a str must be equal to d.first (see function equal),
107       or behavior is unspecified.
108
109       \throw if a '$' character is not followed by a positive integer
110       that is not larger than number of wildcards in dictionary \a d.
111     */
112    std::string translate(const std::string& str,
113                          const std::pair<std::string, std::string>& d) const;
114   
115    void validate_dictionary(void) const;
116
117    static Configuration* instance_;
118
119    std::map<std::string, Alias> copyright_alias_;
120
121    bool missing_copyright_warning_;
122   
123    typedef std::vector<std::pair<std::string, std::string> > VectorPair;
124    typedef std::vector<std::pair<std::string, VectorPair> > String2Codons; 
125    String2Codons string2codons_;
126
127    VectorPair dictionary_;
128
129    std::string trac_root_;
130  };
131
132  ///
133  /// @brief Output operator
134  ///
135  std::ostream& operator<<(std::ostream&, const Configuration&);
136
137  /**
138     If first character is '\n' replace it with "<NEWLINE>"
139   */
140  std::string trans_end_code(std::string);
141
142  /**
143     If last character is '\n' replace it with "<NEWLINE>"
144   */
145  std::string trans_beg_code(std::string);
146
147  /**
148     Trim \a c from beginning and end of string \a str;
149     
150     \return resulting string
151
152     \throw if first or last character of \a str is NOT character \a c
153  */
154  std::string trim(std::string str, char c);
155
156  /**
157     \brief Class for errors when reading config file.
158   */
159  class Config_error : public std::runtime_error
160  {
161  public:
162    Config_error(const std::string& line, const std::string& message);
163  };
164
165}} // end of namespace svndigest and namespace theplu
166
167#endif
168
169
Note: See TracBrowser for help on using the repository browser.