X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.h;h=0031d023f77b39e6f8b816e4eced9f607fccba7b;hb=dba1e40b520f67faeb49759b7cec9ec4f981f9a1;hp=9a72d8c708c9c68602650083446671ee0cb88954;hpb=ed3b3afbe931ab164d4890d0260aa7ae35950fb5;p=lyx.git diff --git a/src/Converter.h b/src/Converter.h index 9a72d8c708..0031d023f7 100644 --- a/src/Converter.h +++ b/src/Converter.h @@ -29,9 +29,18 @@ class Buffer; class ErrorList; class Format; class Formats; -class OutputParams; + +class ConversionException : public std::exception { +public: + ConversionException() {} + virtual ~ConversionException() throw() {} + virtual const char * what() const throw() + { return "Exception caught in conversion routine!"; } +}; +typedef std::vector FormatList; + /// class Converter { public: @@ -68,6 +77,8 @@ public: bool xml() const { return xml_; } /// bool need_aux() const { return need_aux_; } + /// Return whether or not the needauth option is set for this converter + bool need_auth() const { return need_auth_; } /// bool nice() const { return nice_; } /// @@ -76,6 +87,9 @@ public: std::string const result_file() const { return result_file_; } /// std::string const parselog() const { return parselog_; } + /// + std::string const hyperref_driver() const { return href_driver_; } + private: /// trivstring from_; @@ -100,6 +114,8 @@ private: bool need_aux_; /// we need a "nice" file from the backend, c.f. OutputParams.nice. bool nice_; + /// Use of this converter needs explicit user authorization + bool need_auth_; /// If the converter put the result in a directory, then result_dir /// is the name of the directory trivstring result_dir_; @@ -108,6 +124,8 @@ private: trivstring result_file_; /// Command to convert the program output to a LaTeX log file format trivstring parselog_; + /// The hyperref driver + trivstring href_driver_; }; @@ -118,7 +136,13 @@ public: typedef std::vector ConverterList; /// typedef ConverterList::const_iterator const_iterator; - + /// Return values for converter runs + enum RetVal { + SUCCESS = 0, + FAILURE = 1, + KILLED = 1000 + }; + /// Converter const & get(int i) const { return converterlist_[i]; } /// @@ -132,16 +156,16 @@ public: // void erase(std::string const & from, std::string const & to); /// - std::vector const - getReachableTo(std::string const & target, bool clear_visited); + FormatList const + getReachableTo(std::string const & target, bool clear_visited); /// - std::vector const - getReachable(std::string const & from, bool only_viewable, - bool clear_visited, - std::set const & excludes = std::set()); + FormatList const + getReachable(std::string const & from, bool only_viewable, + bool clear_visited, + std::set const & excludes = std::set()); - std::vector importableFormats(); - std::vector exportableFormats(bool only_viewable); + FormatList importableFormats(); + FormatList exportableFormats(bool only_viewable); std::vector loaders() const; std::vector savers() const; @@ -153,6 +177,8 @@ public: /// OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path, Buffer const * buffer = 0); + /// + std::string getHyperrefDriver(Graph::EdgePath const & path); /// Flags for converting files enum ConversionFlags { /// No special flags @@ -163,7 +189,7 @@ public: try_cache = 1 << 1 }; /// - bool convert(Buffer const * buffer, + RetVal convert(Buffer const * buffer, support::FileName const & from_file, support::FileName const & to_file, support::FileName const & orig_from, std::string const & from_format, std::string const & to_format, @@ -180,15 +206,31 @@ public: const_iterator end() const { return converterlist_.end(); } /// void buildGraph(); + + /// Check whether converter conv is authorized to be run for elements + /// within document doc_fname. + /// The check succeeds for safe converters, whilst for those potentially + /// able to execute arbitrary code, tagged with the 'needauth' option, + /// authorization is: always denied if lyxrc.use_converter_needauth_forbidden + /// is enabled; always allowed if the lyxrc.use_converter_needauth + /// is disabled; user is prompted otherwise. + /// However, if use_shell_escape is true and a LaTeX backend is + /// going to be executed, both lyxrc.use_converter_needauth and + /// lyxrc.use_converter_needauth_forbidden are ignored, because in + /// this case the backend has to be executed and LyX will add the + /// -shell-escape option, so that user consent is always needed. + bool checkAuth(Converter const & conv, std::string const & doc_fname, + bool use_shell_escape = false); + private: /// - std::vector const + FormatList const intToFormat(std::vector const & input); /// bool scanLog(Buffer const & buffer, std::string const & command, support::FileName const & filename, ErrorList & errorList); /// - bool runLaTeX(Buffer const & buffer, std::string const & command, + RetVal runLaTeX(Buffer const & buffer, std::string const & command, OutputParams const &, ErrorList & errorList); /// ConverterList converterlist_;