+class Format {
+public:
+ ///
+ Format(string const & n, string const & e, string const & p,
+ string const & s, string const & v) :
+ name_(n), extension_(e), prettyname_(p), shortcut_(s),
+ viewer_(v) {};
+ ///
+ bool dummy() const;
+ ///
+ bool isChildFormat() const;
+ ///
+ string const parentFormat() const;
+ ///
+ string const & name() const {
+ return name_;
+ }
+ ///
+ string const & extension() const {
+ return extension_;
+ }
+ ///
+ string const & prettyname() const {
+ return prettyname_;
+ }
+ ///
+ string const & shortcut() const {
+ return shortcut_;
+ }
+ ///
+ string const & viewer() const {
+ return viewer_;
+ }
+ ///
+ void setViewer(string const & v) {
+ viewer_ = v;
+ }
+private:
+ string name_;
+ ///
+ string extension_;
+ ///
+ string prettyname_;
+ ///
+ string shortcut_;
+ ///
+ string viewer_;
+};
+
+
+inline
+bool operator<(Format const & a, Format const & b)
+{
+ return compare_no_case(a.prettyname(), b.prettyname()) < 0;
+}
+
+
+///
+class Formats {
+public:
+ ///
+ typedef std::vector<Format> FormatList;
+ ///
+ typedef FormatList::const_iterator const_iterator;
+ ///
+ Format const & get(FormatList::size_type i) const {
+ return formatlist[i];
+ }
+ ///
+ Format const * getFormat(string const & name) const;
+ ///
+ int getNumber(string const & name) const;
+ ///
+ void add(string const & name);
+ ///
+ void add(string const & name, string const & extension,
+ string const & prettyname, string const & shortcut);
+ ///
+ void erase(string const & name);
+ ///
+ void sort();
+ ///
+ void setViewer(string const & name, string const & command);
+ ///
+ bool view(Buffer const * buffer, string const & filename,
+ string const & format_name) const;
+ ///
+ string const prettyName(string const & name) const;
+ ///
+ string const extension(string const & name) const;
+ ///
+ const_iterator begin() const {
+ return formatlist.begin();
+ }
+ ///
+ const_iterator end() const {
+ return formatlist.end();
+ }
+ ///
+ FormatList::size_type size() const {
+ return formatlist.size();
+ }
+private:
+ ///
+ FormatList formatlist;
+};
+
+///////////////////////////////////////////////////////////////////////
+
+///
+class Converter {
+public: