
Mon, 21 Jun 2004

   *  zoem-04-173 released.

   *  Repeated use of \special#1 would decrease available stack space.
      Quite rare bug revealed by Tim Hughes as one of the first to use
      clmformat/zoem on a larger scale.
      This will not affect normal users of zoem.
      Fixed.

   *  Made the code better ISO-C compliant (split long constant strings).

Wed, 16 Jun 2004

   *  zoem-04-168 released.

   *  fixed embarassing special-related bug. It *did* affect exisiting macro
      packages (see below).

Tue, 15 Jun 2004

   *  zoem-04-167 released.

   *  \special#1 now evaluates its argument. This does not affect existing
      macro packages.

   *  Updated generic_zmm documentation.

   *  Treat spaces in manual name correctly (fixed bug in man.zmm results
      spotted by Joost van Baal).

Sun, 13 Jun 2004

   *  zoem-04-165 released.

   *  fixed bug where inline files would cause zoem to crash.

   *  introduced enclosing variants for all paragraph incarnations.
      \par     ->    \par#1         (content)
      \cpar#1  ->    \cpar#2        (caption, content)
      \car     ->    \car#1         (content)
      \ccar#1  ->    \ccar#2        (caption, content)
      Separation tags (such as \par) will be phased out from the
      zoem macro packages. \item and \sec are to follow.

   *  \formatted#1 now skips \<> scope as well.

   *  Embedded newlines in *ml syntactic sugar \<..> would screw up the
      line count. Now fixed.

   *  \<> stacks are now tied to files, so that alternating output
      can never erroneously corrupt the well-formedness stack. (Do note that
      funny user-side inverse processing could and still can do that).

   *  Environment stacks (\begin and \end stuff) are now also tied to files,
      same as above.

   *  The hash module in the underlying library code was overhauled.
      hashes now maintain private storage for links and key-value pointers.

Tue, 20 Apr 2004

   *  zoem-04-111 released.

   *  small documentation fixes.


Mon, 19 Apr 2004

   *  zoem-04-110 released.

   *  the builtin alias \error#1 is gone, replaced by \inform#1.

   *  Streamlined the examples, made them more suitable for web-publishing.

   *  Fixed a bug recently introduced into the util library;
      file read from STDIN would only read a single line.

   *  (updated web index, otherwise irrelevant).

Sat, 17 Apr 2004

   *  zoem-04-108 released.

   *  Some activity at meta-zoem primitive level.
      A new exception mechanism was fully integrated with the error
      framework.

      -  Introduced \throw#2, which generalizes \quit (now removed).
      -  Removed \zoem#1. It is generalized by \catch{label}{expression}
         and \try{expression}.
      -  Reimplemented \quit as \done, specialized for clean premature
         file exit.

      This enables

         \catch{towel}{
            \while{1}{
               do stuff
               \if{ifstuff}{\throw{towel}}{}
               do stuff
            }
         }

      and
      
         \catch{error}{
            do possibly erroneous *or* towel stuff
         }

      or

         \try{ stuff }

         inspect
            \__zoemstat__ (towel|error|ok) and
            \__zoemput__  (the possibly truncated result of \try{stuff})

      \catch#2 and \try#2 can be arbitrarily nested.
         
   *  The primitive \throw#2 is used as
         \throw{towel}{msg}
         \throw{error}{msg}

      The macros
         \throw{towel}
         \throw{error}

      expand to \throw{towel}{} and \throw{error}{} and do not issue a message.

   *  The new alias \error#1 generates an error message, it expands to
      to \write{stderr}{device}{\1\@{\N}}

   *  Removed alias \ignore#1, use \""#1 instead.
      (e.g. \""{ignore
               stuff
            }
      )

   *  Fixed zum.azm, which contained bogus begin#1 description.

   *  Fixed small bug; \write#3 would erroneously set \__fnout__.
      Using \__fnout__ as in \write{\__fnout__}{filter}{stuff}
      now works as expected.

Wed, 7 Apr 2004

   *  zoem-04-098 released.

   *  fixed documentation to exclusively use/describe the begin#2 primitive.

   *  The old and ugly \begin{itemize{{foo}{bar}}} syntax now generates
      a syntax error. (use \begin{itemize}{{foo}{bar}}, introduced
      in zoem-04-072).

   *  fixed -e option related bug, changed its implementation.

   *  Introduced \*{'e} syntax, equivalent with \*'e* syntax. The new syntax
      is optionally extendible and more in line with the rest of zoem.
      This move is similar to the inline file name change \=fname= -> \={fname}
      introduced earlier.  The old \*'e* syntax will not be removed but
      if used error messages are issued.

   *  The \formatted#1 tokens \`<` and \`>` were changed to \`[` and \`]` for
      esthetic reasons.

Tue, 30 Mar 2004

   *  zoem-04-090 released.

   *  Fixed some small documentation glitches.

   *  At request of the zoem user community, the faqsec environment
      was moved to a key/value based syntax. The two positional arguments
      <label> (first) and <caption> (second) are now tied to
      values 'ref' and 'cap'. So now you write

         \begin{faqsec}{{ref}{abc}{cap}{Any Balding Clown}}

      which was previously

         \begin{faqsec}{:{abc}{Any Balding Clown}}

Fri, 12 Mar 2004

   *  zoem-04-072 released.

   *  As an exceptional case, a syntax change (fix, really)
      was introduced that requires updating of user-space zoem files that use
      the faqsec environment from the FAQ package faq.zmm .  This is the only
      environment affected by the change in begin#1 parsing described below.

   *  Implemented chunked reads. By default, zoem will read entire files
      before processing them. If -chunk <num> is specified on the command
      line, zoem will try to output a chunk once its size exceeds <num> bytes.
      At that stage it will simply append lines until it finds itself in the
      outermost scope (outside of any block).  So, finally, you will be able
      to throw files of any size at zoem.  Do note the level restriction
      though; if a block (pair of balanced curlies) spans the entire file zoem
      will attempt to read the file in its entirety.

      Perhaps chunked reads will become the default in a later release.

   *  Added begin#2 macro (not a primitive). The vararg part of
      the begin#1 syntax \begin{itemize{{align}{left}}} is placed
      in a separate argument as it should have been from the
      beginning: \begin{itemize}{{align}{left}}. The old syntax
      is deprecated, as it is special-case and not in line with
      general zoem syntax principles.

      The old syntax is still available - in fact, begin#2
      is currently rewritten to the begin#1 syntax.
      The plan is to phase out begin#1 at some point in the future.

   *  By default, the second argument of begin#2 (or the vararg
      part of begin#1 for that matter) is parsed as a sequence of key-value
      pairs which are set in the newly pushed dollar scope.

         \begin{foo}{{bar}{zut}{tim}{eek}}

      thus results in these keys and values:

         \$bar -> zut
         \$tim -> eek
         \$0   -> 2     \: contains the number of key-value pairs.

      The old behaviour (in which pseudo positional parameters
      \$1, \$2 and onwards are set) can be obtained by inserting a colon.

         \begin{foo}{:{bar}{zut}{tim}{eek}}

      results in these keys and values:

         \$1   -> bar
         \$2   -> zut
         \$3   -> tim
         \$4   -> eek
         \$0   -> 4     \: the number of arguments.

      As a bonus, you can now set arbitrarily many pseudo positional
      parameters.

Sat, 6 Mar 2004

   *  zoem-04-066 released.

   *  Changed format parsing so that parts may occur in any order.
      A new part *{..}{..} may be used to specify virtual length.
      A new part ~{..}{..} may be used to specify padding and delimiter.
      A new part @{..}{..} may be used to align on substring/offset.

      <=>            alignment specification; left right centered.
      ~{..}{..}      padding specification
      @{..}{..}      alignment specification; substring + offset.
      *{..}{..}      length macro + glyph string specification.
      <num>

   *  Added \lenght#1 which computes the length of its argument.
      It can be useful in the powerful new format virtual length
      functionality.

   *  Added *{key-name}{target-string} pretense part to format specification.
      Key-name specifies a macro computing a length (a likely candidate
      is \length#1 which is specified simply as length). Target-string will be
      used to compute the length, but the actual argument from the format
      vararg will be inserted. This allows some degree of separation between
      visible width of glyph arrays and their representation.

   *  Added introspective \zoem#1 primitive. The content will be processed
      and if this succeeds output is written in the macro \__zoemput__.  The
      result text is "1" for succesful and "0" for unsuccesful processing.

   *  Added \vanish#1, which processes it content but does not output
      anything. It is an alternative to \formatted#2.
      \vanish#1 allows to do lots of commenting outside definitions.
      \formatted#2 allows to format definitions themselves.

Sun, 29 Feb 2004

   *  zoem-04-061 released.

   *  Added \format#2 primitive.
      It can separately left align, center, or right align different
      arguments from a sequence.  First argument is the format string, second
      argument is a vararg.

   *  \writeto#1 (which can redirect the default output stream), if
      invoked more than once for the same file name, will append
      from the second time onwards, rather than overwrite.

   *  Fixed bug in switch#2 and branch#1; in the absence of a default-
      or else-type block, the last block would be evaluated regardless
      of the truth value of its pivot block.

   *  Fixed various documentation flaws pointed out by Joost van Baal (thx!).

   *  The obscure \%% syntax (providing freeing of multidimensional data)
      was changed to \%free, the syntax \%%% (providing dumping of
      multidimensional data) was changed to \%dump.

   *  Implemented --allow=cmd1[:cmd2]* option, allowing explicit
      specification of system commands that can be executed without asking.

Mon, 27 Oct 2003

   *  zoem-03-300 released. We are spending day 300 in 2003 people!

   *  added -tl k [tablength] option for regulating (optional) indent.

   *  Introduced zoemzoem manual page which lists the available
      zoem documentation.

   *  Fixed DOCTYPE declaration for html output, it contained stupid
      whitespace/case errors.

   *  Fixed some XML/HTML syntactic sugar bugs.

   *  Introduced the concept of alpha-stage new syntax.
      alpha-stage syntax is volatile and subject to change.

   *  \: is now generally described as introducing a pre-processing sequence;
      Its main use (and with syntax obeying the principle of Huffman
      encoding) is that of introducing comments.

   *  Retro-actively declared the recently introduced \:\ syntax
      to be alpha-stage, and removed it.

      Subtle errors could arise when commenting out
      macro sequences \foo as \:\foo (removing the newline as well).
      \:\ will never be extended preprocessing syntax again.

      The functionality previously provided by \:\ is now provided by \:/
      (introducing a comment up till and including the newline).

   *  Added alpha-stage \<foobar!> syntactic sugar for writing HTML-style
      single tags such as <br>. Now you can write
      \<br!> rather than \@{<br>} -- both result in <br>.
      It's alpha stage because perhaps another character might be better.
      Opinions, anyone?

   *  Added \:! preprocessing sequence, and the following rule:
      \: followed by whitespace or alphanumerical character or backslash will
      always be a regular comment up till and excluding the newline.

      \:! will be replaced during preprocessing time by a '\' (backslash).
      One use is this:
      \verbatim{\protect{\foo
         \bar
         \:!:  this will end up as a comment.
      }}

Sun, 12 Oct 2003

   *  zoem-03-285 released.

   *  Disabled (by default) \system#3, implemented the --unsafe,
      --unsafe-silent, and --system-honor options.

      With --unsafe, the user is prompted for each \system#3 invocation.
         If prompting is not possible (due to STDIN redirection),
         the primitive fails.
      With --unsafe-silent, the user is not prompted.
      With --system-honor, any \system#3 failure (for whatever reason,
         including safe behaviour) is regarded as a zoem failure.
         Without --system-honor (i.e. by default), \system#3 failures are
         ignored in all modes: safe, unsafe, and unsafe-silent.

   *  applied/fixed a number of fixes/issues brought forth by Andreas Kahari.

   *  added \dowhile#2 primitive.

   *  added \branch#1 primitive, which employs a vararg.
      \branch{
         {condition1}{branch1}
         {condition2}{branch2}
           ...
         {conditionN}{branchN}
         {else branch}     \: optional
      }

   *  fixed inspect#4 segfaulting bug, and inspect#4 functional bug.

   *  documented the man macros \genkvp#2 \usekvp#2 \defkvp#3 in man_zmm(7).

   *  Added \"man::cat" which can optionally be used to set
      the category heading for manual pages. If not set, a default
      is derived from the \"man::section" macro.

Mon, 22 Sep 2003

   *  Introduced NAME#2 macro; using this will ensure that the NAME
      section is apropos compatible.

   *  groff-base 1.18.1-10 has an entirely new idea of what a reasonable
      right margin is (no less than 2 positions wide). Since zoem adjusted
      the line lenght a little, this caused previous zoem output
      to have no right margin at all. Consequently, zoem now decreases
      the output line length by 2.

   *  \:\ now introduces a comment that will be stripped up to and including
      the newline. All other \: sequences introduce a comment that will
      be stripped up to and excluding the newline.

   *  Eliminated irregular inline file syntax. It now behaves the
      same as other primitives taking an argument (the argument
      is delimited by balanced curlies).

Tue, 12 Aug 2003

   *  zoem-03-224 released

   *  Removed \%snt% syntax in \formatted; replaced by
      fully similar \`snt` syntax. It looks better (no :?) and the % syntax
      was needed for grape keys (the new name for multi-dimensional data).

   *  Replaced low-level at directives \# \^ \_ by single \+{} directive.

   *  Fixed bug in formerly \dfree#1, now \%%%.

   *  Removed dget#1 dset#2 dsetx#2 dfree#1 dprint#1
      Their syntax was assimilated by set#2 def#2 setx#2 defx#2
      so that more functional behaviour was obtained with less primitives.
      Assigning:

      \set{%{a}{b}}{d}.

      retrieval now done using
         \%{a}{b}

      removal done with
         \%%{a}{b} [ \%% for the full tree ]

      dumping done with
         \%%%{a}{b} [ \%%% for the full tree ]

   *  added \"html::charset" to the generic macros.

Tue, 03 Jun 2003

   *  zoem-03-166 released.

   *  began tracking changes in ChangeLog.

