diff -Nru openscad-2015.03-1+dfsg/debian/changelog openscad-2015.03-2+dfsg/debian/changelog --- openscad-2015.03-1+dfsg/debian/changelog 2016-11-01 16:35:12.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/changelog 2016-11-28 14:01:58.000000000 +0000 @@ -1,20 +1,37 @@ -openscad (2015.03-1+dfsg-3build3) zesty; urgency=high +openscad (2015.03-2+dfsg-2ubuntu1) zesty; urgency=medium - * No change rebuild against boost1.62. + * Revert the Build-Conflicts change; on Ubuntu qtbase5-dev Depends on + libgles2-dev. - -- Dimitri John Ledkov Tue, 01 Nov 2016 16:35:12 +0000 + -- Iain Lane Mon, 28 Nov 2016 14:01:58 +0000 -openscad (2015.03-1+dfsg-3build2) yakkety; urgency=medium +openscad (2015.03-2+dfsg-2) unstable; urgency=medium - * No-change rebuild for boost soname change. + * Upload to unstable. + * Add patch for translation generation (Closes: #844881) + * Bump standards version (no changes needed) + * Use debhelper 10 + * Drop obsolete lintian overrides + * Implement a proper clean debian/rules target - -- Matthias Klose Thu, 04 Aug 2016 08:28:21 +0000 + -- Christian M. Amsüss Sun, 27 Nov 2016 17:37:27 +0100 -openscad (2015.03-1+dfsg-3build1) yakkety; urgency=medium +openscad (2015.03-2+dfsg-1) experimental; urgency=medium - * No-change rebuild for boost soname change. + [ upstream ] - -- Matthias Klose Sat, 23 Apr 2016 18:46:51 +0000 + * New bugfix release + + [ Christian M. Amsüss ] + + * Fix Build-Conflicts against GLES + * Pick and enable new OpenGL widget from upstream (Closes: #806670) + * Drop patches applied upstream, refresh and simplify others + * Drop debug-mode workaround (now handled by debhelper for qmake) + * Update copyright file + * Notes on forwarded patches + + -- Christian M. Amsüss Fri, 08 Jan 2016 11:46:03 +0100 openscad (2015.03-1+dfsg-3) unstable; urgency=medium diff -Nru openscad-2015.03-1+dfsg/debian/clean openscad-2015.03-2+dfsg/debian/clean --- openscad-2015.03-1+dfsg/debian/clean 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/clean 2016-11-27 16:37:17.000000000 +0000 @@ -0,0 +1,10 @@ +locale/*/ +objects/ +**/*.pyc + +# +testdata/scad/2D/features/import_dxf-tests.scad +testdata/scad/3D/features/import_stl-tests.scad +testdata/scad/misc/include-tests.scad +testdata/scad/misc/use-tests.scad + diff -Nru openscad-2015.03-1+dfsg/debian/compat openscad-2015.03-2+dfsg/debian/compat --- openscad-2015.03-1+dfsg/debian/compat 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/compat 2016-11-27 12:24:28.000000000 +0000 @@ -1 +1 @@ -9 +10 diff -Nru openscad-2015.03-1+dfsg/debian/control openscad-2015.03-2+dfsg/debian/control --- openscad-2015.03-1+dfsg/debian/control 2016-11-01 16:35:12.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/control 2016-11-28 14:01:58.000000000 +0000 @@ -4,8 +4,9 @@ XSBC-Original-Maintainer: Christian M. Amsüss # libcgal-qt5-dev is a workaround for http://bugs.debian.org/804539 Build-Depends: - debhelper (>= 9), + debhelper (>= 10), qt5-qmake, + qtbase5-dev (>= 5.4), libcgal-qt5-dev, libcgal-dev (>=3.6), libopencsg-dev (>=1.3.0), @@ -17,6 +18,7 @@ libglib2.0-dev, bison (>= 2.4), flex (>=2.5.35), +# workaround for https://github.com/openscad/openscad/issues/1543 libqt5opengl5-dev, libglew-dev (>= 1.5.4) | libglew1.6-dev | libglew1.5-dev (>= 1.5.4), libgmp-dev | libgmp10-dev | libgmp3-dev, @@ -36,11 +38,13 @@ ttf-marvosym, fonts-hosny-amiri # openscad is not gles compatible yet. this line makes builds abort before they -# faile at compile time. libqt4-opengl-dev currently pulls libgles2-mesa-dev in -# on ubuntu arm{el,hf}. +# faile at compile time. libqt5opengl5 uses gles on arm{el,hf}, making openscad +# currently unbuildable there. tracked upstream as +# https://github.com/openscad/openscad/issues/292 and in debian as +# http://bugs.debian.org/797816 Build-Conflicts: libgles2-dev -Standards-Version: 3.9.6 +Standards-Version: 3.9.8 Section: graphics Homepage: http://openscad.org/ Vcs-Browser: http://anonscm.debian.org/cgit/collab-maint/openscad.git/ diff -Nru openscad-2015.03-1+dfsg/debian/copyright openscad-2015.03-2+dfsg/debian/copyright --- openscad-2015.03-1+dfsg/debian/copyright 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/copyright 2016-11-27 09:41:32.000000000 +0000 @@ -1,29 +1,34 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: openscad Source: http://www.openscad.org/ -Files-Excluded: icons/flattr.png - src/SparkleAutoUpdater.* +Files-Excluded: src/SparkleAutoUpdater.* scripts/examples-html/assets/js/rainbow.min.js libraries/MCAD -Comment: For the +dfsg version, icons/flattr.png was removed. It seems that the - company holding the flattr trademark is ok with applications integratin this, - but there is no explicit confirmation thereof, and if there was, it can be - expected that the terms of use violate DFSG. - . - The SparkleAutoUpdater was just called "BSD licensed" by original author, is - thus licensed in an unclear fashion, and is only required on Mac anyway. +Comment: The SparkleAutoUpdater was just called "BSD licensed" by original + author, is thus licensed in an unclear fashion, and is only required on Mac + anyway. . The rainbow.min.js is an obfuscated (minified) file shipped with upstream, but not strictly required (FIXME: check this). . The MCAD library is free, included in upstream's tar ball, but not part of upstream's git tree, and packaged independently. + . + Until before 2015.03-2, upstream shipped the non-free flattr logo, which + warranted the creation of a +dfsg package. The remaining non-free parts are + being tracked at https://github.com/openscad/openscad/issues/1491; it is + expected that future versions can be debian-released with original tar balls. Files: * Copyright: © 2009-2014 Clifford Wolf , Marius Kintel License: GPL-2+ with CGAL exception +Files: src/linalg.cc +Copyright: © 2009-2014 Clifford Wolf , Marius Kintel + , Python team, Mark Dickinson +License: GPL-2+ with CGAL exception and pythonparts + Files: scripts/git-archive-all.py Copyright: 2010, Ilya Kulakov License: MIT @@ -366,3 +371,264 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License: pythonparts + Part of OpenSCAD is copied from Python (linalg.cc/hash_floating_point()), + so the python license is included below. + . + ---- + . + A. HISTORY OF THE SOFTWARE + ========================== + . + Python was created in the early 1990s by Guido van Rossum at Stichting + Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands + as a successor of a language called ABC. Guido remains Python's + principal author, although it includes many contributions from others. + . + In 1995, Guido continued his work on Python at the Corporation for + National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) + in Reston, Virginia where he released several versions of the + software. + . + In May 2000, Guido and the Python core development team moved to + BeOpen.com to form the BeOpen PythonLabs team. In October of the same + year, the PythonLabs team moved to Digital Creations (now Zope + Corporation, see http://www.zope.com). In 2001, the Python Software + Foundation (PSF, see http://www.python.org/psf/) was formed, a + non-profit organization created specifically to own Python-related + Intellectual Property. Zope Corporation is a sponsoring member of + the PSF. + . + All Python releases are Open Source (see http://www.opensource.org for + the Open Source Definition). Historically, most, but not all, Python + releases have also been GPL-compatible; the table below summarizes + the various releases. + . + Release Derived Year Owner GPL- + from compatible? (1) + . + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + . + Footnotes: + . + (1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + . + (2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + . + Thanks to the many outside volunteers who have worked under Guido's + direction to make these releases possible. + . + . + B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON + =============================================================== + . + PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 + -------------------------------------------- + . + 1. This LICENSE AGREEMENT is between the Python Software Foundation + ("PSF"), and the Individual or Organization ("Licensee") accessing and + otherwise using this software ("Python") in source or binary form and + its associated documentation. + . + 2. Subject to the terms and conditions of this License Agreement, PSF hereby + grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, + analyze, test, perform and/or display publicly, prepare derivative works, + distribute, and otherwise use Python alone or in any derivative version, + provided, however, that PSF's License Agreement and PSF's notice of copyright, + i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, + 2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved" + are retained in Python alone or in any derivative version prepared by Licensee. + . + 3. In the event Licensee prepares a derivative work that is based on + or incorporates Python or any part thereof, and wants to make + the derivative work available to others as provided herein, then + Licensee hereby agrees to include in any such work a brief summary of + the changes made to Python. + . + 4. PSF is making Python available to Licensee on an "AS IS" + basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR + IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND + DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT + INFRINGE ANY THIRD PARTY RIGHTS. + . + 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS + A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, + OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + . + 6. This License Agreement will automatically terminate upon a material + breach of its terms and conditions. + . + 7. Nothing in this License Agreement shall be deemed to create any + relationship of agency, partnership, or joint venture between PSF and + Licensee. This License Agreement does not grant permission to use PSF + trademarks or trade name in a trademark sense to endorse or promote + products or services of Licensee, or any third party. + . + 8. By copying, installing or otherwise using Python, Licensee + agrees to be bound by the terms and conditions of this License + Agreement. + . + . + BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 + ------------------------------------------- + . + BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + . + 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an + office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the + Individual or Organization ("Licensee") accessing and otherwise using + this software in source or binary form and its associated + documentation ("the Software"). + . + 2. Subject to the terms and conditions of this BeOpen Python License + Agreement, BeOpen hereby grants Licensee a non-exclusive, + royalty-free, world-wide license to reproduce, analyze, test, perform + and/or display publicly, prepare derivative works, distribute, and + otherwise use the Software alone or in any derivative version, + provided, however, that the BeOpen Python License is retained in the + Software, alone or in any derivative version prepared by Licensee. + . + 3. BeOpen is making the Software available to Licensee on an "AS IS" + basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR + IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND + DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT + INFRINGE ANY THIRD PARTY RIGHTS. + . + 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE + SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS + AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY + DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + . + 5. This License Agreement will automatically terminate upon a material + breach of its terms and conditions. + . + 6. This License Agreement shall be governed by and interpreted in all + respects by the law of the State of California, excluding conflict of + law provisions. Nothing in this License Agreement shall be deemed to + create any relationship of agency, partnership, or joint venture + between BeOpen and Licensee. This License Agreement does not grant + permission to use BeOpen trademarks or trade names in a trademark + sense to endorse or promote products or services of Licensee, or any + third party. As an exception, the "BeOpen Python" logos available at + http://www.pythonlabs.com/logos.html may be used according to the + permissions granted on that web page. + . + 7. By copying, installing or otherwise using the software, Licensee + agrees to be bound by the terms and conditions of this License + Agreement. + . + . + CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 + --------------------------------------- + . + 1. This LICENSE AGREEMENT is between the Corporation for National + Research Initiatives, having an office at 1895 Preston White Drive, + Reston, VA 20191 ("CNRI"), and the Individual or Organization + ("Licensee") accessing and otherwise using Python 1.6.1 software in + source or binary form and its associated documentation. + . + 2. Subject to the terms and conditions of this License Agreement, CNRI + hereby grants Licensee a nonexclusive, royalty-free, world-wide + license to reproduce, analyze, test, perform and/or display publicly, + prepare derivative works, distribute, and otherwise use Python 1.6.1 + alone or in any derivative version, provided, however, that CNRI's + License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) + 1995-2001 Corporation for National Research Initiatives; All Rights + Reserved" are retained in Python 1.6.1 alone or in any derivative + version prepared by Licensee. Alternately, in lieu of CNRI's License + Agreement, Licensee may substitute the following text (omitting the + quotes): "Python 1.6.1 is made available subject to the terms and + conditions in CNRI's License Agreement. This Agreement together with + Python 1.6.1 may be located on the Internet using the following + unique, persistent identifier (known as a handle): 1895.22/1013. This + Agreement may also be obtained from a proxy server on the Internet + using the following URL: http://hdl.handle.net/1895.22/1013". + . + 3. In the event Licensee prepares a derivative work that is based on + or incorporates Python 1.6.1 or any part thereof, and wants to make + the derivative work available to others as provided herein, then + Licensee hereby agrees to include in any such work a brief summary of + the changes made to Python 1.6.1. + . + 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" + basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR + IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND + DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT + INFRINGE ANY THIRD PARTY RIGHTS. + . + 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON + 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS + A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, + OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + . + 6. This License Agreement will automatically terminate upon a material + breach of its terms and conditions. + . + 7. This License Agreement shall be governed by the federal + intellectual property law of the United States, including without + limitation the federal copyright law, and, to the extent such + U.S. federal law does not apply, by the law of the Commonwealth of + Virginia, excluding Virginia's conflict of law provisions. + Notwithstanding the foregoing, with regard to derivative works based + on Python 1.6.1 that incorporate non-separable material that was + previously distributed under the GNU General Public License (GPL), the + law of the Commonwealth of Virginia shall govern this License + Agreement only as to issues arising under or with respect to + Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this + License Agreement shall be deemed to create any relationship of + agency, partnership, or joint venture between CNRI and Licensee. This + License Agreement does not grant permission to use CNRI trademarks or + trade name in a trademark sense to endorse or promote products or + services of Licensee, or any third party. + . + 8. By clicking on the "ACCEPT" button where indicated, or by copying, + installing or otherwise using Python 1.6.1, Licensee agrees to be + bound by the terms and conditions of this License Agreement. + . + ACCEPT + . + . + CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 + -------------------------------------------------- + . + Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, + The Netherlands. All rights reserved. + . + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Stichting Mathematisch + Centrum or CWI not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. + . + STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO + THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff -Nru openscad-2015.03-1+dfsg/debian/patches/Add-hashbang-to-test_cmdline_tool.py.patch openscad-2015.03-2+dfsg/debian/patches/Add-hashbang-to-test_cmdline_tool.py.patch --- openscad-2015.03-1+dfsg/debian/patches/Add-hashbang-to-test_cmdline_tool.py.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/Add-hashbang-to-test_cmdline_tool.py.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -From: Chow Loong Jin -Date: Thu, 12 Mar 2015 12:00:57 +0800 -Subject: Add hashbang to test_cmdline_tool.py - -Forwarded: https://github.com/openscad/openscad/pull/1411 ---- - tests/test_cmdline_tool.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/tests/test_cmdline_tool.py b/tests/test_cmdline_tool.py -index fa278c7..a750bb4 100755 ---- a/tests/test_cmdline_tool.py -+++ b/tests/test_cmdline_tool.py -@@ -1,3 +1,4 @@ -+#!/usr/bin/python - # - # Regression test driver for cmd-line tools - # diff -Nru openscad-2015.03-1+dfsg/debian/patches/Add-keywords-to-the-desktop-file.patch openscad-2015.03-2+dfsg/debian/patches/Add-keywords-to-the-desktop-file.patch --- openscad-2015.03-1+dfsg/debian/patches/Add-keywords-to-the-desktop-file.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/Add-keywords-to-the-desktop-file.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -From: chrysn -Date: Tue, 11 Aug 2015 09:22:56 +0200 -Subject: Add keywords to the desktop file - -Forwarded: https://github.com/openscad/openscad/pull/1411 ---- - icons/openscad.desktop | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/icons/openscad.desktop b/icons/openscad.desktop -index 1b397cf..b4eddb6 100644 ---- a/icons/openscad.desktop -+++ b/icons/openscad.desktop -@@ -6,3 +6,4 @@ Icon=openscad - Exec=openscad %f - MimeType=application/x-openscad; - Categories=Graphics;3DGraphics;Engineering; -+Keywords=3d;solid;geometry;csg;model;stl; diff -Nru openscad-2015.03-1+dfsg/debian/patches/Add-missing-X11-libraries-when-using-GLX.patch openscad-2015.03-2+dfsg/debian/patches/Add-missing-X11-libraries-when-using-GLX.patch --- openscad-2015.03-1+dfsg/debian/patches/Add-missing-X11-libraries-when-using-GLX.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/Add-missing-X11-libraries-when-using-GLX.patch 2016-11-27 12:15:10.000000000 +0000 @@ -2,6 +2,8 @@ Date: Sun, 7 Jun 2015 09:54:37 +0800 Subject: Add missing X11 libraries when using GLX +Forwarded: https://github.com/openscad/openscad/issues/1355 + --- tests/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff -Nru openscad-2015.03-1+dfsg/debian/patches/Allow-building-even-with-resource-absent-from-dfsg-p.patch openscad-2015.03-2+dfsg/debian/patches/Allow-building-even-with-resource-absent-from-dfsg-p.patch --- openscad-2015.03-1+dfsg/debian/patches/Allow-building-even-with-resource-absent-from-dfsg-p.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/Allow-building-even-with-resource-absent-from-dfsg-p.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -From: chrysn -Date: Wed, 20 Feb 2013 15:04:38 +0100 -Subject: Allow building even with resource absent from +dfsg package - -This removes all references to the flattr.png icon which has been -removed to create the DFSG tarball for reasons outlined in -debian/copyright. - -Forwarded: not-needed ---- - openscad.qrc | 1 - - src/AboutDialog.h | 2 -- - src/AboutDialog.html | 2 +- - 3 files changed, 1 insertion(+), 4 deletions(-) - -diff --git a/openscad.qrc b/openscad.qrc -index 8f72f87..f2dd971 100644 ---- a/openscad.qrc -+++ b/openscad.qrc -@@ -29,7 +29,6 @@ - icons/prefs3DView.png - icons/prefsEditor.png - icons/prefsUpdate.png -- icons/flattr.png - src/AboutDialog.html - images/export.png - images/axes.png -diff --git a/src/AboutDialog.h b/src/AboutDialog.h -index 5b8be81..6c718a3 100644 ---- a/src/AboutDialog.h -+++ b/src/AboutDialog.h -@@ -11,8 +11,6 @@ public: - AboutDialog(QWidget *) { - setupUi(this); - this->setWindowTitle( QString(_("About OpenSCAD")) + " " + openscad_shortversionnumber.c_str()); -- QUrl flattr_qurl(":icons/flattr.png" ); -- this->aboutText->loadResource( QTextDocument::ImageResource, flattr_qurl ); - QString tmp = this->aboutText->toHtml(); - tmp.replace("__VERSION__", openscad_detailedversionnumber.c_str()); - this->aboutText->setHtml(tmp); -diff --git a/src/AboutDialog.html b/src/AboutDialog.html -index accff27..0738f5d 100644 ---- a/src/AboutDialog.html -+++ b/src/AboutDialog.html -@@ -15,7 +15,7 @@ - - -

-- -+Flattr this! -

- -

diff -Nru openscad-2015.03-1+dfsg/debian/patches/Change-Allow-to-open-multiple-documents-to-Allow-ope.patch openscad-2015.03-2+dfsg/debian/patches/Change-Allow-to-open-multiple-documents-to-Allow-ope.patch --- openscad-2015.03-1+dfsg/debian/patches/Change-Allow-to-open-multiple-documents-to-Allow-ope.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/Change-Allow-to-open-multiple-documents-to-Allow-ope.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -From: chrysn -Date: Tue, 11 Aug 2015 11:58:26 +0200 -Subject: Change "Allow to open multiple documents" to "Allow opening" - -This is for grammatical reasons. It is being discussed in -https://bugs.debian.org/795158, and "allowing" seems to be a correct -(not necessarily ideal, but not intrusive) solution. - -Forwarded: https://github.com/openscad/openscad/pull/1411 ---- - locale/cs.po | 2 +- - locale/de.po | 2 +- - locale/es.po | 2 +- - locale/fr.po | 2 +- - locale/openscad.pot | 2 +- - locale/ru.po | 2 +- - src/Preferences.ui | 2 +- - 7 files changed, 7 insertions(+), 7 deletions(-) - -diff --git a/locale/cs.po b/locale/cs.po -index cfd41b0..a397f71 100644 ---- a/locale/cs.po -+++ b/locale/cs.po -@@ -936,7 +936,7 @@ msgid "PolySet Cache size" - msgstr "Velikost PolySet cache" - - #: objects/ui_Preferences.h:1158 --msgid "Allow to open multiple documents" -+msgid "Allow opening multiple documents" - msgstr "Povolit současné otevření více dokumentů" - - #: objects/ui_Preferences.h:1159 -diff --git a/locale/de.po b/locale/de.po -index 5e8f3e3..e25bf35 100644 ---- a/locale/de.po -+++ b/locale/de.po -@@ -956,7 +956,7 @@ msgid "PolySet Cache size" - msgstr "PolySet Cache Größe" - - #: objects/ui_Preferences.h:1158 --msgid "Allow to open multiple documents" -+msgid "Allow opening multiple documents" - msgstr "Öffnen von mehreren Dokumenten erlauben" - - #: objects/ui_Preferences.h:1159 -diff --git a/locale/es.po b/locale/es.po -index 4fd414a..07bb026 100644 ---- a/locale/es.po -+++ b/locale/es.po -@@ -993,7 +993,7 @@ msgid "PolySet Cache size" - msgstr "Tamaño de cache de PolySet" - - #: objects/ui_Preferences.h:1159 --msgid "Allow to open multiple documents" -+msgid "Allow opening multiple documents" - msgstr "Permitir a abrir varios documentos" - - #: objects/ui_Preferences.h:1160 -diff --git a/locale/fr.po b/locale/fr.po -index e7025cf..2645e7e 100644 ---- a/locale/fr.po -+++ b/locale/fr.po -@@ -956,7 +956,7 @@ msgid "PolySet Cache size" - msgstr "Taille du Cache PolySet" - - #: objects/ui_Preferences.h:1158 --msgid "Allow to open multiple documents" -+msgid "Allow opening multiple documents" - msgstr "Autoriser l'ouverture de plusieurs documents" - - #: objects/ui_Preferences.h:1159 -diff --git a/locale/openscad.pot b/locale/openscad.pot -index 4dca7e1..fdcc914 100644 ---- a/locale/openscad.pot -+++ b/locale/openscad.pot -@@ -926,7 +926,7 @@ msgid "PolySet Cache size" - msgstr "" - - #: objects/ui_Preferences.h:1158 --msgid "Allow to open multiple documents" -+msgid "Allow opening multiple documents" - msgstr "" - - #: objects/ui_Preferences.h:1159 -diff --git a/locale/ru.po b/locale/ru.po -index 6f88e9c..aa291bb 100644 ---- a/locale/ru.po -+++ b/locale/ru.po -@@ -954,7 +954,7 @@ msgid "PolySet Cache size" - msgstr "Размер кэша PolySet" - - #: objects/ui_Preferences.h:1158 --msgid "Allow to open multiple documents" -+msgid "Allow opening multiple documents" - msgstr "Разрешить открытие нескольких документов" - - #: objects/ui_Preferences.h:1159 -diff --git a/src/Preferences.ui b/src/Preferences.ui -index 02e0462..c5352bd 100644 ---- a/src/Preferences.ui -+++ b/src/Preferences.ui -@@ -1333,7 +1333,7 @@ - - - -- Allow to open multiple documents -+ Allow opening multiple documents - - - diff -Nru openscad-2015.03-1+dfsg/debian/patches/Fix-path-discovery-for-fonts.patch openscad-2015.03-2+dfsg/debian/patches/Fix-path-discovery-for-fonts.patch --- openscad-2015.03-1+dfsg/debian/patches/Fix-path-discovery-for-fonts.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/Fix-path-discovery-for-fonts.patch 2016-11-27 11:52:17.000000000 +0000 @@ -8,7 +8,7 @@ [1] https://github.com/openscad/openscad/issues/1362 -Forwarded: no +Forwarded: https://github.com/openscad/openscad/commit/90a660d718f91af5944297ab4bed598a3c736ad8no --- tests/test_cmdline_tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff -Nru openscad-2015.03-1+dfsg/debian/patches/man-page-Rephase-colorscheme-option-to-avoid-problem.patch openscad-2015.03-2+dfsg/debian/patches/man-page-Rephase-colorscheme-option-to-avoid-problem.patch --- openscad-2015.03-1+dfsg/debian/patches/man-page-Rephase-colorscheme-option-to-avoid-problem.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/man-page-Rephase-colorscheme-option-to-avoid-problem.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -From: chrysn -Date: Tue, 11 Aug 2015 09:29:40 +0200 -Subject: man page: Rephase colorscheme option to avoid problems with wrapping - -The old version threw errors when formatted: - -$ LC_ALL=en_US.UTF-8 MANROFFSEQ='' MANWIDTH=80 man --warnings -E UTF-8 -l -Tutf8 -Z ./doc/openscad.1 >/dev/null -:85: warning [p 2, 4.7i, div `an-div', 0.0i]: cannot adjust line - -This was discovered by lintian and reported as -'manpage-has-errors-from-man'. - -Forwarded: https://github.com/openscad/openscad/pull/1411 ---- - doc/openscad.1 | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/doc/openscad.1 b/doc/openscad.1 -index 4616a37..0ee66b0 100644 ---- a/doc/openscad.1 -+++ b/doc/openscad.1 -@@ -82,8 +82,10 @@ If exporting an image, specify the pixel width and height - If exporting an image, specify whether to use orthographic or perspective - projection - .TP --.B \-\-colorscheme=[Cornfield|Sunset|Metallic|Starnight|BeforeDawn|Nature|DeepOcean] -+.B \-\-colorscheme=\fIscheme - If exporting an image, use the specified color scheme for the rendering. -+\fIscheme\fP can be any of \fBCornfield\fP, \fBSunset\fP, \fBMetallic\fP, -+\fBStarnight\fP, \fBBeforeDawn\fP, \fBNature\fP or \fBDeepOcean\fP. - .TP - .B \-v, \-\-version - Show version of program. diff -Nru openscad-2015.03-1+dfsg/debian/patches/Patch-out-verbose-mode-in-openscad.pro.patch openscad-2015.03-2+dfsg/debian/patches/Patch-out-verbose-mode-in-openscad.pro.patch --- openscad-2015.03-1+dfsg/debian/patches/Patch-out-verbose-mode-in-openscad.pro.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/Patch-out-verbose-mode-in-openscad.pro.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -From: chrysn -Date: Fri, 5 Apr 2013 18:54:26 +0200 -Subject: Patch out verbose mode in openscad.pro - -This allows having a build where debug symbols are not stripped by the -build system (and thus available for the -dbg package) without enabling -the developers' debug mechanisms as well. - -Building a debug build without the flag for enabling the debug -mechanisms seems to be easier than making the build system keep the -debug symbols in a regular (`qmake CONFIG-=debug"`, as in upstream's -release scripts) build. - -Forwarded: not-needed ---- - openscad.pro | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/openscad.pro b/openscad.pro -index 7d09a75..5234dbb 100644 ---- a/openscad.pro -+++ b/openscad.pro -@@ -44,7 +44,6 @@ VERSIONDATE = 2015.04.21 - # If VERSION is not set, populate VERSION, VERSION_YEAR, VERSION_MONTH from system date - include(version.pri) - --debug: DEFINES += DEBUG - - TEMPLATE = app - diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Ensure-running_under_wine-is-not-referenced-in-init-for-Q.patch openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Ensure-running_under_wine-is-not-referenced-in-init-for-Q.patch --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Ensure-running_under_wine-is-not-referenced-in-init-for-Q.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Ensure-running_under_wine-is-not-referenced-in-init-for-Q.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,30 @@ +From: Giles Bathgate +Date: Wed, 2 Dec 2015 19:47:59 +0000 +Subject: Ensure running_under_wine is not referenced in init() for + QOpenGLWidget. + +--- + src/QGLView.cc | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/QGLView.cc b/src/QGLView.cc +index 84d152f..024da9f 100644 +--- a/src/QGLView.cc ++++ b/src/QGLView.cc +@@ -73,6 +73,8 @@ void QGLView::init() + + setMouseTracking(true); + ++ ++#if !(QT_VERSION >= 0x050400) + // see paintGL() + issue160 + wine FAQ + #ifdef _WIN32 + #include +@@ -81,6 +83,7 @@ void QGLView::init() + if ( (void *)GetProcAddress(hntdll, "wine_get_version") ) + running_under_wine = true; + #endif ++#endif + } + + void QGLView::resetView() diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Ensure-UpdateGL-is-available-as-a-slot.patch openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Ensure-UpdateGL-is-available-as-a-slot.patch --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Ensure-UpdateGL-is-available-as-a-slot.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Ensure-UpdateGL-is-available-as-a-slot.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,27 @@ +From: Giles Bathgate +Date: Sun, 25 Oct 2015 17:08:38 +0000 +Subject: Ensure UpdateGL is available as a slot. + +--- + src/QGLView.h | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/QGLView.h b/src/QGLView.h +index e51c3df..887cd5d 100644 +--- a/src/QGLView.h ++++ b/src/QGLView.h +@@ -62,11 +62,13 @@ public: + public slots: + void ZoomIn(void); + void ZoomOut(void); ++#if QT_VERSION >= 0x050400 ++ inline void updateGL() { update(); } ++#endif + + public: + QLabel *statusLabel; + #if QT_VERSION >= 0x050400 +- inline void updateGL() { update(); } + inline QImage grabFrameBuffer() { return grabFramebuffer(); } + #endif + private: diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Improved-some-USE_QOPENGLWIDGET-defines.patch openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Improved-some-USE_QOPENGLWIDGET-defines.patch --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Improved-some-USE_QOPENGLWIDGET-defines.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Improved-some-USE_QOPENGLWIDGET-defines.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,58 @@ +From: Marius Kintel +Date: Wed, 2 Dec 2015 15:57:19 -0500 +Subject: Improved some USE_QOPENGLWIDGET defines + +--- + src/QGLView.cc | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/src/QGLView.cc b/src/QGLView.cc +index 024da9f..91d8ca6 100644 +--- a/src/QGLView.cc ++++ b/src/QGLView.cc +@@ -51,7 +51,7 @@ + #endif + + QGLView::QGLView(QWidget *parent) : +-#if QT_VERSION >= 0x050400 && defined(USE_QOPENGLWIDGET) ++#ifdef USE_QOPENGLWIDGET + QOpenGLWidget(parent) + #else + QGLWidget(parent) +@@ -60,7 +60,7 @@ QGLView::QGLView(QWidget *parent) : + init(); + } + +-#ifdef _WIN32 ++#if defined(_WIN32) && !defined(USE_QOPENGLWIDGET) + static bool running_under_wine = false; + #endif + +@@ -74,16 +74,15 @@ void QGLView::init() + setMouseTracking(true); + + +-#if !(QT_VERSION >= 0x050400) ++ ++#if defined(_WIN32) && !defined(USE_QOPENGLWIDGET) + // see paintGL() + issue160 + wine FAQ +-#ifdef _WIN32 + #include + HMODULE hntdll = GetModuleHandle(L"ntdll.dll"); + if (hntdll) + if ( (void *)GetProcAddress(hntdll, "wine_get_version") ) + running_under_wine = true; + #endif +-#endif + } + + void QGLView::resetView() +@@ -172,7 +171,7 @@ void QGLView::paintGL() + statusLabel->setText(QString::fromStdString(nc.statusText())); + } + +-#ifdef _WIN32 ++#if defined(_WIN32) && !defined(USE_QOPENGLWIDGET) + if (running_under_wine) swapBuffers(); + #endif + } diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Introduce-a-USE_QOPENGLWIDGET-define-added-qopenglwidget-.patch openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Introduce-a-USE_QOPENGLWIDGET-define-added-qopenglwidget-.patch --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Introduce-a-USE_QOPENGLWIDGET-define-added-qopenglwidget-.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Introduce-a-USE_QOPENGLWIDGET-define-added-qopenglwidget-.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,97 @@ +From: Marius Kintel +Date: Wed, 2 Dec 2015 13:24:18 -0500 +Subject: Introduce a USE_QOPENGLWIDGET define, + added qopenglwidget CONFIG to qmake + +--- + openscad.pro | 6 ++++++ + src/QGLView.cc | 6 +++--- + src/QGLView.h | 8 ++++---- + 3 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/openscad.pro b/openscad.pro +index cbe99b2..dc200bc 100644 +--- a/openscad.pro ++++ b/openscad.pro +@@ -137,6 +137,12 @@ mingw* { + CONFIG += qt + QT += opengl concurrent + ++qopenglwidget { ++ !lessThan(QT_VERSION, 5.4) { ++ DEFINES += USE_QOPENGLWIDGET ++ } ++} ++ + # see http://fedoraproject.org/wiki/UnderstandingDSOLinkChange + # and https://github.com/openscad/openscad/pull/119 + # ( QT += opengl does not automatically link glu on some DSO systems. ) +diff --git a/src/QGLView.cc b/src/QGLView.cc +index fd447a8..84d152f 100644 +--- a/src/QGLView.cc ++++ b/src/QGLView.cc +@@ -51,7 +51,7 @@ + #endif + + QGLView::QGLView(QWidget *parent) : +-#if QT_VERSION >= 0x050400 ++#if QT_VERSION >= 0x050400 && defined(USE_QOPENGLWIDGET) + QOpenGLWidget(parent) + #else + QGLWidget(parent) +@@ -60,7 +60,7 @@ QGLView::QGLView(QWidget *parent) : + init(); + } + +-#if !(QT_VERSION >= 0x050400) ++#ifdef _WIN32 + static bool running_under_wine = false; + #endif + +@@ -169,7 +169,7 @@ void QGLView::paintGL() + statusLabel->setText(QString::fromStdString(nc.statusText())); + } + +-#if !(QT_VERSION >= 0x050400) ++#ifdef _WIN32 + if (running_under_wine) swapBuffers(); + #endif + } +diff --git a/src/QGLView.h b/src/QGLView.h +index 887cd5d..6fada8c 100644 +--- a/src/QGLView.h ++++ b/src/QGLView.h +@@ -3,7 +3,7 @@ + #include "system-gl.h" + #include + +-#if QT_VERSION >= 0x050400 ++#ifdef USE_QOPENGLWIDGET + #include + #else + #include +@@ -16,7 +16,7 @@ + #include "renderer.h" + + class QGLView : +-#if QT_VERSION >= 0x050400 ++#ifdef USE_QOPENGLWIDGET + public QOpenGLWidget, + #else + public QGLWidget, +@@ -62,13 +62,13 @@ public: + public slots: + void ZoomIn(void); + void ZoomOut(void); +-#if QT_VERSION >= 0x050400 ++#ifdef USE_QOPENGLWIDGET + inline void updateGL() { update(); } + #endif + + public: + QLabel *statusLabel; +-#if QT_VERSION >= 0x050400 ++#ifdef USE_QOPENGLWIDGET + inline QImage grabFrameBuffer() { return grabFramebuffer(); } + #endif + private: diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/README openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/README --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/README 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/README 2016-11-27 12:15:10.000000000 +0000 @@ -0,0 +1,3 @@ +This is a series of patches cherry-picked from upstream post-2015.03-2. + +It aims to fix http://bugs.debian.org/806670. diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Remove-un-used-constructor.patch openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Remove-un-used-constructor.patch --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Remove-un-used-constructor.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Remove-un-used-constructor.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,37 @@ +From: Giles Bathgate +Date: Fri, 23 Oct 2015 23:15:14 +0100 +Subject: Remove un-used constructor. + +--- + src/QGLView.cc | 5 ----- + src/QGLView.h | 1 - + 2 files changed, 6 deletions(-) + +diff --git a/src/QGLView.cc b/src/QGLView.cc +index 0ce53a4..fa190b3 100644 +--- a/src/QGLView.cc ++++ b/src/QGLView.cc +@@ -55,11 +55,6 @@ QGLView::QGLView(QWidget *parent) : QGLWidget(parent) + init(); + } + +-QGLView::QGLView(const QGLFormat & format, QWidget *parent) : QGLWidget(format, parent) +-{ +- init(); +-} +- + static bool running_under_wine = false; + + void QGLView::init() +diff --git a/src/QGLView.h b/src/QGLView.h +index ca5fccb..7d8093a 100644 +--- a/src/QGLView.h ++++ b/src/QGLView.h +@@ -21,7 +21,6 @@ class QGLView : public QGLWidget, public GLView + + public: + QGLView(QWidget *parent = NULL); +- QGLView(const QGLFormat & format, QWidget *parent = NULL); + #ifdef ENABLE_OPENCSG + bool hasOpenCSGSupport() { return this->opencsg_support; } + #endif diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Show-correct-QOpenGLWidget-vs.-QGLWidget-in-Library-Info.patch openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Show-correct-QOpenGLWidget-vs.-QGLWidget-in-Library-Info.patch --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Show-correct-QOpenGLWidget-vs.-QGLWidget-in-Library-Info.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Show-correct-QOpenGLWidget-vs.-QGLWidget-in-Library-Info.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,27 @@ +From: Marius Kintel +Date: Wed, 2 Dec 2015 17:56:18 -0500 +Subject: Show correct QOpenGLWidget vs. QGLWidget in Library Info + +--- + src/QGLView.cc | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/src/QGLView.cc b/src/QGLView.cc +index 91d8ca6..86b1790 100644 +--- a/src/QGLView.cc ++++ b/src/QGLView.cc +@@ -113,7 +113,13 @@ std::string QGLView::getRendererInfo() const + std::string glewinfo = glew_dump(); + std::string glextlist = glew_extensions_dump(); + // Don't translate as translated text in the Library Info dialog is not wanted +- return glewinfo + std::string("\nUsing QGLWidget\n\n") + glextlist; ++ return glewinfo + ++#ifdef USE_QOPENGLWIDGET ++ std::string("\nUsing QOpenGLWidget\n\n") ++#else ++ std::string("\nUsing QGLWidget\n\n") ++#endif ++ + glextlist; + } + + #ifdef ENABLE_OPENCSG diff -Nru openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Use-QOpenGLWidget-when-Qt-Version-5.4.patch openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Use-QOpenGLWidget-when-Qt-Version-5.4.patch --- openscad-2015.03-1+dfsg/debian/patches/QOpenGLWidget/Use-QOpenGLWidget-when-Qt-Version-5.4.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/QOpenGLWidget/Use-QOpenGLWidget-when-Qt-Version-5.4.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,112 @@ +From: Giles Bathgate +Date: Fri, 23 Oct 2015 23:59:04 +0100 +Subject: Use QOpenGLWidget when Qt Version >= 5.4 + +--- + src/QGLView.cc | 11 ++++++++++- + src/QGLView.h | 19 +++++++++++++++++-- + src/openscad.cc | 4 ++++ + 3 files changed, 31 insertions(+), 3 deletions(-) + +diff --git a/src/QGLView.cc b/src/QGLView.cc +index fa190b3..fd447a8 100644 +--- a/src/QGLView.cc ++++ b/src/QGLView.cc +@@ -50,12 +50,19 @@ + # include + #endif + +-QGLView::QGLView(QWidget *parent) : QGLWidget(parent) ++QGLView::QGLView(QWidget *parent) : ++#if QT_VERSION >= 0x050400 ++ QOpenGLWidget(parent) ++#else ++ QGLWidget(parent) ++#endif + { + init(); + } + ++#if !(QT_VERSION >= 0x050400) + static bool running_under_wine = false; ++#endif + + void QGLView::init() + { +@@ -162,7 +169,9 @@ void QGLView::paintGL() + statusLabel->setText(QString::fromStdString(nc.statusText())); + } + ++#if !(QT_VERSION >= 0x050400) + if (running_under_wine) swapBuffers(); ++#endif + } + + void QGLView::mousePressEvent(QMouseEvent *event) +diff --git a/src/QGLView.h b/src/QGLView.h +index 7d8093a..e51c3df 100644 +--- a/src/QGLView.h ++++ b/src/QGLView.h +@@ -1,7 +1,13 @@ + #pragma once + + #include "system-gl.h" ++#include ++ ++#if QT_VERSION >= 0x050400 ++#include ++#else + #include ++#endif + #include + + #include +@@ -9,7 +15,13 @@ + #include "GLView.h" + #include "renderer.h" + +-class QGLView : public QGLWidget, public GLView ++class QGLView : ++#if QT_VERSION >= 0x050400 ++ public QOpenGLWidget, ++#else ++ public QGLWidget, ++#endif ++ public GLView + { + Q_OBJECT + Q_PROPERTY(bool showFaces READ showFaces WRITE setShowFaces); +@@ -53,7 +65,10 @@ public slots: + + public: + QLabel *statusLabel; +- ++#if QT_VERSION >= 0x050400 ++ inline void updateGL() { update(); } ++ inline QImage grabFrameBuffer() { return grabFramebuffer(); } ++#endif + private: + void init(); + +diff --git a/src/openscad.cc b/src/openscad.cc +index 73d6759..60a3a1f 100644 +--- a/src/openscad.cc ++++ b/src/openscad.cc +@@ -690,6 +690,9 @@ int gui(vector &inputFiles, const fs::path &original_path, int argc, cha + updater->init(); + #endif + ++#if !(QT_VERSION >= 0x050400) ++ // This workaround appears to only be needed when QGLWidget is used QOpenGLWidget ++ // available in Qt 5.4 is much better. + QGLFormat fmt; + #if 0 /*** disabled by clifford wolf: adds rendering artefacts with OpenCSG ***/ + // turn on anti-aliasing +@@ -703,6 +706,7 @@ int gui(vector &inputFiles, const fs::path &original_path, int argc, cha + // (see https://bugreports.qt-project.org/browse/QTBUG-39370 + fmt.setSwapInterval(0); + QGLFormat::setDefaultFormat(fmt); ++#endif + + set_render_color_scheme(arg_colorscheme, false); + diff -Nru openscad-2015.03-1+dfsg/debian/patches/remove-OPENSCAD_TESTING/don-t-build-openscad_nogui-any-more.patch openscad-2015.03-2+dfsg/debian/patches/remove-OPENSCAD_TESTING/don-t-build-openscad_nogui-any-more.patch --- openscad-2015.03-1+dfsg/debian/patches/remove-OPENSCAD_TESTING/don-t-build-openscad_nogui-any-more.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/remove-OPENSCAD_TESTING/don-t-build-openscad_nogui-any-more.patch 2016-11-27 11:52:17.000000000 +0000 @@ -3,11 +3,11 @@ Subject: don't build openscad_nogui any more --- - tests/CMakeLists.txt | 41 +++++++++++++---------------------------- - 1 file changed, 13 insertions(+), 28 deletions(-) + tests/CMakeLists.txt | 13 ++----------- + 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt -index 2ae12c1..0e0b46c 100644 +index fb8ac63..fe8a817 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -600,8 +600,6 @@ if (DEFINED OPENSCAD_DAY) @@ -19,7 +19,7 @@ # Search for MCAD in correct place #set(CTEST_ENVIRONMENT "${CTEST_ENVIRONMENT};OPENSCADPATH=${CMAKE_CURRENT_SOURCE_DIR}/../libraries") -@@ -793,44 +791,31 @@ add_executable(cgalcachetest cgalcachetest.cc) +@@ -793,13 +791,6 @@ add_executable(cgalcachetest cgalcachetest.cc) set_target_properties(cgalcachetest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(cgalcachetest tests-cgal ${GLEW_LIBRARY} ${OPENCSG_LIBRARY} ${APP_SERVICES_LIBRARY}) @@ -33,47 +33,19 @@ # also run translation compilation to verify the files are without syntax errors add_custom_target(locale_files ALL COMMAND ${CMAKE_SOURCE_DIR}/../scripts/translation-make.sh) - # - # GUI binary tests - # --#if(APPLE) --# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../OpenSCAD.app/Contents/MacOS/OpenSCAD") --#elseif (MINGW_CROSS_ENV_DIR) --# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../mingw32/release/openscad.exe") --#elseif(WIN32) --# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../Release/openscad.exe") --#else() +@@ -817,13 +808,13 @@ add_custom_target(locale_files ALL COMMAND ${CMAKE_SOURCE_DIR}/../scripts/transl + #elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR/../openscad}") + # set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../bin/openscad") + #elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR/../bin/openscad}") -# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../openscad") --#endif() -+if(APPLE) -+ set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../OpenSCAD.app/Contents/MacOS/OpenSCAD") -+elseif (MINGW_CROSS_ENV_DIR) -+ set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../mingw32/release/openscad.exe") -+elseif(WIN32) -+ set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../Release/openscad.exe") -+else() + set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../openscad") -+endif() - - #if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/openscad") - # set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad") #endif() --#if(EXISTS "${OPENSCAD_BINPATH}") --# message(STATUS "Found OpenSCAD binary: ${OPENSCAD_BINPATH}") --#else() --# message(STATUS "Couldn't find the OpenSCAD binary: ${OPENSCAD_BINPATH}") --# message(FATAL_ERROR "Please build the OpenSCAD binary and place it here: ${OPENSCAD_BINPATH}" ) --#endif() -- --if(WIN32) -- set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad_nogui.exe") -+if(EXISTS "${OPENSCAD_BINPATH}") -+ message(STATUS "Found OpenSCAD binary: ${OPENSCAD_BINPATH}") + if(WIN32) + set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad_nogui.exe") else() - set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad_nogui") -+ message(STATUS "Couldn't find the OpenSCAD binary: ${OPENSCAD_BINPATH}") -+ message(FATAL_ERROR "Please build the OpenSCAD binary and place it here: ${OPENSCAD_BINPATH}" ) ++# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad_nogui") endif() # diff -Nru openscad-2015.03-1+dfsg/debian/patches/remove-OPENSCAD_TESTING/drop-OPENSCAD_TESTING-definition.patch openscad-2015.03-2+dfsg/debian/patches/remove-OPENSCAD_TESTING/drop-OPENSCAD_TESTING-definition.patch --- openscad-2015.03-1+dfsg/debian/patches/remove-OPENSCAD_TESTING/drop-OPENSCAD_TESTING-definition.patch 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/remove-OPENSCAD_TESTING/drop-OPENSCAD_TESTING-definition.patch 2016-11-27 11:52:17.000000000 +0000 @@ -32,7 +32,7 @@ diff --git a/src/linearextrude.cc b/src/linearextrude.cc -index cddbc31..9d70da1 100644 +index d202f07..25a6655 100644 --- a/src/linearextrude.cc +++ b/src/linearextrude.cc @@ -142,10 +142,7 @@ std::string LinearExtrudeNode::toString() const @@ -110,10 +110,10 @@ return stream.str(); diff --git a/src/value.cc b/src/value.cc -index 897eed3..499d1e0 100644 +index a967390..4cdf58a 100644 --- a/src/value.cc +++ b/src/value.cc -@@ -201,33 +201,12 @@ public: +@@ -229,33 +229,12 @@ public: if (op1 == 0) { return "0"; // Don't return -0 (exactly -0 and 0 equal 0) } diff -Nru openscad-2015.03-1+dfsg/debian/patches/series openscad-2015.03-2+dfsg/debian/patches/series --- openscad-2015.03-1+dfsg/debian/patches/series 2015-08-11 14:25:40.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/series 2016-11-27 11:52:17.000000000 +0000 @@ -1,8 +1,5 @@ -Patch-out-verbose-mode-in-openscad.pro.patch -Allow-building-even-with-resource-absent-from-dfsg-p.patch patch-out-test-for-mcad.patch don-t-override-OPENSCADPATH.patch -Add-hashbang-to-test_cmdline_tool.py.patch Report-Debian-versions-in-test_pretty_print.patch test_pretty_print-remove-a-pathname-normalization-st.patch Add-missing-X11-libraries-when-using-GLX.patch @@ -14,7 +11,12 @@ remove-OPENSCAD_TESTING/pack-OPENSCAD_NOGUI-in-qmake-nogui-config.patch remove-OPENSCAD_TESTING/fix-font-directory-discovery-in-export_import_pngtes.patch test_pretty_print-drop-file-name-munging.patch -Add-keywords-to-the-desktop-file.patch -man-page-Rephase-colorscheme-option-to-avoid-problem.patch -Change-Allow-to-open-multiple-documents-to-Allow-ope.patch Fix-path-discovery-for-fonts.patch +QOpenGLWidget/Remove-un-used-constructor.patch +QOpenGLWidget/Use-QOpenGLWidget-when-Qt-Version-5.4.patch +QOpenGLWidget/Ensure-UpdateGL-is-available-as-a-slot.patch +QOpenGLWidget/Introduce-a-USE_QOPENGLWIDGET-define-added-qopenglwidget-.patch +QOpenGLWidget/Ensure-running_under_wine-is-not-referenced-in-init-for-Q.patch +QOpenGLWidget/Improved-some-USE_QOPENGLWIDGET-defines.patch +QOpenGLWidget/Show-correct-QOpenGLWidget-vs.-QGLWidget-in-Library-Info.patch +UIC-gettext-interoperability.patch diff -Nru openscad-2015.03-1+dfsg/debian/patches/UIC-gettext-interoperability.patch openscad-2015.03-2+dfsg/debian/patches/UIC-gettext-interoperability.patch --- openscad-2015.03-1+dfsg/debian/patches/UIC-gettext-interoperability.patch 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/patches/UIC-gettext-interoperability.patch 2016-11-27 11:52:17.000000000 +0000 @@ -0,0 +1,26 @@ +From: chrysn +Date: Sun, 27 Nov 2016 12:44:23 +0100 +Subject: UIC gettext interoperability + +Recent UIC versions seem to have changed their ways of invoking custom +helper functions. This is a quick fix, better workarounds are in +discussion with upstream. + +Forwarded: https://github.com/openscad/openscad/issues/1872 +--- + openscad.pro | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/openscad.pro b/openscad.pro +index dc200bc..3b781a6 100644 +--- a/openscad.pro ++++ b/openscad.pro +@@ -251,7 +251,7 @@ RESOURCES = openscad.qrc + # Qt5 removed access to the QMAKE_UIC variable, the following + # way works for both Qt4 and Qt5 + load(uic) +-uic.commands += -tr _ ++uic.commands += -tr '"([](const char *a, void __attribute__((unused)) *b) {return QString(_(a));})"' + + FORMS += src/MainWindow.ui \ + src/Preferences.ui \ diff -Nru openscad-2015.03-1+dfsg/debian/rules openscad-2015.03-2+dfsg/debian/rules --- openscad-2015.03-1+dfsg/debian/rules 2015-11-09 11:32:35.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/rules 2016-11-27 16:37:17.000000000 +0000 @@ -8,10 +8,10 @@ export QT_SELECT = qt5 %: - dh $@ --parallel + dh $@ override_dh_auto_configure: - dh_auto_configure -- VERSION=$(UPSTREAMVERS) + dh_auto_configure -- VERSION=$(UPSTREAMVERS) CONFIG-=debug CONFIG+=qopenglwidget override_dh_auto_build: dh_auto_build @@ -73,3 +73,8 @@ override_dh_strip: dh_strip --dbg-package openscad-dbg + +override_dh_auto_clean: + dh_auto_clean + + dh_auto_clean -Dtests -Scmake diff -Nru openscad-2015.03-1+dfsg/debian/source/lintian-overrides openscad-2015.03-2+dfsg/debian/source/lintian-overrides --- openscad-2015.03-1+dfsg/debian/source/lintian-overrides 2015-09-14 16:10:14.000000000 +0000 +++ openscad-2015.03-2+dfsg/debian/source/lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -# due to https://bugs.debian.org/798900 -openscad source: source-is-missing scripts/examples-html/assets/js/language/generic.js -openscad source: source-contains-prebuilt-javascript-object scripts/examples-html/assets/js/language/generic.js line length is 346 characters (>256) diff -Nru openscad-2015.03-1+dfsg/doc/openscad.1 openscad-2015.03-2+dfsg/doc/openscad.1 --- openscad-2015.03-1+dfsg/doc/openscad.1 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/doc/openscad.1 2015-11-17 09:43:41.000000000 +0000 @@ -82,8 +82,10 @@ If exporting an image, specify whether to use orthographic or perspective projection .TP -.B \-\-colorscheme=[Cornfield|Sunset|Metallic|Starnight|BeforeDawn|Nature|DeepOcean] +.B \-\-colorscheme=\fIscheme If exporting an image, use the specified color scheme for the rendering. +\fIscheme\fP can be any of \fBCornfield\fP, \fBSunset\fP, \fBMetallic\fP, +\fBStarnight\fP, \fBBeforeDawn\fP, \fBNature\fP or \fBDeepOcean\fP. .TP .B \-v, \-\-version Show version of program. diff -Nru openscad-2015.03-1+dfsg/doc/Python-LICENSE.txt openscad-2015.03-2+dfsg/doc/Python-LICENSE.txt --- openscad-2015.03-1+dfsg/doc/Python-LICENSE.txt 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/doc/Python-LICENSE.txt 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1,259 @@ +Part of OpenSCAD is copied from Python (linalg.cc/hash_floating_point()), +so the python license is included below. + +---- + +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations (now Zope +Corporation, see http://www.zope.com). In 2001, the Python Software +Foundation (PSF, see http://www.python.org/psf/) was formed, a +non-profit organization created specifically to own Python-related +Intellectual Property. Zope Corporation is a sponsoring member of +the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved" +are retained in Python alone or in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff -Nru openscad-2015.03-1+dfsg/icons/openscad.desktop openscad-2015.03-2+dfsg/icons/openscad.desktop --- openscad-2015.03-1+dfsg/icons/openscad.desktop 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/icons/openscad.desktop 2015-11-17 09:43:41.000000000 +0000 @@ -6,3 +6,4 @@ Exec=openscad %f MimeType=application/x-openscad; Categories=Graphics;3DGraphics;Engineering; +Keywords=3d;solid;geometry;csg;model;stl; diff -Nru openscad-2015.03-1+dfsg/locale/cs.po openscad-2015.03-2+dfsg/locale/cs.po --- openscad-2015.03-1+dfsg/locale/cs.po 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/locale/cs.po 2015-11-17 09:43:41.000000000 +0000 @@ -936,7 +936,7 @@ msgstr "Velikost PolySet cache" #: objects/ui_Preferences.h:1158 -msgid "Allow to open multiple documents" +msgid "Allow opening multiple documents" msgstr "Povolit současné otevření více dokumentů" #: objects/ui_Preferences.h:1159 @@ -1086,7 +1086,7 @@ #: src/mainwin.cc:990 msgid " For details see console window." -msgstr "Pro podrobnosti nahlédněte do konzole." +msgstr " Pro podrobnosti nahlédněte do konzole." #: src/mainwin.cc:1355 msgid "Save File" diff -Nru openscad-2015.03-1+dfsg/locale/de.po openscad-2015.03-2+dfsg/locale/de.po --- openscad-2015.03-1+dfsg/locale/de.po 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/locale/de.po 2015-11-17 09:43:41.000000000 +0000 @@ -956,7 +956,7 @@ msgstr "PolySet Cache Größe" #: objects/ui_Preferences.h:1158 -msgid "Allow to open multiple documents" +msgid "Allow opening multiple documents" msgstr "Öffnen von mehreren Dokumenten erlauben" #: objects/ui_Preferences.h:1159 diff -Nru openscad-2015.03-1+dfsg/locale/es.po openscad-2015.03-2+dfsg/locale/es.po --- openscad-2015.03-1+dfsg/locale/es.po 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/locale/es.po 2015-11-17 09:43:41.000000000 +0000 @@ -993,7 +993,7 @@ msgstr "Tamaño de cache de PolySet" #: objects/ui_Preferences.h:1159 -msgid "Allow to open multiple documents" +msgid "Allow opening multiple documents" msgstr "Permitir a abrir varios documentos" #: objects/ui_Preferences.h:1160 diff -Nru openscad-2015.03-1+dfsg/locale/fr.po openscad-2015.03-2+dfsg/locale/fr.po --- openscad-2015.03-1+dfsg/locale/fr.po 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/locale/fr.po 2015-11-17 09:43:41.000000000 +0000 @@ -956,7 +956,7 @@ msgstr "Taille du Cache PolySet" #: objects/ui_Preferences.h:1158 -msgid "Allow to open multiple documents" +msgid "Allow opening multiple documents" msgstr "Autoriser l'ouverture de plusieurs documents" #: objects/ui_Preferences.h:1159 diff -Nru openscad-2015.03-1+dfsg/locale/openscad.pot openscad-2015.03-2+dfsg/locale/openscad.pot --- openscad-2015.03-1+dfsg/locale/openscad.pot 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/locale/openscad.pot 2015-11-17 09:43:41.000000000 +0000 @@ -926,7 +926,7 @@ msgstr "" #: objects/ui_Preferences.h:1158 -msgid "Allow to open multiple documents" +msgid "Allow opening multiple documents" msgstr "" #: objects/ui_Preferences.h:1159 diff -Nru openscad-2015.03-1+dfsg/locale/ru.po openscad-2015.03-2+dfsg/locale/ru.po --- openscad-2015.03-1+dfsg/locale/ru.po 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/locale/ru.po 2015-11-17 09:43:41.000000000 +0000 @@ -954,7 +954,7 @@ msgstr "Размер кэша PolySet" #: objects/ui_Preferences.h:1158 -msgid "Allow to open multiple documents" +msgid "Allow opening multiple documents" msgstr "Разрешить открытие нескольких документов" #: objects/ui_Preferences.h:1159 diff -Nru openscad-2015.03-1+dfsg/openscad.pro openscad-2015.03-2+dfsg/openscad.pro --- openscad-2015.03-1+dfsg/openscad.pro 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/openscad.pro 2015-11-17 09:43:41.000000000 +0000 @@ -39,8 +39,8 @@ } } -VERSION = 2015.03-1 -VERSIONDATE = 2015.04.21 +VERSION = 2015.03-2 +VERSIONDATE = 2015.11.16 # If VERSION is not set, populate VERSION, VERSION_YEAR, VERSION_MONTH from system date include(version.pri) diff -Nru openscad-2015.03-1+dfsg/openscad.qrc openscad-2015.03-2+dfsg/openscad.qrc --- openscad-2015.03-1+dfsg/openscad.qrc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/openscad.qrc 2015-11-17 09:43:41.000000000 +0000 @@ -29,7 +29,6 @@ icons/prefs3DView.png icons/prefsEditor.png icons/prefsUpdate.png - icons/flattr.png src/AboutDialog.html images/export.png images/axes.png diff -Nru openscad-2015.03-1+dfsg/qscintilla2.prf openscad-2015.03-2+dfsg/qscintilla2.prf --- openscad-2015.03-1+dfsg/qscintilla2.prf 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/qscintilla2.prf 2015-11-17 09:43:41.000000000 +0000 @@ -10,6 +10,16 @@ LIBS += -L$$[QT_INSTALL_LIBS] +QT5LIB=qt5scintilla2 + +unix:linux* { + FEDORA32LIBS=/usr/lib/libqscintilla2-qt5.so + FEDORA64LIBS=/usr/lib64/libqscintilla2-qt5.so + exists($$FEDORA32LIBS) | exists($$FEDORA64LIBS) { + QT5LIB=qscintilla2-qt5 + } +} + CONFIG(debug, debug|release) { mac: { #LIBS += -lqscintilla2_debug @@ -19,7 +29,8 @@ LIBS += -lqscintilla2d } else { greaterThan(QT_MAJOR_VERSION, 4) { - LIBS += -lqt5scintilla2 + message("Using $$QT5LIB as library name") + LIBS += -l$$QT5LIB } else { LIBS += -lqscintilla2 } @@ -33,7 +44,8 @@ LIBS += -lqscintilla2 } else { greaterThan(QT_MAJOR_VERSION, 4) { - LIBS += -lqt5scintilla2 + message("Using $$QT5LIB as library name") + LIBS += -l$$QT5LIB } else { LIBS += -lqscintilla2 } diff -Nru openscad-2015.03-1+dfsg/releases/2015.03.md openscad-2015.03-2+dfsg/releases/2015.03.md --- openscad-2015.03-1+dfsg/releases/2015.03.md 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/releases/2015.03.md 2015-11-17 09:43:41.000000000 +0000 @@ -1,3 +1,39 @@ +## 2015.03-2 + +**Bugfixes** +* \#1483 - Fix Z-fighting in Ortho view +* \#1479 - No check for infinite $fn +* \#1472 - "nan" in list comprehension causes crash +* \#452 - rands() fails when the seed is a floating point number +* \#1407 - Recursive module crash +* \#1425 - Animate Filename Generation - Duplicate/Missing Filenames +* \#1420 - expression-evaluation-tests fails on arm64 +* \#1410 - Crash when a polygon contains NaN +* \#1378 - Linear extrude plus infinite twist causes crash instead of just an error +* \#1358 - Add more detailed installer information including version number +* \#1356 - Crash when multiplying matrices with undefined elements +* \#1350 - Saving file when HD is full ends up in data loss +* \#1342 - Syntax Highlighting Does Not Work on Linux Mint 17.1 +* \#1337 - Simple detection of script and direction based on given text +* \#1325 - Crash when polygons with > 3 indices turn out to be degenerate +* \#1329 - version() returned ```[0,0,0]``` + +## 2015.03-1 + +**Bugfixes** +* \#1203 - Linux: Missing icons on Xfce +* \#1258 - Occasional crash when exporting STL +* \#1260 - Minimal window width too large +* \#1264 - Replace All sometimes caused a hang +* \#1274 - Fixed some preview bugs on Intel GPUs (OpenCSG 1.4.0) +* \#1276 - Module recursion sometimes caused a crash +* \#1277 - Automatic reload sometimes messed up camera position +* \#1284 - Animation flicker eliminated +* \#1294 - Support reproducible builds +* \#1317 - Normals vectors in STL were sometimes 0 0 0 + +## 2015.03 + **Language Features:** * Added text() module for 2D text * Added offset() module for 2D offsets diff -Nru openscad-2015.03-1+dfsg/scripts/builder.sh openscad-2015.03-2+dfsg/scripts/builder.sh --- openscad-2015.03-1+dfsg/scripts/builder.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/builder.sh 2015-11-17 09:43:41.000000000 +0000 @@ -120,6 +120,17 @@ fi } +check_zip() + if [ ! "`command -v zip`" ]; then + echo the zip command was not found. please install zip + echo on debian, sudo apt-get install zip + exit 1 + else + echo zip found. + fi +} + + get_openscad_source_code() { if [ -d openscad ]; then @@ -251,7 +262,7 @@ SUMMARY1="Windows x86-32 Snapshot Installer" SUMMARY2="Windows x86-32 Snapshot Zipfile" SUMMARY3="Windows x86-32 Snapshot Tests" - BASEDIR=./mingw32/ + BASEDIR=./mingw32.static/ WIN32_PACKAGEFILE1=OpenSCAD-$DATECODE-x86-32-Installer.exe WIN32_PACKAGEFILE2=OpenSCAD-$DATECODE-x86-32.zip WIN32_PACKAGEFILE3=OpenSCAD-Tests-$DATECODE-x86-32.zip @@ -277,7 +288,7 @@ SUMMARY1="Windows x86-64 Snapshot Zipfile" SUMMARY2="Windows x86-64 Snapshot Installer" SUMMARY3="Windows x86-64 Snapshot Tests" - BASEDIR=./mingw64/ + BASEDIR=./mingw64.static/ WIN64_PACKAGEFILE1=OpenSCAD-$DATECODE-x86-64-Installer.exe WIN64_PACKAGEFILE2=OpenSCAD-$DATECODE-x86-64.zip WIN64_PACKAGEFILE3=OpenSCAD-Tests-$DATECODE-x86-64.zip @@ -409,6 +420,7 @@ fi check_starting_path check_nsis + check_zip read_username_from_user read_password_from_user get_openscad_source_code diff -Nru openscad-2015.03-1+dfsg/scripts/github-release.sh openscad-2015.03-2+dfsg/scripts/github-release.sh --- openscad-2015.03-1+dfsg/scripts/github-release.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/github-release.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -#!/bin/bash - -# Usage (in github root folder): ./scripts/github-release.sh -# -# Requires release.token and releases/.md - -curl https://api.github.com/repos/openscad/openscad/releases -H "Authorization: token $(> sys.stderr, "Usage: " + sys.argv[0] + " " sys.exit(1) @@ -29,21 +31,26 @@ def lookup_library(file): found = None if not re.match("/", file): - if re.search("@executable_path", file): - abs = re.sub("^@executable_path", executable_path, file) - if os.path.exists(abs): found = abs - if DEBUG: print "Lib in @executable_path found: " + str(found) - elif re.search("\.app/", file): - found = file - if DEBUG: print "App found: " + str(found) - elif re.search("\.framework/", file): - found = os.path.join("/Library/Frameworks", file) - if DEBUG: print "Framework found: " + str(found) - else: - for path in os.getenv("DYLD_LIBRARY_PATH").split(':'): - abs = os.path.join(path, file) + if re.search("@rpath", file): + file = re.sub("^@rpath", lc_rpath, file) + if os.path.exists(file): found = file + if DEBUG: print "Lib in @rpath found: " + str(file) + if (not found): + if re.search("@executable_path", file): + abs = re.sub("^@executable_path", executable_path, file) if os.path.exists(abs): found = abs - if DEBUG: print "Library found: " + str(found) + if DEBUG: print "Lib in @executable_path found: " + str(found) + elif re.search("\.app/", file): + found = file + if DEBUG: print "App found: " + str(found) + elif re.search("\.framework/", file): + found = os.path.join("/Library/Frameworks", file) + if DEBUG: print "Framework found: " + str(found) + else: + for path in os.getenv("DYLD_LIBRARY_PATH").split(':'): + abs = os.path.join(path, file) + if os.path.exists(abs): found = abs + if DEBUG: print "Library found: " + str(found) else: found = file return found @@ -62,12 +69,17 @@ return None deps = output.split('\n') for dep in deps: - #print dep - # Fail if anything is linked with libc++, as that's not backwards compatible - # with Mac OS X 10.6 - if re.search("libc\+\+", dep): - print "Error: clang's libc++ is used by " + file - return None + # print dep + # Fail if libstc++ and libc++ was mixed + global cxxlib + match = re.search("lib(std)?c\+\+", dep) + if match: + if not cxxlib: + cxxlib = match.group(0) + else: + if cxxlib != match.group(0): + print "Error: Mixing libc++ and libstdc++" + return None dep = re.sub(".*:$", "", dep) # Take away header line dep = re.sub("^\t", "", dep) # Remove initial tabs dep = re.sub(" \(.*\)$", "", dep) # Remove trailing parentheses @@ -110,6 +122,18 @@ executable = sys.argv[1] if DEBUG: print "Processing " + executable executable_path = os.path.dirname(executable) + + # Find the Runpath search path (LC_RPATH) + p = subprocess.Popen(["otool", "-l", executable], stdout=subprocess.PIPE) + output = p.communicate()[0] + if p.returncode != 0: + print 'Error otool -l failed on main executable' + sys.exit(1) + # Check deployment target + m = re.search("LC_RPATH\n(.*)\n\s+path ([^ ]+)", output, re.MULTILINE) + lc_rpath = m.group(2) + if DEBUG: print 'Runpath search path: ' + lc_rpath + # processed is a dict {libname : [parents]} - each parent is dependant on libname processed = {} pending = [executable] @@ -118,17 +142,18 @@ dep = pending.pop() if DEBUG: print "Evaluating " + dep deps = find_dependencies(dep) +# if DEBUG: print "Deps: " + ' '.join(deps) assert(deps) for d in deps: absfile = lookup_library(d) - if not re.match(executable_path, absfile): - print "Error: External dependency " + d - sys.exit(1) if absfile == None: print "Not found: " + d print " ..required by " + str(processed[dep]) error = True continue + if not re.match(executable_path, absfile): + print "Error: External dependency " + d + sys.exit(1) if absfile in processed: processed[absfile].append(dep) else: diff -Nru openscad-2015.03-1+dfsg/scripts/mingw-x-build-dependencies.sh openscad-2015.03-2+dfsg/scripts/mingw-x-build-dependencies.sh --- openscad-2015.03-1+dfsg/scripts/mingw-x-build-dependencies.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/mingw-x-build-dependencies.sh 2015-11-17 09:43:41.000000000 +0000 @@ -20,8 +20,21 @@ # # Also see http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X # -# Also note the 64 bit is built on the branch of mxe by Tony Theodore -# which hasnt been merged to official mxe as of writing +# Notes: +# +# Originally this was based on Tony Theodore's branch of MXE, which is now +# integrated into official MXE. +# +# Targets: +# +# MXE allows 4 separate targets with the MXE_TARGETS environment variable. +# As of 2015 shared are not guaranteed to work. +# +# 64 bit static linked libraries MXE_TARGETS=x86_64-w64-mingw32.static +# 32 bit static linked libraries MXE_TARGETS=i686-w64-mingw32.static +# 64 bit shared libraries MXE_TARGETS=x86_64-w64-mingw32.shared +# 32 bit shared libraries MXE_TARGETS=i686-w64-mingw32.shared +# OPENSCADDIR=$PWD if [ ! -f $OPENSCADDIR/openscad.pro ]; then diff -Nru openscad-2015.03-1+dfsg/scripts/publish-macosx.sh openscad-2015.03-2+dfsg/scripts/publish-macosx.sh --- openscad-2015.03-1+dfsg/scripts/publish-macosx.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/publish-macosx.sh 2015-11-17 09:43:41.000000000 +0000 @@ -3,8 +3,8 @@ # Usage: # ./scripts/publish-macosx.sh [buildonly] # -VERSION=2015.03-1 -VERSIONDATE=2015.04.21 +VERSION=2015.03-2 +VERSIONDATE=2015.11.16 export NUMCPU=$(sysctl -n hw.ncpu) @@ -58,7 +58,7 @@ VERSION=$VERSIONDATE SNAPSHOT=snapshot fi -SHORTVERSION=${VERSION##-} +SHORTVERSION=${VERSION%%-*} # Turn off ccache, just for safety PATH=${PATH//\/opt\/local\/libexec\/ccache:} diff -Nru openscad-2015.03-1+dfsg/scripts/publish-mingw-x.sh openscad-2015.03-2+dfsg/scripts/publish-mingw-x.sh --- openscad-2015.03-1+dfsg/scripts/publish-mingw-x.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/publish-mingw-x.sh 2015-11-17 09:43:41.000000000 +0000 @@ -4,7 +4,7 @@ # if test -z "$VERSION"; then - VERSION=2015.03-1 + VERSION=2015.03-2 COMMIT=-c fi diff -Nru openscad-2015.03-1+dfsg/scripts/release-common.sh openscad-2015.03-2+dfsg/scripts/release-common.sh --- openscad-2015.03-1+dfsg/scripts/release-common.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/release-common.sh 2015-11-17 09:43:41.000000000 +0000 @@ -110,10 +110,10 @@ done if test -z "$VERSIONDATE"; then - VERSIONDATE=2015.04.21 + VERSIONDATE=2015.11.16 fi if test -z "$VERSION"; then - VERSION=2015.03-1 + VERSION=2015.03-2 fi export VERSIONDATE @@ -443,8 +443,8 @@ cd $DEPLOYDIR/openscad-$VERSION NSISDEBUG=-V2 # NSISDEBUG= # leave blank for full log - echo $MAKENSIS $NSISDEBUG installer.nsi - $MAKENSIS $NSISDEBUG installer.nsi + echo $MAKENSIS $NSISDEBUG "-DVERSION=$VERSION" installer.nsi + $MAKENSIS $NSISDEBUG "-DVERSION=$VERSION" installer.nsi cp $DEPLOYDIR/openscad-$VERSION/openscad_setup.exe $INSTFILE cd $OPENSCADDIR @@ -528,7 +528,7 @@ # while copying. rm -f ./ostests.tar for subdir in tests testdata libraries examples doc; do - tar prvf ./ostests.tar --exclude=.git* --exclude=*/mingw64/* --exclude=*/mingw32/* --exclude=*.cc.obj --exclude=*.a $subdir + tar prvf ./ostests.tar --exclude=.git* --exclude=*/mingw* --exclude=*.cc.obj --exclude=*.a $subdir done cd $DEPLOYDIR tar prvf $OPENSCADDIR/ostests.tar --exclude=.git* --exclude=*/mingw* --exclude=*.cc.obj --exclude=*.a $TESTBINDIR diff -Nru openscad-2015.03-1+dfsg/scripts/setenv-mingw-xbuild.sh openscad-2015.03-2+dfsg/scripts/setenv-mingw-xbuild.sh --- openscad-2015.03-1+dfsg/scripts/setenv-mingw-xbuild.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/setenv-mingw-xbuild.sh 2015-11-17 09:43:41.000000000 +0000 @@ -22,8 +22,8 @@ BASEDIR=$HOME/openscad_deps fi -DEPLOYDIR64=$OPENSCADDIR/mingw64 -DEPLOYDIR32=$OPENSCADDIR/mingw32 +DEPLOYDIR64=$OPENSCADDIR/mingw64.static +DEPLOYDIR32=$OPENSCADDIR/mingw32.static if [ ! $DEPLOYDIR ]; then if [ "`echo $* | grep 64 `" ]; then @@ -39,6 +39,11 @@ else MXEDIR=$BASEDIR/mxe fi + if [ ! -e $MXEDIR ]; then + if [ -e /opt/mxe ]; then + MXEDIR=/opt/mxe + fi + fi fi if [ ! $MXEQTSUBDIR ]; then diff -Nru openscad-2015.03-1+dfsg/scripts/uni-get-dependencies.sh openscad-2015.03-2+dfsg/scripts/uni-get-dependencies.sh --- openscad-2015.03-1+dfsg/scripts/uni-get-dependencies.sh 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/scripts/uni-get-dependencies.sh 2015-11-17 09:43:41.000000000 +0000 @@ -80,7 +80,7 @@ elif [ "`grep -i raspbian /etc/issue`" ]; then get_debian_deps elif [ "`grep -i mint /etc/issue`" ]; then - get_debian_deps + get_debian_7_deps elif [ "`grep -i suse /etc/issue`" ]; then get_opensuse_deps elif [ "`grep -i fedora /etc/issue`" ]; then diff -Nru openscad-2015.03-1+dfsg/src/AboutDialog.h openscad-2015.03-2+dfsg/src/AboutDialog.h --- openscad-2015.03-1+dfsg/src/AboutDialog.h 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/AboutDialog.h 2015-11-17 09:43:41.000000000 +0000 @@ -11,8 +11,6 @@ AboutDialog(QWidget *) { setupUi(this); this->setWindowTitle( QString(_("About OpenSCAD")) + " " + openscad_shortversionnumber.c_str()); - QUrl flattr_qurl(":icons/flattr.png" ); - this->aboutText->loadResource( QTextDocument::ImageResource, flattr_qurl ); QString tmp = this->aboutText->toHtml(); tmp.replace("__VERSION__", openscad_detailedversionnumber.c_str()); this->aboutText->setHtml(tmp); diff -Nru openscad-2015.03-1+dfsg/src/AboutDialog.html openscad-2015.03-2+dfsg/src/AboutDialog.html --- openscad-2015.03-1+dfsg/src/AboutDialog.html 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/AboutDialog.html 2015-11-17 09:43:41.000000000 +0000 @@ -9,13 +9,29 @@ - + + - + -

- +

+  Flattr this!  +

diff -Nru openscad-2015.03-1+dfsg/src/boost-utils.h openscad-2015.03-2+dfsg/src/boost-utils.h --- openscad-2015.03-1+dfsg/src/boost-utils.h 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/boost-utils.h 2015-11-17 09:43:41.000000000 +0000 @@ -8,3 +8,42 @@ fs::path boostfs_relative_path(const fs::path &path, const fs::path &relative_to); fs::path boostfs_normalize(const fs::path &path); fs::path boostfs_uncomplete(fs::path const p, fs::path const base); + +#include +#include + +/* Convert number types but print WARNING for failures during +conversion. This is useful for situations where it is important to not +fail silently during casting or conversion. (For example, accidentally +converting 64 bit types to 32 bit types, float to int, etc). +For positive overflow, return max of Tout template type +For negative overflow, return min of Tout template type +On other conversion failures, return 0. */ +template Tout boost_numeric_cast( Tin input ) +{ + Tout result = 0; + std::stringstream status; + status.str("ok"); + try { + result = boost::numeric_cast(input); + } catch (boost::numeric::negative_overflow& e) { + status << e.what(); + result = std::numeric_limits::min(); + } catch (boost::numeric::positive_overflow& e) { + status << e.what(); + result = std::numeric_limits::max(); + } catch (boost::numeric::bad_numeric_cast& e) { + status << e.what(); + result = 0; + } + if (status.str()!="ok") { + std::stringstream tmp; + tmp << input; + PRINTB("WARNING: problem converting this number: %s",tmp.str()); + PRINTB("WARNING: %s", status.str() ); + PRINTB("WARNING: setting result to %u",result); + } + return result; +} + + diff -Nru openscad-2015.03-1+dfsg/src/builtin.cc openscad-2015.03-2+dfsg/src/builtin.cc --- openscad-2015.03-1+dfsg/src/builtin.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/builtin.cc 2015-11-17 09:43:41.000000000 +0000 @@ -101,9 +101,9 @@ this->globalscope.assignments.push_back(Assignment("$t", boost::shared_ptr(new ExpressionConst(ValuePtr(0.0))))); Value::VectorType zero3; - zero3.push_back(Value(0.0)); - zero3.push_back(Value(0.0)); - zero3.push_back(Value(0.0)); + zero3.push_back(ValuePtr(0.0)); + zero3.push_back(ValuePtr(0.0)); + zero3.push_back(ValuePtr(0.0)); ValuePtr zero3val(zero3); this->globalscope.assignments.push_back(Assignment("$vpt", boost::shared_ptr(new ExpressionConst(zero3val)))); this->globalscope.assignments.push_back(Assignment("$vpr", boost::shared_ptr(new ExpressionConst(zero3val)))); diff -Nru openscad-2015.03-1+dfsg/src/calc.cc openscad-2015.03-2+dfsg/src/calc.cc --- openscad-2015.03-1+dfsg/src/calc.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/calc.cc 2015-11-17 09:43:41.000000000 +0000 @@ -26,6 +26,7 @@ #include "calc.h" #include "grid.h" +#include /*! Returns the number of subdivision of a whole circle, given radius and @@ -33,7 +34,9 @@ */ int Calc::get_fragments_from_r(double r, double fn, double fs, double fa) { - if (r < GRID_FINE) return 3; + // FIXME: It would be better to refuse to create an object. Let's do more strict error handling + // in future versions of OpenSCAD + if (r < GRID_FINE || boost::math::isinf(fn) || boost::math::isnan(fn)) return 3; if (fn > 0.0) return (int)(fn >= 3 ? fn : 3); return (int)ceil(fmax(fmin(360.0 / fa, r*2*M_PI / fs), 5)); } diff -Nru openscad-2015.03-1+dfsg/src/cgaladv.cc openscad-2015.03-2+dfsg/src/cgaladv.cc --- openscad-2015.03-1+dfsg/src/cgaladv.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/cgaladv.cc 2015-11-17 09:43:41.000000000 +0000 @@ -89,17 +89,17 @@ node->newsize << 0,0,0; if ( ns->type() == Value::VECTOR ) { const Value::VectorType &vs = ns->toVector(); - if ( vs.size() >= 1 ) node->newsize[0] = vs[0].toDouble(); - if ( vs.size() >= 2 ) node->newsize[1] = vs[1].toDouble(); - if ( vs.size() >= 3 ) node->newsize[2] = vs[2].toDouble(); + if ( vs.size() >= 1 ) node->newsize[0] = vs[0]->toDouble(); + if ( vs.size() >= 2 ) node->newsize[1] = vs[1]->toDouble(); + if ( vs.size() >= 3 ) node->newsize[2] = vs[2]->toDouble(); } ValuePtr autosize = c.lookup_variable("auto"); node->autosize << false, false, false; if ( autosize->type() == Value::VECTOR ) { const Value::VectorType &va = autosize->toVector(); - if ( va.size() >= 1 ) node->autosize[0] = va[0].toBool(); - if ( va.size() >= 2 ) node->autosize[1] = va[1].toBool(); - if ( va.size() >= 3 ) node->autosize[2] = va[2].toBool(); + if ( va.size() >= 1 ) node->autosize[0] = va[0]->toBool(); + if ( va.size() >= 2 ) node->autosize[1] = va[1]->toBool(); + if ( va.size() >= 3 ) node->autosize[2] = va[2]->toBool(); } else if ( autosize->type() == Value::BOOL ) { node->autosize << autosize->toBool(),autosize->toBool(),autosize->toBool(); diff -Nru openscad-2015.03-1+dfsg/src/clipper-utils.cc openscad-2015.03-2+dfsg/src/clipper-utils.cc --- openscad-2015.03-1+dfsg/src/clipper-utils.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/clipper-utils.cc 2015-11-17 09:43:41.000000000 +0000 @@ -1,4 +1,5 @@ #include "clipper-utils.h" +#include "printutils.h" #include namespace ClipperUtils { @@ -30,7 +31,15 @@ ClipperLib::PolyTree sanitize(const ClipperLib::Paths &paths) { ClipperLib::PolyTree result; ClipperLib::Clipper clipper; - clipper.AddPaths(paths, ClipperLib::ptSubject, true); + try { + clipper.AddPaths(paths, ClipperLib::ptSubject, true); + } + catch(...) { + // Most likely caught a RangeTest exception from clipper + // Note that Clipper up to v6.2.1 incorrectly throws + // an exception of type char* rather than a clipperException() + PRINT("WARNING: Range check failed for polygon. skipping"); + } clipper.Execute(ClipperLib::ctUnion, result, ClipperLib::pftEvenOdd); return result; } diff -Nru openscad-2015.03-1+dfsg/src/color.cc openscad-2015.03-2+dfsg/src/color.cc --- openscad-2015.03-1+dfsg/src/color.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/color.cc 2015-11-17 09:43:41.000000000 +0000 @@ -50,6 +50,8 @@ ColorModule::ColorModule() { + // Colors extracted from https://drafts.csswg.org/css-color/ on 2015-08-02 + // CSS Color Module Level 4 - Editor’s Draft, 29 May 2015 webcolors = map_list_of ("aliceblue", Color4f(240, 248, 255)) ("antiquewhite", Color4f(250, 235, 215)) @@ -170,6 +172,7 @@ ("plum", Color4f(221, 160, 221)) ("powderblue", Color4f(176, 224, 230)) ("purple", Color4f(128, 0, 128)) + ("rebeccapurple", Color4f(102, 51, 153)) ("red", Color4f(255, 0, 0)) ("rosybrown", Color4f(188, 143, 143)) ("royalblue", Color4f(65, 105, 225)) @@ -191,7 +194,6 @@ ("teal", Color4f(0, 128, 128)) ("thistle", Color4f(216, 191, 216)) ("tomato", Color4f(255, 99, 71)) - ("transparent", Color4f(0, 0, 0, 0)) ("turquoise", Color4f(64, 224, 208)) ("violet", Color4f(238, 130, 238)) ("wheat", Color4f(245, 222, 179)) @@ -199,6 +201,9 @@ ("whitesmoke", Color4f(245, 245, 245)) ("yellow", Color4f(255, 255, 0)) ("yellowgreen", Color4f(154, 205, 50)) + + // additional OpenSCAD specific entry + ("transparent", Color4f(0, 0, 0, 0)) .convert_to_container >(); } @@ -224,7 +229,7 @@ ValuePtr v = c.lookup_variable("c"); if (v->type() == Value::VECTOR) { for (size_t i = 0; i < 4; i++) { - node->color[i] = i < v->toVector().size() ? v->toVector()[i].toDouble() : 1.0; + node->color[i] = i < v->toVector().size() ? v->toVector()[i]->toDouble() : 1.0; if (node->color[i] > 1) PRINTB_NOCACHE("WARNING: color() expects numbers between 0.0 and 1.0. Value of %.1f is too large.", node->color[i]); } diff -Nru openscad-2015.03-1+dfsg/src/colormap.cc openscad-2015.03-2+dfsg/src/colormap.cc --- openscad-2015.03-1+dfsg/src/colormap.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/colormap.cc 2015-11-17 09:43:41.000000000 +0000 @@ -67,7 +67,7 @@ addColor(CGAL_EDGE_2D_COLOR, "cgal-edge-2d"); addColor(CROSSHAIR_COLOR, "crosshair"); } catch (const std::exception & e) { - PRINTB("Error reading color scheme file '%s': %s", path.c_str() % e.what()); + PRINTB("Error reading color scheme file '%s': %s", boosty::stringy(path).c_str() % e.what()); _error = e.what(); _name = ""; _index = 0; @@ -261,7 +261,7 @@ { const fs::path color_schemes = basePath / "color-schemes" / "render"; - PRINTDB("Enumerating color schemes from '%s'", color_schemes.string().c_str()); + PRINTDB("Enumerating color schemes from '%s'", boosty::stringy(color_schemes).c_str()); fs::directory_iterator end_iter; @@ -272,7 +272,7 @@ } const fs::path path = (*dir_iter).path(); - if (!(path.extension().string() == ".json")) { + if (!(path.extension() == ".json")) { continue; } diff -Nru openscad-2015.03-1+dfsg/src/control.cc openscad-2015.03-2+dfsg/src/control.cc --- openscad-2015.03-1+dfsg/src/control.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/control.cc 2015-11-17 09:43:41.000000000 +0000 @@ -63,7 +63,7 @@ static const EvalContext* getLastModuleCtx(const EvalContext *evalctx); - static AbstractNode* getChild(const Value &value, const EvalContext* modulectx); + static AbstractNode* getChild(const ValuePtr &value, const EvalContext* modulectx); private: // data Type type; @@ -78,15 +78,15 @@ ValuePtr it_values = evalctx->getArgValue(l, ctx); Context c(ctx); if (it_values->type() == Value::RANGE) { - Value::RangeType range = it_values->toRange(); - boost::uint32_t steps = range.nbsteps(); - if (steps >= 10000) { - PRINTB("WARNING: Bad range parameter in for statement: too many elements (%lu).", steps); - } else { - for (Value::RangeType::iterator it = range.begin();it != range.end();it++) { - c.set_variable(it_name, ValuePtr(*it)); - for_eval(node, inst, l+1, &c, evalctx); - } + RangeType range = it_values->toRange(); + boost::uint32_t steps = range.numValues(); + if (steps >= 10000) { + PRINTB("WARNING: Bad range parameter in for statement: too many elements (%lu).", steps); + } else { + for (RangeType::iterator it = range.begin();it != range.end();it++) { + c.set_variable(it_name, ValuePtr(*it)); + for_eval(node, inst, l+1, &c, evalctx); + } } } else if (it_values->type() == Value::VECTOR) { @@ -133,17 +133,17 @@ } // static -AbstractNode* ControlModule::getChild(const Value& value, const EvalContext* modulectx) +AbstractNode* ControlModule::getChild(const ValuePtr &value, const EvalContext* modulectx) { - if (value.type()!=Value::NUMBER) { + if (value->type()!=Value::NUMBER) { // Invalid parameter // (e.g. first child of difference is invalid) - PRINTB("WARNING: Bad parameter type (%s) for children, only accept: empty, number, vector, range.", value.toString()); + PRINTB("WARNING: Bad parameter type (%s) for children, only accept: empty, number, vector, range.", value->toString()); return NULL; } double v; - if (!value.getDouble(v)) { - PRINTB("WARNING: Bad parameter type (%s) for children, only accept: empty, number, vector, range.", value.toString()); + if (!value->getDouble(v)) { + PRINTB("WARNING: Bad parameter type (%s) for children, only accept: empty, number, vector, range.", value->toString()); return NULL; } @@ -223,12 +223,12 @@ // one (or more ignored) parameter ValuePtr value = evalctx->getArgValue(0); if (value->type() == Value::NUMBER) { - return getChild(*value, modulectx); + return getChild(value, modulectx); } else if (value->type() == Value::VECTOR) { AbstractNode* node = new AbstractNode(inst); const Value::VectorType& vect = value->toVector(); - foreach (const Value::VectorType::value_type& vectvalue, vect) { + foreach (const ValuePtr &vectvalue, vect) { AbstractNode* childnode = getChild(vectvalue,modulectx); if (childnode==NULL) continue; // error node->children.push_back(childnode); @@ -236,15 +236,15 @@ return node; } else if (value->type() == Value::RANGE) { - AbstractNode* node = new AbstractNode(inst); - Value::RangeType range = value->toRange(); - boost::uint32_t steps = range.nbsteps(); + RangeType range = value->toRange(); + boost::uint32_t steps = range.numValues(); if (steps >= 10000) { PRINTB("WARNING: Bad range parameter for children: too many elements (%lu).", steps); return NULL; } - for (Value::RangeType::iterator it = range.begin();it != range.end();it++) { - AbstractNode* childnode = getChild(Value(*it),modulectx); // with error cases + AbstractNode* node = new AbstractNode(inst); + for (RangeType::iterator it = range.begin();it != range.end();it++) { + AbstractNode* childnode = getChild(ValuePtr(*it),modulectx); // with error cases if (childnode==NULL) continue; // error node->children.push_back(childnode); } diff -Nru openscad-2015.03-1+dfsg/src/dxfdim.cc openscad-2015.03-2+dfsg/src/dxfdim.cc --- openscad-2015.03-1+dfsg/src/dxfdim.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/dxfdim.cc 2015-11-17 09:43:41.000000000 +0000 @@ -200,8 +200,8 @@ double x = x1 + ua*(x2 - x1); double y = y1 + ua*(y2 - y1); Value::VectorType ret; - ret.push_back(Value(x)); - ret.push_back(Value(y)); + ret.push_back(ValuePtr(x)); + ret.push_back(ValuePtr(y)); return dxf_cross_cache[key] = ValuePtr(ret); } } diff -Nru openscad-2015.03-1+dfsg/src/expr.cc openscad-2015.03-2+dfsg/src/expr.cc --- openscad-2015.03-1+dfsg/src/expr.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/expr.cc 2015-11-17 09:43:41.000000000 +0000 @@ -41,12 +41,12 @@ Value::VectorType flatten(Value::VectorType const& vec) { int n = 0; for (unsigned int i = 0; i < vec.size(); i++) { - assert(vec[i].type() == Value::VECTOR); - n += vec[i].toVector().size(); + assert(vec[i]->type() == Value::VECTOR); + n += vec[i]->toVector().size(); } Value::VectorType ret; ret.reserve(n); for (unsigned int i = 0; i < vec.size(); i++) { - std::copy(vec[i].toVector().begin(),vec[i].toVector().end(),std::back_inserter(ret)); + std::copy(vec[i]->toVector().begin(),vec[i]->toVector().end(),std::back_inserter(ret)); } return ret; } @@ -357,7 +357,7 @@ ValuePtr ExpressionConst::evaluate(const class Context *) const { - return ValuePtr(this->const_value); + return this->const_value; } void ExpressionConst::print(std::ostream &stream) const @@ -380,12 +380,12 @@ ValuePtr v2 = this->second->evaluate(context); if (v2->type() == Value::NUMBER) { if (this->children.size() == 2) { - Value::RangeType range(v1->toDouble(), v2->toDouble()); + RangeType range(v1->toDouble(), v2->toDouble()); return ValuePtr(range); } else { ValuePtr v3 = this->third->evaluate(context); if (v3->type() == Value::NUMBER) { - Value::RangeType range(v1->toDouble(), v2->toDouble(), v3->toDouble()); + RangeType range(v1->toDouble(), v2->toDouble(), v3->toDouble()); return ValuePtr(range); } } @@ -409,7 +409,8 @@ { Value::VectorType vec; BOOST_FOREACH(const Expression *e, this->children) { - vec.push_back(*(e->evaluate(context))); + ValuePtr tmpval = e->evaluate(context); + vec.push_back(tmpval); } return ValuePtr(vec); } @@ -545,7 +546,7 @@ if (this->second->isListComprehension()) { return this->second->evaluate(context); } else { - vec.push_back((*this->second->evaluate(context))); + vec.push_back(this->second->evaluate(context)); } } return ValuePtr(vec); @@ -561,26 +562,26 @@ Context c(context); if (it_values->type() == Value::RANGE) { - Value::RangeType range = it_values->toRange(); - boost::uint32_t steps = range.nbsteps(); + RangeType range = it_values->toRange(); + boost::uint32_t steps = range.numValues(); if (steps >= 1000000) { PRINTB("WARNING: Bad range parameter in for statement: too many elements (%lu).", steps); } else { - for (Value::RangeType::iterator it = range.begin();it != range.end();it++) { + for (RangeType::iterator it = range.begin();it != range.end();it++) { c.set_variable(it_name, ValuePtr(*it)); - vec.push_back((*this->first->evaluate(&c))); + vec.push_back(this->first->evaluate(&c)); } } } else if (it_values->type() == Value::VECTOR) { for (size_t i = 0; i < it_values->toVector().size(); i++) { c.set_variable(it_name, it_values->toVector()[i]); - vec.push_back((*this->first->evaluate(&c))); + vec.push_back(this->first->evaluate(&c)); } } else if (it_values->type() != Value::UNDEFINED) { c.set_variable(it_name, it_values); - vec.push_back((*this->first->evaluate(&c))); + vec.push_back(this->first->evaluate(&c)); } if (this->first->isListComprehension()) { return ValuePtr(flatten(vec)); diff -Nru openscad-2015.03-1+dfsg/src/FreetypeRenderer.cc openscad-2015.03-2+dfsg/src/FreetypeRenderer.cc --- openscad-2015.03-1+dfsg/src/FreetypeRenderer.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/FreetypeRenderer.cc 2015-11-17 09:43:41.000000000 +0000 @@ -40,6 +40,8 @@ #include FT_OUTLINE_H +#define SCRIPT_UNTAG(tag) ((uint8_t)((tag)>>24)) % ((uint8_t)((tag)>>16)) % ((uint8_t)((tag)>>8)) % ((uint8_t)(tag)) + static inline Vector2d get_scaled_vector(const FT_Vector *ft_vector, double scale) { return Vector2d(ft_vector->x / scale, ft_vector->y / scale); } @@ -122,6 +124,75 @@ } } +hb_direction_t FreetypeRenderer::get_direction(const FreetypeRenderer::Params ¶ms, const hb_script_t script) const +{ + hb_direction_t param_direction = hb_direction_from_string(params.direction.c_str(), -1); + if (param_direction != HB_DIRECTION_INVALID) { + return param_direction; + } + + hb_direction_t direction = hb_script_get_horizontal_direction(script); + PRINTDB("Detected direction '%s' for %s", hb_direction_to_string(direction) % params.text.c_str()); + return direction; +} + +bool FreetypeRenderer::is_ignored_script(const hb_script_t script) const +{ + switch (script) { + case HB_SCRIPT_COMMON: + case HB_SCRIPT_INHERITED: + case HB_SCRIPT_UNKNOWN: + case HB_SCRIPT_INVALID: + return true; + default: + return false; + } +} + +hb_script_t FreetypeRenderer::get_script(const FreetypeRenderer::Params ¶ms, hb_glyph_info_t *glyph_info, unsigned int glyph_count) const +{ + hb_script_t param_script = hb_script_from_string(params.script.c_str(), -1); + if (param_script != HB_SCRIPT_INVALID) { + return param_script; + } + + hb_script_t script = HB_SCRIPT_INVALID; + for (unsigned int idx = 0;idx < glyph_count;idx++) { + hb_codepoint_t cp = glyph_info[idx].codepoint; + hb_script_t s = hb_unicode_script(hb_unicode_funcs_get_default(), cp); + if (!is_ignored_script(s)) { + if (script == HB_SCRIPT_INVALID) { + script = s; + } else if ((script != s) && (script != HB_SCRIPT_UNKNOWN)) { + script = HB_SCRIPT_UNKNOWN; + } + } + } + PRINTDB("Detected script '%c%c%c%c' for %s", SCRIPT_UNTAG(script) % params.text.c_str()); + return script; +} + +void FreetypeRenderer::detect_properties(FreetypeRenderer::Params ¶ms) const +{ + hb_buffer_t *hb_buf = hb_buffer_create(); + hb_buffer_add_utf8(hb_buf, params.text.c_str(), strlen(params.text.c_str()), 0, strlen(params.text.c_str())); + + unsigned int glyph_count; + hb_glyph_info_t *glyph_info = hb_buffer_get_glyph_infos(hb_buf, &glyph_count); + + hb_script_t script = get_script(params, glyph_info, glyph_count); + hb_buffer_destroy(hb_buf); + + if (!is_ignored_script(script)) { + char script_buf[5] = { 0, }; + hb_tag_to_string(hb_script_to_iso15924_tag(script), script_buf); + params.set_script(script_buf); + } + + hb_direction_t direction = get_direction(params, script); + params.set_direction(hb_direction_to_string(direction)); +} + std::vector FreetypeRenderer::render(const FreetypeRenderer::Params ¶ms) const { FT_Face face; @@ -180,8 +251,8 @@ unsigned int glyph_count; hb_glyph_info_t *glyph_info = hb_buffer_get_glyph_infos(hb_buf, &glyph_count); - hb_glyph_position_t *glyph_pos = hb_buffer_get_glyph_positions(hb_buf, &glyph_count); - + hb_glyph_position_t *glyph_pos = hb_buffer_get_glyph_positions(hb_buf, &glyph_count); + GlyphArray glyph_array; for (unsigned int idx = 0;idx < glyph_count;idx++) { FT_UInt glyph_index = glyph_info[idx].codepoint; diff -Nru openscad-2015.03-1+dfsg/src/FreetypeRenderer.h openscad-2015.03-2+dfsg/src/FreetypeRenderer.h --- openscad-2015.03-1+dfsg/src/FreetypeRenderer.h 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/FreetypeRenderer.h 2015-11-17 09:43:41.000000000 +0000 @@ -85,7 +85,7 @@ << ", font = \"" << params.font << "\", direction = \"" << params.direction << "\", language = \"" << params.language - << "\", script = \"" << params.script + << (params.script.empty() ? "" : "\", script = \"") << params.script << "\", halign = \"" << params.halign << "\", valign = \"" << params.valign << "\", $fn = " << params.fn @@ -102,6 +102,7 @@ FreetypeRenderer(); virtual ~FreetypeRenderer(); + void detect_properties(FreetypeRenderer::Params ¶ms) const; std::vector render(const FreetypeRenderer::Params ¶ms) const; private: const static double scale; @@ -136,6 +137,10 @@ } }; + bool is_ignored_script(const hb_script_t script) const; + hb_script_t get_script(const FreetypeRenderer::Params ¶ms, hb_glyph_info_t *glyph_info, unsigned int glyph_count) const; + hb_direction_t get_direction(const FreetypeRenderer::Params ¶ms, const hb_script_t script) const; + double calc_x_offset(std::string halign, double width) const; double calc_y_offset(std::string valign, double ascend, double descend) const; diff -Nru openscad-2015.03-1+dfsg/src/func.cc openscad-2015.03-2+dfsg/src/func.cc --- openscad-2015.03-1+dfsg/src/func.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/func.cc 2015-11-17 09:43:41.000000000 +0000 @@ -50,10 +50,13 @@ auto/bind()s for random function objects, but we are supporting older systems. */ +#include"boost-utils.h" #include #include /*Unicode support for string lengths and array accesses*/ #include +// hash double +#include "linalg.h" #ifdef __WIN32__ #include @@ -238,34 +241,51 @@ if (v0->type() != Value::NUMBER) goto quit; double min = v0->toDouble(); + if (boost::math::isinf(min)) { + PRINT("WARNING: rands() range min cannot be infinite"); + min = -std::numeric_limits::max()/2; + PRINTB("WARNING: resetting to %f",min); + } ValuePtr v1 = evalctx->getArgValue(1); if (v1->type() != Value::NUMBER) goto quit; double max = v1->toDouble(); + if (boost::math::isinf(max)) { + PRINT("WARNING: rands() range max cannot be infinite"); + max = std::numeric_limits::max()/2; + PRINTB("WARNING: resetting to %f",max); + } if (max < min) { register double tmp = min; min = max; max = tmp; } ValuePtr v2 = evalctx->getArgValue(2); if (v2->type() != Value::NUMBER) goto quit; - size_t numresults = std::max(0, static_cast(v2->toDouble())); + double numresultsd = std::abs( v2->toDouble() ); + if (boost::math::isinf(numresultsd)) { + PRINT("WARNING: rands() cannot create an infinite number of results"); + PRINT("WARNING: resetting number of results to 1"); + numresultsd = 1; + } + size_t numresults = boost_numeric_cast( numresultsd ); bool deterministic = false; if (n > 3) { ValuePtr v3 = evalctx->getArgValue(3); if (v3->type() != Value::NUMBER) goto quit; - deterministic_rng.seed((unsigned int) v3->toDouble()); + uint32_t seed = static_cast(hash_floating_point( v3->toDouble() )); + deterministic_rng.seed( seed ); deterministic = true; } Value::VectorType vec; if (min==max) { // Boost doesn't allow min == max for (size_t i=0; i < numresults; i++) - vec.push_back( Value( min ) ); + vec.push_back(ValuePtr(min)); } else { boost::uniform_real<> distributor( min, max ); for (size_t i=0; i < numresults; i++) { if ( deterministic ) { - vec.push_back(Value(distributor(deterministic_rng))); + vec.push_back(ValuePtr(distributor(deterministic_rng))); } else { - vec.push_back(Value(distributor(lessdeterministic_rng))); + vec.push_back(ValuePtr(distributor(lessdeterministic_rng))); } } } @@ -285,11 +305,11 @@ ValuePtr v0 = evalctx->getArgValue(0); if (n == 1 && v0->type() == Value::VECTOR && !v0->toVector().empty()) { - Value min = v0->toVector()[0]; + ValuePtr min = v0->toVector()[0]; for (size_t i = 1; i < v0->toVector().size(); i++) { if (v0->toVector()[i] < min) min = v0->toVector()[i]; } - return ValuePtr(min); + return min; } if (v0->type() == Value::NUMBER) { double val = v0->toDouble(); @@ -317,11 +337,11 @@ ValuePtr v0 = evalctx->getArgValue(0); if (n == 1 && v0->type() == Value::VECTOR && !v0->toVector().empty()) { - Value max = v0->toVector()[0]; + ValuePtr max = v0->toVector()[0]; for (size_t i = 1; i < v0->toVector().size(); i++) { if (v0->toVector()[i] > max) max = v0->toVector()[i]; } - return ValuePtr(max); + return max; } if (v0->type() == Value::NUMBER) { double val = v0->toDouble(); @@ -614,14 +634,13 @@ Value::VectorType result; for (size_t i = 0; i < evalctx->numArgs(); i++) { - ValuePtr v = evalctx->getArgValue(i); - if (v->type() == Value::VECTOR) { - Value::VectorType vec = v->toVector(); - for (Value::VectorType::const_iterator it = vec.begin(); it != vec.end(); it++) { - result.push_back(*it); + ValuePtr val = evalctx->getArgValue(i); + if (val->type() == Value::VECTOR) { + BOOST_FOREACH(const ValuePtr &v, val->toVector()) { + result.push_back(v); } } else { - result.push_back(*v); + result.push_back(val); } } return ValuePtr(result); @@ -636,13 +655,13 @@ ValuePtr v1 = evalctx->getArgValue(1); const Value::VectorType &vec = v1->toVector(); - if (vec[0].toVector().size() < 2) // Second must be a vector of vectors + if (vec[0]->toVector().size() < 2) // Second must be a vector of vectors return ValuePtr::undefined; - if (!vec[0].getVec2(low_p, low_v) || !vec[0].getVec2(high_p, high_v)) + if (!vec[0]->getVec2(low_p, low_v) || !vec[0]->getVec2(high_p, high_v)) return ValuePtr::undefined; for (size_t i = 1; i < vec.size(); i++) { double this_p, this_v; - if (vec[i].getVec2(this_p, this_v)) { + if (vec[i]->getVec2(this_p, this_v)) { if (this_p <= p && (this_p > low_p || low_p > p)) { low_p = this_p; low_v = this_v; @@ -727,10 +746,10 @@ if (ptr_ft && ptr_st && (g_utf8_get_char(ptr_ft) == g_utf8_get_char(ptr_st)) ) { matchCount++; if (num_returns_per_match == 1) { - returnvec.push_back(Value(double(j))); + returnvec.push_back(ValuePtr(double(j))); break; } else { - resultvec.push_back(Value(double(j))); + resultvec.push_back(ValuePtr(double(j))); } if (num_returns_per_match > 1 && matchCount >= num_returns_per_match) { break; @@ -740,10 +759,9 @@ if (matchCount == 0) { gchar utf8_of_cp[6] = ""; //A buffer for a single unicode character to be copied into if (ptr_ft) g_utf8_strncpy(utf8_of_cp, ptr_ft, 1); - PRINTB(" WARNING: search term not found: \"%s\"", utf8_of_cp); } if (num_returns_per_match == 0 || num_returns_per_match > 1) { - returnvec.push_back(Value(resultvec)); + returnvec.push_back(ValuePtr(resultvec)); } } return returnvec; @@ -761,19 +779,19 @@ Value::VectorType resultvec; const gchar *ptr_ft = g_utf8_offset_to_pointer(find.c_str(), i); for (size_t j = 0; j < searchTableSize; j++) { - Value::VectorType entryVec = table[j].toVector(); + const Value::VectorType &entryVec = table[j]->toVector(); if (entryVec.size() <= index_col_num) { PRINTB("WARNING: Invalid entry in search vector at index %d, required number of values in the entry: %d. Invalid entry: %s", j % (index_col_num + 1) % table[j]); return Value::VectorType(); } - const gchar *ptr_st = g_utf8_offset_to_pointer(entryVec[index_col_num].toString().c_str(), 0); + const gchar *ptr_st = g_utf8_offset_to_pointer(entryVec[index_col_num]->toString().c_str(), 0); if (ptr_ft && ptr_st && (g_utf8_get_char(ptr_ft) == g_utf8_get_char(ptr_st)) ) { matchCount++; if (num_returns_per_match == 1) { - returnvec.push_back(Value(double(j))); + returnvec.push_back(ValuePtr(double(j))); break; } else { - resultvec.push_back(Value(double(j))); + resultvec.push_back(ValuePtr(double(j))); } if (num_returns_per_match > 1 && matchCount >= num_returns_per_match) { break; @@ -786,7 +804,7 @@ PRINTB(" WARNING: search term not found: \"%s\"", utf8_of_cp); } if (num_returns_per_match == 0 || num_returns_per_match > 1) { - returnvec.push_back(Value(resultvec)); + returnvec.push_back(ValuePtr(resultvec)); } } return returnvec; @@ -807,12 +825,12 @@ unsigned int matchCount = 0; for (size_t j = 0; j < searchTable->toVector().size(); j++) { - const Value &search_element = searchTable->toVector()[j]; + const ValuePtr &search_element = searchTable->toVector()[j]; - if ((index_col_num == 0 && *findThis == search_element) || - (index_col_num < search_element.toVector().size() && - *findThis == search_element.toVector()[index_col_num])) { - returnvec.push_back(Value(double(j))); + if ((index_col_num == 0 && findThis == search_element) || + (index_col_num < search_element->toVector().size() && + findThis == search_element->toVector()[index_col_num])) { + returnvec.push_back(ValuePtr(double(j))); matchCount++; if (num_returns_per_match != 0 && matchCount >= num_returns_per_match) break; } @@ -829,16 +847,16 @@ unsigned int matchCount = 0; Value::VectorType resultvec; - Value const& find_value = findThis->toVector()[i]; + const ValuePtr &find_value = findThis->toVector()[i]; for (size_t j = 0; j < searchTable->toVector().size(); j++) { - Value const& search_element = searchTable->toVector()[j]; + const ValuePtr &search_element = searchTable->toVector()[j]; if ((index_col_num == 0 && find_value == search_element) || - (index_col_num < search_element.toVector().size() && - find_value == search_element.toVector()[index_col_num])) { - Value resultValue((double(j))); + (index_col_num < search_element->toVector().size() && + find_value == search_element->toVector()[index_col_num])) { + ValuePtr resultValue((double(j))); matchCount++; if (num_returns_per_match == 1) { returnvec.push_back(resultValue); @@ -850,20 +868,13 @@ } } if (num_returns_per_match == 1 && matchCount == 0) { - if (findThis->toVector()[i].type() == Value::NUMBER) { - PRINTB(" WARNING: search term not found: %s",findThis->toVector()[i].toDouble()); - } - else if (findThis->toVector()[i].type() == Value::STRING) { - PRINTB(" WARNING: search term not found: \"%s\"",findThis->toVector()[i].toString()); - } - returnvec.push_back(resultvec); + returnvec.push_back(ValuePtr(resultvec)); } if (num_returns_per_match == 0 || num_returns_per_match > 1) { - returnvec.push_back(resultvec); + returnvec.push_back(ValuePtr(resultvec)); } } } else { - PRINTB(" WARNING: search: none performed on input %s", findThis); return ValuePtr::undefined; } return ValuePtr(returnvec); @@ -927,12 +938,12 @@ ValuePtr val = evalctx->getArgValue(0); if (val->type() == Value::VECTOR) { double sum = 0; - Value::VectorType v = val->toVector(); + const Value::VectorType &v = val->toVector(); size_t n = v.size(); for (size_t i = 0; i < n; i++) - if (v[i].type() == Value::NUMBER) { + if (v[i]->type() == Value::NUMBER) { // sum += pow(v[i].toDouble(),2); - register double x = v[i].toDouble(); + register double x = v[i]->toDouble(); sum += x*x; } else { PRINT("WARNING: Incorrect arguments to norm()"); @@ -958,10 +969,10 @@ return ValuePtr::undefined; } - Value::VectorType v0 = arg0->toVector(); - Value::VectorType v1 = arg1->toVector(); + const Value::VectorType &v0 = arg0->toVector(); + const Value::VectorType &v1 = arg1->toVector(); if ((v0.size() == 2) && (v1.size() == 2)) { - return ValuePtr(Value(v0[0].toDouble() * v1[1].toDouble() - v0[1].toDouble() * v1[0].toDouble())); + return ValuePtr(v0[0]->toDouble() * v1[1]->toDouble() - v0[1]->toDouble() * v1[0]->toDouble()); } if ((v0.size() != 3) || (v1.size() != 3)) { @@ -969,12 +980,12 @@ return ValuePtr::undefined; } for (unsigned int a = 0;a < 3;a++) { - if ((v0[a].type() != Value::NUMBER) || (v1[a].type() != Value::NUMBER)) { + if ((v0[a]->type() != Value::NUMBER) || (v1[a]->type() != Value::NUMBER)) { PRINT("WARNING: Invalid value in parameter vector for cross()"); return ValuePtr::undefined; } - double d0 = v0[a].toDouble(); - double d1 = v1[a].toDouble(); + double d0 = v0[a]->toDouble(); + double d1 = v1[a]->toDouble(); if (boost::math::isnan(d0) || boost::math::isnan(d1)) { PRINT("WARNING: Invalid value (NaN) in parameter vector for cross()"); return ValuePtr::undefined; @@ -985,14 +996,14 @@ } } - double x = v0[1].toDouble() * v1[2].toDouble() - v0[2].toDouble() * v1[1].toDouble(); - double y = v0[2].toDouble() * v1[0].toDouble() - v0[0].toDouble() * v1[2].toDouble(); - double z = v0[0].toDouble() * v1[1].toDouble() - v0[1].toDouble() * v1[0].toDouble(); + double x = v0[1]->toDouble() * v1[2]->toDouble() - v0[2]->toDouble() * v1[1]->toDouble(); + double y = v0[2]->toDouble() * v1[0]->toDouble() - v0[0]->toDouble() * v1[2]->toDouble(); + double z = v0[0]->toDouble() * v1[1]->toDouble() - v0[1]->toDouble() * v1[0]->toDouble(); Value::VectorType result; - result.push_back(Value(x)); - result.push_back(Value(y)); - result.push_back(Value(z)); + result.push_back(ValuePtr(x)); + result.push_back(ValuePtr(y)); + result.push_back(ValuePtr(z)); return ValuePtr(result); } diff -Nru openscad-2015.03-1+dfsg/src/GLView.cc openscad-2015.03-2+dfsg/src/GLView.cc --- openscad-2015.03-1+dfsg/src/GLView.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/GLView.cc 2015-11-17 09:43:41.000000000 +0000 @@ -105,7 +105,7 @@ double height = dist * tan(cam.fov/2*M_PI/180); glOrtho(-height*aspectratio, height*aspectratio, -height, height, - -far_far_away, +far_far_away); + -100*dist, +100*dist); break; } } @@ -130,7 +130,7 @@ double height = dist * tan(cam.fov/2*M_PI/180); glOrtho(-height*aspectratio, height*aspectratio, -height, height, - -far_far_away, +far_far_away); + -100*dist, +100*dist); break; } } diff -Nru openscad-2015.03-1+dfsg/src/linalg.cc openscad-2015.03-2+dfsg/src/linalg.cc --- openscad-2015.03-1+dfsg/src/linalg.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/linalg.cc 2015-11-17 09:43:41.000000000 +0000 @@ -46,3 +46,72 @@ } return false; } + +/* Hash a floating point number, copied almost line by line from +Python's pyhash.c, originally by the Python team, Mark Dickinson, et al. +The copyright License for this code can be found in under +../doc/Python-LICENSE.TXT. Changes from the original code include +de-scattering typedefs, and removing the -1 special return case. + +This is designed so srand() will work better with floating point +numbers. An oversimplified explanation is that the code calculates the +Remainder of the input divided by 2^31, in a very portable way. See also: + +http://bob.ippoli.to/archives/2010/03/23/py3k-unified-numeric-hash/ +https://github.com/python/cpython/blob/master/Python/pyhash.c +https://github.com/python/cpython/blob/master/Include/pyhash.h +http://stackoverflow.com/questions/4238122/hash-function-for-floats +http://betterexplained.com/articles/fun-with-modular-arithmetic/ +*/ +typedef int32_t Py_hash_t; +typedef uint32_t Py_uhash_t; +typedef double Float_t; +Py_hash_t hash_floating_point(Float_t v) +{ + int _PyHASH_BITS = 31; + //if (sizeof(Py_uhash_t)==8) _PyHASH_BITS=61; + + Py_uhash_t _PyHASH_MODULUS = (((Py_uhash_t)1 << _PyHASH_BITS) - 1); + Py_uhash_t _PyHASH_INF = 314159; + Py_uhash_t _PyHASH_NAN = 0; + + int e, sign; + Float_t m; + Py_uhash_t x, y; + + if (!std::isfinite(v)) { + if (std::isinf(v)) + return v > 0 ? _PyHASH_INF : -_PyHASH_INF; + else + return _PyHASH_NAN; + } + + m = frexp(v, &e); + + sign = 1; + if (m < 0) { + sign = -1; + m = -m; + } + + /* process 28 bits at a time; this should work well both for binary + and hexadecimal floating point. */ + x = 0; + while (m) { + x = ((x << 28) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - 28); + m *= 268435456.0; // 2**28 + e -= 28; + y = (Py_uhash_t)m; /* pull out integer part */ + m -= y; + x += y; + if (x >= _PyHASH_MODULUS) + x -= _PyHASH_MODULUS; + } + + /* adjust for the exponent; first reduce it modulo _PyHASH_BITS */ + e = e >= 0 ? e % _PyHASH_BITS : _PyHASH_BITS-1-((-1-e) % _PyHASH_BITS); + x = ((x << e) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - e); + + x = x * sign; + return (Py_hash_t)x; +} diff -Nru openscad-2015.03-1+dfsg/src/linalg.h openscad-2015.03-2+dfsg/src/linalg.h --- openscad-2015.03-1+dfsg/src/linalg.h 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/linalg.h 2015-11-17 09:43:41.000000000 +0000 @@ -4,6 +4,7 @@ #include #include #include +#include EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::Vector2d) using Eigen::Vector2d; @@ -23,6 +24,7 @@ bool matrix_contains_infinity( const Transform3d &m ); bool matrix_contains_nan( const Transform3d &m ); +int32_t hash_floating_point( double v ); template bool is_finite(const Eigen::MatrixBase& x) { return ( (x - x).array() == (x - x).array()).all(); diff -Nru openscad-2015.03-1+dfsg/src/linearextrude.cc openscad-2015.03-2+dfsg/src/linearextrude.cc --- openscad-2015.03-1+dfsg/src/linearextrude.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/linearextrude.cc 2015-11-17 09:43:41.000000000 +0000 @@ -90,13 +90,13 @@ node->layername = layer->isUndefined() ? "" : layer->toString(); node->height = 100; - height->getDouble(node->height); + height->getFiniteDouble(node->height); node->convexity = (int)convexity->toDouble(); - origin->getVec2(node->origin_x, node->origin_y); + origin->getVec2(node->origin_x, node->origin_y, true); node->scale_x = node->scale_y = 1; - scale->getDouble(node->scale_x); - scale->getDouble(node->scale_y); - scale->getVec2(node->scale_x, node->scale_y); + scale->getFiniteDouble(node->scale_x); + scale->getFiniteDouble(node->scale_y); + scale->getVec2(node->scale_x, node->scale_y, true); if (center->type() == Value::BOOL) node->center = center->toBool(); @@ -109,17 +109,17 @@ if (node->scale_x < 0) node->scale_x = 0; if (node->scale_y < 0) node->scale_y = 0; - if (slices->type() == Value::NUMBER) node->slices = (int)slices->toDouble(); - - if (twist->type() == Value::NUMBER) { - node->twist = twist->toDouble(); - if (node->twist != 0.0) { - if (node->slices == 0) { - node->slices = (int)fmax(2, fabs(Calc::get_fragments_from_r(node->height, - node->fn, node->fs, node->fa) * node->twist / 360)); - } - node->has_twist = true; + double slicesVal = 0; + slices->getFiniteDouble(slicesVal); + node->slices = (int)slicesVal; + + node->twist = 0.0; + twist->getFiniteDouble(node->twist); + if (node->twist != 0.0) { + if (node->slices == 0) { + node->slices = (int)fmax(2, fabs(Calc::get_fragments_from_r(node->height, node->fn, node->fs, node->fa) * node->twist / 360)); } + node->has_twist = true; } node->slices = std::max(node->slices, 1); diff -Nru openscad-2015.03-1+dfsg/src/mainwin.cc openscad-2015.03-2+dfsg/src/mainwin.cc --- openscad-2015.03-1+dfsg/src/mainwin.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/mainwin.cc 2015-11-17 09:43:41.000000000 +0000 @@ -93,6 +93,16 @@ #include #include +#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0)) +// Set dummy for Qt versions that do not have QSaveFile +#define QT_FILE_SAVE_CLASS QFile +#define QT_FILE_SAVE_COMMIT true +#else +#include +#define QT_FILE_SAVE_CLASS QSaveFile +#define QT_FILE_SAVE_COMMIT if (saveOk) { saveOk = file.commit(); } else { file.cancelWriting(); } +#endif + #include #include @@ -243,9 +253,11 @@ background_chain = NULL; root_node = NULL; - tval = 0; - fps = 0; - fsteps = 1; + this->anim_step = 0; + this->anim_numsteps = 0; + this->anim_tval = 0.0; + this->anim_dumping = false; + this->anim_dump_start_step = 0; const QString importStatement = "import(\"%1\");\n"; const QString surfaceStatement = "surface(\"%1\");\n"; @@ -279,8 +291,10 @@ waitAfterReloadTimer->setInterval(200); connect(waitAfterReloadTimer, SIGNAL(timeout()), this, SLOT(waitAfterReload())); - connect(this->e_tval, SIGNAL(textChanged(QString)), this, SLOT(actionRenderPreview())); - connect(this->e_fps, SIGNAL(textChanged(QString)), this, SLOT(updatedFps())); + connect(this->e_tval, SIGNAL(textChanged(QString)), this, SLOT(updatedAnimTval())); + connect(this->e_fps, SIGNAL(textChanged(QString)), this, SLOT(updatedAnimFps())); + connect(this->e_fsteps, SIGNAL(textChanged(QString)), this, SLOT(updatedAnimSteps())); + connect(this->e_dump, SIGNAL(toggled(bool)), this, SLOT(updatedAnimDump(bool))); animate_panel->hide(); find_panel->hide(); @@ -814,33 +828,68 @@ } } -void MainWindow::updatedFps() +void MainWindow::updatedAnimTval() +{ + bool t_ok; + double t = this->e_tval->text().toDouble(&t_ok); + // Clamp t to 0-1 + if (t_ok) { + this->anim_tval = t < 0 ? 0.0 : ((t > 1.0) ? 1.0 : t); + } + else { + this->anim_tval = 0.0; + } + actionRenderPreview(); +} + +void MainWindow::updatedAnimFps() { bool fps_ok; double fps = this->e_fps->text().toDouble(&fps_ok); animate_timer->stop(); - if (fps_ok && fps > 0) { + if (fps_ok && fps > 0 && this->anim_numsteps > 0) { + this->anim_step = int(this->anim_tval * this->anim_numsteps) % this->anim_numsteps; animate_timer->setSingleShot(false); - animate_timer->setInterval(int(1000 / this->e_fps->text().toDouble())); + animate_timer->setInterval(int(1000 / fps)); animate_timer->start(); } } +void MainWindow::updatedAnimSteps() +{ + bool steps_ok; + int numsteps = this->e_fsteps->text().toInt(&steps_ok); + if (steps_ok) { + this->anim_numsteps = numsteps; + updatedAnimFps(); // Make sure we start + } + else { + this->anim_numsteps = 0; + } + anim_dumping=false; +} + +void MainWindow::updatedAnimDump(bool checked) +{ + if (!checked) this->anim_dumping = false; +} + +// Only called from animate_timer void MainWindow::updateTVal() { - bool fps_ok; - double fps = this->e_fps->text().toDouble(&fps_ok); - if (fps_ok) { - if (fps <= 0) { - actionReloadRenderPreview(); - } else { - double s = this->e_fsteps->text().toDouble(); - double t = this->e_tval->text().toDouble() + 1/s; - QString txt; - txt.sprintf("%.5f", t >= 1.0 ? 0.0 : t); - this->e_tval->setText(txt); - } + if (this->anim_numsteps == 0) return; + + if (this->anim_numsteps > 1) { + this->anim_step = (this->anim_step + 1) % this->anim_numsteps; + this->anim_tval = 1.0 * this->anim_step / this->anim_numsteps; + } + else if (this->anim_numsteps > 0) { + this->anim_step = 0; + this->anim_tval = 0.0; } + QString txt; + txt.sprintf("%.5f", this->anim_tval); + this->e_tval->setText(txt); } void MainWindow::refreshDocument() @@ -1321,6 +1370,16 @@ return writeBackup(this->tempFile); } +void MainWindow::saveError(const QIODevice &file, const std::string &msg) { + const std::string messageFormat = msg + " %s (%s)"; + const char *fileName = this->fileName.toLocal8Bit().constData(); + PRINTB(messageFormat.c_str(), fileName % file.errorString().toLocal8Bit().constData()); + + const std::string dialogFormatStr = msg + "\n\"%1\"\n(%2)"; + const QString dialogFormat(dialogFormatStr.c_str()); + QMessageBox::warning(this, windowTitle(), dialogFormat.arg(this->fileName).arg(file.errorString())); +} + /*! Save current document. Should _always_ write to disk, since this is called by SaveAs - i.e. don't try to be @@ -1330,26 +1389,37 @@ { if (this->fileName.isEmpty()) { actionSaveAs(); + return; + } + + setCurrentOutput(); + + // If available (>= Qt 5.1), use QSaveFile to ensure the file is not + // destroyed if the device is full. Unfortunately this is not working + // as advertised (at least in Qt 5.3) as it does not detect the device + // full properly and happily commits a 0 byte file. + // Checking the QTextStream status flag after flush() seems to catch + // this condition. + QT_FILE_SAVE_CLASS file(this->fileName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { + saveError(file, _("Failed to open file for writing")); } else { - setCurrentOutput(); - QFile file(this->fileName); - if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { - PRINTB("Failed to open file for writing: %s (%s)", - this->fileName.toLocal8Bit().constData() % file.errorString().toLocal8Bit().constData()); - QMessageBox::warning(this, windowTitle(), tr("Failed to open file for writing:\n %1 (%2)") - .arg(this->fileName).arg(file.errorString())); - } - else { - QTextStream writer(&file); - writer.setCodec("UTF-8"); - writer << this->editor->toPlainText(); - PRINTB("Saved design '%s'.", this->fileName.toLocal8Bit().constData()); + QTextStream writer(&file); + writer.setCodec("UTF-8"); + writer << this->editor->toPlainText(); + writer.flush(); + bool saveOk = writer.status() == QTextStream::Ok; + QT_FILE_SAVE_COMMIT; + if (saveOk) { + PRINTB(_("Saved design '%s'."), this->fileName.toLocal8Bit().constData()); this->editor->setContentModified(false); + } else { + saveError(file, _("Error saving design")); } - clearCurrentOutput(); - updateRecentFiles(); } + clearCurrentOutput(); + updateRecentFiles(); } void MainWindow::actionSaveAs() @@ -1538,18 +1608,18 @@ void MainWindow::updateTemporalVariables() { - this->top_ctx.set_variable("$t", ValuePtr(this->e_tval->text().toDouble())); + this->top_ctx.set_variable("$t", ValuePtr(this->anim_tval)); Value::VectorType vpt; - vpt.push_back(Value(-qglview->cam.object_trans.x())); - vpt.push_back(Value(-qglview->cam.object_trans.y())); - vpt.push_back(Value(-qglview->cam.object_trans.z())); - this->top_ctx.set_variable("$vpt", Value(vpt)); + vpt.push_back(ValuePtr(-qglview->cam.object_trans.x())); + vpt.push_back(ValuePtr(-qglview->cam.object_trans.y())); + vpt.push_back(ValuePtr(-qglview->cam.object_trans.z())); + this->top_ctx.set_variable("$vpt", ValuePtr(vpt)); Value::VectorType vpr; - vpr.push_back(Value(fmodf(360 - qglview->cam.object_rot.x() + 90, 360))); - vpr.push_back(Value(fmodf(360 - qglview->cam.object_rot.y(), 360))); - vpr.push_back(Value(fmodf(360 - qglview->cam.object_rot.z(), 360))); + vpr.push_back(ValuePtr(fmodf(360 - qglview->cam.object_rot.x() + 90, 360))); + vpr.push_back(ValuePtr(fmodf(360 - qglview->cam.object_rot.y(), 360))); + vpr.push_back(ValuePtr(fmodf(360 - qglview->cam.object_rot.z(), 360))); top_ctx.set_variable("$vpr", ValuePtr(vpr)); top_ctx.set_variable("$vpd", ValuePtr(qglview->cam.zoomValue())); @@ -1755,15 +1825,22 @@ #endif } - if (viewActionAnimate->isChecked() && e_dump->isChecked()) { - // Force reading from front buffer. Some configurations will read from the back buffer here. - glReadBuffer(GL_FRONT); - QImage img = this->qglview->grabFrameBuffer(); - QString filename; - double s = this->e_fsteps->text().toDouble(); - double t = this->e_tval->text().toDouble(); - filename.sprintf("frame%05d.png", int(round(s*t))); - img.save(filename, "PNG"); + if (e_dump->isChecked() && animate_timer->isActive()) { + if (anim_dumping && anim_dump_start_step == anim_step) { + anim_dumping=false; + e_dump->setChecked(false); + } else { + if (!anim_dumping) { + anim_dumping = true; + anim_dump_start_step = anim_step; + } + // Force reading from front buffer. Some configurations will read from the back buffer here. + glReadBuffer(GL_FRONT); + QImage img = this->qglview->grabFrameBuffer(); + QString filename; + filename.sprintf("frame%05d.png", this->anim_step); + img.save(filename, "PNG"); + } } compileEnded(); @@ -2299,7 +2376,7 @@ if (viewActionAnimate->isChecked()) { animate_panel->show(); actionRenderPreview(); - updatedFps(); + updatedAnimFps(); } else { animate_panel->hide(); animate_timer->stop(); diff -Nru openscad-2015.03-1+dfsg/src/MainWindow.h openscad-2015.03-2+dfsg/src/MainWindow.h --- openscad-2015.03-1+dfsg/src/MainWindow.h 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/MainWindow.h 2015-11-17 09:43:41.000000000 +0000 @@ -15,6 +15,7 @@ #include #include #include +#include enum export_type_e { EXPORT_TYPE_UNKNOWN, @@ -35,7 +36,11 @@ class Preferences *prefs; QTimer *animate_timer; - double tval, fps, fsteps; + int anim_step; + int anim_numsteps; + double anim_tval; + bool anim_dumping; + int anim_dump_start_step; QTimer *autoReloadTimer; std::string autoReloadId; @@ -88,7 +93,10 @@ void closeEvent(QCloseEvent *event); private slots: - void updatedFps(); + void updatedAnimTval(); + void updatedAnimFps(); + void updatedAnimSteps(); + void updatedAnimDump(bool checked); void updateTVal(); void updateMdiMode(bool mdi); void updateUndockMode(bool undockMode); @@ -113,6 +121,7 @@ void compile(bool reload, bool forcedone = false); void compileCSG(bool procevents); bool maybeSave(); + void saveError(const QIODevice &file, const std::string &msg); bool checkEditorModified(); QString dumpCSGTree(AbstractNode *root); static void consoleOutput(const std::string &msg, void *userdata); diff -Nru openscad-2015.03-1+dfsg/src/PlatformUtils.cc openscad-2015.03-2+dfsg/src/PlatformUtils.cc --- openscad-2015.03-1+dfsg/src/PlatformUtils.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/PlatformUtils.cc 2015-11-17 09:43:41.000000000 +0000 @@ -23,7 +23,7 @@ static std::string lookupResourcesPath() { fs::path resourcedir(applicationpath); - PRINTDB("Looking up resource folder with application path '%s'", resourcedir.c_str()); + PRINTDB("Looking up resource folder with application path '%s'", boosty::stringy(resourcedir).c_str()); #ifdef __APPLE__ const char *searchpath[] = { @@ -56,12 +56,14 @@ for (int a = 0;searchpath[a] != NULL;a++) { tmpdir = resourcedir / searchpath[a]; - const fs::path checkdir = tmpdir / "libraries"; - PRINTDB("Checking '%s'", checkdir.c_str()); + // The resource folder is the folder which contains "color-schemes" (as well as + // "examples" and "locale", and optionally "libraries" and "fonts") + const fs::path checkdir = tmpdir / "color-schemes"; + PRINTDB("Checking '%s'", boosty::stringy(checkdir).c_str()); if (is_directory(checkdir)) { resourcedir = tmpdir; - PRINTDB("Found resource folder '%s'", tmpdir.c_str()); + PRINTDB("Found resource folder '%s'", boosty::stringy(tmpdir).c_str()); break; } } diff -Nru openscad-2015.03-1+dfsg/src/polyset-utils.cc openscad-2015.03-2+dfsg/src/polyset-utils.cc --- openscad-2015.03-1+dfsg/src/polyset-utils.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/polyset-utils.cc 2015-11-17 09:43:41.000000000 +0000 @@ -77,7 +77,10 @@ if (currface.empty() || idx != currface.back()) currface.push_back(idx); } if (currface.front() == currface.back()) currface.pop_back(); - if (currface.size() < 3) faces.pop_back(); // Cull empty triangles + if (currface.size() < 3) { + faces.pop_back(); // Cull empty triangles + if (faces.empty()) polygons.pop_back(); // All faces were culled + } } // Tessellate indexed mesh diff -Nru openscad-2015.03-1+dfsg/src/Preferences.cc openscad-2015.03-2+dfsg/src/Preferences.cc --- openscad-2015.03-1+dfsg/src/Preferences.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/Preferences.cc 2015-11-17 09:43:41.000000000 +0000 @@ -32,6 +32,7 @@ #include #include #include +#include #include "GeometryCache.h" #include "AutoUpdater.h" #include "feature.h" @@ -49,7 +50,7 @@ class SettingsReader : public Settings::Visitor { QSettings settings; - const Value getValue(const Settings::SettingsEntry& entry, const std::string& value) const { + Value getValue(const Settings::SettingsEntry& entry, const std::string& value) const { std::string trimmed_value(value); boost::trim(trimmed_value); @@ -101,7 +102,7 @@ settings.remove(key); PRINTDB("SettingsWriter D: %s", key.toStdString().c_str()); } else { - Value value = s->get(entry); + const Value &value = s->get(entry); settings.setValue(key, QString::fromStdString(value.toString())); PRINTDB("SettingsWriter W: %s = '%s'", key.toStdString().c_str() % value.toString().c_str()); } @@ -689,18 +690,17 @@ void Preferences::initComboBox(QComboBox *comboBox, const Settings::SettingsEntry& entry) { comboBox->clear(); - Value::VectorType vector = entry.range().toVector(); - for (Value::VectorType::iterator it = vector.begin();it != vector.end();it++) { - QString val = QString::fromStdString((*it)[0].toString()); - std::string text((*it)[1].toString()); - QString qtext = QString::fromStdString(gettext(text.c_str())); + // Range is a vector of 2D vectors: [[name, value], ...] + BOOST_FOREACH(const ValuePtr &v, entry.range().toVector()) { + QString val = QString::fromStdString(v[0]->toString()); + QString qtext = QString::fromStdString(gettext(v[1]->toString().c_str())); comboBox->addItem(qtext, val); } } void Preferences::initSpinBox(QSpinBox *spinBox, const Settings::SettingsEntry& entry) { - Value::RangeType range = entry.range().toRange(); + RangeType range = entry.range().toRange(); spinBox->setMinimum(range.begin_value()); spinBox->setMaximum(range.end_value()); } @@ -709,13 +709,13 @@ { Settings::Settings *s = Settings::Settings::inst(); - Value value = s->get(entry); + const Value &value = s->get(entry); QString text = QString::fromStdString(value.toString()); int idx = comboBox->findData(text); if (idx >= 0) { comboBox->setCurrentIndex(idx); } else { - Value defaultValue = entry.defaultValue(); + const Value &defaultValue = entry.defaultValue(); QString defaultText = QString::fromStdString(defaultValue.toString()); int defIdx = comboBox->findData(defaultText); if (defIdx >= 0) { diff -Nru openscad-2015.03-1+dfsg/src/Preferences.ui openscad-2015.03-2+dfsg/src/Preferences.ui --- openscad-2015.03-1+dfsg/src/Preferences.ui 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/Preferences.ui 2015-11-17 09:43:41.000000000 +0000 @@ -1333,7 +1333,7 @@ - Allow to open multiple documents + Allow opening multiple documents diff -Nru openscad-2015.03-1+dfsg/src/primitives.cc openscad-2015.03-2+dfsg/src/primitives.cc --- openscad-2015.03-1+dfsg/src/primitives.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/primitives.cc 2015-11-17 09:43:41.000000000 +0000 @@ -508,12 +508,12 @@ for (size_t i=0; ifaces->toVector().size(); i++) { p->append_poly(); - const Value::VectorType &vec = this->faces->toVector()[i].toVector(); + const Value::VectorType &vec = this->faces->toVector()[i]->toVector(); for (size_t j=0; jtoDouble(); if (pt < this->points->toVector().size()) { double px, py, pz; - if (!this->points->toVector()[pt].getVec3(px, py, pz) || + if (!this->points->toVector()[pt]->getVec3(px, py, pz) || isinf(px) || isinf(py) || isinf(pz)) { PRINTB("ERROR: Unable to convert point at index %d to a vec3 of numbers", j); return p; @@ -572,7 +572,7 @@ double x,y; const Value::VectorType &vec = this->points->toVector(); for (unsigned int i=0;iaddOutline(outline); } else { - BOOST_FOREACH(const Value &polygon, this->paths->toVector()) { + BOOST_FOREACH(const ValuePtr &polygon, this->paths->toVector()) { Outline2d curroutline; - BOOST_FOREACH(const Value &index, polygon.toVector()) { - unsigned int idx = index.toDouble(); + BOOST_FOREACH(const ValuePtr &index, polygon->toVector()) { + unsigned int idx = index->toDouble(); if (idx < outline.vertices.size()) { curroutline.vertices.push_back(outline.vertices[idx]); } diff -Nru openscad-2015.03-1+dfsg/src/scintillaeditor.cpp openscad-2015.03-2+dfsg/src/scintillaeditor.cpp --- openscad-2015.03-1+dfsg/src/scintillaeditor.cpp 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/scintillaeditor.cpp 2015-11-17 09:43:41.000000000 +0000 @@ -76,7 +76,7 @@ _name = QString(pt.get("name").c_str()); _index = pt.get("index"); } catch (const std::exception & e) { - PRINTB("Error reading color scheme file '%s': %s", path.c_str() % e.what()); + PRINTB("Error reading color scheme file '%s': %s", boosty::stringy(path).c_str() % e.what()); _name = ""; _index = 0; } @@ -369,7 +369,7 @@ } const fs::path path = (*dir_iter).path(); - if (!(path.extension().string() == ".json")) { + if (!(path.extension() == ".json")) { continue; } diff -Nru openscad-2015.03-1+dfsg/src/settings.cc openscad-2015.03-2+dfsg/src/settings.cc --- openscad-2015.03-1+dfsg/src/settings.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/settings.cc 2015-11-17 09:43:41.000000000 +0000 @@ -45,25 +45,25 @@ static Value value(std::string s1, std::string s2) { Value::VectorType v; - v += Value(s1), Value(s2); + v += ValuePtr(s1), ValuePtr(s2); return v; } static Value values(std::string s1, std::string s1disp, std::string s2, std::string s2disp) { Value::VectorType v; - v += value(s1, s1disp), value(s2, s2disp); + v += ValuePtr(value(s1, s1disp)), ValuePtr(value(s2, s2disp)); return v; } static Value values(std::string s1, std::string s1disp, std::string s2, std::string s2disp, std::string s3, std::string s3disp) { Value::VectorType v; - v += value(s1, s1disp), value(s2, s2disp), value(s3, s3disp); + v += ValuePtr(value(s1, s1disp)), ValuePtr(value(s2, s2disp)), ValuePtr(value(s3, s3disp)); return v; } static Value values(std::string s1, std::string s1disp, std::string s2, std::string s2disp, std::string s3, std::string s3disp, std::string s4, std::string s4disp) { Value::VectorType v; - v += value(s1, s1disp), value(s2, s2disp), value(s3, s3disp), value(s4, s4disp); + v += ValuePtr(value(s1, s1disp)), ValuePtr(value(s2, s2disp)), ValuePtr(value(s3, s3disp)), ValuePtr(value(s4, s4disp)); return v; } @@ -94,12 +94,17 @@ } } -Value Settings::get(const SettingsEntry& entry) +const Value &Settings::defaultValue(const SettingsEntry& entry) +{ + return entry._default; +} + +const Value &Settings::get(const SettingsEntry& entry) { return entry._value; } -void Settings::set(SettingsEntry& entry, const Value val) +void Settings::set(SettingsEntry& entry, const Value &val) { entry._value = val; } @@ -122,15 +127,15 @@ * can be translated. */ SettingsEntry Settings::showWarningsIn3dView("3dview", "showWarningsIn3dView", Value(true), Value(true)); -SettingsEntry Settings::indentationWidth("editor", "indentationWidth", Value(Value::RangeType(1, 16)), Value(4)); -SettingsEntry Settings::tabWidth("editor", "tabWidth", Value(Value::RangeType(1, 16)), Value(4)); +SettingsEntry Settings::indentationWidth("editor", "indentationWidth", Value(RangeType(1, 16)), Value(4)); +SettingsEntry Settings::tabWidth("editor", "tabWidth", Value(RangeType(1, 16)), Value(4)); SettingsEntry Settings::lineWrap("editor", "lineWrap", values("None", _("None"), "Char", _("Wrap at character boundaries"), "Word", _("Wrap at word boundaries")), Value("Word")); SettingsEntry Settings::lineWrapIndentationStyle("editor", "lineWrapIndentationStyle", values("Fixed", _("Fixed"), "Same", _("Same"), "Indented", _("Indented")), Value("Fixed")); -SettingsEntry Settings::lineWrapIndentation("editor", "lineWrapIndentation", Value(Value::RangeType(0, 999)), Value(4)); +SettingsEntry Settings::lineWrapIndentation("editor", "lineWrapIndentation", Value(RangeType(0, 999)), Value(4)); SettingsEntry Settings::lineWrapVisualizationBegin("editor", "lineWrapVisualizationBegin", values("None", _("None"), "Text", _("Text"), "Border", _("Border"), "Margin", _("Margin")), Value("None")); SettingsEntry Settings::lineWrapVisualizationEnd("editor", "lineWrapVisualizationEnd", values("None", _("None"), "Text", _("Text"), "Border", _("Border"), "Margin", _("Margin")), Value("Border")); SettingsEntry Settings::showWhitespace("editor", "showWhitespaces", values("Never", _("Never"), "Always", _("Always"), "AfterIndentation", _("After indentation")), Value("Never")); -SettingsEntry Settings::showWhitespaceSize("editor", "showWhitespacesSize", Value(Value::RangeType(1, 16)), Value(2)); +SettingsEntry Settings::showWhitespaceSize("editor", "showWhitespacesSize", Value(RangeType(1, 16)), Value(2)); SettingsEntry Settings::autoIndent("editor", "autoIndent", Value(true), Value(true)); SettingsEntry Settings::indentStyle("editor", "indentStyle", values("Spaces", _("Spaces"), "Tabs", _("Tabs")), Value("Spaces")); SettingsEntry Settings::tabKeyFunction("editor", "tabKeyFunction", values("Indent", _("Indent"), "InsertTab", _("Insert Tab")), Value("Indent")); diff -Nru openscad-2015.03-1+dfsg/src/settings.h openscad-2015.03-2+dfsg/src/settings.h --- openscad-2015.03-1+dfsg/src/settings.h 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/settings.h 2015-11-17 09:43:41.000000000 +0000 @@ -55,9 +55,9 @@ void visit(class Visitor& visitor); - Value defaultValue(const SettingsEntry& entry); - Value get(const SettingsEntry& entry); - void set(SettingsEntry& entry, const Value val); + const Value &defaultValue(const SettingsEntry& entry); + const Value &get(const SettingsEntry& entry); + void set(SettingsEntry& entry, const Value &val); private: Settings(); @@ -73,4 +73,4 @@ virtual void handle(SettingsEntry& entry) const = 0; }; -} \ No newline at end of file +} diff -Nru openscad-2015.03-1+dfsg/src/text.cc openscad-2015.03-2+dfsg/src/text.cc --- openscad-2015.03-1+dfsg/src/text.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/text.cc 2015-11-17 09:43:41.000000000 +0000 @@ -75,12 +75,15 @@ node->params.set_text(lookup_string_variable_with_default(c, "text", "")); node->params.set_spacing(lookup_double_variable_with_default(c, "spacing", 1.0)); node->params.set_font(lookup_string_variable_with_default(c, "font", "")); - node->params.set_direction(lookup_string_variable_with_default(c, "direction", "ltr")); + node->params.set_direction(lookup_string_variable_with_default(c, "direction", "")); node->params.set_language(lookup_string_variable_with_default(c, "language", "en")); - node->params.set_script(lookup_string_variable_with_default(c, "script", "latin")); + node->params.set_script(lookup_string_variable_with_default(c, "script", "")); node->params.set_halign(lookup_string_variable_with_default(c, "halign", "left")); node->params.set_valign(lookup_string_variable_with_default(c, "valign", "baseline")); + FreetypeRenderer renderer; + renderer.detect_properties(node->params); + return node; } diff -Nru openscad-2015.03-1+dfsg/src/transform.cc openscad-2015.03-2+dfsg/src/transform.cc --- openscad-2015.03-1+dfsg/src/transform.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/transform.cc 2015-11-17 09:43:41.000000000 +0000 @@ -105,15 +105,15 @@ Eigen::AngleAxisd rotz(0, Vector3d::UnitZ()); double a; if (val_a->toVector().size() > 0) { - val_a->toVector()[0].getDouble(a); + val_a->toVector()[0]->getDouble(a); rotx = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitX()); } if (val_a->toVector().size() > 1) { - val_a->toVector()[1].getDouble(a); + val_a->toVector()[1]->getDouble(a); roty = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitY()); } if (val_a->toVector().size() > 2) { - val_a->toVector()[2].getDouble(a); + val_a->toVector()[2]->getDouble(a); rotz = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitZ()); } node->matrix.rotate(rotz * roty * rotx); @@ -171,9 +171,9 @@ Matrix4d rawmatrix = Matrix4d::Identity(); for (int i = 0; i < 16; i++) { size_t x = i / 4, y = i % 4; - if (y < v->toVector().size() && v->toVector()[y].type() == - Value::VECTOR && x < v->toVector()[y].toVector().size()) - v->toVector()[y].toVector()[x].getDouble(rawmatrix(y, x)); + if (y < v->toVector().size() && v->toVector()[y]->type() == + Value::VECTOR && x < v->toVector()[y]->toVector().size()) + v->toVector()[y]->toVector()[x]->getDouble(rawmatrix(y, x)); } double w = rawmatrix(3,3); if (w != 1.0) node->matrix = rawmatrix / w; diff -Nru openscad-2015.03-1+dfsg/src/value.cc openscad-2015.03-2+dfsg/src/value.cc --- openscad-2015.03-1+dfsg/src/value.cc 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/value.cc 2015-11-17 09:43:41.000000000 +0000 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,20 @@ Value Value::undefined; ValuePtr ValuePtr::undefined; +static boost::uint32_t convert_to_uint32(const double d) { + boost::uint32_t ret = std::numeric_limits::max(); + + if (boost::math::isfinite(d)) { + try { + ret = boost::numeric_cast(d); + } catch (boost::bad_numeric_cast) { + // ignore, leaving the default max() value + } + } + + return ret; +} + std::ostream &operator<<(std::ostream &stream, const Filename &filename) { fs::path fnpath = fs::path( (std::string)filename ); @@ -186,6 +201,19 @@ return false; } +bool Value::getFiniteDouble(double &v) const +{ + double result; + if (!getDouble(result)) { + return false; + } + bool valid = boost::math::isfinite(result); + if (valid) { + v = result; + } + return valid; +} + class tostring_visitor : public boost::static_visitor { public: @@ -243,15 +271,19 @@ stream << '['; for (size_t i = 0; i < v.size(); i++) { if (i > 0) stream << ", "; - stream << v[i]; + stream << *v[i]; } stream << ']'; return stream.str(); } - std::string operator()(const Value::RangeType &v) const { + std::string operator()(const RangeType &v) const { return (boost::format("[%1% : %2% : %3%]") % v.begin_val % v.step_val % v.end_val).str(); } + + std::string operator()(const ValuePtr &v) const { + return v->toString(); + } }; std::string Value::toString() const @@ -283,22 +315,22 @@ { std::stringstream stream; for (size_t i = 0; i < v.size(); i++) { - stream << v[i].chrString(); + stream << v[i]->chrString(); } return stream.str(); } - std::string operator()(const Value::RangeType &v) const + std::string operator()(const RangeType &v) const { - const boost::uint32_t steps = v.nbsteps(); + const boost::uint32_t steps = v.numValues(); if (steps >= 10000) { PRINTB("WARNING: Bad range parameter in for statement: too many elements (%lu).", steps); return ""; } std::stringstream stream; - Value::RangeType range = v; - for (Value::RangeType::iterator it = range.begin();it != range.end();it++) { + RangeType range = v; + for (RangeType::iterator it = range.begin();it != range.end();it++) { const Value value(*it); stream << value.chrString(); } @@ -320,14 +352,25 @@ else return empty; } -bool Value::getVec2(double &x, double &y) const +bool Value::getVec2(double &x, double &y, bool ignoreInfinite) const { if (this->type() != VECTOR) return false; const VectorType &v = toVector(); if (v.size() != 2) return false; - return (v[0].getDouble(x) && v[1].getDouble(y)); + + double rx, ry; + bool valid = ignoreInfinite + ? v[0]->getFiniteDouble(rx) && v[1]->getFiniteDouble(ry) + : v[0]->getDouble(rx) && v[1]->getDouble(ry); + + if (valid) { + x = rx; + y = ry; + } + + return valid; } bool Value::getVec3(double &x, double &y, double &z, double defaultval) const @@ -345,10 +388,10 @@ if (v.size() != 3) return false; } - return (v[0].getDouble(x) && v[1].getDouble(y) && v[2].getDouble(z)); + return (v[0]->getDouble(x) && v[1]->getDouble(y) && v[2]->getDouble(z)); } -Value::RangeType Value::toRange() const +RangeType Value::toRange() const { const RangeType *val = boost::get(&this->value); if (val) { @@ -455,7 +498,7 @@ Value operator()(const Value::VectorType &op1, const Value::VectorType &op2) const { Value::VectorType sum; for (size_t i = 0; i < op1.size() && i < op2.size(); i++) { - sum.push_back(op1[i] + op2[i]); + sum.push_back(ValuePtr(*op1[i] + *op2[i])); } return Value(sum); } @@ -480,7 +523,7 @@ Value operator()(const Value::VectorType &op1, const Value::VectorType &op2) const { Value::VectorType sum; for (size_t i = 0; i < op1.size() && i < op2.size(); i++) { - sum.push_back(op1[i] - op2[i]); + sum.push_back(ValuePtr(*op1[i] - *op2[i])); } return Value(sum); } @@ -495,54 +538,49 @@ { // Vector * Number VectorType dstv; - BOOST_FOREACH(const Value &val, vecval.toVector()) { - dstv.push_back(val * numval); + BOOST_FOREACH(const ValuePtr &val, vecval.toVector()) { + dstv.push_back(ValuePtr(*val * numval)); } return Value(dstv); } -Value Value::multmatvec(const Value &matrixval, const Value &vectorval) +Value Value::multmatvec(const VectorType &matrixvec, const VectorType &vectorvec) { - const VectorType &matrixvec = matrixval.toVector(); - const VectorType &vectorvec = vectorval.toVector(); - // Matrix * Vector VectorType dstv; for (size_t i=0;itype() != VECTOR || + matrixvec[i]->toVector().size() != vectorvec.size()) { return Value(); } double r_e = 0.0; - for (size_t j=0;jtoVector().size();j++) { + if (matrixvec[i]->toVector()[j]->type() != NUMBER || vectorvec[j]->type() != NUMBER) { return Value(); } - r_e += matrixvec[i].toVector()[j].toDouble() * vectorvec[j].toDouble(); + r_e += matrixvec[i]->toVector()[j]->toDouble() * vectorvec[j]->toDouble(); } - dstv.push_back(Value(r_e)); + dstv.push_back(ValuePtr(r_e)); } return Value(dstv); } -Value Value::multvecmat(const Value &vectorval, const Value &matrixval) +Value Value::multvecmat(const VectorType &vectorvec, const VectorType &matrixvec) { - const VectorType &vectorvec = vectorval.toVector(); - const VectorType &matrixvec = matrixval.toVector(); assert(vectorvec.size() == matrixvec.size()); // Vector * Matrix VectorType dstv; - for (size_t i=0;itoVector().size();i++) { double r_e = 0.0; for (size_t j=0;jtype() != VECTOR || + matrixvec[j]->toVector()[i]->type() != NUMBER || + vectorvec[j]->type() != NUMBER) { return Value::undefined; } - r_e += vectorvec[j].toDouble() * matrixvec[j].toVector()[i].toDouble(); + r_e += vectorvec[j]->toDouble() * matrixvec[j]->toVector()[i]->toDouble(); } - dstv.push_back(Value(r_e)); + dstv.push_back(ValuePtr(r_e)); } return Value(dstv); } @@ -561,29 +599,31 @@ else if (this->type() == VECTOR && v.type() == VECTOR) { const VectorType &vec1 = this->toVector(); const VectorType &vec2 = v.toVector(); - if (vec1[0].type() == NUMBER && vec2[0].type() == NUMBER && + if (vec1[0]->type() == NUMBER && vec2[0]->type() == NUMBER && vec1.size() == vec2.size()) { // Vector dot product. double r = 0.0; for (size_t i=0;itype() != NUMBER || vec2[i]->type() != NUMBER) { return Value::undefined; } - r += (vec1[i].toDouble() * vec2[i].toDouble()); + r += (vec1[i]->toDouble() * vec2[i]->toDouble()); } return Value(r); - } else if (vec1[0].type() == VECTOR && vec2[0].type() == NUMBER && - vec1[0].toVector().size() == vec2.size()) { + } else if (vec1[0]->type() == VECTOR && vec2[0]->type() == NUMBER && + vec1[0]->toVector().size() == vec2.size()) { return multmatvec(vec1, vec2); - } else if (vec1[0].type() == NUMBER && vec2[0].type() == VECTOR && + } else if (vec1[0]->type() == NUMBER && vec2[0]->type() == VECTOR && vec1.size() == vec2.size()) { return multvecmat(vec1, vec2); - } else if (vec1[0].type() == VECTOR && vec2[0].type() == VECTOR && - vec1[0].toVector().size() == vec2.size()) { + } else if (vec1[0]->type() == VECTOR && vec2[0]->type() == VECTOR && + vec1[0]->toVector().size() == vec2.size()) { // Matrix * Matrix VectorType dstv; - BOOST_FOREACH(const Value &srcrow, vec1) { - dstv.push_back(multvecmat(srcrow, vec2)); + BOOST_FOREACH(const ValuePtr &srcrow, vec1) { + const VectorType &srcrowvec = srcrow->toVector(); + if (srcrowvec.size() != vec2.size()) return Value::undefined; + dstv.push_back(ValuePtr(multvecmat(srcrowvec, vec2))); } return Value(dstv); } @@ -599,16 +639,16 @@ else if (this->type() == VECTOR && v.type() == NUMBER) { const VectorType &vec = this->toVector(); VectorType dstv; - BOOST_FOREACH(const Value &vecval, vec) { - dstv.push_back(vecval / v); + BOOST_FOREACH(const ValuePtr &vecval, vec) { + dstv.push_back(ValuePtr(*vecval / v)); } return Value(dstv); } else if (this->type() == NUMBER && v.type() == VECTOR) { const VectorType &vec = v.toVector(); VectorType dstv; - BOOST_FOREACH(const Value &vecval, vec) { - dstv.push_back(*this / vecval); + BOOST_FOREACH(const ValuePtr &vecval, vec) { + dstv.push_back(ValuePtr(*this / *vecval)); } return Value(dstv); } @@ -631,8 +671,8 @@ else if (this->type() == VECTOR) { const VectorType &vec = this->toVector(); VectorType dstv; - BOOST_FOREACH(const Value &vecval, vec) { - dstv.push_back(-vecval); + BOOST_FOREACH(const ValuePtr &vecval, vec) { + dstv.push_back(ValuePtr(-*vecval)); } return Value(dstv); } @@ -660,10 +700,10 @@ { public: Value operator()(const std::string &str, const double &idx) const { - int i = int(idx); Value v; - //Check that the index is positive and less than the size in bytes - if ((i >= 0) && (i < (int)str.size())) { + + const boost::uint32_t i = convert_to_uint32(idx); + if (i < str.size()) { //Ensure character (not byte) index is inside the character/glyph array if( (unsigned) i < g_utf8_strlen( str.c_str(), str.size() ) ) { gchar utf8_of_cp[6] = ""; //A buffer for a single unicode character to be copied into @@ -673,19 +713,19 @@ } v = std::string(utf8_of_cp); } - // std::cout << "bracket_visitor: " << v << "\n"; } return v; } Value operator()(const Value::VectorType &vec, const double &idx) const { - int i = int(idx); - if ((i >= 0) && (i < (int)vec.size())) return vec[int(idx)]; + const boost::uint32_t i = convert_to_uint32(idx); + if (i < vec.size()) return *vec[i]; return Value::undefined; } - Value operator()(const Value::RangeType &range, const double &idx) const { - switch(int(idx)) { + Value operator()(const RangeType &range, const double &idx) const { + const boost::uint32_t i = convert_to_uint32(idx); + switch(i) { case 0: return Value(range.begin_val); case 1: return Value(range.step_val); case 2: return Value(range.end_val); @@ -704,49 +744,52 @@ return boost::apply_visitor(bracket_visitor(), this->value, v.value); } -void Value::RangeType::normalize() { +void RangeType::normalize() { if ((step_val>0) && (end_val < begin_val)) { std::swap(begin_val,end_val); printDeprecation("Using ranges of the form [begin:end] with begin value greater than the end value is deprecated."); } } -boost::uint32_t Value::RangeType::nbsteps() const { - if (boost::math::isnan(step_val) || boost::math::isinf(begin_val) || (boost::math::isinf(end_val))) { +boost::uint32_t RangeType::numValues() const { + if (boost::math::isnan(begin_val) || boost::math::isnan(end_val) || boost::math::isnan(step_val)) { + return 0; + } + + if (boost::math::isinf(begin_val) || (boost::math::isinf(end_val))) { return std::numeric_limits::max(); } if ((begin_val == end_val) || boost::math::isinf(step_val)) { - return 0; + return 1; } if (step_val == 0) { return std::numeric_limits::max(); } - double steps; + double numvals; if (step_val < 0) { if (begin_val < end_val) { return 0; } - steps = (begin_val - end_val) / (-step_val); + numvals = (begin_val - end_val) / (-step_val) + 1; } else { if (begin_val > end_val) { return 0; } - steps = (end_val - begin_val) / step_val; + numvals = (end_val - begin_val) / step_val + 1; } - return steps; + return numvals; } -Value::RangeType::iterator::iterator(Value::RangeType &range, type_t type) : range(range), val(range.begin_val) +RangeType::iterator::iterator(RangeType &range, type_t type) : range(range), val(range.begin_val), type(type) { - this->type = type; update_type(); } -void Value::RangeType::iterator::update_type() +void RangeType::iterator::update_type() { if (range.step_val == 0) { type = RANGE_TYPE_END; @@ -759,19 +802,21 @@ type = RANGE_TYPE_END; } } + + if (boost::math::isnan(range.begin_val) || boost::math::isnan(range.end_val) || boost::math::isnan(range.step_val)) type = RANGE_TYPE_END; } -Value::RangeType::iterator::reference Value::RangeType::iterator::operator*() +RangeType::iterator::reference RangeType::iterator::operator*() { return val; } -Value::RangeType::iterator::pointer Value::RangeType::iterator::operator->() +RangeType::iterator::pointer RangeType::iterator::operator->() { return &(operator*()); } -Value::RangeType::iterator::self_type Value::RangeType::iterator::operator++() +RangeType::iterator::self_type RangeType::iterator::operator++() { if (type < 0) { type = RANGE_TYPE_RUNNING; @@ -781,14 +826,14 @@ return *this; } -Value::RangeType::iterator::self_type Value::RangeType::iterator::operator++(int) +RangeType::iterator::self_type RangeType::iterator::operator++(int) { self_type tmp(*this); operator++(); return tmp; } -bool Value::RangeType::iterator::operator==(const self_type &other) const +bool RangeType::iterator::operator==(const self_type &other) const { if (type == RANGE_TYPE_RUNNING) { return (type == other.type) && (val == other.val) && (range == other.range); @@ -797,7 +842,7 @@ } } -bool Value::RangeType::iterator::operator!=(const self_type &other) const +bool RangeType::iterator::operator!=(const self_type &other) const { return !(*this == other); } @@ -847,7 +892,7 @@ this->reset(new Value(v)); } -ValuePtr::ValuePtr(const Value::RangeType &v) +ValuePtr::ValuePtr(const RangeType &v) { this->reset(new Value(v)); } @@ -922,3 +967,12 @@ return ValuePtr(**this % *v); } +ValuePtr::operator bool() const +{ + return **this; +} + +const Value &ValuePtr::operator*() const +{ + return *this->get(); +} diff -Nru openscad-2015.03-1+dfsg/src/value.h openscad-2015.03-2+dfsg/src/value.h --- openscad-2015.03-1+dfsg/src/value.h 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/src/value.h 2015-11-17 09:43:41.000000000 +0000 @@ -29,75 +29,114 @@ }; std::ostream &operator<<(std::ostream &stream, const Filename &filename); -class Value -{ +class RangeType { +private: + double begin_val; + double step_val; + double end_val; + + /// inverse begin/end if begin is upper than end + void normalize(); + public: - class RangeType { - private: - double begin_val; - double step_val; - double end_val; - - /// inverse begin/end if begin is upper than end - void normalize(); - - public: - typedef enum { RANGE_TYPE_BEGIN, RANGE_TYPE_RUNNING, RANGE_TYPE_END } type_t; + typedef enum { RANGE_TYPE_BEGIN, RANGE_TYPE_RUNNING, RANGE_TYPE_END } type_t; + + class iterator { + public: + typedef iterator self_type; + typedef double value_type; + typedef double& reference; + typedef double* pointer; + typedef std::forward_iterator_tag iterator_category; + typedef double difference_type; + iterator(RangeType &range, type_t type); + self_type operator++(); + self_type operator++(int junk); + reference operator*(); + pointer operator->(); + bool operator==(const self_type& other) const; + bool operator!=(const self_type& other) const; + private: + RangeType ⦥ + double val; + type_t type; - class iterator { - public: - typedef iterator self_type; - typedef double value_type; - typedef double& reference; - typedef double* pointer; - typedef std::forward_iterator_tag iterator_category; - typedef double difference_type; - iterator(RangeType &range, type_t type); - self_type operator++(); - self_type operator++(int junk); - reference operator*(); - pointer operator->(); - bool operator==(const self_type& other) const; - bool operator!=(const self_type& other) const; - private: - RangeType ⦥ - double val; - type_t type; - - void update_type(); - }; - - RangeType(double begin, double end) - : begin_val(begin), step_val(1.0), end_val(end) + void update_type(); + }; + + RangeType(double begin, double end) + : begin_val(begin), step_val(1.0), end_val(end) { normalize(); } + + RangeType(double begin, double step, double end) + : begin_val(begin), step_val(step), end_val(end) {} + + bool operator==(const RangeType &other) const { + return this == &other || + (this->begin_val == other.begin_val && + this->step_val == other.step_val && + this->end_val == other.end_val); + } + + double begin_value() { return begin_val; } + double step_value() { return step_val; } + double end_value() { return end_val; } + + iterator begin() { return iterator(*this, RANGE_TYPE_BEGIN); } + iterator end() { return iterator(*this, RANGE_TYPE_END); } + + /// return number of values, max uint32_t value if step is 0 or range is infinite + boost::uint32_t numValues() const; + + friend class chr_visitor; + friend class tostring_visitor; + friend class bracket_visitor; +}; - RangeType(double begin, double step, double end) - : begin_val(begin), step_val(step), end_val(end) {} +class ValuePtr : public shared_ptr +{ +public: + static ValuePtr undefined; - bool operator==(const RangeType &other) const { - return this->begin_val == other.begin_val && - this->step_val == other.step_val && - this->end_val == other.end_val; - } + ValuePtr(); + explicit ValuePtr(const Value &v); + ValuePtr(bool v); + ValuePtr(int v); + ValuePtr(double v); + ValuePtr(const std::string &v); + ValuePtr(const char *v); + ValuePtr(const char v); + ValuePtr(const class std::vector &v); + ValuePtr(const class RangeType &v); - double begin_value() { return begin_val; } - double step_value() { return step_val; } - double end_value() { return end_val; } + operator bool() const; - iterator begin() { return iterator(*this, RANGE_TYPE_BEGIN); } - iterator end() { return iterator(*this, RANGE_TYPE_END); } + bool operator==(const ValuePtr &v) const; + bool operator!=(const ValuePtr &v) const; + bool operator<(const ValuePtr &v) const; + bool operator<=(const ValuePtr &v) const; + bool operator>=(const ValuePtr &v) const; + bool operator>(const ValuePtr &v) const; + ValuePtr operator-() const; + ValuePtr operator!() const; + ValuePtr operator[](const ValuePtr &v) const; + ValuePtr operator+(const ValuePtr &v) const; + ValuePtr operator-(const ValuePtr &v) const; + ValuePtr operator*(const ValuePtr &v) const; + ValuePtr operator/(const ValuePtr &v) const; + ValuePtr operator%(const ValuePtr &v) const; - /// return number of steps, max uint32_t value if step is 0 - boost::uint32_t nbsteps() const; - - friend class chr_visitor; - friend class tostring_visitor; - friend class bracket_visitor; - }; + const Value &operator*() const; - typedef std::vector VectorType; +private: +}; + +class Value +{ +public: + typedef std::vector VectorType; enum ValueType { UNDEFINED, @@ -127,11 +166,12 @@ double toDouble() const; bool getDouble(double &v) const; + bool getFiniteDouble(double &v) const; bool toBool() const; std::string toString() const; std::string chrString() const; const VectorType &toVector() const; - bool getVec2(double &x, double &y) const; + bool getVec2(double &x, double &y, bool ignoreInfinite = false) const; bool getVec3(double &x, double &y, double &z, double defaultval = 0.0) const; RangeType toRange() const; @@ -162,46 +202,9 @@ private: static Value multvecnum(const Value &vecval, const Value &numval); - static Value multmatvec(const Value &matrixval, const Value &vectorval); - static Value multvecmat(const Value &vectorval, const Value &matrixval); + static Value multmatvec(const VectorType &matrixvec, const VectorType &vectorvec); + static Value multvecmat(const VectorType &vectorvec, const VectorType &matrixvec); Variant value; }; -class ValuePtr : public shared_ptr -{ -public: - static ValuePtr undefined; - - ValuePtr(); - explicit ValuePtr(const Value &v); - ValuePtr(bool v); - ValuePtr(int v); - ValuePtr(double v); - ValuePtr(const std::string &v); - ValuePtr(const char *v); - ValuePtr(const char v); - ValuePtr(const Value::VectorType &v); - ValuePtr(const Value::RangeType &v); - - operator bool() const { return **this; } - - bool operator==(const ValuePtr &v) const; - bool operator!=(const ValuePtr &v) const; - bool operator<(const ValuePtr &v) const; - bool operator<=(const ValuePtr &v) const; - bool operator>=(const ValuePtr &v) const; - bool operator>(const ValuePtr &v) const; - ValuePtr operator-() const; - ValuePtr operator!() const; - ValuePtr operator[](const ValuePtr &v) const; - ValuePtr operator+(const ValuePtr &v) const; - ValuePtr operator-(const ValuePtr &v) const; - ValuePtr operator*(const ValuePtr &v) const; - ValuePtr operator/(const ValuePtr &v) const; - ValuePtr operator%(const ValuePtr &v) const; - - const Value &operator*() const { return *this->get(); } - -private: -}; diff -Nru openscad-2015.03-1+dfsg/testdata/scad/3D/features/linear_extrude-parameter-tests.scad openscad-2015.03-2+dfsg/testdata/scad/3D/features/linear_extrude-parameter-tests.scad --- openscad-2015.03-1+dfsg/testdata/scad/3D/features/linear_extrude-parameter-tests.scad 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/testdata/scad/3D/features/linear_extrude-parameter-tests.scad 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1,22 @@ +// test cases for linear extrude with various (invalid) parameters + +oz = 30; +params = [ [0, undef], [1, 1/0], [2, -1/0], [3, 0/0], [4, ""], [5, true], [6, [1:3]], [7, 3] ]; + +for (a = params) translate([-100, 0, oz * a[0]]) +color("red") linear_extrude(height = 10, convexity = a[1]) square(20); + +for (a = params) translate([-50, 0, oz * a[0]]) +color("yellow") linear_extrude(height = 10, convexity = undef, scale = 1, twist = a[1]) square(20); + +for (a = params) translate([0, 0, oz * a[0]]) +color("gray") linear_extrude(height = 10, convexity = undef, scale = 1, twist = 0, slices = a[1]) square(20); + +for (a = params) translate([50, 0, oz * a[0]]) +color("purple") linear_extrude(height = 10, convexity = undef, scale = 1, twist = 30, slices = a[1]) square(20); + +for (a = params) translate([100, 0, oz * a[0]]) +color("blue") linear_extrude(height = 10, convexity = 2, scale = a[1]) square(20); + +for (a = params) translate([(a[0] + 5) * 30, 0, 0]) +color("green") linear_extrude(height = a[1]) square(20); \ No newline at end of file diff -Nru openscad-2015.03-1+dfsg/testdata/scad/3D/features/primitive-inf-tests.scad openscad-2015.03-2+dfsg/testdata/scad/3D/features/primitive-inf-tests.scad --- openscad-2015.03-1+dfsg/testdata/scad/3D/features/primitive-inf-tests.scad 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/testdata/scad/3D/features/primitive-inf-tests.scad 2015-11-17 09:43:41.000000000 +0000 @@ -7,3 +7,6 @@ polygon([[0,0,0],[1,0,0],[1,1/0,0]]); polyhedron(points = [[1/0,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]], triangles = [[0,4,2],[0,2,5],[0,3,4],[0,5,3],[1,2,4],[1,5,2],[1,4,3], [1,3,5]]); + +cylinder($fn=1/0); +sphere($fn=1/0); diff -Nru openscad-2015.03-1+dfsg/testdata/scad/3D/issues/issue1325.scad openscad-2015.03-2+dfsg/testdata/scad/3D/issues/issue1325.scad --- openscad-2015.03-1+dfsg/testdata/scad/3D/issues/issue1325.scad 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/testdata/scad/3D/issues/issue1325.scad 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1,10 @@ +polyhedron(points = [ +[0, -4, 1], +[0, -5, 1], +[0, -5, 2], +[0, -4, 0] +], +faces = [ +[1, 2, 2, 1], +[0, 0, 3, 3] +]); diff -Nru openscad-2015.03-1+dfsg/testdata/scad/functions/rands.scad openscad-2015.03-2+dfsg/testdata/scad/functions/rands.scad --- openscad-2015.03-1+dfsg/testdata/scad/functions/rands.scad 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/testdata/scad/functions/rands.scad 2015-11-17 09:43:41.000000000 +0000 @@ -1,3 +1,4 @@ +// verify basic rands(), params are ( min, max, num_results, seed (optional) ); v1 = rands(0,0,0,0); v2 = rands(-10,0,20,0); v3 = rands(0,0,-20); @@ -32,4 +33,269 @@ v = rands(1,1,4); -echo( v ); \ No newline at end of file +echo( v ); + +echo( rands(1,2,3,4.1) ); +echo( rands(1,2,3,-4.1) ); +echo( rands(1,2,3,-4.1e100) ); +echo( rands(1,2,3,4.1e100) ); +echo( rands(1,2,3,-4.1e-100) ); +echo( rands(1,2,3,4.1e-100) ); + +// part 2 - verify seeded rands() behavior with bizarro infinite inputs +echo("rands(1/0,1/0,1/0,1/0)", rands(1/0,1/0,1/0,1/0)); +echo("rands(1/0,1/0,1/0,-1/0)", rands(1/0,1/0,1/0,-1/0)); +echo("rands(1/0,1/0,1/0,1.1)", rands(1/0,1/0,1/0,1.1)); +echo("rands(1/0,1/0,1/0,-1.1)", rands(1/0,1/0,1/0,-1.1)); +echo("rands(1/0,1/0,-1/0,1/0)", rands(1/0,1/0,-1/0,1/0)); +echo("rands(1/0,1/0,-1/0,-1/0)", rands(1/0,1/0,-1/0,-1/0)); +echo("rands(1/0,1/0,-1/0,1.1)", rands(1/0,1/0,-1/0,1.1)); +echo("rands(1/0,1/0,-1/0,-1.1)", rands(1/0,1/0,-1/0,-1.1)); +echo("rands(1/0,1/0,1.1,1/0)", rands(1/0,1/0,1.1,1/0)); +echo("rands(1/0,1/0,1.1,-1/0)", rands(1/0,1/0,1.1,-1/0)); +echo("rands(1/0,1/0,1.1,1.1)", rands(1/0,1/0,1.1,1.1)); +echo("rands(1/0,1/0,1.1,-1.1)", rands(1/0,1/0,1.1,-1.1)); +echo("rands(1/0,1/0,-1.1,1/0)", rands(1/0,1/0,-1.1,1/0)); +echo("rands(1/0,1/0,-1.1,-1/0)", rands(1/0,1/0,-1.1,-1/0)); +echo("rands(1/0,1/0,-1.1,1.1)", rands(1/0,1/0,-1.1,1.1)); +echo("rands(1/0,1/0,-1.1,-1.1)", rands(1/0,1/0,-1.1,-1.1)); +echo("rands(1/0,-1/0,1/0,1/0)", rands(1/0,-1/0,1/0,1/0)); +echo("rands(1/0,-1/0,1/0,-1/0)", rands(1/0,-1/0,1/0,-1/0)); +echo("rands(1/0,-1/0,1/0,1.1)", rands(1/0,-1/0,1/0,1.1)); +echo("rands(1/0,-1/0,1/0,-1.1)", rands(1/0,-1/0,1/0,-1.1)); +echo("rands(1/0,-1/0,-1/0,1/0)", rands(1/0,-1/0,-1/0,1/0)); +echo("rands(1/0,-1/0,-1/0,-1/0)", rands(1/0,-1/0,-1/0,-1/0)); +echo("rands(1/0,-1/0,-1/0,1.1)", rands(1/0,-1/0,-1/0,1.1)); +echo("rands(1/0,-1/0,-1/0,-1.1)", rands(1/0,-1/0,-1/0,-1.1)); +echo("rands(1/0,-1/0,1.1,1/0)", rands(1/0,-1/0,1.1,1/0)); +echo("rands(1/0,-1/0,1.1,-1/0)", rands(1/0,-1/0,1.1,-1/0)); +echo("rands(1/0,-1/0,1.1,1.1)", rands(1/0,-1/0,1.1,1.1)); +echo("rands(1/0,-1/0,1.1,-1.1)", rands(1/0,-1/0,1.1,-1.1)); +echo("rands(1/0,-1/0,-1.1,1/0)", rands(1/0,-1/0,-1.1,1/0)); +echo("rands(1/0,-1/0,-1.1,-1/0)", rands(1/0,-1/0,-1.1,-1/0)); +echo("rands(1/0,-1/0,-1.1,1.1)", rands(1/0,-1/0,-1.1,1.1)); +echo("rands(1/0,-1/0,-1.1,-1.1)", rands(1/0,-1/0,-1.1,-1.1)); +echo("rands(1/0,1.1,1/0,1/0)", rands(1/0,1.1,1/0,1/0)); +echo("rands(1/0,1.1,1/0,-1/0)", rands(1/0,1.1,1/0,-1/0)); +echo("rands(1/0,1.1,1/0,1.1)", rands(1/0,1.1,1/0,1.1)); +echo("rands(1/0,1.1,1/0,-1.1)", rands(1/0,1.1,1/0,-1.1)); +echo("rands(1/0,1.1,-1/0,1/0)", rands(1/0,1.1,-1/0,1/0)); +echo("rands(1/0,1.1,-1/0,-1/0)", rands(1/0,1.1,-1/0,-1/0)); +echo("rands(1/0,1.1,-1/0,1.1)", rands(1/0,1.1,-1/0,1.1)); +echo("rands(1/0,1.1,-1/0,-1.1)", rands(1/0,1.1,-1/0,-1.1)); +echo("rands(1/0,1.1,1.1,1/0)", rands(1/0,1.1,1.1,1/0)); +echo("rands(1/0,1.1,1.1,-1/0)", rands(1/0,1.1,1.1,-1/0)); +echo("rands(1/0,1.1,1.1,1.1)", rands(1/0,1.1,1.1,1.1)); +echo("rands(1/0,1.1,1.1,-1.1)", rands(1/0,1.1,1.1,-1.1)); +echo("rands(1/0,1.1,-1.1,1/0)", rands(1/0,1.1,-1.1,1/0)); +echo("rands(1/0,1.1,-1.1,-1/0)", rands(1/0,1.1,-1.1,-1/0)); +echo("rands(1/0,1.1,-1.1,1.1)", rands(1/0,1.1,-1.1,1.1)); +echo("rands(1/0,1.1,-1.1,-1.1)", rands(1/0,1.1,-1.1,-1.1)); +echo("rands(1/0,-1.1,1/0,1/0)", rands(1/0,-1.1,1/0,1/0)); +echo("rands(1/0,-1.1,1/0,-1/0)", rands(1/0,-1.1,1/0,-1/0)); +echo("rands(1/0,-1.1,1/0,1.1)", rands(1/0,-1.1,1/0,1.1)); +echo("rands(1/0,-1.1,1/0,-1.1)", rands(1/0,-1.1,1/0,-1.1)); +echo("rands(1/0,-1.1,-1/0,1/0)", rands(1/0,-1.1,-1/0,1/0)); +echo("rands(1/0,-1.1,-1/0,-1/0)", rands(1/0,-1.1,-1/0,-1/0)); +echo("rands(1/0,-1.1,-1/0,1.1)", rands(1/0,-1.1,-1/0,1.1)); +echo("rands(1/0,-1.1,-1/0,-1.1)", rands(1/0,-1.1,-1/0,-1.1)); +echo("rands(1/0,-1.1,1.1,1/0)", rands(1/0,-1.1,1.1,1/0)); +echo("rands(1/0,-1.1,1.1,-1/0)", rands(1/0,-1.1,1.1,-1/0)); +echo("rands(1/0,-1.1,1.1,1.1)", rands(1/0,-1.1,1.1,1.1)); +echo("rands(1/0,-1.1,1.1,-1.1)", rands(1/0,-1.1,1.1,-1.1)); +echo("rands(1/0,-1.1,-1.1,1/0)", rands(1/0,-1.1,-1.1,1/0)); +echo("rands(1/0,-1.1,-1.1,-1/0)", rands(1/0,-1.1,-1.1,-1/0)); +echo("rands(1/0,-1.1,-1.1,1.1)", rands(1/0,-1.1,-1.1,1.1)); +echo("rands(1/0,-1.1,-1.1,-1.1)", rands(1/0,-1.1,-1.1,-1.1)); +echo("rands(-1/0,1/0,1/0,1/0)", rands(-1/0,1/0,1/0,1/0)); +echo("rands(-1/0,1/0,1/0,-1/0)", rands(-1/0,1/0,1/0,-1/0)); +echo("rands(-1/0,1/0,1/0,1.1)", rands(-1/0,1/0,1/0,1.1)); +echo("rands(-1/0,1/0,1/0,-1.1)", rands(-1/0,1/0,1/0,-1.1)); +echo("rands(-1/0,1/0,-1/0,1/0)", rands(-1/0,1/0,-1/0,1/0)); +echo("rands(-1/0,1/0,-1/0,-1/0)", rands(-1/0,1/0,-1/0,-1/0)); +echo("rands(-1/0,1/0,-1/0,1.1)", rands(-1/0,1/0,-1/0,1.1)); +echo("rands(-1/0,1/0,-1/0,-1.1)", rands(-1/0,1/0,-1/0,-1.1)); +echo("rands(-1/0,1/0,1.1,1/0)", rands(-1/0,1/0,1.1,1/0)); +echo("rands(-1/0,1/0,1.1,-1/0)", rands(-1/0,1/0,1.1,-1/0)); +echo("rands(-1/0,1/0,1.1,1.1)", rands(-1/0,1/0,1.1,1.1)); +echo("rands(-1/0,1/0,1.1,-1.1)", rands(-1/0,1/0,1.1,-1.1)); +echo("rands(-1/0,1/0,-1.1,1/0)", rands(-1/0,1/0,-1.1,1/0)); +echo("rands(-1/0,1/0,-1.1,-1/0)", rands(-1/0,1/0,-1.1,-1/0)); +echo("rands(-1/0,1/0,-1.1,1.1)", rands(-1/0,1/0,-1.1,1.1)); +echo("rands(-1/0,1/0,-1.1,-1.1)", rands(-1/0,1/0,-1.1,-1.1)); +echo("rands(-1/0,-1/0,1/0,1/0)", rands(-1/0,-1/0,1/0,1/0)); +echo("rands(-1/0,-1/0,1/0,-1/0)", rands(-1/0,-1/0,1/0,-1/0)); +echo("rands(-1/0,-1/0,1/0,1.1)", rands(-1/0,-1/0,1/0,1.1)); +echo("rands(-1/0,-1/0,1/0,-1.1)", rands(-1/0,-1/0,1/0,-1.1)); +echo("rands(-1/0,-1/0,-1/0,1/0)", rands(-1/0,-1/0,-1/0,1/0)); +echo("rands(-1/0,-1/0,-1/0,-1/0)", rands(-1/0,-1/0,-1/0,-1/0)); +echo("rands(-1/0,-1/0,-1/0,1.1)", rands(-1/0,-1/0,-1/0,1.1)); +echo("rands(-1/0,-1/0,-1/0,-1.1)", rands(-1/0,-1/0,-1/0,-1.1)); +echo("rands(-1/0,-1/0,1.1,1/0)", rands(-1/0,-1/0,1.1,1/0)); +echo("rands(-1/0,-1/0,1.1,-1/0)", rands(-1/0,-1/0,1.1,-1/0)); +echo("rands(-1/0,-1/0,1.1,1.1)", rands(-1/0,-1/0,1.1,1.1)); +echo("rands(-1/0,-1/0,1.1,-1.1)", rands(-1/0,-1/0,1.1,-1.1)); +echo("rands(-1/0,-1/0,-1.1,1/0)", rands(-1/0,-1/0,-1.1,1/0)); +echo("rands(-1/0,-1/0,-1.1,-1/0)", rands(-1/0,-1/0,-1.1,-1/0)); +echo("rands(-1/0,-1/0,-1.1,1.1)", rands(-1/0,-1/0,-1.1,1.1)); +echo("rands(-1/0,-1/0,-1.1,-1.1)", rands(-1/0,-1/0,-1.1,-1.1)); +echo("rands(-1/0,1.1,1/0,1/0)", rands(-1/0,1.1,1/0,1/0)); +echo("rands(-1/0,1.1,1/0,-1/0)", rands(-1/0,1.1,1/0,-1/0)); +echo("rands(-1/0,1.1,1/0,1.1)", rands(-1/0,1.1,1/0,1.1)); +echo("rands(-1/0,1.1,1/0,-1.1)", rands(-1/0,1.1,1/0,-1.1)); +echo("rands(-1/0,1.1,-1/0,1/0)", rands(-1/0,1.1,-1/0,1/0)); +echo("rands(-1/0,1.1,-1/0,-1/0)", rands(-1/0,1.1,-1/0,-1/0)); +echo("rands(-1/0,1.1,-1/0,1.1)", rands(-1/0,1.1,-1/0,1.1)); +echo("rands(-1/0,1.1,-1/0,-1.1)", rands(-1/0,1.1,-1/0,-1.1)); +echo("rands(-1/0,1.1,1.1,1/0)", rands(-1/0,1.1,1.1,1/0)); +echo("rands(-1/0,1.1,1.1,-1/0)", rands(-1/0,1.1,1.1,-1/0)); +echo("rands(-1/0,1.1,1.1,1.1)", rands(-1/0,1.1,1.1,1.1)); +echo("rands(-1/0,1.1,1.1,-1.1)", rands(-1/0,1.1,1.1,-1.1)); +echo("rands(-1/0,1.1,-1.1,1/0)", rands(-1/0,1.1,-1.1,1/0)); +echo("rands(-1/0,1.1,-1.1,-1/0)", rands(-1/0,1.1,-1.1,-1/0)); +echo("rands(-1/0,1.1,-1.1,1.1)", rands(-1/0,1.1,-1.1,1.1)); +echo("rands(-1/0,1.1,-1.1,-1.1)", rands(-1/0,1.1,-1.1,-1.1)); +echo("rands(-1/0,-1.1,1/0,1/0)", rands(-1/0,-1.1,1/0,1/0)); +echo("rands(-1/0,-1.1,1/0,-1/0)", rands(-1/0,-1.1,1/0,-1/0)); +echo("rands(-1/0,-1.1,1/0,1.1)", rands(-1/0,-1.1,1/0,1.1)); +echo("rands(-1/0,-1.1,1/0,-1.1)", rands(-1/0,-1.1,1/0,-1.1)); +echo("rands(-1/0,-1.1,-1/0,1/0)", rands(-1/0,-1.1,-1/0,1/0)); +echo("rands(-1/0,-1.1,-1/0,-1/0)", rands(-1/0,-1.1,-1/0,-1/0)); +echo("rands(-1/0,-1.1,-1/0,1.1)", rands(-1/0,-1.1,-1/0,1.1)); +echo("rands(-1/0,-1.1,-1/0,-1.1)", rands(-1/0,-1.1,-1/0,-1.1)); +echo("rands(-1/0,-1.1,1.1,1/0)", rands(-1/0,-1.1,1.1,1/0)); +echo("rands(-1/0,-1.1,1.1,-1/0)", rands(-1/0,-1.1,1.1,-1/0)); +echo("rands(-1/0,-1.1,1.1,1.1)", rands(-1/0,-1.1,1.1,1.1)); +echo("rands(-1/0,-1.1,1.1,-1.1)", rands(-1/0,-1.1,1.1,-1.1)); +echo("rands(-1/0,-1.1,-1.1,1/0)", rands(-1/0,-1.1,-1.1,1/0)); +echo("rands(-1/0,-1.1,-1.1,-1/0)", rands(-1/0,-1.1,-1.1,-1/0)); +echo("rands(-1/0,-1.1,-1.1,1.1)", rands(-1/0,-1.1,-1.1,1.1)); +echo("rands(-1/0,-1.1,-1.1,-1.1)", rands(-1/0,-1.1,-1.1,-1.1)); +echo("rands(1.1,1/0,1/0,1/0)", rands(1.1,1/0,1/0,1/0)); +echo("rands(1.1,1/0,1/0,-1/0)", rands(1.1,1/0,1/0,-1/0)); +echo("rands(1.1,1/0,1/0,1.1)", rands(1.1,1/0,1/0,1.1)); +echo("rands(1.1,1/0,1/0,-1.1)", rands(1.1,1/0,1/0,-1.1)); +echo("rands(1.1,1/0,-1/0,1/0)", rands(1.1,1/0,-1/0,1/0)); +echo("rands(1.1,1/0,-1/0,-1/0)", rands(1.1,1/0,-1/0,-1/0)); +echo("rands(1.1,1/0,-1/0,1.1)", rands(1.1,1/0,-1/0,1.1)); +echo("rands(1.1,1/0,-1/0,-1.1)", rands(1.1,1/0,-1/0,-1.1)); +echo("rands(1.1,1/0,1.1,1/0)", rands(1.1,1/0,1.1,1/0)); +echo("rands(1.1,1/0,1.1,-1/0)", rands(1.1,1/0,1.1,-1/0)); +echo("rands(1.1,1/0,1.1,1.1)", rands(1.1,1/0,1.1,1.1)); +echo("rands(1.1,1/0,1.1,-1.1)", rands(1.1,1/0,1.1,-1.1)); +echo("rands(1.1,1/0,-1.1,1/0)", rands(1.1,1/0,-1.1,1/0)); +echo("rands(1.1,1/0,-1.1,-1/0)", rands(1.1,1/0,-1.1,-1/0)); +echo("rands(1.1,1/0,-1.1,1.1)", rands(1.1,1/0,-1.1,1.1)); +echo("rands(1.1,1/0,-1.1,-1.1)", rands(1.1,1/0,-1.1,-1.1)); +echo("rands(1.1,-1/0,1/0,1/0)", rands(1.1,-1/0,1/0,1/0)); +echo("rands(1.1,-1/0,1/0,-1/0)", rands(1.1,-1/0,1/0,-1/0)); +echo("rands(1.1,-1/0,1/0,1.1)", rands(1.1,-1/0,1/0,1.1)); +echo("rands(1.1,-1/0,1/0,-1.1)", rands(1.1,-1/0,1/0,-1.1)); +echo("rands(1.1,-1/0,-1/0,1/0)", rands(1.1,-1/0,-1/0,1/0)); +echo("rands(1.1,-1/0,-1/0,-1/0)", rands(1.1,-1/0,-1/0,-1/0)); +echo("rands(1.1,-1/0,-1/0,1.1)", rands(1.1,-1/0,-1/0,1.1)); +echo("rands(1.1,-1/0,-1/0,-1.1)", rands(1.1,-1/0,-1/0,-1.1)); +echo("rands(1.1,-1/0,1.1,1/0)", rands(1.1,-1/0,1.1,1/0)); +echo("rands(1.1,-1/0,1.1,-1/0)", rands(1.1,-1/0,1.1,-1/0)); +echo("rands(1.1,-1/0,1.1,1.1)", rands(1.1,-1/0,1.1,1.1)); +echo("rands(1.1,-1/0,1.1,-1.1)", rands(1.1,-1/0,1.1,-1.1)); +echo("rands(1.1,-1/0,-1.1,1/0)", rands(1.1,-1/0,-1.1,1/0)); +echo("rands(1.1,-1/0,-1.1,-1/0)", rands(1.1,-1/0,-1.1,-1/0)); +echo("rands(1.1,-1/0,-1.1,1.1)", rands(1.1,-1/0,-1.1,1.1)); +echo("rands(1.1,-1/0,-1.1,-1.1)", rands(1.1,-1/0,-1.1,-1.1)); +echo("rands(1.1,1.1,1/0,1/0)", rands(1.1,1.1,1/0,1/0)); +echo("rands(1.1,1.1,1/0,-1/0)", rands(1.1,1.1,1/0,-1/0)); +echo("rands(1.1,1.1,1/0,1.1)", rands(1.1,1.1,1/0,1.1)); +echo("rands(1.1,1.1,1/0,-1.1)", rands(1.1,1.1,1/0,-1.1)); +echo("rands(1.1,1.1,-1/0,1/0)", rands(1.1,1.1,-1/0,1/0)); +echo("rands(1.1,1.1,-1/0,-1/0)", rands(1.1,1.1,-1/0,-1/0)); +echo("rands(1.1,1.1,-1/0,1.1)", rands(1.1,1.1,-1/0,1.1)); +echo("rands(1.1,1.1,-1/0,-1.1)", rands(1.1,1.1,-1/0,-1.1)); +echo("rands(1.1,1.1,1.1,1/0)", rands(1.1,1.1,1.1,1/0)); +echo("rands(1.1,1.1,1.1,-1/0)", rands(1.1,1.1,1.1,-1/0)); +echo("rands(1.1,1.1,1.1,1.1)", rands(1.1,1.1,1.1,1.1)); +echo("rands(1.1,1.1,1.1,-1.1)", rands(1.1,1.1,1.1,-1.1)); +echo("rands(1.1,1.1,-1.1,1/0)", rands(1.1,1.1,-1.1,1/0)); +echo("rands(1.1,1.1,-1.1,-1/0)", rands(1.1,1.1,-1.1,-1/0)); +echo("rands(1.1,1.1,-1.1,1.1)", rands(1.1,1.1,-1.1,1.1)); +echo("rands(1.1,1.1,-1.1,-1.1)", rands(1.1,1.1,-1.1,-1.1)); +echo("rands(1.1,-1.1,1/0,1/0)", rands(1.1,-1.1,1/0,1/0)); +echo("rands(1.1,-1.1,1/0,-1/0)", rands(1.1,-1.1,1/0,-1/0)); +echo("rands(1.1,-1.1,1/0,1.1)", rands(1.1,-1.1,1/0,1.1)); +echo("rands(1.1,-1.1,1/0,-1.1)", rands(1.1,-1.1,1/0,-1.1)); +echo("rands(1.1,-1.1,-1/0,1/0)", rands(1.1,-1.1,-1/0,1/0)); +echo("rands(1.1,-1.1,-1/0,-1/0)", rands(1.1,-1.1,-1/0,-1/0)); +echo("rands(1.1,-1.1,-1/0,1.1)", rands(1.1,-1.1,-1/0,1.1)); +echo("rands(1.1,-1.1,-1/0,-1.1)", rands(1.1,-1.1,-1/0,-1.1)); +echo("rands(1.1,-1.1,1.1,1/0)", rands(1.1,-1.1,1.1,1/0)); +echo("rands(1.1,-1.1,1.1,-1/0)", rands(1.1,-1.1,1.1,-1/0)); +echo("rands(1.1,-1.1,1.1,1.1)", rands(1.1,-1.1,1.1,1.1)); +echo("rands(1.1,-1.1,1.1,-1.1)", rands(1.1,-1.1,1.1,-1.1)); +echo("rands(1.1,-1.1,-1.1,1/0)", rands(1.1,-1.1,-1.1,1/0)); +echo("rands(1.1,-1.1,-1.1,-1/0)", rands(1.1,-1.1,-1.1,-1/0)); +echo("rands(1.1,-1.1,-1.1,1.1)", rands(1.1,-1.1,-1.1,1.1)); +echo("rands(1.1,-1.1,-1.1,-1.1)", rands(1.1,-1.1,-1.1,-1.1)); +echo("rands(-1.1,1/0,1/0,1/0)", rands(-1.1,1/0,1/0,1/0)); +echo("rands(-1.1,1/0,1/0,-1/0)", rands(-1.1,1/0,1/0,-1/0)); +echo("rands(-1.1,1/0,1/0,1.1)", rands(-1.1,1/0,1/0,1.1)); +echo("rands(-1.1,1/0,1/0,-1.1)", rands(-1.1,1/0,1/0,-1.1)); +echo("rands(-1.1,1/0,-1/0,1/0)", rands(-1.1,1/0,-1/0,1/0)); +echo("rands(-1.1,1/0,-1/0,-1/0)", rands(-1.1,1/0,-1/0,-1/0)); +echo("rands(-1.1,1/0,-1/0,1.1)", rands(-1.1,1/0,-1/0,1.1)); +echo("rands(-1.1,1/0,-1/0,-1.1)", rands(-1.1,1/0,-1/0,-1.1)); +echo("rands(-1.1,1/0,1.1,1/0)", rands(-1.1,1/0,1.1,1/0)); +echo("rands(-1.1,1/0,1.1,-1/0)", rands(-1.1,1/0,1.1,-1/0)); +echo("rands(-1.1,1/0,1.1,1.1)", rands(-1.1,1/0,1.1,1.1)); +echo("rands(-1.1,1/0,1.1,-1.1)", rands(-1.1,1/0,1.1,-1.1)); +echo("rands(-1.1,1/0,-1.1,1/0)", rands(-1.1,1/0,-1.1,1/0)); +echo("rands(-1.1,1/0,-1.1,-1/0)", rands(-1.1,1/0,-1.1,-1/0)); +echo("rands(-1.1,1/0,-1.1,1.1)", rands(-1.1,1/0,-1.1,1.1)); +echo("rands(-1.1,1/0,-1.1,-1.1)", rands(-1.1,1/0,-1.1,-1.1)); +echo("rands(-1.1,-1/0,1/0,1/0)", rands(-1.1,-1/0,1/0,1/0)); +echo("rands(-1.1,-1/0,1/0,-1/0)", rands(-1.1,-1/0,1/0,-1/0)); +echo("rands(-1.1,-1/0,1/0,1.1)", rands(-1.1,-1/0,1/0,1.1)); +echo("rands(-1.1,-1/0,1/0,-1.1)", rands(-1.1,-1/0,1/0,-1.1)); +echo("rands(-1.1,-1/0,-1/0,1/0)", rands(-1.1,-1/0,-1/0,1/0)); +echo("rands(-1.1,-1/0,-1/0,-1/0)", rands(-1.1,-1/0,-1/0,-1/0)); +echo("rands(-1.1,-1/0,-1/0,1.1)", rands(-1.1,-1/0,-1/0,1.1)); +echo("rands(-1.1,-1/0,-1/0,-1.1)", rands(-1.1,-1/0,-1/0,-1.1)); +echo("rands(-1.1,-1/0,1.1,1/0)", rands(-1.1,-1/0,1.1,1/0)); +echo("rands(-1.1,-1/0,1.1,-1/0)", rands(-1.1,-1/0,1.1,-1/0)); +echo("rands(-1.1,-1/0,1.1,1.1)", rands(-1.1,-1/0,1.1,1.1)); +echo("rands(-1.1,-1/0,1.1,-1.1)", rands(-1.1,-1/0,1.1,-1.1)); +echo("rands(-1.1,-1/0,-1.1,1/0)", rands(-1.1,-1/0,-1.1,1/0)); +echo("rands(-1.1,-1/0,-1.1,-1/0)", rands(-1.1,-1/0,-1.1,-1/0)); +echo("rands(-1.1,-1/0,-1.1,1.1)", rands(-1.1,-1/0,-1.1,1.1)); +echo("rands(-1.1,-1/0,-1.1,-1.1)", rands(-1.1,-1/0,-1.1,-1.1)); +echo("rands(-1.1,1.1,1/0,1/0)", rands(-1.1,1.1,1/0,1/0)); +echo("rands(-1.1,1.1,1/0,-1/0)", rands(-1.1,1.1,1/0,-1/0)); +echo("rands(-1.1,1.1,1/0,1.1)", rands(-1.1,1.1,1/0,1.1)); +echo("rands(-1.1,1.1,1/0,-1.1)", rands(-1.1,1.1,1/0,-1.1)); +echo("rands(-1.1,1.1,-1/0,1/0)", rands(-1.1,1.1,-1/0,1/0)); +echo("rands(-1.1,1.1,-1/0,-1/0)", rands(-1.1,1.1,-1/0,-1/0)); +echo("rands(-1.1,1.1,-1/0,1.1)", rands(-1.1,1.1,-1/0,1.1)); +echo("rands(-1.1,1.1,-1/0,-1.1)", rands(-1.1,1.1,-1/0,-1.1)); +echo("rands(-1.1,1.1,1.1,1/0)", rands(-1.1,1.1,1.1,1/0)); +echo("rands(-1.1,1.1,1.1,-1/0)", rands(-1.1,1.1,1.1,-1/0)); +echo("rands(-1.1,1.1,1.1,1.1)", rands(-1.1,1.1,1.1,1.1)); +echo("rands(-1.1,1.1,1.1,-1.1)", rands(-1.1,1.1,1.1,-1.1)); +echo("rands(-1.1,1.1,-1.1,1/0)", rands(-1.1,1.1,-1.1,1/0)); +echo("rands(-1.1,1.1,-1.1,-1/0)", rands(-1.1,1.1,-1.1,-1/0)); +echo("rands(-1.1,1.1,-1.1,1.1)", rands(-1.1,1.1,-1.1,1.1)); +echo("rands(-1.1,1.1,-1.1,-1.1)", rands(-1.1,1.1,-1.1,-1.1)); +echo("rands(-1.1,-1.1,1/0,1/0)", rands(-1.1,-1.1,1/0,1/0)); +echo("rands(-1.1,-1.1,1/0,-1/0)", rands(-1.1,-1.1,1/0,-1/0)); +echo("rands(-1.1,-1.1,1/0,1.1)", rands(-1.1,-1.1,1/0,1.1)); +echo("rands(-1.1,-1.1,1/0,-1.1)", rands(-1.1,-1.1,1/0,-1.1)); +echo("rands(-1.1,-1.1,-1/0,1/0)", rands(-1.1,-1.1,-1/0,1/0)); +echo("rands(-1.1,-1.1,-1/0,-1/0)", rands(-1.1,-1.1,-1/0,-1/0)); +echo("rands(-1.1,-1.1,-1/0,1.1)", rands(-1.1,-1.1,-1/0,1.1)); +echo("rands(-1.1,-1.1,-1/0,-1.1)", rands(-1.1,-1.1,-1/0,-1.1)); +echo("rands(-1.1,-1.1,1.1,1/0)", rands(-1.1,-1.1,1.1,1/0)); +echo("rands(-1.1,-1.1,1.1,-1/0)", rands(-1.1,-1.1,1.1,-1/0)); +echo("rands(-1.1,-1.1,1.1,1.1)", rands(-1.1,-1.1,1.1,1.1)); +echo("rands(-1.1,-1.1,1.1,-1.1)", rands(-1.1,-1.1,1.1,-1.1)); +echo("rands(-1.1,-1.1,-1.1,1/0)", rands(-1.1,-1.1,-1.1,1/0)); +echo("rands(-1.1,-1.1,-1.1,-1/0)", rands(-1.1,-1.1,-1.1,-1/0)); +echo("rands(-1.1,-1.1,-1.1,1.1)", rands(-1.1,-1.1,-1.1,1.1)); +echo("rands(-1.1,-1.1,-1.1,-1.1)", rands(-1.1,-1.1,-1.1,-1.1)); diff -Nru openscad-2015.03-1+dfsg/testdata/scad/issues/issue1472.scad openscad-2015.03-2+dfsg/testdata/scad/issues/issue1472.scad --- openscad-2015.03-1+dfsg/testdata/scad/issues/issue1472.scad 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/testdata/scad/issues/issue1472.scad 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1,9 @@ +// Test for module with NaN arg +module infiniteLoop() infiniteLoop(); +for (i=[0:sqrt(-1)]) infiniteLoop(); + +// Test list comprehension for with NaN arg +function infiniteFunc() = infiniteFunc(); +a = [for (i=[0:sqrt(-1)]) infiniteFunc()]; + +echo("OK"); diff -Nru openscad-2015.03-1+dfsg/testdata/scad/misc/recursion-test-vector.scad openscad-2015.03-2+dfsg/testdata/scad/misc/recursion-test-vector.scad --- openscad-2015.03-1+dfsg/testdata/scad/misc/recursion-test-vector.scad 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/testdata/scad/misc/recursion-test-vector.scad 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1,9 @@ +// Test for recursion crashing when vectors are parameters to a module +// See github issue1407 + +rec(); + +module rec(a=1) +{ + rec([a,10,10]); +} diff -Nru openscad-2015.03-1+dfsg/testdata/scad/misc/vector-values.scad openscad-2015.03-2+dfsg/testdata/scad/misc/vector-values.scad --- openscad-2015.03-1+dfsg/testdata/scad/misc/vector-values.scad 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/testdata/scad/misc/vector-values.scad 2015-11-17 09:43:41.000000000 +0000 @@ -37,4 +37,9 @@ echo(str(" Bounds check: ",ma5*ma4)); +ma6=[ [ 1, 2 ], undef ]; +mb6=[ [ 4 ], [ 5 ] ]; +echo(str("Testing matrix * matrix with undef elements: ",ma6*mb6)); + + cube(1.0); diff -Nru openscad-2015.03-1+dfsg/tests/CMakeLists.txt openscad-2015.03-2+dfsg/tests/CMakeLists.txt --- openscad-2015.03-1+dfsg/tests/CMakeLists.txt 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/CMakeLists.txt 2015-11-17 09:43:41.000000000 +0000 @@ -571,7 +571,7 @@ # Handle OpenSCAD version based on VERSION env. variable. # Use current timestamp if not specified (development builds) -set(ENV{VERSION} "2015.03-1") +set(ENV{VERSION} "2015.03-2") if ("$ENV{VERSION}" STREQUAL "") # Timestamp is only available in cmake >= 2.8.11 if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_GREATER 2.8.10) @@ -803,27 +803,20 @@ # # GUI binary tests # -#if(APPLE) +#if(EXISTS "$ENV{OPENSCAD_BINARY}") +# set(OPENSCAD_BINPATH "$ENV{OPENSCAD_BINARY}") +#elseif(APPLE) # set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../OpenSCAD.app/Contents/MacOS/OpenSCAD") #elseif (MINGW_CROSS_ENV_DIR) # set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../mingw32/release/openscad.exe") #elseif(WIN32) # set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../Release/openscad.exe") -#else() +#elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR/../openscad}") +# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../bin/openscad") +#elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR/../bin/openscad}") # set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../openscad") #endif() -#if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/openscad") -# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad") -#endif() - -#if(EXISTS "${OPENSCAD_BINPATH}") -# message(STATUS "Found OpenSCAD binary: ${OPENSCAD_BINPATH}") -#else() -# message(STATUS "Couldn't find the OpenSCAD binary: ${OPENSCAD_BINPATH}") -# message(FATAL_ERROR "Please build the OpenSCAD binary and place it here: ${OPENSCAD_BINPATH}" ) -#endif() - if(WIN32) set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad_nogui.exe") else() @@ -1086,6 +1079,7 @@ ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/recursion-test-function.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/recursion-test-function2.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/recursion-test-module.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/recursion-test-vector.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/tail-recursion-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/value-reassignment-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/value-reassignment-tests2.scad @@ -1105,6 +1099,7 @@ ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-recursive-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/operators-tests.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/issues/issue1472.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/empty-stl.scad) list(APPEND DUMPTEST_FILES ${FEATURES_2D_FILES} ${FEATURES_3D_FILES} ${DEPRECATED_3D_FILES}) @@ -1292,7 +1287,8 @@ ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue945e.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1223.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1223b.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1246.scad) + ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1246.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1455.scad) # We know that we cannot import weakly manifold files into CGAL, so to make tests easier # to manage, don't try. Once we improve import, we can reenable this Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/cgalpngtest/issue1325-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/cgalpngtest/issue1325-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/cgalpngtest/linear_extrude-parameter-tests-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/cgalpngtest/linear_extrude-parameter-tests-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/cgalpngtest/primitive-inf-tests-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/cgalpngtest/primitive-inf-tests-expected.png differ diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/allmodules-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/allmodules-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/allmodules-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/allmodules-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -40,5 +40,5 @@ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); color([-1, -1, -1, 1]); offset(r = 1, $fn = 0, $fa = 12, $fs = 2); - text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/linear_extrude-parameter-tests-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/linear_extrude-parameter-tests-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/linear_extrude-parameter-tests-expected.csg 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/linear_extrude-parameter-tests-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1,350 @@ +group() { + group() { + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 60], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 90], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 120], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 150], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 180], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, 210], [0, 0, 0, 1]]) { + color([1, 0, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + } + group() { + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 60], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 90], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 120], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 150], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 180], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 210], [0, 0, 0, 1]]) { + color([1, 1, 0, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 3, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + } + group() { + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 60], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 90], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 120], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 150], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 180], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 210], [0, 0, 0, 1]]) { + color([0.501961, 0.501961, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, slices = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + } + group() { + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 60], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 90], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 120], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 150], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 180], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 210], [0, 0, 0, 1]]) { + color([0.501961, 0, 0.501961, 1]) { + linear_extrude(height = 10, center = false, convexity = 1, twist = 30, slices = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + } + group() { + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 60], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 90], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 120], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 150], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 180], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 210], [0, 0, 0, 1]]) { + color([0, 0, 1, 1]) { + linear_extrude(height = 10, center = false, convexity = 2, scale = [3, 3], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + } + group() { + multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 180], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 210], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 240], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 270], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 300], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 330], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + multmatrix([[1, 0, 0, 360], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + color([0, 0.501961, 0, 1]) { + linear_extrude(height = 3, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + square(size = [20, 20], center = false); + } + } + } + } +} diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/primitive-inf-tests-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/primitive-inf-tests-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/primitive-inf-tests-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/primitive-inf-tests-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -7,4 +7,6 @@ sphere($fn = 0, $fa = 12, $fs = 2, r = inf); polygon(points = [[0, 0, 0], [1, 0, 0], [1, inf, 0]], paths = undef, convexity = 1); polyhedron(points = [[inf, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]], faces = [[0, 4, 2], [0, 2, 5], [0, 3, 4], [0, 5, 3], [1, 2, 4], [1, 5, 2], [1, 4, 3], [1, 3, 5]], convexity = 1); + cylinder($fn = inf, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); + sphere($fn = inf, $fa = 12, $fs = 2, r = 1); } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/tessellation-text-test-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/tessellation-text-test-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/tessellation-text-test-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/tessellation-text-test-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -1,21 +1,21 @@ group() { linear_extrude(height = 10, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { group() { - text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 8, $fa = 12, $fs = 2); + text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 8, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { - text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); + text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { - text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 24, $fa = 12, $fs = 2); + text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 24, $fa = 12, $fs = 2); } } multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { - text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 32, $fa = 12, $fs = 2); + text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 32, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/text-empty-tests-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/text-empty-tests-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/text-empty-tests-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/text-empty-tests-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -1,4 +1,4 @@ group() { - text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); - text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-alignment-tests-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-alignment-tests-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-alignment-tests-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-alignment-tests-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -7,7 +7,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "top", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "top", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -16,7 +16,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "center", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "center", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -25,7 +25,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 100], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -34,7 +34,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "bottom", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "bottom", $fn = 0, $fa = 12, $fs = 2); } } group() { @@ -45,7 +45,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 249.2], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -54,7 +54,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 316.1], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -63,7 +63,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "right", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "right", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-composition-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-composition-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-composition-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-composition-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -1,3 +1,3 @@ group() { - text(text = "Å", size = 40, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "Å", size = 40, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-direction-tests-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-direction-tests-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-direction-tests-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-direction-tests-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -7,7 +7,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltl", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 90], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -16,7 +16,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "rtl", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "rtl", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 160], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -25,7 +25,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ttb", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ttb", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 60], [0, 1, 0, 140], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -34,7 +34,7 @@ color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "btt", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "btt", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-simple-tests-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-simple-tests-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-simple-tests-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-simple-tests-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -1,3 +1,3 @@ group() { - text(text = "T-X-U", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 2, $fa = 12, $fs = 2); + text(text = "T-X-U", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 2, $fa = 12, $fs = 2); } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-symbol-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-symbol-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-symbol-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-symbol-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -2,35 +2,35 @@ group() { group() { multmatrix([[1, 0, 0, -180], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "0123", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "0123", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -180], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "ABCD", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "ABCD", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -180], [0, 1, 0, 130], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "abcd", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "abcd", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "0123", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "0123", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "ABCD", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "ABCD", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 130], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "abcd", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "abcd", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } group() { multmatrix([[1, 0, 0, 180], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "0123", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "0123", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 180], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "ABCD", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "ABCD", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 180], [0, 1, 0, 130], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "abcd", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "abcd", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-tests-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-tests-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest/text-font-tests-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest/text-font-tests-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -1,20 +1,20 @@ group() { multmatrix([[0.70710678118, 0.5, -0.5, 0], [-0.70710678118, 0.5, -0.5, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "arabic", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "Arab", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } - text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "arabic", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "Arab", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, 0], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "типографика", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "ru", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "типографика", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "ru", script = "Cyrl", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -80], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "positional", size = 30, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "positional", size = 30, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -100], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "parameters", size = 12, spacing = 1, font = "Amiri:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "parameters", size = 12, spacing = 1, font = "Amiri:style=Regular", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/children-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/children-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/children-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/children-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -185,7 +185,7 @@ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -205,7 +205,7 @@ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -225,7 +225,7 @@ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -245,7 +245,7 @@ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/children_indexed-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/children_indexed-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/children_indexed-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/children_indexed-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -4,7 +4,7 @@ group() { group() { linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "Nothing...", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "Nothing...", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -15,7 +15,7 @@ group() { group() { linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "one object", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "one object", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } group() { group() { @@ -35,7 +35,7 @@ group() { group() { linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "2 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "2 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } group() { group() { @@ -72,7 +72,7 @@ group() { group() { linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "3 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "3 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } group() { group() { diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/GEB-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/GEB-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/GEB-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/GEB-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -5,7 +5,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) { - text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -13,7 +13,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -22,7 +22,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -41,7 +41,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) { - text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -49,7 +49,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -58,7 +58,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -85,7 +85,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) { - text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -93,7 +93,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -102,7 +102,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -131,7 +131,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) { - text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -139,7 +139,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } @@ -148,7 +148,7 @@ linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) { group() { offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) { - text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); + text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/LetterBlock-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/LetterBlock-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/LetterBlock-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/LetterBlock-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -6,7 +6,7 @@ } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) { linear_extrude(height = 30, center = false, convexity = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "M", size = 22, spacing = 1, font = "Bitstream Vera Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 0, $fa = 12, $fs = 2); + text(text = "M", size = 22, spacing = 1, font = "Bitstream Vera Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 0, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/logo_and_text-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/logo_and_text-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/logo_and_text-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/logo_and_text-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -23,7 +23,7 @@ group() { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "Open", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); + text(text = "Open", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); } } } @@ -38,7 +38,7 @@ group() { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "SCAD", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); + text(text = "SCAD", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); } } } @@ -53,7 +53,7 @@ group() { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "The Programmers", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); + text(text = "The Programmers", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); } } } @@ -68,7 +68,7 @@ group() { multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "Solid 3D CAD Modeller", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); + text(text = "Solid 3D CAD Modeller", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/polygon_areas-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/polygon_areas-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/polygon_areas-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/polygon_areas-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -1,7 +1,7 @@ group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { - text(text = "Areas:", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "Areas:", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } multmatrix([[1, 0, 0, -44], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { @@ -9,7 +9,7 @@ polygon(points = [[10, 0], [-5, 8.66025403784], [-5, -8.66025403784]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 1, 1]) { - text(text = "130", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "130", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -19,7 +19,7 @@ polygon(points = [[10, 0], [0, 10], [-10, 0], [0, -10]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 1, 1]) { - text(text = "200", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "200", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -29,7 +29,7 @@ polygon(points = [[10, 0], [5, 8.66025403784], [-5, 8.66025403784], [-10, 0], [-5, -8.66025403784], [5, -8.66025403784]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 1, 1]) { - text(text = "260", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "260", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -39,7 +39,7 @@ polygon(points = [[10, 0], [8.09016994374, 5.87785252292], [3.09016994374, 9.51056516295], [-3.09016994374, 9.51056516295], [-8.09016994374, 5.87785252292], [-10, 0], [-8.09016994374, -5.87785252292], [-3.09016994374, -9.51056516295], [3.09016994374, -9.51056516295], [8.09016994374, -5.87785252292]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 1, 1]) { - text(text = "294", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "294", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } @@ -49,7 +49,7 @@ polygon(points = [[10, 0], [9.99847695156, 0.17452406437], [9.99390827019, 0.34899496702], [9.98629534754, 0.52335956242], [9.97564050259, 0.69756473744], [9.96194698091, 0.87155742747], [9.94521895368, 1.04528463267], [9.92546151641, 1.21869343405], [9.90268068741, 1.3917310096], [9.87688340595, 1.5643446504], [9.84807753012, 1.73648177666], [9.81627183447, 1.90808995376], [9.78147600733, 2.07911690817], [9.74370064785, 2.24951054343], [9.70295726276, 2.41921895599], [9.65925826289, 2.58819045102], [9.61261695938, 2.75637355817], [9.56304755963, 2.92371704722], [9.51056516295, 3.09016994374], [9.45518575599, 3.25568154457], [9.39692620785, 3.42020143325], [9.33580426497, 3.58367949545], [9.27183854566, 3.74606593415], [9.20504853452, 3.90731128489], [9.13545457642, 4.06736643075], [9.06307787036, 4.2261826174], [8.98794046299, 4.38371146789], [8.91006524188, 4.53990499739], [8.82947592858, 4.69471562785], [8.74619707139, 4.84809620246], [8.66025403784, 5], [8.57167300702, 5.1503807491], [8.48048096156, 5.29919264233], [8.38670567945, 5.44639035015], [8.29037572555, 5.5919290347], [8.19152044289, 5.73576436351], [8.09016994374, 5.87785252292], [7.98635510047, 6.01815023152], [7.88010753606, 6.15661475325], [7.77145961457, 6.29320391049], [7.66044443119, 6.42787609686], [7.54709580222, 6.5605902899], [7.43144825477, 6.69130606358], [7.31353701619, 6.81998360062], [7.19339800338, 6.94658370459], [7.07106781186, 7.07106781186], [6.94658370459, 7.19339800338], [6.81998360062, 7.31353701619], [6.69130606358, 7.43144825477], [6.5605902899, 7.54709580222], [6.42787609686, 7.66044443119], [6.29320391049, 7.77145961457], [6.15661475325, 7.88010753606], [6.01815023152, 7.98635510047], [5.87785252292, 8.09016994374], [5.73576436351, 8.19152044289], [5.5919290347, 8.29037572555], [5.44639035015, 8.38670567945], [5.29919264233, 8.48048096156], [5.1503807491, 8.57167300702], [5, 8.66025403784], [4.84809620246, 8.74619707139], [4.69471562785, 8.82947592858], [4.53990499739, 8.91006524188], [4.38371146789, 8.98794046299], [4.2261826174, 9.06307787036], [4.06736643075, 9.13545457642], [3.90731128489, 9.20504853452], [3.74606593415, 9.27183854566], [3.58367949545, 9.33580426497], [3.42020143325, 9.39692620785], [3.25568154457, 9.45518575599], [3.09016994374, 9.51056516295], [2.92371704722, 9.56304755963], [2.75637355817, 9.61261695938], [2.58819045102, 9.65925826289], [2.41921895599, 9.70295726276], [2.24951054343, 9.74370064785], [2.07911690817, 9.78147600733], [1.90808995376, 9.81627183447], [1.73648177666, 9.84807753012], [1.5643446504, 9.87688340595], [1.3917310096, 9.90268068741], [1.21869343405, 9.92546151641], [1.04528463267, 9.94521895368], [0.87155742747, 9.96194698091], [0.69756473744, 9.97564050259], [0.52335956242, 9.98629534754], [0.34899496702, 9.99390827019], [0.17452406437, 9.99847695156], [0, 10], [-0.17452406437, 9.99847695156], [-0.34899496702, 9.99390827019], [-0.52335956242, 9.98629534754], [-0.69756473744, 9.97564050259], [-0.87155742747, 9.96194698091], [-1.04528463267, 9.94521895368], [-1.21869343405, 9.92546151641], [-1.3917310096, 9.90268068741], [-1.5643446504, 9.87688340595], [-1.73648177666, 9.84807753012], [-1.90808995376, 9.81627183447], [-2.07911690817, 9.78147600733], [-2.24951054343, 9.74370064785], [-2.41921895599, 9.70295726276], [-2.58819045102, 9.65925826289], [-2.75637355817, 9.61261695938], [-2.92371704722, 9.56304755963], [-3.09016994374, 9.51056516295], [-3.25568154457, 9.45518575599], [-3.42020143325, 9.39692620785], [-3.58367949545, 9.33580426497], [-3.74606593415, 9.27183854566], [-3.90731128489, 9.20504853452], [-4.06736643075, 9.13545457642], [-4.2261826174, 9.06307787036], [-4.38371146789, 8.98794046299], [-4.53990499739, 8.91006524188], [-4.69471562785, 8.82947592858], [-4.84809620246, 8.74619707139], [-5, 8.66025403784], [-5.1503807491, 8.57167300702], [-5.29919264233, 8.48048096156], [-5.44639035015, 8.38670567945], [-5.5919290347, 8.29037572555], [-5.73576436351, 8.19152044289], [-5.87785252292, 8.09016994374], [-6.01815023152, 7.98635510047], [-6.15661475325, 7.88010753606], [-6.29320391049, 7.77145961457], [-6.42787609686, 7.66044443119], [-6.5605902899, 7.54709580222], [-6.69130606358, 7.43144825477], [-6.81998360062, 7.31353701619], [-6.94658370459, 7.19339800338], [-7.07106781186, 7.07106781186], [-7.19339800338, 6.94658370459], [-7.31353701619, 6.81998360062], [-7.43144825477, 6.69130606358], [-7.54709580222, 6.5605902899], [-7.66044443119, 6.42787609686], [-7.77145961457, 6.29320391049], [-7.88010753606, 6.15661475325], [-7.98635510047, 6.01815023152], [-8.09016994374, 5.87785252292], [-8.19152044289, 5.73576436351], [-8.29037572555, 5.5919290347], [-8.38670567945, 5.44639035015], [-8.48048096156, 5.29919264233], [-8.57167300702, 5.1503807491], [-8.66025403784, 5], [-8.74619707139, 4.84809620246], [-8.82947592858, 4.69471562785], [-8.91006524188, 4.53990499739], [-8.98794046299, 4.38371146789], [-9.06307787036, 4.2261826174], [-9.13545457642, 4.06736643075], [-9.20504853452, 3.90731128489], [-9.27183854566, 3.74606593415], [-9.33580426497, 3.58367949545], [-9.39692620785, 3.42020143325], [-9.45518575599, 3.25568154457], [-9.51056516295, 3.09016994374], [-9.56304755963, 2.92371704722], [-9.61261695938, 2.75637355817], [-9.65925826289, 2.58819045102], [-9.70295726276, 2.41921895599], [-9.74370064785, 2.24951054343], [-9.78147600733, 2.07911690817], [-9.81627183447, 1.90808995376], [-9.84807753012, 1.73648177666], [-9.87688340595, 1.5643446504], [-9.90268068741, 1.3917310096], [-9.92546151641, 1.21869343405], [-9.94521895368, 1.04528463267], [-9.96194698091, 0.87155742747], [-9.97564050259, 0.69756473744], [-9.98629534754, 0.52335956242], [-9.99390827019, 0.34899496702], [-9.99847695156, 0.17452406437], [-10, 0], [-9.99847695156, -0.17452406437], [-9.99390827019, -0.34899496702], [-9.98629534754, -0.52335956242], [-9.97564050259, -0.69756473744], [-9.96194698091, -0.87155742747], [-9.94521895368, -1.04528463267], [-9.92546151641, -1.21869343405], [-9.90268068741, -1.3917310096], [-9.87688340595, -1.5643446504], [-9.84807753012, -1.73648177666], [-9.81627183447, -1.90808995376], [-9.78147600733, -2.07911690817], [-9.74370064785, -2.24951054343], [-9.70295726276, -2.41921895599], [-9.65925826289, -2.58819045102], [-9.61261695938, -2.75637355817], [-9.56304755963, -2.92371704722], [-9.51056516295, -3.09016994374], [-9.45518575599, -3.25568154457], [-9.39692620785, -3.42020143325], [-9.33580426497, -3.58367949545], [-9.27183854566, -3.74606593415], [-9.20504853452, -3.90731128489], [-9.13545457642, -4.06736643075], [-9.06307787036, -4.2261826174], [-8.98794046299, -4.38371146789], [-8.91006524188, -4.53990499739], [-8.82947592858, -4.69471562785], [-8.74619707139, -4.84809620246], [-8.66025403784, -5], [-8.57167300702, -5.1503807491], [-8.48048096156, -5.29919264233], [-8.38670567945, -5.44639035015], [-8.29037572555, -5.5919290347], [-8.19152044289, -5.73576436351], [-8.09016994374, -5.87785252292], [-7.98635510047, -6.01815023152], [-7.88010753606, -6.15661475325], [-7.77145961457, -6.29320391049], [-7.66044443119, -6.42787609686], [-7.54709580222, -6.5605902899], [-7.43144825477, -6.69130606358], [-7.31353701619, -6.81998360062], [-7.19339800338, -6.94658370459], [-7.07106781186, -7.07106781186], [-6.94658370459, -7.19339800338], [-6.81998360062, -7.31353701619], [-6.69130606358, -7.43144825477], [-6.5605902899, -7.54709580222], [-6.42787609686, -7.66044443119], [-6.29320391049, -7.77145961457], [-6.15661475325, -7.88010753606], [-6.01815023152, -7.98635510047], [-5.87785252292, -8.09016994374], [-5.73576436351, -8.19152044289], [-5.5919290347, -8.29037572555], [-5.44639035015, -8.38670567945], [-5.29919264233, -8.48048096156], [-5.1503807491, -8.57167300702], [-5, -8.66025403784], [-4.84809620246, -8.74619707139], [-4.69471562785, -8.82947592858], [-4.53990499739, -8.91006524188], [-4.38371146789, -8.98794046299], [-4.2261826174, -9.06307787036], [-4.06736643075, -9.13545457642], [-3.90731128489, -9.20504853452], [-3.74606593415, -9.27183854566], [-3.58367949545, -9.33580426497], [-3.42020143325, -9.39692620785], [-3.25568154457, -9.45518575599], [-3.09016994374, -9.51056516295], [-2.92371704722, -9.56304755963], [-2.75637355817, -9.61261695938], [-2.58819045102, -9.65925826289], [-2.41921895599, -9.70295726276], [-2.24951054343, -9.74370064785], [-2.07911690817, -9.78147600733], [-1.90808995376, -9.81627183447], [-1.73648177666, -9.84807753012], [-1.5643446504, -9.87688340595], [-1.3917310096, -9.90268068741], [-1.21869343405, -9.92546151641], [-1.04528463267, -9.94521895368], [-0.87155742747, -9.96194698091], [-0.69756473744, -9.97564050259], [-0.52335956242, -9.98629534754], [-0.34899496702, -9.99390827019], [-0.17452406437, -9.99847695156], [0, -10], [0.17452406437, -9.99847695156], [0.34899496702, -9.99390827019], [0.52335956242, -9.98629534754], [0.69756473744, -9.97564050259], [0.87155742747, -9.96194698091], [1.04528463267, -9.94521895368], [1.21869343405, -9.92546151641], [1.3917310096, -9.90268068741], [1.5643446504, -9.87688340595], [1.73648177666, -9.84807753012], [1.90808995376, -9.81627183447], [2.07911690817, -9.78147600733], [2.24951054343, -9.74370064785], [2.41921895599, -9.70295726276], [2.58819045102, -9.65925826289], [2.75637355817, -9.61261695938], [2.92371704722, -9.56304755963], [3.09016994374, -9.51056516295], [3.25568154457, -9.45518575599], [3.42020143325, -9.39692620785], [3.58367949545, -9.33580426497], [3.74606593415, -9.27183854566], [3.90731128489, -9.20504853452], [4.06736643075, -9.13545457642], [4.2261826174, -9.06307787036], [4.38371146789, -8.98794046299], [4.53990499739, -8.91006524188], [4.69471562785, -8.82947592858], [4.84809620246, -8.74619707139], [5, -8.66025403784], [5.1503807491, -8.57167300702], [5.29919264233, -8.48048096156], [5.44639035015, -8.38670567945], [5.5919290347, -8.29037572555], [5.73576436351, -8.19152044289], [5.87785252292, -8.09016994374], [6.01815023152, -7.98635510047], [6.15661475325, -7.88010753606], [6.29320391049, -7.77145961457], [6.42787609686, -7.66044443119], [6.5605902899, -7.54709580222], [6.69130606358, -7.43144825477], [6.81998360062, -7.31353701619], [6.94658370459, -7.19339800338], [7.07106781186, -7.07106781186], [7.19339800338, -6.94658370459], [7.31353701619, -6.81998360062], [7.43144825477, -6.69130606358], [7.54709580222, -6.5605902899], [7.66044443119, -6.42787609686], [7.77145961457, -6.29320391049], [7.88010753606, -6.15661475325], [7.98635510047, -6.01815023152], [8.09016994374, -5.87785252292], [8.19152044289, -5.73576436351], [8.29037572555, -5.5919290347], [8.38670567945, -5.44639035015], [8.48048096156, -5.29919264233], [8.57167300702, -5.1503807491], [8.66025403784, -5], [8.74619707139, -4.84809620246], [8.82947592858, -4.69471562785], [8.91006524188, -4.53990499739], [8.98794046299, -4.38371146789], [9.06307787036, -4.2261826174], [9.13545457642, -4.06736643075], [9.20504853452, -3.90731128489], [9.27183854566, -3.74606593415], [9.33580426497, -3.58367949545], [9.39692620785, -3.42020143325], [9.45518575599, -3.25568154457], [9.51056516295, -3.09016994374], [9.56304755963, -2.92371704722], [9.61261695938, -2.75637355817], [9.65925826289, -2.58819045102], [9.70295726276, -2.41921895599], [9.74370064785, -2.24951054343], [9.78147600733, -2.07911690817], [9.81627183447, -1.90808995376], [9.84807753012, -1.73648177666], [9.87688340595, -1.5643446504], [9.90268068741, -1.3917310096], [9.92546151641, -1.21869343405], [9.94521895368, -1.04528463267], [9.96194698091, -0.87155742747], [9.97564050259, -0.69756473744], [9.98629534754, -0.52335956242], [9.99390827019, -0.34899496702], [9.99847695156, -0.17452406437]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 1, 1]) { - text(text = "314", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "314", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/recursion-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/recursion-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/recursion-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/recursion-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -1,6 +1,6 @@ group() { color([0, 1, 1, 1]) { - text(text = "6! = 720", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); + text(text = "6! = 720", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } group(); } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/rotate_extrude-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/rotate_extrude-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/rotate_extrude-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/rotate_extrude-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -10,7 +10,7 @@ color([0, 1, 1, 1]) { multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { rotate_extrude(convexity = 2, $fn = 80, $fa = 12, $fs = 2) { - text(text = " J", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 80, $fa = 12, $fs = 2); + text(text = " J", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 80, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/text_on_cube-expected.csg openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/text_on_cube-expected.csg --- openscad-2015.03-1+dfsg/tests/regression/dumptest-examples/text_on_cube-expected.csg 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/dumptest-examples/text_on_cube-expected.csg 2015-11-17 09:43:41.000000000 +0000 @@ -9,7 +9,7 @@ multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); + text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); } } } @@ -18,7 +18,7 @@ multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "U", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); + text(text = "U", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); } } } @@ -27,7 +27,7 @@ multmatrix([[-1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "B", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); + text(text = "B", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); } } } @@ -36,7 +36,7 @@ multmatrix([[0, 0, -1, 0], [-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "E", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); + text(text = "E", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); } } } @@ -45,14 +45,14 @@ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 27.5], [0, 0, 0, 1]]) { group() { linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "☺", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); + text(text = "☺", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -32.5], [0, 0, 0, 1]]) { group() { linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { - text(text = "☼", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); + text(text = "☼", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2); } } } diff -Nru openscad-2015.03-1+dfsg/tests/regression/echotest/for-tests-expected.echo openscad-2015.03-2+dfsg/tests/regression/echotest/for-tests-expected.echo --- openscad-2015.03-1+dfsg/tests/regression/echotest/for-tests-expected.echo 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/echotest/for-tests-expected.echo 2015-11-17 09:43:41.000000000 +0000 @@ -3,11 +3,11 @@ ECHO: nan ECHO: inf ECHO: -inf -WARNING: Bad range parameter in for statement: too many elements (4294967295). ECHO: "INF", 0 ECHO: "-INF", 0 -WARNING: Bad range parameter in for statement: too many elements (4294967295). ECHO: "INF", 0 -WARNING: Bad range parameter in for statement: too many elements (4294967295). ECHO: "-INF", 1 WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). diff -Nru openscad-2015.03-1+dfsg/tests/regression/echotest/issue1472-expected.echo openscad-2015.03-2+dfsg/tests/regression/echotest/issue1472-expected.echo --- openscad-2015.03-1+dfsg/tests/regression/echotest/issue1472-expected.echo 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/echotest/issue1472-expected.echo 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1 @@ +ECHO: "OK" diff -Nru openscad-2015.03-1+dfsg/tests/regression/echotest/rands-expected.echo openscad-2015.03-2+dfsg/tests/regression/echotest/rands-expected.echo --- openscad-2015.03-1+dfsg/tests/regression/echotest/rands-expected.echo 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/echotest/rands-expected.echo 2015-11-17 09:43:41.000000000 +0000 @@ -1,3 +1,1033 @@ WARNING: Ignoring unknown variable 'v'. ECHO: "i hope rands() did not crash" ECHO: [1, 1, 1, 1] +ECHO: [1.44860104937, 1.96977400896, 1.87769967853] +ECHO: [1.62212599418, 1.19758326024, 1.75764335226] +ECHO: [1.17089443816, 1.47101664776, 1.39911404252] +ECHO: [1.27117833774, 1.21888527483, 1.03936515539] +ECHO: [1.52706231735, 1.18352173198, 1.59009902807] +ECHO: [1.13340410008, 1.71836690185, 1.49197154282] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,-1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,-1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,-1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1/0,-1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,-1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,-1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,-1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1/0,-1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,-1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,-1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,-1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1/0,-1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,-1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,-1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,-1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1/0,-1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,-1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,-1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,-1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,1.1,-1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,-1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,-1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,-1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,1.1,-1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,-1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,-1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,-1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1/0,-1.1,-1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,-1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,-1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,-1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1/0,-1.1,-1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,-1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,-1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,-1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1/0,-1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,-1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,-1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,-1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1/0,-1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,-1/0,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,-1/0,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,-1/0,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1/0,-1/0,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,-1.1,1/0)", [57152855176367857697673031992223067359061354393432511009152989736360663693765612952292041293145029826572658004476364254050556637992176187314730435459946351759283259830372528752196246760938236286371432498405713546549660241135224301702759719510116693402740493484305272413723675933176206450001820492524997836800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,-1.1,-1/0)", [-9300377652654166128060603475850713000293501474922443063507207026945588318717091192025028882115570951042626583985011686900155640117874164051603353244310517845033408717801751661166920239068617262628971552363024772601967872546644706234854673867869142431130697461329893306385034235452701527814810567411813580800] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,-1.1,1.1)", [2559225604731159729917496516459263182383250788247167445377934305240165062728205398216921128075335520484433677462146112065036394690237323498542875537267016320184083079702537573615936740527526504319749001754762987901298548632442051353785468197833271658422571592504792508314029496796671198751403171214549581824] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1/0,-1.1,-1.1)", [-34765946307431883058945607364533820105256535554593193644123039389802319268408110417279252824405518608310450404570801207189334070336781804804635669671465126173915687410738020586168641757496968446960001628511321633335414193452473365380029593204318411587833969829568468890108549759673084562613546738345796698112] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,-1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,-1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,-1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,1.1,-1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,-1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,-1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,-1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,1.1,-1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,-1/0,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,-1/0,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,-1/0,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1/0,-1.1,-1/0,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,-1.1,1/0)", [-16365900783373963854795339936814555519986964684744993645152874332608983348124328214001369011619204629598785736140413489033302012726277952034751668945911203366870847728951556142963249142128214092833250877910926712301315688658193586190072280077972490367329209808883544585322706328641721745311690760283532296192] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,-1.1,-1/0)", [-49592517197884980757262931507650974840596175211018885850111123802905963110733786379189633771659669480801341761960354182864775262262541237649013534282023790016958677715117247149659015019845832161177756514202763828510521606858938073485905614569141380506402976401811521213179328602346279840116244366111962824704] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,-1.1,1.1)", [-43662715569192312838673107674696457608326016487337665427040402048169232663643031991038929094154051782642897899647522560026062134377247383942845448907250871086420436104286551732253404152333568983859092626236401991625496534909584711364559405734114201239488170754783784538027529546831489370936899420938756423680] +WARNING: rands() range min cannot be infinite +WARNING: resetting to -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1/0,-1.1,-1.1,-1.1)", [-62325301525273839222705433451992528393077692250854261140419039984334328585579295991816745742804643309435253672253248943009364477371995058025529692495601094181399817061585381612159875779060007753343271552276912258877244767311852403058493074237366015084754612585930809005041086364456471357515612451578954383360] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,-1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,-1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,-1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1/0,-1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,-1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,-1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,-1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,1/0,-1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,-1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,-1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,-1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1/0,-1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,-1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,-1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,-1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(1.1,-1/0,-1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,1/0,1/0)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,1/0,-1/0)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,1/0,1.1)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,1/0,-1.1)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,-1/0,1/0)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,-1/0,-1/0)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,-1/0,1.1)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,1.1,-1/0,-1.1)", [1.1] +ECHO: "rands(1.1,1.1,1.1,1/0)", [1.1] +ECHO: "rands(1.1,1.1,1.1,-1/0)", [1.1] +ECHO: "rands(1.1,1.1,1.1,1.1)", [1.1] +ECHO: "rands(1.1,1.1,1.1,-1.1)", [1.1] +ECHO: "rands(1.1,1.1,-1.1,1/0)", [1.1] +ECHO: "rands(1.1,1.1,-1.1,-1/0)", [1.1] +ECHO: "rands(1.1,1.1,-1.1,1.1)", [1.1] +ECHO: "rands(1.1,1.1,-1.1,-1.1)", [1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,1/0,1/0)", [0.69943128195] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,1/0,-1/0)", [-0.11381714954] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,1/0,1.1)", [0.03131956295] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,1/0,-1.1)", [-0.42546239062] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,-1/0,1/0)", [0.69943128195] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,-1/0,-1/0)", [-0.11381714954] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,-1/0,1.1)", [0.03131956295] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(1.1,-1.1,-1/0,-1.1)", [-0.42546239062] +ECHO: "rands(1.1,-1.1,1.1,1/0)", [0.69943128195] +ECHO: "rands(1.1,-1.1,1.1,-1/0)", [-0.11381714954] +ECHO: "rands(1.1,-1.1,1.1,1.1)", [0.03131956295] +ECHO: "rands(1.1,-1.1,1.1,-1.1)", [-0.42546239062] +ECHO: "rands(1.1,-1.1,-1.1,1/0)", [0.69943128195] +ECHO: "rands(1.1,-1.1,-1.1,-1/0)", [-0.11381714954] +ECHO: "rands(1.1,-1.1,-1.1,1.1)", [0.03131956295] +ECHO: "rands(1.1,-1.1,-1.1,-1.1)", [-0.42546239062] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,-1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,-1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,-1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1/0,-1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,-1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,-1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,-1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,1/0,-1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,-1/0,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,-1/0,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,-1/0,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1/0,-1/0,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,-1.1,1/0)", [73518755959741821552468371929037622879048319078177504654305864068969647041889941166293410304764234456171443740616777743083858650718454139349482104405857555126154107559324084895159495903066450379204683376316640258850975929793417887892831999588089183770069703293188816999046382261817928195313511252808530132992] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,-1.1,-1/0)", [40292139545230809639601554195000732699370891144000027617975765687316521035648589094134875217133934067363801446386089772608502511663428963666315210053729120323995773285236944688477912403063023604704481350932271099275161872952483383924024802899096265853134107820371234138992027177503474206405195722840124424192] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,-1.1,1.1)", [46221941173923472568590604191155720790709267275584832872418336353409397726371237389255850222229387303127331577109668672091098529067484707441388324444517887406604519183989089305869340892861095488178841627991164979526795083542026762718344873931947472897910742347288577046341559043628160569688302592153306005504] +WARNING: rands() range max cannot be infinite +WARNING: resetting to 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +ECHO: "rands(-1.1,-1/0,-1.1,-1.1)", [27559355217841951174159052250659179146889374104164652327667849505888155560803079481507763245988960238729889536093195012463913296553975143289799051840151816159554633938768810225977051643848848012538966312858122668908438712499569054351437343230871631274782471636251946347130269415393282689005827637373132865536] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,1/0,1/0)", [0.69943128195] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,1/0,-1/0)", [-0.11381714954] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,1/0,1.1)", [0.03131956295] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,1/0,-1.1)", [-0.42546239062] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,-1/0,1/0)", [0.69943128195] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,-1/0,-1/0)", [-0.11381714954] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,-1/0,1.1)", [0.03131956295] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,1.1,-1/0,-1.1)", [-0.42546239062] +ECHO: "rands(-1.1,1.1,1.1,1/0)", [0.69943128195] +ECHO: "rands(-1.1,1.1,1.1,-1/0)", [-0.11381714954] +ECHO: "rands(-1.1,1.1,1.1,1.1)", [0.03131956295] +ECHO: "rands(-1.1,1.1,1.1,-1.1)", [-0.42546239062] +ECHO: "rands(-1.1,1.1,-1.1,1/0)", [0.69943128195] +ECHO: "rands(-1.1,1.1,-1.1,-1/0)", [-0.11381714954] +ECHO: "rands(-1.1,1.1,-1.1,1.1)", [0.03131956295] +ECHO: "rands(-1.1,1.1,-1.1,-1.1)", [-0.42546239062] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,1/0,1/0)", [-1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,1/0,-1/0)", [-1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,1/0,1.1)", [-1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,1/0,-1.1)", [-1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,-1/0,1/0)", [-1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,-1/0,-1/0)", [-1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,-1/0,1.1)", [-1.1] +WARNING: rands() cannot create an infinite number of results +WARNING: resetting number of results to 1 +ECHO: "rands(-1.1,-1.1,-1/0,-1.1)", [-1.1] +ECHO: "rands(-1.1,-1.1,1.1,1/0)", [-1.1] +ECHO: "rands(-1.1,-1.1,1.1,-1/0)", [-1.1] +ECHO: "rands(-1.1,-1.1,1.1,1.1)", [-1.1] +ECHO: "rands(-1.1,-1.1,1.1,-1.1)", [-1.1] +ECHO: "rands(-1.1,-1.1,-1.1,1/0)", [-1.1] +ECHO: "rands(-1.1,-1.1,-1.1,-1/0)", [-1.1] +ECHO: "rands(-1.1,-1.1,-1.1,1.1)", [-1.1] +ECHO: "rands(-1.1,-1.1,-1.1,-1.1)", [-1.1] diff -Nru openscad-2015.03-1+dfsg/tests/regression/echotest/recursion-test-vector-expected.echo openscad-2015.03-2+dfsg/tests/regression/echotest/recursion-test-vector-expected.echo --- openscad-2015.03-1+dfsg/tests/regression/echotest/recursion-test-vector-expected.echo 1970-01-01 00:00:00.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/echotest/recursion-test-vector-expected.echo 2015-11-17 09:43:41.000000000 +0000 @@ -0,0 +1 @@ +ERROR: Recursion detected calling module 'rec' diff -Nru openscad-2015.03-1+dfsg/tests/regression/echotest/search-tests-expected.echo openscad-2015.03-2+dfsg/tests/regression/echotest/search-tests-expected.echo --- openscad-2015.03-1+dfsg/tests/regression/echotest/search-tests-expected.echo 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/echotest/search-tests-expected.echo 2015-11-17 09:43:41.000000000 +0000 @@ -1,9 +1,3 @@ - WARNING: search term not found: "q" - WARNING: search term not found: 1000 - WARNING: search term not found: "zzz" - WARNING: search term not found: "zzz" - WARNING: search term not found: 500 - WARNING: search term not found: "" ECHO: "Characters in string ("a"): [0]" ECHO: "Characters in string ("adeq"): [[0, 5], [3, 8], [4], []]" ECHO: "Default string search ("abe"): [0, 1, 8]" diff -Nru openscad-2015.03-1+dfsg/tests/regression/echotest/search-tests-unicode-expected.echo openscad-2015.03-2+dfsg/tests/regression/echotest/search-tests-unicode-expected.echo --- openscad-2015.03-1+dfsg/tests/regression/echotest/search-tests-unicode-expected.echo 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/echotest/search-tests-unicode-expected.echo 2015-11-17 09:43:41.000000000 +0000 @@ -8,61 +8,31 @@ ECHO: "Expect [[0, 1, 2]] for search(a, aaaa, 3)=[[0, 1, 2]]. OK" ECHO: "Expect [[0, 1, 2, 3]] for search(a, aaaa, 4)=[[0, 1, 2, 3]]. OK" ECHO: "Expect [[0, 1, 2, 3], [0, 1, 2, 3]] for search(aa, aaaa, 0)=[[0, 1, 2, 3], [0, 1, 2, 3]]. OK" - WARNING: search term not found: "b" ECHO: "Expect [] for search(b, aaaa)=[]. OK" - WARNING: search term not found: "b" ECHO: "Expect [] for search(b, aaaa, 1)=[]. OK" - WARNING: search term not found: "b" ECHO: "Expect [[]] for search(b, aaaa, 0)=[[]]. OK" - WARNING: search term not found: "b" ECHO: "Expect [[]] for search(b, aaaa, 2)=[[]]. OK" - WARNING: search term not found: "b" - WARNING: search term not found: "b" ECHO: "Expect [] for search(bb, aaaa)=[]. OK" - WARNING: search term not found: "b" - WARNING: search term not found: "b" ECHO: "Expect [] for search(bb, aaaa, 1)=[]. OK" - WARNING: search term not found: "b" - WARNING: search term not found: "b" ECHO: "Expect [[], []] for search(bb, aaaa, 0)=[[], []]. OK" - WARNING: search term not found: "b" - WARNING: search term not found: "b" ECHO: "Expect [[], []] for search(bb, aaaa, 2)=[[], []]. OK" ECHO: "Expect [] for search(, aaaa)=[]. OK" ECHO: "Expect [] for search(, )=[]. OK" - WARNING: search term not found: "a" ECHO: "Expect [] for search(a, )=[]. OK" ECHO: "----- Lookup of multi-byte into 1 byte" - WARNING: search term not found: "Л" ECHO: "Expect [] for search(Л, aaaa)=[]. OK" - WARNING: search term not found: "🂡" ECHO: "Expect [] for search(🂡, aaaa)=[]. OK" - WARNING: search term not found: "Л" ECHO: "Expect [[]] for search(Л, aaaa, 0)=[[]]. OK" - WARNING: search term not found: "🂡" ECHO: "Expect [[]] for search(🂡, aaaa, 0)=[[]]. OK" - WARNING: search term not found: "Л" - WARNING: search term not found: "Л" ECHO: "Expect [] for search(ЛЛ, aaaa)=[]. OK" - WARNING: search term not found: "🂡" - WARNING: search term not found: "🂡" ECHO: "Expect [] for search(🂡🂡, aaaa)=[]. OK" - WARNING: search term not found: "Л" - WARNING: search term not found: "Л" ECHO: "Expect [[], []] for search(ЛЛ, aaaa, 0)=[[], []]. OK" - WARNING: search term not found: "🂡" - WARNING: search term not found: "🂡" ECHO: "Expect [[], []] for search(🂡🂡, aaaa, 0)=[[], []]. OK" ECHO: "----- Lookup of 1-byte into multi-byte" - WARNING: search term not found: "a" ECHO: "Expect [] for search(a, ЛЛЛЛ)=[]. OK" - WARNING: search term not found: "a" ECHO: "Expect [] for search(a, 🂡🂡🂡🂡)=[]. OK" - WARNING: search term not found: "a" ECHO: "Expect [] for search(a, ЛЛЛЛ, 1)=[]. OK" - WARNING: search term not found: "a" ECHO: "Expect [[]] for search(a, 🂡🂡🂡🂡, 0)=[[]]. OK" - WARNING: search term not found: "a" ECHO: "Expect [[]] for search(a, 🂡🂡🂡🂡, 2)=[[]]. OK" ECHO: "----- Lookup of 1-byte into mixed multi-byte" ECHO: "Expect [0] for search(a, aЛaЛaЛaЛa)=[0]. OK" @@ -75,35 +45,27 @@ ECHO: "Expect [0] for search(Л, ЛЛЛЛ)=[0]. OK" ECHO: "Expect [[0, 1, 2, 3]] for search(Л, ЛЛЛЛ, 0)=[[0, 1, 2, 3]]. OK" ECHO: "----- Lookup of 2-byte into 4-byte" - WARNING: search term not found: "Л" ECHO: "Expect [] for search(Л, 🂡🂡🂡🂡)=[]. OK" ECHO: "----- Lookup of 4-byte into 4-byte" ECHO: "Expect [0] for search(🂡, 🂡🂡🂡🂡)=[0]. OK" ECHO: "Expect [[0, 1, 2, 3]] for search(🂡, 🂡🂡🂡🂡, 0)=[[0, 1, 2, 3]]. OK" ECHO: "----- Lookup of 4-byte into 2-byte" - WARNING: search term not found: "🂡" ECHO: "Expect [] for search(🂡, ЛЛЛЛ)=[]. OK" ECHO: "----- Lookup of 2-byte into mixed multi-byte" ECHO: "Expect [1] for search(Л, aЛaЛaЛaЛa, 1)=[1]. OK" - WARNING: search term not found: "Л" ECHO: "Expect [] for search(Л, a🂡a🂡a🂡a🂡a, 1)=[]. OK" ECHO: "Expect [2] for search(Л, a🂡Л🂡a🂡Л🂡a, 1)=[2]. OK" ECHO: "Expect [[1, 3, 5, 7]] for search(Л, aЛaЛaЛaЛa, 0)=[[1, 3, 5, 7]]. OK" - WARNING: search term not found: "Л" ECHO: "Expect [[]] for search(Л, a🂡a🂡a🂡a🂡a, 0)=[[]]. OK" ECHO: "Expect [[2, 6]] for search(Л, a🂡Л🂡a🂡Л🂡a, 0)=[[2, 6]]. OK" ECHO: "----- Lookup of 4-byte into mixed multi-byte" - WARNING: search term not found: "🂡" ECHO: "Expect [] for search(🂡, aЛaЛaЛaЛa, 1)=[]. OK" ECHO: "Expect [1] for search(🂡, a🂡a🂡a🂡a🂡a, 1)=[1]. OK" - WARNING: search term not found: "🂡" ECHO: "Expect [[]] for search(🂡, aЛaЛaЛaЛa, 0)=[[]]. OK" ECHO: "Expect [[1, 3, 5, 7]] for search(🂡, a🂡a🂡a🂡a🂡a, 0)=[[1, 3, 5, 7]]. OK" ECHO: "Expect [[1, 3, 5, 7]] for search(🂡, a🂡Л🂡a🂡Л🂡a, 0)=[[1, 3, 5, 7]]. OK" ECHO: "----- Lookup of mixed multi-byte into mixed multi-byte" - WARNING: search term not found: "🂡" ECHO: "Expect [[0, 2, 4, 6, 8], [1, 3, 5, 7], []] for search(aЛ🂡, aЛaЛaЛaЛa, 0)=[[0, 2, 4, 6, 8], [1, 3, 5, 7], []]. OK" - WARNING: search term not found: "Л" ECHO: "Expect [[0, 2, 4, 6, 8], [], [1, 3, 5, 7]] for search(aЛ🂡, a🂡a🂡a🂡a🂡a, 0)=[[0, 2, 4, 6, 8], [], [1, 3, 5, 7]]. OK" ECHO: "Expect [[0, 4, 8], [2, 6], [1, 3, 5, 7]] for search(aЛ🂡, a🂡Л🂡a🂡Л🂡a, 0)=[[0, 4, 8], [2, 6], [1, 3, 5, 7]]. OK" ECHO: "Expect [[1, 3, 5, 7], [0, 4, 8], [2, 6]] for search(🂡aЛ, a🂡Л🂡a🂡Л🂡a, 0)=[[1, 3, 5, 7], [0, 4, 8], [2, 6]]. OK" diff -Nru openscad-2015.03-1+dfsg/tests/regression/echotest/vector-values-expected.echo openscad-2015.03-2+dfsg/tests/regression/echotest/vector-values-expected.echo --- openscad-2015.03-1+dfsg/tests/regression/echotest/vector-values-expected.echo 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/regression/echotest/vector-values-expected.echo 2015-11-17 09:43:41.000000000 +0000 @@ -8,3 +8,4 @@ ECHO: "Testing asymmetric matrix * matrix: [[2, 1], [-1, 0]]" ECHO: "Testing alternate asymmetric matrix * matrix: [[1, 0, 1], [0, 1, -1], [1, 1, 0]]" ECHO: " Bounds check: undef" +ECHO: "Testing matrix * matrix with undef elements: undef" Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/monotonepngtest/issue1325-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/monotonepngtest/issue1325-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/opencsgtest/issue1325-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/opencsgtest/issue1325-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/opencsgtest/linear_extrude-parameter-tests-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/opencsgtest/linear_extrude-parameter-tests-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/opencsgtest/primitive-inf-tests-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/opencsgtest/primitive-inf-tests-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/throwntogethertest/issue1325-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/throwntogethertest/issue1325-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/throwntogethertest/linear_extrude-parameter-tests-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/throwntogethertest/linear_extrude-parameter-tests-expected.png differ Binary files /tmp/tmpCV5mbh/Z4y5NDvv9I/openscad-2015.03-1+dfsg/tests/regression/throwntogethertest/primitive-inf-tests-expected.png and /tmp/tmpCV5mbh/IYUxVNeRD3/openscad-2015.03-2+dfsg/tests/regression/throwntogethertest/primitive-inf-tests-expected.png differ diff -Nru openscad-2015.03-1+dfsg/tests/test_cmdline_tool.py openscad-2015.03-2+dfsg/tests/test_cmdline_tool.py --- openscad-2015.03-1+dfsg/tests/test_cmdline_tool.py 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/tests/test_cmdline_tool.py 2015-11-17 09:43:41.000000000 +0000 @@ -1,3 +1,4 @@ +#!/usr/bin/python # # Regression test driver for cmd-line tools # diff -Nru openscad-2015.03-1+dfsg/version.pri openscad-2015.03-2+dfsg/version.pri --- openscad-2015.03-1+dfsg/version.pri 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/version.pri 2015-11-17 09:43:41.000000000 +0000 @@ -58,7 +58,7 @@ SHORTVERSION = $$section(VERSION, "-", 0, 0) # Split version into Year Month [Day] -VERSION_SPLIT=$$split(DISPLAYVERSION, ".") +VERSION_SPLIT=$$split(SHORTVERSION, ".") VERSION_YEAR=$$member(VERSION_SPLIT, 0) VERSION_MONTH=$$member(VERSION_SPLIT, 1) VERSION_DAY=$$member(VERSION_SPLIT, 2) diff -Nru openscad-2015.03-1+dfsg/xcode/OpenSCAD.xcodeproj/xcshareddata/xcschemes/OpenSCAD.app.xcscheme openscad-2015.03-2+dfsg/xcode/OpenSCAD.xcodeproj/xcshareddata/xcschemes/OpenSCAD.app.xcscheme --- openscad-2015.03-1+dfsg/xcode/OpenSCAD.xcodeproj/xcshareddata/xcschemes/OpenSCAD.app.xcscheme 2015-06-04 12:39:22.000000000 +0000 +++ openscad-2015.03-2+dfsg/xcode/OpenSCAD.xcodeproj/xcshareddata/xcschemes/OpenSCAD.app.xcscheme 2015-11-17 09:43:41.000000000 +0000 @@ -49,7 +49,8 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" allowLocationSimulation = "YES"> - + + isEnabled = "NO"> + argument = "issue1276.scad" + isEnabled = "YES"> - +