/* 

	Cadabra: a field-theory motivated computer algebra system.
	Copyright (C) 2001-2011  Kasper Peeters <kasper.peeters@aei.mpg.de>

   This program is free software: you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation, either version 3 of the
   License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
*/

#ifndef settings_hh__
#define settings_hh__

#include "algorithm.hh"
#include "props.hh"

/// Global settings
namespace settings {
	void register_properties();
};

class KeepHistory : public property {
	public:
		virtual        std::string name() const;
		bool           parse(exptree& tr, exptree::iterator pat, exptree::iterator prop, keyval_t&);
		virtual void   display(std::ostream&) const;
		virtual std::string unnamed_argument() const { return "set"; };

		bool value;
};

class DefRules : public property {
	public:
		virtual bool parse(exptree& tr, exptree::iterator pat, exptree::iterator prop, keyval_t& keyvals);
		virtual std::string unnamed_argument() const;

		exptree rules;
};

class PreDefaultRules : public DefRules {
	public:
		virtual std::string name() const;
};

class PostDefaultRules : public DefRules {
	public:
		virtual std::string name() const;
};

#endif
