You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
7.0 KiB
230 lines
7.0 KiB
//
|
|
// Configuration.h
|
|
//
|
|
// NAME
|
|
//
|
|
// reads the configuration file and manages it in memory.
|
|
//
|
|
// SYNOPSIS
|
|
//
|
|
// #include <Configuration.h>
|
|
//
|
|
// Configuration config;
|
|
//
|
|
// ConfigDefault config_defaults = {
|
|
// { "verbose", "true" },
|
|
// { 0, 0 }
|
|
// };
|
|
//
|
|
// config.Defaults(config_defaults);
|
|
//
|
|
// config.Read("~/.myconfig") ;
|
|
//
|
|
// config.Add("sync", "false");
|
|
//
|
|
// if(config["sync"]) ...
|
|
// if(config.Value("rate") < 50) ...
|
|
// if(config.Boolean("sync")) ...
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// The primary purpose of the <b>Configuration</b> class is to parse
|
|
// a configuration file and allow the application to modify the internal
|
|
// data structure. All values are strings and are converted by the
|
|
// appropriate accessors. For instance the <b>Boolean</b> method will
|
|
// return numerical true (not zero) if the string either contains
|
|
// a number that is different from zero or the string <i>true</i>.
|
|
//
|
|
// The <i>ConfigDefaults</i> type is a structure of two char pointers:
|
|
// the name of the configuration attribute and it's value. The end of
|
|
// the array is the first entry that contains a null pointer instead of
|
|
// the attribute name. Numerical
|
|
// values must be in strings. For instance:
|
|
// <pre>
|
|
// ConfigDefault* config_defaults = {
|
|
// { "wordlist_compress", "true" },
|
|
// { "wordlist_page_size", "8192" },
|
|
// { 0, 0 }
|
|
// };
|
|
// </pre>
|
|
// Returns the configuration (object of type <i>Configuration</i>)
|
|
// built if a file was found or config_defaults
|
|
// provided, 0 otherwise.
|
|
// The additional
|
|
// fields of the <b>ConfigDefault</b> are purely informative.
|
|
//
|
|
// FILE FORMAT
|
|
//
|
|
// This configuration file is a plain ASCII text file. Each line in
|
|
// the file is either a comment or contains an attribute.
|
|
// Comment lines are blank lines or lines that start with a '#'.
|
|
// Attributes consist of a variable name and an associated
|
|
// value:
|
|
//
|
|
// <pre>
|
|
// <name>:<whitespace><value><newline>
|
|
// </pre>
|
|
//
|
|
// The <name> contains any alphanumeric character or
|
|
// underline (_) The <value> can include any character
|
|
// except newline. It also cannot start with spaces or tabs since
|
|
// those are considered part of the whitespace after the colon. It
|
|
// is important to keep in mind that any trailing spaces or tabs
|
|
// will be included.
|
|
//
|
|
// It is possible to split the <value> across several
|
|
// lines of the configuration file by ending each line with a
|
|
// backslash (\). The effect on the value is that a space is
|
|
// added where the line split occurs.
|
|
//
|
|
// A configuration file can include another file, by using the special
|
|
// <name>, <tt>include</tt>. The <value> is taken as
|
|
// the file name of another configuration file to be read in at
|
|
// this point. If the given file name is not fully qualified, it is
|
|
// taken relative to the directory in which the current configuration
|
|
// file is found. Variable expansion is permitted in the file name.
|
|
// Multiple include statements, and nested includes are also permitted.
|
|
//
|
|
// <pre>
|
|
// include: common.conf
|
|
// </pre>
|
|
//
|
|
//
|
|
// END
|
|
//
|
|
// Part of the ht://Dig package <http://www.htdig.org/>
|
|
// Copyright (c) 1999-2004 The ht://Dig Group
|
|
// For copyright details, see the file COPYING in your distribution
|
|
// or the GNU Library General Public License (LGPL) version 2 or later
|
|
// <http://www.gnu.org/copyleft/lgpl.html>
|
|
//
|
|
// $Id: Configuration.h,v 1.11 2004/05/28 13:15:20 lha Exp $
|
|
//
|
|
|
|
#ifndef _Configuration_h_
|
|
#define _Configuration_h_
|
|
|
|
#include "Dictionary.h"
|
|
#include "htString.h"
|
|
|
|
struct ConfigDefaults
|
|
{
|
|
char *name; // Name of the attribute
|
|
char *value; // Default value
|
|
char *type; // Type of the value (string, integer, boolean)
|
|
char *programs; // Whitespace separated list of programs/modules using this attribute
|
|
char *block; // Configuration block this can be used in (can be blank)
|
|
char *version; // Version that introduced the attribute
|
|
char *category; // Attribute category (to split documentation)
|
|
char *example; // Example usage of the attribute (HTML)
|
|
char *description; // Long description of the attribute (HTML)
|
|
};
|
|
|
|
|
|
class Configuration : public Object
|
|
{
|
|
public:
|
|
//-
|
|
// Constructor
|
|
//
|
|
Configuration();
|
|
#ifndef SWIG
|
|
Configuration(const Configuration& config) :
|
|
dcGlobalVars(config.dcGlobalVars),
|
|
separators(config.separators)
|
|
{
|
|
allow_multiple = config.allow_multiple;
|
|
}
|
|
#endif /* SWIG */
|
|
//-
|
|
// Destructor
|
|
//
|
|
~Configuration() {}
|
|
|
|
//
|
|
// Adding and deleting items to and from the Configuration
|
|
//
|
|
#ifndef SWIG
|
|
//-
|
|
// Add configuration item <b>str</b> to the configuration. The value
|
|
// associated with it is undefined.
|
|
//
|
|
void Add(const String& str);
|
|
#endif /* SWIG */
|
|
//-
|
|
// Add configuration item <b>name</b> to the configuration and associate
|
|
// it with <b>value</b>.
|
|
//
|
|
void Add(const String& name, const String& value);
|
|
void AddParsed(const String& name, const String& value);
|
|
//-
|
|
// Remove the <b>name</b> from the configuration.
|
|
//
|
|
int Remove(const String& name);
|
|
|
|
//-
|
|
// Let the Configuration know how to parse name value pairs.
|
|
// Each character of string <b>s</b> is a valid separator between
|
|
// the <i>name</i> and the <i>value.</i>
|
|
//
|
|
void NameValueSeparators(const String& s);
|
|
|
|
//-
|
|
// Read name/value configuration pairs from the file <b>filename</b>.
|
|
//
|
|
virtual int Read(const String& filename);
|
|
|
|
//-
|
|
// Return the value of configuration attribute <b>name</b> as a
|
|
// <i>String</i>.
|
|
//
|
|
const String Find(const String& name) const;
|
|
|
|
//-
|
|
// Return 1 if the value of configuration attribute <b>name</b> has
|
|
// been set, 0 otherwise
|
|
int Exists(const String& name) const;
|
|
|
|
#ifndef SWIG
|
|
//-
|
|
// Alias to the <b>Find</b> method.
|
|
//
|
|
const String operator[](const String& name) const;
|
|
#endif /* SWIG */
|
|
//-
|
|
// Return the value associated with the configuration attribute
|
|
// <b>name</b>, converted to integer using the atoi(3) function.
|
|
// If the attribute is not found in the configuration and
|
|
// a <b>default_value</b> is provided, return it.
|
|
//
|
|
int Value(const String& name, int default_value = 0) const;
|
|
//-
|
|
// Return the value associated with the configuration attribute
|
|
// <b>name</b>, converted to double using the atof(3) function.
|
|
// If the attribute is not found in the configuration and
|
|
// a <b>default_value</b> is provided, return it.
|
|
//
|
|
double Double(const String& name, double default_value = 0) const;
|
|
//-
|
|
// Return 1 if the value associated to <b>name</b> is
|
|
// either <b>1, yes</b> or <b>true</b>.
|
|
// Return 0 if the value associated to <b>name</b> is
|
|
// either <b>0, no</b> or <b>false</b>.
|
|
//
|
|
int Boolean(const String& name, int default_value = 0) const;
|
|
Object *Get_Object(char *name);
|
|
|
|
//-
|
|
// Load configuration attributes from the <i>name</i> and <i>value</i>
|
|
// members of the <b>array</b> argument.
|
|
//
|
|
void Defaults(const ConfigDefaults *array);
|
|
|
|
protected:
|
|
Dictionary dcGlobalVars;
|
|
String separators;
|
|
int allow_multiple;
|
|
};
|
|
|
|
#endif
|