]> git.lyx.org Git - lyx.git/blob - src/exporter.C
40986a514f1096ff61f67ce774c677b11a1f20e0
[lyx.git] / src / exporter.C
1 /* This file is part of
2  * ====================================================== 
3  * 
4  *           LyX, The Document Processor
5  *        
6  *           Copyright 1995 Matthias Ettrich
7  *           Copyright 1995-2000 The LyX Team.
8  *
9  * ====================================================== */
10
11 #include <config.h>
12
13 #ifdef __GNUG__
14 #pragma implementation
15 #endif
16
17 #include "exporter.h"
18 #include "buffer.h"
19 #include "lyx_cb.h" //ShowMessage()
20 #include "support/filetools.h"
21 #include "lyxrc.h"
22 #include "converter.h"
23
24 using std::vector;
25
26 bool Exporter::Export(Buffer * buffer, string const & format0,
27                       bool put_in_tempdir, string * view_file)
28 {
29         string format;
30         string using_format = Converter::SplitFormat(format0, format);
31
32         string backend_format = (format == "txt") 
33                 ? format : BufferExtension(buffer);
34         bool only_backend = backend_format == format;
35
36         string filename = buffer->getLatexName(false);
37         if (!buffer->tmppath.empty())
38                 filename = AddName(buffer->tmppath, filename);
39         filename = ChangeExtension(filename, backend_format);
40
41         // Ascii backend
42         if (backend_format == "txt")
43                 buffer->writeFileAscii(filename, lyxrc.ascii_linelen);
44         // Linuxdoc backend
45         else if (buffer->isLinuxDoc())
46                 buffer->makeLinuxDocFile(filename, true);
47         // Docbook backend
48         else if (buffer->isDocBook())
49                 buffer->makeDocBookFile(filename, true);
50         // LaTeX backend
51         else if (only_backend)
52                 buffer->makeLaTeXFile(filename, string(), true);
53         else
54                 buffer->makeLaTeXFile(filename, buffer->filepath, false);
55
56         string outfile = (put_in_tempdir)
57                 ? ChangeExtension(filename, format)
58                 : ChangeExtension(buffer->getLatexName(false), format);
59
60         if (!Converter::Convert(buffer, filename, outfile, using_format, 
61                                 view_file))
62                 return false;
63
64         if (!put_in_tempdir)
65                 ShowMessage(buffer,
66                             _("Document exported as ")
67                             + Formats::PrettyName(format)
68                             + _(" to file `")
69                             + MakeDisplayPath(outfile) +'\'');
70         return true;
71 }
72
73
74 bool Exporter::Preview(Buffer * buffer, string const & format0)
75 {
76         string view_file;
77         if (!Export(buffer, format0, true, &view_file))
78                 return false;
79
80         return Formats::View(buffer, view_file);
81 }
82
83
84 bool Exporter::IsExportable(Buffer const * buffer, string const & format)
85 {
86         return format == "txt" ||
87                 Converter::IsReachable(BufferExtension(buffer), format);
88 }
89
90
91 vector<FormatPair> const
92 Exporter::GetExportableFormats(Buffer const * buffer)
93 {
94         vector<FormatPair> result = 
95                 Converter::GetReachable(BufferExtension(buffer), false);
96         Format * format = Formats::GetFormat("txt");
97         if (format)
98                 result.push_back(FormatPair(format , 0, ""));
99         return result;
100 }
101
102
103 vector<FormatPair> const
104 Exporter::GetViewableFormats(Buffer const * buffer)
105 {
106         vector<FormatPair> result = 
107                 Converter::GetReachable(BufferExtension(buffer), true);
108         Format * format = Formats::GetFormat("txt");
109         if (format && !format->viewer.empty())
110                 result.push_back(FormatPair(format , 0, ""));
111         return result;
112 }
113
114
115 string const Exporter::BufferExtension(Buffer const * buffer)
116 {
117         if (buffer->isLinuxDoc())
118                 return "sgml";
119         else if (buffer->isDocBook())
120                 return "docbook";
121         else if (buffer->isLiterate())
122                 return lyxrc.literate_extension;
123         else
124                 return "tex";
125 }