4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
16 #include "OutputParams.h"
24 namespace support
{ class FileName
; }
37 Converter(std::string
const & f
, std::string
const & t
, std::string
const & c
,
38 std::string
const & l
);
54 /// The converter is latex or its derivatives
56 /// The converter is xml
58 /// This converter needs the .aux files
60 /// If the converter put the result in a directory, then result_dir
61 /// is the name of the directory
62 std::string result_dir
;
63 /// If the converter put the result in a directory, then result_file
64 /// is the name of the main file in that directory
65 std::string result_file
;
66 /// Command to convert the program output to a LaTeX log file format
75 typedef std::vector
<Converter
> ConverterList
;
77 typedef ConverterList::const_iterator const_iterator
;
79 Converter
const & get(int i
) const { return converterlist_
[i
]; }
81 Converter
const * getConverter(std::string
const & from
,
82 std::string
const & to
) const;
84 int getNumber(std::string
const & from
, std::string
const & to
) const;
86 void add(std::string
const & from
, std::string
const & to
,
87 std::string
const & command
, std::string
const & flags
);
89 void erase(std::string
const & from
, std::string
const & to
);
93 std::vector
<Format
const *> const
94 getReachableTo(std::string
const & target
, bool clear_visited
);
96 std::vector
<Format
const *> const
97 getReachable(std::string
const & from
, bool only_viewable
,
100 std::vector
<Format
const *> importableFormats();
101 std::vector
<Format
const *> exportableFormats(bool only_viewable
);
103 std::vector
<std::string
> loaders() const;
104 std::vector
<std::string
> savers() const;
106 /// Does a conversion path from format \p from to format \p to exist?
107 bool isReachable(std::string
const & from
, std::string
const & to
);
109 Graph::EdgePath
getPath(std::string
const & from
, std::string
const & to
);
111 OutputParams::FLAVOR
getFlavor(Graph::EdgePath
const & path
);
112 /// Flags for converting files
113 enum ConversionFlags
{
116 /// Use the default converter if no converter is defined
117 try_default
= 1 << 0,
118 /// Get the converted file from cache if possible
122 bool convert(Buffer
const * buffer
,
123 support::FileName
const & from_file
, support::FileName
const & to_file
,
124 support::FileName
const & orig_from
,
125 std::string
const & from_format
, std::string
const & to_format
,
126 ErrorList
& errorList
, int conversionflags
= none
);
128 void update(Formats
const & formats
);
130 void updateLast(Formats
const & formats
);
132 bool formatIsUsed(std::string
const & format
);
134 const_iterator
begin() const { return converterlist_
.begin(); }
136 const_iterator
end() const { return converterlist_
.end(); }
141 std::vector
<Format
const *> const
142 intToFormat(std::vector
<int> const & input
);
144 bool scanLog(Buffer
const & buffer
, std::string
const & command
,
145 support::FileName
const & filename
, ErrorList
& errorList
);
147 bool runLaTeX(Buffer
const & buffer
, std::string
const & command
,
148 OutputParams
const &, ErrorList
& errorList
);
150 ConverterList converterlist_
;
152 std::string latex_command_
;
153 /// If \p from = /path/file.ext and \p to = /path2/file2.ext2 then
154 /// this method moves each /path/file*.ext file to /path2/file2*.ext2
155 bool move(std::string
const & fmt
,
156 support::FileName
const & from
, support::FileName
const & to
,
162 /// The global instance.
163 /// Implementation is in LyX.cpp.
164 extern Converters
& theConverters();
166 /// The global copy after reading lyxrc.defaults.
167 /// Implementation is in LyX.cpp.
168 extern Converters
& theSystemConverters();