X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fconverter.h;h=6bac8b87ff96420044a29e081df1f6fed1957eb6;hb=7cb3b054916d146ccf5b57d15351b448775af26a;hp=91f1444aff805b502ae7f41f6a395360188fdcdc;hpb=8aff605caefaba655e48bc629ed344bb74bcd61a;p=lyx.git diff --git a/src/converter.h b/src/converter.h index 91f1444aff..6bac8b87ff 100644 --- a/src/converter.h +++ b/src/converter.h @@ -5,7 +5,7 @@ * LyX, The Document Processor * * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. + * Copyright 1995-2001 The LyX Team. * * ====================================================== */ @@ -16,45 +16,146 @@ #pragma interface #endif -#include #include +#include #include "LString.h" +#include "support/lstrings.h" class Buffer; /// class Format { public: - /// - Format() {} /// Format(string const & n, string const & e, string const & p, - string const & s) : - name(n), extension(e), prettyname(p), shortcut(s) {}; + 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_; +}; + + +inline +bool operator<(Format const & a, Format const & b) +{ + return compare_no_case(a.prettyname(),b.prettyname()) < 0; +} + + +/// +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 Delete(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 name; + string const PrettyName(string const & name) const; /// - string extension; + string const Extension(string const & name) const; /// - string prettyname; + const_iterator begin() const { + return formatlist.begin(); + } /// - string shortcut; + const_iterator end() const { + return formatlist.end(); + } /// - string viewer; + FormatList::size_type size() const { + return formatlist.size(); + } +private: + /// + FormatList formatlist; }; +/////////////////////////////////////////////////////////////////////// + /// -struct Command { +class Converter { +public: /// - Command(Format const * f, Format const * t, string const & c) - : from(f), to(t), command(c), + 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) {} /// - Format const * from; + void ReadFlags(); + /// + string from; /// - Format const * to; + string to; /// string command; + /// + string flags; + /// + Format const * From; + /// + Format const * To; + /// The converter is latex or its derivatives bool latex; /// Do we need to run the converter in the original directory? @@ -69,115 +170,108 @@ struct Command { string result_file; /// Command to convert the program output to a LaTeX log file format string parselog; - /// Backends in which the converter is not used - std::vector disable; - - /// Used by the BFS algorithm - bool visited; - /// Used by the BFS algorithm - std::vector::iterator previous; }; -class FormatPair { -public: - /// - Format const * format; - /// - Format const * from; - /// - string command; - /// - FormatPair(Format const * f1, Format const * f2, string c) - : format(f1), from(f2), command(c) {} -}; /// -class Formats { +class Converters { public: + typedef std::vector ConverterList; /// - static - void Add(string const & name); - /// - static - void Add(string const & name, string const & extension, - string const & prettyname, string const & shortcut); - /// - static - void SetViewer(string const & name, string const & command); + typedef ConverterList::const_iterator const_iterator; /// - static - bool View(Buffer const * buffer, string const & filename, - string const & format_name); - /// - static - Format * GetFormat(string const & name); + typedef std::vector EdgePath; /// - static - string const PrettyName(string const & name); + Converter const & Get(int i) const { + return converterlist[i]; + } /// - static - string const Extension(string const & name); -private: + Converter const * GetConverter(string const & from, string const & to); /// - static - std::map formats; -}; - -/// -class Converter { -public: + int GetNumber(string const & from, string const & to); /// - static void Add(string const & from, string const & to, string const & command, string const & flags); + // + void Delete(string const & from, string const & to); /// - + void Sort(); /// - static - std::vector const - GetReachable(string const & from, string const & stop_format, - bool only_viewable); + std::vector const + GetReachableTo(string const & target, bool clear_visited); + /// + std::vector const + GetReachable(string const & from, bool only_viewable, + bool clear_visited); /// - static bool IsReachable(string const & from, string const & to); /// - static + 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 const & using_format, string & to_file); + string & to_file); /// - static bool Convert(Buffer const * buffer, string const & from_file, string const & to_file_base, - string const & from_format, string const & to_format, - string const & using_format = string()); + string const & from_format, string const & to_format); /// - static - string const SplitFormat(string const & str, string & format); - /// - static - string const dvi_papersize(Buffer const * buffer); + string const papersize(Buffer const * buffer); /// - static string const dvips_options(Buffer const * buffer); /// - static - void init(); + string const dvipdfm_options(Buffer const * buffer); + /// + void Update(Formats const & formats); + /// + void UpdateLast(Formats const & formats); + /// + void BuildGraph(); + /// + bool FormatIsUsed(string const & format); + /// + const_iterator begin() const { + return converterlist.begin(); + } + const_iterator end() const { + return converterlist.end(); + } private: /// - static bool scanLog(Buffer const * buffer, string const & command, string const & filename); /// - static bool runLaTeX(Buffer const * buffer, string const & command); /// - static - std::vector commands; + ConverterList converterlist; /// - static string latex_command; + /// + struct Vertex { + std::vector in_vertices; + std::vector out_vertices; + std::vector out_edges; + }; + /// + static + std::vector vertices; + /// + std::vector visited; + /// + std::queue Q; + /// + int BFS_init(string const & start, bool clear_visited = true); + /// + bool Move(string const & from, string const & to, bool copy); }; +extern Formats formats; +extern Converters converters; + +extern Formats system_formats; +extern Converters system_converters; + #endif