#include "support/lstrings.h"
#include "support/filetools.h"
#include "support/path.h"
-#include "minibuffer.h"
+#include "exporter.h"
+#include "converter.h"
+#include "support/syscall.h"
+#include "lyxfunc.h"
-extern LyXRC lyxrc;
-extern bool RunScript(Buffer * buffer, bool wait, string const & command,
- string const & orgname = string(), bool need_shell=true);
+using std::endl;
+extern LyXRC lyxrc;
-#ifdef CXX_WORKING_NAMESPACES
-namespace Liason
-{
-#endif
+namespace Liason {
PrinterParams getPrinterParams(Buffer * buffer)
{
bool printBuffer(Buffer * buffer, PrinterParams const & pp)
{
- bool result(false);
string command(lyxrc.print_command + ' ');
if (pp.target == PrinterParams::PRINTER
command += lyxrc.print_reverse_flag + ' ';
}
- BufferParams params(buffer->params);
- if (params.orientation
- == BufferParams::ORIENTATION_LANDSCAPE) {
- command += lyxrc.print_landscape_flag + ' ';
- }
-
if (1 < pp.count_copies) {
if (pp.unsorted_copies) {
command += lyxrc.print_copies_flag;
command += lyxrc.print_extra_options + ' ';
}
- char real_papersize = params.papersize;
- if (real_papersize == BufferParams::PAPER_DEFAULT) {
- real_papersize = lyxrc.default_papersize;
- }
+ command += converters.dvips_options(buffer) + ' ';
- if (params.use_geometry
- && params.papersize2 == BufferParams::VM_PAPER_CUSTOM
- && !lyxrc.print_paper_dimension_flag.empty()
- && !params.paperwidth.empty()
- && !params.paperheight.empty()) {
- // using a custom papersize
- command += lyxrc.print_paper_dimension_flag + ' ';
- command += params.paperwidth + ',';
- command += params.paperheight + ' ';
- } else if (!lyxrc.print_paper_flag.empty()
- && (real_papersize != BufferParams::PAPER_USLETTER
- || params.orientation
- == BufferParams::ORIENTATION_PORTRAIT)) {
- // There's a problem with US Letter + landscape
- string paper;
- switch (real_papersize) {
- case BufferParams::PAPER_USLETTER:
- paper = "letter";
- break;
- case BufferParams::PAPER_A3PAPER:
- paper = "a3";
- break;
- case BufferParams::PAPER_A4PAPER:
- paper = "a4";
- break;
- case BufferParams::PAPER_A5PAPER:
- paper = "a5";
- break;
- case BufferParams::PAPER_B5PAPER:
- paper = "b5";
- break;
- case BufferParams::PAPER_EXECUTIVEPAPER:
- paper = "foolscap";
- break;
- case BufferParams::PAPER_LEGALPAPER:
- paper = "legal";
- break;
- default: /* If nothing else fits, keep empty value */
- break;
- }
- if (!paper.empty()) {
- command += lyxrc.print_paper_flag + ' ';
- command += paper + ' ';
- }
- }
+ if (!Exporter::Export(buffer, "dvi", true))
+ return false;
- // Push directory path if necessary.
- // PS file should go where the source file is unless it's a
- // read-only directory in which case we write it to tmpdir.
- // All temporary files go in tmpdir (like spool files).
+ // Push directory path.
string path = OnlyPath(buffer->fileName());
- if ((pp.target != PrinterParams::FILE
- && lyxrc.use_tempdir)
- || (IsDirWriteable(path) < 1)) {
+ if (lyxrc.use_tempdir || (IsDirWriteable(path) < 1)) {
path = buffer->tmppath;
}
Path p(path);
// 1. we print to a file
// 2. we print direct to a printer
// 3. we print using a spool command (print to file first)
+ Systemcalls one;
+ int res = 0;
+ string dviname = ChangeExtension(buffer->getLatexName(true), "dvi");
switch (pp.target) {
case PrinterParams::PRINTER:
if (!lyxrc.print_spool_command.empty()) {
- // case 3
+ // case 3
+ string psname = ChangeExtension(dviname, ".ps");
command += lyxrc.print_to_file
- + QuoteName(pp.file_name);
- string command2 = lyxrc.print_spool_command
- + ' ';
- if (!pp.printer_name.empty()) {
+ + QuoteName(psname) + ' ';
+ command += QuoteName(dviname);
+ string command2 = lyxrc.print_spool_command + ' ';
+ if (!pp.printer_name.empty())
command2 += lyxrc.print_spool_printerprefix
- + pp.printer_name;
- }
- // First run dvips.
- // If successful, then spool command
- if (result = RunScript(buffer, true, command)) {
- result = RunScript(buffer, false,
- command2,
- QuoteName(pp.file_name));
- }
- } else {
- // case 2
- result = RunScript(buffer, false, command);
- }
+ + pp.printer_name + ' ';
+ command2 += QuoteName(psname);
+ // First run dvips.
+ // If successful, then spool command
+ res = one.startscript(Systemcalls::System, command);
+ if (res == 0)
+ res = one.startscript(Systemcalls::SystemDontWait,
+ command2);
+ } else
+ // case 2
+ res = one.startscript(Systemcalls::SystemDontWait,
+ command + QuoteName(dviname));
break;
case PrinterParams::FILE:
// case 1
command += lyxrc.print_to_file
+ QuoteName(MakeAbsPath(pp.file_name, path));
- result = RunScript(buffer, false, command);
+ command += ' ' + QuoteName(dviname);
+ res = one.startscript(Systemcalls::SystemDontWait, command);
break;
}
- return result;
+ return res == 0;
}
-void setMinibuffer(LyXView * lv, char const * msg)
-{
- lv->getMiniBuffer()->Set(msg);
-}
-#ifdef CXX_WORKING_NAMESPACES
+void setMinibuffer(LyXView * lv, string const & msg)
+{
+ Assert(lv);
+ lv->message(msg);
}
-#endif
+} // namespace Liason