X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fformat.h;h=240d5d8a4cc9acbb932a822dca0f803ab822eeab;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=5603367ad13692e415c316e0eb9d5d5caa8a522a;hpb=44cd0fc9a1687cc63911c7f98d978594458e7813;p=lyx.git diff --git a/src/format.h b/src/format.h index 5603367ad1..240d5d8a4c 100644 --- a/src/format.h +++ b/src/format.h @@ -12,21 +12,38 @@ #ifndef FORMAT_H #define FORMAT_H +#include "support/docstring.h" + #include #include + +namespace lyx { + class Buffer; class Format { public: + /// Flags for some format properties + enum Flags { + none = 0, + /// Set if this format is a document format (as opposed to + /// e.g. image formats). + /// Some formats are both (e.g. pdf), they have this flag set. + document = 1, + /// Set if this format can contain vector graphics. + vector = 2, + }; /// Format(std::string const & n, std::string const & e, std::string const & p, - std::string const & s, std::string const & v); + std::string const & s, std::string const & v, std::string const & ed, + int); /// bool dummy() const; - /// + /// Tell whether this format is a child format. + /// Child formats inherit settings like the viewer from their parent. bool isChildFormat() const; - /// + /// Name fo the parent format std::string const parentFormat() const; /// std::string const & name() const { @@ -52,21 +69,49 @@ public: void setViewer(std::string const & v) { viewer_ = v; } + /// + std::string const & editor() const { + return editor_; + } + /// + void setEditor(std::string const & v) { + editor_ = v; + } + /// + bool documentFormat() const { + return flags_ & document; + } + /// + bool vectorFormat() const { + return flags_ & vector; + } private: + /// Internal name. Needs to be unique. std::string name_; - /// + /// Filename extension std::string extension_; - /// + /// Name presented to the user. Needs to be unique. std::string prettyname_; - /// + /// Keyboard shortcut for the View and Export menu. std::string shortcut_; - /// + /*! + * Viewer for this format. Needs to be in the PATH or an absolute + * filename. + * This format cannot be viewed if \c viewer_ is empty. + * If it is \c auto the default viewer of the OS for this format is + * used. + */ std::string viewer_; + /// Editor for this format. \sa viewer_. + std::string editor_; + /// + int flags_; }; bool operator<(Format const & a, Format const & b); + /// class Formats { public: @@ -78,15 +123,27 @@ public: Format const & get(FormatList::size_type i) const { return formatlist[i]; } - /// + /// \returns format named \p name if it exists, otherwise 0 Format const * getFormat(std::string const & name) const; + /*! + * Get the format of \p filename from file contents or, if this + * fails, from file extension. + * \returns file format if it could be found, otherwise an empty + * string. + */ + std::string getFormatFromFile(std::string const & filename) const; + /// Set editor and/or viewer to "auto" for formats that can be + /// opened by the OS. + void setAutoOpen(); /// int getNumber(std::string const & name) const; /// void add(std::string const & name); /// void add(std::string const & name, std::string const & extension, - std::string const & prettyname, std::string const & shortcut); + std::string const & prettyname, std::string const & shortcut, + std::string const & viewer, std::string const & editor, + int flags); /// void erase(std::string const & name); /// @@ -97,21 +154,18 @@ public: bool view(Buffer const & buffer, std::string const & filename, std::string const & format_name) const; /// - std::string const prettyName(std::string const & name) const; + bool edit(Buffer const & buffer, std::string const & filename, + std::string const & format_name) const; + /// + docstring const prettyName(std::string const & name) const; /// std::string const extension(std::string const & name) const; /// - const_iterator begin() const { - return formatlist.begin(); - } + const_iterator begin() const { return formatlist.begin(); } /// - const_iterator end() const { - return formatlist.end(); - } + const_iterator end() const { return formatlist.end(); } /// - FormatList::size_type size() const { - return formatlist.size(); - } + FormatList::size_type size() const { return formatlist.size(); } private: /// FormatList formatlist; @@ -121,4 +175,7 @@ extern Formats formats; extern Formats system_formats; + +} // namespace lyx + #endif //FORMAT_H