X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fconverter.h;h=6350fd5fdc98a623bb10e4af730386053bb309d4;hb=ba62665f966508db5a4de6864f4aa7374c5a5356;hp=b4f7b286250ff7930ce6df4e0f7facfada8c675d;hpb=99d1627a471b92f403598d03dfc861ddc3c11be0;p=lyx.git diff --git a/src/converter.h b/src/converter.h index b4f7b28625..6350fd5fdc 100644 --- a/src/converter.h +++ b/src/converter.h @@ -1,156 +1,51 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== +/** + * \file converter.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor + * \author Dekel Tsur * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. - * - * ====================================================== */ + * Full author contact details are available in file CREDITS. + */ #ifndef CONVERTER_H #define CONVERTER_H -#include -#include -#include "LString.h" -#include "support/lstrings.h" - -class Buffer; - -/// -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_; -}; +#include "graph.h" +#include "outputparams.h" +#include +#include -inline -bool operator<(Format const & a, Format const & b) -{ - // use the compare_ascii_no_case instead of compare_no_case, - // because in turkish, 'i' is not the lowercase version of 'I', - // and thus turkish locale breaks parsing of tags. - return compare_ascii_no_case(a.prettyname(), b.prettyname()) < 0; -} +namespace lyx { +namespace support { class FileName; } -/// -class Formats { -public: - /// - typedef std::vector 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 Buffer; +class ErrorList; +class Format; +class Formats; +class OutputParams; -/////////////////////////////////////////////////////////////////////// /// class Converter { public: /// - Converter(string const & f, string const & t, string const & c, - string const & l) - : from(f), to(t), command(c), flags(l), From(0), To(0), - latex(false), original_dir(false), need_aux(false) {} + Converter(std::string const & f, std::string const & t, std::string const & c, + std::string const & l); /// void readFlags(); /// - string from; + std::string from; /// - string to; + std::string to; /// - string command; + std::string command; /// - string flags; + std::string flags; /// Format const * From; /// @@ -158,80 +53,82 @@ public: /// 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 - string result_dir; + 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 - string result_file; + std::string result_file; /// Command to convert the program output to a LaTeX log file format - string parselog; + std::string parselog; }; /// class Converters { public: + /// + typedef std::vector EdgePath; // to be removed SOON + /// typedef std::vector ConverterList; /// typedef ConverterList::const_iterator const_iterator; /// - typedef std::vector EdgePath; - /// Converter const & get(int i) const { return converterlist_[i]; } /// - Converter const * getConverter(string const & from, string const & to); + Converter const * getConverter(std::string const & from, + std::string const & to) const; /// - int getNumber(string const & from, string const & to); + int getNumber(std::string const & from, std::string const & to) const; /// - void add(string const & from, string const & to, - string const & command, string const & flags); + void add(std::string const & from, std::string const & to, + std::string const & command, std::string const & flags); // - void erase(string const & from, string const & to); + void erase(std::string const & from, std::string const & to); /// void sort(); /// std::vector const - getReachableTo(string const & target, bool clear_visited); + getReachableTo(std::string const & target, bool clear_visited); /// std::vector const - getReachable(string const & from, bool only_viewable, + getReachable(std::string const & from, bool only_viewable, bool clear_visited); - /// - bool isReachable(string const & from, string const & to); - /// - EdgePath const getPath(string const & from, string const & to); - /// - bool usePdflatex(EdgePath const & path); - /// - bool convert(Buffer const * buffer, - string const & from_file, string const & to_file_base, - string const & from_format, string const & to_format, - string & to_file); + /// Does a conversion path from format \p from to format \p to exist? + bool isReachable(std::string const & from, std::string const & to); + /// + 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, - string const & from_file, string const & to_file_base, - string const & from_format, string const & to_format); - /// - string const papersize(Buffer const * buffer); - /// - string const dvips_options(Buffer const * buffer); - /// - string const dvipdfm_options(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); /// void updateLast(Formats const & formats); /// - void buildGraph(); - /// - bool formatIsUsed(string const & format); + bool formatIsUsed(std::string const & format); /// const_iterator begin() const { return converterlist_.begin(); @@ -239,39 +136,39 @@ public: const_iterator end() const { return converterlist_.end(); } -private: /// - bool scanLog(Buffer const * buffer, string const & command, - string const & filename); - /// - bool runLaTeX(Buffer const * buffer, string const & command); - /// - ConverterList converterlist_; - /// - string latex_command_; + void buildGraph(); +private: /// - struct Vertex { - std::vector in_vertices; - std::vector out_vertices; - std::vector out_edges; - }; + std::vector const + intToFormat(std::vector const & input); /// - static - std::vector vertices_; + bool scanLog(Buffer const & buffer, std::string const & command, + support::FileName const & filename, ErrorList & errorList); /// - std::vector visited_; + bool runLaTeX(Buffer const & buffer, std::string const & command, + OutputParams const &, ErrorList & errorList); /// - std::queue Q_; + ConverterList converterlist_; /// - int bfs_init(string const & start, bool clear_visited = true); + 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); /// - bool move(string const & from, string const & to, bool copy); + Graph G_; }; -extern Formats formats; -extern Converters converters; +/// 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(); -extern Formats system_formats; -extern Converters system_converters; +} // namespace lyx -#endif +#endif //CONVERTER_H