Change log (recent comes first)

07 Sep 2013: Released v 0.4.0: new typesystem and object management.
  * Rewrote the typesystem to support boxing/unboxing objects. Types are
    objects themselves. Also rewrote the object management system.
  * Rewrote parts of the VM. The bytecode is now more compact.
  * Added a new type, Any, which allows boxing/unboxing an object and greatly
    extends the capabilities of the language: Any makes the language dynamic
    when needed and provides some reflection capabilities.
  * Added heterogeneous arrays of objects through the ``Array`` type.
  * Added new objects: Curve, Tri, Fill to draw cubic bezier splines and fill
    a path.

24 Jun 2012: Released v 0.3.4: bugfixes and small improvements.
  * Improvements to support the new version of the GUI and previews.
  * Improvements to the VM to support converting a Box program to a C file
    (not finished, yet) and to support serialization and deserialization of
    Box programs.
  * Bugfix: newlines were printed to stdout when parsing macros.

24 Apr 2012: Released v 0.3.3: bugfixes and improvements.
  * Improvement: alias types do now inherit subtypes. For example, if ``X = Y``
    than ``X`` inherits the subtypes of ``Y``.
  * Regression tests: added new tool to perform automatically a large number
    of regression tests.
  * Added objects Save, Resolution and Ppi to ease the way figures are saved
    to file.

18 Mar 2012: Released v 0.3.2: bugfixes and improvements.
  * Introduced ``Image'' object to include external PNG files and
    use them as patterns for filling areas (instead of colors or
    gradients).
  * Introduced a Figure object, so that ``Figure[...]'' can be used instead
    of the (somewhat awkward) ``Window[][...]''.
  * Introduced multi-line, recursive comments a la OCaml: (* ... *)
  * Introduced macros in comments (** ... *) as a mean of injecting meta
    information into the box sources.
  * Species are now fully implemented.
  * Pattern was renamed to PATTERN and Pattern is defined as the species
    ``(Color=>Gradient=>PATTERN)'', which allows using Color, Gradient,
    as alternatives to Pattern.
  * Introduced ``ThickLine'' (which partially replaces the obsolete
    ``Window.Line''). Introduced ``Dark'' and ``Axes''.
  * Fixed rendering of non-concentric spherical gradients.

27 Nov 2011: Released v 0.3.1: bugfixes and small improvements.
  * BBox now sets (rather than extending) the bounding box.
  * Bugfix: bounding box for Clip is now only determined by the clipping path.
  * Bugfixes in the memory management of Box.
  * Bugfix: FillStyle was ignored.

18 Oct 2011: Released v 0.3.0: rewrote and improved G library in Box.
  * The Box graphics library was rewritten in Box itself. The library was
    re-engineered and is now much more clean and powerful. The old interface
    is still supported, but is now obsolete. Note that the new interface
    reproduces and offers to the user the features of the old interface,
    deriving high level functionality from lower level functionality.
    Example: Poly is expressed in terms of paths (Path) and command streams
    (CmdStream), similar to Metapost.
  * Added Dox, a documentation system for Box (which is now part of Boxer).
    The core library and the Box graphics library have been documented with
    this. Boxer has now a documentation browser to browse Dox documentation.
  * Fixing bugs: the most important is the copy of complex objects.
  * Search in the current source directory when including another source.

02 Jul 2011: Released v 0.2.3: bugfixes and internal improvements
  This release fixes bugs in the compiler and the graphics library.
  * Fixed a bug in the compiler (bug 7, ownership of register in subtypes)
  * Encapsulating objects into Obj is now possible.
  * Raw access to the Cairo library can be obtained by sending commands
    encapsulated into Obj objects. A considerable part of Box which is now
    written in C can then be rewritten in Box itself (this has been started
    but not completed).
  * Written a prototype for a Box documentation system, Dox. Documented some
    parts of Box using Dox.

03 Apr 2011: Released v 0.2.2: bugfixes in graphics library
  This release fixes some bugs in the graphics library, making the new version
  of Boxer (0.3.0) more usable. The library libboxcore was also fixed in some
  of its references (this was noted when trying to run under Mac OS).

06 Feb 2011: Released v 0.2.1: bugfixes and reworked memory management.
  This release fixes some bugs. It does not bring new features. However, the
  memory management system has been largely rewritten. The memory management
  system is now aware of the "complex" types and knows how to create, destroy,
  copy and relocate them.  The release prepares the ground for future features
  (boxing/unboxing through the Obj type, which will allow several fundamental
  improvements to both Box and Boxer).

10 Oct 2010: Released v 0.2.0: major compiler restructuring and improvements.
  Rewrote most of the compiler core code from scratch. In particular,
  * Rewrote the parser (fixing some small grammar issues);
  * Introduced proper abstract syntax tree layer, from which the VM code
    is then generated;
  * Created an intermediate layer for VM code generation. The layer is now
    aware of the instructions and what registers they modify. This could allow
    to introduce a VM code optimizer later on (even if translation to C code
    may have the priority on this);
  * Introduced a new object for procedure handling (CmpProc) which reduces
    drastically the complexity of generating VM code, making the compiler code
    much simpler;
  * Introduced a namespace module, which should allow future introduction of
    namespaces;
  * Autogeneration of procedures now correctly works, allowing to embed
    any objects inside new ones (creators and destructors are automatically
    included in the user-defined creators/destructors);
  * Introduced exceptions. The VM builds a traceback similar to what happens
    for Python. The user can raise an exception using Fail["message"] (only
    one exception flavour is supported at the moment);
  * Removed the `line' VM instruction. Error positions are now computed using
    position in code and lookup tables. Also column-inside-line is available
    in error messages;
  * Second-procedures have been removed (but @@ and @& are still accepted
    for compatibility reasons);
  * Strings are now stored inside Str objects rather than ()Char;
  * Changing version control system (from SVN) to Mercurial.

02 Dec 2009: The graphic library g does now accept strings as Str objects
  * '()Char' changed to 'Str' in the Box g library. This gives more
    flexibility (we now can, for example, save the frames of an animation
    into different files).

21 May 2009: bugfix (compilation failed with newer version of glibc/gcc)
  * Compilation of Box failed with newer version of glibc/gcc. See:

    https://sourceforge.net/tracker/?func=detail&aid=2791855&group_id=218051&atid=1041983

    Many thanks to Gerardo Exequiel Pozzi for reporting this and for
    maintaining the Arch Linux package for Box.

13 May 2009: change to improve compatibility with the Box GUI (Boxer)
  * Examples provided by Boxer were not working, since g.bxh included
    a file with ``include "poly"'' causing the example poly.box to be
    loaded instead of the right file, poly.bxh, which is provided by the g
    library. The bug has been fixed by renaming the files which are not
    meant to be included explicitly following the scheme name --> _name

21 February 2009: can copy "simple" objects + better versioning
  * When using `include "file"' we now search files also inside the directory
    containing the currently executed script. If -st is specified,
    then we search inside the current working directory.
  * Automatic copy of objects is now implemented. However one should be very
    careful when using this feature with "complex" objects, such as Str, etc.
  * Introduced the temporary #provide directive, to deal properly with
    multiple inclusions of the same header.
  * Accept now line-comments starting with #! to allow Box scripts to be
    launched directly from the OS (Unix)
  * Added some info to the -q query option (compilation date, time and version
    string, path and name of boxcore library, etc.)
  * Adjusted versioning conventions and automated the change of version
    numbers in configure.ac and in the Makefile.am-s.
  * Bugfixes and cleanup of the code. Created a libboxcore library, containing
    the base infrastructure over which Box is built).

19 November 2008: created Boxer, a GUI for Box
  * created Boxer, a GUI for Box, using PyGTK (Python bindings for GTK+).
    The GUI can be run on Linux, Mac OS and Windows. The GUI has a text view
    containing the edited source and an image view, to show the output.
    The user can click on the image and add reference points, which can then
    be used in the Box source. These points can then be dragged, giving
    the possibility to change the position and shape of objects interactively.
    In this way using Box becomes much easier, still retaining the advantages
    of a vectorial language over the traditional mouse driven graphic editors.
    The GUI makes Box a powerful tool which can be used effectively to create
    complex figures for reports/papers/presentations.
  * Real@Window.Line denotes now the width of the line, not the half width
    (this is consistent with Real@Style.Border)
  * work on propagation of special procedures, such as creators, destructors
    etc. Now members are created/destroyed when their container is created/
    destroyed.
  * updated to the latest versions of autotool/hell.
  * Char, Int and Real are now species, while the raw types are named
    CHAR, INT and REAL (needed a bugfix).
  * Bugfix and improvements (also to the code style).
  * Added the hidden option -q to query for Box configuration (may be used
    in the future to assist installation of externally provided libraries).

10 august 2008: Improved support of user defined procedures
  * exit status should now be treated more carefully:
    0, if all OK, 1 otherwise;
  * variables defined in the upper scope unit are globally defined and are
    accessible from procedures: for example, using the color structure
    inside a procedure is now possible;
  * $, $$, ... without depth specifications refer now to the current
    definition Box;
  * if NewType = OldType then NewType inherits the procedures of OldType
    (but OldType does not inherits the procedures of NewType). NewType
    inherits also the procedures of OldType which are defined after
    the occurrence of 'NewType = OldType';
  * Window.Hot now returns the last point it received as argument.
  * Str object has been introduced. This object allows to concatenate
    strings, print integers, reals, ... to string. It can be safely
    used in procedure definitions, since ()Char is automatically converted
    (Str = (()Char -> STR))

09 august 2008: Improved text formatting
  * Removed a small horrible bug in the selection of fonts:
    this was leading to crashes whenever a known postscript font
    was selected on Cairo terminals;
  * Introduced Window.Text.From to decide what corner of the text
    should go in the provided point: useful for centering text;
  * Can now handle quite complex text formatting: subscripts,
    superscripts and newlines are rendered correctly both in native
    EPS and Cairo terminals.
  * Bugfix: native EPS can now show text containing parenthesis.

27 july 2008: Improved Save method. Compile under Windows
  * Can define "incomplete windows": windows which throw an error
    whenever they are used. Creation of such windows, however,
    does not produce any errors: this concept is useful for the
    new syntax of the Window.Save method;
  * Extended the syntax of the Window.Save method: it can now take
    a window and (1) complete it (if it is uncomplete) or (2) put
    the figure into it (if it is complete). In both cases the figure
    fits the destination window;
  * Created man page and Ubuntu package;
  * Ported the source to Windows: we now compile on XP and can
    distribute the first version of Box for Windows;

5 July 2008: Bugfixes in the transformation of draw styles and font

28 June 2008: Filling with linear/radial color gradients (Gradient[])
  * Can now express color in HSV (besides RGB) and convert RGB<-->HSV.
  * Can now fill objects using linear or radial color gradients
    (Gradient[] can be used for the purpose).
  * Color[] defines .r=.g=.b=0 and .a=1 by default. Opaque red can be
    defined with Color[.r=1]. Similar behaviour for HSV[].
    They also both accept a triple (for opaque colors) or quadruple
    of reals (for translucent colors).

21 June 2008: Style object now allow tracing borders
  * We can now draw polygons with border, controlling the join style
    (including the miter limit), the cap style, the dashes, the color.
  * Style can be instructed to draw empty polygons. In that case
    the border is not closed in Poly, unless Poly.Close[] is used.

29 May 2008: Work on the documentation and on the internal allocation system.
  * Started to write documentation on the graphic capabilities of Box.
  * Destructors are now called automatically by the VM before deallocation
    of objects: Window, PointList and Style are now fully deallocated.
  * Used Valgrind to track allocation errors: found one major problem
    and corrected other two minor ones. Need to work more on this.

17 May 2008: Integration of Cairo in the graphic library.
  * The graphic terminal has been adjusted, removing the lowfn midfn
    function list, which are now replaced by full declared methods.
  * A new function to open any type of windows has been introduced.
    This function takes a GrpWindowPlan which can contain the window
    size, file_name, resolution, etc.
  * Cairo is now detected in configuration scripts and new terminals
    are avaiblable when Box is compiled with support for it.
    We now can use Cairo image, PDF, SVG, PS terminals.
  * Extended the method Window.Save, which now looks at the extension
    and can accordingly save EPS, PNG, PDF, SVG, BMP files.
  * Colors have now an alpha channel: translucency is possible with
    Cairo windows!
  * We can now set the drawing Style: we can decide what rule to use
    for filling and we now can also clip along the path generated
    by all the graphic commands (Line, Circle, Poly and Text).

26 April 2008: Improvements and bugfixes.
  * Subtypes are resolved into their children if the method in Subtype.Method
    is not found.
  * Bugfix in the resolution of subtype-->parent.

20 April 2008: Adjustments and bugfixes.
  * Bugfix on the strnlen implementation. Should affect only a limited
    number of architectures.
  * Introducing reference counting for objects allocated by the VM:
    still not used to the full extent.
  * Several improvements to Window.Line: it should now be more robust,
    and supports lines having multiple join styles.
  * Poly accepts now (;)
  * Error messages are now displayed when undefined items appear
    inside structures.

30 March 2008: bugfixes and improvements.
  * fixed the VM bug for jump instruction on 64 bit machines.
  * improved the handling of open procedures

22 March 2008: minor improvements, added examples.
  * added builtin functions Max, Min, Abs, Vec.
  * added more examples in the examples directory.
  * Color@Window sets now the current fg color.

20 March 2008: first release of the tarball. Still very unstable.
  First tarball is released, just for letting people try the package.

