X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fconverter.h;h=6350fd5fdc98a623bb10e4af730386053bb309d4;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=02588fee2b4cf3b004f38366561ae8f3e29cff9d;hpb=9625f5e2300339330e099ccea259c46667ea1461;p=lyx.git diff --git a/src/converter.h b/src/converter.h index 02588fee2b..6350fd5fdc 100644 --- a/src/converter.h +++ b/src/converter.h @@ -1,107 +1,174 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. +/** + * \file converter.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * ====================================================== */ + * \author Dekel Tsur + * + * Full author contact details are available in file CREDITS. + */ #ifndef CONVERTER_H #define CONVERTER_H -#ifdef __GNUG__ -#pragma interface -#endif +#include "graph.h" +#include "outputparams.h" -#include #include -#include "LString.h" +#include + + +namespace lyx { + +namespace support { class FileName; } class Buffer; +class ErrorList; +class Format; +class Formats; +class OutputParams; -struct Command { - Command(string const & f, string const & t, string const & c, - bool o) - : from(f), to(t), command(c), original_dir(o) {} + +/// +class Converter { +public: /// - string from; + Converter(std::string const & f, std::string const & t, std::string const & c, + std::string const & l); /// - string to; + void readFlags(); /// - string command; + std::string from; /// - bool original_dir; + std::string to; /// - bool visited; + std::string command; /// - std::vector::iterator previous; + std::string flags; + /// + Format const * From; + /// + Format const * To; + + /// The converter is latex or its derivatives + bool latex; + /// The converter is xml + bool xml; + /// Do we need to run the converter in the original directory? + bool original_dir; + /// This converter needs the .aux files + bool need_aux; + /// If the converter put the result in a directory, then result_dir + /// is the name of the directory + std::string 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; + /// Command to convert the program output to a LaTeX log file format + std::string parselog; }; -class Format { + +/// +class Converters { public: - Format() : in_degree(0) {} /// - Format(string const & n); + typedef std::vector EdgePath; // to be removed SOON /// - string name; + typedef std::vector ConverterList; /// - string prettyname; + typedef ConverterList::const_iterator const_iterator; /// - string viewer; + Converter const & get(int i) const { + return converterlist_[i]; + } /// - int in_degree; -}; - -class Formats { -public: + Converter const * getConverter(std::string const & from, + std::string const & to) const; /// - static - void Add(string const & name); + int getNumber(std::string const & from, std::string const & to) const; /// - static - void SetViewer(string const & name, string const & command); + void add(std::string const & from, std::string const & to, + std::string const & command, std::string const & flags); + // + void erase(std::string const & from, std::string const & to); /// - static - bool View(string const & filename); + void sort(); /// - static - Format * GetFormat(string const & name); + std::vector const + getReachableTo(std::string const & target, bool clear_visited); /// - static - string PrettyName(string const & name); -private: + std::vector const + getReachable(std::string const & from, bool only_viewable, + bool clear_visited); + /// Does a conversion path from format \p from to format \p to exist? + bool isReachable(std::string const & from, std::string const & to); /// - static - std::map formats; -}; - -class Converter { -public: + Graph::EdgePath const getPath(std::string const & from, std::string const & to); + /// + OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path); + /// Flags for converting files + enum ConversionFlags { + /// No special flags + none = 0, + /// Use the default converter if no converter is defined + try_default = 1 << 0, + /// Get the converted file from cache if possible + try_cache = 1 << 1 + }; + /// + bool 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, + ErrorList & errorList, int conversionflags = none); + /// + void update(Formats const & formats); /// - static - void Add(string const & from, string const & to, - string const & command, string const & flags); + void updateLast(Formats const & formats); /// - static - std::vector > GetReachable(string const & from, - bool only_viewable = false); + bool formatIsUsed(std::string const & format); /// - static - bool convert(Buffer * buffer, string const & from_file, - string const & to_format); + const_iterator begin() const { + return converterlist_.begin(); + } + const_iterator end() const { + return converterlist_.end(); + } /// - static - string SplitFormat(string const & str, string & format); + void buildGraph(); private: /// - static - bool runLaTeX(Buffer * buffer, string const & command); + std::vector const + intToFormat(std::vector const & input); /// - static - std::vector commands; + bool scanLog(Buffer const & buffer, std::string const & command, + support::FileName const & filename, ErrorList & errorList); + /// + bool runLaTeX(Buffer const & buffer, std::string const & command, + OutputParams const &, ErrorList & errorList); + /// + ConverterList converterlist_; + /// + std::string latex_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, + support::FileName const & from, support::FileName const & to, + bool copy); + /// + Graph G_; }; -#endif +/// The global instance. +/// Implementation is in lyx_main.C. +extern Converters & theConverters(); + +/// The global copy after reading lyxrc.defaults. +/// Implementation is in lyx_main.C. +extern Converters & theSystemConverters(); + +} // namespace lyx + +#endif //CONVERTER_H