Camlp4 Version 2.04:
--------------------

- [Nov 23, 99] Changed the module name Config into Oconfig, because of
  conflict problem when applications want to link with the module Config of
  Ocaml.

Camlp4 Version 2.03:
--------------------

* pr_depend:
  - [Jun 25, 99] Added missing case in "pr_depend.cmo": pattern A.B.C.
  - [Jun 5, 99] Fixed in "pr_depend.ml" case expression "Foo.Bar" displaying a
    bad dependency with file "bar.ml" if existed. And changed "pa_r.ml"
    (revised syntax parsing) to generate a more logical ast for case
    "var.Mod.lab".
  - [Apr 29, 99] Added missing cases in "pr_o.cmo" and in "pr_depend.cmo".
  - [Mar 11, 99] Added missing cases in "pr_depend.cmo".
  - [Mar 9, 99] Added missing case in pr_depend.ml.

* Other:
  - [Sep 10, 99] Updated from current Ocaml new interfaces.
  - [Jul 9, 99] Added stream type constraint in pa_oop.ml to reflect the same
    change in Ocaml.
  - [Jun 24, 99] Added missing "constraint" construction in types
  - [Jun 15, 99] Added option -I for command "mkcamlp4".
  - [May 14, 99] Added man pages (links) for camlp4o, camlp4r, mkcamlp4, ocpp
  - [May 10, 99] Added shell script "configure_batch" in directory "config".
  - [May 10, 99] Changed LICENSE to BSD.
  - [Apr 29, 99] Added "ifdef" for mli files.
  - [Apr 11, 99] Changed option "-no_cp" into "-sep" in pr_r.cmo and pr_o.cmo.
  - [Apr 11, 99] Fixed (old) bug: too long strings where bad pretty printed.
  - [Mar 24, 99] Added missing stream type constraint for parsers.
  - [Mar 17, 99] Changed template Makefile to use ocamlc.opt and ocamlopt.opt
    by default, instead of ocamlc and ocamlopt.
  - [Mar 9, 99] Added ifndef in pa_ifdef.ml.
  - [Mar 7, 99] Completed and fixed some cases in pr_extend.ml.

Camlp4 Version 2.02:
--------------------

* Parsing:
  - [Feb 27, 99] Fixed 2 bugs, resulting of incorrect Ocaml parsing of the
    program example: "type t = F(B).t"
  - [Jan 30, 99] Fixed bug "pa_op.ml", could not parse "parser | [<>] -> ()".
  - [Jan 16, 99] Added "define" and "undef" in "pa_ifdef.cmo".
  - [Dec 22, 98] Fixed precedence of "!=" in Ocaml syntax

* Printing:
  - [Mar 4, 99] Added pr_depend.cmo for printing file dependencies.
  - [Dec 28, 98] Fixed pretty printing of long strings starting with spaces;
    used to display "\\n<spaces>..." instead of "<spaces>\\n...".

* Camlp4:
  - [Feb 19, 99] Sort command line argument list in reverse order to
    avoid argument names conflicts when adding arguments.

* Olabl:
  - [Feb 26, 99] Started extensions for Olabl: directory "lablp4" and some
    changes in MLast. Olabl programs can be preprocessed by:
        camlp4 pa_labl.cma pr_ldump.cmo

* Internal:
  - Use of pr_depend.cmo instead of ocamldep for dependencies.

Camlp4 Version 2.01:
--------------------

Token interface
* Big change: the type for tokens and tokens patterns is now (string * string)
  the first string being the constructor name and the second its possible
  parameters. No change in EXTEND statements using Plexer. But lexers
  have:
  - a supplementary parameter "tparse" to specify how to parse token
    from token patterns.
  - fields "using" and "removing" replacing "add_keyword" and
    "remove_keyword".
  See the file README-2.01 for how to update your programs and the interface
  of Token.

Grammar interface
* The function "keywords" have been replaced by "tokens". The equivalent
  of the old statement:
       Grammar.keywords g
  is now:
       Grammar.tokens g ""

Missing features added 
* Added "lazy" statement (pa_r.cmo, pa_o.cmo, pr_r.cmo, pr_o.cmo)
* Added print "assert" statement (pr_o.cmo, pr_r.cmo)
* Added parsing of infix operators like in Ocaml (e.g. |||) in pa_o.cmo

Compilation
* Added "make scratch"
* Changed Makefile. No more "make T=../", working bad in some systems.
* Some changes to make compilation in Windows 95/98 working better (thanks
  to Patricia Peratto).

Classes and objects
* Added quotations for classes and objects (q_MLast.ml)
* Added accessible entries in module Pcaml (class_type, class_expr, etc.)
* Changed classes and objects types in definition (module MLast)

Miscelleneous
* Some adds in pa_sml.cmo. Thanks to Franklin Chen.
* Added option "-no_cp" when "pr_o.cmo" or "pr_r.cmo" is loaded: do
  not print comments between phrases.
* Added option "-split_gext" when "pa_extend.cmo" is loaded: split GEXTEND
  by functions to turn around a PowerPC problem.

Bug fixes
* Fixed pa_r.cmo, pa_o.cmo to parse, and pr_r.cmo, pr_o.cmo to print "(x:#M.c)"
* Fixed printing pr_o.cmo of "(a.b <- 1)::1"
* Extended options with parameters worked only when the parameter was sticked.
  Ex:
     camlp4o pr_o.cmo -l120 foo.ml
  worked, but not:
     camlp4o pr_o.cmo -l 120 foo.ml

Camlp4 Version 2.00:
--------------------

* Designation "righteous" has been renamed "revised".
* Added class and objects in Ocaml printing (pr_o.cmo), revised parsing
  (pa_r.cmo) and printing (pr_r.cmo).
* Fixed bug in Ocaml syntax: let _, x = 1, 2;; was refused.

Camlp4 Version 2.00--1:
-----------------------

* Added classes and objects in Ocaml syntax (pa_o.cmo)
* Fixed pr_r.cmo et pr_r.cmo which wrote on stdout, even when option -o

Camlp4 Version 2.00--:
----------------------

* Adapted for Ocaml 2.00.
* No objects and classes in this version.

* Added "let module" parsing and printing.
* Added arrays patterns parsing and printing.
* Added records with "with" "{... with ...}" parsing and printing

* Added # num "string" in plexer (was missing).
* Fixed bug in pr_o.cmo: module A = B (C);; was printed module A = B C;;
* Added "pa_sml.cmo", SML syntax + "lib.sml"
* Fixed bug in pa_r.ml and pa_o.ml: forgot to clear let_binding
* Changed Plexer: unknown keywords do not raise error but return Tterm
* q_MLast.cmo: suppressed <:expr< [$list:el$] >> (cannot work)
* Added option "-no_ss" (no ;;) when "pr_o.cmo" loaded
* Many changes and bug fixing in pretty printing pr_o.cmo and pr_r.cmo
* Command ocpp works now without having to explicitely load
  "/usr/local/lib/ocaml/stdlib.cma" and
  "/usr/local/lib/camlp4/gramlib.cma"

* Fixed problem of pretty print "&" and "or" in normal and righteous syntaxes
* Added missing statement "include" in signature item in normal and righteous
  syntaxes
* Changed precedence of ":=" and "<-" in normal syntax (pa_o et pr_o):
  now before "or", like in Ocaml compiler.
* Same change in righteous syntax, by symmetry.

Camlp4 Version 1.07.2:
----------------------

Errors and missings in normal and righteous syntaxes.

* Added forgotten syntax (righteous): type constraints in class type fields.
* Added missing syntax (normal): type foo = bar = {......}
* Added missing syntax (normal): did not accept separators before ending
  constructions (many of them).
* Fixed bug: "assert false" is now of type 'a, like in Ocaml.
* Fixed to match Ocaml feature: "\^" is "\^" in Ocaml, but just "^" in Camlp4.
* Fixed bug in Windows NT/95: problem in backslash before newlines in strings

Grammars, EXTEND, DELETE_RULE

* Added functorial version for grammars (started in version 1.07.1, 
  completed in this version).
* Added statements GEXTEND and GDELETE_RULE in pa_extend.cmo for functorial
  version.
* EXTEND statement is added AFTER "top" instead of LEVEL "top" (because
  of problems parsing "a; EXTEND...")
* Added ability to have expressions (in antiquotation form) of type string in
  EXTEND after keywords "LIDENT", "UIDENT", "IDENT", "ANTIQUOT", "INT" as
  in others constructions inside EXTEND.
* A grammar rule hidden by another is not deleted but just masked. DELETE_RULE
  will restore the old version.
* DELETE_RULE now raises Not_found if no rule matched.
* Fixed bug: DELETE_RULE did not work when deleting a rule which is a prefix of
  another rule.
* Some functions for "system use" in [Grammar] become "official":
  [Entry.obj], [extend], [delete_rule].

Command line, man page

* Added option -o: output on file instead of standard output, necessary
  to allow compilation in Windows NT/95 (in fact, this option exists since
  1.07.1 but forgotten in its "changes" list).
* Command line option -help more complete.
* Updated man page: camlp4 options are better explained.
* Fixed bug: "camlp4 [other-options] foo.ml" worked but not
  "camlp4 foo.ml [other-options]".
* Fixed bug: "camlp4 foo" did not display a understandable error message.

Camlp4's compilation

* Changes in compilation process in order to try to make it work better for
  Windows NT under Cygnus.

Miscellaneous

* Added [Pcaml.add_option] for adding command line options.

Camlp4 Version 1.07.1:
----------------------

* Added forgotten syntax in pr_o: type x = y = A | B
* Fixed bug negative floats parsing in pa_o => error while pretty printing
* Added assert statement and option -noassert.
* Environment variable CAMLP4LIB to change camlp4 library directory
* Grammar: empty rules have a correct location instead of (-1, -1)
* Compilation possible in Windows NT/95
* String constants no more shared while parsing Ocaml
* Fixed bug in antiquotations in q_MLast.cmo (bad errors locations)
* Fixed bug in antiquotations in q_MLast.cmo (EOI not checked)
* Fixed bug in Plexer: could not create keywords with iso 8859 characters

Camlp4 Version 1.07:
--------------------

* Changed version number + configuration script
* Added iso 8859 uppercase characters for uidents in plexer.ml
* Fixed bug factorization IDENT in grammars
* Fixed bug pr_o.cmo was printing "declare"
* Fixed bug constructor arity in Ocaml syntax (pa_o.cmo).
* Changed "lazy" into "slazy".
* Completed pa_ifdef.cmo.

Camlp4 Version 1.06:
--------------------

* Adapted to Ocaml 1.06.
* Changed version number to match Ocaml's => 1.06 too.
* Deleted module Gstream, using Ocaml's Stream.
* Generate different AST for C(x,y) and C x y (change done in Ocaml's compiler)
* No more message "Interrupted" in toplevel in case of syntax error.
* Added flag to suppress warnings while extending grammars.
* Completed some missing statements and declarations (objects)
* Modified odyl implementation; works better
* Added ability to extend command line specification
* Added "let_binding" as predefined (accessible) entry in Pcaml.
* Added construction FUNCTION in EXTEND statement to call another function.
* Added some ISO-8859-1 characters in lexer identifiers.
* Fixed bug "value x = {val = 1};" (righteous syntax)
* Fixed bug "open A.B.C" was interpreted as "open B.A.C"
* Modified behavior of "DELETE_RULE": the complete rule must be provided
* Completed quotations MLast ("expr", "patt", etc) to accept whole language
* Renamed "LIKE" into "LEVEL" in grammar EXTEND
* Added "NEXT" as grammar symbol in grammar EXTEND
* Added command "mkcamlp4" to make camlp4 executables linked with C code
* Added "pr_extend.cmo" to reconstitute EXTEND instructions

Camlp4 Version 0.6:
-------------------

--- Installing

* To compile camlp4, it is no more necessary to have the sources of the
  Objective Caml compiler available. It can be compiled like any other
  Objective Caml program.

--- Options of "camlp4"

* Added option -where: "camlp4 -where" prints the name of the standard
  library directory of Camlp4 and exit. So, the ocaml toplevel and the
  compiler can use the option:
	-I `camlp4 -where`

* Added option -nolib to not search for objects files in the installed
  library directory of Camlp4.

--- Interface of grammar library modules

* The function Grammar.keywords returns now a list of pairs. The pair is
  composed of a keyword and the number of times it is used in entries.

* Changed interface of Token and Grammar for lexers, so user lexers have
  to be changed.

--- New features in grammars

* New instruction "DELETE_RULE" provided by pa_extend.cmo to delete rules.
  Ex:
     DELETE_RULE Pcaml.expr: "if" END;
  deletes the "if" instruction of the language.

* Added the ability to parse some specific integer in grammars: a possible
  parameter to INT, like the ones for LIDENT and UIDENT.

* In instruction EXTEND, ability to omit "-> action", default is "-> ()"

* Ability to add antiquotation (between $'s) as symbol rule, of type string,
  interpreted as a keyword, in instruction EXTEND.

* Ability to put entries with qualified names (Foo.bar) in instruction EXTEND.

--- Quotations

* The module Ast has been renamed MLast. The quotation expander "q_ast.cmo"
  has been renamed "q_MLast.cmo".

* Quotation expanders are now of two kinds:
  - The "classical" type for expanders returning a string. These expanders
    have now a supplementary parameter: a boolean value set to "True"
    when the quotation is in a context of an expression an to "False"
    when the quotation is in a context of a pattern. These expanders,
    returning strings which are parsed afterwards, may work for some
    language syntax and/or language extensions used (e.g. may work for
    Righteous syntax and not for Ocaml syntax).
  - A new type of expander returning directly syntax trees. A pair
    of functions, for expressions and for patterns must be provided.
    These expanders are independant from the language syntax and/or
    extensions used.

* The predefined quotation expanders "ctyp_", "patt_" and "expr_" has
  been deleted; one can use "ctyp", "patt", and "expr" in position of
  pattern or expression.

--- Ocaml and Righteous syntaxes

* Fixed bug: "open Foo.Bar" was converted (pr_dump.cmo) into "open Bar.Foo"

* Corrected behavior different from Ocaml's: "^" and "@" were at the same
  level than "=": now, like Ocaml, they have a separated right associative
  level.

--- Grammars behavior

* While extending entries: default position is now "extension of the
  first level", instead of "adding a new level at the end".

* Another Change: in each precedence level, terminals are inserted before
  other symbols (non terminals, lists, options, etc), LIDENT "foo" before
  LIDENT (alone) and UIDENT "foo" before UIDENT (alone). New rules not
  factorizable are now inserted before the other rules.

* Changed algorithm of entries parsing: each precedence level is tested
  against the stream *before* its next precedences levels (instead of
  *after*):
       EXTEND e: [[ LIDENT "a" -> "xxx" ] | [ i = LIDENT -> i ]]; END;
  Now, parsing the entry e with the string "a" returns "xxx" instead of "a"

* Less keywords in instruction EXTEND (LEFTA, LIDENT, etc), which can be
  used now as normal identifiers.

* When inserting a new rule, a warning appears if a rule with the
  same production already existed (it is deleted).

* Parse error messages (Gstream.Error) are formatted => spaces trigger
  Format.print_space and newlines trigger Format.force_newline.


Camlp4 Version 0.5:
-------------------

* Possible creation of native code library (make opt)

* Ocaml and Righteous Syntax more complete

* Added pa_ru.cmo for compiling sequences of type unit (Righteous)

* Quotations AST
  - No more quotation long_id
  - Antiquotations for identifiers more simple

* Lot of small changes


Camlp4 Version 0.4:
-------------------

* First distributed version
