#include "Graph.h"
#include "OutputParams.h"
+#include "support/trivstring.h"
#include <vector>
+#include <set>
#include <string>
class ErrorList;
class Format;
class Formats;
-class OutputParams;
+
+typedef std::vector<Format const *> FormatList;
///
///
void readFlags();
///
- std::string from;
+ std::string const from() const { return from_; }
+ ///
+ std::string const to() const { return to_; }
+ ///
+ std::string const command() const { return command_; }
+ ///
+ void setCommand(std::string const & command) { command_ = command; }
+ ///
+ std::string const flags() const { return flags_; }
+ ///
+ void setFlags(std::string const & flags) { flags_ = flags; }
+ ///
+ Format const * From() const { return From_; }
+ ///
+ void setFrom(Format const * From) { From_ = From; }
///
- std::string to;
+ void setTo(Format const * To) { To_ = To; }
///
- std::string command;
+ Format const * To() const { return To_; }
///
- std::string flags;
+ bool latex() const { return latex_; }
///
- Format const * From;
+ std::string const latex_flavor() const { return latex_flavor_; }
///
- Format const * To;
+ 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_; }
+ ///
+ std::string const result_dir() const { return result_dir_; }
+ ///
+ std::string const result_file() const { return result_file_; }
+ ///
+ std::string const parselog() const { return parselog_; }
+
+private:
+ ///
+ trivstring from_;
+ ///
+ trivstring to_;
+ ///
+ trivstring command_;
+ ///
+ trivstring flags_;
+ ///
+ Format const * From_;
+ ///
+ Format const * To_;
/// The converter is latex or its derivatives
- bool latex;
+ bool latex_;
+ /// The latex derivate
+ trivstring latex_flavor_;
/// The converter is xml
- bool xml;
+ bool xml_;
/// This converter needs the .aux files
- bool need_aux;
+ 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
- std::string result_dir;
+ trivstring result_dir_;
/// If the converter put the result in a directory, then result_file
/// is the name of the main file in that directory
- std::string result_file;
+ trivstring result_file_;
/// Command to convert the program output to a LaTeX log file format
- std::string parselog;
+ trivstring parselog_;
};
typedef std::vector<Converter> ConverterList;
///
typedef ConverterList::const_iterator const_iterator;
+
///
Converter const & get(int i) const { return converterlist_[i]; }
///
//
void erase(std::string const & from, std::string const & to);
///
- void sort();
+ FormatList const
+ getReachableTo(std::string const & target, bool clear_visited);
///
- std::vector<Format const *> const
- getReachableTo(std::string const & target, bool clear_visited);
- ///
- std::vector<Format const *> const
- getReachable(std::string const & from, bool only_viewable,
- bool clear_visited);
+ FormatList const
+ getReachable(std::string const & from, bool only_viewable,
+ bool clear_visited,
+ std::set<std::string> const & excludes = std::set<std::string>());
- std::vector<Format const *> importableFormats();
- std::vector<Format const *> exportableFormats(bool only_viewable);
+ FormatList importableFormats();
+ FormatList exportableFormats(bool only_viewable);
std::vector<std::string> loaders() const;
std::vector<std::string> savers() const;
///
Graph::EdgePath getPath(std::string const & from, std::string const & to);
///
- OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path);
+ OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path,
+ Buffer const * buffer = 0);
/// Flags for converting files
enum ConversionFlags {
/// No special flags
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<Format const *> const
+ FormatList const
intToFormat(std::vector<int> const & input);
///
bool scanLog(Buffer const & buffer, std::string const & command,
///
ConverterList converterlist_;
///
- std::string latex_command_;
+ trivstring latex_command_;
+ ///
+ trivstring dvilualatex_command_;
+ ///
+ trivstring lualatex_command_;
+ ///
+ trivstring pdflatex_command_;
+ ///
+ trivstring xelatex_command_;
/// If \p from = /path/file.ext and \p to = /path2/file2.ext2 then
/// this method moves each /path/file*.ext file to /path2/file2*.ext2
bool move(std::string const & fmt,