X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fconverter.h;h=0f507af1ac66fde8c46f878cb98d21dff8b7f0d2;hb=98c966c64594611e469313314abd1e59524adb4a;hp=dc151dba05dd98ee597840c6ee8df873d4ee90ef;hpb=83882f6d92b2ce51a7c0b05fe28df9dfbd8e1143;p=lyx.git diff --git a/src/converter.h b/src/converter.h index dc151dba05..0f507af1ac 100644 --- a/src/converter.h +++ b/src/converter.h @@ -1,11 +1,11 @@ // -*- C++ -*- /* This file is part of - * ====================================================== - * + * ====================================================== + * * LyX, The Document Processor - * + * * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. + * Copyright 1995-2001 The LyX Team. * * ====================================================== */ @@ -16,104 +16,262 @@ #pragma interface #endif -#include #include +#include #include "LString.h" +#include "support/lstrings.h" class Buffer; /// -struct Command { +class Format { +public: /// - Command(string const & f, string const & t, string const & c, - bool o) - : from(f), to(t), command(c), original_dir(o) {} + 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) {}; /// - string from; + bool dummy() const; /// - string to; + bool isChildFormat() const; /// - string command; + string const parentFormat() const; /// - bool original_dir; + string const & name() const { + return name_; + } + /// + string const & extension() const { + return extension_; + } + /// + string const & prettyname() const { + return prettyname_; + } + /// + string const & shortcut() const { + return shortcut_; + } /// - bool visited; + string const & viewer() const { + return viewer_; + } /// - std::vector::iterator previous; + 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 Format { +class Formats { public: /// - Format() : in_degree(0) {} + typedef std::vector FormatList; + /// + typedef FormatList::const_iterator const_iterator; /// - Format(string const & n); + Format const & get(FormatList::size_type i) const { + return formatlist[i]; + } /// - string name; + Format const * getFormat(string const & name) const; /// - string prettyname; + int getNumber(string const & name) const; /// - string viewer; + void add(string const & name); /// - int in_degree; + 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 Formats { +class Converter { public: /// - static - void Add(string const & name); + 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) {} /// - static - void SetViewer(string const & name, string const & command); + void readFlags(); /// - static - bool View(Buffer * buffer, string const & filename); + string from; /// - static - Format * GetFormat(string const & name); + string to; /// - static - string const PrettyName(string const & name); -private: + string command; /// - static - std::map formats; + 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? + 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; + /// 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; + /// Command to convert the program output to a LaTeX log file format + string parselog; }; + /// -class Converter { +class Converters { public: + typedef std::vector ConverterList; /// - static - void Add(string const & from, string const & to, + 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); + /// + int getNumber(string const & from, string const & to); + /// + void add(string const & from, string const & to, string const & command, string const & flags); + // + void erase(string const & from, string const & to); /// - static - std::vector > const - GetReachable(string const & from, - bool only_viewable = false); + void sort(); /// - static - bool Convert(Buffer * buffer, string const & from_file, - string const & to_file, string const & using_format); - static - string const SplitFormat(string const & str, string & format); + std::vector const + getReachableTo(string const & target, bool clear_visited); /// - static - string dvi_papersize(Buffer * buffer); + std::vector const + getReachable(string const & from, bool only_viewable, + bool clear_visited); /// - static - string dvips_options(Buffer * buffer); + 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); + /// + 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); + /// + 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 runLaTeX(Buffer * buffer, string const & command); + bool scanLog(Buffer const * buffer, string const & command, + string const & filename); + /// + bool runLaTeX(Buffer const * buffer, string const & command); + /// + ConverterList converterlist_; + /// + string latex_command_; + /// + struct Vertex { + std::vector in_vertices; + std::vector out_vertices; + std::vector out_edges; + }; /// static - std::vector commands; + 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