diff options
author | Norbert Preining <preining@logic.at> | 2018-04-06 05:21:01 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2018-04-06 05:21:01 +0000 |
commit | a11ba95f5b305c7d01cf2b6aec5640a6b1831117 (patch) | |
tree | 028e9aa29fb00177617b77a8d804a7bce694d5b0 /Build/source/utils/asymptote/picture.cc | |
parent | 0de24c07adcc80181a7aee919e1316a6149dda56 (diff) |
asymptote 2.43
git-svn-id: svn://tug.org/texlive/trunk@47319 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/picture.cc')
-rw-r--r-- | Build/source/utils/asymptote/picture.cc | 71 |
1 files changed, 53 insertions, 18 deletions
diff --git a/Build/source/utils/asymptote/picture.cc b/Build/source/utils/asymptote/picture.cc index 026e4fba043..5914f92af77 100644 --- a/Build/source/utils/asymptote/picture.cc +++ b/Build/source/utils/asymptote/picture.cc @@ -238,6 +238,16 @@ bool picture::have3D() return false; } +bool picture::havepng() +{ + for(nodelist::iterator p=nodes.begin(); p != nodes.end(); ++p) { + assert(*p); + if((*p)->svgpng()) + return true; + } + return false; +} + bbox picture::bounds() { size_t n=nodes.size(); @@ -409,7 +419,7 @@ int opentex(const string& texname, const string& prefix, bool dvi) bool picture::texprocess(const string& texname, const string& outname, const string& prefix, const pair& bboxshift, - bool svgformat) + bool svg) { int status=1; ifstream outfile; @@ -427,7 +437,7 @@ bool picture::texprocess(const string& texname, const string& outname, string dviname=auxname(prefix,"dvi"); mem::vector<string> cmd; - if(svgformat) { + if(svg) { cmd.push_back(getSetting<string>("dvisvgm")); cmd.push_back("-n"); cmd.push_back("--verbosity=3"); @@ -664,14 +674,15 @@ bool picture::reloadPDF(const string& Viewer, const string& outname) const bool picture::postprocess(const string& prename, const string& outname, const string& outputformat, double magnification, - bool wait, bool view, bool pdftex, bool svgformat) + bool wait, bool view, bool pdftex, + bool epsformat, bool svg) { static mem::map<CONST string,int> pids; int status=0; - bool epsformat=outputformat == "eps"; bool pdfformat=(settings::pdf(getSetting<string>("tex")) && outputformat == "") || outputformat == "pdf"; + mem::vector<string> cmd; if(pdftex || !epsformat) { if(pdfformat) { if(pdftex) { @@ -680,9 +691,26 @@ bool picture::postprocess(const string& prename, const string& outname, reportError("Cannot rename "+prename+" to "+outname); } else status=epstopdf(prename,outname); } else if(epsformat) { - status=pdftoeps(prename,outname); + if(svg) { + string epsname=stripExt(prename)+".eps"; + status=pdftoeps(prename,epsname); + cmd.push_back(getSetting<string>("dvisvgm")); + cmd.push_back("-n"); + cmd.push_back("-E"); + cmd.push_back("--verbosity=3"); + string libgs=getSetting<string>("libgs"); + if(!libgs.empty()) + cmd.push_back("--libgs="+libgs); + push_split(cmd,getSetting<string>("dvisvgmOptions")); + cmd.push_back("-o"+outname); + cmd.push_back(epsname); + status=System(cmd,0,true,"dvisvgm"); + if(!getSetting<bool>("keep")) + unlink(epsname.c_str()); + epsformat=false; + } else + status=pdftoeps(prename,outname); } else { - mem::vector<string> cmd; double render=fabs(getSetting<double>("render")); if(render == 0) render=1.0; double res=render*72.0; @@ -702,7 +730,7 @@ bool picture::postprocess(const string& prename, const string& outname, cmd.push_back("-sOutputFile="+outname); cmd.push_back(prename); status=System(cmd,0,true,"gs","Ghostscript"); - } else if(!svgformat) { + } else if(!svg) { double expand=antialias; if(expand < 2.0) expand=1.0; res *= expand; @@ -715,7 +743,7 @@ bool picture::postprocess(const string& prename, const string& outname, 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(prename); cmd.push_back(outputformat+":"+outname); status=System(cmd,0,true,"convert"); } @@ -809,8 +837,14 @@ bool picture::shipout(picture *preamble, const string& Prefix, string outputformat=format.empty() ? defaultformat() : format; bool epsformat=outputformat == "eps"; bool pdfformat=pdf || outputformat == "pdf"; - bool svgformat=outputformat == "svg" && !pdf && usetex && + bool svgformat=outputformat == "svg"; + bool dvi=false; + bool svg=svgformat && usetex && !(pdf && havepng()) && (!have3D() || getSetting<double>("render") == 0.0); + if(svg) { + if(pdf) epsformat=true; + else dvi=true; + } bool xobject=magnification > 0; string outname=Outname(prefix,outputformat,standardout); @@ -827,10 +861,11 @@ bool picture::shipout(picture *preamble, const string& Prefix, out.prologue(b); out.epilogue(); out.close(); - return postprocess(epsname,outname,outputformat,1.0,wait,view,false,false); + return postprocess(epsname,outname,outputformat,1.0,wait,view,false, + epsformat,false); } - Labels |= svgformat; + Labels |= svg; if(Labels) prefix=cleanpath(prefix); @@ -879,7 +914,7 @@ bool picture::shipout(picture *preamble, const string& Prefix, if(Labels) { texname=TeXmode ? buildname(prefix,"tex") : auxname(prefix,"tex"); - tex=svgformat ? new svgtexfile(texname,b) : new texfile(texname,b); + tex=dvi ? new svgtexfile(texname,b) : new texfile(texname,b); tex->prologue(); } @@ -934,7 +969,7 @@ bool picture::shipout(picture *preamble, const string& Prefix, bool postscript=false; drawLabel *L=NULL; - if(svgformat) + if(dvi) for(nodelist::const_iterator r=begin.begin(); r != begin.end(); ++r) (*r)->draw(&out); @@ -942,7 +977,7 @@ bool picture::shipout(picture *preamble, const string& Prefix, assert(*p); if(Labels && (*p)->islayer()) break; - if(svgformat && (*p)->svg()) { + if(dvi && (*p)->svg()) { picture *f=(*p)->svgpng() ? new picture : NULL; nodelist::const_iterator q=layerp; for(;;) { @@ -1029,7 +1064,7 @@ bool picture::shipout(picture *preamble, const string& Prefix, for (p=layerp; p != nodes.end(); ++p) { assert(*p); bool islayer=(*p)->islayer(); - if(svgformat && (*p)->svg()) { + if(dvi && (*p)->svg()) { islayer=true; if((*p)->svgpng()) L->write(tex,b); @@ -1057,8 +1092,8 @@ bool picture::shipout(picture *preamble, const string& Prefix, if(Labels) { tex->epilogue(); if(context) prefix=stripDir(prefix); - status=texprocess(texname,svgformat ? outname : prename,prefix, - bboxshift,svgformat); + status=texprocess(texname,dvi ? outname : prename,prefix, + bboxshift,dvi); delete tex; if(!getSetting<bool>("keep")) { for(mem::list<string>::iterator p=files.begin(); p != files.end(); @@ -1073,7 +1108,7 @@ bool picture::shipout(picture *preamble, const string& Prefix, } else { if(context) prename=stripDir(prename); status=postprocess(prename,outname,outputformat,magnification,wait, - view,pdf && Labels,svgformat); + view,pdf && Labels,epsformat,svg); if(pdfformat && !getSetting<bool>("keep")) { unlink(auxname(prefix,"m9").c_str()); unlink(auxname(prefix,"pbsdat").c_str()); |