1Change log (recent comes first) 2 307 Sep 2013: Released v 0.4.0: new typesystem and object management. 4 * Rewrote the typesystem to support boxing/unboxing objects. Types are 5 objects themselves. Also rewrote the object management system. 6 * Rewrote parts of the VM. The bytecode is now more compact. 7 * Added a new type, Any, which allows boxing/unboxing an object and greatly 8 extends the capabilities of the language: Any makes the language dynamic 9 when needed and provides some reflection capabilities. 10 * Added heterogeneous arrays of objects through the ``Array`` type. 11 * Added new objects: Curve, Tri, Fill to draw cubic bezier splines and fill 12 a path. 13 1424 Jun 2012: Released v 0.3.4: bugfixes and small improvements. 15 * Improvements to support the new version of the GUI and previews. 16 * Improvements to the VM to support converting a Box program to a C file 17 (not finished, yet) and to support serialization and deserialization of 18 Box programs. 19 * Bugfix: newlines were printed to stdout when parsing macros. 20 2124 Apr 2012: Released v 0.3.3: bugfixes and improvements. 22 * Improvement: alias types do now inherit subtypes. For example, if ``X = Y`` 23 than ``X`` inherits the subtypes of ``Y``. 24 * Regression tests: added new tool to perform automatically a large number 25 of regression tests. 26 * Added objects Save, Resolution and Ppi to ease the way figures are saved 27 to file. 28 2918 Mar 2012: Released v 0.3.2: bugfixes and improvements. 30 * Introduced ``Image'' object to include external PNG files and 31 use them as patterns for filling areas (instead of colors or 32 gradients). 33 * Introduced a Figure object, so that ``Figure[...]'' can be used instead 34 of the (somewhat awkward) ``Window[][...]''. 35 * Introduced multi-line, recursive comments a la OCaml: (* ... *) 36 * Introduced macros in comments (** ... *) as a mean of injecting meta 37 information into the box sources. 38 * Species are now fully implemented. 39 * Pattern was renamed to PATTERN and Pattern is defined as the species 40 ``(Color=>Gradient=>PATTERN)'', which allows using Color, Gradient, 41 as alternatives to Pattern. 42 * Introduced ``ThickLine'' (which partially replaces the obsolete 43 ``Window.Line''). Introduced ``Dark'' and ``Axes''. 44 * Fixed rendering of non-concentric spherical gradients. 45 4627 Nov 2011: Released v 0.3.1: bugfixes and small improvements. 47 * BBox now sets (rather than extending) the bounding box. 48 * Bugfix: bounding box for Clip is now only determined by the clipping path. 49 * Bugfixes in the memory management of Box. 50 * Bugfix: FillStyle was ignored. 51 5218 Oct 2011: Released v 0.3.0: rewrote and improved G library in Box. 53 * The Box graphics library was rewritten in Box itself. The library was 54 re-engineered and is now much more clean and powerful. The old interface 55 is still supported, but is now obsolete. Note that the new interface 56 reproduces and offers to the user the features of the old interface, 57 deriving high level functionality from lower level functionality. 58 Example: Poly is expressed in terms of paths (Path) and command streams 59 (CmdStream), similar to Metapost. 60 * Added Dox, a documentation system for Box (which is now part of Boxer). 61 The core library and the Box graphics library have been documented with 62 this. Boxer has now a documentation browser to browse Dox documentation. 63 * Fixing bugs: the most important is the copy of complex objects. 64 * Search in the current source directory when including another source. 65 6602 Jul 2011: Released v 0.2.3: bugfixes and internal improvements 67 This release fixes bugs in the compiler and the graphics library. 68 * Fixed a bug in the compiler (bug 7, ownership of register in subtypes) 69 * Encapsulating objects into Obj is now possible. 70 * Raw access to the Cairo library can be obtained by sending commands 71 encapsulated into Obj objects. A considerable part of Box which is now 72 written in C can then be rewritten in Box itself (this has been started 73 but not completed). 74 * Written a prototype for a Box documentation system, Dox. Documented some 75 parts of Box using Dox. 76 7703 Apr 2011: Released v 0.2.2: bugfixes in graphics library 78 This release fixes some bugs in the graphics library, making the new version 79 of Boxer (0.3.0) more usable. The library libboxcore was also fixed in some 80 of its references (this was noted when trying to run under Mac OS). 81 8206 Feb 2011: Released v 0.2.1: bugfixes and reworked memory management. 83 This release fixes some bugs. It does not bring new features. However, the 84 memory management system has been largely rewritten. The memory management 85 system is now aware of the "complex" types and knows how to create, destroy, 86 copy and relocate them. The release prepares the ground for future features 87 (boxing/unboxing through the Obj type, which will allow several fundamental 88 improvements to both Box and Boxer). 89 9010 Oct 2010: Released v 0.2.0: major compiler restructuring and improvements. 91 Rewrote most of the compiler core code from scratch. In particular, 92 * Rewrote the parser (fixing some small grammar issues); 93 * Introduced proper abstract syntax tree layer, from which the VM code 94 is then generated; 95 * Created an intermediate layer for VM code generation. The layer is now 96 aware of the instructions and what registers they modify. This could allow 97 to introduce a VM code optimizer later on (even if translation to C code 98 may have the priority on this); 99 * Introduced a new object for procedure handling (CmpProc) which reduces 100 drastically the complexity of generating VM code, making the compiler code 101 much simpler; 102 * Introduced a namespace module, which should allow future introduction of 103 namespaces; 104 * Autogeneration of procedures now correctly works, allowing to embed 105 any objects inside new ones (creators and destructors are automatically 106 included in the user-defined creators/destructors); 107 * Introduced exceptions. The VM builds a traceback similar to what happens 108 for Python. The user can raise an exception using Fail["message"] (only 109 one exception flavour is supported at the moment); 110 * Removed the `line' VM instruction. Error positions are now computed using 111 position in code and lookup tables. Also column-inside-line is available 112 in error messages; 113 * Second-procedures have been removed (but @@ and @& are still accepted 114 for compatibility reasons); 115 * Strings are now stored inside Str objects rather than ()Char; 116 * Changing version control system (from SVN) to Mercurial. 117 11802 Dec 2009: The graphic library g does now accept strings as Str objects 119 * '()Char' changed to 'Str' in the Box g library. This gives more 120 flexibility (we now can, for example, save the frames of an animation 121 into different files). 122 12321 May 2009: bugfix (compilation failed with newer version of glibc/gcc) 124 * Compilation of Box failed with newer version of glibc/gcc. See: 125 126 https://sourceforge.net/tracker/?func=detail&aid=2791855&group_id=218051&atid=1041983 127 128 Many thanks to Gerardo Exequiel Pozzi for reporting this and for 129 maintaining the Arch Linux package for Box. 130 13113 May 2009: change to improve compatibility with the Box GUI (Boxer) 132 * Examples provided by Boxer were not working, since g.bxh included 133 a file with ``include "poly"'' causing the example poly.box to be 134 loaded instead of the right file, poly.bxh, which is provided by the g 135 library. The bug has been fixed by renaming the files which are not 136 meant to be included explicitly following the scheme name --> _name 137 13821 February 2009: can copy "simple" objects + better versioning 139 * When using `include "file"' we now search files also inside the directory 140 containing the currently executed script. If -st is specified, 141 then we search inside the current working directory. 142 * Automatic copy of objects is now implemented. However one should be very 143 careful when using this feature with "complex" objects, such as Str, etc. 144 * Introduced the temporary #provide directive, to deal properly with 145 multiple inclusions of the same header. 146 * Accept now line-comments starting with #! to allow Box scripts to be 147 launched directly from the OS (Unix) 148 * Added some info to the -q query option (compilation date, time and version 149 string, path and name of boxcore library, etc.) 150 * Adjusted versioning conventions and automated the change of version 151 numbers in configure.ac and in the Makefile.am-s. 152 * Bugfixes and cleanup of the code. Created a libboxcore library, containing 153 the base infrastructure over which Box is built). 154 15519 November 2008: created Boxer, a GUI for Box 156 * created Boxer, a GUI for Box, using PyGTK (Python bindings for GTK+). 157 The GUI can be run on Linux, Mac OS and Windows. The GUI has a text view 158 containing the edited source and an image view, to show the output. 159 The user can click on the image and add reference points, which can then 160 be used in the Box source. These points can then be dragged, giving 161 the possibility to change the position and shape of objects interactively. 162 In this way using Box becomes much easier, still retaining the advantages 163 of a vectorial language over the traditional mouse driven graphic editors. 164 The GUI makes Box a powerful tool which can be used effectively to create 165 complex figures for reports/papers/presentations. 166 * Real@Window.Line denotes now the width of the line, not the half width 167 (this is consistent with Real@Style.Border) 168 * work on propagation of special procedures, such as creators, destructors 169 etc. Now members are created/destroyed when their container is created/ 170 destroyed. 171 * updated to the latest versions of autotool/hell. 172 * Char, Int and Real are now species, while the raw types are named 173 CHAR, INT and REAL (needed a bugfix). 174 * Bugfix and improvements (also to the code style). 175 * Added the hidden option -q to query for Box configuration (may be used 176 in the future to assist installation of externally provided libraries). 177 17810 august 2008: Improved support of user defined procedures 179 * exit status should now be treated more carefully: 180 0, if all OK, 1 otherwise; 181 * variables defined in the upper scope unit are globally defined and are 182 accessible from procedures: for example, using the color structure 183 inside a procedure is now possible; 184 * $, $$, ... without depth specifications refer now to the current 185 definition Box; 186 * if NewType = OldType then NewType inherits the procedures of OldType 187 (but OldType does not inherits the procedures of NewType). NewType 188 inherits also the procedures of OldType which are defined after 189 the occurrence of 'NewType = OldType'; 190 * Window.Hot now returns the last point it received as argument. 191 * Str object has been introduced. This object allows to concatenate 192 strings, print integers, reals, ... to string. It can be safely 193 used in procedure definitions, since ()Char is automatically converted 194 (Str = (()Char -> STR)) 195 19609 august 2008: Improved text formatting 197 * Removed a small horrible bug in the selection of fonts: 198 this was leading to crashes whenever a known postscript font 199 was selected on Cairo terminals; 200 * Introduced Window.Text.From to decide what corner of the text 201 should go in the provided point: useful for centering text; 202 * Can now handle quite complex text formatting: subscripts, 203 superscripts and newlines are rendered correctly both in native 204 EPS and Cairo terminals. 205 * Bugfix: native EPS can now show text containing parenthesis. 206 20727 july 2008: Improved Save method. Compile under Windows 208 * Can define "incomplete windows": windows which throw an error 209 whenever they are used. Creation of such windows, however, 210 does not produce any errors: this concept is useful for the 211 new syntax of the Window.Save method; 212 * Extended the syntax of the Window.Save method: it can now take 213 a window and (1) complete it (if it is uncomplete) or (2) put 214 the figure into it (if it is complete). In both cases the figure 215 fits the destination window; 216 * Created man page and Ubuntu package; 217 * Ported the source to Windows: we now compile on XP and can 218 distribute the first version of Box for Windows; 219 2205 July 2008: Bugfixes in the transformation of draw styles and font 221 22228 June 2008: Filling with linear/radial color gradients (Gradient[]) 223 * Can now express color in HSV (besides RGB) and convert RGB<-->HSV. 224 * Can now fill objects using linear or radial color gradients 225 (Gradient[] can be used for the purpose). 226 * Color[] defines .r=.g=.b=0 and .a=1 by default. Opaque red can be 227 defined with Color[.r=1]. Similar behaviour for HSV[]. 228 They also both accept a triple (for opaque colors) or quadruple 229 of reals (for translucent colors). 230 23121 June 2008: Style object now allow tracing borders 232 * We can now draw polygons with border, controlling the join style 233 (including the miter limit), the cap style, the dashes, the color. 234 * Style can be instructed to draw empty polygons. In that case 235 the border is not closed in Poly, unless Poly.Close[] is used. 236 23729 May 2008: Work on the documentation and on the internal allocation system. 238 * Started to write documentation on the graphic capabilities of Box. 239 * Destructors are now called automatically by the VM before deallocation 240 of objects: Window, PointList and Style are now fully deallocated. 241 * Used Valgrind to track allocation errors: found one major problem 242 and corrected other two minor ones. Need to work more on this. 243 24417 May 2008: Integration of Cairo in the graphic library. 245 * The graphic terminal has been adjusted, removing the lowfn midfn 246 function list, which are now replaced by full declared methods. 247 * A new function to open any type of windows has been introduced. 248 This function takes a GrpWindowPlan which can contain the window 249 size, file_name, resolution, etc. 250 * Cairo is now detected in configuration scripts and new terminals 251 are avaiblable when Box is compiled with support for it. 252 We now can use Cairo image, PDF, SVG, PS terminals. 253 * Extended the method Window.Save, which now looks at the extension 254 and can accordingly save EPS, PNG, PDF, SVG, BMP files. 255 * Colors have now an alpha channel: translucency is possible with 256 Cairo windows! 257 * We can now set the drawing Style: we can decide what rule to use 258 for filling and we now can also clip along the path generated 259 by all the graphic commands (Line, Circle, Poly and Text). 260 26126 April 2008: Improvements and bugfixes. 262 * Subtypes are resolved into their children if the method in Subtype.Method 263 is not found. 264 * Bugfix in the resolution of subtype-->parent. 265 26620 April 2008: Adjustments and bugfixes. 267 * Bugfix on the strnlen implementation. Should affect only a limited 268 number of architectures. 269 * Introducing reference counting for objects allocated by the VM: 270 still not used to the full extent. 271 * Several improvements to Window.Line: it should now be more robust, 272 and supports lines having multiple join styles. 273 * Poly accepts now (;) 274 * Error messages are now displayed when undefined items appear 275 inside structures. 276 27730 March 2008: bugfixes and improvements. 278 * fixed the VM bug for jump instruction on 64 bit machines. 279 * improved the handling of open procedures 280 28122 March 2008: minor improvements, added examples. 282 * added builtin functions Max, Min, Abs, Vec. 283 * added more examples in the examples directory. 284 * Color@Window sets now the current fg color. 285 28620 March 2008: first release of the tarball. Still very unstable. 287 First tarball is released, just for letting people try the package. 288 289