Version 3.3 - 2 November 2003

	geant:

	* Fixed bug in task <gepp> occuring when a nested <fileset>
	  element defined in the new format was specified.

	Gobo Eiffel XML Library:

	* XM_EIFFEL_PARSER.disable_namespaces allows multiple 
	  colons in names (strict XML compliance).

	Gobo Eiffel Kernel Library:

	* Removed usage of 'like argument' (will be removed from the
	  Eiffel language because it was a disguised way of providing
	  overloading in Eiffel) in features `substring', `to_lower',
	  `to_upper', `as_lower' and `as_upper' in KL_STRING_ROUTINES.

Version 3.2 - 29 June 2003

	geant:

	* Element <fileset> uses a new format. The old format is
	  still working but an obsolete-message will be shown when applied.
	* Added optional attribute 'export' which takes a comma separated
	  list of project names to which the given target is exported.
	* Added new command-line option -t (--targets) to list targets
	  and their descriptions.
	* Added new task <available>.
	* Added subelement <directoryset> to task <delete>.
	* Added attributes 'class' and 'feature' to task <getest>.
	* The task <hact> now takes advantage of Halstenbach incremental
	  compiler.
	* Added attributes 'old_typing' and 'new_typing' to task <geyacc>.

	geyacc:

	* Made the semantic values more type-safe. Now the parser
	  skeleton class is not generic anymore, and there is one
	  different stack generated per declared type in the %type
	  or %token clauses. Geyacc also generates the corresponding
	  attributes `last_<type>_value' instead of `last_value'
	  to be used to set the semantic values of tokens.
	  Transition path: If you still want to use the old typing
	  mechanism (now made obsolete), use geyacc with the command-
	  line option --old_typing or with geant's attribute 'old_typing'
	  in task <geyacc>. It is also recommended that you replace
	  class YY_PARSER_SKELETON by YY_OLD_PARSER_SKELETON in your
	  code. Alternatively you can now switch to the new typing
	  mechanism using geyacc's --new_typing command-line option
	  or attribute 'new_typing' in task <geyacc> in geant. In
	  that case you will have to use the non-generic class
	  YY_NEW_PARSER_SKELETON instead of YY_PARSER_SKELETON and
	  replace the calls to `last_value' by the corresponding
	  `last_<type>_value' in your code. In the next release
	  YY_PARSER_SKELETON will stop to be a synonym of
	  YY_OLD_PARSER_SKELETON and will be used as a replacement
	  of YY_NEW_PARSER_SKELETON. In the release after, the old
	  typing mechanism will not be supported anymore, classes
	  YY_OLD_PARSER_SKELETON and YY_NEW_PARSER_SKELETON will be
	  removed, and you will have to use YY_PARSER_SKELETON along
	  with the `last_<type>_value' attributes in your code.

	getest:

	* Added command-line options --class and --feature to pass
	  the regexps for tested class names and feature names as
	  argument instead of through the 'class' and 'feature'
	  fields of the config file (needed by Guy Fokou).
	* Better formatting of the message when `assert_equal' or
	  `assert_not_equal' fail (suggested by Berend de Boer).

	Gobo Eiffel Lexical Library:

	* Renamed `convert' as `convert_to_equivalence' in class
	  LX_SYMBOL_CLASS because 'convert' is a keyword in ETL3.

	Gobo Eiffel Tools Library:

	* Big chunks have been redesigned. Still under development.

	Gobo Eiffel XML Library:

	* Eiffel parser now accepts 'iso-8859-1' encoding.
	* Tree formatter now produces valid XML.
	* Tree node parent not void (when not the root node) implemented
	  where missing and creation procedures updated accordingly. Also
	  for the root element, so that `root_node' returns the real
	  root (XM_DOCUMENT). XM_NODE.level consequently offset by 1.
	* XM_COMPOSITE now a read-only list. Modification routines 
	  are in XM_ELEMENT and XM_DOCUMENT (typing is used to allow 
	  only the correct node types to be added).
	* XM_COMPOSITE descendants' modification routines remove 
	  a node from its previous parent if any. They also have 
	  `make_last' creation routines that add the node to the 
	  composite. `make_last' is faster than `make', `force_last'.
	* XM_NODE.parent_element added, root_node now XM_DOCUMENT.
	* XM_NAMESPACE stricter contracts and uri invariant, 
	  `is_default' replaced by `not has_prefix', removed rather 
	  than obsoleted due to SmartEiffel's ANY using the name.
	* XM_DOCUMENT.set_root_element now exported to ANY.
	* XM_NAMESPACE_RESOLVER now issues empty strings (the default 
	  namespace) rather than the parent element's namespace for 
	  on_attribute events in the case of unprefixed attributes.
	  (XML Names says unprefixed attributes have no namespace.)
	* XM_ELEMENT.*attribute_by_name only look for unprefixed 
	  attributes, for the same reason as above.
	* Added _by_qualified_name routines to tree nodes.
	* XM_FORMATTER.last_string replaced by .last_output stream.
	* XM_NODE_TYPER.attribute obsoleted and renamed to `xml_attribute' 
	  to avoid future keyword collision.

	Miscellaneous:

	* Now uses the Eiffel Forum License version 2, which is an OSI
	  Approved License and a GPL-Compatible, Free Software License.

	* Does not support Halstenbach compiler anymore. Indeed Halstenbach
	  does not seem to maintain/release their Eiffel compiler on their
	  Web site anymore and a poll among the Gobo users has shown that
	  it was not worth the effort to continue supporting this out-of-date
	  compiler in Gobo.

Version 3.1 - 18 December 2002

	gelex:

	* Feature YY_BUFFER.content is now of type KI_CHARACTER_BUFFER
	  instead of KL_CHARACTER_BUFFER (Berend de Boer).

	geant:

	* The task <ise> now takes advantage of ISE Eiffel incremental
	  compiler.

	getest:

	* Fixed bug: only the first cluster listed in the config file
	  was taken into account (reported by Guy Fokou).

	Gobo Eiffel Kernel Library:

	* Moved feature `close' up to KI_INPUT_STREAM and
	  KI_OUTPUT_STREAM and added feature `is_closable'
	  (suggested by Franck Arnaud).
	* Made sure that `hash_code' in UC_STRING returns the same value
	  when `same_string' returns true.

	Gobo Eiffel Lexical Library:

	* LX_NFA: Renamed `infix "|{n,}|"' as `infix "|{*}|" and `infix "|{n}|"'
	  as `infix "|{}|"' because the former free operator is not valid in ETL3
	  anymore (and SE 1.0b6 already supports the new syntax). All the free
	  operators of this class have been made obsolete.

	Gobo Eiffel Time Library:

	* DT_DATE: Renamed `infix "&d"' as `infix "&@" because the former
	  free operator is not valid in ETL3 anymore (and SE 1.0b6 already
	  supports the new syntax).
	* DT_TIME: Renamed `infix "&t"' as `infix "&|" because the former
	  free operator is not valid in ETL3 anymore (and SE 1.0b6 already
	  supports the new syntax).

	Gobo Eiffel XML Library:

	* Tree: `namespace' in named nodes is now an object, which 
	  contains URI and prefix. It may be shared.
	* Tree: `*_by_name' routines check the namespace is the same.
	* Tree: `is_first' and `is_last' in XM_COMPOSITE for 
	  checking position within parent.
	* Tree: added `elements' to XM_COMPOSITE.

Version 3.0 - 1 September 2002

	gelex:

	* Added feature `wipe_out' to YY_BUFFER and YY_FILE_BUFFER,
	  which is useful in order to avoid invariant violation when
	  reusing the same input buffer for subsequent scanning.
	  (suggested by Emmanuel Stapf)
	* Options specified on the command-line now override those
	  specified in the %option directives of the input file
	  (reported by Sven Ehrke).

	geyacc:

	* Added command-line options '-k' and '--tokens-file': name
	  of the file where the tokens class will be written
	  (reported by Sven Ehrke).
	* Do not generate unused local variables anymore.
	* Do not generate unused $N type conversion routines, nor
	  conversion routines for the generic parameters of these
	  types. This caused Eiffel compilation errors when the
	  generic parameter was a formal generic parameter
	  (reported by Zoran Simic).
	* Fixed bug in default rule when the declared type is a basic
	  expanded type. For example when the declared type in the
	  %type section was INTEGER, the default rule was trying to
	  set $$ to Void instead of 0 (reported by Emmanuel Stapf).

	getest:

	* Added command-line options: -g for testcase generation
	  only, -c for testcase compilation only, and -e for
	  testcase execution only (suggested by Glenn Maughan).
	* Added assertion routines to compare file contents and
	  filenames.
	* Added command-line option --compile to pass the
	  Eiffel compilation command-line as argument instead of
	  through the 'compile' field of the config file.
	* Added command-line options -D and --define to define
	  variables which will be passed to the command running
	  the test cases.
	* The 'testgen' directory is now created by 'getest' if
	  it does not exist yet.
	* Do not try to run the test anymore when the command
	  specified for the Eiffel compilation exists with a
	  status code other than zero.

	gepp:

	* Added command-line options --lines and -l in order to
	  generate empty lines whenever lines are ignored from
	  the input file. That way line numbers are preserved.
	  (suggested by Alexander Kogtenkov)

	geant:

	* First release (contributed by Sven Ehrke).

	gexace:

	* First release (contributed by Andreas Leitner, currently
	  maintained by Eric Bezault).

	gexmlsplit:

	* First release (contributed by Andreas Leitner).

	Gobo Eiffel Kernel Library:

	* No need for 'include_path' in the Ace file anymore in
	  order to use KL_STRING_BUFFER_ROUTINES with ISE Eiffel.
	  Use new routines introduced in class POINTER in ISE
	  Eiffel 4.5 instead.
	* Added cluster $GOBO/library/kernel/io with directory,
	  file and file-system functionalities.
	* Added cluster $GOBO/library/kernel/misc with miscellaneous
	  kernel classes.
	* Added cluster $GOBO/library/kernel/unicode with Unicode
	  support classes (based on the work from Majkel Kretschmar).

	Gobo Eiffel Structure Library:

	* Fixed bug in feature `force_last' of DS_SPARSE_SET and
	  DS_SPARSE_TABLE when resizing the container.
	* Changed postconditions in DS_LINEAR_CURSOR and
	  DS_BILINEAR_CURSOR which prevented descendants to
	  implement partial traversals or different traversal
	  strategies (reported by Berend de Boer and Einar
	  Karttunen).
	* Fixed bug in HASH_TABLE related to the new implementation
	  in ancestor class DS_SPARSE_TABLE (reported by Emmanuel
	  Bouyer).
	* Fixed bug in LINKED_LIST.cursor_back (reported by Paul Ford).

	Gobo Eiffel Time Library:

	* Fixed bug related to the implementation of features `date'
	  and `time' in DATE_TIME and DATE_TIME_DURATION (reported
	  by Emmanuel Bouyer).
	* Added feature `set_storage' to DT_DATE and DT_TIME.
	* Fixed bug in feature `add_minutes' of DT_DATE_TIME
	  (reported by Glenn Maughan).
	* Fixed bug in feature `set_from_epoch_days' of DT_DATE
	  when the resulting date in 1 January 1600 (reported by
	  Emmanuel Bouyer).
	* No need for 'include_path' in the Ace file anymore in
	  order to use DT_SYSTEM_CLOCK with ISE Eiffel.
	* Added class DT_UTC_SYSTEM_CLOCK.
	* Added creation routine DT_DATE_TIME.make_from_epoch.

	Gobo Eiffel Pattern Library:

	* New library with design pattern classes.
	* Moved $GOBO/library/utility/command cluster to
	  $GOBO/library/pattern/command and change class
	  name prefix from UT to DP.
	* Added feature `exit_code' to class DP_SHELL_COMMAND.

	Gobo Eiffel Regexp Library

	* New library for regular expression handling. Contains a
	  implementation based on the PCRE package (contributed
	  by Harald Erdbruegger based on his ePCRE library).

	Gobo Eiffel XML Library

	* New library for XML parsing and XML tree handling
	  (contributed by Andreas Leitner based on his eXML
	  library, and by Franck Arnaud based on his NenieXML
	  parser. The library has been redesigned and is
	  currently maintained by Franck Arnaud).

	Miscellaneous:

	* The Gobo project is now taking full advantage of 'geant'
	  and 'gexace' instead of Makefiles (which were not portable
	  across platforms).

Version 2.0 - 29 April 2001

	geyacc:

	* Geyacc now generates the routine `token_name' along
	  with the token codes to make the debugging messages
	  more human-readable (suggested by Andreas Leitner).

	gelex:

	* Added debugging instructions at the end of routine
	  `read_token' in classes YY_COMPRESSED_SCANNER_SKELETON, 
	  YY_INTERACTIVE_SCANNER_SKELETON and YY_FULL_SCANNER_SKELETON.
	  One need to compile the system with 'debug ("GELEX")'
	  enabled. The routine `print_last_token' can be redefined
	  in descendant classes to print more debugging information.
	  In particular, the routine `token_name' generated by geyacc
	  can be used to make the debugging output more human-readable.
	  (suggested by Andreas Leitner)

	getest:

	* First release.

	Gobo Eiffel Structure Library:

	* Added argumentless creation routine `make_default' to
	  most containers. In resizable containers `make_default'
	  is equivalent to `make (default_capacity)' where
	  `default_capacity' is a constant (10) defined in class
	  DS_RESIZABLE (suggested by Franck Arnaud).
	* DS_SORTER and descendant classes now use DS_COMPARATOR
	  as comparison criterion (suggested by members of the
	  SmallEiffel mailing list).
	* Added class DS_TOPOLOGICAL_SORTER to sort partially
	  ordered items.
	* Added DS_SET and descendant classes such as DS_HASH_SET
	  and DS_MULTIARRAYED_HASH_SET.
	* DS_HASH_TABLE: added creation routine `make_map' in
	  order to compare keys with '=' instead of `equal'.
	* DS_HASH_TABLE: added features `remove_found_item',
	  `found_key' and `force_last'.
	* Added class DS_MULTIARRAYED_HASH_TABLE with the same
	  interface as DS_HASH_TABLE but implemented with a
	  sequence of fixed size arrays instead of a single array.
	  This might be useful for hash tables containing a very
	  large number of items.
	* Fixed bug in DS_LINKED_LIST.delete (reported by Emmanuel
	  Bouyer).
	* Fixed bug in QUEUE.{force, put, extend}: removed erroneous
	  postcondition "item_pushed" (reported by Emmanuel Bouyer).
	* Moved $GOBO/library/structure/base to $GOBO/library/
	  structure/other/EiffelBase.
	* Moved cursor classes next to their associated containers
	  and removed cluster $GOBO/library/structure/cursor.

	Gobo Eiffel Time Library:

	* First release.

	Miscellaneous:

	* Removed comments in 'loadpath.se' files which caused
	  problems on AmigaDOS (suggested by Thomas Aglassinger).
	* Added Makefiles in various directories.

Version 1.6 - 20 August 2000

	geyacc:

	* One can now use manifest strings (e.g. "<=" or "..")
	  in place of identifiers (e.g. LE or DOTDOT) in grammar
	  rules (suggested by Berend de Boer).
	* Anchored types are now accepted in %type declarations.
	* Improved format of tokens in verbose file (suggested
	  by Roger Browne).
	* Added ISE's language extensions to the Eiffel parser
	  example (suggested by Patrick Flaherty).
	* The Eiffel parser example now accepts empty Eiffel
	  source files (suggested by Alexander Kogtenkov).
	* Added a few words in the documentation about the Eiffel
	  debug instructions spread out in the parser skeleton
	  class (suggested by Francis Drai).

	gelex:

	* Added redefinable routine `default_action' to YY_SCANNER
	  when default rule is matched (suggested by David Massart).
	* Added `pre_action' and `post_action', called when
	  %option pre-action and %option post-action are specified
	  (suggested by Alexander Kogtenkov).
	* Added `pre_eof_action' and `post_eof_action', called when
	  %option pre-eof-action and %option post-eof-action are
	  specified.
	* Added '%option line' to generate code for line and column
	  counting (suggested by Alexander Kogtenkov).
	* Added '%option position' to generate code for character
	  counting since the beginning of the input source.
	* Fixed bug when the input buffer contains a null character
	  (reported by Emmanuel Stapf).
	* Fixed bug when scanning a token larger than the size of
	  the input buffer (reported by Emmanuel Stapf).

	Gobo Eiffel Structure Library:

	* DS_TRAVERSABLE: removed postcondition from routine
	  `valid_cursor' and made `internal_cursor' deferred
	  (suggested by Andreas Leitner).
	* DS_SEARCHABLE: added features `same_items' and
	  `same_equality_tester'.
	* DS_ARRAYED_LIST, DS_ARRAYED_STACK: got rid of garbage
	  (i.e. old items at indexes count+1..capacity) in
	  removal features.
	* DS_TABLE, DS_SPARSE_TABLE, DS_HASH_TABLE: added
	  fetaure `put_new'.
	* DS_SPARSE_TABLE, DS_HASH_TABLE: added fetaure
	  `replace_found_item'.
	* DS_SPARSE_TABLE, DS_HASH_TABLE: new optimized
	  implementation (requested by Jacques Bouchard).
	* DS_SPARSE_TABLE: added feature `key'; optimization
	  of feature `force' (avoid unnecessary resizing).
	* HASH_TABLE: optimization of features `put' and
	  `force' (avoid unnecessary resizing).
	* DS_SORTER: Added features `reverse_sort' and
	  `reverse_sorted'.

	Gobo Eiffel Kernel Library:

	* Added class KL_DIRECTORY to allow Eiffel compiler
	  portable directory access.

	Gobo Eiffel Utility Library:

	* Fixed bug in feature `append_decimal_integer' from
	  class UT_INTEGER_FORMATTER when dealing with negative
	  values.

Version 1.5 - 2 October 1999

	geyacc:

	* Fixed bug in verbose mode: the useless rules and
	  nonterminals were not displayed properly (reported
	  by Berend de Boer).
	* Fixed bug when dealing with two consecutive semantic
	  actions in a rule (reported by Alexander Kogtenkov).
	* Fixed bug whereby the end-of-file was not recognized
	  properly (reported by Patrick Doyle).
	* Updated documentation to state that the Eiffel type
	  for the semantic of a mid-rule action is the same 
	  type as declared for the full grouping (reported by
	  Andreas Auras).

	Gobo Eiffel Structure Library:

	* The documentation has been greatly improved.
	* Added a `test' directory as a starting point for
	  a test suite.
	* Added a cluster containing an implementation of the
	  main EiffelBase classes based on the Gobo containers.
	* Added support for internal iterations (a la EiffelBase).
	  Some feature renaming was necessary: routines with an
	  external cursor as argument, such as `put_right',
	  have been renamed with the `_cursor' suffix, as in
	  `put_right_cursor'. The original feature names have
	  been reused by the internal traversal interface, e.g.
	  `put_right' inserts an item to the right of the
	  internal cursor position.
	* Cursors are always kept valid. There is no need for
	  calls to `a_cursor.is_valid' anymore.
	* DS_LINEAR_CURSOR does not inherit from DS_INDEXED_CURSOR
	  anymore.
	* Added classes DS_QUEUE and DS_LINKED_QUEUE.

Version 1.4 - 14 April 1999

	* Multiple types for semantic values now supported
	  in geyacc.
	* In geyacc, $$ entities are now initialized to their
	  default Eiffel values at the beginning of semantic
	  actions and the default for missing actions is "{}"
	  (it used to be "{$$ := $1}" as in yacc and Bison).
	* Added warning/error in geyacc when $N in a semantic
	  action does not match with a symbol in the rule.
	* Fixed bug in output of geyacc verbose mode (option -v).
	* Routine `clear_all' from YY_PARSER_SKELETON clears
	  internal stacks by default (call to `clear_stacks').
	* Added two new types in $GOBO\library\kernel:
	  STRING_BUFFER and FIXED_ARRAY (array with lower
	  bound equal to zero). These two types are used
	  instead of STRING and ARRAY in gelex and geyacc
	  skeleton classes for optimization purposes.
	  STRING_BUFFER maps either to SPECIAL [CHARACTER]
	  or STRING, and FIXED_ARRAY [G] maps either to
	  SPECIAL [G] or ARRAY [G] depending on the Eiffel
	  compiler used. Only ISE Eiffel port has been
	  optimized so far. SmallEiffel port can be optimized
	  as well using FAST_ARRAY [G] or NATIVE_ARRAY [G].
	* Added features `Empty_buffer', `append_text_to_string'
	  and `append_text_substring_to_string' to YY_SCANNER.
	* Added a precondition to routine `set_start_condition'
	  in class YY_SCANNER.
	* Resize input buffer if a call to `unread_character'
	  results in too much text being pushed back (it was
	  raising an run-time error in previous releases).
	* Added command-line option -x to gelex and geyacc
	  to allow the generation of semantic actions in
	  separate routines.
	* Added command-line option -z to gelex to force the
	  generated code to use an "inspect" instruction to
	  find out which action to execute. The default is to
	  use binary-search implemented with "if" instructions.
	* Fixed operator precedence bug in "$GOBO\example\
	  parse\eiffel\eiffel_parser.y".

Version 1.3 - 15 August 1998

	* Geyacc has been totally rewritten in Eiffel.
	* Replaced attribute `output_file' by procedure
	  `output' in class YY_SCANNER to avoid unnecessary
	  console creation in Windows mode with Visual Eiffel.
	* Fixed bug in gelex in "equivalence class" mode when
	  dealing with regular expressions of the form x{4}.
	* Added warnings in gelex when a rule cannot be
	  matched and when the default rule can be matched
	  despite the %option nodefault or -s option.
	* Renamed classes KL_SHARED_*_ROUTINES as 
	  KL_IMPORTED_*_ROUTINES. (The old class names are
	  still temporarily valid using the classes in cluster
	  "$GOBO\library\kernel\obsolete".)
	* Gepp now supports #include "filename" instructions.
	* The second generic parameter of DS_HASH_TABLE is now
	  constrained to HASHABLE (HASHABLE was not part of 
	  SmallEiffel in previous releases).
	* Cluster `error' has been added to the Gobo Eiffel
	  Utility Library to support a flexible error
	  reporting mechanism.

Version 1.2 - 17 December 1997

	* New implementation for variable trailing context
	  in gelex, with warnings for dangerous trailing
	  contexts of form such as x*/xz*.
	* Improved documentation.

Version 1.1 - 29 October 1997

	* Bug fixed wrt variable trailing context in gelex.

Version 1.0 - 14 October 1997

	* First public release.
	* Gold Award at the Eiffel Class Struggle '97.
