summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/picture.cc
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2018-04-06 05:21:01 +0000
committerNorbert Preining <preining@logic.at>2018-04-06 05:21:01 +0000
commita11ba95f5b305c7d01cf2b6aec5640a6b1831117 (patch)
tree028e9aa29fb00177617b77a8d804a7bce694d5b0 /Build/source/utils/asymptote/picture.cc
parent0de24c07adcc80181a7aee919e1316a6149dda56 (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.cc71
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());