Update for 1.4.16
[xapian.git] / xapian-applications / omega / NEWS
blob90d62b41f44f94548e8972d193a630b1e3ede5d0
1 Omega 1.4.16 (2020-06-08):
3 indexers:
5 * Fix handling of XML empty tag syntax when there's a quoted parameter right
6   before the closing `/>`.  This caused `<title xml:lang="en-US"/>` to treat
7   the body text as the document title.  Spotted by Gaurav Arora.
9 * omindex: Fix killing of filter child process if the parent process receives a
10   signal.  Spotted by Gaurav Arora.
12 omega:
14 * Reject $setrelevant without an argument list.  This has never been documented
15   as allowed, and previously crashed with a segfault.  Fixes #802, reported by
16   Gaurav Arora.
18 * If there's an error opening the databases we now close any we managed to open
19   successfully before the error so that things like $dbsize can't end up
20   reporting values for a subset of the specified databases.
22 portability:
24 * Use our own autoconf cache variable namespace (xo_cv_ prefix instead of
25   ac_cv_) to avoid colliding with standard autoconf macro use if config.site or
26   a shared config.cache is used.  The former case caused a build failure for
27   the OpenBSD port with 1.4.15, reported by Lucas R.
29 Omega 1.4.15 (2020-02-24):
31 documentation:
33 * Update documentation about how to add a new format to omindex.  Patch from
34   Bruno Baruffaldi.
36 indexers:
38 * Check for a BOM on HTML files, which for HTML5 should determine the encoding.
40 omega:
42 * Allow $if{COND} without any actions which is useful as a way to evaluate
43   something but ignore the result if you just want the side effects.  Indeed
44   we were already recommending to use it if you want to ignore the return value
45   of $log.  Fixes bug introduced in 1.4.14, reported by tuftedocelot.
47 * Add OmegaScript support for $jsonbool{COND} for encoding a boolean value for
48   use in JSON.  This is equivalent to $if{COND,true,false} but more readable.
50 * Add OmegaScript support for $jsonobject{} which allows producing a JSON
51   object from an OmegaScript map.
53 * Allow specifying a format to $jsonarray{} so it is no longer restricted to
54   producing an array of strings.
56 * Add $keys{MAP} OmegaScript command which gives a sorted list of the keys from
57   an OmegaScript map.
59 portability:
61 * Simplify probes for snprintf.  The broken snprintf in libbsd in Linux libc4
62   is from ~25 years ago so way too ancient to matter now, and all callers
63   already handle the pre-ISO semantics of returning -1 for an undersize buffer
64   so we don't need to run a test program to probe for this at configure time,
65   which is more cross-compile friendly.
67 * Avoid deprecation warning on recent Linux.  We were including sys/sysctl.h if
68   it existed, which it does on Linux but we don't actually use it there.
69   Including it now warns that it is deprecated, so skip including it under
70   Linux.  Reported on IRC by kumaran.
72 Omega 1.4.14 (2019-11-23):
74 documentation:
76 * Improve omindex --help docs for --duplicates.
78 indexers:
80 * Add built-in support for iso-8859-15 so we can handle it without iconv.
81   This charset is a variant of iso-8859-1 with 8 characters changed, most
82   notably including the euro currency symbol.  It's the most commonly seen
83   charset we didn't have built-in support for.
85 omega:
87 * Fix error handling in $lookup.  We now check for errors from cdb_init()
88   and cdb_get().  We've never checked for errors from cdb_init(), while
89   for cdb_get() this bug was introduced by a warning fix in 1.2.20.
91 Omega 1.4.13 (2019-10-14):
93 documentation:
95 * Document that $log will start to return an error message in 1.5.0, and that
96   one can wrap it using a $if with no action now to be future-proof.
98 indexers:
100 * Optimise converting us-ascii to UTF-8 to do nothing, like we already do when
101   converting UTF-8 to UTF-8.
103 * scriptindex:
105   + Add new 'gap' action which provides a way to leave a gap in the term
106     positions between fields to prevent phrases and positional operators from
107     matching across fields.
109 templates:
111 * Future-proof use of $log against changes in 1.5.0.
113 Omega 1.4.12 (2019-07-23):
115 documentation:
117 * Improve docs for OmegaScript $hitlist{}.
119 * Fix RST formatting errors in omega docs.
121 * Clarify use of Q prefix for unique ID terms - it was described as "reserved",
122   but the use of "Q" is really just a convention (and in fact omindex uses "U"
123   not "Q").
125 * Clarify scriptindex's weight action takes parameter >= 0.
127 * Correct typo in OmegaScript $add parameter documentation.
129 indexers:
131 * omindex:
133   + Fix typo in mimetypes used for Apple iWork documents ("apply" instead of
134     "apple") which meant that these documents weren't actually being indexed.
135     Patch from Bruno Baruffaldi.
137   + Pipe input to ps2pdf as this accepts input on stdin.  Possibility pointed
138     out by Gaurav Arora.
140 * scriptindex:
142   + If parsedate action's format includes %z adjust for the timezone if
143     possible (this requires the non-POSIX tm_gmtoff member of struct tm)
144     and flag an error for other platforms.
146   + If parsedate action's format include %Z flag an error as that doesn't
147     seem to be usefully supported by strptime() anywhere.
149   + Fix parsedate action to treat formats without a timezone as being UTC
150     instead of localtime.
152   + Add date=unixutc.  The existing date=unix works in localtime which is
153     unhelpful if you want to use it on the output of parsedate since that's in
154     UTC; date=unixutc is just like date=unix except it always works in UTC.
156   + The date action now emits a warning for invalid values.  The documentation
157     used to say "invalid values are ignored at present", but it's more helpful
158     to flag bad data than quietly ignore it.
160   + We now check the date action's parameter at script parse time and unknown
161     values result in an error and nothing being indexed.  Previously an unknown
162     format uselessly resulted in the terms D, M and Y literally being added to
163     every document.
165   + The split action now supports a new "prefixes" split style.  This gives all
166     the prefixes from the split, so split=/,prefixes on a file path gives all
167     parent directories.
169 omega:
171 * Remove documented limitation of $subdb and $subid - the implementation
172   assumed that each omega database name corresponded to a single Xapian
173   database, and if a database name referred to a stub database file expanding
174   to multiple Xapian databases then they would misbehave.  Such cases are now
175   handled properly as well.
177 * Extend $addfilter to support adding negated filters via a new optional second
178   argument which specifies the type of filter to add.
180 * Stop $sort from needlessly ensuring the match has run.
182 * Handle corner case of nested $hitlist gracefully instead of potentially
183   entering an infinite loop.
185 testsuite:
187 * omegatest: Avoid setting TZ globally during tests as that hides bugs where
188   behaviour depends on the local timezone when it shouldn't.
190 * omegatest: Support testing when built using LeakSanitizer by suppressing
191   leak reports for cached compiled pcre regular expressions.  These aren't
192   released when the program exits but aren't memory leaks.
194 build system:
196 * Remove outdated deprecation warning suppression which was there to support
197   building from git in the run up to 1.3.2 - a development version which is
198   nearly 5 years ago now.
200 portability:
202 * Fix problems with fallback strptime() implementation which was being included
203   in the wrong binary, and was lacking a required const_cast on the return
204   value.
206 * Rework setenv() compatibility handling.  Now that Solaris 9 is dead we can
207   assume setenv() is provided by Unix-like platforms (POSIX requires it).  For
208   other platforms, provide a compatibility implementation of setenv() so the
209   compatibility code is encapsulated in one place rather than replicated at
210   every use.
212 Omega 1.4.11 (2019-03-02):
214 indexers:
216 * omindex:
218   + outlookmsg2html: Handle Subject, Date, and From headers.
220 omega:
222 * In $div and $mod we were converting a non-zero denominator from string to int
223   twice for no good reason.
225 testsuite:
227 * omegatest: Fix testcase which was failing if the local timezone was behind
228   UTC.  This testcase was added in 1.4.10.
230 * omegatest: Tweak to not fail when $time not supported - it seems that the
231   OS time functions we use report an error on GNU Hurd for unknown reasons.
233 build system:
235 * Sync up probes for OS time functions in omega's configure with those in
236   xapian-core which may solve $time not being supported on GNU Hurd.
238 portability:
240 * Add missing includes of <cerrno>.  Fixes #776, reported by Matthieu Gautier.
242 * Stop using htonl()/ntohl() in a non-network context which should improve
243   portability to platforms without a POSIX-like socket API.
245 Omega 1.4.10 (2019-02-12):
247 documentation:
249 * Use https for URLs where supported.
251 indexers:
253 * omindex:
255   + Index .apxl and .kth files as Apple Keynote.  The .apxl extension is used
256     for the XML files inside .key bundles/directories which hold the text
257     content of the presentation, and by handling them we can index .key
258     directories more usefully.  It seems they are also sometimes found by
259     themselves.  Keynote themes have a .kth extension, and key2text can also
260     handle these.
262   + Pipe input to pdftotext, pdfinto and dpkg.  These tools all support piping
263     an input file on stdin, which can be a little more efficient when we
264     already have the file open (e.g.  to determine its type using libmagic, or
265     to calculate its checksum).
267   + An empty string for the start directory is now flagged as an error.
268     Previously `/` was used instead, which is unlikely to be what is wanted
269     (and `/` can be explicitly specified if that really is what is wanted).
271   + Fix emulation of stderr redirection when the indexer's stderr has been
272     closed.  We try to avoid using the shell when running external filters, and
273     emulate 2>/dev/null in commands, but if the indexer's stderr was closed
274     this emulation was buggy and would make give the filter a closed stderr
275     instead of one redirected to /dev/null.
277   + When emulating redirection to /dev/null, we now open /dev/null once and
278     dup that fd each time which is a little more efficient and simplifies the
279     code.
281 * scriptindex:
283   + date=unix is now a no-op for empty input - previously it would unhelpfully
284     add boolean date terms for 1970-01-01.
286   + Warn for empty filename in LOAD action.  Previously this gave a slightly
287     confusing error: "Couldn't load file '': No such file or directory"
289   + Unknown command-line options now cause scriptindex to give a non-zero exit
290     status.
292 testsuite:
294 * omegatest: Add testcase for SPAN.n on different slots.
296 * omegatest: Update expected QueryParser output for the xapian-core change to
297   produce flatter Query trees.
299 build system:
301 * Use AM_ICONV to detect iconv() which should handle non-system install of GNU
302   libiconv properly.  Fixes #775, reported by Ryan Schmidt.
304 portability:
306 * Provide fall-back strptime() implementation for platforms which don't provide
307   it, using the C++11 std::get_time() function.  We use strptime() directly
308   where it's available as some older C++11 compilers seem to lack
309   std::get_time() (GCC 4.8 for example).  This is used by the parsedate action,
310   which was added in 1.4.6.
312 Omega 1.4.9 (2018-11-02):
314 indexers:
316 * omindex:
318   + Try harder to avoid opening a file being indexed more than once by
319     reusing the file descriptor in more cases.
321   + Hint to the OS not to cache output from external filters which require
322     using a temporary file.
324 * scriptindex:
326   + If the LOAD action successfully opens a file but hits a read error the
327     error message now reports the file name correctly.  Previously it would
328     report the partial file contents read so far instead of the file name.
330 portability:
332 * We no longer call posix_fadvise() with POSIX_FADV_NOREUSE under Linux,
333   since it's still not implemented there.  We also now only call
334   posix_fadvise() with POSIX_FADV_DONTNEED right before we close the file
335   descriptor under Linux.
337 Omega 1.4.8 (2018-10-25):
339 documentation:
341 * Assorted minor documentation improvements.
343 indexers:
345 * omindex:
347   + Improve date handling in .eml files.  We now handle a "Date:" header
348     without the day of the week, which is allowed by RFC822 and RFC2822
349     (though seems rare in practice).  If the date can't be parsed, we now
350     just omit the date information rather than failing to process the file.
352   + Add support for indexing Apple iWork documents (Keynote (.key), Numbers
353     (.numbers) and Pages (.pages)) using libetonyek.  Currently only the file
354     variants are handled since omindex doesn't currently support indexing a
355     directory as a document.
357   + Index Visio files using vsd2xhtml.
359   + Extend --filter to support filters which produce SVG as output.
361   + Handle SVG embedded in XML with svg: namespace prefix.
363   + Add --read-filters option to read a list of filters from a file, each line
364     of which is a rule as passed to --filter.  Based on a patch from Gaurav
365     Arora.
367   + Add new --mime-type-match option which allows specifying a MIME
368     Content-Type for a given shell filename pattern pattern (with the special
369     Content-Type values "ignore" and "skip" supported, as for --mime-type).
371   + Adjust --mime-type to allow ':' in the extension.  A valid MIME
372     Content-Type can't contain a colon, so if the argument to --mime-type
373     contains more than one colon it makes more sense to split at the *last*
374     colon (we used to split at the first), as an extension could conceivably
375     contain a colon.  Mostly this change is for consistency with the new
376     --mime-type-match option, where the leafname pattern could reasonably
377     contain a colon.
379   + Remove failed entries for ignored files.  If a file is mapped to
380     pseudo-mimetype "ignore" then remove any existing failure record for it so
381     that ignored files so we don't potentially end up with a lot of cruft
382     failure records for files we are no longer trying to index.
384   + If a file fails to index due to failing to allocate enough memory we now
385     try to flag it as failed to index so it will be skipped by default on
386     future runs.  This should help to avoid indexing getting stuck on
387     problematic files.
389   + Add a "pages" field with the number of pages in the document where we
390     know how to determine this (currently only for PDF files for which pdfinfo
391     reports this information).
393   + Handle initially empty database exactly the same was as when --overwrite
394     is specified.  This probably has no user-visible consequences, but it's
395     cleaner for the handling to be exactly the same.
397 * scriptindex:
399   + Improve scriptindex diagnostic messages.  All diagnostics are now labelled
400     as "error", "warning" or "note" as appropriate, and we now consistently
401     report "FILE:LINE:" (and also "COLUMN:" in most cases) to make it clearer
402     where the problem lies.
404   + Add new "split" action which splits the text on a specified delimiter and
405     executes the following actions for each piece.  Based on a patch by Gaurav
406     Arora.
408   + Missing whitespace after the closing " on an action argument is now
409     flagged as an error.  Previously scriptindex would attempt to parse
410     the following characters as the next action.
412   + Support C-like escapes for quoted parameter values.  Notably this means it
413     is now possible to include `"` in quoted parameter values.
415 omega:
417   + Value-based date range filters can now be specified via CGI parameters
418     START.N, END.N and/or SPAN.N where N is a value slot number, allowing
419     multiple concurrent filters on different slots to be specified.
421   + Support YYYY and YYYYMM limits in term-based date ranges.  Previously
422     value-based date ranges supported these as limits, but term-based date
423     ranges gave an error.
425   + Add stem_strategy option and deprecate existing stem_all option in favour
426     of this new more versatile option.
428   + Support "natural" $sort option via new flag "#" which sorts embedded
429     natural numbers in numerical order.
431   + Support numeric $sort option via new flag "n", similar to GNU sort -n.
433   + Rewrite field parsing to be more efficient, and store fields in an
434     unordered_map for faster lookup.
436 testsuite:
438 * htmlparsetest: Test whitespace collapsing.
440 portability:
442 * omegatest: Avoid "set -".  The autoconf manual notes that POSIX no longer
443   requires this, and that with traditional shells it resets -v and -x which
444   makes debugging harder.
446 * omegatest: Fix shell printf quoting issues which were a latent bug on macOS.
448 * Drop special handling for Compaq C++.  We never actually achieved a working
449   build using it, and I can find no evidence that this compiler still exists,
450   let alone that it was updated for C++11 which we now require.
452 Omega 1.4.7 (2018-07-19):
454 omega:
456 * New OmegaScript $unique command.  The existing $uniq only removes adjacent
457   entries (like the Unix uniq command) so to fully remove duplicates you need a
458   sorted input.  Sometimes it is desirable to remove duplicates from an
459   unsorted list without changing the order of the entries which are left, so
460   add $unique to do that.  If the list is sorted already, then $uniq is more
461   efficient.
463 * Fix $map to cleanly reject a single argument.
465 templates:
467 * templates/query: Merge multiple entries in the term frequency information,
468   which came from searching several prefixes by default.  Reported by Alistair
469   Buxton on #xapian-discuss.
471 * When multiple words with the same stem are in the query string we now fully
472   eliminate duplicates when showing term frequency information.
474 Omega 1.4.6 (2018-07-02):
476 general:
478 * Fix generate_sample() (used by OmegaScript $truncate and omindex) to return
479   an empty sample instead of throwing an exception when the requested sample
480   size is less than the size of the truncation indicator string.  Patch from
481   Addy.  Fixes https://trac.xapian.org/ticket/754 reported by Gaurav Arora.
483 documentation:
485 * Use terminology "value slot number" instead of "value number".
487 * Stop talking about "probabilistic terms" and "probabilistic queries" - we've
488   supported other families of weighting schemes since 1.3.2.
490 indexers:
492 * Check for the HTML5 doctype or legacy doctype declaration and use default
493   charset UTF-8 if either is present.  Previously we always used ISO-8859-1,
494   which is correct for older HTML versions, but not for HTML5.
496 * omindex:
498   + When running commands without going through the shell, emulate shell exit
499     codes 127 (for command not found) and 126 (for other cases where we fail to
500     run the command).  This means the "missing filter" handling should now work
501     properly for such commands.  Noted by Gaurav Arora.
503   + Index POD files despite minor formatting errors.  We now pass
504     --errors=stderr to pod2text so that minor formatting errors don't prevent
505     us from indexing a file.  (It may seem that --errors=none is a better
506     option, but for podlators < 4.11 that results in an ERRATA section in the
507     generated text version which we then end up indexing; 4.11 fixed that but
508     we can't assume that's in use).  Reported by Gaurav Arora.
510 * scriptindex:
512   + Avoid some unnecessary copying of Action objects by making use of C++11
513     features.
515   + Consistently send errors to stderr - some were sent to stdout.
516     Patch from Gaurav Arora.
518   + Add new "hextobin" action.  Based on a patch from Gaurav Arora.
520   + Warn about non-integer arg to hash.
522   + Fix hash action without an argument, which was failing with an assertion.
523     Based on a patch by Gaurav Arora: https://github.com/xapian/xapian/pull/189
525   + Reject 'hash' with argument < 6.  The hashing truncates and then adds a
526     6 character hash of the removed part, so can't produce a result shorter
527     than 6 characters.  Patch from Gaurav Arora.
529   + Look for alphanumerics when parsing index actions.  None of the current
530     index actions contain digits, but we give more helpful error messages this
531     way.
533   + Deprecate allowing spaces around = in scripts.  This was never documented
534     as supported, and leads to a missing argument quietly swallowing the next
535     action rather than using an empty value or giving an error.  Reported by
536     Gaurav Arora in https://github.com/xapian/xapian/pull/182
538   + In boolean and unique actions, add a colon between prefix and term when
539     the term starts with a colon.  This means the mapping is reversible, and
540     matches what omega actually does in this case when it tries to reverse the
541     mapping.  Thanks to Andy Chilton for pointing out this corner case.
543   + Add parsedate and valuepacked actions.  Together these assist adding date
544     values for sorting and date range filtering.  Based on a patch from Gaurav
545     Arora.
547   + Use DB_RETRY_LOCK to wait if the database is already in use rather than
548     sleeping for a second and retrying.  On most platforms this means we make a
549     blocking request for the lock, and even on platforms where that's not
550     supported, we now sleep and retry inside libxapian, and without having to
551     throw and catch an exception each time.
553 omega:
555 * $freq: Speed up some cases by avoiding throwing and catching an exception
556   when we know the MSet has no term frequency information.
558 * $sort: New OmegaScript command which does a string sort on an OmegaScript
559   list, with u (unique) and r (reverse) options.
561 * $cond: New OmegaScript conditional multi-way conditional.  Inspired by LISP's
562   COND, this provides a neater way to write a cascade of $if checks.
564 * $switch: New OmegaScript multi-way conditional which provides an even neater
565   way to write a cascade of $if{$eq{X,VALUE1},$if{$eq{X,VALUE2},...}}.
567 * $subdb and $subid: New commands which report the subdatabase name and the
568   docid in that subdatabase.
570 + $termprefix and $unprefix: New OmegaScript commands which expose the existing
571   code inside omega for splitting up a term.
573 * Use str() to convert time_t to string, which is simpler code and faster than
574   using snprintf().
576 testsuite:
578 * omegatest: Fix message when faketime is not installed - we were misreporting
579   this case as "faketime not working".
581 * omegatest: Add feature tests of $map.
583 * Add testcases for XML charset.  We already handle both default and specified
584   charsets for XML, but we didn't have any testcases for it.
586 build system:
588 * configure: Fix potentially confusing messages suggesting snprintf was added
589   in C90 - it was actually standardised in C99.
591 * Improve handling of multitarget rule stamp files.  Clean them on "make
592   maintainer-clean" and ship them so that --enable-maintainer-mode when
593   building from a tarball doesn't needlessly rerun the multitarget rules.
595 portability:
597 * Check for EAGAIN as well as EINTR from select().  The Linux select(2) man
598   page says: "Portable programs may wish to check for EAGAIN and loop, just as
599   with EINTR" and that seems to be necessary for Cygwin at least.
601 packaging:
603 * Use https for tarball URLs in .spec files.  This provides protection against
604   MITM attacks on people building packages using these spec files, and is also
605   slightly more efficient as the http: URLs redirect to the https: versions
606   anyway.
608 Omega 1.4.5 (2017-10-16):
610 documentation:
612 * Direct users towards $set{flag_spelling_correction,true} rather than the
613   deprecated $set{spelling,true} (which is slated for removal in 1.5.0).
615 * Fix typo in docs.
617 indexers:
619 * omindex:
621   + Check file size before calling libmagic to get the mime type, since
622     reading the file size is a much cheaper check and we can skip the
623     libmagic test if the file is empty or larger than the specified
624     maximum size.  Patch from caiyulun.
626 * scriptindex:
628   + Reject index scripts with multiple "unique" actions.  We don't handle this
629     case sensibly, and it doesn't seem like it really has a use, so better to
630     give an error for people who do this inadvertently.
632 omega:
634 * New $seterror command to set the error message.  Implemented by Gaurav Arora.
636 * Make $highlight more efficient.  Patch from Vivek Pal.
638 templates:
640 * query: Use $prettyurl for the URL shown at the end of each match (previously
641   we only used it on the URL shown as a fallback when the document has no
642   title).  Split off from changes by Vivek Pal in
643   https://github.com/xapian/xapian/pull/161
645 testsuite:
647 * omegatest: Tell faketime to freeze the clock - previously the clock ran on
648   from the specified fake time, and on a slow and/or heavily loaded machine a
649   test taking more than a second might fail due to this.
651 * Start adding feature tests for scriptindex (so far, checking that specifying
652   multiple 'unique' actions results in an error).
654 Omega 1.4.4 (2017-04-19):
656 indexers:
658 * omindex:
660   + 1.4.3 added a new --sample option, but contrary to the documentation
661     the default behaviour was to take the sample from the meta description
662     (which was the hard-wired behaviour in 1.4.2 and earlier).  The default
663     has now been changed to take the sample from the body.
665   + Index .shtm, .xhtml and .xhtm as HTML by default - .shtm is another
666     extension used for server-parsed HTML (in addition to the more common
667     .shtml), and .xhtm and .xhtml are XHTML.
669   + Fix fallback lookup for extension containing upper case.  User mappings
670     worked, but built-in extension to MIME type mappings were effectively being
671     ignored (because the result of the function call was not being checked).
672     Bug introduced in 1.3.4.
674   + Fix term-based date ranges, broken by changes in 1.4.2.  Found and
675     diagnosed by Gaurav Arora.
677   + Handle date range with start after end better - with term-based ranges,
678     this used to generate a bogus filter, but now just generates Dlatest.
680   + Use Y-term when range starts/ends at year start/end.  Previously we used 12
681     M-terms for these cases.
683   + Use full leap-year check when constructing term-based date ranges -
684     previous code was good until 2100, but even then it would only result
685     in an extra term being included for a non-existent February 29th in
686     rare cases.
688 omega:
690 * New OmegaScript command $cgiparams which returns a list of the parameter
691   names.
693 * Handle tab in a CGI parameter name in the same way as space.  Mostly this is
694   a way to avoid having tabs in CGI parameter names - they aren't useful, but
695   if they could have tabs in we can't put CGI parameter names in a list.
697 templates:
699 * query: Fix highlighting of matching terms.  We were using both $snippet and
700   $highlight, which results in double highlighting and HTML escaping, most
701   noticeable by literal <strong> and </strong> appearing around matching terms
702   in the rendered HTML snippet.  Reported by Mark Thomas on xapian-discuss.
704 build system:
706 * If gen-mimemap failed after creating mimemap.h, the rule wouldn't get rerun.
708 Omega 1.4.3 (2017-01-25):
710 indexers:
712 * omindex:
714   + Add support for indexing vCard files if Perl and its Text::vCard module
715     are available.
717   + Recognise application/x-rpm as alternative type since libmagic reports this
718     rather than application/x-redhat-package-manager.
720   + Use official MIME type application/vnd.debian.binary-package for debian
721     packages.  We used to map .deb and .udeb to application/x-debian-package,
722     but in 2014 (after we added that support for .deb) an official type was
723     registered with IANA.  We now map extensions .deb and .udeb to the official
724     type, but the unofficial type is still recognised (older versions of
725     libmagic probably report it, and users may be mapping to it).
727   + Handle PHP as MIME type text/x-php.  The main difference this makes is that
728     PHP files which don't have extension '.php' (e.g. .phtml, .phps, .php5,
729     .ph4, etc) get identified by libmagic as text/x-php and will now be indexed.
730     It also means that the user can now more easily configure different filters
731     for HTML and PHP.
733   + Don't use meta description as sample by default.  Now we have dynamic
734     snippets (via $snippet), the body text is a better default.  Also generated
735     HTML sometimes has unhelpful content in the meta description.  To get the
736     previous behaviour, use the new omindex command line option:
737     --sample=description
739 Omega 1.4.2 (2016-12-26):
741 documentation:
743 * Replace auto-generated list of the supported MIME types with an
744   auto-generated table showing the extensions that are mapped to each MIME type
745   by default.  Partly addresses #569, reported by catkin.
747 indexers:
749 * omindex: Add support for indexing markdown files (extension .md or .markdown,
750   mime-type text/markdown, using "markdown" to convert to HTML).
752 testsuite:
754 * Add support for "make installcheck" to run tests against installed version.
756 build system:
758 * configure: Fail with clear error with xapian-core < 1.4.0.
760 portability:
762 * Fix GCC -Wimplicit-fallthrough warning.
764 * Add missing <ctime> for time_t.
766 * Avoid snprintf_for formatting fixed-width integers - it results in warnings
767   about possible output truncation with GCC7 (which aren't actually possible
768   due to limited input range) and it's a bit heavyweight for this job anyway.
770 Omega 1.4.1 (2016-10-21):
772 documentation:
774 * Document bug in how $filters encodes DOCIDORDER=A.
776 * Suggest DOCIDORDER=X for DONT_CARE.
778 * Correct mentions of C++ API method MSet::get_snippet() to MSet::snippet().
780 * Fix typo in Omega 1.4.0 NEWS entry.  Patch from James Aylett.
782 indexers:
784 * omindex: Also index leafname with _ and & replaced by spaces.  Literal spaces
785   are often avoided in filenames, and "hello_world.txt" ought to be searchable
786   for via "hello" and "world".  Partly addresses #618, reported by Julien
787   Pfefferkorn.
789 omega:
791 * Add support for sorting by more than one value - e.g. SORT=+1,-2
793 * Add $msizelower and $msizeupper which provide access to the lower and upper
794   bounds on the number of matches.
796 * Add support for $set{weighting,coord}.
798 * Add weightingpurefilter option.  Normally a query consisting only of filter
799   terms won't have relevance weights calculated.  This new option allows you to
800   specify a weighting scheme to use for such queries, with the same values
801   supported as for the existing weighting option.  For example,
802   $set{weightingpurefilter,coord} will weight such queries by how many filter
803   terms match each document.
805 * $filters now includes DATEVALUE, which means we'll force the first page when
806   reloading or changing page starting from existing URLs upon upgrade to 1.4.1,
807   but the exact same existing URL could be for a search without the date filter
808   where we want to force the first page, so there's an inherent ambiguity
809   there.  Forcing first page in this case seems the least problematic
810   side-effect.  Omission noted by Gaurav Arora.
812 testsuite:
814 * Add feature test for boolprefix and prefix maps.
816 * Add more feature tests for $filters.
818 build system:
820 * GCC 4.7 is now enforced as the minimum version.
822 * Drop unused configure check for symbol visibility
824 * Drop compiler options that are no longer useful:
825   + -fshow-column is the default in all GCC versions we now support
826     (checked as GCC 4.6).
827   + -Wno-long-long is no longer necessary now that we require C++11 where
828     "long long" is a standard type.
830 portability:
832 * Fix build on platforms which don't provide timegm(), such as Cygwin.
833   Reported on xapian-discuss by John Bankert.
835 Omega 1.4.0 (2016-06-24):
837 documentation:
839 * Clarify $allterms and $terms documentation.  Make it clearer how they differ,
840   and document that $allterms without a parameter list gives all terms indexing
841   the current hit.  Noted by Andy Chilton.
843 Omega 1.3.7 (2016-06-01):
845 indexers:
847 * Make named entity look-up (e.g. &eacute; -> 233) use the same keyword-lookup
848   table approach we already use for HTML tags and built-in MIME content-types,
849   rather than a std::map, which makes it faster while using less memory.
851 Omega 1.3.6 (2016-05-09):
853 documentation:
855 * Fix overview.rst processing in VPATH build.  Our workaround for lack of an
856   include path in docutils was only handling the first include in the file.
858 omega:
860 * Implement $match command for omegascript.  Patch from Richhiey Thomas.
862 templates:
864 * Lower case all HTML tags, attributes and values; explicitly close <option>
865   tags.  Patches from Vivek Pal and Nirmal Singhania.
867 * Migrate Omega Templates to HTML5.  Patch from Nirmal Sighania.
869 * templates/query: Remove stray double quote from generated URL for spelling
870   suggestion when THRESHOLD is set.  Patch from Nirmal Singhania.
872 * templates/opensearch: Change response feeds to support OpenSearch 1.1.
873   Patch from Nirmal Singhania.
875 testsuite:
877 * Update omegatest - the order of subqueries has changed in some cases, due
878   to the "grouping" changes in the C++ API.
880 build system:
882 * Drop workaround for old git master before 1.3.2
884 Omega 1.3.5 (2016-04-01):
886 This release includes all changes from 1.2.23 which are relevant.
888 omega:
890 * Add optional prefix argument to $terms.
892 * $snippet now uses MSet::snippet() instead of the Snipper class.
894 * Add $contains{STRING1,STRING2}.  Contributed by Ayush Gupta.
896 * Add support for negated boolean filter terms, specified by CGI parameter "N".
898 * Support a direction prefix on SORT: '+' for ascending, '-' for descending.
899   SORTREVERSE set to non-0 now flips the direction.  Fixes #697, reported by
900   Andy Chilton.
902 build system:
904 * Need to AC_SUBST probed value of ZLIB_LIBS.  Noted by Paul Wise.
906 portability:
908 * omegatest; Test faketime actually works, and if it doesn't work skip
909   testcases which use it.  On OS X 10.11, faketime from homebrew doesn't seem
910   to work, probably due to the new "System Integrity Protection".  Fixes part
911   of #707, reported by James Aylett.
913 Omega 1.3.4 (2016-01-01):
915 This release includes all changes from 1.2.22 which are relevant.
917 documentation:
919 * The lists of recognised MIME types and of ignored extensions are now
920   generated along with the corresponding source code from a single master list.
921   Partly addresses #569, reported by Charles Atkinson.
923 * Note when $json and $jsonarray were added.
925 indexers:
927 * omindex:
929   + Avoid using the shell to run most external commands as it's unnecessary
930     overhead.  For the built-in filters, the only cases which now use a shell
931     are where we run two unzip commands.  For user-specified commands, a simple
932     and slightly conservative test is used, which should avoid a shell in most
933     common cases where it isn't needed.  Notably, environment variables set
934     before the command are handled.
936   + Track files which couldn't be indexed in the user metadata and skip them by
937     default on subsequent runs to avoid the costs of repeatedly running a
938     filter on a file it can't handle.  Run omindex with --retry-failed to retry
939     such files.
941   + Overhaul the "per-site" terms:
942     - 'H' prefix is hostname as before, except that if the term would be > 240
943       bytes (unlikely but possible) the end is hashed is the same way 'U'
944       prefix terms are.
945     - 'P' terms are now added for every directory level, not just the start
946       URL's path.
947     - A new 'J' prefix term is added with the start URL (less any trailing
948       '/'), which means all files indexed from a particular "site" are now
949       indexed by one term.  See #376.
951   + Add 'skip' pseudo-mimetype which extensions can be mapped to, and they will
952     then be reported and skipped (to complement the existing 'ignore'
953     pseudo-mimetype which causes files with the specified extension to be
954     quietly ignored).
956   + Treat a command of 'true' specially as meaning make the text extraction a
957     no-op (as actually running /bin/true effectively would).  This provides a
958     way to index some file types by only meta-data.  Fixes #519, reported by
959     Brian Burton.
961   + Add support for wildcard mimetypes */* and *.  Combined with filter command
962     ``true`` for indexing by meta-data only, you can specify a fall back case
963     of indexing by meta-data only using ``--filter '*:true'``.  From a
964     suggestion by Brian Burton on xapian-discuss.
966   + Index message/rfc822 and message/news.  These are individually saved email
967     messages and news articles.
969   + Index archived web page formats MAFF and MHTML.
971   + Handle .xla, yet another XL extension.
973   + Handle metadata in LibreOffice HTML export (dcterms.subject,
974     dcterms.description, dcterms.creator and dcterms.contributor).
976   + Use zlib's gzopen() instead of invoking "gzip -dc" for compressed Abiword
977     documents.
979 omega:
981 * Add options argument to $transform.
983 * Cache compiled regexps used in $transform.
985 * Add $ord OmegaScript command which returns the Unicode codepoint for the
986   first character of a UTF-8 string.
988 * Add $chr OmegaScript command which returns the UTF-8 string for given Unicode
989   codepoint.
991 * Add $csv OmegaScript command which escapes a string for use as a field in a
992   CSV file ("always quote" mode inspired by patch from Gaurav Arora.)
994 * New $filters encoding which avoids collisions.  We also compare CGI parameter
995   xFILTERS to what $filters would have returned in previous releases, so that
996   on upgrades old format serialised filters are handled correctly.
998 * Fix $jsonarray not to prepend ']' to the first array element.
1000 * Skip weighting scheme setup for a pure date range query - it won't be
1001   weighted anyway, so we can avoid having to parse weighting scheme parameters,
1002   etc.
1004 * Use value ranges when date range filtering by value.  Should be more
1005   efficient than a MatchDecider, and will automatically take advantage of any
1006   future value range optimisations in xapian-core.
1008 * Add default_db and default_template config options.  These allow the default
1009   template and default database name to be set via the config file, rather than
1010   being stuck with the respective defaults of "default" and "query".  Fixes
1011   #310, reported by Marco Hennigs.
1013 * Add support for non-exclusive filters.  Fixes #234, reported by Thomas
1014   Viehmann.
1016 testsuite:
1018 * Add start of testsuite for omega CGI.
1020 build system:
1022 * configure script now defaults to looking for xapian-config-1.3.  This is now
1023   automatically done for development series (odd middle component of the
1024   version number), but not for stable series (even middle component).  Fixes
1025   #695, reported by Jorge C. Leitão
1027 * Don't pointlessly link omega binary with libmagic (as we have since 1.3.1).
1029 portability:
1031 * Fix "make check" compilation failure on platforms without timegm().
1033 Omega 1.3.3 (2015-06-01):
1035 This release includes all changes from 1.2.20-1.2.21 which are relevant.
1037 documentation:
1039 * INSTALL: IRIX is past EOL so drop information about IRIX make.
1041 indexers:
1043 * omindex:
1045   + Add support for %f in command passed to --filter to allow specifying
1046     commands where the input file is not the final argument.  Fixed #570,
1047     reported by Charles Atkinson.
1049   + Allow --filter to handle commands which produce output in a temporary file
1050     rather than on stdout.
1052   + Allow --filter to specify the character set of the output the filter
1053     produces.
1055   + Handle application/vnd.ms-excel, text/x-perl and application/x-dvi via
1056     default --filter settings instead of hardcoded cases (now possible thanks
1057     to the new abilities that --filter has).
1059   + Add support for specifying a MIME subtype of '*' in --filter arguments.
1061   + Add -track-ctime option to allow omindex to pick up changes to file
1062     ownership and permissions.
1064   + Index terms from the leafname with an 'F' prefix, rather than treating them
1065     as more body text.  (Fixes #633, reported by Emmanuel Garette)
1067 omega:
1069 * Fix handling of multiple P.<prefix> fields - previously only the first seen
1070   was used.  These fields are also now taken into account when deciding if the
1071   query has changed.  $query now returns an OmegaScript list with one entry for
1072   each CGI parameter passed.
1074 templates:
1076 * templates/query: Fix setting setting of prefix map for P - in 1.3.2, this
1077   would failed to also search in the subject.  Now it also searches in the
1078   subject and topic.
1080 build system:
1082 * configure: Fix typo in message: 'libmagic-devl' -> 'libmagic-devel'
1084 portability:
1086 * Require a compiler with good C++11 support, like xapian-core now does.
1088 * Now we require C++11, just include <cstdint> for uint32_t.
1090 * Link omindex-list with our (GNU) getopt for platforms which don't use GNU libc.
1091   Thanks to James Aylett
1093 * Add timegm.cc to scriptindex_SOURCES to fix build on platforms which don't
1094   provide timegm().
1096 * Suppress bogus uninitialised variable warning with -Os under GCC 4.7.2.
1098 packaging:
1100 Omega 1.3.2 (2014-11-24):
1102 This release includes all changes from 1.2.16-1.2.19 which are relevant.
1104 documentation:
1106 * docs/overview.rst: Document built-in list of stopwords.
1108 * docs/termprefixes.rst: Update for renaming of 'brass' backend to 'glass'.
1110 indexers:
1112 * omindex:
1114   + The starting URL wasn't previously URL encoded.  In 1.2.18, a minimally
1115     intrusive fix was implemented.  In 1.3.2, we now encode the starting URL
1116     as we do for the rest of the filename.
1118   + Don't assume .doc is application/msword but let libmagic decide, since .doc
1119     files may actually be RTF, and sometimes people use .doc for plain-text
1120     documentation.
1122   + Add support for indexing 'topic' and 'created date' meta-data for
1123     OpenDocument format and HTML.
1125   + Index "topic" for PDF documents.
1127   + Commit changes and exit, rather than skipping the current file on most
1128     unexpected errors reading directories or initialising libmagic - otherwise
1129     we can end up deleting a lot of database entries on errors like EHOSTDOWN
1130     when indexing network mounts.
1132   + Add --opendir-sleep=SECS option to allow working around problems with
1133     indexing files on Microsoft DFS shares.
1135   + If we get ENOTDIR trying to index a file, skip it quietly (unless in
1136     verbose mode) as we already do if we get ENOENT, since ENOTDIR is what we
1137     get if the file and the directory it was in got removed between us getting
1138     the filename and trying to open it.
1140   + Handle ENOENT, ENOTDIR and EACCES from readdir().
1142   + If we've already opened the file (as we often will have if using a modern
1143     libmagic with magic_descriptor() available), then use fstat() on that fd
1144     rather than stat()/lstat() on the pathname.
1146   + Pass error message string and errno value in ReadError exceptions.
1148   + Report strerror(errno) if we can't read a file.
1150   + Filtering via text/html now handles HTML documents which specify a charset.
1152   + Add support for indexing Microsoft Publisher files using pub2xhtml.
1154   + Restrict the length of what we consider to be an extension, currently to 7
1155     characters or whatever the longest extension in the mime_map is if it is
1156     longer.
1158   + Avoid '//' in temporary filenames (cosmetic only).
1160 * omindex-list: New tool to list URLs of all the documents in a database (or
1161   list of databases) indexed by omindex.
1163 omega:
1165 * Allow setting query expansion scheme to "bo1".
1167 * Make the $json and $jsonarray force the text to be valid UTF-8, since
1168   otherwise the output isn't valid JSON.
1170 * Check parameters to $set{weighting,bm25 ...} and $set{weighting,trad ...}
1171   converted OK.  Based on patch from Aarsh Shah.
1173 * Add support to $set{weighting,...} for bb2, dlh, dph, ifb2, ineb2, inl2, lm,
1174   pl2 when we're built against a xapian-core which is new enough to have these
1175   schemes.
1177 * Add $snippet to generate a snippet of text tailored to the search.
1179 build system:
1181 * configure: Enable GCC's -Woverloaded-virtual warning.
1183 portability:
1185 * Ship common/safewinsock2.h, needed under mingw.
1187 Omega 1.3.1 (2013-05-03):
1189 This release includes all changes from 1.2.10-1.2.15 which are relevant.
1191 documentation:
1193 * INSTALL,configure: Provide hints as to what package to install for magic.h.
1195 indexers:
1197 * The HTML parser now explicitly handles <APPLET>, <OBJECT> and <TR>.
1199 * Use a generated compact and efficient table to convert HTML tag names
1200   to enum codes - this is both faster and smaller than the approach we were
1201   using, with the benefit that the table is auto-generated.
1203 * Always use our built-in conversion code for the character sets it can handle
1204   (previously we'd use iconv if available; now we only use iconv for other
1205   character sets).  This gives us more consistent results, and in particular
1206   means we now handle BOMs better (at least when using GNU iconv).
1208 * A lot of data labelled as "iso-8859-1" is actually "windows-1252".  The two
1209   only differ in characters which are control characters in iso-8859-1, so
1210   assume the latter when we see the former.
1212 * omindex:
1214   + Extend --filter to handle commands which produce HTML on stdout.
1216   + Don't report an error if a file is deleted (or renamed) between us reading
1217     the directory entry for it and trying to read the file itself by default.
1218     In --verbose mode, the situation is still reported, but now with a
1219     specific message.
1221   + If omindex receives any of the signals SIGHUP, SIGINT, SIGQUIT or SIGTERM,
1222     then kill any active external filter child process, then handle the signal
1223     as we did before.  If setpgid() is available, put each external filter in
1224     its own process group and kill the whole process group when we get a
1225     signal.
1227   + Use magic_descriptor() if the version of libmagic we're building against
1228     is new enough to have it.  This eliminates an extra opening of a file
1229     being indexed in certain cases.
1231   + Use rst2html to handle .rst and .rest files.
1233 omega:
1235 * Add new $json and $jsonarray OmegaScript commands to support producing JSON
1236   output.
1238 * Add $truncate command which truncates a string after a word.
1240 * Add support for $set{weighting,tfidf} to allow the new TfIdfWeight weighting
1241   scheme to be used.
1243 build system:
1245 * configure: Now looks for libmagic in MAGIC_PREFIX, to allow building with
1246   libmagic installed in a non-standard location.
1248 * Remove support for 'configure --enable-quiet', 'make QUIET=' and 'make
1249   QUIET=y' - automake now supports 'configure --enable-silent-rules', 'make
1250   V=1' and 'make V=0' which are broadly equivalent and more standard.
1252 portability:
1254 * tmpdir.cc: Add safeunistd.h for rmdir, required by GCC 4.7 (reported by
1255   Gaurav Arora).
1257 Omega 1.3.0 (2012-03-14):
1259 general:
1261 * Make libmagic a required dependency.
1263 documentation:
1265 * docs/termprefixes.html: Document how to map a user prefix to multiple term
1266   prefixes.
1268 * docs/overview.html: Improve documentation of htdig_noindex.
1270 indexers:
1272 * omindex:
1274   + Index title with an 'S' prefix rather than no prefix.
1276   + If the document with the highest existing docid before the run was updated,
1277     we were reporting it as "added", but now we correctly report it as
1278     "updated".
1280   + Catch and report std::exception explicitly, so failing to allocate memory
1281     is no longer reported as "Unknown exception".
1283 * scriptindex:
1285   + Remove special error handling case noting that index=nopos was replaced
1286     with indexnopos - this was removed in 1.1.0 so there's been enough time to
1287     upgrade.
1289 omega:
1291 + DEFAULTOP now defaults to AND rather than OR, since that matches what pretty
1292   much every search engine does these days.  Closes ticket#512.
1294 * Allow mapping a query string prefix to more than one term prefix (which
1295   xapian-core has supported since 1.0.4).
1297 * Add support for search inputs for multiple probabilistic prefixes, with
1298   support for per-prefix stemmers.
1300 * Drop legacy support for handling '.' separated terms in xP - that changed in
1301   Omega 0.9.7, more than 5 years ago now.
1303 * Remove support for OLDP CGI parameter which was superseded by xP
1304   approximately a decade ago, and isn't even documented!
1306 * Drop special handling for R-prefixed terms in $prettyterm - we stopped
1307   generating these in Xapian 1.0.
1309 templates:
1311 * templates/query:
1313   + We now map unprefixed queries to include S-prefixed terms to match the
1314     change in omindex to prefixing terms from the title with S.  You may want
1315     to make the same update to your own templates.
1317   + Set up prefixes for 'author:' and 'title:'.
1319 packaging:
1321 * xapian-omega.spec: We're ABI compatible within a release series so make
1322   dependency on xapian-core-libs >= rather than =.
1324 Omega 1.2.23 (2016-03-28):
1326 documentation:
1328 * Update links to Xapian website and trac to use https, which is now supported,
1329   thanks to James Aylett.
1331 indexers:
1333 * Fix HTML/XML entity decoding to be O(n) not O(n²) - processing HTML/XML with
1334   a lot of entities is now much faster.
1336 templates:
1338 * Remove unused country code to name maps.  These were intended as examples,
1339   but they aren't very useful as such, and really just bloat the templates
1340   needlessly.
1342 Omega 1.2.22 (2015-12-29):
1344 documentation:
1346 * Stop maintaining ChangeLog files.  They make merging patches harder, and stop
1347   'git cherry-pick' from working as it should.  The git repo history should be
1348   sufficient for complying with GPLv2 2(a).
1350 * Clarify help text for omindex --mime-type option.
1352 * docs/omegascript.rst:
1354   + Fix documentation of $last to say it's the MSet index *one beyond* the end
1355     of the current page.  Reported by Andrew Chilton.
1357   + Clarify that $split and $substr work in bytes.  Previously we said
1358     "characters" which could be taken as meaning they work with UTF-8
1359     characters.
1361   + Update documentation for $filters - it was missing these CGI parameters
1362     from the list of those serialised: COLLAPSE, DOCIDORDER, SORT, SORTREVERSE,
1363     SORTAFTER
1365   + Explicitly note user can use $setmap to create their own maps.
1367 * docs/overview.rst:
1369   + SVG extraction is built-in too.
1371   + Expand paragraph about command `false`.  Note the versions where explicit
1372     support was added, and that this will also work with any version on Unix,
1373     where `false` is a command.
1375   + Document `cdb_dir`.
1377 * docs/cgiparams.rst: Document behaviour if xDB is not set.
1379 * Change "characters" to "bytes" in a few places to clarify that we don't mean
1380   Unicode code points.
1382 indexers:
1384 * omindex:
1386   + Add '--title-size' option.
1388   + Handle .oft the same way as .msg - it's some sort of template email, and
1389     has essentially the same format.
1391 omega:
1393 * Make $querydescription ensure the match has been run, so that it includes
1394   filters.
1396 * Avoid $allterms, $cgilist, $filterterms and $terms being O(n²) in the number
1397   of items in the returned list.
1399 * If xFILTERS is not set, don't force the first page as that's unhelpful if
1400   someone fails to set it in their template.
1402 * When environment variable SERVER_PROTOCOL is set to INCLUDED (as it is when
1403   we're being included in a page), we already suppress the HTTP headers, but
1404   now we suppress the blank line after the header too.
1406 * Support option flag_cjk_ngram if built against xapian-core >= 1.2.22.
1408 testsuite:
1410 * Add test coverage for parsing of HTML entities.
1412 build system:
1414 * Fix error reporting if PCRE isn't installed. Fixes #693, reported by lhz7370.
1416 portability:
1418 * Avoid warning when building with glibc >= 2.21.
1420 * Don't provide our own implementation of sleep() under __WIN32__ if there
1421   already is one - mingw provides one, and in some situations it seems to clash
1422   with ours.  Reported to xapian-discuss by John Alveris.
1424 * Stop trying to use O_STREAMING - the patch to implement it was never merged
1425   into the Linux kernel, and I can't find any evidence that other platforms
1426   implement it.  The constant value O_STREAMING used now seems to be used for
1427   the part of O_SYNC which isn't covered by O_DSYNC, which seems likely to hurt
1428   performance if anything.
1430 Omega 1.2.21 (2015-05-20):
1432 documentation:
1434 * docs/overview.rst: Document 'E' prefixed boolean terms for filtering by
1435   extension (see #668, reported by bramvdh).
1437 * docs/encodings.rst: Add a document about character encoding, as suggested by
1438   James Aylett in #550.
1440 indexers:
1442 * omindex:
1444   + outlookmsg2html: Fix handling of message/rfc822 subparts.
1446 omega:
1448 * $prettyurl now decodes valid UTF-8 sequences, and some additional ASCII
1449   characters in the path part: []@!$&'()*+.;= (Fixes #550 and #644, reported by
1450   catkin and terencz.)
1452 * $prettyurl now leaves the query and fragment parts of the URL alone and won't
1453   decode an escaped "/" (omindex doesn't create URLs with any of these, so we
1454   only risk breaking other URLs which have them).
1456 * Drop compilation date and time from output when run from the command line -
1457   they prevent reproducible builds and the version number is sufficient
1458   information.
1460 templates:
1462 * templates/query: When listing matching terms, don't make the commas italic.
1464 * templates/query: Eliminate blank line before <html>.
1466 * templates/xml: Add XML declaration.
1468 * templates/godmode: Specify charset utf-8 in the content-type.
1470 build system:
1472 * Link test programs with libtool's '-no-install' or '-no-fast-install', like
1473   we already do in xapian-core, which means that libtool doesn't need to
1474   generate shell script wrappers for them on most platforms.
1476 portability:
1478 * Add spaces between literal strings and macros which expand to literal strings
1479   for C++11 compatibility.
1481 * Remove 'register' as it's deprecated and clang spits out warnings because of
1482   that.  Any modern compiler likely just ignores it as an optimisation hint
1483   anyway.
1485 Omega 1.2.20 (2015-03-04):
1487 documentation:
1489 * docs/cgiparams.rst: Improve wording of docs for SORT parameter.
1491 * docs/omegascript.rst: Update documentation references to DATE1, DATE2, and
1492   DAYSMINUS which were renamed in 0.6.x and the compatibility aliases removed
1493   in 1.0.0.
1495 indexers:
1497 * omindex:
1499   + Ignore extensions .msi and .msp, which are Microsoft installer files, but
1500     which libmagic sometimes incorrectly identifies as application/msword.
1502   + Interpret a command of "false" in "--filter" as meaning to ignore files
1503     with that MIME type.
1505 omega:
1507 * Handle CGI parameter [=0 as [=1.
1509 templates:
1511 * templates/xml: Update handling of DATE1, DATE2 and DAYSMINUS which were
1512   renamed in 0.6.x and the compatibility aliases removed in 1.0.0.
1514 build system:
1516 * configure: Use pkg-config in preference to determine flags needed to
1517   compile and link with PCRE, as this will just work when cross-compiling
1518   (at least under MXE).
1520 * configure: Define MINGW_HAS_SECURE_API under mingw to get _putenv_s()
1521   declared in stdlib.h.
1523 * Enable automake option 'subdir-objects' to avoid warning from newer automake.
1525 portability:
1527 * Avoid doing link tests with libmagic in configure as they fail on mingw due
1528   to not automatically picking up libraries which libmagic itself depends on.
1530 Omega 1.2.19 (2014-10-21):
1532 documentation:
1534 * docs/overview.rst: Note that pdftotext is part of poppler as well as xpdf.
1535   (Noted by Paul Wise)
1537 Omega 1.2.18 (2014-06-22):
1539 indexers:
1541 * omindex:
1543   + Work around libmagic returning a MIME content-type of "Composite Document
1544     File V2 Document[...]" or "application/CDFV2-corrupt" by returning a more
1545     suitable filetype based on looking at the file's extension.
1547   + The starting URL wasn't previously URL encoded.  In 1.3.2, this will be
1548     fixed by URL encoding it as we do for the rest of the path, for the 1.2
1549     branch we only URL encode it if it contains a character <= 31 or at least
1550     one of '#', '%', ':' or '?'.  This avoids a one-off reindex of every
1551     document in the database in cases which work OK in practice.
1553   + When we skip a file because it exceeds the configured size limit, include
1554     that size limit in the message.
1556 omega:
1558 * Add support for setting the query expansion scheme to use.
1560 portability:
1562 * Don't compile in unixperm.cc - it isn't currently used, and it fails to build
1563   with mingw.  (fixes #635, reported by Alexis Denis)
1565 * Fix warning when built with GCC 4.7.2 using -Os.
1567 * Removed unused inline function, fixing compiler warning.
1569 Omega 1.2.17 (2014-01-29):
1571 documentation:
1573 * docs/overview.html: Add Abiword as an example use of --filter, based on patch
1574   from Frank J Bruzzaniti (fixes#383).
1576 portability:
1578 * Fix "no previous declaration" warning on platforms which don't have
1579   mkdtemp().
1581 Omega 1.2.16 (2013-12-04):
1583 indexers:
1585 * omindex:
1587   + Fix off-by-one when finding documents to delete which would sometimes cause
1588     omindex to fail to delete documents from the database when they weren't
1589     refound during an index update.
1591   + Decode dates in xlsx files.
1593   + Ignore extensions 'adm', 'cur', and 'ico' by default.
1595   + Group-readable files which are owner-readable but not world-readable should
1596     still get a "readable by owner" term added.  Reported by Emmanuel Garette.
1598 build system:
1600 * Compress source tarballs with xz instead of gzip.
1602 * configure: Sync compiler warning flag machinery against xapian-core.  The
1603   changes are special handling for clang, passing -fshow-column where
1604   supported, and handling for new warning flags in GCC 4.6 and 4.7.
1606 Omega 1.2.15 (2013-04-16):
1608 omega:
1610 * Don't pointlessly link utf8convert.o into the omega CGI.
1612 Omega 1.2.14 (2013-03-14):
1614 indexers:
1616 * omindex:
1618   + Correct "max" -> "min" when reserving space for shared strings in .xlsx
1619     files.  This just means we now reserve a more appropriate amount of space
1620     to start with.
1622   + Ignore .com files by default.
1624 Omega 1.2.13 (2013-01-09):
1626 indexers:
1628 * omindex:
1630   + Extracting text using external filters now works for filenames containing a
1631     newline character - previously the newline got lost during escaping for the
1632     shell.
1634   + Fix segfault when -F option without a ':' is passed.
1636   + Skip a file if we get a read error while calculating the MD5 checksum (used
1637     for duplicate detection) - previously we used a checksum of the file up to
1638     that point.
1640   + Avoid rereading SVG and Atom files when we calculate their MD5 checksums.
1642   + Improvement --help output and man page, most notably:
1644     - Say explicitly that --sample-size accepts the same formats as --max-size.
1646     - Note default size limit on files to index is unlimited.
1648   + When generating a sample for a CSV file, limit the size we pre-allocate to
1649     the CSV file size if that's smaller than the requested sample size, in case
1650     the user sets that limit very high.
1652 omega:
1654 * Fix to decode %-encoded character at the end of the query string.
1656 build system:
1658 * INCLUDES is now deprecated in automake, so use AM_CPPFLAGS instead.
1660 Omega 1.2.12 (2012-06-27):
1662 No changes since 1.2.11 except to bump the version - this release was made to
1663 fix an incorrect library version information update in xapian-core 1.2.11.
1665 Omega 1.2.11 (2012-06-26):
1667 indexers:
1669 * Change HTML parser's handling of multiple <body> tags and of text outside of
1670   <body> to match the behaviour of modern web browsers.  (ticket#599)
1672 * omindex:
1674   + Add command line option to control the size of the document sample stored.
1675     Patch from Mihai Bivol.
1677   + Rework .xlsx parsing to substitute the shared strings into the positions
1678     they are used in, so that the sample actually matches what appears in the
1679     spreadsheet, and to index calculated cell contents.
1681   + Improve handling of headers and footers in OpenDocument documents.
1683   + pdftotext outputs a formfeed between each page, which messes up our "empty
1684     body" check, so trim any trailing formfeeds before this check.
1686 build system:
1688 * Don't explicitly link indirect shared library dependencies on FreeBSD,
1689   OpenBSD, and Solaris.
1691 Omega 1.2.10 (2012-05-09):
1693 indexers:
1695 * Add support for CDATA to HTML/XML parser.
1697 * omindex:
1699   + Add --max-size option, based on patch from ndaley in ticket#587.
1701   + Add support for atom feed files, patch from Mihai Bivol in ticket#595.
1703   + If the document with the highest existing docid before the run was updated,
1704     we were reporting it as "added", but now we correctly report it as
1705     "updated".  (Backported from 1.3.0).
1707   + Catch and report std::exception explicitly, so failing to allocate memory
1708     is no longer reported as "Unknown exception".  (Backported from 1.3.0).
1710 * scriptindex:
1712 portability:
1714 * Fix to build with GCC 4.7 by adding cast to rlim_t to fix error about C++11
1715   compatibility (reported by Gaurav Arora).
1717 Omega 1.2.9 (2012-03-08):
1719 documentation:
1721 * docs/overview.html:
1723   + Document that libmagic is used to determine the MIME type if the extension
1724     isn't known.  Partly addresses ticket#569.
1726   + We now limit time as well as CPU and memory for external filters.
1728 indexers:
1730 * Our HTML parser now ignores sections bracketed by <!--UdmComment--> and
1731   <!--/UdmComment-->, like we already do for <!--htdig_noindex-->.
1733 * omindex: Add more extensions to the default ignore list: bin dat db fon jar
1734   lnk pyc pyd pyo sqlite sqlite3 sqlite-journal tmp ttf
1736 Omega 1.2.8 (2011-12-13):
1738 documentation:
1740 * scriptindex.cc: Add link to http://xapian.org/docs/omega/scriptindex.html to
1741   --help output (and so also to the man page which is generated from this).
1743 * omegascript.html: Add note to discourage use of percentage scores.
1745 indexers:
1747 * omindex:
1749   + If we don't get any data from an external filter for 5 minutes, give up -
1750     it has probably ended up blocked indefinitely.
1752   + Improve --help output (and man page which is generated from it).  Closes
1753     bug#572.
1755 * scriptindex:
1757   + If no rules are found in the index script, report an error and give up -
1758     this is inevitably the result of a mistake, and adding empty documents to
1759     the database isn't helpful.
1761 omega:
1763   + Add new $prettyurl{} command which undoes RFC3986 URL escaping which
1764     doesn't affect semantics in practice.  Partly addresses ticket#550.
1766   + Replace URL decoder with new implementation which handles various corner
1767     cases better.  Fixes bug#578.
1769   + If CGI parameter P has trailing spaces, we now remove them all rather than
1770     leaving one.
1772 templates:
1774 * templates/query: HTML escape topterms.
1776 * templates/godmode: HTML escape the contents of document values.
1778 * templates/query: Don't show the percentage score in the default template.
1780 testsuite:
1782 * Add new urlenctest unit test of URL encoding and decoding.
1784 portability:
1786 * configure: Sync changes from xapian-core: Don't pass -Wshadow for GCC < 4.1;
1787   don't pass -Wstrict-null-sentinel for GCC 4.0.x; only enable symbol
1788   visibility on platforms where it is supported.
1790 packaging:
1792 * xapian-omega.spec: Package outlookmsg2html helper.
1794 Omega 1.2.7 (2011-08-10):
1796 documentation:
1798 * docs/termprefixes.html: Document how to map a user prefix to multiple term
1799   prefixes.
1801 * docs/overview.html: Improve documentation of htdig_noindex.
1803 omega:
1805 * Improve $version output from "Xapian - xapian-omega 1.2.7" to "xapian-omega
1806   1.2.7".
1808 packaging:
1810 * xapian-omega.spec: We're ABI compatible within a release series so make
1811   dependency on xapian-core-libs >= rather than =.
1813 Omega 1.2.6 (2011-06-12):
1815 documentation:
1817 * docs/omegascript.html: Correct the documentation of the colours used by
1818   $highlight{}.
1820 * docs/overview.html: Add using unoconv as more complex example of using
1821   --filter (ticket#324).
1823 templates:
1825 * templates/query:
1827   + Make search query input type=search.
1829   + Autofocus the search query input (using HTML autofocus attribute with
1830     Javascript fallback for older browsers).  (ticket#544)
1832 portability:
1834 * Fix a compiler warning.
1836 Omega 1.2.5 (2011-04-04):
1838 documentation:
1840 * Add index page which links to all the other documentation pages.
1842 * INSTALL: Copy new Multi-Arch section from xapian-core/INSTALL.  Replace VPATH
1843   section with better equivalent from Xapian-core/INSTALL.
1845 * docs/omegascript.html: Minor improvements.
1847 indexers:
1849 * The HTML parser no longer uses an exception to signify it has finished in
1850   the normal case as exceptions are typically costly to handle.  In tests,
1851   this made omindex ~0.23% faster when indexing a lot of HTML files.
1853 * omindex:
1855   + Add --ignore-exclusions option, which will index HTML files despite meta
1856     robots tags, etc - omindex is often used in environments where such
1857     exclusions aren't relevant.
1859   + Fix to compile with older versions of libmagic which don't have
1860     MAGIC_MIME_TYPE (e.g. on Ubuntu hardy).
1862   + Tell xls2csv to separate fields with spaces rather than commas, and not to
1863     quote them.  Fixes indexing of numeric fields, and means we don't need to
1864     use our CSV parser to get a sample.
1866   + Add whitespace between chunks of text extracted from Microsoft Office 2007
1867     formats to prevent words in adjacent chunks from being run together.
1869   + Encode reserved characters in URLs - links to files with names containing
1870     '#' and '?' now work.
1872   + Handle .xlr extension the same way as .xls (later Microsoft Works versions
1873     apparently produce such files which are really the same format).
1875   + Index filename extension with new standard prefix E.
1877   + Just report the mimetype as unknown instead of saying "unknown Office 2007
1878     MIME subtype".
1880   + Ignore *.css and *.js by default too.
1882   + Messages reporting skipping files are now more consistent and always report
1883     the filename.
1885   + New --empty-docs option to allow documents we extract no body text from to
1886     be indexed (existing behaviour), skipped, or reported and then indexed.
1888 omega:
1890 * Fix double Content-Type header in some error reporting situations (regression
1891   introduced in 1.2.4).
1893 * Update $url's URL encoding to follow RFC3986.
1895 * Allow QueryParser flags to be set from OmegaScript (ticket#418).  The
1896   FLAG_SPELLING_CORRECTION flag can now be set using
1897   $opt{flag_spelling_correction,1} - the old $opt{spelling,true} way to
1898   enable this flag still works, but it now deprecated.
1900 templates:
1902 * templates/emptydocs,templates/godmode,templates/opensearch,templates/query,
1903   templates/xml: Add missing escaping.  Some of these instances may allow
1904   cross-site scripting, so upgrading your templates is recommended, especially
1905   if you have any sensitive cookies set on the domain Omega is running on.
1907 * templates/xml:
1909   + Try $field{caption} (which is what omindex sets) before $field{title} when
1910     getting a value for the hit tag's title attribute - this is consistent with
1911     how the query template gets the title.
1913   + Add new 'type' attribute which gives $field{type}.
1915   + Add 'DBSize' attribute to <result> element.
1917   + Fix double escaping of matching terms.  This is only likely to affect cases
1918     where a matching term contains '&'.
1920   + Remove support for undocumented HILITECLASS CGI variable.  There's no
1921     evidence I can find using Google code search or web search that this has
1922     been used anywhere, and it's difficult to handle escaping it properly in
1923     the face of all the ways it could reasonably be used.
1925 portability:
1927 * Fix to compile on Microsoft Windows (ticket#350).
1929 Omega 1.2.4 (2010-12-19):
1931 documentation:
1933 * Minor documentation improvements.
1935 indexers:
1937 * Some iconv implementations (such as that on Mac OS X) don't handle many of
1938   the commonly seen mis-punctuated charset names (e.g. UTF16, UTF_16).  We now
1939   check for this if iconv fails, fix up the charset name, and retry.
1941 * The built-in character encoding converter now handles spaces in charset
1942   names.
1944 * Use O_NOATIME if available and either the file is owned by the current euid,
1945   or the current euid is 0 (i.e. we're running as root).  This avoids updating
1946   the access time of files we index which saves time.  Fixes ticket#222.
1948 * Report get_description() for Xapian exceptions, which provides additional
1949   information above get_msg().
1951 * Add boolean terms with add_boolean_term() so they get wdf of 0 and don't
1952   contribute to document length.
1954 * omindex:
1956   + Escape wildcard patterns being passed to unzip - in the unlikely event that
1957     one of these matched files in or under the current directory, we might fail
1958     to extract all the files we wanted to.
1960   + Add explicit support for indexing CSV files (better samples than from
1961     using '-Mcsv:text/plain').
1963   + Add support for indexing .msg files from Microsoft Outlook (using the Perl
1964     module Email::Outlook::Message.  (ticket#334)
1966   + Improve --help for --mime-type option.
1968   + Optionally use libmagic to detect MIME types for files for which we have no
1969     extension mapping, which allows us to handle files with a misleading
1970     extension, or no extension at all.  (ticket#114)
1972   + Add new --filter option which allows the user to specify new filters
1973     provided they return UTF-8 text on stdout.
1975   + If a filter command isn't installed, previously we wouldn't try it again
1976     for the same file extension - now we won't try it again for the same
1977     mime-type.
1979   + Index the leafname of the file (without any extension) as extra keywords.
1981   + Extract author from HTML, OpenDocument, and PDF files.  Index it with an A
1982     prefix, and add it as a field.
1984   + Add support for indexing text and metadata from SVG files.
1986   + Extract metadata from Microsoft Office 2007 file formats.
1988   + Index text in headers and footers for .odt and .docx files.
1990   + Use the CSV parser to generate a nicer sample for files of type
1991     application/vnd.ms-excel.
1993   + Add support for indexing Debian and RPM package files (ticket#493).
1995   + Make the memory limit for filter processes the size of physical memory,
1996     which is a little less arbitrary than 7/8 of this value (ticket#424).
1998   + Under --duplicate=ignore, fix so that old documents which aren't seen get
1999     deleted, which wasn't implemented before (to suppress this deletion, pass
2000     -p as well).
2002   + Rename the short option for --version from -v to -V for consistency with
2003     scriptindex and many other packages, and to free up -v as the short option
2004     for --verbose.  For backward compatibility, "omindex -v" is handled
2005     specially and still reports the version.
2007   + Add --verbose option, and disable the less interesting output unless it is
2008     specified.
2010   + Deprecate "--preserve-nonduplicates" in favour of new long option
2011     "--no-delete" which does the same thing, but has a clearer name.
2013   + The deletion of documents pass at the end of indexing is now more
2014     efficient.  We track how many documents in the database we haven't seen so
2015     we can stop once we've found them all (a particularly big improvement if
2016     there are no documents to delete), and we now use a PostingIterator over
2017     all documents which avoids needing to catch an exception for every gap in
2018     the used document ids.
2020   + Quietly ignore files with mimetype set to "ignore".  The initial list of
2021     extensions set to ignore is: .a .dll .dylib .exe .lib .o .obj .so
2023   + Index file owner and read permissions, to allow finding documents with a
2024     particular owner, and so searches can be restricted to documents a user is
2025     able to read.
2027   + Add file size as a document value, so you can sort on it and filter by it.
2029 * scriptindex:
2031   + Fix file descriptor leak if the LOADFILE action is used on something which
2032     isn't a file.
2034 omega:
2036 * Make sure we write out HTTP headers when reporting an error early on.
2038 * Extend $field to take an optional DOCID argument, rather than always using
2039   the context from $hitlist.
2041 * Add new $emptydocs command which returns a list of documents with doclength
2042   zero.
2044 * Add support for size: range filtering.  Currently the end points of the range
2045   have to be specified in bytes (e.g. size:102400..204800 for 100-200KB).
2047 templates:
2049 * templates/emptydocs: New template which lists documents with doclength zero.
2051 build system:
2053 * configure: Probe for any options needed to enable large file support.
2054   Handling files >= 2GB isn't especially useful, but more importantly this is
2055   needed to allow omindex to index files on filing systems with 64 bit inodes
2056   on some platforms (e.g. 32-bit Linux).
2058 * Use -no-undefined on platforms which need it to dynamically link such as
2059   cygwin (need to do this taken from ticket#282).
2061 portability:
2063 * Fix to compile with Sun C++.
2065 Omega 1.2.3 (2010-08-24):
2067 documentation:
2069 * docs/termprefixes.html: Update "flint and quartz" to "flint and chert" as
2070   quartz is no longer supported.  Give exact term length limit for flint and
2071   chert.
2073 packaging:
2075 * xapian-omega.spec: Don't run autoreconf - it's no longer required.
2077 Omega 1.2.2 (2010-06-27):
2079 portability:
2081 * Apply getopt portability fixes from xapian-core 1.2.0, fixing build failures
2082   on Mac OS X (and probably some other platforms with non-GNU getopt
2083   implementations). (ticket#469)
2085 Omega 1.2.1 (2010-06-22):
2087 This release includes all changes from 1.0.21 which are relevant.
2089 Omega 1.2.0 (2010-04-28):
2091 This release includes all changes from 1.0.20 which are relevant.
2093 build system:
2095 * configure: Tell libtool not to link in deplibs on platforms where we know
2096   they aren't needed.
2098 * configure: On Linux, extract the library search path from ldconfig which
2099   gives us the default entries reliably.
2101 Omega 1.1.5 (2010-04-15):
2103 This release includes all changes from 1.0.19 which are relevant.
2105 Omega 1.1.4 (2010-02-15):
2107 This release includes all changes from 1.0.18 which are relevant.
2109 omega:
2111 * Use the optimised integer to string conversion routines from xapian-core.
2113 Omega 1.1.3 (2009-11-18):
2115 This release includes all changes from 1.0.15-1.0.17 which are relevant.
2117 templates:
2119 * templates/query: If JavaScript is available, convert $field{modtime} to a
2120   string on the client-side so that the timezone is correct.  If JavaScript
2121   isn't available, fall back to the existing behaviour of using UTC.
2122   (ticket#314)
2124 build system:
2126 * configure: Default to looking for xapian-config-1.1 unless XAPIAN_CONFIG is
2127   specified.
2129 Omega 1.1.2 (2009-07-23):
2131 This release includes all changes from 1.0.14 which are relevant.
2133 indexers:
2135 * omindex:
2137   + Handle the "macroenabled" versions of MS Office 2007 files too
2138     (ticket#290).
2140   + Extract pptx notesSlides and comments, if present.  (ticket#290).
2142 Omega 1.1.1 (2009-06-09):
2144 This release includes all changes from 1.0.13 which are relevant.
2146 indexers:
2148 * omindex:
2150   + Check the last modification time of files before reindexing (ticket#342).
2152   + Add "--spelling" option to index spelling correction data.
2154 * scriptindex:
2156   + Add new "spell" action for indexing spelling correction data (ticket#296).
2158 omega:
2160 * Add $suggestion and $opt{spelling} to provide access to spelling correction
2161   (ticket#296).
2163 * Add $opt{weighting} to allow the weighting scheme and parameters to be
2164   specified (ticket#298).
2166 * If SERVER_PROTOCOL in the environment is set to INCLUDED, then our output is
2167   being included in another page (e.g. using SSI) so suppress the output of any
2168   HTTP headers.
2170 templates:
2172 * templates/query: Offer any spelling correction QueryParser gives.
2174 build system:
2176 * configure: Sync warning flags used with GCC with xapian-core apart from
2177   -Woverloaded-virtual which fires for MyHtmlParser::parse_html().  That
2178   probably should be tidied up at some point, but not right now.
2180 Omega 1.1.0 (2009-04-23):
2182 indexers:
2184 * scriptindex:
2186   + Make deprecated "index=nopos" an error.
2188 omega:
2190 * New OmegaScript command $transform{} which performs regular expression
2191   substitutions using the PCRE library (which is now required to build Omega).
2192   (ticket#231)
2194 build system:
2196 * The build system is now bootstrapped with newer versions of autoconf and
2197   libtool which should produce smaller files and speed up configure and
2198   make.
2200 Omega 1.0.23 (2011-01-14):
2202 indexers:
2204 * omindex:
2206   + Escape wildcard patterns being passed to unzip - in the unlikely event that
2207     one of these matched files in or under the current directory, we might fail
2208     to extract all the files we wanted to when indexing document formats like
2209     OpenDocument which use a zip file container.
2211   + The parser for OpenDocument metadata wasn't initialising its "state" field.
2212     Often you'd be lucky and it would be initialised to zero, but this could
2213     have caused misparsing of metadata in some cases.
2215 * scriptindex: Fix file descriptor leak if the LOADFILE action is used on
2216   something that isn't a file.
2218 * If fstat() fails when trying to load a file, preserve the errno value from
2219   the fstat call to report to the user.
2221 portability:
2223 * configure: Probe for any options needed to enable large file support.
2224   Handling files >= 2GB isn't especially useful, but more importantly this is
2225   needed to allow omindex to index files on filing systems with 64 bit inodes
2226   on some platforms (e.g. 32-bit Linux).
2228 * Add -no-undefined to AM_LDFLAGS on platforms which need it to dynamically
2229   link such as cygwin (need to do this taken from ticket#282).
2231 Omega 1.0.22 (2010-10-03):
2233 portability:
2235 * Fix to compile with Sun C++.
2237 Omega 1.0.21 (2010-05-18):
2239 portability:
2241 * Fix build failure in freemem.cc on Microsoft Windows.
2243 Omega 1.0.20 (2010-04-27):
2245 portability:
2247 * Fix build failure on Mac OS X and possibly some other platforms (regression
2248   caused by fix for getopt-related warnings on Cygwin in 1.0.19).
2250 Omega 1.0.19 (2010-04-15):
2252 portability:
2254 * Fix getopt-related warning on Cygwin.
2256 Omega 1.0.18 (2010-02-14):
2258 indexers:
2260 * Make the default charset "utf-8" not "UTF-8" as we lower case explicitly
2261   specified character sets to compare to see if we need to reparse.  Previously
2262   XML documents which explicitly specified their character set as UTF-8 would
2263   cause needless restart or the parser.
2265 * omindex:
2267   + Increase the wdf boost for the document title from 2 to 5, since 2 isn't
2268     really enough.
2270 * scriptindex:
2272   + Don't abort with "Unknown Exception" if indexing is disallowed or we hit
2273     </body> for a document which had an overridden character set.  Fixes
2274     ticket#410.
2276 Omega 1.0.17 (2009-11-18):
2278 indexers:
2280 * omindex:
2282   + On Linux, change the memory limit on external filters to use _SC_PHYS_PAGES
2283     since _SC_AVPHYS_PAGES excludes pages used by the OS cache and so will
2284     often report a really low value.  Fixes Debian bug#548987 and ticket#358.
2286   + Fix likely crash when reading output from external filter program if read()
2287     is interrupted by a signal.
2289   + Fix potential crash when indexing PostScript files (fixed by using delete[]
2290     (not delete) for array allocated by new[]).
2292 testsuite:
2294 * utf8converttest: Charset "8859_1" isn't understood by Solaris libiconv, and
2295   isn't a standard charset name, so just test it when using our built-in
2296   converter and GNU libc.
2298 portability:
2300 * Fix build failure on Mac OS X 10.6.
2302 * Also check for socketpair() in -lxnet if it isn't found without, which
2303   enables resource limits on external filter programs called by omindex on
2304   Solaris, and possibly some other platforms.  Fixes ticket#412.
2306 Omega 1.0.16 (2009-09-10):
2308 * omega: Fix cross-site scripting vulnerability in reporting of exceptions
2309   (CVE-2009-2947).
2311 Omega 1.0.15 (2009-08-26):
2313 general:
2315 * omegascript.vim: The list of OmegaScript commands in the vim mode was rather
2316   out of date, and a few commands were misclassified.  Fix both problems and
2317   avoid future recurrences by automatically generating those lists from the
2318   command list in query.cc.
2320 documentation:
2322 * omegascript.html: Document that $date uses UTC.  (ticket#314)
2324 templates:
2326 * query: Link to "xapian.org" rather than "www.xapian.org".
2328 * inc/toptermsjs: Use double-quotes rather than single quotes for parameter
2329   values on the <script> tag.
2331 portability:
2333 * omindex: Implement correct handling of paths when calling external filter
2334   programs on Microsoft Windows.
2336 Omega 1.0.14 (2009-07-21):
2338 indexers:
2340 * omindex: Make sure that output is flushed after every message, not just after
2341   some of them.
2343 portability:
2345 * Avoid infinite loop in omindex and scriptindex when reading files under
2346   Cygwin with automatic end of line translation enabled.  This same bug can
2347   also manifest on Unix platforms if the file is truncated by another process
2348   while being read.
2350 Omega 1.0.13 (2009-05-23):
2352 indexers:
2354 * omindex:
2356   + If the filter program needed for a file format isn't installed, report this
2357     explicitly when skipping subsequent files with the extension instead of
2358     misleadingly reporting "Unknown extension".
2360   + Make -s actually work as a short-form for --stemmer (as documented by
2361     "omindex --help" and "man omindex").
2363   + Drop the copyright info from the output of --version as it's perennially
2364     out of date and we don't report it for any other Xapian programs.
2366 * scriptindex:
2368   + Add new "valuenumeric" action to add a document value using
2369     Xapian::sortable_serialise() to allow numeric sorting (ticket#260).
2371 build system:
2373 * configure: Enable more GCC warnings - "-Wstrict-null-sentinel" for 4.0+,
2374   "-Wlogical-op -Wmissing-declarations" for 4.3+.
2376 Omega 1.0.12 (2009-04-19):
2378 omega:
2380 * $log now retries a partial write, or one interrupted by a system call.
2382 build system:
2384 * configure: Fix iconv parameter type probe not to implicitly cast a string
2385   literal to char* - this a warning under GCC currently, but the user could
2386   pass -Werror explicitly in CXXFLAGS, and this could be promoted to an error
2387   in future GCC versions, and may already be so for some other compilers.
2389 * Overriding CXXFLAGS at make-time (e.g. "make CXXFLAGS=-Os") no longer
2390   overrides any flags required for building with Xapian.
2392 * We now actually use the compiler warning flags which configure detects.
2394 Omega 1.0.11 (2009-03-15):
2396 documentation:
2398 * cgiparams.html: Note the technique of using a stub database file to allow a
2399   default of searching over multiple databases.
2401 indexers:
2403 * omindex:
2405   + Add support for indexing Microsoft Office 2007 formats and XPS files
2406     (bug#290).
2408   + Fix the extraction of metadata from OpenDocument formats.
2410   + Fix "-l" which would previously always cause a segmentation fault if used
2411     ("--depth-limit" wasn't affected).
2413 build system:
2415 * configure: The output of g++ --version changed format (again) with GCC 4.3
2416   which meant configure got "g++" for the version.  Instead use the (hopefully)
2417   more robust technique of using g++ -E to pull out __GNUC__ and
2418   __GNUC_MINOR__.
2420 * configure: Turn on _FORTIFY_SOURCE where available (as we do in xapian-core).
2422 portability:
2424 * Fix to compile when RLIMIT_AS isn't available (as on NetBSD and OpenBSD).
2425   Instead use RLIMIT_VMEM or RLIMIT_DATA if either is available, else don't try
2426   to limit the memory the filter process can use.
2428 Omega 1.0.10 (2008-12-23):
2430 build system:
2432 * This release now uses newer versions of the autotools (autoconf 2.62 ->
2433   2.63; automake 1.10.1 -> 1.10.2).  The newer autoconf fixes a regression
2434   in autoconf 2.62 (and so Omega 1.0.7) with detecting the endian-ness of some
2435   platforms.
2437 Omega 1.0.9 (2008-10-31):
2439 documentation:
2441 * docs/overview.html: Document HTML parsing a bit, including robots
2442   meta and htdig_noindex.
2444 omega:
2446 * omega: Catch std::exception and report what its what() method returns.
2448 * omega: Remove undocumented and non-functional support for numeric sorting
2449   via CGI parameter SORT=#<slot> (SORT=<slot> works as before).
2451 build system:
2453 * configure: Sync warning flag handling changes from xapian-core to eliminate
2454   many warnings from GCC 4.3.
2456 Omega 1.0.8 (2008-09-04):
2458 documentation:
2460 * Fix a few typos and improve wording in a few places.
2462 indexers:
2464 * omindex:
2466   + If the character encoding is specified using <meta http-equiv=...> in an
2467     HTML document then reparse the document if it isn't the encoding we're
2468     already using so that any preceding <title> is converted correctly
2469     (bug#292).
2471   + Convert text from meta tag parameters to UTF-8 (bug#293).
2473   + Handle <meta charset="..."> (new in HTML 5).
2475   + Fix bug in HTML tag parameter parsing which was probably just a small
2476     performance penalty in real world cases, but could perhaps result in
2477     parsing bogus extra parameters in carefully contrived situations.
2479 portability:
2481 * Add missing <signal.h>, noted on FreeBSD by Henrik Brix Andersen.
2483 Omega 1.0.7 (2008-07-14):
2485 documentation:
2487 * omegascript.html,scriptindex.html: Fix empty titles.
2489 indexers:
2491 * omindex:
2493   + When indexing text files, handle UCS-2 and UTF-16 text files with a
2494     byte-order mark (BOM), and ignore any UTF-8 "byte-order" mark.
2496   + The built-in conversion code (used when iconv isn't available) now handles
2497     UCS-2/UTF-16 with and without a BOM, and also the explicit BE and LE forms.
2499 omega:
2501 * Overhaul the $highlight colour combinations since some were rather
2502   unreadable (Debian bug 484456).
2504 build system:
2506 * configure: Synchronise code for working out warning flags used for builds
2507   with that used for xapian-core, which in particular handles different
2508   output formats from "gcc --version".
2510 portability:
2512 * configure: Fix header checks to pre-include <sys/types.h> which Mac OS X
2513   needs for some other headers to work.
2515 * configure: Fix probing for iconv to work better when iconv isn't found
2516   (previously this only worked on Mac OS X with fink).
2518 * Fix compilation error on FreeBSD, introduced in 1.0.5.
2520 * In omega, cast size to unsigned before division to avoid a warning about
2521   signed overflow.
2523 packaging:
2525 * xapian-omega.spec: Remove "www." from xapian.org and oligarchy.co.uk URLs.
2527 Omega 1.0.6 (2008-03-17):
2529 documentation:
2531 * docs/omegascript.html: Improve formatting.
2533 indexers:
2535 * omindex:
2537   + Add support for DjVu files.
2539   + If we get an error trying to read a directory entry, report it to the user
2540     rather than ignoring it.
2542 omega:
2544 * New OmegaScript commands $addfilter, $lower, $upper.
2546 portability:
2548 * Check "defined HAVE_SYSMP" rather than just "HAVE_SYSMP".  This doesn't
2549   change behaviour, but fixes a compile warning on platforms other than Linux
2550   and IRIX.
2552 Omega 1.0.5 (2007-12-21):
2554 documentation:
2556 * Convert .txt docs to reStructedText which we process to produce HTML.
2558 * Add a note inviting suggestions for additional reliable filter programs.
2560 * overview.html: omindex hasn't generated "W"-prefix terms since 0.9.7, so
2561   remove the documentation saying it does.
2563 indexers:
2565 * omindex:
2567   + If a file's extension isn't found in the mime_map and contains uppercase
2568     ASCII characters, check for the lower cased extension (so .PDF and .Pdf
2569     behave the same way as .pdf, unless you deliberately add different mappings
2570     for them).
2572   + '-f' is documented by --help as a short option for '--follow', but wasn't
2573     previously actually recognised.
2575   + Limit filter programs to 7/8 of free physical memory on platforms where we
2576     know how to determine this statistic (currently at least Linux, FreeBSD,
2577     IRIX, HP-UX; probably Solaris and a few others too).  This helps to prevent
2578     runaway filters from causing a denial of service (bug#111).
2580   + Avoid rereading uncompressed AbiWord documents in order to calculate their
2581     MD5 checksums.
2583 * scriptindex:
2585   + Now inserts a ':' between prefix and term, using the same criteria which
2586     Xapian::QueryParser does.
2588   + The 'BOOLEAN' action now ignores an empty input rather than adding just the
2589     prefix as a term.
2591   + The 'UNIQUE' action now issues a warning for empty input but otherwise
2592     ignores it.
2594 portability:
2596 * Add explicit includes of C headers needed to build with the latest snapshots
2597   of GCC 4.3.
2599 Omega 1.0.4 (2007-10-30):
2601 omega:
2603 * If an OmegaScript template specifies the same field name as both a boolean
2604   and a probabilistic term prefix then previous the boolean setting would
2605   be ignored (e.g. $setmap{prefix,foo,A}$setmap{boolprefix,foo,H}).  Now this
2606   generates an error.  If you set prefixes in your templates, you may wish to
2607   check them over before upgrading.
2609 Omega 1.0.3 (2007-09-28):
2611 general:
2613 * Distribution tarballs are now in the POSIX "ustar" format since it saves
2614   a few KB and we need to use it for xapian-core anyway.
2616 documentation:
2618 * Expand the output of 'mbox2omega --help' and refer the reader to it from
2619   docs/scriptindex.txt.
2621 indexers:
2623 * omindex:
2625   + Add support for indexing AbiWord documents and TeX DVI files.
2627   + Impose a 5 minute CPU time limit on filter programs to prevent problems if
2628     a filter program goes into an infinite loop on a malformed input.  Partly
2629     addresses bug#111.
2631 * scriptindex:
2633   + Fix line number tracking in dump files.
2635 omega:
2637 * Add $muldiv{A,B,C} which calculates int(A*B/C).
2639 * Fix bug in decimal fraction in $size for files >= 1M in size.
2641 templates:
2643 * query:
2645   + Set HTML charset to utf-8 since that's what databases now are by default.
2647   + Restyle to use CSS to draw a "score bar" instead of using images.
2649   + Rework the layout of each hit.
2651   + Add popup hints on mouse-over for various items.
2653   + Tidy up some HTML gremlins.
2655 Omega 1.0.2 (2007-07-05):
2657 documentation:
2659 * scriptindex.txt: Fix typo.
2661 indexers:
2663 * omindex:
2665   + If --url isn't passed, default to "/", but print a warning noting that this
2666     default has been used (at least for now).
2668   + Report files that aren't indexed because their extensions aren't
2669     recognised.
2671 build system:
2673 * Value of XAPIAN_CONFIG supplied to configure is now passed to distcheck,
2674   to ensure that it works with uninstalled copies of Xapian.
2676 portability:
2678 * Fix test programs to build with a development snapshot of GCC 4.3.
2680 Omega 1.0.1 (2007-06-11):
2682 documentation:
2684 * overview.txt: As of 1.0.0, we no longer use pstotext for PostScript, but
2685   instead use ps2pdf followed by pdftotext (since this works for Unicode).
2687 * scriptindex.txt: Document that you can delete a document by supplying a new
2688   document which only contains the unique term.
2690 indexers:
2692 * Fix bug in HTML parser - if the text between two tags consisted entirely of
2693   whitespace it would just be ignored which could run words together if
2694   the tags didn't produce implicit whitespace.  This bug dates back to at least
2695   Omega 0.8.2.
2697 * omindex: Under Linux (and probably some other platforms) struct dirent can
2698   tell us the type of a directory entry for some filing systems, so make use of
2699   this to avoid calling stat() (or lstat()) unnecessarily - when indexing
2700   /usr/share/doc on my Linux box, this saves about 14000 explicit calls to
2701   stat() (leaving about 7000).
2703 omega:
2705 * Fix handling of query parsing errors (broken by changes in 1.0.0).
2707 packaging:
2709 * The required automake version has been lowered to 1.8.3, so RPMs can now be
2710   built on RHEL 4 and SLES 9.
2712 Omega 1.0.0 (2007-05-17):
2714 general:
2716 * Omega and the indexers now work in UTF-8.  If iconv() is available, omindex
2717   will use it to convert documents from other formats, otherwise it has
2718   built-in support for UTF-8 and ISO-8859-1; omindex knows how to run the
2719   various external filter programs to generate UTF-8 output; scriptindex
2720   assumes input is already in UTF-8.
2722 * Change the project name (used to name tarballs, and default installation
2723   paths) to "xapian-omega" since that's what the RPMs and Debian packages
2724   already use (there's a Rogue-like game called Omega).
2726 documentation:
2728 * docs/overview.txt: Document what each of the OmegaScript templates does.
2730 * docs/quickstart.txt: Assorted minor improvements.
2732 * docs/termprefixes.txt: Document new 'Z' prefix, and that the 'R' and 'W'
2733   prefixes are no longer used by Xapian.
2735 * docs/cgiparams.txt: FMT isn't limited to just `a-z' - the actual restriction
2736   is that it may not contain `..'.
2738 * docs/scriptindex.txt: Explicitly note that index=nopos is deprecated
2739   (scriptindex already emits a warning).
2741 * NEWS: Add note that Omega < 0.8.0 NEWS entries are in the xapian-core NEWS
2742   file.
2744 * TODO: Updated.
2746 indexers:
2748 * Updated to use the new Xapian::TermGenerator class.  This means that the
2749   indexing strategy has changed.
2751 * "--help" now reports the default stemming language (i.e. "english").
2753 * Implement new sample generating function which normalises all runs of
2754   whitespace to a single space, and fixes invalid UTF-8 in the sample.
2756 * omindex:
2758   + We now index PostScript by converting to PDF with ps2pdf and then indexing
2759     that.  This allows us to index PostScript files containing Unicode
2760     characters outside of ISO-8859-1, and also means we now get metadata from
2761     PostScript files.  The downside is it is quite a bit slower.
2763   + Add support for indexing MS Works documents using wps2text (part of
2764     libwps).
2766   + Don't index empty files.
2768 * scriptindex:
2770   + Fix optimisation of "load truncate=N" to actually work!
2772   + The "truncate" action knows not to chop off a multibyte UTF-8 character.
2774   + Update short option list for scriptindex to match documented usage (-h, -V
2775     and -s were not working).
2777   + Remove -q and -u options - they no longer do anything and are only accepted
2778     for compatibility with really old versions (0.6.1 and earlier for -q; 0.7.5
2779     and earlier for -u).
2781 omega:
2783 * Add an alternative implementation of date range filtering which uses a
2784   MatchDecider.  This allows everything that the existing implementation does,
2785   plus you can support sorting on a choice of dates (e.g. first published or
2786   last updated), and filtering works to a resolution of a minute rather than a
2787   day.  Set CGI parameter DATEVALUE to enable this, and to specify the value to
2788   use.  Since omindex now adds the last modified date as value 0, this will
2789   work with omindex.
2791 * Enhance $substr{} to accept a negative length (meaning to count back from the
2792   end of the string).
2794 * New CGI parameters to allow finer control of sorting and ranking - SORTAFTER
2795   and DOCIDORDER.
2797 * The sorting options are now encoded in $filters so Omega can automatically
2798   reset to page 1 if they are changed.
2800 * Add new OmegaScript $weight command which returns the raw document weight -
2801   mostly useful for debugging purposes.
2803 * $topterms{} now generates unstemmed terms.
2805 * $prettyterm{TERM} has been updated to fit with changes to the term generation
2806   strategy.
2808 * Add 'you' and 'your' as stopwords.
2810 * $filesize{SIZE} enhanced to return a decimal point for K, M, and G (e.g.
2811   "2.1K" and "4.0M" rather than "2K" and "4M"); $filesize{0} is now "0 bytes";
2812   $filesize{1} is now "1 byte"; $filesize{SIZE} where SIZE is negative is now
2813   "".
2815 * Remove $freqs as it has been deprecated for ages.
2817 * Remove support for xB, xDATE1, xDATE2, xDAYSMINUS, and xDEFAULTOP which were
2818   deprecated in favour of xFILTER in 0.7.5 (over 3 years ago).
2820 * Remove deprecated aliases for CGI parameters (deprecated in 0.6.3 or 0.6.5,
2821   more than 3.5 years ago): RAW_SEARCH (now RAWSEARCH), DATE1 (now START),
2822   DATE2 (now END), DAYSMINUS (now SPAN but with slightly different semantics),
2823   and MIN_HITS (now MINHITS).
2825 * Remove "bias_weight" and "bias_halflife" CGI parameters since they rely on
2826   Enquire::set_bias() which has been removed.
2828 templates:
2830 * The 'query' template no longer uses $topterms by default.
2832 * New 'topterms' template provides a query template with $topterms support.
2834 * Template fragments which aren't intended for direct use have been moved to
2835   an "inc" subdirectory.
2837 testsuite:
2839 * md5test: Add tests for MD5 code.
2841 build system:
2843 * `./configure --enable-quiet' already allows you to specify at configure time
2844   to pass `--quiet' to libtool.  Now you can override this at make-time by
2845   using `make QUIET=' (to turn off `--quiet') or `make QUIET=y' (to turn on
2846   `--quiet').
2848 * configure: Disable probes for f77, gcj, and rc completely by preventing
2849   the probe code from even appearing in configure - this reduces the size of
2850   configure by 29% and should speed it up significantly.
2852 portability:
2854 * Fixed to build with GCC 4.3 snapshot.
2856 * We now make use of the safe*.h portability headers from xapian-core.
2858 * Ensure that the result of snprintf is zero terminated since MSVC's snprintf
2859   is broken (by design it seems).
2861 * configure: xapian-config --cxxflags now includes -ptused for SGI's C++
2862   compiler, so we don't need to probe for it here.
2864 * configure: Perform a link test for posix_fadvise to fix misdetection on
2865   HP-UX.
2867 Omega 0.9.10 (2007-03-04):
2869 documentation:
2871 * docs/omegascript.txt: Rewrite introductory paragraph.  Note that
2872   whitespace is significant, and add explicit warning to $setmap.
2874 * docs/termprefixes.txt: Expand section on boolean prefixes, showing
2875   how to generate them using scriptindex, and how to allow them to be
2876   selected in an HTML form.
2878 indexers:
2880 * omindex: Generate correct MD5 checksums on big-endian platforms.
2882 omega:
2884 * Fix $substr{} with negative start to actually work.
2886 * Fix $substr{} to never cause a C++ exception.
2888 packaging:
2890 * omega.spec.in: Remove "." from the end of the Summary.
2892 Omega 0.9.9 (2006-11-09):
2894 documentation:
2896 * Ship our custom INSTALL file rather than the generic one from autoconf which
2897   we've accidentally been shipping instead since 0.9.5.
2899 indexers:
2901 * scriptindex: The "date" action no longer modifies the value it operates on
2902   (it was never meant to!)
2904 omega:
2906 * Report an error if $setmap is called with an even number of parameters.
2907   An incorrect example in the documentation used to suggest this, so it's
2908   particularly useful to catch this case.
2910 packaging:
2912 * RPMs: Prevent binaries getting an rpath for /usr/lib64 on FC6.
2914 Omega 0.9.8 (2006-11-02):
2916 omega:
2918 * $substr where the start is negative and longer than the string (e.g.
2919   $substr{abcd,-5,1}) wasn't working as intended.
2921 build system:
2923 * configure: Tell AC_CHECK_HEADERS to suppress its backward compatibility mode,
2924   so it only checks headers with the compiler.  This speeds up configure a
2925   little, and is what we do elsewhere.
2927 * configure: Warning flags for GCC weren't actually getting used.  Fix this to
2928   work and use the same warning flags for GCC and Intel C++ as xapian-core does.
2929   Fix all the warnings this uncovered!
2931 * omega,omindex,scriptindex: Remove some old unused code.
2933 portability:
2935 * Ensure that we always pass an unsigned char value to isupper(), toupper(),
2936   etc as they are undefined on other values (glibc makes them work for signed
2937   char values too, but this is an extension).
2939 * configure: Pass magic options to SGI's C++ compiler to allow linking of
2940   templates to work.
2942 * configure: IRIX doesn't allow stdint.h to be included from C++ so we need
2943   a smarter configure test than AC_CHECK_HEADERS.
2945 * Fix warnings from SGI's C++ compiler.
2947 Omega 0.9.7 (2006-10-10):
2949 documentation:
2951 * omegascript.txt: Note that (by design) an omegascript template can't
2952   contain an infinite loop.
2954 * termprefixes.txt: "$setmap{title,S}" should be "$setmap{prefix,title,S}".
2956 * Use the default paths to the database directories and the omega CGI binary in
2957   examples.
2959 * README: Update reference to "CVS" to say "SVN".
2961 indexers:
2963 * Don't get confused by "a<b" in Javascript in a <script> tag.  Fixes bug#91.
2965 * Support htdig's "ignore this bit" comments.
2967 * Don't generate terms with more than 3 trailing symbols ('-', '+', or '#').
2969 * omindex:
2971   + Add the file last modified time as value #0.
2973   + Generate an MD5 checksum of each file indexed and store it in value #1
2974     to allow duplicates to be collapsed.
2976   + Store the file's last modified time in the document data as "modtime" so it
2977     shows up in search results (and tweak the query template so the display of
2978     this information looks nicer).  Don't add "modtime" field if the timestamp
2979     is (time_t)-1.
2981   + Run pdfinfo once and pull out the fields we want using string operations,
2982     instead of running it twice filtered through sed.
2984   + Parse the XML from OpenDocument and OpenOffice using new subclasses of
2985     HtmlParser.  Only extract meta.xml once.
2987   + Add "size" field to document data.
2989   + Run xls2csv on MS Excel files, run catppt on MS Powerpoint files, and also
2990     index MS Word templates (.dot) the same way as .doc files.
2992   + Don't generate 'W' terms since omega doesn't use them.
2994   + If a filter program isn't installed, then don't try it again for the same
2995     extension (not perfect but an improvement - previously we indexed an empty
2996     document!)
2998   + If popen() fails, treat it as a read error.
3000 * scriptindex:
3002   + Add new "load" action to allow the contents of an external file to be
3003     loaded and parsed.
3005   + Fix check for whether a record has content in the case where the same field
3006     is processed more than once.
3008 omega:
3010 * Add $pack and $unpack OmegaScript commands to allow big endian binary values
3011   to be encoded and decoded (for use with omindex's lastmod in value #1).
3013 * omega.conf: Fix code which reads omega.conf to be line based as documented
3014   rather than the wacky whitespace based scheme that was actually implemented.
3015   Also we now allow "#" comments and blank lines in omega.conf.
3017 * Fix $highlight{} to work with capitalised words (it used to work but
3018   regressed in 0.8.2).
3020 * Use '\t' to separate terms in xP since filter terms might contain '.'.  Fixes
3021   bug#87.
3023 testsuite:
3025 * Add htmlparsetest which tests the MyHtmlParser class.
3027 build system:
3029 * Makefile.am: Make use of the dist_ prefix to avoid having to list files in
3030   EXTRA_DIST as well as in *_SCRIPTS, *_DATA, and man_MANS.
3032 * Makefile.am: Prefer $(sysconfdir) to @sysconfdir@ since the former can be
3033   overridden on the "make" command line.
3035 portability:
3037 * xapian-config will now switch Sun's C++ compiler into ANSI C++ compliant
3038   mode, so remove all the special case bits of code added for just this one
3039   compiler.
3041 * omindex: Fix escaping of filenames to cast characters to "unsigned char" so
3042   that isalnum() works correctly everywhere.  Not a security hole as dangerous
3043   characters were still being escaped.
3045 * Call pclose() not fclose() on a FILE* obtained from popen().  This bug could
3046   cause us to run out of file descriptors on some platforms.
3048 * configure: Check for strftime.
3050 packaging:
3052 * omega.spec.in: Include documentation in the RPM package.
3054 Omega 0.9.6 (2006-05-15):
3056 documentation:
3058 * docs/omegascript.txt: Clarified description of $now.
3060 indexers:
3062 * scriptindex: Fix "index" and "indexnopos" without a prefix to set the weight
3063   correctly (bug introduced in 0.9.5).
3065 omega:
3067 * Added new OmegaScript commands $filterterms and $substr.
3069 portability:
3071 * configure: Update snprintf detection to match xapian-core.
3073 * Fix MSVC warnings.
3075 packaging:
3077 * omega.spec.in: Create and package /var/lib/omega/cdb and /var/log/omega.
3079 Omega 0.9.5 (2006-04-08):
3081 documentation:
3083 * README: Add pointer to documentation.
3085 * Added man pages for omindex and scriptindex, generated using help2man.
3087 indexers:
3089 * scriptindex:
3091   + If we fail to open the index script, die with an error (previously we
3092     acted as if an empty file was specified).
3094   + Warn about a useless "weight" action, even if it's followed by another
3095     non-useless action (e.g. "field") - previously we only warned if it
3096     was last or followed only by other useless actions.
3098   + Warn if "unique=<prefix>" is used without a corresponding
3099     "boolean=<prefix>" on the same line.
3101   + Warn that "index=nopos" is deprecated and should be replaced by
3102     "indexnopos".
3104   + Add explanatory text "(note that actions are executed from left to right)"
3105     when reporting useless actions.
3107   + Added new "hash" command to allow hashed terms to be generated from long
3108     URLs like omindex does.
3110 * htdig2omega.script,mbox2omega.script: Make use of the new scriptindex "hash"
3111   command.
3113 * dbi2omega: Check DBIDRIVER environmental variable to allow a driver other
3114   than mysql to be specified without modifying the script.
3116 omega:
3118 * Fix $opt[fieldnames] handling.  Previously it would try to kick in if you
3119   didn't set fieldnames but set any alphabetically later option!  The symptom
3120   was that $field{} would stop working (bug#72).
3122 portability:
3124 * omindex,omega: Tweaks for MSVC compilation.
3126 Omega 0.9.4 (2006-02-21):
3128 documentation:
3130 * COPYING: Updated FSF address.
3132 Omega 0.9.3 (2006-02-16):
3134 documentation:
3136 * overview.txt: The U prefix (URL term) was grouped with the date searching
3137   prefixes, but it makes more sense to group it with the prefixes relating to
3138   parts of the URL (H for hostname, P for path, etc).
3140 * overview.txt: Add pointer to documentation of the supported query syntax.
3142 * omegascript.txt: Improve descriptions of $cgi, $collapsed, $value, $version.
3144 * termprefixes.txt: Fix typo.
3146 indexers:
3148 * omindex: add --preserve-nonduplicates / -p option to not delete any documents
3149   that aren't updated, in replace duplicates mode (so that multiple runs of
3150   omindex on different subsites don't stomp on each other).
3152 * omindex,scriptindex: Add "--stemmer" option to omindex and scriptindex
3153   to allow the stemming language to be set.  Fixes bug#11.
3155 * omindex,scriptindex: More consistent --help and --version output.
3157 * omindex: Add support for OpenDocument format mimetypes and extensions out of
3158   the box.  Previously you could index them but had to pass a "-m" option for
3159   each OpenDocument filename extension you wanted to handle.
3161 * scriptindex: The "-q" option no longer actually controls anything.  Just
3162   ignore it for backwards compatibility (and don't document it in --help).
3164 omega:
3166 * If executing an OmegaScript command causes a Xapian exception to be thrown,
3167   catch it and copy the error message into error_msg (which is read by the
3168   $error command).  This allows such errors to reported in a nicer way.
3170 * Added "SORTREVERSE" CGI parameter which allows the sort order to be reversed
3171   when sorting on a value.  Removed "SORTBANDS" CGI parameter since it no
3172   longer does anything.
3174 * Added $find{LIST,STRING} to return the subscript of the first occurrence of
3175   string STRING in list LIST.
3177 * Added $lookup{CDBFILE,KEY} OmegaScript command to perform a lookup in a CDB
3178   file.
3180 * Added new feature which allows you to avoid storing fieldnames in every
3181   document.  Instead you just store the field values, one per line, and add
3182   something like "$set{fieldnames,$split{caption sample url}}" to the
3183   OmegaScript template to specify the fieldnames to use.  This can save a lot
3184   of disk space for a large database.
3186 * Add new "$split{}" OmegaScript command which splits a string to give an
3187   OmegaScript list.
3189 * Fix $url{} to escape "+" to "%2b".  Also fix encoding of top-bit-set
3190   characters on platforms where char is signed by default.
3192 * Speed up $highlight{} - only compare terms which are the same length.
3194 * Reduce memory usage if a lot of documents are marked as relevant.
3196 templates:
3198 * query: Make the page title shorter so there's more chance it will fit on icon
3199   bars, etc.
3201 * opensearch: Add missing escaping.
3203 * godmode: If a non-existent docid is specified, report the error and prompt
3204   the user to enter another docid.  Fixes bug#60.
3206 portability:
3208 * omega: Fix printf type mismatch on 64 bit platforms.
3210 * omega: Cast time_t to unsigned long to avoid problems on 64bit platforms.
3212 * Use snprintf where available.
3214 * Write top-bit set characters using \xXX notation to avoid warnings from
3215   Intel's C++ compiler.
3217 Omega 0.9.2 (2005-07-15):
3219 * omega: Changed $highlight so if OPEN and CLOSE aren't specified, they default
3220   to highlighting each word from the query with a different background colour
3221   like gmane does (previous default was to use '<strong>' and '</strong>').
3223 * omega: Call QueryParser::set_database() as this is now used to decide what to
3224   do for terms like "C#".
3226 * omega: Added the ability to set boolean prefixes for the QueryParser by
3227   setting a "boolprefix" map in the omegascript template.
3229 * omega: Added $length{} and $stoplist{} commands to OmegaScript.
3231 * scriptindex: Fix infinite loop if there's no newline at the end of a dumpfile.
3233 * docs/termprefixes.txt: Explain how to use termprefixes with scriptindex and
3234   omega, since that's what most people will want to know.
3236 * docs/omegascript.txt: Use standard "S" prefix for title in example for
3237   $setmap, rather than "XT".
3239 Omega 0.9.1 (2005-06-06):
3241 * Releases are now created using libtool 1.5.18 and automake 1.9.5.
3243 * Updated RPM packaging.
3245 Omega 0.9.0 (2005-05-13):
3247 * Updated for 0.9.0 API changes.
3249 * omindex/scriptindex: Generate terms like "c#".
3251 * Added mbox2omega script which allows a mail folder to be indexed using
3252   scriptindex.  Mostly it's an example as there's no mechanism included to show
3253   the full original message.
3255 omega:
3257 * The configuration file is now looked for differently - you can now set
3258   the environmental variable OMEGA_CONFIG_FILE.  See docs/overview.txt for
3259   details.
3261 * $highlight can now highlight terms like "C#".
3263 * Add new template 'opensearch' to implement basic opensearch feeds of search
3264   results.
3266 omindex:
3268 * URL hashing previously depended on sizeof(long) so databases weren't totally
3269   portable between platforms.  This is now fixed, but to do so we've had to
3270   break compatibility with databases built on platforms with 64 bit longs
3271   with URLs > 228 bytes.
3273 * Removed useless "DUPE_duplicate" option.
3275 * Added support for indexing Perl "pod" documentation using pod2text.
3277 * Replaced -l/--no-recurse with -l/--depth-limit which takes an argument
3278   allowing recursion to be restriction to any depth, not just 0 or infinity!
3280 * Extend -M/--mime-type to allow an existing mapping to be removed by omitting
3281   the type.
3283 * Fixed code so that we get lstat() prototype on Linux systems where we have
3284   posix_fadvise().
3286 scriptindex:
3288 * Improved handling of extra blank lines in dump file.
3290 * Strip multiple \r characters from end of line.
3292 * Complain if a dump file doesn't appear to have been = escaped correctly.
3294 * Flush database after each input file to ensure all changes from a file
3295   make it in.
3297 documentation:
3299 * docs/omegascript.txt: Clarify $field description slightly.
3301 * docs/cgiparams.txt,docs/omegascript.txt: Fixed 3 references to OmXxxx classes.
3303 * docs/termprefixes.txt: Added a single document covering all aspects of term
3304   prefixes.
3306 * docs/omegascript.txt: Moved $collapsed into correct place alphabetically!
3308 * docs/cgiparams.txt,docs/overview.txt: Improved description of how B filters
3309   are handled when building the query.
3311 * docs/scriptindex.txt: Note that actions are applied in the specified order.
3313 Omega 0.8.5 (2004-12-23):
3315 * README,INSTALL: Proper installation instructions.
3317 * omega: If an exception is thrown, make sure that the HTTP headers
3318   get written so that we don't cause "500 Internal Server Error".
3319   This problem was introduced by the change to allow a user specified
3320   Content-Type in 0.8.0.  Partly addresses bug#60.
3322 * scriptindex: Fixed "Unknown Exception" when trying to "unhtml" text which
3323   contains "</body>" (bug#61).  This bug was introduced in 0.8.4.
3325 * omindex/scriptindex: <h1> - <h6> and </h1> - </h6> now leave a space in the
3326   dumped HTML.  This bug was introduced in 0.8.4 - before that any tag left
3327   a space in the dumped HTML.
3329 * omindex: Only try to delete removed documents in "replace duplicates" mode
3330   (which is the default).
3332 * omindex: Change behaviour of crawler such that it doesn't follow symbolic
3333   links any more.  The new "--follow" command line option turns following of
3334   symlinks back on.
3336 * dbi2omega: Add a comment to the start of the file detailing what
3337   dbi2omega does.
3339 Omega 0.8.4 (2004-12-08):
3341 * omindex,scriptindex: Improved HTML to text conversion - now we strip
3342   leading and trailing whitespace and convert all other consecutive groups of
3343   whitespace to a single space.  Also the parser now knows that some tags
3344   should be regarded as word breaks and some shouldn't (previously all tags
3345   were treated as word breaks).
3347 * omindex: Removed bogus extra line from code which was meant to
3348   truncate samples, titles, etc at a word boundary, but has never actually
3349   worked!
3351 * omindex: Added hooks for indexing the following formats: OpenOffice (requires
3352   unzip), MS Word (requires antiword), Wordperfect (requires wpd2text), RTF
3353   (requires unrtf).
3355 * omindex: If a filename to be passed to a filter program has a leading "-",
3356   protect it from possible interpretation as an option by prepending "./".
3358 * omega: When there's only a boolean query we promote it to be the query.
3359   Tweaked so we use boolean weights in this case.
3361 * omega: Use Query::empty() instead of the now deprecated Query::is_empty().
3363 * omega,omindex,scriptindex: Use the new Database/WritableDatabase
3364   constructors.
3366 * templates/godmode: Finished off godmode template.
3368 * Compile everything as C++.
3370 * Check snprintf actually works - some older versions don't implement C90
3371   snprintf semantics.
3373 * XAPIAN_FLAGS already links with xapianqueryparser so remove
3374   -lxapianqueryparser from omega_LDADD as it was causing link errors on cygwin.
3376 Omega 0.8.3 (2004-09-20):
3378 * scriptindex: --version now actually reports the version.  --help now exits
3379   with status 0 rather than status 1.
3381 * RPM packaging: Updated.  The most notable change is that the RPM is now
3382   called xapian-omega because there's already an omega RPM (in Fedora Core at
3383   least) which is a game.  Also htdig2omega and htdig2omega.script are now
3384   included in the RPM.
3386 * Install htdig2omega.script in ${prefix}/share/omega/ rather than
3387   ${prefix}/share/.
3389 Omega 0.8.2 (2004-09-13):
3391 * omega: $highlight now handles accented characters (bug#9).
3393 * omega: Use new checkatleast parameter to Enquire::get_mset to implement
3394   MINHITS.
3396 * omindex: When running with "replace duplicates" mode (the default), detect
3397   documents removed since the last indexing run and delete them from the
3398   database (bug #34).
3400 * omindex: Use the new WritableDatabase::replace_document(term, doc) method.
3402 * scriptindex: Report index script file name and line number when
3403   reporting errors in it.  Added warning for redundant actions,
3404   such as "truncate" as the last action in a rule.
3406 * templates/query: Always report if the database is not found - previously we
3407   only did so if there was a query.
3409 * templates/query: Fixed missing </center> tag which happened in certain cases.
3411 * docs/omegascript.txt: Added note about that $add{$hit,1} gives
3412   the "hit number".
3414 * Now includes htdig2omega and htdig2omega.script which allow you to crawl
3415   remote websites with ht://dig, then build a searchable index of them with
3416   Xapian and Omega.
3418 * Link with -lxapianqueryparser, not -lomqueryparser.
3420 Omega 0.8.1 (2004-06-30):
3422 * omindex: Renamed hash() to hash_string() to avoid colliding with something
3423   on IRIX.
3425 * omega: Changed MORELIKE to pick up to 40 terms, rather than up to 6 (feedback
3426   on the mailing list suggests this gives much better results).
3428 * scriptindex: Added explicit catch for std::bad_alloc.
3430 Omega 0.8.0 (2004-04-19):
3432 * scriptindex: Change default to *not* overwriting the database (use
3433   --overwrite if you really want to do this); -u is now accepted but ignored.
3435 * scriptindex: Use getopt for option parsing.
3437 * omindex: Added --overwrite option which forces an existing database to be
3438   deleted before indexing begins.
3440 * templates/xml: Correct spelling of `relavence' to `relevance'.  NB: if you're
3441   parsing the XML output, you'll need to fix this spelling in your parser!
3443 * templates/xml: Now set HTTP header: "Content-Type: application/html".
3445 * templates/xml: Remove unused OmegaScript code:
3446   `$set{topterms,$or{$ne{$msize,0},$query}}'.
3448 * indextext.cc,omindex.cc,scriptindex.cc: Updated to use add_term() instead of
3449   add_term_nopos().
3451 * omega: Added $httpheader Omegascript to allow arbitrary HTTP headers and
3452   alternative Content-Type headers to be specified.
3454 * omega: If the probabilistic query was bad, don't try to run the match.
3456 * omega: Don't crash if there's a date filter but no probabilistic query.
3458 * omindex/scriptindex: Raw terms with a multicharacter prefix are now indexed
3459   with a : inserted (e.g. as XFOO:Rterm).  This matches what the query parser
3460   does.
3462 * omindex/scriptindex: Don't create R terms for terms which start with a digit.
3464 * omindex: Use O_STREAMING and/or posix_fadvise() when reading files to be
3465   indexed (if available).  This helps to keep the Xapian database in cache,
3466   and should greatly improve indexing throughput.
3468 * docs/scriptindex.txt: Make more explicit that boolean produces a *single*
3469   boolean term.
3471 * docs/cgiparams.txt: Note that START and END should be in the format YYYYMMDD.
3473 For NEWS entries for Omega versions prior to 0.8.0, see the xapian-core NEWS
3474 file.