December 2020
=============

- Added missing configuration function `source-library-search'

- Fixed merging package and net names across multiple subsheets
  instantiated by one component

- Duplicate symbol names within one library are only considered an
  error if the symbol is actually used


October 2020
============

- Migrated to Guile 2.2

- Backend helper modules are now located independently from the
  location of the backend source file itself


October 2019
============

- A new gnetlist command-line option `--report-gui' has been added
  which shows errors and warnings in a GUI dialog

- Netlister error and warning messages now only contain coordinates if
  this has been requested

- The number of allowed colors has been changed to 21


September 2019
==============

- Duplicate I/O ports in a subschematic as well as duplicate I/O pins
  in a subschematic symbol are now treated correctly

- The python package `gaf' accepts the same kind of whitespace in
  symbol and schematic files as libgeda does

- The number of fixed places in error message and XML file format
  coordinates has been changed to 3 in order to match the concept of
  gEDA/gaf units being "mils" (which isn't necessarily correct but may
  help avoid confusion)


July 2019
=========

- The command-line tool `xorn' returns exit status 99 on an internal
  error and doesn't print error-reporting information any more when
  interrupted with Ctrl+C


September 2018
==============

- The wrapper script `gnetlist2' is now the official gnetlist executable


August 2018
===========

- Renamed package `xorn.geda' to `gaf'


October 2017
============

- Python backends can now be invoked using `gnetlist2'


July 2017
=========

- Added netlist backend for Igor2's tEDAx format


March 2017
==========

- Added options -l and -a to `xorn extract'


February 2017
=============

- Power symbols can now be defined using a netname=NAME attribute
  instead of the old net=NAME:1

- Port symbols can now be defined using a portname=NAME attribute
  instead of the old refdes=NAME

- Implemented parameter substitution for subschematics

- Object data is now validated by the storage library and invalid data
  rejected

- Object data is normalized after copying; any stored object data is
  guaranteed to be in a standard format

- Storage library: xorn_delete_object and xorn_delete_selected_objects
  now return 0 on success and -1 on failure (no objects matching the
  specified selection being considered success)

- Storage library: Object manipulation functions now have an
  additional parameter `err' returning the error code


July 2016
=========

- Missing symbols are now handled properly

- Added python module `xorn.xml_writer' which provides general-purpose
  XML writing functionality

- Added python modules `xorn.fixednum' and `xorn.hybridnum' which
  implement a fixed-point number format without and with a hexadecimal
  floating-point part, respectively

- Added XML schematic/symbol file format

- Added subcommand `xorn convert' which allows converting a schematic
  or symbol file from one format to another

- When reading a schematic file which contains fallback versions of
  symbols or pixmaps and a symbol or pixmap can't be found, a warning
  is now issued (instead of an error) and the fallback version used

- Duplicate pinseq= values are no longer considered an error as long
  as they aren't relevant for slotting


June 2016
=========

- Fixed a bug which caused a net segment to be internally listed twice

- Added regression tests for fixed bugs

- A pin which occurs in the slot definition of a slotted component but
  is missing from the symbol is now considered an error

- Errors while reading a file are now reported to a callback object
  and don't cause the state to become invalid


April 2016
==========

- Added Python module `xorn.guile' which allows adding Guile as a
  script interpreter to a Python application

- Added gnetlist Guile API to the netlister

- Added `guile' backend which allows using backends written in Scheme
  with the new netlister

- Added wrapper script `gnetlist2' as a drop-in replacement for
  gnetlist


January 2016
============

- Directory sources can now be recursive


September 2015
==============

- The ripperdir field on buses is now written correctly

- Fixed a bug which caused nets to be shorted when using customizable
  power symbols

- Fixed a bug which caused some components to remain unnamed in
  hierarchical schematics


August 2015
===========

- Files which contain `\r\n' line endings are now read correctly

- Added python package `xorn.geda.netlist' which allows creating a
  netlist from one or more gEDA schematic files

- Added a set of backends (mostly from gnetlist) which output netlists
  in various formats

- Added subcommand `xorn netlist', a command-line interface to the
  netlister


May 2015
========

- Added python module `xorn.geda.clib' which implements the gEDA
  symbol library mechanism


May 2014
========

- Added python package `xorn' which provides proxy classes for easy
  access to the storage backend, base64 encoding/decoding, and helper
  functions for writing files in a safe way

- Added python package `xorn.geda' which supports reading and writing
  gEDA files and gEDA attribute handling

- Added command-line utility `xorn' with two sub-commands:
    extract - extract embedded symbols or pixmaps from a schematic
    find-symbol-by-pinout - find symbols matching a given pinout

- Python modules can now be imported from the build directory by
  adding the subdirectory `built-packages' to PYTHONPATH

- Added internationalization


April 2014
==========

- Python extension: Members of data classes can now be passed as
  constructor arguments

- Added symbol and pixmap attributes

- Python extension: All functions now raise KeyError if an object
  argument does not exist


March 2014
==========

- Storage library: Functions returning an object list now have an
  integer return type (instead of void).  They will return 0 on
  success and -1 on failure.  The returned pointer may be NULL if no
  objects are returned.

- Added API documentation.  Type `make doxygen' to build.

- New functions:
    xorn_object_is_selected (xorn.storage.object_is_selected)
    xorn_select_difference  (xorn.storage.select_difference)
    xorn_select_including   (xorn.storage.select_including)
    xorn_select_excluding   (xorn.storage.select_excluding)

- Objects now have an intrinsic order

- Text objects can be attached to net and component objects

- New functions:
    xorn_get_object_location     (xorn.storage.Revision.get_object_location)
    xorn_relocate_object         (xorn.storage.Revision.relocate_object)
    xorn_get_objects_attached_to (xorn.storage.get_objects_attached_to)
    xorn_select_attached_to      (xorn.storage.select_attached_to)

--------------------------------------------------------------------------------

Copyright (C) 2013-2020 Roland Lutz

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.  A copy of the license is included in the ``GNU Free
Documentation License'' file as part of this distribution.
