summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
authorMojca Miklavec <mojca.miklavec@gmail.com>2014-05-17 18:06:46 +0000
committerMojca Miklavec <mojca.miklavec@gmail.com>2014-05-17 18:06:46 +0000
commit8e7ea45ebf7c1c4dbca970656d00684cc5d53720 (patch)
tree8c8a67fb417b3e9ccf6a4dcbd17361f8e36683f2 /Build
parent02783996c279399df9780678ce424ab563bfee73 (diff)
asy 2.31 sources
git-svn-id: svn://tug.org/texlive/trunk@34080 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
-rw-r--r--Build/source/utils/asymptote/ChangeLog374
-rw-r--r--Build/source/utils/asymptote/Makefile.in10
-rw-r--r--Build/source/utils/asymptote/ReleaseNotes25
-rw-r--r--Build/source/utils/asymptote/asy-keywords.el4
-rw-r--r--Build/source/utils/asymptote/asy.list119
-rw-r--r--Build/source/utils/asymptote/asymptote.spec2
-rw-r--r--Build/source/utils/asymptote/base/bezulate.asy3
-rw-r--r--Build/source/utils/asymptote/base/embed.asy18
-rw-r--r--Build/source/utils/asymptote/base/three.asy5
-rw-r--r--Build/source/utils/asymptote/base/three_surface.asy34
-rw-r--r--Build/source/utils/asymptote/config.h.in6
-rw-r--r--Build/source/utils/asymptote/config.sub109
-rwxr-xr-xBuild/source/utils/asymptote/configure31
-rw-r--r--Build/source/utils/asymptote/configure.ac9
-rw-r--r--Build/source/utils/asymptote/doc/CAD.pdfbin67500 -> 67500 bytes
-rw-r--r--Build/source/utils/asymptote/doc/FAQ/asy-faq.info2
-rw-r--r--Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdfbin31516 -> 31527 bytes
-rw-r--r--Build/source/utils/asymptote/doc/asy-latex.pdfbin194499 -> 194499 bytes
-rw-r--r--Build/source/utils/asymptote/doc/asy.12
-rw-r--r--Build/source/utils/asymptote/doc/asyRefCard.pdfbin53478 -> 53672 bytes
-rw-r--r--Build/source/utils/asymptote/doc/asyRefCard.tex11
-rw-r--r--Build/source/utils/asymptote/doc/asymptote.pdfbin1271270 -> 1272511 bytes
-rw-r--r--Build/source/utils/asymptote/doc/asymptote.texi82
-rw-r--r--Build/source/utils/asymptote/doc/externalprc.tex3
-rw-r--r--Build/source/utils/asymptote/doc/png/asymptote.info347
-rw-r--r--Build/source/utils/asymptote/drawimage.h1
-rw-r--r--Build/source/utils/asymptote/drawlabel.cc114
-rw-r--r--Build/source/utils/asymptote/drawlabel.h5
-rw-r--r--Build/source/utils/asymptote/drawlayer.h2
-rw-r--r--Build/source/utils/asymptote/examples/animations/embeddedmovie.asy2
-rw-r--r--Build/source/utils/asymptote/examples/splitpatch.asy8
-rw-r--r--Build/source/utils/asymptote/genv.cc2
-rw-r--r--Build/source/utils/asymptote/glrender.cc31
-rw-r--r--Build/source/utils/asymptote/gsl.cc2
-rw-r--r--Build/source/utils/asymptote/memory.h19
-rw-r--r--Build/source/utils/asymptote/path.cc17
-rw-r--r--Build/source/utils/asymptote/pipestream.cc207
-rw-r--r--Build/source/utils/asymptote/pipestream.h241
-rw-r--r--Build/source/utils/asymptote/prc/writePRC.h9
-rw-r--r--Build/source/utils/asymptote/runfile.cc4
-rw-r--r--Build/source/utils/asymptote/runfile.in4
-rw-r--r--Build/source/utils/asymptote/runlabel.cc77
-rw-r--r--Build/source/utils/asymptote/runlabel.in47
-rw-r--r--Build/source/utils/asymptote/runstring.cc67
-rw-r--r--Build/source/utils/asymptote/runstring.in19
-rw-r--r--Build/source/utils/asymptote/settings.cc83
-rw-r--r--Build/source/utils/asymptote/settings.h5
-rw-r--r--Build/source/utils/asymptote/texfile.cc4
-rw-r--r--Build/source/utils/asymptote/texfile.h14
-rw-r--r--Build/source/utils/asymptote/triple.h1
50 files changed, 1282 insertions, 899 deletions
diff --git a/Build/source/utils/asymptote/ChangeLog b/Build/source/utils/asymptote/ChangeLog
index 0a29a3cd84d..276abdb32df 100644
--- a/Build/source/utils/asymptote/ChangeLog
+++ b/Build/source/utils/asymptote/ChangeLog
@@ -1,4 +1,378 @@
------------------------------------------------------------------------
+r5664 | jcbowman | 2014-05-16 23:32:06 -0600 (Fri, 16 May 2014) | 3 lines
+Changed paths:
+ M /trunk/asymptote/runlabel.in
+
+Fix hangs in 3D font generation and the "none" tex engine.
+Disable the MacOS 10.9 libc++ workaround on other platforms.
+
+------------------------------------------------------------------------
+r5663 | jcbowman | 2014-05-16 18:59:29 -0600 (Fri, 16 May 2014) | 1 line
+Changed paths:
+ M /trunk/asymptote/configure.ac
+
+Increment version to 2.31svn.
+------------------------------------------------------------------------
+r5662 | jcbowman | 2014-05-16 16:45:44 -0600 (Fri, 16 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/glrender.cc
+ M /trunk/asymptote/runlabel.in
+
+Fix zoom/menu button.
+
+------------------------------------------------------------------------
+r5661 | jcbowman | 2014-05-16 15:15:33 -0600 (Fri, 16 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/runlabel.in
+
+Workaround broken stringstream in MacOS 10.9 libc++.
+
+------------------------------------------------------------------------
+r5660 | jcbowman | 2014-05-16 10:00:52 -0600 (Fri, 16 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/Makefile.in
+
+Remove optional space.
+
+------------------------------------------------------------------------
+r5659 | jcbowman | 2014-05-16 09:45:21 -0600 (Fri, 16 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/Makefile.in
+
+Add CXXFLAGS.
+
+------------------------------------------------------------------------
+r5658 | jcbowman | 2014-05-16 00:11:20 -0600 (Fri, 16 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/pipestream.cc
+ M /trunk/asymptote/pipestream.h
+ M /trunk/asymptote/runlabel.in
+
+Use blocking reads by default.
+
+------------------------------------------------------------------------
+r5657 | jcbowman | 2014-05-15 22:15:21 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/pipestream.cc
+ M /trunk/asymptote/pipestream.h
+ M /trunk/asymptote/runlabel.in
+
+Simplify code.
+
+------------------------------------------------------------------------
+r5656 | jcbowman | 2014-05-15 22:13:58 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/triple.h
+
+Revert temporary division by 0 in transform of a triple workaround.
+
+------------------------------------------------------------------------
+r5655 | jcbowman | 2014-05-15 14:16:42 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/base/three.asy
+ M /trunk/asymptote/runlabel.in
+
+Support 3D for all texengines (but prc only for latex texengines).
+
+------------------------------------------------------------------------
+r5654 | jcbowman | 2014-05-15 10:56:24 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/drawlabel.cc
+
+Improve TeX pipe interaction.
+
+------------------------------------------------------------------------
+r5653 | jcbowman | 2014-05-15 09:28:22 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/asymptote.spec
+ M /trunk/asymptote/gsl.cc
+ M /trunk/asymptote/runfile.in
+
+Suppress warning messages.
+
+------------------------------------------------------------------------
+r5652 | jcbowman | 2014-05-15 09:09:25 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/configure.ac
+
+Fix typo.
+
+------------------------------------------------------------------------
+r5651 | jcbowman | 2014-05-15 08:34:10 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/genv.cc
+
+Use standard STL include.
+
+------------------------------------------------------------------------
+r5650 | jcbowman | 2014-05-15 03:22:27 -0600 (Thu, 15 May 2014) | 1 line
+Changed paths:
+ M /trunk/asymptote/configure.ac
+
+Increment version to 2.30svn.
+------------------------------------------------------------------------
+r5649 | jcbowman | 2014-05-15 01:52:40 -0600 (Thu, 15 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/drawlayer.h
+ M /trunk/asymptote/runlabel.in
+
+Enable page breaks and 3D OpenGL with ConTeXt TeX engine.
+
+------------------------------------------------------------------------
+r5648 | jcbowman | 2014-05-14 23:28:38 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/base/embed.asy
+ M /trunk/asymptote/doc/externalprc.tex
+
+Fix inlineimage.
+
+------------------------------------------------------------------------
+r5647 | jcbowman | 2014-05-14 22:54:25 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/base/embed.asy
+ M /trunk/asymptote/drawlabel.cc
+ M /trunk/asymptote/drawlabel.h
+ M /trunk/asymptote/runlabel.in
+
+Fix inlinetex.
+
+------------------------------------------------------------------------
+r5646 | jcbowman | 2014-05-14 19:02:41 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/doc/asymptote.texi
+ M /trunk/asymptote/triple.h
+
+Try to recover from division by 0 in transform of a triple.
+
+------------------------------------------------------------------------
+r5645 | jcbowman | 2014-05-14 18:16:01 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/configure.ac
+ M /trunk/asymptote/prc/writePRC.h
+
+Use list unconditionally.
+
+------------------------------------------------------------------------
+r5644 | jcbowman | 2014-05-14 18:03:50 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/configure.ac
+ M /trunk/asymptote/memory.h
+
+Fix typos.
+
+------------------------------------------------------------------------
+r5643 | jcbowman | 2014-05-14 17:34:17 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/configure.ac
+ M /trunk/asymptote/memory.h
+ M /trunk/asymptote/prc/writePRC.h
+
+More portability tweaks.
+
+------------------------------------------------------------------------
+r5642 | jcbowman | 2014-05-14 16:44:10 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/configure.ac
+ M /trunk/asymptote/memory.h
+
+More portability tweaks.
+
+------------------------------------------------------------------------
+r5641 | jcbowman | 2014-05-14 15:49:17 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/Makefile.in
+ M /trunk/asymptote/doc/asymptote.texi
+ M /trunk/asymptote/drawlabel.cc
+ M /trunk/asymptote/drawlabel.h
+ A /trunk/asymptote/pipestream.cc
+ M /trunk/asymptote/pipestream.h
+ M /trunk/asymptote/runlabel.in
+ M /trunk/asymptote/settings.cc
+ M /trunk/asymptote/settings.h
+
+Simplify code.
+
+------------------------------------------------------------------------
+r5640 | jcbowman | 2014-05-14 15:43:56 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/doc/asyRefCard.tex
+
+Update reference card.
+
+------------------------------------------------------------------------
+r5639 | jcbowman | 2014-05-14 00:06:11 -0600 (Wed, 14 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/drawimage.h
+
+Remove duplicate variable.
+
+------------------------------------------------------------------------
+r5638 | jcbowman | 2014-05-13 22:51:12 -0600 (Tue, 13 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/asymptote.spec
+ M /trunk/asymptote/pipestream.h
+
+Reinstate tailequals to support MSDOS in bidirectional tex pipe.
+
+------------------------------------------------------------------------
+r5637 | jcbowman | 2014-05-13 21:04:05 -0600 (Tue, 13 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/doc/asymptote.texi
+ M /trunk/asymptote/drawlabel.cc
+ M /trunk/asymptote/pipestream.h
+ M /trunk/asymptote/settings.cc
+ M /trunk/asymptote/texfile.h
+
+Improve bidirectional pipe; re-enable context tex engine.
+
+------------------------------------------------------------------------
+r5636 | jcbowman | 2014-05-13 00:23:51 -0600 (Tue, 13 May 2014) | 5 lines
+Changed paths:
+ M /trunk/asymptote/doc/asymptote.texi
+ M /trunk/asymptote/settings.cc
+
+Remove support for the ConTeXT tex engine since piping is broken in the
+latest (mkiv) version.
+
+Add support for luatex and lualatex.
+
+------------------------------------------------------------------------
+r5635 | jcbowman | 2014-05-12 19:38:09 -0600 (Mon, 12 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/texfile.cc
+ M /trunk/asymptote/texfile.h
+
+Update ConTeX support.
+
+------------------------------------------------------------------------
+r5634 | jcbowman | 2014-05-12 18:59:22 -0600 (Mon, 12 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/memory.h
+ M /trunk/asymptote/prc/writePRC.h
+
+Portability tweak.
+
+------------------------------------------------------------------------
+r5633 | jcbowman | 2014-05-12 14:12:43 -0600 (Mon, 12 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/settings.cc
+ M /trunk/asymptote/settings.h
+ M /trunk/asymptote/texfile.cc
+ M /trunk/asymptote/texfile.h
+
+Remove dependency on \put (contributed by Mojca Miklavec).
+
+------------------------------------------------------------------------
+r5632 | jcbowman | 2014-05-11 17:27:29 -0600 (Sun, 11 May 2014) | 1 line
+Changed paths:
+ M /trunk/asymptote/configure.ac
+
+Increment version to 2.29svn.
+------------------------------------------------------------------------
+r5631 | jcbowman | 2014-05-11 14:56:56 -0600 (Sun, 11 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/asymptote.spec
+ M /trunk/asymptote/base/bezulate.asy
+
+Reduce number of allowed bezulate refinements to maxrefinements (default 7).
+
+------------------------------------------------------------------------
+r5630 | jcbowman | 2014-05-11 14:55:52 -0600 (Sun, 11 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/path.cc
+
+Avoid numerical overflow in quadraticroots and cubicroots.
+
+------------------------------------------------------------------------
+r5629 | jcbowman | 2014-05-11 10:22:34 -0600 (Sun, 11 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/base/three_surface.asy
+ M /trunk/asymptote/examples/splitpatch.asy
+
+Update splitpatch example.
+
+------------------------------------------------------------------------
+r5628 | jcbowman | 2014-05-10 20:09:33 -0600 (Sat, 10 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/Makefile.in
+
+Install refs.bib with slidedemo.asy.
+
+------------------------------------------------------------------------
+r5627 | jcbowman | 2014-05-10 17:32:43 -0600 (Sat, 10 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/runstring.in
+
+Fix locale bug.
+
+------------------------------------------------------------------------
+r5626 | jcbowman | 2014-05-09 08:52:54 -0600 (Fri, 09 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/base/three.asy
+ M /trunk/asymptote/glrender.cc
+
+Remove minimum window constraints (use viewportsize instead).
+
+------------------------------------------------------------------------
+r5625 | jcbowman | 2014-05-08 11:25:35 -0600 (Thu, 08 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/doc/asymptote.texi
+
+Fix discussion of new T.
+
+------------------------------------------------------------------------
+r5624 | jcbowman | 2014-05-08 00:24:42 -0600 (Thu, 08 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/doc/asymptote.texi
+
+Update links.
+
+------------------------------------------------------------------------
+r5623 | jcbowman | 2014-05-08 00:15:03 -0600 (Thu, 08 May 2014) | 4 lines
+Changed paths:
+ M /trunk/asymptote/base/three.asy
+ M /trunk/asymptote/glrender.cc
+
+Work around PRC viewport issue.
+
+Simplify OpenGL minsize code.
+
+------------------------------------------------------------------------
+r5622 | jcbowman | 2014-05-08 00:14:01 -0600 (Thu, 08 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/examples/animations/embeddedmovie.asy
+
+Update link.
+
+------------------------------------------------------------------------
+r5621 | jcbowman | 2014-05-07 11:02:33 -0600 (Wed, 07 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/glrender.cc
+
+Fix calculation of minimum width and height for OpenGL window.
+
+------------------------------------------------------------------------
+r5620 | jcbowman | 2014-05-06 19:26:10 -0600 (Tue, 06 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/base/three.asy
+
+Fix transform(u,v,O).
+
+------------------------------------------------------------------------
+r5619 | jcbowman | 2014-05-05 09:58:15 -0600 (Mon, 05 May 2014) | 2 lines
+Changed paths:
+ M /trunk/asymptote/base/three_surface.asy
+
+Add optional parameters to hsplit and vsplit.
+
+------------------------------------------------------------------------
+r5618 | jcbowman | 2014-04-28 12:10:05 -0600 (Mon, 28 Apr 2014) | 1 line
+Changed paths:
+ M /trunk/asymptote/asymptote.spec
+ M /trunk/asymptote/configure.ac
+
+Increment version to 2.28svn.
+------------------------------------------------------------------------
r5617 | jcbowman | 2014-04-28 09:46:10 -0600 (Mon, 28 Apr 2014) | 3 lines
Changed paths:
M /trunk/asymptote/base/plain.asy
diff --git a/Build/source/utils/asymptote/Makefile.in b/Build/source/utils/asymptote/Makefile.in
index 30ad960255c..28b505342d2 100644
--- a/Build/source/utils/asymptote/Makefile.in
+++ b/Build/source/utils/asymptote/Makefile.in
@@ -20,7 +20,7 @@ SHAREDLIBS = $(filter-out -lGL -lGLU -lglut -pthread $(GCLIBS), $(LIBS))
vpath %.cc prc
CAMP = camperror path drawpath drawlabel picture psfile texfile util settings \
- guide flatguide knot drawfill path3 drawpath3 drawsurface pen
+ guide flatguide knot drawfill path3 drawpath3 drawsurface pen pipestream
RUNTIME_FILES = runtime runbacktrace runpicture runlabel runhistory runarray \
runfile runsystem runpair runtriple runpath runpath3d runstring \
@@ -50,7 +50,7 @@ CLEAN = camp.output svnrevision.cc base/version.asy doc/version.texi \
GUI/xasyVersion.py $(XNAME) doc/asy-latex.pdf
EXTRA = asy-mode.el asy-init.el asy.vim asy_filetype.vim asy-kate.sh \
asymptote.py reload.js nopapersize.ps
-EXEXTRA = piicon.eps *.views *.dat
+EXEXTRA = piicon.eps *.views *.dat *.bib
DOCEXTRA = *.asy *.csv *.dat latexusage.tex externalprc.tex pixel.pdf
KEYWORDS = base $(ASYMPTOTE_SITEDIR)
LATEXFILES = asymptote.sty asycolors.sty ocg.sty latexmkrc
@@ -58,9 +58,9 @@ CONTEXTFILES = colo-asy.tex
ASY = ./asy -dir base -config "" -render=0
DEFS = @DEFS@ @OPTIONS@ @PTHREAD_CFLAGS@ -DFFTWPP_SINGLE_THREAD
-CFLAGS = @CPPFLAGS@ @CFLAGS@
-OPTS = $(DEFS) $(CFLAGS)
-INCL = -I . @INCL@
+CFLAGS = @CFLAGS@
+OPTS = $(DEFS) @CPPFLAGS@ @CXXFLAGS@ $(CFLAGS)
+INCL = -I. @INCL@
# Options for compiling the object files for the shared library.
# gc has to be configured with the option --disable-threads in order to make a
diff --git a/Build/source/utils/asymptote/ReleaseNotes b/Build/source/utils/asymptote/ReleaseNotes
index db40a7840c0..63f9bb361fd 100644
--- a/Build/source/utils/asymptote/ReleaseNotes
+++ b/Build/source/utils/asymptote/ReleaseNotes
@@ -1,3 +1,28 @@
+Release Notes for Version 2.31
+
+Hangs in 3D font generation and also in the "none" tex engine were fixed.
+
+Release Notes for Version 2.30
+
+Compilation issues were addressed. A workaround for the broken stringstream
+container in MacOS 10.9 libc++ was implemented. The OpenGL zoom/menu button
+was fixed.
+
+Release Notes for Version 2.29
+
+The TeX bidirectional pipe was overhauled to support the context tex engine
+again. The luatex and lualatex tex engines were enabled. The inline option
+used by the asymptote.sty LaTeX package and the inlineimage option used for
+generating external PRC files were fixed. Portability issues were addressed.
+
+Release Notes for Version 2.28
+
+A locale bug that interfered with the 3D PRC camera transformation was fixed.
+Minimum OpenGL window constraints were removed in favour of the viewportsize
+variable. The transform(u,v,O) function, which projects onto the plane
+spanned by u and v through point O, was fixed. Numerical overflow issues in
+quadraticroots and cubicroots were fixed. The documentation was updated.
+
Release Notes for Version 2.27
Move Adobe transparency workaround to C++ code to allow use of texpreamble
diff --git a/Build/source/utils/asymptote/asy-keywords.el b/Build/source/utils/asymptote/asy-keywords.el
index fb8a07b4d24..f9ef7269cc6 100644
--- a/Build/source/utils/asymptote/asy-keywords.el
+++ b/Build/source/utils/asymptote/asy-keywords.el
@@ -2,7 +2,7 @@
;; This file is automatically generated by asy-list.pl.
;; Changes will be overwritten.
;;
-(defvar asy-keywords-version "2.27")
+(defvar asy-keywords-version "2.31")
(defvar asy-keyword-name '(
and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
@@ -14,4 +14,4 @@ Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree
AND Arc ArcArrow ArcArrows Arrow Arrows Automatic AvantGarde BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _image _labelpath _projection _strokepath _texpath aCos aSin aTan abort abs accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment checkconditionlength checker checkincreasing checklengths checkposition checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPRCcylinder drawPRCdisk drawPRCsphere drawPRCtube drawPhoton drawScalar drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawline drawpixel drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endScript endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitXasyMode exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image incenter incentral incircle increasing incrementposition indexedTransform indexedfigure initXasyMode initdefaults input inradius insert inside integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup makeNode makedraw makepen map margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nativeformat natural needshipout newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa none norm normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orientation origin orthic orthocentercenter outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum path path3 pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 photon piecewisestraight point polar polarconicroutine polargraph polygon postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend printBytecode print_random_addresses project projection purge pwhermite quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show side simeq simpson sin sinh size size3 skewness skip slant sleep slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys startScript stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangulate tricoef tridiagonal trilinear trim truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zero3 zlimits zpart ztick ztick3 ztrans ))
(defvar asy-variable-name '(
-AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XYAlign YAlign Yellow YellowGreen YellowOrange addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diagnostics differentlengths dot dotfactor dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity4 ignore inXasyMode inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings shipped signedtrailingzero solid springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom undefined unitcircle unitsquare up urlpen urlskip version vertexpen vertexsize viewportmargin viewportsize vline white wye xformStack yellow ylabelwidth zerotickfuzz zerowinding ))
+AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XYAlign YAlign Yellow YellowGreen YellowOrange addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diagnostics differentlengths dot dotfactor dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity4 ignore inXasyMode inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings shipped signedtrailingzero solid springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom undefined unitcircle unitsquare up urlpen urlskip version vertexpen vertexsize viewportmargin viewportsize vline white wye xformStack yellow ylabelwidth zerotickfuzz zerowinding ))
diff --git a/Build/source/utils/asymptote/asy.list b/Build/source/utils/asymptote/asy.list
index fd0d4431386..8fcde70b569 100644
--- a/Build/source/utils/asymptote/asy.list
+++ b/Build/source/utils/asymptote/asy.list
@@ -238,9 +238,9 @@ pair min(frame f);
pair min(path p);
pair min(path[] p);
triple min(path3 p);
+pair min(picture pic, bool user=<default>);
real min(... real[] a);
real min(real m, scaling s, coord[] c);
-pair min(picture pic, bool user=<default>);
real min(real m, scaling s, coord[] c);
int min(... int[] a);
filltype RadialShade(pen penc, pen penr);
@@ -252,20 +252,20 @@ int search(real[] a, real key, bool less(real, real));
int search(guide[] a, guide key, bool less(guide, guide));
int search(coord[] a, coord key, bool less(coord, coord));
int search(pair[] a, pair key, bool less(pair, pair));
-int search(coord[] a, coord key, bool less(coord, coord));
int search(object[] a, object key, bool less(object, object));
-int search(frame[] a, frame key, bool less(frame, frame));
int search(Legend[] a, Legend key, bool less(Legend, Legend));
+int search(frame[] a, frame key, bool less(frame, frame));
+int search(coord[] a, coord key, bool less(coord, coord));
int search(Label[] a, Label key, bool less(Label, Label));
int search(int[] a, int key, bool less(int, int));
int search(bool3[] a, bool3 key, bool less(bool3, bool3));
+int search(picture[] a, picture key, bool less(picture, picture));
int search(marker[] a, marker key, bool less(marker, marker));
int search(string[] a, string key, bool less(string, string));
int search(path[] a, path key, bool less(path, path));
int search(pen[] a, pen key, bool less(pen, pen));
int search(bool[] a, bool key, bool less(bool, bool));
int search(triple[] a, triple key, bool less(triple, triple));
-int search(picture[] a, picture key, bool less(picture, picture));
filltype RadialShadeDraw(real xmargin=<default>, real ymargin=<default>, pen penc, pen penr, pen drawpen=<default>);
real sin(real x);
real[] sin(real[] a);
@@ -340,11 +340,11 @@ pair max(frame f);
pair max(path p);
pair max(path[] p);
triple max(path3 p);
-pair max(picture pic, bool user=<default>);
+real max(real M, scaling s, coord[] c);
real max(real M, scaling s, coord[] c);
int max(... int[] a);
+pair max(picture pic, bool user=<default>);
real max(... real[] a);
-real max(real M, scaling s, coord[] c);
Label Label(Label L, pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
Label Label(string s, string size=<default>, explicit position position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
Label Label(Label L, explicit position position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
@@ -518,9 +518,8 @@ bool[] copy(bool[] a, int depth=<default>);
real[][] copy(real[][] a, int depth=<default>);
pen[] copy(pen[] a, int depth=<default>);
coord[] copy(coord[] a, int depth=<default>);
-picture[] copy(picture[] a, int depth=<default>);
+coord[] copy(coord[] a, int depth=<default>);
marker[] copy(marker[] a, int depth=<default>);
-Legend[] copy(Legend[] a, int depth=<default>);
Label[] copy(Label[] a, int depth=<default>);
pen[][] copy(pen[][] a, int depth=<default>);
path[] copy(path[] a, int depth=<default>);
@@ -531,8 +530,9 @@ string[][] copy(string[][] a, int depth=<default>);
frame[] copy(frame[] a, int depth=<default>);
pair[] copy(pair[] a, int depth=<default>);
bool3[] copy(bool3[] a, int depth=<default>);
-coord[] copy(coord[] a, int depth=<default>);
object[] copy(object[] a, int depth=<default>);
+picture[] copy(picture[] a, int depth=<default>);
+Legend[] copy(Legend[] a, int depth=<default>);
pair[][] copy(pair[][] a, int depth=<default>);
real[] abs(pair[] a);
real[] abs(triple[] a);
@@ -565,21 +565,21 @@ pen palered;
real[] map(real f(pair), pair[] a);
int[] map(int f(real), real[] a);
bool3[] map(bool3 f(bool3), bool3[] a);
+picture[] map(picture f(picture), picture[] a);
frame[] map(frame f(frame), frame[] a);
-Legend[] map(Legend f(Legend), Legend[] a);
+coord[] map(coord f(coord), coord[] a);
Label[] map(Label f(Label), Label[] a);
pen[][] map(pen[] f(pen[]), pen[][] a);
triple[] map(triple f(triple), triple[] a);
pen[] map(pen f(pen), pen[] a);
-coord[] map(coord f(coord), coord[] a);
object[] map(object f(object), object[] a);
+Legend[] map(Legend f(Legend), Legend[] a);
pair[] map(pair f(pair), pair[] a);
coord[] map(coord f(coord), coord[] a);
string[] map(string f(string), string[] a);
void()()[] map(void f()()(void()()), void()()[] a);
pair[][] map(pair[] f(pair[]), pair[][] a);
real[] map(real f(real), real[] a);
-picture[] map(picture f(picture), picture[] a);
int[] map(int f(int), int[] a);
string[][] map(string[] f(string[]), string[][] a);
bool[] map(bool f(bool), bool[] a);
@@ -601,9 +601,8 @@ pair minratio(path3 g);
int[] sequence(int n);
pen[][] sequence(pen[] f(int), int n);
coord[] sequence(coord f(int), int n);
-picture[] sequence(picture f(int), int n);
+coord[] sequence(coord f(int), int n);
marker[] sequence(marker f(int), int n);
-Legend[] sequence(Legend f(int), int n);
Label[] sequence(Label f(int), int n);
int[] sequence(int f(int), int n);
string[][] sequence(string[] f(int), int n);
@@ -615,8 +614,9 @@ bool[] sequence(bool f(int), int n);
string[] sequence(string f(int), int n);
pair[][] sequence(pair[] f(int), int n);
bool3[] sequence(bool3 f(int), int n);
-coord[] sequence(coord f(int), int n);
object[] sequence(object f(int), int n);
+picture[] sequence(picture f(int), int n);
+Legend[] sequence(Legend f(int), int n);
real[][] sequence(real[] f(int), int n);
real[] sequence(real f(int), int n);
int[] sequence(int n, int m);
@@ -700,7 +700,6 @@ void add(picture src, bool group=<default>, filltype filltype=<default>, bool ab
void add(picture pic=<default>, void d(frame f, transform t), bool exact=<default>);
void add(picture pic=<default>, void d(picture, real[][]), bool exact=<default>);
void add(picture dest, picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, Label L);
void add(picture dest, picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture dest=<default>, object F, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(frame dest, frame src, filltype filltype, bool above=<default>);
@@ -709,6 +708,7 @@ void add(picture pic=<default>, void d(frame f, real[][] t, picture pic, project
void add(frame dest, frame src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture pic=<default>, void d(picture, transform), bool exact=<default>);
+void add(picture pic=<default>, Label L);
void add(frame f, transform t=<default>, Label L);
void add(picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
plain plain;
@@ -737,8 +737,9 @@ bool[] array(int n, bool value, int depth=<default>);
string[] array(int n, string value, int depth=<default>);
pair[][] array(int n, pair[] value, int depth=<default>);
bool3[] array(int n, bool3 value, int depth=<default>);
-coord[] array(int n, coord value, int depth=<default>);
object[] array(int n, object value, int depth=<default>);
+picture[] array(int n, picture value, int depth=<default>);
+Legend[] array(int n, Legend value, int depth=<default>);
real[][] array(int n, real[] value, int depth=<default>);
real[] array(int n, real value, int depth=<default>);
triple[] array(int n, triple value, int depth=<default>);
@@ -746,9 +747,8 @@ path[] array(int n, path value, int depth=<default>);
frame[] array(int n, frame value, int depth=<default>);
pen[][] array(int n, pen[] value, int depth=<default>);
coord[] array(int n, coord value, int depth=<default>);
-picture[] array(int n, picture value, int depth=<default>);
+coord[] array(int n, coord value, int depth=<default>);
marker[] array(int n, marker value, int depth=<default>);
-Legend[] array(int n, Legend value, int depth=<default>);
Label[] array(int n, Label value, int depth=<default>);
int[] array(int n, int value, int depth=<default>);
string[][] array(int n, string[] value, int depth=<default>);
@@ -872,6 +872,7 @@ void write(file file=<default>, string s=<default>, guide x, void suffix(file)=<
void write(file file=<default>, string s=<default>, pen x, void suffix(file)=<default> ... pen[]);
void write(file file, string s=<default>, explicit guide[] x, void suffix(file)=<default>);
void write(string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
+void write(pairOrTriple a);
void write(string s=<default>, explicit path[] x, void suffix(file)=<default>);
void write(file file, void suffix(file)=<default>);
void write(file file=<default>, string s=<default>, pen[] p);
@@ -879,7 +880,6 @@ void write(void suffix(file)=<default>);
void write(file file, string s=<default>, explicit path[] x, void suffix(file)=<default>);
void write(file file=<default>, Label L, void suffix(file)=<default>);
void write(file file, string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
-void write(pairOrTriple a);
void write(string s=<default>, bool3 b, void suffix(file)=<default>);
void write(file file, string s=<default>, bool3 b, void suffix(file)=<default>);
void write(string s=<default>, explicit guide[] x, void suffix(file)=<default>);
@@ -935,19 +935,19 @@ pen dotted;
string blend(pen p);
arrowhead HookHead;
arrowhead HookHead(real dir=<default>, real barb=<default>);
-picture[] concat(... picture[][]);
real[] concat(... real[][]);
pair[] concat(... pair[][]);
coord[] concat(... coord[][]);
pen[] concat(... pen[][]);
-coord[] concat(... coord[][]);
object[] concat(... object[][]);
-path[] concat(... path[][]);
Legend[] concat(... Legend[][]);
+path[] concat(... path[][]);
+coord[] concat(... coord[][]);
Label[] concat(... Label[][]);
int[] concat(... int[][]);
void()()[] concat(... void()()[][]);
bool3[] concat(... bool3[][]);
+picture[] concat(... picture[][]);
string[] concat(... string[][]);
marker[] concat(... marker[][]);
triple[] concat(... triple[][]);
@@ -961,16 +961,16 @@ real infinity;
bool alias(pair[][] a, pair[][] b);
bool alias(guide[] a, guide[] b);
bool alias(marginT a, marginT b);
+bool alias(coord[] a, coord[] b);
bool alias(projection a, projection b);
bool alias(side a, side b);
bool alias(marker a, marker b);
-bool alias(Legend[] a, Legend[] b);
bool alias(Label[] a, Label[] b);
bool alias(pair[] a, pair[] b);
-bool alias(coord a, coord b);
+bool alias(scaling a, scaling b);
bool alias(bounds a, bounds b);
bool alias(scaleT a, scaleT b);
-bool alias(pairOrTriple a, pairOrTriple b);
+bool alias(Legend a, Legend b);
bool alias(object a, object b);
bool alias(cputime a, cputime b);
bool alias(int[] a, int[] b);
@@ -978,40 +978,40 @@ bool alias(string[][] a, string[][] b);
bool alias(slice a, slice b);
bool alias(coord[] a, coord[] b);
bool alias(coords2 a, coords2 b);
-bool alias(picture a, picture b);
+bool alias(pairOrTriple a, pairOrTriple b);
bool alias(framedTransformStack a, framedTransformStack b);
bool alias(real[][] a, real[][] b);
bool alias(bool3 a, bool3 b);
bool alias(bool3[] a, bool3[] b);
bool alias(light a, light b);
+bool alias(picture a, picture b);
bool alias(position a, position b);
+bool alias(picture[] a, picture[] b);
bool alias(arrowhead a, arrowhead b);
bool alias(string[] a, string[] b);
bool alias(frame[] a, frame[] b);
-bool alias(scaling a, scaling b);
+bool alias(coords2 a, coords2 b);
bool alias(coord a, coord b);
bool alias(autoscaleT a, autoscaleT b);
-bool alias(picture[] a, picture[] b);
bool alias(bool[] a, bool[] b);
bool alias(void()()[] a, void()()[] b);
bool alias(pen[][] a, pen[][] b);
bool alias(filltype a, filltype b);
-bool alias(coord[] a, coord[] b);
bool alias(freezableBounds a, freezableBounds b);
bool alias(transformation a, transformation b);
bool alias(align a, align b);
bool alias(object[] a, object[] b);
+bool alias(Legend[] a, Legend[] b);
bool alias(path[] a, path[] b);
bool alias(triple[] a, triple[] b);
+bool alias(coord a, coord b);
bool alias(coords3 a, coords3 b);
-bool alias(Legend a, Legend b);
bool alias(Label a, Label b);
bool alias(marker[] a, marker[] b);
bool alias(processtime a, processtime b);
bool alias(real[] a, real[] b);
bool alias(pen[] a, pen[] b);
bool alias(hsv a, hsv b);
-bool alias(coords2 a, coords2 b);
bool alias(scaling a, scaling b);
bool alias(ScaleT a, ScaleT b);
bool alias(indexedTransform a, indexedTransform b);
@@ -1020,8 +1020,8 @@ int getint(string name=<default>, int default=<default>, string prompt=<default>
bool IgnoreAspect;
void postscript(frame f, string s);
void postscript(frame f, string s, pair min, pair max);
-void postscript(picture pic=<default>, string s, pair min, pair max);
void postscript(picture pic=<default>, string s);
+void postscript(picture pic=<default>, string s, pair min, pair max);
transform slant(real s);
void breakpoint(code s=<default>);
void breakpoints();
@@ -1041,7 +1041,6 @@ real[][] sort(real[][] a);
string[] sort(string[] a);
string[][] sort(string[][] a);
path[] sort(path[] a, bool less(path, path));
-picture[] sort(picture[] a, bool less(picture, picture));
pair[] sort(pair[] a, bool less(pair, pair));
void()()[] sort(void()()[] a, bool less(void()(), void()()));
real[] sort(real[] a, bool less(real, real));
@@ -1049,17 +1048,18 @@ bool[] sort(bool[] a, bool less(bool, bool));
coord[] sort(coord[] a, bool less(coord, coord));
pen[] sort(pen[] a, bool less(pen, pen));
pen[][] sort(pen[][] a, bool less(pen[], pen[]));
-coord[] sort(coord[] a, bool less(coord, coord));
object[] sort(object[] a, bool less(object, object));
+Legend[] sort(Legend[] a, bool less(Legend, Legend));
guide[] sort(guide[] a, bool less(guide, guide));
real[][] sort(real[][] a, bool less(real[], real[]));
triple[] sort(triple[] a, bool less(triple, triple));
-Legend[] sort(Legend[] a, bool less(Legend, Legend));
+coord[] sort(coord[] a, bool less(coord, coord));
Label[] sort(Label[] a, bool less(Label, Label));
string[] sort(string[] a, bool less(string, string));
int[] sort(int[] a, bool less(int, int));
string[][] sort(string[][] a, bool less(string[], string[]));
bool3[] sort(bool3[] a, bool less(bool3, bool3));
+picture[] sort(picture[] a, bool less(picture, picture));
pair[][] sort(pair[][] a, bool less(pair[], pair[]));
marker[] sort(marker[] a, bool less(marker, marker));
frame[] sort(frame[] a, bool less(frame, frame));
@@ -1347,15 +1347,15 @@ triple operator *(real[][] t, triple v);
triple operator *(real x, triple v);
triple operator *(triple v, real x);
path3 operator *(real[][] t, path3 g);
-picture operator *(transform t, picture orig);
side operator *(real x, side s);
Label operator *(real[][] t, Label L);
+picture operator *(real[][] t, picture orig);
path[] operator *(transform t, explicit path[] p);
bounds operator *(transform t, bounds b);
object operator *(transform t, explicit object F);
pair[] operator *(transform t, pair[] z);
Label operator *(transform t, Label L);
-picture operator *(real[][] t, picture orig);
+picture operator *(transform t, picture orig);
bool operator init();
int operator init();
real operator init();
@@ -1378,28 +1378,28 @@ transformation operator init();
align operator init();
slice operator init();
coords2 operator init();
-picture operator init();
+pairOrTriple operator init();
framedTransformStack operator init();
hsv operator init();
-coords2 operator init();
scaling operator init();
ScaleT operator init();
indexedTransform operator init();
-scaling operator init();
+coords2 operator init();
coord operator init();
autoscaleT operator init();
-coord operator init();
+scaling operator init();
bounds operator init();
scaleT operator init();
-pairOrTriple operator init();
+Legend operator init();
object operator init();
cputime operator init();
+coord operator init();
coords3 operator init();
-Legend operator init();
Label operator init();
processtime operator init();
bool3 operator init();
light operator init();
+picture operator init();
position operator init();
arrowhead operator init();
real operator cast(int);
@@ -1447,8 +1447,6 @@ guide[] operator cast(path[] g);
position operator cast(real x);
hsv operator cast(pen p);
Label operator cast(string s);
-pair operator cast(pairOrTriple a);
-triple operator cast(pairOrTriple a);
frame operator cast(object F);
bool3[] operator cast(bool[] b);
align operator cast(side side);
@@ -1466,6 +1464,8 @@ path[] operator cast(pair[] z);
path[] operator cast(path p);
bool[] operator cast(bool3[] b);
align operator cast(triple dir);
+pair operator cast(pairOrTriple a);
+triple operator cast(pairOrTriple a);
bool3 operator cast(bool b);
pen operator cast(hsv hsv);
position operator cast(int x);
@@ -1571,21 +1571,21 @@ bool operator ==(path a, path b);
bool operator ==(path3 a, path3 b);
bool operator ==(bool3 a, bool3 b);
bool operator ==(light a, light b);
+bool operator ==(picture a, picture b);
bool operator ==(position a, position b);
bool operator ==(arrowhead a, arrowhead b);
-bool operator ==(scaling a, scaling b);
+bool operator ==(coords2 a, coords2 b);
bool operator ==(coord a, coord b);
bool operator ==(autoscaleT a, autoscaleT b);
bool operator ==(filltype a, filltype b);
bool operator ==(freezableBounds a, freezableBounds b);
bool operator ==(transformation a, transformation b);
bool operator ==(align a, align b);
+bool operator ==(coord a, coord b);
bool operator ==(coords3 a, coords3 b);
-bool operator ==(Legend a, Legend b);
bool operator ==(Label a, Label b);
bool operator ==(processtime a, processtime b);
bool operator ==(hsv a, hsv b);
-bool operator ==(coords2 a, coords2 b);
bool operator ==(scaling a, scaling b);
bool operator ==(ScaleT a, ScaleT b);
bool operator ==(indexedTransform a, indexedTransform b);
@@ -1594,16 +1594,16 @@ bool operator ==(marginT a, marginT b);
bool operator ==(projection a, projection b);
bool operator ==(side a, side b);
bool operator ==(marker a, marker b);
-bool operator ==(coord a, coord b);
+bool operator ==(scaling a, scaling b);
bool operator ==(bounds a, bounds b);
bool operator ==(scaleT a, scaleT b);
-bool operator ==(pairOrTriple a, pairOrTriple b);
+bool operator ==(Legend a, Legend b);
bool operator ==(object a, object b);
bool operator ==(cputime a, cputime b);
bool operator ==(bool a, bool3 b);
bool operator ==(slice a, slice b);
bool operator ==(coords2 a, coords2 b);
-bool operator ==(picture a, picture b);
+bool operator ==(pairOrTriple a, pairOrTriple b);
bool operator ==(framedTransformStack a, framedTransformStack b);
bool operator !=(bool a, bool b);
bool[] operator !=(bool a, bool[] b);
@@ -1643,21 +1643,21 @@ bool operator !=(path a, path b);
bool operator !=(path3 a, path3 b);
bool operator !=(bool3 a, bool3 b);
bool operator !=(light a, light b);
+bool operator !=(picture a, picture b);
bool operator !=(position a, position b);
bool operator !=(arrowhead a, arrowhead b);
-bool operator !=(scaling a, scaling b);
+bool operator !=(coords2 a, coords2 b);
bool operator !=(coord a, coord b);
bool operator !=(autoscaleT a, autoscaleT b);
bool operator !=(filltype a, filltype b);
bool operator !=(freezableBounds a, freezableBounds b);
bool operator !=(transformation a, transformation b);
bool operator !=(align a, align b);
+bool operator !=(coord a, coord b);
bool operator !=(coords3 a, coords3 b);
-bool operator !=(Legend a, Legend b);
bool operator !=(Label a, Label b);
bool operator !=(processtime a, processtime b);
bool operator !=(hsv a, hsv b);
-bool operator !=(coords2 a, coords2 b);
bool operator !=(scaling a, scaling b);
bool operator !=(ScaleT a, ScaleT b);
bool operator !=(indexedTransform a, indexedTransform b);
@@ -1666,16 +1666,16 @@ bool operator !=(marginT a, marginT b);
bool operator !=(projection a, projection b);
bool operator !=(side a, side b);
bool operator !=(marker a, marker b);
-bool operator !=(coord a, coord b);
+bool operator !=(scaling a, scaling b);
bool operator !=(bounds a, bounds b);
bool operator !=(scaleT a, scaleT b);
-bool operator !=(pairOrTriple a, pairOrTriple b);
+bool operator !=(Legend a, Legend b);
bool operator !=(object a, object b);
bool operator !=(cputime a, cputime b);
bool operator !=(bool a, bool3 b);
bool operator !=(slice a, slice b);
bool operator !=(coords2 a, coords2 b);
-bool operator !=(picture a, picture b);
+bool operator !=(pairOrTriple a, pairOrTriple b);
bool operator !=(framedTransformStack a, framedTransformStack b);
bool operator <(int a, int b);
bool[] operator <(int a, int[] b);
@@ -1930,8 +1930,8 @@ real braceinnerangle;
real braceouterangle;
void tex(frame f, string s);
void tex(frame f, string s, pair min, pair max);
-void tex(picture pic=<default>, string s, pair min, pair max);
void tex(picture pic=<default>, string s);
+void tex(picture pic=<default>, string s, pair min, pair max);
real bracedefaultratio;
bool prconly(string format=<default>);
pen Black;
@@ -1971,6 +1971,7 @@ bool isDuplicate(pair a, pair b, real relSize);
bool checkSegment(path g, pair p, pair q);
path section(path p, real t1, real t2, bool loop=<default>);
real fuzz;
+real maxrefinements;
path[][] containmentTree(path[] paths);
binarytree searchtree(... int[] keys);
object draw(picture pic=<default>, binarytreeNode node, pair pos, int height, real minDist, real levelDist, real nodeDiameter, pen p=<default>, bool condensed=<default>);
diff --git a/Build/source/utils/asymptote/asymptote.spec b/Build/source/utils/asymptote/asymptote.spec
index 8f1c6aa9d5f..b5f67a7994c 100644
--- a/Build/source/utils/asymptote/asymptote.spec
+++ b/Build/source/utils/asymptote/asymptote.spec
@@ -1,7 +1,7 @@
%{!?_texmf: %define _texmf %(eval "echo `kpsewhich -expand-var '$TEXMFLOCAL'`")}
Name: asymptote
-Version: 2.27
+Version: 2.31
Release: 1%{?dist}
Summary: Descriptive vector graphics language
diff --git a/Build/source/utils/asymptote/base/bezulate.asy b/Build/source/utils/asymptote/base/bezulate.asy
index a0f6689b504..60be8cb7045 100644
--- a/Build/source/utils/asymptote/base/bezulate.asy
+++ b/Build/source/utils/asymptote/base/bezulate.asy
@@ -2,6 +2,7 @@
private real fuzz=sqrtEpsilon;
real duplicateFuzz=1e-3; // Work around font errors.
+real maxrefinements=7;
private real[][] intersections(pair a, pair b, path p)
{
@@ -291,7 +292,7 @@ path[] bezulate(path[] p)
if(!found && k == SIZE_STEPS && length(p) > 4 && i == length(p)-1) {
// avoid infinite recursion
++refinements;
- if(refinements > mantissaBits) {
+ if(refinements > maxrefinements) {
warning("subdivisions","too many subdivisions",position=true);
} else {
p=subdivide(p);
diff --git a/Build/source/utils/asymptote/base/embed.asy b/Build/source/utils/asymptote/base/embed.asy
index ad2b710c36b..588ad79c283 100644
--- a/Build/source/utils/asymptote/base/embed.asy
+++ b/Build/source/utils/asymptote/base/embed.asy
@@ -1,12 +1,12 @@
-if(latex() && !settings.inlineimage) {
+if(latex()) {
usepackage("hyperref");
texpreamble("\hypersetup{"+settings.hyperrefOptions+"}");
usepackage("media9","bigfiles");
- texpreamble("\makeatletter%
-\newif\ifnoplaybutton
-\@ifpackagelater{media9}{2013/11/15}{%
-\noplaybuttontrue}{}%
-\makeatother%");
+ texpreamble("\newif\ifplaybutton");
+ texpreamble("\count255=\the\catcode`\@\makeatletter%
+\@ifpackagelater{media9}{2013/11/15}{}{\playbuttontrue}%
+\catcode`\@=\the\count255
+%");
}
// For documentation of the options see
@@ -19,10 +19,10 @@ string embedplayer(string name, string text="", string options="",
if(width != 0) options += ",width="+(string) (width/pt)+"pt";
if(height != 0) options += ",height="+(string) (height/pt)+"pt";
return "%
-\ifnoplaybutton%
-\includemedia[noplaybutton,"+options+"]{"+text+"}{"+name+"}%
-\else%
+\ifplaybutton%
\includemedia["+options+"]{"+text+"}{"+name+"}%
+\else%
+\includemedia[noplaybutton,"+options+"]{"+text+"}{"+name+"}%
\fi";
}
diff --git a/Build/source/utils/asymptote/base/three.asy b/Build/source/utils/asymptote/base/three.asy
index 1c3716173d3..210ed55ddfe 100644
--- a/Build/source/utils/asymptote/base/three.asy
+++ b/Build/source/utils/asymptote/base/three.asy
@@ -3,7 +3,7 @@ private import math;
if(inXasyMode) settings.render=0;
if(prc0()) {
- if(settings.tex == "context") settings.prc=false;
+ if(!latex()) settings.prc=false;
else {
access embed;
Embed=embed.embedplayer;
@@ -1611,8 +1611,7 @@ transform transform(triple u, triple v, triple O=O,
projection P=currentprojection)
{
transform3 t=P.t;
- static real[] O={0,0,0,1};
- real[] tO=t*O;
+ real[] tO=t*new real[] {O.x,O.y,O.z,1};
real tO3=tO[3];
real factor=1/tO3^2;
real[] x=(tO3*t[0]-tO[0]*t[3])*factor;
diff --git a/Build/source/utils/asymptote/base/three_surface.asy b/Build/source/utils/asymptote/base/three_surface.asy
index fc09ac798d9..bf070e2a4a9 100644
--- a/Build/source/utils/asymptote/base/three_surface.asy
+++ b/Build/source/utils/asymptote/base/three_surface.asy
@@ -954,7 +954,7 @@ private triple[] split(triple z0, triple c0, triple c1, triple z1, real t=0.5)
// Return the control points of the subpatches
// produced by a horizontal split of P
-triple[][][] hsplit(triple[][] P)
+triple[][][] hsplit(triple[][] P, real v=0.5)
{
// get control points in rows
triple[] P0=P[0];
@@ -962,10 +962,10 @@ triple[][][] hsplit(triple[][] P)
triple[] P2=P[2];
triple[] P3=P[3];
- triple[] c0=split(P0[0],P0[1],P0[2],P0[3]);
- triple[] c1=split(P1[0],P1[1],P1[2],P1[3]);
- triple[] c2=split(P2[0],P2[1],P2[2],P2[3]);
- triple[] c3=split(P3[0],P3[1],P3[2],P3[3]);
+ triple[] c0=split(P0[0],P0[1],P0[2],P0[3],v);
+ triple[] c1=split(P1[0],P1[1],P1[2],P1[3],v);
+ triple[] c2=split(P2[0],P2[1],P2[2],P2[3],v);
+ triple[] c3=split(P3[0],P3[1],P3[2],P3[3],v);
// bottom, top
return new triple[][][] {
{{P0[0],c0[0],c0[1],c0[2]},
@@ -981,7 +981,7 @@ triple[][][] hsplit(triple[][] P)
// Return the control points of the subpatches
// produced by a vertical split of P
-triple[][][] vsplit(triple[][] P)
+triple[][][] vsplit(triple[][] P, real u=0.5)
{
// get control points in rows
triple[] P0=P[0];
@@ -989,10 +989,10 @@ triple[][][] vsplit(triple[][] P)
triple[] P2=P[2];
triple[] P3=P[3];
- triple[] c0=split(P0[0],P1[0],P2[0],P3[0]);
- triple[] c1=split(P0[1],P1[1],P2[1],P3[1]);
- triple[] c2=split(P0[2],P1[2],P2[2],P3[2]);
- triple[] c3=split(P0[3],P1[3],P2[3],P3[3]);
+ triple[] c0=split(P0[0],P1[0],P2[0],P3[0],u);
+ triple[] c1=split(P0[1],P1[1],P2[1],P3[1],u);
+ triple[] c2=split(P0[2],P1[2],P2[2],P3[2],u);
+ triple[] c3=split(P0[3],P1[3],P2[3],P3[3],u);
// left, right
return new triple[][][] {
{{P0[0],P0[1],P0[2],P0[3]},
@@ -1008,7 +1008,7 @@ triple[][][] vsplit(triple[][] P)
// Return a 2D array of the control point arrays of the subpatches
// produced by horizontal and vertical splits of P at u and v
-triple[][][][] split(triple[][] P, real u=1/2, real v=1/2)
+triple[][][][] split(triple[][] P, real u=0.5, real v=0.5)
{
triple[] P0=P[0];
triple[] P1=P[1];
@@ -1160,15 +1160,13 @@ triple[] intersectionpoints(path3 p, surface s, real fuzz=-1)
return sequence(new triple(int i) {return point(p,t[i][0]);},t.length);
}
-// Return true iff the bounding boxes of patch p and q overlap.
+// Return true iff the control point bounding boxes of patches p and q overlap.
bool overlap(triple[][] p, triple[][] q, real fuzz=-1)
{
- triple p0=p[0][0];
- triple q0=q[0][0];
- triple pmin=minbezier(p,p0);
- triple pmax=maxbezier(p,p0);
- triple qmin=minbezier(q,q0);
- triple qmax=maxbezier(q,q0);
+ triple pmin=minbound(p);
+ triple pmax=maxbound(p);
+ triple qmin=minbound(q);
+ triple qmax=maxbound(q);
static real Fuzz=1000*realEpsilon;
real fuzz=max(10*fuzz,Fuzz*max(abs(pmin),abs(pmax)));
diff --git a/Build/source/utils/asymptote/config.h.in b/Build/source/utils/asymptote/config.h.in
index e59e301b2f6..4f96342f132 100644
--- a/Build/source/utils/asymptote/config.h.in
+++ b/Build/source/utils/asymptote/config.h.in
@@ -153,9 +153,15 @@
/* Define to 1 if you have the `tgamma' function. */
#undef HAVE_TGAMMA
+/* Define to 1 if you have tr1/unordered_map */
+#undef HAVE_TR1_UNORDERED_MAP
+
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define to 1 if you have unordered_map */
+#undef HAVE_UNORDERED_MAP
+
/* Define to 1 if you have the `vfork' function. */
#undef HAVE_VFORK
diff --git a/Build/source/utils/asymptote/config.sub b/Build/source/utils/asymptote/config.sub
index d654d03cdcd..59bb593f109 100644
--- a/Build/source/utils/asymptote/config.sub
+++ b/Build/source/utils/asymptote/config.sub
@@ -1,18 +1,24 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2014-05-01'
+timestamp='2012-04-18'
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
@@ -20,12 +26,11 @@ timestamp='2014-05-01'
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
+# the same distribution terms that you use for the rest of that program.
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
@@ -68,7 +73,9 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -116,7 +123,7 @@ esac
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
- linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
knetbsd*-gnu* | netbsd*-gnu* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
@@ -149,7 +156,7 @@ case $os in
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray | -microblaze*)
+ -apple | -axis | -knuth | -cray | -microblaze)
os=
basic_machine=$1
;;
@@ -252,12 +259,10 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arceb \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
- | avr | avr32 \
- | be32 | be64 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | be32 | be64 \
| bfin \
- | c4x | c8051 | clipper \
+ | c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
| epiphany \
| fido | fr30 | frv \
@@ -265,11 +270,10 @@ case $basic_machine in
| hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
- | k1om \
| le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | maxq | mb | microblaze | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
@@ -283,22 +287,20 @@ case $basic_machine in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
| moxie \
| mt \
| msp430 \
| nds32 | nds32le | nds32be \
- | nios | nios2 | nios2eb | nios2el \
+ | nios | nios2 \
| ns16k | ns32k \
- | open8 | or1k | or1knd | or32 \
+ | open8 \
+ | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
@@ -326,7 +328,7 @@ case $basic_machine in
c6x)
basic_machine=tic6x-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
@@ -368,13 +370,13 @@ case $basic_machine in
| aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
- | c8051-* | clipper-* | craynv-* | cydra-* \
+ | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -383,13 +385,11 @@ case $basic_machine in
| hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
- | k1om-* \
| le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | microblaze-* | microblazeel-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
@@ -403,22 +403,18 @@ case $basic_machine in
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
| mt-* \
| msp430-* \
| nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
- | or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
@@ -792,15 +788,11 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
- microblaze*)
+ microblaze)
basic_machine=microblaze-xilinx
;;
- mingw64)
- basic_machine=x86_64-pc
- os=-mingw64
- ;;
mingw32)
- basic_machine=i686-pc
+ basic_machine=i386-pc
os=-mingw32
;;
mingw32ce)
@@ -836,7 +828,7 @@ case $basic_machine in
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
msys)
- basic_machine=i686-pc
+ basic_machine=i386-pc
os=-msys
;;
mvs)
@@ -1027,11 +1019,7 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- os=-rdos
- ;;
- rdos32)
+ rdos)
basic_machine=i386-pc
os=-rdos
;;
@@ -1358,21 +1346,21 @@ case $os in
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* | -plan9* \
+ | -sym* | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -bitrig* | -openbsd* | -solidbsd* \
+ | -openbsd* | -solidbsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1380,7 +1368,7 @@ case $os in
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1504,6 +1492,9 @@ case $os in
-aros*)
os=-aros
;;
+ -kaos*)
+ os=-kaos
+ ;;
-zvmoe)
os=-zvmoe
;;
@@ -1552,12 +1543,6 @@ case $basic_machine in
c4x-* | tic4x-*)
os=-coff
;;
- c8051-*)
- os=-elf
- ;;
- hexagon-*)
- os=-elf
- ;;
tic54x-*)
os=-coff
;;
diff --git a/Build/source/utils/asymptote/configure b/Build/source/utils/asymptote/configure
index 58af198e710..a4a401476e2 100755
--- a/Build/source/utils/asymptote/configure
+++ b/Build/source/utils/asymptote/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Asymptote 2.27.
+# Generated by GNU Autoconf 2.69 for Asymptote 2.31.
#
# Report bugs to <http://sourceforge.net/projects/asymptote>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Asymptote'
PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.27'
-PACKAGE_STRING='Asymptote 2.27'
+PACKAGE_VERSION='2.31'
+PACKAGE_STRING='Asymptote 2.31'
PACKAGE_BUGREPORT='http://sourceforge.net/projects/asymptote'
PACKAGE_URL=''
@@ -1281,7 +1281,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Asymptote 2.27 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.31 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1346,7 +1346,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Asymptote 2.27:";;
+ short | recursive ) echo "Configuration of Asymptote 2.31:";;
esac
cat <<\_ACEOF
@@ -1459,7 +1459,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Asymptote configure 2.27
+Asymptote configure 2.31
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2045,7 +2045,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Asymptote $as_me 2.27, which was
+It was created by Asymptote $as_me 2.31, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -5734,9 +5734,17 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_fn_cxx_check_header_mongrel "$LINENO" "tr1/unordered_map" "ac_cv_header_tr1_unordered_map" "$ac_includes_default"
+ac_fn_cxx_check_header_mongrel "$LINENO" "unordered_map" "ac_cv_header_unordered_map" "$ac_includes_default"
+if test "x$ac_cv_header_unordered_map" = xyes; then :
+
+$as_echo "#define HAVE_UNORDERED_MAP 1" >>confdefs.h
+
+else
+ ac_fn_cxx_check_header_mongrel "$LINENO" "tr1/unordered_map" "ac_cv_header_tr1_unordered_map" "$ac_includes_default"
if test "x$ac_cv_header_tr1_unordered_map" = xyes; then :
+$as_echo "#define HAVE_TR1_UNORDERED_MAP 1" >>confdefs.h
+
else
ac_fn_cxx_check_header_mongrel "$LINENO" "ext/hash_map" "ac_cv_header_ext_hash_map" "$ac_includes_default"
if test "x$ac_cv_header_ext_hash_map" = xyes; then :
@@ -5749,6 +5757,9 @@ fi
fi
+fi
+
+
GCVERSION=7.4.0
GCFILE=gc-$GCVERSION
@@ -8497,7 +8508,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Asymptote $as_me 2.27, which was
+This file was extended by Asymptote $as_me 2.31, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -8559,7 +8570,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-Asymptote config.status 2.27
+Asymptote config.status 2.31
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/utils/asymptote/configure.ac b/Build/source/utils/asymptote/configure.ac
index db027666898..d16863b450d 100644
--- a/Build/source/utils/asymptote/configure.ac
+++ b/Build/source/utils/asymptote/configure.ac
@@ -3,7 +3,7 @@
# this file.
AC_PREREQ(2)
-AC_INIT([Asymptote],[2.27],[http://sourceforge.net/projects/asymptote])
+AC_INIT([Asymptote],[2.31],[http://sourceforge.net/projects/asymptote])
VERSION=$PACKAGE_VERSION
AC_SUBST(VERSION)
m4_include([ax_pthread.m4])
@@ -115,8 +115,11 @@ if test "$GXX" = yes ; then
fi
fi
-AC_CHECK_HEADER(tr1/unordered_map,,
- [AC_CHECK_HEADER(ext/hash_map,,OPTIONS=$OPTIONS"-DNOHASH ")])
+AC_CHECK_HEADER(unordered_map,AC_DEFINE(HAVE_UNORDERED_MAP,1,
+ [Define to 1 if you have unordered_map]),
+ [AC_CHECK_HEADER(tr1/unordered_map,AC_DEFINE(HAVE_TR1_UNORDERED_MAP,1,
+ [Define to 1 if you have tr1/unordered_map]),
+ [AC_CHECK_HEADER(ext/hash_map,,OPTIONS=$OPTIONS"-DNOHASH ")])])
GCVERSION=7.4.0
GCFILE=gc-$GCVERSION
diff --git a/Build/source/utils/asymptote/doc/CAD.pdf b/Build/source/utils/asymptote/doc/CAD.pdf
index c66b46cd4f1..ba59db86d8a 100644
--- a/Build/source/utils/asymptote/doc/CAD.pdf
+++ b/Build/source/utils/asymptote/doc/CAD.pdf
Binary files differ
diff --git a/Build/source/utils/asymptote/doc/FAQ/asy-faq.info b/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
index dde23dadbf6..a49da13ab3b 100644
--- a/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
+++ b/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
@@ -10,7 +10,7 @@ END-INFO-DIR-ENTRY
File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
ASYMPTOTE FREQUENTLY ASKED QUESTIONS
- 28 Apr 2014
+ 16 May 2014
This is the list of Frequently Asked Questions about Asymptote (asy).
diff --git a/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf b/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf
index 0d7ed23167d..82a110f254f 100644
--- a/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf
+++ b/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf
Binary files differ
diff --git a/Build/source/utils/asymptote/doc/asy-latex.pdf b/Build/source/utils/asymptote/doc/asy-latex.pdf
index f221968b949..33812486191 100644
--- a/Build/source/utils/asymptote/doc/asy-latex.pdf
+++ b/Build/source/utils/asymptote/doc/asy-latex.pdf
Binary files differ
diff --git a/Build/source/utils/asymptote/doc/asy.1 b/Build/source/utils/asymptote/doc/asy.1
index 979fd50ee38..0dcceb01330 100644
--- a/Build/source/utils/asymptote/doc/asy.1
+++ b/Build/source/utils/asymptote/doc/asy.1
@@ -239,7 +239,7 @@ Emulate unimplemented SVG shading [false].
Interactive prompt auto-completion [true].
.TP
.B \-tex engine
-latex|pdflatex|xelatex|tex|pdftex|context|none [latex].
+latex|pdflatex|xelatex|tex|pdftex|luatex|lualatex|none [latex].
.TP
.B \-thick
Render thick 3D lines [true].
diff --git a/Build/source/utils/asymptote/doc/asyRefCard.pdf b/Build/source/utils/asymptote/doc/asyRefCard.pdf
index 58ee3e156e6..66f8027aee6 100644
--- a/Build/source/utils/asymptote/doc/asyRefCard.pdf
+++ b/Build/source/utils/asymptote/doc/asyRefCard.pdf
Binary files differ
diff --git a/Build/source/utils/asymptote/doc/asyRefCard.tex b/Build/source/utils/asymptote/doc/asyRefCard.tex
index 45aed3508e8..3e3882bc5e4 100644
--- a/Build/source/utils/asymptote/doc/asyRefCard.tex
+++ b/Build/source/utils/asymptote/doc/asyRefCard.tex
@@ -38,9 +38,9 @@
% (reference card macros due to Stephen Gildea)
%
-\def\versionnumber{1.0} % Version of this reference card
-\def\year{2012}
-\def\month{August}
+\def\versionnumber{1.1} % Version of this reference card
+\def\year{2014}
+\def\month{May}
\def\version{\month\ \year\ v\versionnumber}
\def\shortcopyrightnotice{\vskip .5ex plus 2 fill
@@ -402,6 +402,7 @@ do \statement
\key{draw labeled path}{draw(Label,path)}
\key{draw arrow with pen}{draw(path,pen,Arrow)}
\key{draw path on picture}{draw(picture,path)}
+\key{draw visible portion of line through two pairs}{drawline(pair,pair)}
\section{fill commands}
\key{fill path with current pen}{fill(path)}
@@ -483,7 +484,7 @@ do \statement
\key{times at which {\tt p} reaches minimal extents}{mintimes(p)}
\key{times at which {\tt p} reaches maximal extents}{maxtimes(p)}
\key{intersection times of paths {\tt p} and {\tt q}}{intersections(p,q)}
-\key{intersection times of paths {\tt p} and {\tt a--b}}{intersections(p,a,b)}
+\key{intersection times of path {\tt p} with `{\tt --a--b--}'}{intersections(p,a,b)}
\key{intersection times of path {\tt p} crossing $x=${\tt x}}{times(p,x)}
\key{intersection times of path {\tt p} crossing $y=${\tt z.y}}{times(p,z)}
\key{intersection point of paths {\tt p} and {\tt q}}{intersectionpoint(p,q)}
@@ -491,7 +492,7 @@ do \statement
\key{intersection of extension of {\tt P--Q} and {\tt p--q}}{extension(P,Q,p,q)}
\key{lower left point of bounding box of path {\tt p}}{min(p)}
\key{upper right point of bounding box of path {\tt p}}{max(p)}
-\key{subpaths of {\tt p} split by $n$th cut of {\tt knife}}{cut(p,knife,n)}
+\key{subpaths of {\tt p} split by {\tt n}th cut of {\tt knife}}{cut(p,knife,n)}
\key{winding number of path {\tt p} about pair {\tt z}}{windingnumber(p,z)}
\key{pair {\tt z} lies within path {\tt p}?}{interior(p,z)}
\key{pair {\tt z} lies within or on path {\tt p}?}{inside(p,z)}
diff --git a/Build/source/utils/asymptote/doc/asymptote.pdf b/Build/source/utils/asymptote/doc/asymptote.pdf
index f2a6b867c62..71254d9591b 100644
--- a/Build/source/utils/asymptote/doc/asymptote.pdf
+++ b/Build/source/utils/asymptote/doc/asymptote.pdf
Binary files differ
diff --git a/Build/source/utils/asymptote/doc/asymptote.texi b/Build/source/utils/asymptote/doc/asymptote.texi
index c8e7467a9ca..ce1c6573fc9 100644
--- a/Build/source/utils/asymptote/doc/asymptote.texi
+++ b/Build/source/utils/asymptote/doc/asymptote.texi
@@ -488,6 +488,7 @@ type may be changed to @code{a4} with the configuration variable
@code{papertype}. Alignment to other paper sizes can be obtained by setting the
configuration variables @code{paperwidth} and @code{paperheight}.
+@cindex @code{config}
@cindex @code{texpath}
@cindex @code{texcommand}
@cindex @code{dvips}
@@ -499,6 +500,7 @@ configuration variables @code{paperwidth} and @code{paperheight}.
@cindex @code{ImageMagick}
The following configuration variables normally do not require adjustment:
@verbatim
+config
texpath
texcommand
dvips
@@ -510,7 +512,7 @@ animate
@end verbatim
@noindent
-Warnings (such as "writeoverloaded") may be enabled or disabled with
+Warnings (such as "unbounded" and "offaxis") may be enabled or disabled with
the functions
@verbatim
warn(string s);
@@ -1362,8 +1364,8 @@ and @code{rainbow.asy}.
@cindex Function shading
@cindex function shading
@cindex @code{functionshade}
-More general shading possibilities are available with the @code{pdflatex},
-@code{context}, and @code{pdftex} @TeX{} engines: the routine
+More general shading possibilities are available using @TeX{} engines
+that produce PDF output (@pxref{texengines}): the routine
@verbatim
void functionshade(picture pic=currentpicture, path[] g, bool stroke=false,
pen fillrule=currentpen, string shader);
@@ -4064,12 +4066,28 @@ struct T {
++Tcount;
}
+T foo=new T;
T foo;
@end verbatim
-
-Here, the expression @code{new T} will produce a new instance of the class, but
-will also cause @code{Tcount} to be incremented, so that it keeps track of the
-number of instances produced.
+@noindent
+Here, @code{new T} produces a new instance of the class, which
+causes @code{Tcount} to be incremented, tracking the
+number of instances produced. The declarations @code{T foo=new T} and
+@code{T foo} are equivalent: the second form implicitly creates a new
+instance of @code{T}.
+That is, after the definition of a structure @code{T}, a variable of
+type @code{T} is initialized to a new instance (@code{new T}) by
+default. During the definition of the structure, however, variables
+of type @code{T} are initialized to @code{null} by default. This
+special behaviour is to avoid infinite recursion of creating new
+instances in code such as
+@verbatim
+struct tree {
+ int value;
+ tree left;
+ tree right;
+}
+@end verbatim
The expression @code{null} can be cast to any structure type to yield a null
reference, a reference that does not actually refer to any instance of the
@@ -4079,27 +4097,14 @@ structure. Trying to use a field of a null reference will cause an error.
@cindex @code{==}
@cindex @code{!=}
The function @code{bool alias(T,T)} checks to see if two structure references
-refer to the same instance of the structure (or both to @code{null}). For
-example, in the example code at the start of the section, @code{alias(foo,bar)}
+refer to the same instance of the structure (or both to @code{null}).
+In example at the beginning of this section, @code{alias(foo,bar)}
would return true, but @code{alias(foo,new T)} would return false, as @code{new
T} creates a new instance of the structure @code{T}. The boolean operators
@code{==} and @code{!=} are by default equivalent to @code{alias} and
@code{!alias} respectively, but may be overwritten for a particular type
(for example, to do a deep comparison).
-After the definition of a structure @code{T}, a variable of type @code{T} is
-initialized to a new instance (@code{new T}) by default. During the definition
-of the structure, however, variables of type @code{T} are initialized to
-@code{null} by default. This special behaviour is to avoid infinite
-recursion of creating new instances in code such as
-@verbatim
-struct tree {
- int value;
- tree left;
- tree right;
-}
-@end verbatim
-
Here is a simple example that illustrates the use of structures:
@verbatim
struct S {
@@ -6057,7 +6062,7 @@ An even better method for processing a @code{LaTeX} file with embedded
@end quotation
@noindent
after putting the contents of
-@url{http://asymptote.svn.sourceforge.net/viewvc/asymptote/trunk/asymptote/doc/latexmkrc}
+@url{http://sourceforge.net/p/asymptote/code/HEAD/tree/trunk/asymptote/doc/latexmkrc}
@noindent
in a file @code{latexmkrc} in the same directory. The command
@verbatim
@@ -6072,7 +6077,7 @@ To store the figures in a separate directory named @code{asy}, one can define
\def\asydir{asy}
@end verbatim
in @code{latexusage.tex} and put the contents of
-@url{http://asymptote.svn.sourceforge.net/viewvc/asymptote/trunk/asymptote/doc/latexmkrc_asydir}
+@url{http://sourceforge.net/p/asymptote/code/HEAD/tree/trunk/asymptote/doc/latexmkrc_asydir}
in a file @code{latexmkrc} in the same directory.
@noindent
External @code{Asymptote} code in @code{filename.asy} should be included with
@@ -9064,14 +9069,17 @@ at the beginning of the configuration file, it can contain arbitrary
@cindex @code{pdflatex}
@cindex @code{xelatex}
@cindex @code{context}
+@cindex @code{luatex}
+@cindex @code{lualatex}
@cindex @code{EPS}
@cindex @code{PDF}
+@anchor{texengines}
@anchor{convert}
The default output format is @acronym{EPS} for the (default)
@code{latex} and @code{tex} tex engine and @acronym{PDF} for the
-@code{pdflatex}, @code{xelatex}, and @code{context} tex engines.
-Alternative output formats may be produced using the @code{-f} option
-(or @code{outformat} setting).
+@code{pdflatex}, @code{xelatex}, @code{context}, @code{luatex}, and
+@code{lualatex} tex engines. Alternative output formats may be
+produced using the @code{-f} option (or @code{outformat} setting).
@cindex @code{SVG}
@cindex @code{dvisvgm}
@@ -9565,7 +9573,7 @@ Mark Henning, Steve Melenchuk, Martin Wiebusch, and Stefan Knorr.
@c LocalWords: latexusage tex bbox PostScript subdirectory gcc emacs ASYDIR
@c LocalWords: documentclass usepackage subpath shipout sqrt xN Mx bw AcroRd
@c LocalWords: xscale xaxis yaxis BeginBar GIF postprocessing fpu de rpair xy
-@c LocalWords: ImageMagick defaultfontsize defaultlinewidth cd asymptote Hy
+@c LocalWords: ImageMagick cd asymptote Hy
@c LocalWords: startup natively xasy tkinter VxN yingyang currentpicture toc
@c LocalWords: MetaPost MetaFont Hammerlindl Healy texinfo autoload setq setf
@c LocalWords: printindex setfilename settitle dircategory direntry titlepage
@@ -9726,8 +9734,8 @@ Mark Henning, Steve Melenchuk, Martin Wiebusch, and Stefan Knorr.
@c LocalWords: z2 before' struct X11 x11colors type1cm 12pt OT1 5mm
@c LocalWords: cmr12 x' y' xsize ysize 25cm s1 s2 neighbourhood u''
@c LocalWords: s'' 3x 5x 3y 602e 2x 2y 3sin 10cm 204e addby7 10x Ai
-@c LocalWords: only'' pow10 log10 expm1 log1p atan2 Ai Ai Ai Ai Ai
-@c LocalWords: Ai Ai x1 x2 graph2d attachfile2 n0 P0 n1 P1 markers1
+@c LocalWords: only'' pow10 log10 expm1 log1p atan2 0pt 1filll 's '
+@c LocalWords: x1 x2 graph2d attachfile2 n0 P0 n1 P1 markers1 3D 2D
@c LocalWords: interpolate1 markers2 inlinemovie3 media9 U3D T2A 5E
@c LocalWords: embeddedu3d curvedlabel3 value2 tickvalue inner'' 2N
@c LocalWords: lineargraph0 scalings log2 log2graph 5cm BWRainbow2
@@ -9746,13 +9754,7 @@ Mark Henning, Steve Melenchuk, Martin Wiebusch, and Stefan Knorr.
@c LocalWords: yaxis3 zaxis3 ticks3 NoTicks3 arrowbar3 type2 axis3
@c LocalWords: generalaxis3 vectorfield3 margin3 grid3xyz 5unit 2D
@c LocalWords: slopefield1 144x144 1filll 'load 'asy 'lasy 'auto 4g
-@c LocalWords: 5bp 1cm 2S 100pt 3t bracedefaultratio incircle 12pt
-@c LocalWords: 5mm 25cm 3x 5x 3y 602e 2x 2y 3sin 10cm 204e 10x Ai '
-@c LocalWords: 5E 5cm 2N 2E 2n 100d 5z 5y 0pt 0pt 1filll 's 3D 2D
-@c LocalWords: 5unit 144x144 1filll 's 3D 2D libgs 'load 'asy 'lasy
-@c LocalWords: 'auto 5bp 1cm 4g 2S 100pt 3t 12pt 5mm 25cm 3x 5x 3y
-@c LocalWords: 602e 2x 2y 3sin 10cm 204e 10x 'load 'asy 'lasy 'auto
-@c LocalWords: Ai 5E 5cm 2N 2E 2n 100d 5z 5y 5unit dvisvgmOptions
-@c LocalWords: 144x144 5bp 1cm 4g 2S 100pt 3t 12pt 5mm 25cm 3x 5x
-@c LocalWords: 3y 602e 2x 2y 3sin 10cm 204e 10x Ai Ai Ai Ai Ai Ai
-@c LocalWords: Ai Ai 5E 5cm 2N 2E 2n 100d 5z 5y
+@c LocalWords: libgs 'load 'asy 'lasy 'auto 5bp 1cm 2S 100pt 3t 5mm
+@c LocalWords: bracedefaultratio incircle 12pt 25cm 3x 5x 3y 602e
+@c LocalWords: 2x 2y 3sin 10cm 204e 10x Ai 5E
+@c LocalWords: 5cm 2N 2E 2n 100d 5z 5y 5unit dvisvgmOptions 144x144
diff --git a/Build/source/utils/asymptote/doc/externalprc.tex b/Build/source/utils/asymptote/doc/externalprc.tex
index d131eebd426..7c488e78f9c 100644
--- a/Build/source/utils/asymptote/doc/externalprc.tex
+++ b/Build/source/utils/asymptote/doc/externalprc.tex
@@ -6,7 +6,8 @@
%
\documentclass[12pt]{article}
\input cube.pre
-\usepackage[bigfiles,noplaybutton]{media9}
+\usepackage[bigfiles]{media9}
+\playbuttonfalse
\RequirePackage{color,graphicx}
\begin{document}
\input cube.tex
diff --git a/Build/source/utils/asymptote/doc/png/asymptote.info b/Build/source/utils/asymptote/doc/png/asymptote.info
index 23fc5a09702..168b13ba5a9 100644
--- a/Build/source/utils/asymptote/doc/png/asymptote.info
+++ b/Build/source/utils/asymptote/doc/png/asymptote.info
@@ -1,7 +1,7 @@
This is asymptote.info, produced by makeinfo version 4.13 from
../asymptote.texi.
-This file documents `Asymptote', version 2.27.
+This file documents `Asymptote', version 2.31.
`http://asymptote.sourceforge.net'
@@ -23,7 +23,7 @@ File: asymptote.info, Node: Top, Next: Description, Up: (dir)
Asymptote
*********
-This file documents `Asymptote', version 2.27.
+This file documents `Asymptote', version 2.31.
`http://asymptote.sourceforge.net'
@@ -428,6 +428,7 @@ variables `paperwidth' and `paperheight'.
The following configuration variables normally do not require
adjustment:
+config
texpath
texcommand
dvips
@@ -436,8 +437,8 @@ libgs
convert
display
animate
- Warnings (such as "writeoverloaded") may be enabled or disabled with
-the functions
+ Warnings (such as "unbounded" and "offaxis") may be enabled or
+disabled with the functions
warn(string s);
nowarn(string s);
or by directly modifying the string array `settings.suppress', which
@@ -1082,8 +1083,8 @@ void draw(picture pic=currentpicture, pen fillrule=currentpen, path[] g,
example files `tensor.asy', `Coons.asy', `BezierSurface.asy', and
`rainbow.asy'.
- More general shading possibilities are available with the `pdflatex',
-`context', and `pdftex' TeX engines: the routine
+ More general shading possibilities are available using TeX engines
+that produce PDF output (*note texengines::): the routine
void functionshade(picture pic=currentpicture, path[] g, bool stroke=false,
pen fillrule=currentpen, string shader);
shades on picture `pic' the interior of path `g' according to fill
@@ -3179,11 +3180,22 @@ struct T {
++Tcount;
}
+T foo=new T;
T foo;
-
- Here, the expression `new T' will produce a new instance of the
-class, but will also cause `Tcount' to be incremented, so that it keeps
-track of the number of instances produced.
+ Here, `new T' produces a new instance of the class, which causes
+`Tcount' to be incremented, tracking the number of instances produced.
+The declarations `T foo=new T' and `T foo' are equivalent: the second
+form implicitly creates a new instance of `T'. That is, after the
+definition of a structure `T', a variable of type `T' is initialized to
+a new instance (`new T') by default. During the definition of the
+structure, however, variables of type `T' are initialized to `null' by
+default. This special behaviour is to avoid infinite recursion of
+creating new instances in code such as
+struct tree {
+ int value;
+ tree left;
+ tree right;
+}
The expression `null' can be cast to any structure type to yield a
null reference, a reference that does not actually refer to any
@@ -3192,23 +3204,12 @@ will cause an error.
The function `bool alias(T,T)' checks to see if two structure
references refer to the same instance of the structure (or both to
-`null'). For example, in the example code at the start of the section,
-`alias(foo,bar)' would return true, but `alias(foo,new T)' would return
-false, as `new T' creates a new instance of the structure `T'. The
-boolean operators `==' and `!=' are by default equivalent to `alias' and
-`!alias' respectively, but may be overwritten for a particular type
-(for example, to do a deep comparison).
-
- After the definition of a structure `T', a variable of type `T' is
-initialized to a new instance (`new T') by default. During the
-definition of the structure, however, variables of type `T' are
-initialized to `null' by default. This special behaviour is to avoid
-infinite recursion of creating new instances in code such as
-struct tree {
- int value;
- tree left;
- tree right;
-}
+`null'). In example at the beginning of this section, `alias(foo,bar)'
+would return true, but `alias(foo,new T)' would return false, as `new
+T' creates a new instance of the structure `T'. The boolean operators
+`==' and `!=' are by default equivalent to `alias' and `!alias'
+respectively, but may be overwritten for a particular type (for
+example, to do a deep comparison).
Here is a simple example that illustrates the use of structures:
struct S {
@@ -4732,7 +4733,7 @@ pdflatex latexusage
`http://mirror.ctan.org/support/latexmk/'
after putting the contents of
-`http://asymptote.svn.sourceforge.net/viewvc/asymptote/trunk/asymptote/doc/latexmkrc'
+`http://sourceforge.net/p/asymptote/code/HEAD/tree/trunk/asymptote/doc/latexmkrc'
in a file `latexmkrc' in the same directory. The command
latexmk -pdf latexusage
will then call `Asymptote' automatically, recompiling only the figures
@@ -4741,7 +4742,7 @@ process, this method also tends to use less memory. To store the
figures in a separate directory named `asy', one can define
\def\asydir{asy}
in `latexusage.tex' and put the contents of
-`http://asymptote.svn.sourceforge.net/viewvc/asymptote/trunk/asymptote/doc/latexmkrc_asydir'
+`http://sourceforge.net/p/asymptote/code/HEAD/tree/trunk/asymptote/doc/latexmkrc_asydir'
in a file `latexmkrc' in the same directory. External `Asymptote' code
in `filename.asy' should be included with
\asyinclude[<options>]{<filename.asy>}
@@ -8020,7 +8021,7 @@ Options (negate by replacing - with -no):
-spinstep deg/s Spin speed [60]
-svgemulation Emulate unimplemented SVG shading [false]
-tabcompletion Interactive prompt auto-completion [true]
--tex engine latex|pdflatex|xelatex|tex|pdftex|context|none [latex]
+-tex engine latex|pdflatex|xelatex|tex|pdftex|luatex|lualatex|none [latex]
-thick Render thick 3D lines [true]
-thin Render thin 3D lines [true]
-threads Use POSIX threads for 3D rendering [true]
@@ -8084,9 +8085,9 @@ settings.autoplain=true;
`Asymptote' code.
The default output format is EPS for the (default) `latex' and `tex'
-tex engine and PDF for the `pdflatex', `xelatex', and `context' tex
-engines. Alternative output formats may be produced using the `-f'
-option (or `outformat' setting).
+tex engine and PDF for the `pdflatex', `xelatex', `context', `luatex',
+and `lualatex' tex engines. Alternative output formats may be produced
+using the `-f' option (or `outformat' setting).
To produce SVG output, you will need `dvisvgm' (version 0.8.7 or
later) from `http://dvisvgm.sourceforge.net' and must use the `latex'
@@ -8482,7 +8483,7 @@ Index
(line 68)
* != <1>: Arithmetic & logical.
(line 38)
-* !=: Structures. (line 52)
+* !=: Structures. (line 63)
* % <1>: Interactive mode. (line 17)
* %: Arithmetic & logical.
(line 23)
@@ -8539,7 +8540,7 @@ Index
(line 44)
* == <1>: Arithmetic & logical.
(line 37)
-* ==: Structures. (line 52)
+* ==: Structures. (line 63)
* >: Arithmetic & logical.
(line 50)
* >=: Arithmetic & logical.
@@ -8577,7 +8578,7 @@ Index
* Airy: Mathematical functions.
(line 48)
* alias <1>: Arrays. (line 181)
-* alias: Structures. (line 52)
+* alias: Structures. (line 63)
* align: Options. (line 174)
* Align: label. (line 12)
* all: Arrays. (line 329)
@@ -8781,7 +8782,7 @@ Index
* comma: Files. (line 61)
* comma-separated-value mode: Arrays. (line 362)
* command-line options <1>: Options. (line 6)
-* command-line options: Configuring. (line 84)
+* command-line options: Configuring. (line 85)
* comment character: Files. (line 16)
* compass directions: Tutorial. (line 106)
* Compiling from UNIX source: Compiling from UNIX source.
@@ -8791,7 +8792,8 @@ Index
* conditional <1>: Arithmetic & logical.
(line 73)
* conditional: Programming. (line 8)
-* config: Options. (line 116)
+* config <1>: Options. (line 116)
+* config: Configuring. (line 67)
* configuration file <1>: Options. (line 116)
* configuration file: Configuring. (line 23)
* configuring: Configuring. (line 6)
@@ -8938,7 +8940,7 @@ Index
* EndPenMargin3: three. (line 577)
* EndPoint: label. (line 56)
* envelope: Frames and pictures. (line 22)
-* environment variables: Configuring. (line 88)
+* environment variables: Configuring. (line 89)
* eof <1>: Arrays. (line 344)
* eof: Files. (line 92)
* eol <1>: Arrays. (line 344)
@@ -9245,6 +9247,8 @@ Index
* longdashed: Pens. (line 95)
* longitude: Data types. (line 141)
* loop: Programming. (line 8)
+* lualatex: Options. (line 145)
+* luatex: Options. (line 145)
* MacOS X binary distributions: MacOS X binary distributions.
(line 6)
* makepen: Pens. (line 300)
@@ -9852,137 +9856,138 @@ Node: MacOS X binary distributions12622
Node: Microsoft Windows13506
Ref: psview14216
Node: Configuring15150
-Node: Search paths19370
-Node: Compiling from UNIX source20212
-Node: Editing modes23109
-Node: Subversion25541
-Node: Uninstall25989
-Node: Tutorial26339
-Ref: unitcircle30637
-Node: Drawing commands32693
-Node: draw34404
-Ref: arrows35552
-Node: fill40795
-Ref: gradient shading41839
-Node: clip46396
-Node: label46988
-Ref: Label47586
-Node: Bezier curves53389
-Node: Programming57091
-Ref: array iteration57905
-Node: Data types59011
-Ref: format68208
-Node: Paths and guides72461
-Ref: circle72715
-Ref: extension82273
-Node: Pens89328
-Ref: fillrule96696
-Ref: basealign97593
-Ref: transparency100410
-Ref: makepen103853
-Ref: overwrite104691
-Node: Transforms105901
-Node: Frames and pictures107692
-Ref: envelope108833
-Ref: size109916
-Ref: unitsize110903
-Ref: shipout111963
-Ref: filltype114296
-Ref: add117433
-Ref: add about118379
-Ref: tex121317
-Node: Files122191
-Ref: cd123174
-Ref: scroll127848
-Node: Variable initializers130763
-Node: Structures133488
-Node: Operators140890
-Node: Arithmetic & logical141204
-Node: Self & prefix operators143177
-Node: User-defined operators143965
-Node: Implicit scaling144876
-Node: Functions145439
-Ref: stack overflow148192
-Node: Default arguments148756
-Node: Named arguments149495
-Node: Rest arguments152066
-Node: Mathematical functions155187
-Node: Arrays159852
-Ref: sort166841
-Ref: tridiagonal169245
-Ref: solve170473
-Node: Slices174667
-Node: Casts178557
-Node: Import180522
-Node: Static185759
-Node: LaTeX usage188653
-Node: Base modules195056
-Node: plain197556
-Node: simplex198208
-Node: math198481
-Node: interpolate201186
-Node: geometry201465
-Node: trembling202059
-Node: stats202328
-Node: patterns202588
-Node: markers202824
-Node: tree204607
-Node: binarytree204795
-Node: drawtree205415
-Node: syzygy205619
-Node: feynman205893
-Node: roundedpath206168
-Node: animation206451
-Ref: animate206871
-Node: embed207992
-Node: slide208950
-Node: MetaPost209290
-Node: unicode210006
-Node: latin1210885
-Node: babel211253
-Node: labelpath211482
-Node: labelpath3212302
-Node: annotate212613
-Node: CAD213084
-Node: graph213394
-Ref: ticks220523
-Ref: pathmarkers233850
-Ref: marker234315
-Ref: markuniform234666
-Ref: errorbars236457
-Ref: automatic scaling240494
-Node: palette251123
-Ref: images251241
-Ref: image255413
-Ref: logimage255891
-Ref: penimage256952
-Ref: penfunctionimage257173
-Node: three257897
-Ref: PostScript3D283576
-Node: obj285268
-Node: graph3285520
-Ref: GaussianSurface290675
-Node: grid3291779
-Node: solids292519
-Node: tube293467
-Node: flowchart295702
-Node: contour300271
-Node: contour3305361
-Node: slopefield305668
-Node: ode307105
-Node: Options307365
-Ref: configuration file313410
-Ref: settings313410
-Ref: convert314649
-Node: Interactive mode317798
-Ref: history319951
-Node: GUI321256
-Node: GUI installation321759
-Node: GUI usage322889
-Node: PostScript to Asymptote323792
-Node: Help324548
-Node: Debugger326274
-Node: Credits328059
-Node: Index328991
+Node: Search paths19385
+Node: Compiling from UNIX source20227
+Node: Editing modes23124
+Node: Subversion25556
+Node: Uninstall26004
+Node: Tutorial26354
+Ref: unitcircle30652
+Node: Drawing commands32708
+Node: draw34419
+Ref: arrows35567
+Node: fill40810
+Ref: gradient shading41854
+Node: clip46417
+Node: label47009
+Ref: Label47607
+Node: Bezier curves53410
+Node: Programming57112
+Ref: array iteration57926
+Node: Data types59032
+Ref: format68229
+Node: Paths and guides72482
+Ref: circle72736
+Ref: extension82294
+Node: Pens89349
+Ref: fillrule96717
+Ref: basealign97614
+Ref: transparency100431
+Ref: makepen103874
+Ref: overwrite104712
+Node: Transforms105922
+Node: Frames and pictures107713
+Ref: envelope108854
+Ref: size109937
+Ref: unitsize110924
+Ref: shipout111984
+Ref: filltype114317
+Ref: add117454
+Ref: add about118400
+Ref: tex121338
+Node: Files122212
+Ref: cd123195
+Ref: scroll127869
+Node: Variable initializers130784
+Node: Structures133509
+Node: Operators140984
+Node: Arithmetic & logical141298
+Node: Self & prefix operators143271
+Node: User-defined operators144059
+Node: Implicit scaling144970
+Node: Functions145533
+Ref: stack overflow148286
+Node: Default arguments148850
+Node: Named arguments149589
+Node: Rest arguments152160
+Node: Mathematical functions155281
+Node: Arrays159946
+Ref: sort166935
+Ref: tridiagonal169339
+Ref: solve170567
+Node: Slices174761
+Node: Casts178651
+Node: Import180616
+Node: Static185853
+Node: LaTeX usage188747
+Node: Base modules195142
+Node: plain197642
+Node: simplex198294
+Node: math198567
+Node: interpolate201272
+Node: geometry201551
+Node: trembling202145
+Node: stats202414
+Node: patterns202674
+Node: markers202910
+Node: tree204693
+Node: binarytree204881
+Node: drawtree205501
+Node: syzygy205705
+Node: feynman205979
+Node: roundedpath206254
+Node: animation206537
+Ref: animate206957
+Node: embed208078
+Node: slide209036
+Node: MetaPost209376
+Node: unicode210092
+Node: latin1210971
+Node: babel211339
+Node: labelpath211568
+Node: labelpath3212388
+Node: annotate212699
+Node: CAD213170
+Node: graph213480
+Ref: ticks220609
+Ref: pathmarkers233936
+Ref: marker234401
+Ref: markuniform234752
+Ref: errorbars236543
+Ref: automatic scaling240580
+Node: palette251209
+Ref: images251327
+Ref: image255499
+Ref: logimage255977
+Ref: penimage257038
+Ref: penfunctionimage257259
+Node: three257983
+Ref: PostScript3D283662
+Node: obj285354
+Node: graph3285606
+Ref: GaussianSurface290761
+Node: grid3291865
+Node: solids292605
+Node: tube293553
+Node: flowchart295788
+Node: contour300357
+Node: contour3305447
+Node: slopefield305754
+Node: ode307191
+Node: Options307451
+Ref: configuration file313504
+Ref: settings313504
+Ref: texengines314743
+Ref: convert314743
+Node: Interactive mode317913
+Ref: history320066
+Node: GUI321371
+Node: GUI installation321874
+Node: GUI usage323004
+Node: PostScript to Asymptote323907
+Node: Help324663
+Node: Debugger326389
+Node: Credits328174
+Node: Index329106

End Tag Table
diff --git a/Build/source/utils/asymptote/drawimage.h b/Build/source/utils/asymptote/drawimage.h
index e73e00e01a1..860e8283bfb 100644
--- a/Build/source/utils/asymptote/drawimage.h
+++ b/Build/source/utils/asymptote/drawimage.h
@@ -106,7 +106,6 @@ public:
class drawRawImage : public drawImage {
unsigned char *raw; // For internal use; not buffered, may be overwritten.
size_t width,height;
- bool antialias;
public:
drawRawImage(unsigned char *raw, size_t width, size_t height,
const transform& t, bool antialias)
diff --git a/Build/source/utils/asymptote/drawlabel.cc b/Build/source/utils/asymptote/drawlabel.cc
index 5f009e1087f..e887879b52d 100644
--- a/Build/source/utils/asymptote/drawlabel.cc
+++ b/Build/source/utils/asymptote/drawlabel.cc
@@ -24,82 +24,44 @@ void drawLabel::labelwarning(const char *action)
<< "\" " << action << " to avoid overwriting" << endl;
}
-int wait(iopipestream &tex, const char *s, const char **abort,
- bool ignore=false)
-{
- int rc=tex.wait(s,abort);
- if(rc > 0) {
- if(fataltex[rc-1]) {
- tex.pipeclose();
- ignore=false;
- } else {
- tex << "\n";
- tex.wait(s,abort);
- tex << "\n";
- tex.wait(s,abort);
- }
-
- if(!ignore) {
- string s=tex.message();
- tex.shred();
- reportError(s);
- }
- }
- tex.shred();
- return rc;
-}
-
// Reads one of the dimensions from the pipe.
-void texdim(iopipestream& tex, double& dest,
- const string command, const string name,
- const char **abort)
+void texdim(iopipestream& tex, double& dest, const string command,
+ const string name)
{
- string texbuf;
+ string start(">dim(");
+ string stop(")dim");
+ string expect("pt"+stop+"\n\n*");
- tex << ("\\showthe\\" + command + "\\ASYbox\n");
- tex >> texbuf;
-
- string cannotread="Cannot read label "+name;
+ // ask the tex engine for dimension
+ tex << "\\immediate\\write16{" << start << "\\the\\" << command << "\\ASYbox"
+ << stop << "}\n";
+ // keep reading output until ')dim\n\n*' is read
+ tex.wait(expect.c_str());
+ string buffer = tex.getbuffer();
- if (texbuf[0] == '>' && texbuf[1] == ' ')
+ size_t dim1=buffer.find(start);
+ size_t dim2=buffer.find("pt" + stop);
+ string cannotread="Cannot read label "+name;
+ if (dim1 != string::npos && dim2 != string::npos) {
+ string n=buffer.substr(dim1+start.size(),dim2-dim1-start.size());
try {
- dest=lexical::cast<double>(texbuf.c_str()+2,true)*tex2ps;
+ dest=lexical::cast<double>(n,true)*camp::tex2ps;
} catch(lexical::bad_cast&) {
- reportError(cannotread);
+ camp::reportError(cannotread);
}
- else
- reportError(cannotread);
-
- tex << "\n";
- wait(tex,"\n*",abort);
+ } else {
+ camp::reportError(cannotread);
+ }
}
-bool texbounds(double& width, double& height, double& depth,
- iopipestream& tex, string& s, const char **abort, bool warn,
- bool Inline)
+void texbounds(double& width, double& height, double& depth,
+ iopipestream& tex, string& s)
{
- string texbuf;
-
tex << "\\setbox\\ASYbox=\\hbox{" << stripblanklines(s) << "}\n\n";
- int rc=wait(tex,texready.c_str(),abort,Inline);
- if(rc) {
- tex << "\\show 0\n";
- tex.wait("\n*");
-
- if(warn && getSetting<bool>("debug")) {
- ostringstream buf;
- buf << "Cannot determine size of label \"" << s << "\"";
- reportWarning(buf);
- }
-
- return false;
- }
-
- texdim(tex, width, "wd", "width", abort);
- texdim(tex, height, "ht", "height", abort);
- texdim(tex, depth, "dp", "depth", abort);
-
- return true;
+ tex.wait(texready.c_str());
+ texdim(tex,width,"wd","width");
+ texdim(tex,height,"ht","height");
+ texdim(tex,depth,"dp","depth");
}
inline double urand()
@@ -110,15 +72,16 @@ inline double urand()
void setpen(iopipestream& tex, const string& texengine, const pen& pentype)
{
- const char **abort=texabort(texengine);
bool Latex=latex(texengine);
- if(Latex) {
- if(setlatexfont(tex,pentype,drawElement::lastpen))
- wait(tex,"\n*",abort);
+ if(Latex && setlatexfont(tex,pentype,drawElement::lastpen)) {
+ tex << "\n";
+ tex.wait(texready.c_str());
+ }
+ if(settexfont(tex,pentype,drawElement::lastpen,Latex)) {
+ tex << "\n";
+ tex.wait(texready.c_str());
}
- if(settexfont(tex,pentype,drawElement::lastpen,Latex))
- wait(tex,"\n*",abort);
drawElement::lastpen=pentype;
}
@@ -128,13 +91,12 @@ void drawLabel::getbounds(iopipestream& tex, const string& texengine)
if(havebounds) return;
havebounds=true;
- const char **abort=texabort(texengine);
setpen(tex,texengine,pentype);
+ texbounds(width,height,depth,tex,label);
- bool nullsize=size.empty();
- if(!texbounds(width,height,depth,tex,label,abort,nullsize,
- getSetting<bool>("inlinetex")) && !nullsize)
- texbounds(width,height,depth,tex,size,abort,false);
+ if(width == 0.0 && height == 0.0 && depth == 0.0 && !size.empty())
+ texbounds(width,height,depth,tex,size);
+
enabled=true;
Align=inverse(T)*align;
diff --git a/Build/source/utils/asymptote/drawlabel.h b/Build/source/utils/asymptote/drawlabel.h
index 253184008d3..cbf1d049d75 100644
--- a/Build/source/utils/asymptote/drawlabel.h
+++ b/Build/source/utils/asymptote/drawlabel.h
@@ -80,9 +80,8 @@ public:
};
void setpen(iopipestream& tex, const string& texengine, const pen& pentype);
-bool texbounds(double& width, double& height, double& depth,
- iopipestream& tex, string& s, const char **abort,
- bool warn, bool Inline=false);
+void texbounds(double& width, double& height, double& depth,
+ iopipestream& tex, string& s);
}
diff --git a/Build/source/utils/asymptote/drawlayer.h b/Build/source/utils/asymptote/drawlayer.h
index 2c16de74500..ca877effa15 100644
--- a/Build/source/utils/asymptote/drawlayer.h
+++ b/Build/source/utils/asymptote/drawlayer.h
@@ -31,7 +31,7 @@ public:
bool write(texfile *out, const bbox&) {
out->verbatimline(settings::latex(out->texengine) ? "\\newpage" :
- settings::context(out->texengine) ? "}\\eject\\hbox{%" :
+ settings::context(out->texengine) ? "}\\page\\hbox{%" :
"\\eject");
return true;
}
diff --git a/Build/source/utils/asymptote/examples/animations/embeddedmovie.asy b/Build/source/utils/asymptote/examples/animations/embeddedmovie.asy
index 12fdf04dedc..7557266bb00 100644
--- a/Build/source/utils/asymptote/examples/animations/embeddedmovie.asy
+++ b/Build/source/utils/asymptote/examples/animations/embeddedmovie.asy
@@ -1,6 +1,6 @@
// An embedded movie;
//
-// See http://www.tug.org/tex-archive/macros/latex/contrib/movie15/README
+// See http://mirror.ctan.org/macros/latex/contrib/media9/doc/media9.pdf
// for documentation of the options.
import embed; // Add embedded movie
diff --git a/Build/source/utils/asymptote/examples/splitpatch.asy b/Build/source/utils/asymptote/examples/splitpatch.asy
index 2e9fae66431..f8578bbbcc9 100644
--- a/Build/source/utils/asymptote/examples/splitpatch.asy
+++ b/Build/source/utils/asymptote/examples/splitpatch.asy
@@ -5,8 +5,8 @@ size(300);
// A structure to subdivide two intersecting patches about their intersection.
struct split
{
- surface[] S=sequence(new surface(int i) {return new surface;},1);
- surface[] T=sequence(new surface(int i) {return new surface;},1);
+ surface[] S={new surface};
+ surface[] T={new surface};
struct tree {
tree[] tree=new tree[2];
@@ -17,7 +17,7 @@ struct split
// Subdivide p and q to depth n if they overlap.
void write(tree pt, tree qt, triple[][] p, triple[][] q, int depth=n) {
--depth;
- triple[][][] Split(triple[][] P)=depth % 2 == 0 ? hsplit : vsplit;
+ triple[][][] Split(triple[][] P, real u=0)=depth % 2 == 0 ? hsplit : vsplit;
triple[][][] P=Split(p);
triple[][][] Q=Split(q);
@@ -40,7 +40,7 @@ struct split
// Output the subpatches of p from subdivision.
void read(surface[] S, tree t, triple[][] p, int depth=n) {
--depth;
- triple[][][] Split(triple[][] P)=depth % 2 == 0 ? hsplit : vsplit;
+ triple[][][] Split(triple[][] P, real u=0)=depth % 2 == 0 ? hsplit : vsplit;
triple[][][] P=Split(p);
for(int i=0; i < 2; ++i) {
diff --git a/Build/source/utils/asymptote/genv.cc b/Build/source/utils/asymptote/genv.cc
index 396cf63d366..2f3a030822d 100644
--- a/Build/source/utils/asymptote/genv.cc
+++ b/Build/source/utils/asymptote/genv.cc
@@ -15,7 +15,7 @@
#include <sstream>
#include <unistd.h>
-#include <bits/stl_algo.h>
+#include <algorithm>
#include "genv.h"
#include "env.h"
diff --git a/Build/source/utils/asymptote/glrender.cc b/Build/source/utils/asymptote/glrender.cc
index 824ecc6e07a..401f7a91ecd 100644
--- a/Build/source/utils/asymptote/glrender.cc
+++ b/Build/source/utils/asymptote/glrender.cc
@@ -77,8 +77,6 @@ bool Xspin,Yspin,Zspin;
bool Animate;
bool Step;
-int minimumsize=50; // Minimum initial rendering window width and height
-
bool queueScreen=false;
int x0,y0;
@@ -531,22 +529,10 @@ void windowposition(int& x, int& y, int width=Width, int height=Height)
}
}
-void setsize(int w, int h, int minsize=0, bool reposition=true)
+void setsize(int w, int h, bool reposition=true)
{
int x,y;
- if(minsize) {
- if(w < minsize) {
- h=(int) (h*(double) minsize/w+0.5);
- w=minsize;
- }
-
- if(h < minsize) {
- w=(int) (w*(double) minsize/h+0.5);
- h=minsize;
- }
- }
-
capsize(w,h);
if(reposition) {
windowposition(x,y,w,h);
@@ -579,7 +565,7 @@ void fitscreen(bool reposition=true)
case 0: // Original size
{
Xfactor=Yfactor=1.0;
- setsize(oldWidth,oldHeight,minimumsize,reposition);
+ setsize(oldWidth,oldHeight,reposition);
break;
}
case 1: // Fit to screen in one dimension
@@ -590,7 +576,7 @@ void fitscreen(bool reposition=true)
int h=screenHeight;
if(w >= h*Aspect) w=(int) (h*Aspect+0.5);
else h=(int) (w/Aspect+0.5);
- setsize(w,h,minimumsize,reposition);
+ setsize(w,h,reposition);
break;
}
case 2: // Full screen
@@ -751,10 +737,18 @@ void capzoom()
}
+int menustatus=GLUT_MENU_NOT_IN_USE;
+
+void menuStatus(int status, int x, int y)
+{
+ menustatus=status;
+}
+
void disableMenu()
{
Menu=false;
- glutDetachMenu(MenuButton);
+ if(menustatus == GLUT_MENU_NOT_IN_USE)
+ glutDetachMenu(MenuButton);
}
void zoom(int x, int y)
@@ -1649,6 +1643,7 @@ void glrender(const string& prefix, const picture *pic, const string& format,
glutAddMenuEntry("(r) Reverse",REVERSE);
glutAddMenuEntry("( ) Step",STEP);
glutAddMenuEntry("(q) Quit" ,QUIT);
+ glutMenuStatusFunc(menuStatus);
for(size_t i=0; i < nbuttons; ++i) {
int button=buttons[i];
diff --git a/Build/source/utils/asymptote/gsl.cc b/Build/source/utils/asymptote/gsl.cc
index cfb6a5a3785..b5005578d54 100644
--- a/Build/source/utils/asymptote/gsl.cc
+++ b/Build/source/utils/asymptote/gsl.cc
@@ -850,7 +850,7 @@ void GSLrng_dir2d(stack *s)
{
string method = pop<string>(s,string("neumann"));
checkGSLrng();
- double x,y;
+ double x=0, y=0;
if(method == "neumann") gsl_ran_dir_2d(GSLrng,&x,&y);
else if(method == "trig") gsl_ran_dir_2d_trig_method(GSLrng,&x,&y);
else error(GSLinvalid);
diff --git a/Build/source/utils/asymptote/memory.h b/Build/source/utils/asymptote/memory.h
index 495bed6c123..d29b117855e 100644
--- a/Build/source/utils/asymptote/memory.h
+++ b/Build/source/utils/asymptote/memory.h
@@ -14,33 +14,28 @@
#include <string>
#include <sstream>
-#if defined __GNUC__ && defined __GNUC_MINOR__
-# define PREREQ(maj,min) \
- ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
-#else
-# define PREREQ(maj,min) 1
-#endif
-
#ifndef NOHASH
-#if PREREQ(4,3) || defined(__CYGWIN__)
-#if __cplusplus >= 201103L
+#ifdef HAVE_UNORDERED_MAP
+
#include <memory>
#include <unordered_map>
#define EXT std
+
#else
+
+#ifdef HAVE_TR1_UNORDERED_MAP
#include <tr1/unordered_map>
#define EXT std::tr1
-#endif
-
#else
-
#define EXT __gnu_cxx
#include <ext/hash_map>
#define unordered_map hash_map
#define unordered_multimap hash_multimap
+#endif
#endif
+
#endif
#ifdef __DECCXX_LIBCXX_RH70
diff --git a/Build/source/utils/asymptote/path.cc b/Build/source/utils/asymptote/path.cc
index 642812e0b67..6fa9c1f5634 100644
--- a/Build/source/utils/asymptote/path.cc
+++ b/Build/source/utils/asymptote/path.cc
@@ -48,8 +48,9 @@ inline pair sqrt1pxm1(pair x)
// Solve for the real roots of the quadratic equation ax^2+bx+c=0.
quadraticroots::quadraticroots(double a, double b, double c)
{
- if(a == 0.0) {
- if(b != 0.0) {
+ // Remove roots at numerical infinity.
+ if(fabs(a) <= Fuzz*(fabs(b)+fabs(c)*Fuzz)) {
+ if(fabs(b) > Fuzz*fabs(c)) {
distinct=quadraticroots::ONE;
roots=1;
t1=-c/b;
@@ -64,7 +65,7 @@ quadraticroots::quadraticroots(double a, double b, double c)
} else {
double factor=0.5*b/a;
double denom=b*factor;
- if(denom == 0.0) {
+ if(fabs(denom) <= Fuzz*fabs(c)) {
double x=-c/a;
if(x >= 0.0) {
distinct=quadraticroots::TWO;
@@ -177,8 +178,9 @@ cubicroots::cubicroots(double a, double b, double c, double d)
return;
}
- double ainv=1.0/a;
- b *= ainv; c *= ainv; d *= ainv;
+ b /= a;
+ c /= a;
+ d /= a;
double b2=b*b;
double Q=3.0*c-b2;
@@ -866,7 +868,8 @@ void lineintersections(std::vector<double>& T, const path& g,
void intersections(std::vector<double>& S, std::vector<double>& T,
const path& g, const pair& p, const pair& q, double fuzz)
{
- if(q == p) {
+ double length2=(q-p).abs2();
+ if(length2 == 0.0) {
std::vector<double> S1;
intersections(S1,g,p,fuzz);
size_t n=S1.size();
@@ -875,7 +878,7 @@ void intersections(std::vector<double>& S, std::vector<double>& T,
T.push_back(0.0);
}
} else {
- pair factor=(q-p)/((q-p).abs2());
+ pair factor=(q-p)/length2;
std::vector<double> S1;
lineintersections(S1,g,p,q,fuzz,true);
size_t n=S1.size();
diff --git a/Build/source/utils/asymptote/pipestream.cc b/Build/source/utils/asymptote/pipestream.cc
new file mode 100644
index 00000000000..3fdff1d3c7e
--- /dev/null
+++ b/Build/source/utils/asymptote/pipestream.cc
@@ -0,0 +1,207 @@
+/* Pipestream: A simple C++ interface to UNIX pipes
+ Copyright (C) 2005-2014 John C. Bowman,
+ with contributions from Mojca Miklavec
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include <iostream>
+#include <cstring>
+#include <cerrno>
+#include <sstream>
+#include <signal.h>
+
+#include "pipestream.h"
+#include "common.h"
+#include "errormsg.h"
+#include "settings.h"
+#include "util.h"
+#include "interact.h"
+#include "lexical.h"
+#include "camperror.h"
+#include "pen.h"
+
+void iopipestream::open(const mem::vector<string> &command, const char *hint,
+ const char *application, int out_fileno)
+{
+ if(pipe(in) == -1) {
+ ostringstream buf;
+ buf << "in pipe failed: ";
+ for(size_t i=0; i < command.size(); ++i) buf << command[i];
+ camp::reportError(buf);
+ }
+
+ if(pipe(out) == -1) {
+ ostringstream buf;
+ buf << "out pipe failed: ";
+ for(size_t i=0; i < command.size(); ++i) buf << command[i];
+ camp::reportError(buf);
+ }
+ cout.flush(); // Flush stdout to avoid duplicate output.
+
+ if((pid=fork()) < 0) {
+ ostringstream buf;
+ buf << "fork failed: ";
+ for(size_t i=0; i < command.size(); ++i) buf << command[i];
+ camp::reportError(buf);
+ }
+
+ if(pid == 0) {
+ if(interact::interactive) signal(SIGINT,SIG_IGN);
+ close(in[1]);
+ close(out[0]);
+ close(STDIN_FILENO);
+ close(out_fileno);
+ dup2(in[0],STDIN_FILENO);
+ dup2(out[1],out_fileno);
+ close(in[0]);
+ close(out[1]);
+ char **argv=args(command);
+ if(argv) execvp(argv[0],argv);
+ execError(argv[0],hint,application);
+ kill(0,SIGTERM);
+ _exit(-1);
+ }
+ close(out[1]);
+ close(in[0]);
+ *buffer=0;
+ pipeopen=true;
+ pipein=true;
+ Running=true;
+ block(false,true);
+}
+
+void iopipestream::eof()
+{
+ if(pipeopen && pipein) {
+ close(in[1]);
+ pipein=false;
+ }
+}
+
+void iopipestream::pipeclose()
+{
+ if(pipeopen) {
+ kill(pid,SIGTERM);
+ eof();
+ close(out[0]);
+ Running=false;
+ pipeopen=false;
+ waitpid(pid,NULL,0); // Avoid zombies.
+ }
+}
+
+void iopipestream::block(bool write, bool read)
+{
+ if(pipeopen) {
+ int w=fcntl(in[1],F_GETFL);
+ int r=fcntl(out[0],F_GETFL);
+ fcntl(in[1],F_SETFL,write ? w & ~O_NONBLOCK : w | O_NONBLOCK);
+ fcntl(out[0],F_SETFL,read ? r & ~O_NONBLOCK : r | O_NONBLOCK);
+ }
+}
+
+ssize_t iopipestream::readbuffer()
+{
+ ssize_t nc;
+ char *p=buffer;
+ ssize_t size=BUFSIZE-1;
+ errno=0;
+ for(;;) {
+ if((nc=read(out[0],p,size)) < 0) {
+ if(errno == EAGAIN) {p[0]=0; break;}
+ else camp::reportError("read from pipe failed");
+ nc=0;
+ }
+ p[nc]=0;
+ if(nc == 0) {
+ if(waitpid(pid,NULL,WNOHANG) == pid)
+ Running=false;
+ break;
+ }
+ if(nc > 0) {
+ if(settings::verbose > 2) cerr << p;
+ break;
+ }
+ }
+ return nc;
+}
+
+bool iopipestream::tailequals(const char *buf, size_t len, const char *prompt,
+ size_t plen)
+{
+ const char *a=buf+len;
+ const char *b=prompt+plen;
+ while(b >= prompt) {
+ if(a < buf) return false;
+ if(*a != *b) return false;
+ // Handle MSDOS incompatibility:
+ if(a > buf && *a == '\n' && *(a-1) == '\r') --a;
+ --a; --b;
+ }
+ return true;
+}
+
+string iopipestream::readline()
+{
+ sbuffer.clear();
+ int nc;
+ do {
+ nc=readbuffer();
+ sbuffer.append(buffer);
+ } while(buffer[nc-1] != '\n' && Running);
+ return sbuffer;
+}
+
+void iopipestream::wait(const char *prompt)
+{
+ sbuffer.clear();
+ size_t plen=strlen(prompt);
+
+ do {
+ readbuffer();
+ sbuffer.append(buffer);
+ } while(!tailequals(sbuffer.c_str(),sbuffer.size(),prompt,plen));
+}
+
+int iopipestream::wait()
+{
+ for(;;) {
+ int status;
+ if (waitpid(pid,&status,0) == -1) {
+ if (errno == ECHILD) return 0;
+ if (errno != EINTR) {
+ ostringstream buf;
+ buf << "Process " << pid << " failed";
+ camp::reportError(buf);
+ }
+ } else {
+ if(WIFEXITED(status)) return WEXITSTATUS(status);
+ else {
+ ostringstream buf;
+ buf << "Process " << pid << " exited abnormally";
+ camp::reportError(buf);
+ }
+ }
+ }
+}
+
+void iopipestream::Write(const string &s)
+{
+ ssize_t size=s.length();
+ if(settings::verbose > 2) cerr << s;
+ if(write(in[1],s.c_str(),size) != size) {
+ camp::reportFatal("write to pipe failed");
+ }
+}
diff --git a/Build/source/utils/asymptote/pipestream.h b/Build/source/utils/asymptote/pipestream.h
index dbf73989d7f..26eae7a611b 100644
--- a/Build/source/utils/asymptote/pipestream.h
+++ b/Build/source/utils/asymptote/pipestream.h
@@ -1,6 +1,7 @@
/* Pipestream: A simple C++ interface to UNIX pipes
- Version 0.04
- Copyright (C) 2005-2009 John C. Bowman
+ Version 0.05
+ Copyright (C) 2005-2014 John C. Bowman,
+ with contributions from Mojca Miklavec
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -19,20 +20,11 @@
#ifndef PIPESTREAM_H
#define PIPESTREAM_H
-#include <iostream>
-#include <cstring>
#include <sys/wait.h>
-#include <cerrno>
-#include <sstream>
#include <unistd.h>
-#include <signal.h>
#include <fcntl.h>
#include "common.h"
-#include "errormsg.h"
-#include "settings.h"
-#include "util.h"
-#include "interact.h"
// bidirectional stream for reading and writing to pipes
class iopipestream {
@@ -41,239 +33,66 @@ protected:
int out[2];
static const int BUFSIZE=SHRT_MAX;
char buffer[BUFSIZE];
+ string sbuffer;
int pid;
bool Running;
bool pipeopen;
bool pipein;
- ostringstream transcript;
public:
- void clear() {
- transcript << buffer;
- *buffer=0;
- }
-
- void shred() {
- transcript.str("");
- }
-
- const string message() const {
- return transcript.str();
- }
-
void open(const mem::vector<string> &command, const char *hint=NULL,
- const char *application="", int out_fileno=STDOUT_FILENO) {
- if(pipe(in) == -1) {
- ostringstream buf;
- buf << "in pipe failed: ";
- for(size_t i=0; i < command.size(); ++i) buf << command[i];
- camp::reportError(buf);
- }
+ const char *application="", int out_fileno=STDOUT_FILENO);
- if(pipe(out) == -1) {
- ostringstream buf;
- buf << "out pipe failed: ";
- for(size_t i=0; i < command.size(); ++i) buf << command[i];
- camp::reportError(buf);
- }
- cout.flush(); // Flush stdout to avoid duplicate output.
-
- if((pid=fork()) < 0) {
- ostringstream buf;
- buf << "fork failed: ";
- for(size_t i=0; i < command.size(); ++i) buf << command[i];
- camp::reportError(buf);
- }
-
- if(pid == 0) {
- if(interact::interactive) signal(SIGINT,SIG_IGN);
- close(in[1]);
- close(out[0]);
- close(STDIN_FILENO);
- close(out_fileno);
- dup2(in[0],STDIN_FILENO);
- dup2(out[1],out_fileno);
- close(in[0]);
- close(out[1]);
- char **argv=args(command);
- if(argv) execvp(argv[0],argv);
- execError(argv[0],hint,application);
- kill(0,SIGTERM);
- _exit(-1);
- }
- close(out[1]);
- close(in[0]);
- *buffer=0;
- pipeopen=true;
- pipein=true;
- Running=true;
- }
-
- void block(bool block=true) {
- if(pipeopen) {
- int flags=fcntl(out[0],F_GETFL);
- if(block)
- fcntl(out[0],F_SETFL,flags & ~O_NONBLOCK);
- else
- fcntl(out[0],F_SETFL,flags | O_NONBLOCK);
- }
- }
-
bool isopen() {return pipeopen;}
-
+
iopipestream(): pid(0), pipeopen(false) {}
-
+
iopipestream(const mem::vector<string> &command, const char *hint=NULL,
const char *application="", int out_fileno=STDOUT_FILENO) :
pid(0), pipeopen(false) {
open(command,hint,application,out_fileno);
}
-
- void eof() {
- if(pipeopen && pipein) {
- close(in[1]);
- pipein=false;
- }
- }
-
- virtual void pipeclose() {
- if(pipeopen) {
- kill(pid,SIGTERM);
- eof();
- close(out[0]);
- Running=false;
- pipeopen=false;
- waitpid(pid,NULL,0); // Avoid zombies.
- }
- }
-
+
+ void eof();
+ virtual void pipeclose();
+
virtual ~iopipestream() {
pipeclose();
}
-
- ssize_t readbuffer() {
- ssize_t nc;
- char *p=buffer;
- ssize_t size=BUFSIZE-1;
- for(;;) {
- if((nc=read(out[0],p,size)) < 0) {
- if(errno == EAGAIN) {p[0]=0; break;}
- else camp::reportError("read from pipe failed");
- }
- p[nc]=0;
- if(nc == 0) {
- if(waitpid(pid, NULL, WNOHANG) == pid)
- Running=false;
- break;
- }
- if(nc > 0) {
- if(settings::verbose > 2) cerr << p;
- if(strchr(p,'\n')) break;
- p += nc;
- size -= nc;
- }
- }
- return p+nc-buffer;
- }
- bool running() {return Running;}
+ void block(bool write=false, bool read=true);
- typedef iopipestream& (*imanip)(iopipestream&);
- iopipestream& operator << (imanip func) { return (*func)(*this); }
+ ssize_t readbuffer();
+ string readline();
+ bool running() {return Running;}
+
+ typedef iopipestream& (*imanip)(iopipestream&);
+
+ iopipestream& operator << (imanip func) {
+ return (*func)(*this);
+ }
+
iopipestream& operator >> (string& s) {
readbuffer();
s=buffer;
return *this;
}
-
+
bool tailequals(const char *buf, size_t len, const char *prompt,
- size_t plen) {
- const char *a=buf+len;
- const char *b=prompt+plen;
- while(b >= prompt) {
- if(a < buf) return false;
- if(*a != *b) return false;
- // Handle MSDOS incompatibility:
- if(a > buf && *a == '\n' && *(a-1) == '\r') --a;
- --a; --b;
- }
- return true;
- }
-
- bool checkabort(const char *abort) {
- size_t alen=strlen(abort);
- if(strncmp(buffer,abort,alen) == 0) {
- clear();
- return true;
- }
- char *p=buffer;
- while((p=strchr(p,'\n')) != NULL) {
- ++p;
- if(strncmp(p,abort,alen) == 0) {
- clear();
- return true;
- }
- }
- return false;
- }
-
- // returns true if prompt found, false if abort string is received
- int wait(const char *prompt, const char**abort=NULL) {
- ssize_t len;
- size_t plen=strlen(prompt);
-
- unsigned int n=0;
- if(abort) {
- for(;;) {
- if(abort[n]) n++;
- else break;
- }
- }
-
- do {
- len=readbuffer();
- for(unsigned int i=0; i < n; ++i)
- if(checkabort(abort[i])) return i+1;
- } while (!tailequals(buffer,len,prompt,plen));
- return 0;
- }
+ size_t plen);
- int wait() {
- for(;;) {
- int status;
- if (waitpid(pid, &status, 0) == -1) {
- if (errno == ECHILD) return 0;
- if (errno != EINTR) {
- ostringstream buf;
- buf << "Process " << pid << " failed";
- camp::reportError(buf);
- }
- } else {
- if(WIFEXITED(status)) return WEXITSTATUS(status);
- else {
- ostringstream buf;
- buf << "Process " << pid << " exited abnormally";
- camp::reportError(buf);
- }
- }
- }
- }
-
- void Write(const string &s) {
- ssize_t size=s.length();
- if(settings::verbose > 2) cerr << s;
- if(write(in[1],s.c_str(),size) != size) {
- camp::reportFatal("write to pipe failed");
- }
-
- }
+ string getbuffer() {return sbuffer;}
+ void wait(const char *prompt);
+ int wait();
+ void Write(const string &s);
+
iopipestream& operator << (const string& s) {
Write(s);
return *this;
}
-
+
template<class T>
iopipestream& operator << (T x) {
ostringstream os;
diff --git a/Build/source/utils/asymptote/prc/writePRC.h b/Build/source/utils/asymptote/prc/writePRC.h
index 4795c7550a1..7a9313e45cb 100644
--- a/Build/source/utils/asymptote/prc/writePRC.h
+++ b/Build/source/utils/asymptote/prc/writePRC.h
@@ -25,9 +25,7 @@
#include <vector>
#include <deque>
#include <list>
-#ifdef __GNUC__
-#include <ext/slist>
-#endif
+
#include <map>
#include <iostream>
#include "PRCbitStream.h"
@@ -224,11 +222,8 @@ class PRCAttribute : public PRCAttributeEntry
void addKey(const PRCSingleAttribute &key) { attribute_keys.push_back(key); }
std::deque<PRCSingleAttribute> attribute_keys;
};
-#ifdef __GNUC__
-typedef __gnu_cxx::slist<PRCAttribute> PRCAttributeList;
-#else
+
typedef std::list<PRCAttribute> PRCAttributeList;
-#endif
class PRCAttributes
{
diff --git a/Build/source/utils/asymptote/runfile.cc b/Build/source/utils/asymptote/runfile.cc
index 98303cf52f3..f12f8addb5c 100644
--- a/Build/source/utils/asymptote/runfile.cc
+++ b/Build/source/utils/asymptote/runfile.cc
@@ -120,7 +120,7 @@ void gen_runfile3(stack *Stack)
bool check=vm::pop<bool>(Stack,true);
string name=vm::pop<string>(Stack,emptystring);
#line 45 "runfile.in"
- file *f;
+ file *f=NULL;
if(mode == "binary") {
f=new ibfile(name,check);
} else if(mode == "xdr") {
@@ -154,7 +154,7 @@ void gen_runfile4(stack *Stack)
bool update=vm::pop<bool>(Stack,false);
string name=vm::pop<string>(Stack,emptystring);
#line 73 "runfile.in"
- file *f;
+ file *f=NULL;
if(mode == "pipe") {
f=new opipe(name);
} else if(mode == "binary") {
diff --git a/Build/source/utils/asymptote/runfile.in b/Build/source/utils/asymptote/runfile.in
index 584b97f1394..e51b3b76eac 100644
--- a/Build/source/utils/asymptote/runfile.in
+++ b/Build/source/utils/asymptote/runfile.in
@@ -43,7 +43,7 @@ file* :nullFile()
file* input(string name=emptystring, bool check=true,
string comment=commentchar, string mode=emptystring)
{
- file *f;
+ file *f=NULL;
if(mode == "binary") {
f=new ibfile(name,check);
} else if(mode == "xdr") {
@@ -71,7 +71,7 @@ file* input(string name=emptystring, bool check=true,
file* output(string name=emptystring, bool update=false,
string comment=commentchar, string mode=emptystring)
{
- file *f;
+ file *f=NULL;
if(mode == "pipe") {
f=new opipe(name);
} else if(mode == "binary") {
diff --git a/Build/source/utils/asymptote/runlabel.cc b/Build/source/utils/asymptote/runlabel.cc
index c64b64258e3..6e54c5dcd9e 100644
--- a/Build/source/utils/asymptote/runlabel.cc
+++ b/Build/source/utils/asymptote/runlabel.cc
@@ -161,17 +161,19 @@ array *readpath(const string& psname, bool keep,
iopipestream gs(cmd,"gs","Ghostscript");
while(true) {
stringstream buf;
- while(true) {
- string out;
- gs >> out;
- if(out.empty() && !gs.running()) break;
- buf << out;
- if(out[out.size()-1] == '\n') {
- gs << newl;
- break;
- }
+ string s=gs.readline();
+ if(s.empty() || !gs.running()) break;
+ gs << newl;
+
+#ifdef __APPLE__
+ for(string::iterator i=s.begin(); i != s.end(); ++i) {
+ // Workaround broken stringstream container in MacOS 10.9 libc++.
+ if(isalpha(*i) && *i != 'e') {buf << " ";}
+ buf << *i;
}
- if(!gs.running()) break;
+#else
+ buf << s;
+#endif
if(verbose > 2) cout << endl;
@@ -267,7 +269,7 @@ array *readpath(const string& psname, bool keep,
#endif
namespace run {
-#line 220 "runlabel.in"
+#line 222 "runlabel.in"
// void label(picture *f, string *s, string *size, transform t, pair position, pair align, pen p);
void gen_runlabel0(stack *Stack)
{
@@ -278,36 +280,34 @@ void gen_runlabel0(stack *Stack)
string * size=vm::pop<string *>(Stack);
string * s=vm::pop<string *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 222 "runlabel.in"
+#line 224 "runlabel.in"
f->append(new drawLabel(*s,*size,t,position,align,p));
}
-#line 226 "runlabel.in"
+#line 228 "runlabel.in"
// bool labels(picture *f);
void gen_runlabel1(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 227 "runlabel.in"
+#line 229 "runlabel.in"
{Stack->push<bool>(f->havelabels()); return;}
}
-#line 231 "runlabel.in"
+#line 233 "runlabel.in"
// realarray* texsize(string *s, pen p=CURRENTPEN);
void gen_runlabel2(stack *Stack)
{
pen p=vm::pop<pen>(Stack,CURRENTPEN);
string * s=vm::pop<string *>(Stack);
-#line 232 "runlabel.in"
+#line 234 "runlabel.in"
texinit();
processDataStruct &pd=processData();
string texengine=getSetting<string>("tex");
- const char **abort=texabort(texengine);
setpen(pd.tex,texengine,p);
double width,height,depth;
- if(!texbounds(width,height,depth,pd.tex,*s,abort,false,true))
- {Stack->push<realarray*>(new array(0)); return;}
+ texbounds(width,height,depth,pd.tex,*s);
array *t=new array(3);
(*t)[0]=width;
@@ -338,8 +338,15 @@ void gen_runlabel3(stack *Stack)
for(size_t i=0; i < n; ++i) {
tex.setfont(read<pen>(p,i));
- if(i != 0)
- tex.verbatimline("\\newpage");
+ if(i != 0) {
+ if(texengine == "context")
+ tex.verbatimline("}\\page\\hbox{%");
+ else if(texengine == "luatex" || texengine == "tex" ||
+ texengine == "pdftex")
+ tex.verbatimline("\\eject");
+ else
+ tex.verbatimline("\\newpage");
+ }
if(!pdf) {
tex.verbatimline("\\special{ps:");
tex.verbatimline(ASYx);
@@ -379,12 +386,9 @@ void gen_runlabel3(stack *Stack)
cmd.push_back("-sOutputFile=-");
cmd.push_back(pdfname);
iopipestream gs(cmd,"gs","Ghostscript");
-
- gs.block(false);
while(true) {
- string line;
- gs >> line;
- if(line.empty() && !gs.running()) break;
+ string line=gs.readline();
+ if(line.empty() || !gs.running()) break;
ps << line;
}
ps.close();
@@ -425,13 +429,13 @@ void gen_runlabel3(stack *Stack)
{Stack->push<patharray2*>(pdf ? readpath(psname,keep,0.1) : readpath(psname,keep,0.12,-1.0)); return;}
}
-#line 355 "runlabel.in"
+#line 359 "runlabel.in"
// patharray2* textpath(stringarray *s, penarray *p);
void gen_runlabel4(stack *Stack)
{
penarray * p=vm::pop<penarray *>(Stack);
stringarray * s=vm::pop<stringarray *>(Stack);
-#line 356 "runlabel.in"
+#line 360 "runlabel.in"
size_t n=checkArrays(s,p);
if(n == 0) {Stack->push<patharray2*>(new array(0)); return;}
@@ -462,6 +466,7 @@ void gen_runlabel4(stack *Stack)
push_split(cmd,getSetting<string>("textcommandOptions"));
cmd.push_back(textname);
iopipestream typesetter(cmd);
+ typesetter.block(true,false);
mem::vector<string> cmd2;
cmd2.push_back(getSetting<string>("gs"));
@@ -475,7 +480,7 @@ void gen_runlabel4(stack *Stack)
cmd2.push_back("-sOutputFile=-");
cmd2.push_back("-");
iopipestream gs(cmd2,"gs","Ghostscript");
- gs.block(false);
+ gs.block(false,false);
// TODO: Simplify by connecting the pipes directly.
while(true) {
@@ -503,13 +508,13 @@ void gen_runlabel4(stack *Stack)
{Stack->push<patharray2*>(readpath(psname,keep,0.1)); return;}
}
-#line 428 "runlabel.in"
+#line 433 "runlabel.in"
// patharray* _strokepath(path g, pen p=CURRENTPEN);
void gen_runlabel5(stack *Stack)
{
pen p=vm::pop<pen>(Stack,CURRENTPEN);
path g=vm::pop<path>(Stack);
-#line 429 "runlabel.in"
+#line 434 "runlabel.in"
array *P=new array(0);
if(g.size() == 0) {Stack->push<patharray*>(P); return;}
@@ -539,17 +544,17 @@ namespace trans {
void gen_runlabel_venv(venv &ve)
{
-#line 220 "runlabel.in"
+#line 222 "runlabel.in"
addFunc(ve, run::gen_runlabel0, primVoid(), SYM(label), formal(primPicture(), SYM(f), false, false), formal(primString(), SYM(s), false, false), formal(primString(), SYM(size), false, false), formal(primTransform(), SYM(t), false, false), formal(primPair(), SYM(position), false, false), formal(primPair(), SYM(align), false, false), formal(primPen(), SYM(p), false, false));
-#line 226 "runlabel.in"
+#line 228 "runlabel.in"
addFunc(ve, run::gen_runlabel1, primBoolean(), SYM(labels), formal(primPicture(), SYM(f), false, false));
-#line 231 "runlabel.in"
+#line 233 "runlabel.in"
addFunc(ve, run::gen_runlabel2, realArray(), SYM(texsize), formal(primString(), SYM(s), false, false), formal(primPen(), SYM(p), true, false));
#line 251 "runlabel.in"
addFunc(ve, run::gen_runlabel3, pathArray2() , SYM(_texpath), formal(stringArray() , SYM(s), false, false), formal(penArray() , SYM(p), false, false));
-#line 355 "runlabel.in"
+#line 359 "runlabel.in"
addFunc(ve, run::gen_runlabel4, pathArray2() , SYM(textpath), formal(stringArray() , SYM(s), false, false), formal(penArray() , SYM(p), false, false));
-#line 428 "runlabel.in"
+#line 433 "runlabel.in"
addFunc(ve, run::gen_runlabel5, pathArray() , SYM(_strokepath), formal(primPath(), SYM(g), false, false), formal(primPen(), SYM(p), true, false));
}
diff --git a/Build/source/utils/asymptote/runlabel.in b/Build/source/utils/asymptote/runlabel.in
index 20fdf38a3a7..1b22683b907 100644
--- a/Build/source/utils/asymptote/runlabel.in
+++ b/Build/source/utils/asymptote/runlabel.in
@@ -117,17 +117,19 @@ array *readpath(const string& psname, bool keep,
iopipestream gs(cmd,"gs","Ghostscript");
while(true) {
stringstream buf;
- while(true) {
- string out;
- gs >> out;
- if(out.empty() && !gs.running()) break;
- buf << out;
- if(out[out.size()-1] == '\n') {
- gs << newl;
- break;
- }
+ string s=gs.readline();
+ if(s.empty() || !gs.running()) break;
+ gs << newl;
+
+#ifdef __APPLE__
+ for(string::iterator i=s.begin(); i != s.end(); ++i) {
+ // Workaround broken stringstream container in MacOS 10.9 libc++.
+ if(isalpha(*i) && *i != 'e') {buf << " ";}
+ buf << *i;
}
- if(!gs.running()) break;
+#else
+ buf << s;
+#endif
if(verbose > 2) cout << endl;
@@ -234,12 +236,10 @@ realarray *texsize(string *s, pen p=CURRENTPEN)
processDataStruct &pd=processData();
string texengine=getSetting<string>("tex");
- const char **abort=texabort(texengine);
setpen(pd.tex,texengine,p);
double width,height,depth;
- if(!texbounds(width,height,depth,pd.tex,*s,abort,false,true))
- return new array(0);
+ texbounds(width,height,depth,pd.tex,*s);
array *t=new array(3);
(*t)[0]=width;
@@ -265,8 +265,15 @@ patharray2 *_texpath(stringarray *s, penarray *p)
for(size_t i=0; i < n; ++i) {
tex.setfont(read<pen>(p,i));
- if(i != 0)
- tex.verbatimline("\\newpage");
+ if(i != 0) {
+ if(texengine == "context")
+ tex.verbatimline("}\\page\\hbox{%");
+ else if(texengine == "luatex" || texengine == "tex" ||
+ texengine == "pdftex")
+ tex.verbatimline("\\eject");
+ else
+ tex.verbatimline("\\newpage");
+ }
if(!pdf) {
tex.verbatimline("\\special{ps:");
tex.verbatimline(ASYx);
@@ -306,12 +313,9 @@ patharray2 *_texpath(stringarray *s, penarray *p)
cmd.push_back("-sOutputFile=-");
cmd.push_back(pdfname);
iopipestream gs(cmd,"gs","Ghostscript");
-
- gs.block(false);
while(true) {
- string line;
- gs >> line;
- if(line.empty() && !gs.running()) break;
+ string line=gs.readline();
+ if(line.empty() || !gs.running()) break;
ps << line;
}
ps.close();
@@ -384,6 +388,7 @@ patharray2 *textpath(stringarray *s, penarray *p)
push_split(cmd,getSetting<string>("textcommandOptions"));
cmd.push_back(textname);
iopipestream typesetter(cmd);
+ typesetter.block(true,false);
mem::vector<string> cmd2;
cmd2.push_back(getSetting<string>("gs"));
@@ -397,7 +402,7 @@ patharray2 *textpath(stringarray *s, penarray *p)
cmd2.push_back("-sOutputFile=-");
cmd2.push_back("-");
iopipestream gs(cmd2,"gs","Ghostscript");
- gs.block(false);
+ gs.block(false,false);
// TODO: Simplify by connecting the pipes directly.
while(true) {
diff --git a/Build/source/utils/asymptote/runstring.cc b/Build/source/utils/asymptote/runstring.cc
index ed22450546b..0efb0ada23b 100644
--- a/Build/source/utils/asymptote/runstring.cc
+++ b/Build/source/utils/asymptote/runstring.cc
@@ -324,8 +324,6 @@ void gen_runstring11(stack *Stack)
checkformat(f,true);
- Int size=snprintf(NULL,0,f,x)+1;
- if(size < 1) size=255; // Workaround for non-C99 compliant systems.
const char *oldlocale=NULL;
if(!locale.empty()) {
@@ -334,20 +332,23 @@ void gen_runstring11(stack *Stack)
setlocale(LC_ALL,locale.c_str());
}
+ Int size=snprintf(NULL,0,f,x)+1;
+ if(size < 1) size=255; // Workaround for non-C99 compliant systems.
char *buf=new char[size];
snprintf(buf,size,f,x);
+ string s=string(buf);
+ delete[] buf;
+
if(oldlocale) {
setlocale(LC_ALL,oldlocale);
delete[] oldlocale;
}
- string s=string(buf);
- delete[] buf;
{Stack->push<string>(s); return;}
}
-#line 233 "runstring.in"
+#line 234 "runstring.in"
// string format(string *format, string separator, real x, string locale=emptystring);
void gen_runstring12(stack *Stack)
{
@@ -355,7 +356,7 @@ void gen_runstring12(stack *Stack)
real x=vm::pop<real>(Stack);
string separator=vm::pop<string>(Stack);
string * format=vm::pop<string *>(Stack);
-#line 235 "runstring.in"
+#line 236 "runstring.in"
bool tex=getSetting<string>("tex") != "none";
bool texify=false;
ostringstream out;
@@ -403,11 +404,6 @@ void gen_runstring12(stack *Stack)
char *buf=new char[size];
snprintf(buf,size,f.c_str(),x);
- if(oldlocale) {
- setlocale(LC_ALL,oldlocale);
- delete[] oldlocale;
- }
-
bool trailingzero=f.find("#") < string::npos;
bool plus=f.find("+") < string::npos;
bool space=f.find(" ") < string::npos;
@@ -477,15 +473,20 @@ void gen_runstring12(stack *Stack)
delete[] buf;
+ if(oldlocale) {
+ setlocale(LC_ALL,oldlocale);
+ delete[] oldlocale;
+ }
+
{Stack->push<string>(out.str()); return;}
}
-#line 360 "runstring.in"
+#line 361 "runstring.in"
// Int hex(string s);
void gen_runstring13(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 361 "runstring.in"
+#line 362 "runstring.in"
istringstream is(s);
is.setf(std::ios::hex,std::ios::basefield);
Int value;
@@ -495,45 +496,45 @@ void gen_runstring13(stack *Stack)
error(buf);
}
-#line 371 "runstring.in"
+#line 372 "runstring.in"
// Int ascii(string s);
void gen_runstring14(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 372 "runstring.in"
+#line 373 "runstring.in"
{Stack->push<Int>(s.empty() ? -1 : (unsigned char) s[0]); return;}
}
-#line 376 "runstring.in"
+#line 377 "runstring.in"
// string string(Int x);
void gen_runstring15(stack *Stack)
{
Int x=vm::pop<Int>(Stack);
-#line 377 "runstring.in"
+#line 378 "runstring.in"
ostringstream buf;
buf << x;
{Stack->push<string>(buf.str()); return;}
}
-#line 383 "runstring.in"
+#line 384 "runstring.in"
// string string(real x, Int digits=DBL_DIG);
void gen_runstring16(stack *Stack)
{
Int digits=vm::pop<Int>(Stack,DBL_DIG);
real x=vm::pop<real>(Stack);
-#line 384 "runstring.in"
+#line 385 "runstring.in"
ostringstream buf;
buf.precision(digits);
buf << x;
{Stack->push<string>(buf.str()); return;}
}
-#line 391 "runstring.in"
+#line 392 "runstring.in"
// string time(string format=defaulttimeformat);
void gen_runstring17(stack *Stack)
{
string format=vm::pop<string>(Stack,defaulttimeformat);
-#line 392 "runstring.in"
+#line 393 "runstring.in"
#ifdef HAVE_STRFTIME
const time_t bintime=time(NULL);
if(!strftime(Time,nTime,format.c_str(),localtime(&bintime))) {Stack->push<string>(""); return;}
@@ -543,13 +544,13 @@ void gen_runstring17(stack *Stack)
#endif
}
-#line 402 "runstring.in"
+#line 403 "runstring.in"
// string time(Int seconds, string format=defaulttimeformat);
void gen_runstring18(stack *Stack)
{
string format=vm::pop<string>(Stack,defaulttimeformat);
Int seconds=vm::pop<Int>(Stack);
-#line 403 "runstring.in"
+#line 404 "runstring.in"
#ifdef HAVE_STRFTIME
const time_t bintime=seconds;
if(!strftime(Time,nTime,format.c_str(),localtime(&bintime))) {Stack->push<string>(""); return;}
@@ -561,13 +562,13 @@ void gen_runstring18(stack *Stack)
#endif
}
-#line 415 "runstring.in"
+#line 416 "runstring.in"
// Int seconds(string t=emptystring, string format=emptystring);
void gen_runstring19(stack *Stack)
{
string format=vm::pop<string>(Stack,emptystring);
string t=vm::pop<string>(Stack,emptystring);
-#line 416 "runstring.in"
+#line 417 "runstring.in"
#if defined(HAVE_STRPTIME)
const time_t bintime=time(NULL);
tm tm=*localtime(&bintime);
@@ -608,21 +609,21 @@ void gen_runstring_venv(venv &ve)
addFunc(ve, run::gen_runstring10, primString() , SYM(replace), formal(primString(), SYM(s), false, false), formal(stringArray2(), SYM(translate), false, false));
#line 204 "runstring.in"
addFunc(ve, run::gen_runstring11, primString() , SYM(format), formal(primString(), SYM(format), false, false), formal(primInt(), SYM(x), false, false), formal(primString() , SYM(locale), true, false));
-#line 233 "runstring.in"
+#line 234 "runstring.in"
addFunc(ve, run::gen_runstring12, primString() , SYM(format), formal(primString(), SYM(format), false, false), formal(primString() , SYM(separator), false, false), formal(primReal(), SYM(x), false, false), formal(primString() , SYM(locale), true, false));
-#line 360 "runstring.in"
+#line 361 "runstring.in"
addFunc(ve, run::gen_runstring13, primInt(), SYM(hex), formal(primString() , SYM(s), false, false));
-#line 371 "runstring.in"
+#line 372 "runstring.in"
addFunc(ve, run::gen_runstring14, primInt(), SYM(ascii), formal(primString() , SYM(s), false, false));
-#line 376 "runstring.in"
+#line 377 "runstring.in"
addFunc(ve, run::gen_runstring15, primString() , SYM(string), formal(primInt(), SYM(x), false, false));
-#line 383 "runstring.in"
+#line 384 "runstring.in"
addFunc(ve, run::gen_runstring16, primString() , SYM(string), formal(primReal(), SYM(x), false, false), formal(primInt(), SYM(digits), true, false));
-#line 391 "runstring.in"
+#line 392 "runstring.in"
addFunc(ve, run::gen_runstring17, primString() , SYM(time), formal(primString() , SYM(format), true, false));
-#line 402 "runstring.in"
+#line 403 "runstring.in"
addFunc(ve, run::gen_runstring18, primString() , SYM(time), formal(primInt(), SYM(seconds), false, false), formal(primString() , SYM(format), true, false));
-#line 415 "runstring.in"
+#line 416 "runstring.in"
addFunc(ve, run::gen_runstring19, primInt(), SYM(seconds), formal(primString() , SYM(t), true, false), formal(primString() , SYM(format), true, false));
}
diff --git a/Build/source/utils/asymptote/runstring.in b/Build/source/utils/asymptote/runstring.in
index 0c8ead107e5..dc51972fe72 100644
--- a/Build/source/utils/asymptote/runstring.in
+++ b/Build/source/utils/asymptote/runstring.in
@@ -207,8 +207,6 @@ string format(string *format, Int x, string locale=emptystring)
checkformat(f,true);
- Int size=snprintf(NULL,0,f,x)+1;
- if(size < 1) size=255; // Workaround for non-C99 compliant systems.
const char *oldlocale=NULL;
if(!locale.empty()) {
@@ -217,16 +215,19 @@ string format(string *format, Int x, string locale=emptystring)
setlocale(LC_ALL,locale.c_str());
}
+ Int size=snprintf(NULL,0,f,x)+1;
+ if(size < 1) size=255; // Workaround for non-C99 compliant systems.
char *buf=new char[size];
snprintf(buf,size,f,x);
+ string s=string(buf);
+ delete[] buf;
+
if(oldlocale) {
setlocale(LC_ALL,oldlocale);
delete[] oldlocale;
}
- string s=string(buf);
- delete[] buf;
return s;
}
@@ -280,11 +281,6 @@ string format(string *format, string separator, real x,
char *buf=new char[size];
snprintf(buf,size,f.c_str(),x);
- if(oldlocale) {
- setlocale(LC_ALL,oldlocale);
- delete[] oldlocale;
- }
-
bool trailingzero=f.find("#") < string::npos;
bool plus=f.find("+") < string::npos;
bool space=f.find(" ") < string::npos;
@@ -354,6 +350,11 @@ string format(string *format, string separator, real x,
delete[] buf;
+ if(oldlocale) {
+ setlocale(LC_ALL,oldlocale);
+ delete[] oldlocale;
+ }
+
return out.str();
}
diff --git a/Build/source/utils/asymptote/settings.cc b/Build/source/utils/asymptote/settings.cc
index 05248ef4155..25c219f5b11 100644
--- a/Build/source/utils/asymptote/settings.cc
+++ b/Build/source/utils/asymptote/settings.cc
@@ -707,7 +707,8 @@ struct engineSetting : public argumentSetting {
string str=optarg;
if(str == "latex" || str == "pdflatex" || str == "xelatex" ||
- str == "tex" || str == "pdftex" || str == "context" || str == "none") {
+ str == "tex" || str == "pdftex" || str == "luatex" ||
+ str == "lualatex" || str == "context" || str == "none") {
value=str;
return true;
}
@@ -1161,7 +1162,7 @@ void initSettings() {
addOption(new boolSetting("keepaux", 0,
"Keep intermediate LaTeX .aux files"));
addOption(new engineSetting("tex", 0, "engine",
- "latex|pdflatex|xelatex|tex|pdftex|context|none",
+ "latex|pdflatex|xelatex|tex|pdftex|luatex|lualatex|none",
"latex"));
addOption(new boolSetting("twice", 0,
@@ -1321,7 +1322,8 @@ void initSettings() {
int numArgs() { return argCount; }
char *getArg(int n) { return argList[n]; }
-void setInteractive() {
+void setInteractive()
+{
if(numArgs() == 0 && !getSetting<bool>("listvariables") &&
getSetting<string>("command").empty() &&
(isatty(STDIN_FILENO) || getSetting<Int>("inpipe") >= 0))
@@ -1331,7 +1333,8 @@ void setInteractive() {
(string(getPath())+dirsep+"."+suffix+"_history") : (initdir+"/history");
}
-bool view() {
+bool view()
+{
if (interact::interactive)
return getSetting<bool>("interactiveView");
else
@@ -1339,7 +1342,8 @@ bool view() {
(numArgs() == 1 || getSetting<bool>("multipleView"));
}
-bool trap() {
+bool trap()
+{
if (interact::interactive)
return !getSetting<bool>("interactiveMask");
else
@@ -1440,51 +1444,42 @@ void SetPageDimensions() {
}
}
-bool xe(const string& texengine) {
+bool xe(const string& texengine)
+{
return texengine == "xelatex";
}
-bool context(const string& texengine) {
+bool context(const string& texengine)
+{
return texengine == "context";
}
-bool pdf(const string& texengine) {
+bool pdf(const string& texengine)
+{
return texengine == "pdflatex" || texengine == "pdftex" || xe(texengine) ||
- context(texengine);
+ texengine == "luatex" || texengine == "lualatex" || context(texengine);
}
-bool latex(const string& texengine) {
+bool latex(const string& texengine)
+{
return texengine == "latex" || texengine == "pdflatex" ||
- texengine == "xelatex";
+ texengine == "xelatex" || texengine == "lualatex";
}
-string nativeformat() {
+string nativeformat()
+{
return pdf(getSetting<string>("tex")) ? "pdf" : "eps";
}
-string defaultformat() {
+string defaultformat()
+{
string format=getSetting<string>("outformat");
return (format.empty()) ? nativeformat() : format;
}
-// Begin TeX put command.
-const char *beginput(const string& texengine) {
- if(context(texengine))
- return "\\put";
- else
- return "\\put(#1,#2)";
-}
-
-// End TeX put command.
-const char *endput(const string& texengine) {
- if(context(texengine))
- return " at #1 #2";
- else
- return "";
-}
-
// TeX special command to set up currentmatrix for typesetting labels.
-const char *beginlabel(const string& texengine) {
+const char *beginlabel(const string& texengine)
+{
if(pdf(texengine))
return xe(texengine) ? "\\special{pdf:literal q #5 0 0 cm}" :
"\\special{pdf:q #5 0 0 cm}";
@@ -1494,7 +1489,8 @@ const char *beginlabel(const string& texengine) {
}
// TeX special command to restore currentmatrix after typesetting labels.
-const char *endlabel(const string& texengine) {
+const char *endlabel(const string& texengine)
+{
if(pdf(texengine))
return xe(texengine) ? "\\special{pdf:literal Q}" : "\\special{pdf:Q}";
else
@@ -1502,7 +1498,8 @@ const char *endlabel(const string& texengine) {
}
// TeX macro to typeset raw postscript code
-const char *rawpostscript(const string& texengine) {
+const char *rawpostscript(const string& texengine)
+{
if(pdf(texengine))
return "\\def\\ASYraw#1{#1}";
else
@@ -1514,7 +1511,8 @@ const char *rawpostscript(const string& texengine) {
}
// TeX macro to begin picture
-const char *beginpicture(const string& texengine) {
+const char *beginpicture(const string& texengine)
+{
if(latex(texengine))
return "\\begin{picture}";
if(context(texengine))
@@ -1524,7 +1522,8 @@ const char *beginpicture(const string& texengine) {
}
// TeX macro to end picture
-const char *endpicture(const string& texengine) {
+const char *endpicture(const string& texengine)
+{
if(latex(texengine))
return "\\end{picture}%";
else if(context(texengine))
@@ -1534,7 +1533,8 @@ const char *endpicture(const string& texengine) {
}
// Begin TeX special command.
-const char *beginspecial(const string& texengine) {
+const char *beginspecial(const string& texengine)
+{
if(pdf(texengine))
return xe(texengine) ? "\\special{pdf:literal " : "\\special{pdf:";
else
@@ -1542,18 +1542,9 @@ const char *beginspecial(const string& texengine) {
}
// End TeX special command.
-const char *endspecial() {
- return "}%";
-}
-
-bool fataltex[]={false,true};
-const char *pdftexerrors[]={"! "," ==> Fatal error",NULL};
-const char *texerrors[]={"! ",NULL};
-
-// Messages that signify a TeX error.
-const char **texabort(const string& texengine)
+const char *endspecial()
{
- return settings::pdf(texengine) ? pdftexerrors : texerrors;
+ return "}%";
}
string texcommand()
diff --git a/Build/source/utils/asymptote/settings.h b/Build/source/utils/asymptote/settings.h
index 8b9c6898c03..b05673af267 100644
--- a/Build/source/utils/asymptote/settings.h
+++ b/Build/source/utils/asymptote/settings.h
@@ -103,8 +103,6 @@ bool context(const string& texengine);
string nativeformat();
string defaultformat();
-const char *beginput(const string& texengine);
-const char *endput(const string& texengine);
const char *beginlabel(const string& texengine);
const char *endlabel(const string& texengine);
const char *rawpostscript(const string& texengine);
@@ -113,9 +111,6 @@ const char *endpicture(const string& texengine);
const char *beginspecial(const string& texengine);
const char *endspecial();
-extern bool fataltex[];
-const char **texabort(const string& texengine);
-
string texcommand();
string texprogram();
diff --git a/Build/source/utils/asymptote/texfile.cc b/Build/source/utils/asymptote/texfile.cc
index 823bf0febc8..67874e3cb42 100644
--- a/Build/source/utils/asymptote/texfile.cc
+++ b/Build/source/utils/asymptote/texfile.cc
@@ -117,7 +117,7 @@ void texfile::prologue()
} else {
if(!inlinetex) {
if(settings::context(texengine)) {
- *out << "\\setuplayout[width=16383pt,height=16383pt,"
+ *out << "\\setuplayout["
<< "backspace=0pt,topspace=0pt,"
<< "header=0pt,headerdistance=0pt,footer=0pt]" << newl
<< "\\setuppagenumbering[location=]" << endl
@@ -323,7 +323,7 @@ void texfile::put(const string& label, const transform& T, const pair& z,
if(trans)
*out << "{" << T.getxx() << " " << sign*T.getyx()
<< " " << sign*T.getxy() << " " << T.getyy() << "}";
- *out << "{" << label << "}" << newl;
+ *out << "{" << label << "}%" << newl;
}
void texfile::epilogue(bool pipe)
diff --git a/Build/source/utils/asymptote/texfile.h b/Build/source/utils/asymptote/texfile.h
index 1965b98f758..0a99b4aafd7 100644
--- a/Build/source/utils/asymptote/texfile.h
+++ b/Build/source/utils/asymptote/texfile.h
@@ -60,10 +60,12 @@ void texpreamble(T& out, mem::list<string>& preamble=processData().TeXpreamble,
{
texuserpreamble(out,preamble);
string texengine=settings::getSetting<string>("tex");
+ if(settings::context(texengine))
+ out << "\\disabledirectives[system.errorcontext]%" << newl;
out << "\\def\\ASYprefix{" << stripFile(settings::outname()) << "}" << newl
<< "\\newbox\\ASYbox" << newl
<< "\\newdimen\\ASYdimen" << newl
- << "\\long\\def\\ASYbase#1#2{\\leavevmode\\setbox\\ASYbox=\\hbox{#1}"
+ << "\\long\\def\\ASYbase#1#2{\\leavevmode\\setbox\\ASYbox=\\hbox{#1}%"
<< "\\ASYdimen=\\ht\\ASYbox%" << newl
<< "\\setbox\\ASYbox=\\hbox{#2}\\lower\\ASYdimen\\box\\ASYbox}" << newl;
if(ASYalign)
@@ -72,9 +74,8 @@ void texpreamble(T& out, mem::list<string>& preamble=processData().TeXpreamble,
<< "\\setbox\\ASYbox\\hbox{\\ASYdimen=\\ht\\ASYbox%" << newl
<< "\\advance\\ASYdimen by\\dp\\ASYbox\\kern#3\\wd\\ASYbox"
<< "\\raise#4\\ASYdimen\\box\\ASYbox}%" << newl
- << settings::beginput(texengine)
- << "{#5\\wd\\ASYbox 0pt\\dp\\ASYbox 0pt\\ht\\ASYbox 0pt\\box\\ASYbox#6}"
- << settings::endput(texengine) << "}%" << newl
+ << "\\setbox\\ASYbox=\\hbox{#5\\wd\\ASYbox 0pt\\dp\\ASYbox 0pt\\ht\\ASYbox 0pt\\box\\ASYbox#6}%" << newl
+ << "\\hbox to 0pt{\\kern#1pt\\raise#2pt\\box\\ASYbox\\hss}}%" << newl
<< "\\long\\def\\ASYalignT(#1,#2)(#3,#4)#5#6{%" << newl
<< "\\ASYaligned(#1,#2)(#3,#4){%" << newl
<< settings::beginlabel(texengine) << "%" << newl
@@ -145,10 +146,7 @@ void texdefines(T& out, mem::list<string>& preamble=processData().TeXpreamble,
out << "\\begin{document}" << newl;
latexfontencoding(out);
}
- } else if(settings::context(texengine)) {
- if(!pipe && !settings::getSetting<bool>("inlinetex"))
- out << "\\usemodule[pictex]" << newl;
- } else {
+ } else if(!settings::context(texengine)) {
out << "\\input graphicx" << newl // Fix miniltx path parsing bug:
<< "\\makeatletter" << newl
<< "\\def\\filename@parse#1{%" << newl
diff --git a/Build/source/utils/asymptote/triple.h b/Build/source/utils/asymptote/triple.h
index 312a16b24c6..4d49bf421b2 100644
--- a/Build/source/utils/asymptote/triple.h
+++ b/Build/source/utils/asymptote/triple.h
@@ -74,6 +74,7 @@ public:
double f=t[12]*v.x+t[13]*v.y+t[14]*v.z+t[15];
if(f == 0.0)
reportError("division by 0 in transform of a triple");
+
f=1.0/f;
return triple((t[0]*v.x+t[1]*v.y+t[2]*v.z+t[3])*f,