diff options
Diffstat (limited to 'Build/source/utils/asymptote/picture.cc')
-rw-r--r-- | Build/source/utils/asymptote/picture.cc | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/Build/source/utils/asymptote/picture.cc b/Build/source/utils/asymptote/picture.cc index 8799274be04..026e4fba043 100644 --- a/Build/source/utils/asymptote/picture.cc +++ b/Build/source/utils/asymptote/picture.cc @@ -33,10 +33,13 @@ texstream::~texstream() { unlink((name+"aux").c_str()); unlink((name+"log").c_str()); unlink((name+"out").c_str()); - unlink((name+"m9").c_str()); - if(settings::pdf(texengine)) + if(settings::pdf(texengine)) { unlink((name+"pdf").c_str()); + unlink((name+"m9").c_str()); + } else + unlink((name+"pbsdat").c_str()); if(context) { + unlink("cont-new.log"); unlink((name+"tex").c_str()); unlink((name+"top").c_str()); unlink((name+"tua").c_str()); @@ -599,6 +602,35 @@ int picture::epstopdf(const string& epsname, const string& pdfname) return status; } +int picture::pdftoeps(const string& pdfname, const string& epsname) +{ + mem::vector<string> cmd; + cmd.push_back(getSetting<string>("gs")); + cmd.push_back("-q"); + cmd.push_back("-dNOCACHE"); + cmd.push_back("-dNOPAUSE"); + cmd.push_back("-dBATCH"); + cmd.push_back("-P"); + if(safe) + cmd.push_back("-dSAFER"); + string texengine=getSetting<string>("tex"); + cmd.push_back("-sDEVICE="+getSetting<string>("epsdriver")); + + cmd.push_back("-sOutputFile="+stripDir(epsname)); + cmd.push_back(stripDir(pdfname)); + + char *oldPath=NULL; + string dir=stripFile(epsname); + if(!dir.empty()) { + oldPath=getPath(); + setPath(dir.c_str()); + } + int status=System(cmd,0,true,"gs","Ghostscript"); + if(oldPath != NULL) + setPath(oldPath); + return status; +} + bool picture::reloadPDF(const string& Viewer, const string& outname) const { static bool needReload=true; @@ -647,6 +679,8 @@ bool picture::postprocess(const string& prename, const string& outname, if(status != 0) reportError("Cannot rename "+prename+" to "+outname); } else status=epstopdf(prename,outname); + } else if(epsformat) { + status=pdftoeps(prename,outname); } else { mem::vector<string> cmd; double render=fabs(getSetting<double>("render")); @@ -678,8 +712,9 @@ bool picture::postprocess(const string& prename, const string& outname, if(expand == 1.0) cmd.push_back("+antialias"); push_split(cmd,getSetting<string>("convertOptions")); - cmd.push_back("-geometry"); + cmd.push_back("-resize"); cmd.push_back(String(100.0/expand)+"%x"); + if(outputformat == "jpg") cmd.push_back("-flatten"); cmd.push_back(nativeformat()+":"+prename); cmd.push_back(outputformat+":"+outname); status=System(cmd,0,true,"convert"); @@ -1039,8 +1074,10 @@ bool picture::shipout(picture *preamble, const string& Prefix, if(context) prename=stripDir(prename); status=postprocess(prename,outname,outputformat,magnification,wait, view,pdf && Labels,svgformat); - if(pdfformat && !getSetting<bool>("keep")) + if(pdfformat && !getSetting<bool>("keep")) { unlink(auxname(prefix,"m9").c_str()); + unlink(auxname(prefix,"pbsdat").c_str()); + } } } } |