[ci] Test Tcl bindings for dragonfly/freebsd
[xapian.git] / xapian-applications / omega / NEWS
blobc494a6385f18e6d2796d2d912d2d8e5b9029c005
1 up to: d72a7d16fe81bf5f6e0e986b95e1d8098256ee84
3 Omega 1.5.0 (2024-0?-??):
5 general:
7 * Add click logging and analysis to generate training data for the xapian-letor
8   module.  Patch from Vivek Pal.
10 * Remove htdig2omega scripts.  The last htdig release was in 2004 so these
11   scripts no longer seem at all useful.
13 documentation:
15 indexers:
17 * Our XML and HTML parser now treats XML (and XHTML) more correctly rather
18   thank treating everything like HTML.  In particular for XML and XHTML we now
19   parse tag names and attribute names case sensitively, and disable special
20   handling for htdig and similar "ignore this bit" comments, and also disable
21   special handling inside <script> tags.
23 * We now parse XML/HTML attributes lazily.  We often don't look at them so
24   just do the minimal parsing up front (skip balanced pairs of `"` and `'`
25   while scanning for the tag's closing `>`), and only parse the attribute
26   data for the requested attribute - in practice we're rarely asked for more
27   than one attribute for a particular tag so this will usually mean less work
28   since we can just stop once we've found the attribute, and we save the work
29   on building up and tearing down the structure to store the parsed attributes
30   in.
32 * Remove undocumented feature which preserved some HTML formatting in the
33   generated sample, encoded using different whitespace characters.  This
34   feature was added in 1.3.2, but never documented (its not even mentioned in
35   the NEWS file), only applied to documents in HTML or processed via HTML, and
36   nothing actually uses this formatting information.  It can result in CR
37   characters in the document data, which can be confusing when looking at an
38   Omega database with xapian-delve.  I think the original intent was that the
39   sample generating/selecting code might use this information, but in hindsight
40   I'm not sure that it's very useful there even.
42 * Convert HTML checkboxes to Unicode checkbox characters in the sample.
44 * Use C++17 std::string_view to avoid some copying of data during indexing.
45   See #785.
47 * omindex:
49   + Support piping input to filter commands on stdin, which is supported by
50     most of the external filters we support out of the box.  Piping input
51     means we can avoid having to open the input file an extra time (omindex
52     needs to open the input file so it can calculate a checksum of the contents
53     for duplicate detection, and also may need to use libmagic to find the
54     file's MIME Content-Type).
56   + Remove deprecated omindex --preserve-nonduplicates which was replaced by
57     --no-delete in 1.2.4.
59   + Add support for extracting text using a library.  The code which calls
60     each library is run in a worker sub-process so that bugs in the library
61     can't crash the indexer.  So far we have workers for the following
62     libraries and formats:
63     - Poppler: PDFs
64     - libe-book: fb2, fb2.zip, lrf, tcr, pdb and jar
65     - libetonyek: Apple iWork (keynote, pages, numbers)
66     - Gmime: MIME Email and Usenet articles
67     - Tesseract: extract text from image files using OCR
68     - libarchive: OpenDocument format, Microsoft XML formats (docx, xlsx, pptx, xps)
69     - libabw: Abiword formats
70     - libcdr: CorelDRAW formats
71     - libextractor: extract meta-data from audio and video files
72     - libreofficekit: Formats which LibreOffice supports
73     - libgepub: EPUB ebooks (#780)
74     The framework and workers were implemented by Bruno Baruffaldi, Parth
75     Kapadia and Olly Betts.
77   + Store created time in a value slot.
79   + Delay relatively expensive libmagic checks and the creation of the
80     Xapian::Document object until after we've checked if the document is
81     already indexed or already in our failed list.
82     Fixes #743. Patch from Bruno Baruffaldi.
84   + Don't index date terms by default.  Using values for date filtering has
85     been supported for more than 10 years (since 1.0.0) and has many advantages
86     - continuing to add all the terms as well is pointless overhead for the
87     majority of users at this point.  The omindex --date-terms option can be
88     used if you still want these terms (this option is supported since 1.4.22
89     for forward compatibility).
91   + Atom feed parsing: type="xhtml" is now understood.
93   + rfc822tohtml: Warn if "Date:" header parsing fails.
95 * scriptindex:
97   + Add unxml action to strip out XML tags.
99   + Adjust scriptindex deletion handling rules.  Previously scriptindex would
100     delete a document if it only had input fields which only match a line in
101     the index script containing the "unique" action but this is problematic if
102     you want to process the same input field in two different ways using
103     commands which modify the current text - for example, `hash unique=Q
104     boolean=Q` and `split=/ boolean=XP` can't be combined into a single line of
105     actions with the same effect as each on a separate line.
107     Now the check is based on whether there are any input fields which don't
108     match a line in the index script containing the "unique" action, and the
109     example above works when written as two lines.
111 omega:
113 * Support new QueryParser options: flag_fuzzy flag_wildcard_glob
114   flag_wildcard_multi flag_wildcard_single flag_word_breaks
116 * New $random and $srandom OmegaScript commands. Patch from Tanmay Sachan.
118 * New $hash{} OmegaScript command which calculates a hash for an input string.
120 * The weighting scheme specified by the `weighting` CGI parameter is now parsed
121   using the new C++ `Xapian::Weight::create()` API.
123 * $snippet now supports additional optional arguments to allow specifying the
124   flags, and strings for bra, ket and gap.
126 * $log{} now returns an error message.  This is upwardly incompatible in cases
127   where $log fails, but means it's now possible to report logging errors, and
128   one can wrap the `$log{...}` in `$if{` and `}` to ignore errors which also
129   works with older versions.
131 * $filesize{} with an empty input previously gave ``0`` but now gives an
132   empty result.
134 * Remove deprecated $set{spelling,true}.
136 * Note $set{weighting,trad} as deprecated in omega docs.
138 * Add $set{intra_query_op,OR} to allow combining multiple parsed query strings
139   with OR instead of AND.
141 * Add $jsonobject2 which is is a variant of $jsonobject which takes separate
142   lists of keys and values.
144 * $filters now uses a new encoding which is more compact in most cases,
145   especially when there are a lot of filter terms with repeated prefixes.
146   The xFILTERS parameter is still checked against the $filters output which
147   1.4.x would have given, but it's no longer checked against $filters output
148   from 1.2.x.  This means really old links to later pages of search results
149   will likely show the first page of results, but the final 1.2.x release was
150   in 2016 so this shouldn't be a problem.  Fixes #737.
152 * Add error handling for CGI parameters.  Patch from Vaibhav Kansagara.
154 templates:
156 * Remove unused images for showing the relevance score which don't appear to
157   have been used since 2007 except in commented out lines of the query
158   template.  The active version in the template which draws these with CSS
159   seems a better approach.
161 testsuite:
163 * Add omindextest to provide test coverage for omindex's handling of
164   file formats.  Patch from Bruno Baruffaldi.
166 * omegatest: Add feature tests for $snippet.
168 build system:
170 * We now require a C++17 compiler to build Xapian.  This means if you're using
171   GCC you'll need at least GCC 7.0.  Compilers which haven't been updated to
172   support C++17 are no longer supported (e.g. HP's aCC and Sun's C++ compiler).
174 * Use AC_CONFIG_MACRO_DIRS, which replaces the need to specify the same
175   directory via both AC_CONFIG_MACRO_DIR and ACLOCAL_AMFLAGS.  It was added in
176   automake 1.13, so that's now the minimum required version (was 1.12.2).
178 * Simplify probe for posix_fadvise().  We've been using the simpler probe in
179   xapian-core since 1.3.4 with no reports of issues.
181 portability:
183 packaging:
185 * We no longer provide RPM spec files.  In the early days of Xapian it was
186   perhaps useful to provide them so that people could build their own RPM
187   packages, but now all mainstream distros seem to provide packages, and
188   doubtless maintain their own packaging separately rather than just taking
189   what we ship as-is.
191 debug code:
193 * Allow using UBSan's unsigned-overflow check
194     In C and C++ unsigned overflow has defined behaviour (unlike signed
195     overflow) but in many cases it happening is not intended and indicates
196     a bug.
197     UBSan supports an unsigned-overflow check (at least the clang version
198     does - currently the GCC version doesn't seem to) so I've annotated the
199     few places in the code where we deliberately rely on unsigned overflow
200     (and eliminated a few cases where we can easily not rely on it) and
201     added this check to the clang-sanitisers job.
203 Omega 1.4.26 (2024-07-18):
205 indexers:
207 * omindex:
209   + Make robust to the indexer process being run with stdin or stdout closed.
211 omega:
213 * Support "bm25+" and "pl2+" in "$set{weighting,...}".
215 * Deprecate "lm" in "$set{weighting,...}".  This was meant to implement the
216   "Language Model" Weighting scheme, but we've discovered the implementation
217   was incorrect and fixing it requires ABI-incompatible changes in xapian-core.
218   For 1.4.x we need to leave it in place so as not to break existing code, but
219   we recommended avoiding using it.  It will be removed in the next release
220   series and replaced with new separate classes implementing Language Model
221   weighting with each smoothing.
223 * Add "prob" as new preferred name for probabilistic query expansion in
224   "$set{expansion,...}", with the previous "trad" still being accepted for now.
226 build system:
228 * Report result of probe to determine compiler support for -Werror or
229   equivalent.
231 * If pkg-config is available, use it to probe for libmagic.
233 * configure: Probe for closefrom().  Patch from Qiu Yingbo in
234   https://github.com/xapian/xapian/pull/323
236 portability:
238 * configure: Fix clang detection which wasn't working when configure determined
239   a -std=X option was needed to get C++11 support.  The obvious symptom was
240   that --enable-werror wouldn't add -Werror.
242 * configure: NetBSD automatically pulls in library dependencies, so set
243   link_all_deplibs_CXX=no there.
245 * Define __WIN32__/__WIN64__ like we do for xapian-core.  Spotted by Baran Demir.
247 * Avoid using sprintf() if snprintf() is available, even in cases where the
248   output size is bounded to avoid deprecation warnings on macOS.  For 1.4.x
249   we still fall back to sprintf() to avoid a point release breaking support
250   for any platform still lacking snprintf().
252 * Use `override` for subclassing functors.  This is good practice as it gives a
253   clear compile error if we have to change the signature of an virtual method
254   on such a functor.  See #830.
256 * Fix building with MSVC - it seems to support AR=lib we need to use AM_PROG_AR
257   which probes for AR's command line interface.
259 Omega 1.4.25 (2024-03-08):
261 testsuite:
263 * omegatest.pl: Correct program name in error message.
265 build system:
267 * configure: DragonflyBSD automatically pulls in library dependencies, so set
268   link_all_deplibs_CXX=no there.
270 * configure: Avoid compiler warning during GCC version check when compiler
271   needs an option to enable C++11 support (same fix as applied to xapian-core
272   in 1.4.23).
274 Omega 1.4.24 (2023-11-06):
276 documentation:
278 * Document $filesize error handling.
280 indexers:
282 * omindex:
284   + Implement piped input to filters for __WIN32__.  Previously it looks like
285     the filter was run but the input wasn't connected to its stdin so it would
286     probably block indefinitely.
288   + Fix corner case in shell emulation - we no longer set environment variables
289     which start with a digit.
291     This issue was spotted from reading the code - in practice this isn't a
292     case that's likely to be encountered, and the previous behaviour doesn't
293     appear to have any security consequences even if a user was somehow tricked
294     into specifying an extraction command that did this.
296 * scriptindex:
298   + Check if we can actually support %z in parsedate action.  Previously we
299     assumed we could if struct tm had a tm_gmtoff member, but that's only a
300     necessary condition and not sufficient, e.g. on Cygwin we have tm_gmtoff
301     but strptime() doesn't currently understand %z.
303   + If we were expecting an action but didn't get an identifier this triggered
304     an infinitely repeating error:
306     Unknown index action ''
308     Now we instead give a single error:
310     Expected index action, found '...'
312     where '...' shows the sequence of non-whitespace characters encountered.
314 testsuite:
316 * Run tests under eatmydata if available.
318 * Turn off MSYS2 argument conversion for tests as it breaks omegatest, and we
319   shouldn't need this conversion there.
321 * omegatest: Rewrite in Perl as we were hitting non-portable quoting issues
322   with the shell implementation, and really it had grown too large to make
323   sense as a shell script anyway.
325 build system:
327 * Add --enable-werror configure option.
329 * configure: Only auto-enable -D_FORTIFY_SOURCE=2 if it works without
330   additional libraries and remove the hard-coded block against using it
331   on mingw.  Mingw-w64 v11.0.0 eliminated the requirement to link with -lssp
332   so we now auto-enable -D_FORTIFY_SOURCE=2 there.
334 portability:
336 * Fix to build on Cygwin.
338 * Rename our bswap32 helper function to avoid clash with system-provided
339   function on FreeBSD and NetBSD.
341 Omega 1.4.23 (2023-07-07):
343 documentation:
345 * Improve documentation for OmegaScript numerical and logical operators.  Patch
346   from Vaibhav Kansagara.
348 * Improve documentation for DATEVALUE, xFILTERS and $filters.
350 indexers:
352 * omindex:
354   + Handle XPS files with multiple FixedDocument parts better.  Previously we
355     only extracted text from the first FixedDocument part.
357   + Prefer latter subparts of multipart/alternative which is what RFC2046 (and
358     earlier RFCs which that obsoletes) say, but previously we used the first
359     subpart that we could get text from.
361   + Prefer latter subparts of multipart/alternative when indexing Outlook
362     .msg files too.
364   + Fix obscure bug in --mimetype option.  We keep track of the length of the
365     longest extension we have a mapping for, but this was being updated using
366     the length of the MIME type rather than the length of the extension.
367     Theoretically this could have led to us effectively ignoring a --mimetype
368     option, but in the real world the MIME type will probably always be longer
369     so this just results in us testing long extensions unnecessarily.
371 omega:
373 * Ignore DATEVALUE CGI parameter if START.n, etc is specified on the same
374   slot.  We explicitly document not to do this, but if that advice is ignored
375   it's more helpful to at least preserve the property that we only have
376   one date range per value slot.
378 * Add flag_ngrams as a preferred new alias for flag_cjk_ngram.  In the next
379   release series this feature has been expanded to cover many more languages
380   so the "cjk" in the name has become inaccurate as it stands for
381   "Chinese, Japanese and Korean".
383 * Fix handling of Outlook .msg containing Unicode.  Codepoints <= U+00FF appear
384   to have been handled correctly, but anything higher resulted in individual
385   bytes of the UTF-8 encoding being treated as separate characters.
387   Fixes https://github.com/xapian/xapian/pull/326, reported by uhuntu.
389 portability:
391 * Fix compatibility code for old libmagic versions.  The code we were using
392   seems like it would never have worked.  Nobody's reported this (it was
393   spotted while looking at the code) so we could just require libmagic >= 4.22,
394   but it's trivial to actually handle so we've fixed the fallback code.
396 * Remove lingering traces of IRIX support as it's been dead for many years.
398 Omega 1.4.22 (2023-02-02):
400 documentation:
402 * Improve term prefix documentation.
404 indexers:
406 * omindex:
408   + Add --date-terms and --no-date-terms options.
410   + Extract page/sheet count for OpenDocument text documents and spreadsheets.
412   + Extract created date and keywords for MS XML formats.
414 * scriptindex:
416   + Fix handling of an unterminated final line in input file.
418 omega:
420 * Add OmegaScript commands to report value slot bounds.
422 * Add OmegaScript $sortableunserialise{} command.
424 Omega 1.4.21 (2022-09-22):
426 documentation:
428 * Consistently say "macOS" not "Mac OS X", "OS X", etc.
430 indexers:
432 * omindex:
434   + Add support for gzip-compressed SVG files (.svgz).
436   + Handle <title> in SVG.  Previously only <dc:title> inside <metadata> was
437     considered.  If both are present, <title> now takes precedence.
439 testsuite:
441 * omegatest: Add skip-for-32-bit-time_t mechanism and use it to conditionally
442   enable some testcases which fail on platforms with 32-bit time_t.
444 build system:
446 * Update to use AX_CXX_COMPILE_STDCXX which is a replacement for
447   AX_CXX_COMPILE_STDCXX_11 (which we were using) which also supports newer C++
448   standards versions which will be useful.  For C++11 the only difference seems
449   to be that the macro now checks for attribute support - we use C++11
450   attributes so that seems a good thing.
452 Omega 1.4.20 (2022-07-04):
454 indexers:
456 * omindex:
458   + OpenDocument: Previously we only inserted an implicit space before each
459     paragraph.  Now we insert them both before and after each paragraph and
460     heading, and before forced each line-break and tab.
462   + Add extension mapping for .awt (Abiword templates).
464   + Index metadata from XPS files.
466   + -G and -C short options were documented in --help but not previously
467     actually handled. Reported by David Bremner.
469   + Show --max-size required argument in --help output.
471   + Remove lingering handling for database backends without slot bounds since
472     all backends have been required to support these since 1.4.11.
474 * scriptindex:
476   + Process an incomplete final line from a dump file.  Previously if the final
477     line lacked a newline scriptindex would quietly ignore it (unless it was
478     the only line).
480   + The `unique` action now takes an optional `missing` parameter to specify
481     what to do if a record doesn't trigger the unique action or triggers it
482     with an empty value.  The default is now to issue a warning and create a
483     new document (the same as before, except that there was only previously a
484     warning for the empty value case). In Omega 1.5.0 the default will change
485     to an error as that seems a better default, but is less compatible with
486     potential existing use.
488   + Explicitly allow multiple blank lines in input files.  Previously such
489     extra blank lines were treated as empty records and in many cases these
490     got quietly skipped, but e.g. with the new UNIQUE checks this could result
491     in a warning or error.
493   + If we hit an error while parsing the index script we used to exit right
494     away, but now we finish parsing the index script since it's more helpful to
495     report all the errors in an index script rather than the user having to
496     fix them one by one.  This requires us to sensibly recover after each index
497     script parse error - if you find a case where this recovery triggers
498     further bogus errors please report it and we'll try to improve the
499     recovery.
501   + In four cases while handling input data (two cases of bad hex data fed
502     to `hextobin`, an input data line without a `=`, and `load` failing to
503     load the specified file) we'd emit a diagnostic that was labelled as an
504     "error" but really it was handled as a warning as we kept reading input
505     and the "error" didn't affect the exit status.  It doesn't really make
506     sense to continue in any of these cases so we now exit with non-zero status
507     right away.
509   + A parameter in the index script which should be an integer but isn't, or
510     should be positive but isn't now gives an error rather than a warning since
511     an error seems more helpful.
513   + All diagnostics issued while parsing the index script now include column
514     information.
516   + Avoid forcibly flushing the output stream after every message.
518 testsuite:
520 * Improve test coverage for scriptindex.
522 portability:
524 * Require PCRE2 instead of PCRE. The original PCRE is now EOL and unmaintained
525   (last release was June 2021).  In omega it's potentially used to process
526   input from the internet, so security is a real concern hence we're switching
527   to PCRE2.
529 Omega 1.4.19 (2021-12-31):
531 documentation:
533 * configure: Add missing AC_ARG_VAR for all programs so that they are
534   documented in --help output, and so that autoconf knows they are "precious"
535   and preserves them if configure is rerun even when they're specified via an
536   environment variable.
538 * Add usage examples for $jsonobject.
540 * Fix path to omega in quickstart document.  Fixes #813, reported by Jim Lynch.
542 * Update for the IRC channel move from freenode to libera.chat.
544 indexers:
546 * Fix handling of UTF-16 BOMs in XML and HTML - we had the sense of the
547   endianness indicated by the BOM the wrong way round.
549 * Avoid making an extra temporary copy of HTML/XML data which has a UTF16 BOM.
551 * We now ignore an end of line immediately after a PHP close tag to match what
552   PHP does.
554 * omindex:
556   + Fix handling of formatted xlsx dates in certain cases.
558 * scriptindex:
560   + Add new scriptindex whitespace removal actions `ltrim`, `rtrim`, `squash`,
561     and `trim`.
563   + Improve `truncate` action - if a word ends exactly on the requested length
564     we now leave it in place rather than removing it.
566   + Report the location of previous `unique` action in the error given when
567     `unique` is used more than once.
569 omega:
571 * Clamp START and END with packed timestamps.  The 4-byte unsigned packed
572   time_t format can't represent dates before 1970 or after Sun 07 Feb 2106
573   06:28:15 UTC so clamp dates before or after these - previously they would
574   wrap around.
576 * The JSON produced by $jsonobject no longer contains newlines, which makes it
577   usable as a single line serialisation format without post-processing.
579 * Add $base64 OmegaScript command.
581 * omega: Add flag_no_positions to wrap new
582   Xapian::QueryParser::FLAG_NO_POSITIONS.
584 templates:
586 * Fix topterms template to not trigger early matching.  We were checking $msize
587   before including the `query` template, but doing so would trigger the query
588   to be run, which means that settings early in the `query` template which
589   should affect the result (such as $setmap{prefix,...}) were being ignored
590   when the `topterms` template was used.  Partly addresses #815, reported by
591   Gennadiy.
593 * Add field support to opensearch and xml templates.  These templates now also
594   search title, topic and filename by default and support `title:`, `author:`
595   and `topic:` in the query string (both like the template `query` already
596   does). Fixes remaining issue in #815, reported by Gennadiy.
598 testsuite:
600 * Expand omegatest.  All scriptindex actions now have test coverage.
602 build system:
604 * Replace uses of obsolete autoconf macros, fixing warnings if configure is
605   regenerated with a recent release of autoconf.
607 portability:
609 * Don't automatically use _FORTIFY_SOURCE on mingw-w64.  Recent mingw-w64
610   versions require -lssp to be linked when _FORTIFY_SOURCE is enabled, so just
611   skip the automatic enabling.  Users who want to enable it can specify it
612   explicitly.
614   Fixes #808, reported by xpbxf4.
616 * Automatically enable GCC warnings -Wduplicated-cond and -Wduplicated-branches
617   if using a GCC version new enough to support them.  The usefulness of
618   -Wduplicated-cond was highlighted by dcb in #816.
620 * Fix GCC -Wshadow warning.
622 * Use clock_gettime() and nanosleep() under modern mingw as these allow higher
623   precision than what we previously used.
625 Omega 1.4.18 (2021-01-14):
627 indexers:
629 * omindex:
631   + Add default MIME mapping for application/rtf.  IANA have registrations for
632     text/rtf and (more recently) application/rtf (it seems because newer
633     versions of the RTF format can contain 8-bit data) so we now recognise
634     application/rtf by default and handle it the same way as text/rtf.
636     Current libmagic seems to always return text/rtf (no matches for
637     application/rtf in magic.mgc) and we continue to map extension rtf to
638     text/rtf, so this change is mainly future-proofing against libmagic future
639     changes.
641   + Add support for indexing OpenXPS, which is effectively the same as XPS
642     internally in ways we care about, but it uses a different mimetype and a
643     different filename extension.
645 omega:
647 * Explicitly use OR for MORELIKE queries.
649   Since 1.3.0 the default value of DEFAULTOP has been AND, which typically
650   makes MORELIKE queries much less useful since they'll only match documents
651   containing all the terms from the query expansion.  We now explicitly insert
652   " OR " between the terms if DEFAULTOP hasn't been set to OR, which makes them
653   work much more like they did in 1.2.x.
655 * Make $stoplist and $unstem consider all query strings by always passing the
656   new Xapian::QueryParser::FLAG_ACCUMULATE flag.
658 * Add $foreach command which works like $map, but just concatenates the
659   evaluated results rather than adding tabs to turn them into an OmegaScript
660   list.
662 * Extend $include{} to allow handling failure to open the specified file via an
663   optional second argument which if specified will be evaluated and returned
664   instead.  Patch from Gaurav Arora.
666 * Support multiple MORELIKE parameters - we now form an RSet from all the
667   specified documents and use that to generate the query to run (previously
668   only one of multiple MORELIKE parameters was used).
670 Omega 1.4.17 (2020-08-21):
672 documentation:
674 * Document comment format supported by scriptindex index scripts.  We've
675   supported comments on a line by themselves and introduced with a # since
676   scriptindex was first added back in 2002, but it seems have never actually
677   been documented before now.
679 omega:
681 * Check for SERVER_PROTOCOL=INCLUDED before anything which might throw an
682   exception so that if it is set we suppress the Content-Type: when reporting
683   such exceptions.  Spotted by Gaurav Arora.
685 * Report get_description() for Xapian::Error exceptions instead of get_msg().
686   This means we now report the exception's type, context (useful for network
687   errors), and errno information.
689 * Avoid leaking MyStopper object.  The object essentially has the lifespan of
690   omega itself, but becomes unreachable when the QueryParser object is
691   destroyed.  To make it easier to use leak-checking tools, hand ownership of
692   this object to the QueryParser object.
694 testsuite:
696 * omegatest: Tell leak sanitizer not to report leaks for allocations which
697   aren't explicitly released on exit - the OS will reclaim all memory from the
698   process at this point and explicitly releasing everything just takes time for
699   no real benefit.  We will still see leaks of objects which become unreachable
700   during a run.
702 Omega 1.4.16 (2020-06-08):
704 indexers:
706 * Fix handling of XML empty tag syntax when there's a quoted parameter right
707   before the closing `/>`.  This caused `<title xml:lang="en-US"/>` to treat
708   the body text as the document title.  Spotted by Gaurav Arora.
710 * omindex: Fix killing of filter child process if the parent process receives a
711   signal.  Spotted by Gaurav Arora.
713 omega:
715 * Reject $setrelevant without an argument list.  This has never been documented
716   as allowed, and previously crashed with a segfault.  Fixes #802, reported by
717   Gaurav Arora.
719 * If there's an error opening the databases we now close any we managed to open
720   successfully before the error so that things like $dbsize can't end up
721   reporting values for a subset of the specified databases.
723 portability:
725 * Use our own autoconf cache variable namespace (xo_cv_ prefix instead of
726   ac_cv_) to avoid colliding with standard autoconf macro use if config.site or
727   a shared config.cache is used.  The former case caused a build failure for
728   the OpenBSD port with 1.4.15, reported by Lucas R.
730 Omega 1.4.15 (2020-02-24):
732 documentation:
734 * Update documentation about how to add a new format to omindex.  Patch from
735   Bruno Baruffaldi.
737 indexers:
739 * Check for a BOM on HTML files, which for HTML5 should determine the encoding.
741 omega:
743 * Allow $if{COND} without any actions which is useful as a way to evaluate
744   something but ignore the result if you just want the side effects.  Indeed
745   we were already recommending to use it if you want to ignore the return value
746   of $log.  Fixes bug introduced in 1.4.14, reported by tuftedocelot.
748 * Add OmegaScript support for $jsonbool{COND} for encoding a boolean value for
749   use in JSON.  This is equivalent to $if{COND,true,false} but more readable.
751 * Add OmegaScript support for $jsonobject{} which allows producing a JSON
752   object from an OmegaScript map.
754 * Allow specifying a format to $jsonarray{} so it is no longer restricted to
755   producing an array of strings.
757 * Add $keys{MAP} OmegaScript command which gives a sorted list of the keys from
758   an OmegaScript map.
760 portability:
762 * Simplify probes for snprintf.  The broken snprintf in libbsd in Linux libc4
763   is from ~25 years ago so way too ancient to matter now, and all callers
764   already handle the pre-ISO semantics of returning -1 for an undersize buffer
765   so we don't need to run a test program to probe for this at configure time,
766   which is more cross-compile friendly.
768 * Avoid deprecation warning on recent Linux.  We were including sys/sysctl.h if
769   it existed, which it does on Linux but we don't actually use it there.
770   Including it now warns that it is deprecated, so skip including it under
771   Linux.  Reported on IRC by kumaran.
773 Omega 1.4.14 (2019-11-23):
775 documentation:
777 * Improve omindex --help docs for --duplicates.
779 indexers:
781 * Add built-in support for iso-8859-15 so we can handle it without iconv.
782   This charset is a variant of iso-8859-1 with 8 characters changed, most
783   notably including the euro currency symbol.  It's the most commonly seen
784   charset we didn't have built-in support for.
786 omega:
788 * Fix error handling in $lookup.  We now check for errors from cdb_init()
789   and cdb_get().  We've never checked for errors from cdb_init(), while
790   for cdb_get() this bug was introduced by a warning fix in 1.2.20.
792 Omega 1.4.13 (2019-10-14):
794 documentation:
796 * Document that $log will start to return an error message in 1.5.0, and that
797   one can wrap it using a $if with no action now to be future-proof.
799 indexers:
801 * Optimise converting us-ascii to UTF-8 to do nothing, like we already do when
802   converting UTF-8 to UTF-8.
804 * scriptindex:
806   + Add new 'gap' action which provides a way to leave a gap in the term
807     positions between fields to prevent phrases and positional operators from
808     matching across fields.
810 templates:
812 * Future-proof use of $log against changes in 1.5.0.
814 Omega 1.4.12 (2019-07-23):
816 documentation:
818 * Improve docs for OmegaScript $hitlist{}.
820 * Fix RST formatting errors in omega docs.
822 * Clarify use of Q prefix for unique ID terms - it was described as "reserved",
823   but the use of "Q" is really just a convention (and in fact omindex uses "U"
824   not "Q").
826 * Clarify scriptindex's weight action takes parameter >= 0.
828 * Correct typo in OmegaScript $add parameter documentation.
830 indexers:
832 * omindex:
834   + Fix typo in mimetypes used for Apple iWork documents ("apply" instead of
835     "apple") which meant that these documents weren't actually being indexed.
836     Patch from Bruno Baruffaldi.
838   + Pipe input to ps2pdf as this accepts input on stdin.  Possibility pointed
839     out by Gaurav Arora.
841 * scriptindex:
843   + If parsedate action's format includes %z adjust for the timezone if
844     possible (this requires the non-POSIX tm_gmtoff member of struct tm)
845     and flag an error for other platforms.
847   + If parsedate action's format include %Z flag an error as that doesn't
848     seem to be usefully supported by strptime() anywhere.
850   + Fix parsedate action to treat formats without a timezone as being UTC
851     instead of localtime.
853   + Add date=unixutc.  The existing date=unix works in localtime which is
854     unhelpful if you want to use it on the output of parsedate since that's in
855     UTC; date=unixutc is just like date=unix except it always works in UTC.
857   + The date action now emits a warning for invalid values.  The documentation
858     used to say "invalid values are ignored at present", but it's more helpful
859     to flag bad data than quietly ignore it.
861   + We now check the date action's parameter at script parse time and unknown
862     values result in an error and nothing being indexed.  Previously an unknown
863     format uselessly resulted in the terms D, M and Y literally being added to
864     every document.
866   + The split action now supports a new "prefixes" split style.  This gives all
867     the prefixes from the split, so split=/,prefixes on a file path gives all
868     parent directories.
870 omega:
872 * Remove documented limitation of $subdb and $subid - the implementation
873   assumed that each omega database name corresponded to a single Xapian
874   database, and if a database name referred to a stub database file expanding
875   to multiple Xapian databases then they would misbehave.  Such cases are now
876   handled properly as well.
878 * Extend $addfilter to support adding negated filters via a new optional second
879   argument which specifies the type of filter to add.
881 * Stop $sort from needlessly ensuring the match has run.
883 * Handle corner case of nested $hitlist gracefully instead of potentially
884   entering an infinite loop.
886 testsuite:
888 * omegatest: Avoid setting TZ globally during tests as that hides bugs where
889   behaviour depends on the local timezone when it shouldn't.
891 * omegatest: Support testing when built using LeakSanitizer by suppressing
892   leak reports for cached compiled pcre regular expressions.  These aren't
893   released when the program exits but aren't memory leaks.
895 build system:
897 * Remove outdated deprecation warning suppression which was there to support
898   building from git in the run up to 1.3.2 - a development version which is
899   nearly 5 years ago now.
901 portability:
903 * Fix problems with fallback strptime() implementation which was being included
904   in the wrong binary, and was lacking a required const_cast on the return
905   value.
907 * Rework setenv() compatibility handling.  Now that Solaris 9 is dead we can
908   assume setenv() is provided by Unix-like platforms (POSIX requires it).  For
909   other platforms, provide a compatibility implementation of setenv() so the
910   compatibility code is encapsulated in one place rather than replicated at
911   every use.
913 Omega 1.4.11 (2019-03-02):
915 indexers:
917 * omindex:
919   + outlookmsg2html: Handle Subject, Date, and From headers.
921 omega:
923 * In $div and $mod we were converting a non-zero denominator from string to int
924   twice for no good reason.
926 testsuite:
928 * omegatest: Fix testcase which was failing if the local timezone was behind
929   UTC.  This testcase was added in 1.4.10.
931 * omegatest: Tweak to not fail when $time not supported - it seems that the
932   OS time functions we use report an error on GNU Hurd for unknown reasons.
934 build system:
936 * Sync up probes for OS time functions in omega's configure with those in
937   xapian-core which may solve $time not being supported on GNU Hurd.
939 portability:
941 * Add missing includes of <cerrno>.  Fixes #776, reported by Matthieu Gautier.
943 * Stop using htonl()/ntohl() in a non-network context which should improve
944   portability to platforms without a POSIX-like socket API.
946 Omega 1.4.10 (2019-02-12):
948 documentation:
950 * Use https for URLs where supported.
952 indexers:
954 * omindex:
956   + Index .apxl and .kth files as Apple Keynote.  The .apxl extension is used
957     for the XML files inside .key bundles/directories which hold the text
958     content of the presentation, and by handling them we can index .key
959     directories more usefully.  It seems they are also sometimes found by
960     themselves.  Keynote themes have a .kth extension, and key2text can also
961     handle these.
963   + Pipe input to pdftotext, pdfinto and dpkg.  These tools all support piping
964     an input file on stdin, which can be a little more efficient when we
965     already have the file open (e.g.  to determine its type using libmagic, or
966     to calculate its checksum).
968   + An empty string for the start directory is now flagged as an error.
969     Previously `/` was used instead, which is unlikely to be what is wanted
970     (and `/` can be explicitly specified if that really is what is wanted).
972   + Fix emulation of stderr redirection when the indexer's stderr has been
973     closed.  We try to avoid using the shell when running external filters, and
974     emulate 2>/dev/null in commands, but if the indexer's stderr was closed
975     this emulation was buggy and would make give the filter a closed stderr
976     instead of one redirected to /dev/null.
978   + When emulating redirection to /dev/null, we now open /dev/null once and
979     dup that fd each time which is a little more efficient and simplifies the
980     code.
982 * scriptindex:
984   + date=unix is now a no-op for empty input - previously it would unhelpfully
985     add boolean date terms for 1970-01-01.
987   + Warn for empty filename in LOAD action.  Previously this gave a slightly
988     confusing error: "Couldn't load file '': No such file or directory"
990   + Unknown command-line options now cause scriptindex to give a non-zero exit
991     status.
993 testsuite:
995 * omegatest: Add testcase for SPAN.n on different slots.
997 * omegatest: Update expected QueryParser output for the xapian-core change to
998   produce flatter Query trees.
1000 build system:
1002 * Use AM_ICONV to detect iconv() which should handle non-system install of GNU
1003   libiconv properly.  Fixes #775, reported by Ryan Schmidt.
1005 portability:
1007 * Provide fall-back strptime() implementation for platforms which don't provide
1008   it, using the C++11 std::get_time() function.  We use strptime() directly
1009   where it's available as some older C++11 compilers seem to lack
1010   std::get_time() (GCC 4.8 for example).  This is used by the parsedate action,
1011   which was added in 1.4.6.
1013 Omega 1.4.9 (2018-11-02):
1015 indexers:
1017 * omindex:
1019   + Try harder to avoid opening a file being indexed more than once by
1020     reusing the file descriptor in more cases.
1022   + Hint to the OS not to cache output from external filters which require
1023     using a temporary file.
1025 * scriptindex:
1027   + If the LOAD action successfully opens a file but hits a read error the
1028     error message now reports the file name correctly.  Previously it would
1029     report the partial file contents read so far instead of the file name.
1031 portability:
1033 * We no longer call posix_fadvise() with POSIX_FADV_NOREUSE under Linux,
1034   since it's still not implemented there.  We also now only call
1035   posix_fadvise() with POSIX_FADV_DONTNEED right before we close the file
1036   descriptor under Linux.
1038 Omega 1.4.8 (2018-10-25):
1040 documentation:
1042 * Assorted minor documentation improvements.
1044 indexers:
1046 * omindex:
1048   + Improve date handling in .eml files.  We now handle a "Date:" header
1049     without the day of the week, which is allowed by RFC822 and RFC2822
1050     (though seems rare in practice).  If the date can't be parsed, we now
1051     just omit the date information rather than failing to process the file.
1053   + Add support for indexing Apple iWork documents (Keynote (.key), Numbers
1054     (.numbers) and Pages (.pages)) using libetonyek.  Currently only the file
1055     variants are handled since omindex doesn't currently support indexing a
1056     directory as a document.
1058   + Index Visio files using vsd2xhtml.
1060   + Extend --filter to support filters which produce SVG as output.
1062   + Handle SVG embedded in XML with svg: namespace prefix.
1064   + Add --read-filters option to read a list of filters from a file, each line
1065     of which is a rule as passed to --filter.  Based on a patch from Gaurav
1066     Arora.
1068   + Add new --mime-type-match option which allows specifying a MIME
1069     Content-Type for a given shell filename pattern pattern (with the special
1070     Content-Type values "ignore" and "skip" supported, as for --mime-type).
1072   + Adjust --mime-type to allow ':' in the extension.  A valid MIME
1073     Content-Type can't contain a colon, so if the argument to --mime-type
1074     contains more than one colon it makes more sense to split at the *last*
1075     colon (we used to split at the first), as an extension could conceivably
1076     contain a colon.  Mostly this change is for consistency with the new
1077     --mime-type-match option, where the leafname pattern could reasonably
1078     contain a colon.
1080   + Remove failed entries for ignored files.  If a file is mapped to
1081     pseudo-mimetype "ignore" then remove any existing failure record for it so
1082     that ignored files so we don't potentially end up with a lot of cruft
1083     failure records for files we are no longer trying to index.
1085   + If a file fails to index due to failing to allocate enough memory we now
1086     try to flag it as failed to index so it will be skipped by default on
1087     future runs.  This should help to avoid indexing getting stuck on
1088     problematic files.
1090   + Add a "pages" field with the number of pages in the document where we
1091     know how to determine this (currently only for PDF files for which pdfinfo
1092     reports this information).
1094   + Handle initially empty database exactly the same was as when --overwrite
1095     is specified.  This probably has no user-visible consequences, but it's
1096     cleaner for the handling to be exactly the same.
1098 * scriptindex:
1100   + Improve scriptindex diagnostic messages.  All diagnostics are now labelled
1101     as "error", "warning" or "note" as appropriate, and we now consistently
1102     report "FILE:LINE:" (and also "COLUMN:" in most cases) to make it clearer
1103     where the problem lies.
1105   + Add new "split" action which splits the text on a specified delimiter and
1106     executes the following actions for each piece.  Based on a patch by Gaurav
1107     Arora.
1109   + Missing whitespace after the closing " on an action argument is now
1110     flagged as an error.  Previously scriptindex would attempt to parse
1111     the following characters as the next action.
1113   + Support C-like escapes for quoted parameter values.  Notably this means it
1114     is now possible to include `"` in quoted parameter values.
1116 omega:
1118   + Value-based date range filters can now be specified via CGI parameters
1119     START.N, END.N and/or SPAN.N where N is a value slot number, allowing
1120     multiple concurrent filters on different slots to be specified.
1122   + Support YYYY and YYYYMM limits in term-based date ranges.  Previously
1123     value-based date ranges supported these as limits, but term-based date
1124     ranges gave an error.
1126   + Add stem_strategy option and deprecate existing stem_all option in favour
1127     of this new more versatile option.
1129   + Support "natural" $sort option via new flag "#" which sorts embedded
1130     natural numbers in numerical order.
1132   + Support numeric $sort option via new flag "n", similar to GNU sort -n.
1134   + Rewrite field parsing to be more efficient, and store fields in an
1135     unordered_map for faster lookup.
1137 testsuite:
1139 * htmlparsetest: Test whitespace collapsing.
1141 portability:
1143 * omegatest: Avoid "set -".  The autoconf manual notes that POSIX no longer
1144   requires this, and that with traditional shells it resets -v and -x which
1145   makes debugging harder.
1147 * omegatest: Fix shell printf quoting issues which were a latent bug on macOS.
1149 * Drop special handling for Compaq C++.  We never actually achieved a working
1150   build using it, and I can find no evidence that this compiler still exists,
1151   let alone that it was updated for C++11 which we now require.
1153 Omega 1.4.7 (2018-07-19):
1155 omega:
1157 * New OmegaScript $unique command.  The existing $uniq only removes adjacent
1158   entries (like the Unix uniq command) so to fully remove duplicates you need a
1159   sorted input.  Sometimes it is desirable to remove duplicates from an
1160   unsorted list without changing the order of the entries which are left, so
1161   add $unique to do that.  If the list is sorted already, then $uniq is more
1162   efficient.
1164 * Fix $map to cleanly reject a single argument.
1166 templates:
1168 * templates/query: Merge multiple entries in the term frequency information,
1169   which came from searching several prefixes by default.  Reported by Alistair
1170   Buxton on #xapian-discuss.
1172 * When multiple words with the same stem are in the query string we now fully
1173   eliminate duplicates when showing term frequency information.
1175 Omega 1.4.6 (2018-07-02):
1177 general:
1179 * Fix generate_sample() (used by OmegaScript $truncate and omindex) to return
1180   an empty sample instead of throwing an exception when the requested sample
1181   size is less than the size of the truncation indicator string.  Patch from
1182   Addy.  Fixes https://trac.xapian.org/ticket/754 reported by Gaurav Arora.
1184 documentation:
1186 * Use terminology "value slot number" instead of "value number".
1188 * Stop talking about "probabilistic terms" and "probabilistic queries" - we've
1189   supported other families of weighting schemes since 1.3.2.
1191 indexers:
1193 * Check for the HTML5 doctype or legacy doctype declaration and use default
1194   charset UTF-8 if either is present.  Previously we always used ISO-8859-1,
1195   which is correct for older HTML versions, but not for HTML5.
1197 * omindex:
1199   + When running commands without going through the shell, emulate shell exit
1200     codes 127 (for command not found) and 126 (for other cases where we fail to
1201     run the command).  This means the "missing filter" handling should now work
1202     properly for such commands.  Noted by Gaurav Arora.
1204   + Index POD files despite minor formatting errors.  We now pass
1205     --errors=stderr to pod2text so that minor formatting errors don't prevent
1206     us from indexing a file.  (It may seem that --errors=none is a better
1207     option, but for podlators < 4.11 that results in an ERRATA section in the
1208     generated text version which we then end up indexing; 4.11 fixed that but
1209     we can't assume that's in use).  Reported by Gaurav Arora.
1211 * scriptindex:
1213   + Avoid some unnecessary copying of Action objects by making use of C++11
1214     features.
1216   + Consistently send errors to stderr - some were sent to stdout.
1217     Patch from Gaurav Arora.
1219   + Add new "hextobin" action.  Based on a patch from Gaurav Arora.
1221   + Warn about non-integer arg to hash.
1223   + Fix hash action without an argument, which was failing with an assertion.
1224     Based on a patch by Gaurav Arora: https://github.com/xapian/xapian/pull/189
1226   + Reject 'hash' with argument < 6.  The hashing truncates and then adds a
1227     6 character hash of the removed part, so can't produce a result shorter
1228     than 6 characters.  Patch from Gaurav Arora.
1230   + Look for alphanumerics when parsing index actions.  None of the current
1231     index actions contain digits, but we give more helpful error messages this
1232     way.
1234   + Deprecate allowing spaces around = in scripts.  This was never documented
1235     as supported, and leads to a missing argument quietly swallowing the next
1236     action rather than using an empty value or giving an error.  Reported by
1237     Gaurav Arora in https://github.com/xapian/xapian/pull/182
1239   + In boolean and unique actions, add a colon between prefix and term when
1240     the term starts with a colon.  This means the mapping is reversible, and
1241     matches what omega actually does in this case when it tries to reverse the
1242     mapping.  Thanks to Andy Chilton for pointing out this corner case.
1244   + Add parsedate and valuepacked actions.  Together these assist adding date
1245     values for sorting and date range filtering.  Based on a patch from Gaurav
1246     Arora.
1248   + Use DB_RETRY_LOCK to wait if the database is already in use rather than
1249     sleeping for a second and retrying.  On most platforms this means we make a
1250     blocking request for the lock, and even on platforms where that's not
1251     supported, we now sleep and retry inside libxapian, and without having to
1252     throw and catch an exception each time.
1254 omega:
1256 * $freq: Speed up some cases by avoiding throwing and catching an exception
1257   when we know the MSet has no term frequency information.
1259 * $sort: New OmegaScript command which does a string sort on an OmegaScript
1260   list, with u (unique) and r (reverse) options.
1262 * $cond: New OmegaScript conditional multi-way conditional.  Inspired by LISP's
1263   COND, this provides a neater way to write a cascade of $if checks.
1265 * $switch: New OmegaScript multi-way conditional which provides an even neater
1266   way to write a cascade of $if{$eq{X,VALUE1},$if{$eq{X,VALUE2},...}}.
1268 * $subdb and $subid: New commands which report the subdatabase name and the
1269   docid in that subdatabase.
1271 + $termprefix and $unprefix: New OmegaScript commands which expose the existing
1272   code inside omega for splitting up a term.
1274 * Use str() to convert time_t to string, which is simpler code and faster than
1275   using snprintf().
1277 testsuite:
1279 * omegatest: Fix message when faketime is not installed - we were misreporting
1280   this case as "faketime not working".
1282 * omegatest: Add feature tests of $map.
1284 * Add testcases for XML charset.  We already handle both default and specified
1285   charsets for XML, but we didn't have any testcases for it.
1287 build system:
1289 * configure: Fix potentially confusing messages suggesting snprintf was added
1290   in C90 - it was actually standardised in C99.
1292 * Improve handling of multitarget rule stamp files.  Clean them on "make
1293   maintainer-clean" and ship them so that --enable-maintainer-mode when
1294   building from a tarball doesn't needlessly rerun the multitarget rules.
1296 portability:
1298 * Check for EAGAIN as well as EINTR from select().  The Linux select(2) man
1299   page says: "Portable programs may wish to check for EAGAIN and loop, just as
1300   with EINTR" and that seems to be necessary for Cygwin at least.
1302 packaging:
1304 * Use https for tarball URLs in .spec files.  This provides protection against
1305   MITM attacks on people building packages using these spec files, and is also
1306   slightly more efficient as the http: URLs redirect to the https: versions
1307   anyway.
1309 Omega 1.4.5 (2017-10-16):
1311 documentation:
1313 * Direct users towards $set{flag_spelling_correction,true} rather than the
1314   deprecated $set{spelling,true} (which is slated for removal in 1.5.0).
1316 * Fix typo in docs.
1318 indexers:
1320 * omindex:
1322   + Check file size before calling libmagic to get the mime type, since
1323     reading the file size is a much cheaper check and we can skip the
1324     libmagic test if the file is empty or larger than the specified
1325     maximum size.  Patch from caiyulun.
1327 * scriptindex:
1329   + Reject index scripts with multiple "unique" actions.  We don't handle this
1330     case sensibly, and it doesn't seem like it really has a use, so better to
1331     give an error for people who do this inadvertently.
1333 omega:
1335 * New $seterror command to set the error message.  Implemented by Gaurav Arora.
1337 * Make $highlight more efficient.  Patch from Vivek Pal.
1339 templates:
1341 * query: Use $prettyurl for the URL shown at the end of each match (previously
1342   we only used it on the URL shown as a fallback when the document has no
1343   title).  Split off from changes by Vivek Pal in
1344   https://github.com/xapian/xapian/pull/161
1346 testsuite:
1348 * omegatest: Tell faketime to freeze the clock - previously the clock ran on
1349   from the specified fake time, and on a slow and/or heavily loaded machine a
1350   test taking more than a second might fail due to this.
1352 * Start adding feature tests for scriptindex (so far, checking that specifying
1353   multiple 'unique' actions results in an error).
1355 Omega 1.4.4 (2017-04-19):
1357 indexers:
1359 * omindex:
1361   + 1.4.3 added a new --sample option, but contrary to the documentation
1362     the default behaviour was to take the sample from the meta description
1363     (which was the hard-wired behaviour in 1.4.2 and earlier).  The default
1364     has now been changed to take the sample from the body.
1366   + Index .shtm, .xhtml and .xhtm as HTML by default - .shtm is another
1367     extension used for server-parsed HTML (in addition to the more common
1368     .shtml), and .xhtm and .xhtml are XHTML.
1370   + Fix fallback lookup for extension containing upper case.  User mappings
1371     worked, but built-in extension to MIME type mappings were effectively being
1372     ignored (because the result of the function call was not being checked).
1373     Bug introduced in 1.3.4.
1375   + Fix term-based date ranges, broken by changes in 1.4.2.  Found and
1376     diagnosed by Gaurav Arora.
1378   + Handle date range with start after end better - with term-based ranges,
1379     this used to generate a bogus filter, but now just generates Dlatest.
1381   + Use Y-term when range starts/ends at year start/end.  Previously we used 12
1382     M-terms for these cases.
1384   + Use full leap-year check when constructing term-based date ranges -
1385     previous code was good until 2100, but even then it would only result
1386     in an extra term being included for a non-existent February 29th in
1387     rare cases.
1389 omega:
1391 * New OmegaScript command $cgiparams which returns a list of the parameter
1392   names.
1394 * Handle tab in a CGI parameter name in the same way as space.  Mostly this is
1395   a way to avoid having tabs in CGI parameter names - they aren't useful, but
1396   if they could have tabs in we can't put CGI parameter names in a list.
1398 templates:
1400 * query: Fix highlighting of matching terms.  We were using both $snippet and
1401   $highlight, which results in double highlighting and HTML escaping, most
1402   noticeable by literal <strong> and </strong> appearing around matching terms
1403   in the rendered HTML snippet.  Reported by Mark Thomas on xapian-discuss.
1405 build system:
1407 * If gen-mimemap failed after creating mimemap.h, the rule wouldn't get rerun.
1409 Omega 1.4.3 (2017-01-25):
1411 indexers:
1413 * omindex:
1415   + Add support for indexing vCard files if Perl and its Text::vCard module
1416     are available.
1418   + Recognise application/x-rpm as alternative type since libmagic reports this
1419     rather than application/x-redhat-package-manager.
1421   + Use official MIME type application/vnd.debian.binary-package for debian
1422     packages.  We used to map .deb and .udeb to application/x-debian-package,
1423     but in 2014 (after we added that support for .deb) an official type was
1424     registered with IANA.  We now map extensions .deb and .udeb to the official
1425     type, but the unofficial type is still recognised (older versions of
1426     libmagic probably report it, and users may be mapping to it).
1428   + Handle PHP as MIME type text/x-php.  The main difference this makes is that
1429     PHP files which don't have extension '.php' (e.g. .phtml, .phps, .php5,
1430     .ph4, etc) get identified by libmagic as text/x-php and will now be indexed.
1431     It also means that the user can now more easily configure different filters
1432     for HTML and PHP.
1434   + Don't use meta description as sample by default.  Now we have dynamic
1435     snippets (via $snippet), the body text is a better default.  Also generated
1436     HTML sometimes has unhelpful content in the meta description.  To get the
1437     previous behaviour, use the new omindex command line option:
1438     --sample=description
1440 Omega 1.4.2 (2016-12-26):
1442 documentation:
1444 * Replace auto-generated list of the supported MIME types with an
1445   auto-generated table showing the extensions that are mapped to each MIME type
1446   by default.  Partly addresses #569, reported by catkin.
1448 indexers:
1450 * omindex: Add support for indexing markdown files (extension .md or .markdown,
1451   mime-type text/markdown, using "markdown" to convert to HTML).
1453 testsuite:
1455 * Add support for "make installcheck" to run tests against installed version.
1457 build system:
1459 * configure: Fail with clear error with xapian-core < 1.4.0.
1461 portability:
1463 * Fix GCC -Wimplicit-fallthrough warning.
1465 * Add missing <ctime> for time_t.
1467 * Avoid snprintf for formatting fixed-width integers - it results in warnings
1468   about possible output truncation with GCC7 (which aren't actually possible
1469   due to limited input range) and it's a bit heavyweight for this job anyway.
1471 Omega 1.4.1 (2016-10-21):
1473 documentation:
1475 * Document bug in how $filters encodes DOCIDORDER=A.
1477 * Suggest DOCIDORDER=X for DONT_CARE.
1479 * Correct mentions of C++ API method MSet::get_snippet() to MSet::snippet().
1481 * Fix typo in Omega 1.4.0 NEWS entry.  Patch from James Aylett.
1483 indexers:
1485 * omindex: Also index leafname with _ and & replaced by spaces.  Literal spaces
1486   are often avoided in filenames, and "hello_world.txt" ought to be searchable
1487   for via "hello" and "world".  Partly addresses #618, reported by Julien
1488   Pfefferkorn.
1490 omega:
1492 * Add support for sorting by more than one value - e.g. SORT=+1,-2
1494 * Add $msizelower and $msizeupper which provide access to the lower and upper
1495   bounds on the number of matches.
1497 * Add support for $set{weighting,coord}.
1499 * Add weightingpurefilter option.  Normally a query consisting only of filter
1500   terms won't have relevance weights calculated.  This new option allows you to
1501   specify a weighting scheme to use for such queries, with the same values
1502   supported as for the existing weighting option.  For example,
1503   $set{weightingpurefilter,coord} will weight such queries by how many filter
1504   terms match each document.
1506 * $filters now includes DATEVALUE, which means we'll force the first page when
1507   reloading or changing page starting from existing URLs upon upgrade to 1.4.1,
1508   but the exact same existing URL could be for a search without the date filter
1509   where we want to force the first page, so there's an inherent ambiguity
1510   there.  Forcing first page in this case seems the least problematic
1511   side-effect.  Omission noted by Gaurav Arora.
1513 testsuite:
1515 * Add feature test for boolprefix and prefix maps.
1517 * Add more feature tests for $filters.
1519 build system:
1521 * GCC 4.7 is now enforced as the minimum version.
1523 * Drop unused configure check for symbol visibility
1525 * Drop compiler options that are no longer useful:
1526   + -fshow-column is the default in all GCC versions we now support
1527     (checked as GCC 4.6).
1528   + -Wno-long-long is no longer necessary now that we require C++11 where
1529     "long long" is a standard type.
1531 portability:
1533 * Fix build on platforms which don't provide timegm(), such as Cygwin.
1534   Reported on xapian-discuss by John Bankert.
1536 Omega 1.4.0 (2016-06-24):
1538 documentation:
1540 * Clarify $allterms and $terms documentation.  Make it clearer how they differ,
1541   and document that $allterms without a parameter list gives all terms indexing
1542   the current hit.  Noted by Andy Chilton.
1544 Omega 1.3.7 (2016-06-01):
1546 indexers:
1548 * Make named entity look-up (e.g. &eacute; -> 233) use the same keyword-lookup
1549   table approach we already use for HTML tags and built-in MIME content-types,
1550   rather than a std::map, which makes it faster while using less memory.
1552 Omega 1.3.6 (2016-05-09):
1554 documentation:
1556 * Fix overview.rst processing in VPATH build.  Our workaround for lack of an
1557   include path in docutils was only handling the first include in the file.
1559 omega:
1561 * Implement $match command for omegascript.  Patch from Richhiey Thomas.
1563 templates:
1565 * Lower case all HTML tags, attributes and values; explicitly close <option>
1566   tags.  Patches from Vivek Pal and Nirmal Singhania.
1568 * Migrate Omega Templates to HTML5.  Patch from Nirmal Sighania.
1570 * templates/query: Remove stray double quote from generated URL for spelling
1571   suggestion when THRESHOLD is set.  Patch from Nirmal Singhania.
1573 * templates/opensearch: Change response feeds to support OpenSearch 1.1.
1574   Patch from Nirmal Singhania.
1576 testsuite:
1578 * Update omegatest - the order of subqueries has changed in some cases, due
1579   to the "grouping" changes in the C++ API.
1581 build system:
1583 * Drop workaround for old git master before 1.3.2
1585 Omega 1.3.5 (2016-04-01):
1587 This release includes all changes from 1.2.23 which are relevant.
1589 omega:
1591 * Add optional prefix argument to $terms.
1593 * $snippet now uses MSet::snippet() instead of the Snipper class.
1595 * Add $contains{STRING1,STRING2}.  Contributed by Ayush Gupta.
1597 * Add support for negated boolean filter terms, specified by CGI parameter "N".
1599 * Support a direction prefix on SORT: '+' for ascending, '-' for descending.
1600   SORTREVERSE set to non-0 now flips the direction.  Fixes #697, reported by
1601   Andy Chilton.
1603 build system:
1605 * Need to AC_SUBST probed value of ZLIB_LIBS.  Noted by Paul Wise.
1607 portability:
1609 * omegatest; Test faketime actually works, and if it doesn't work skip
1610   testcases which use it.  On OS X 10.11, faketime from homebrew doesn't seem
1611   to work, probably due to the new "System Integrity Protection".  Fixes part
1612   of #707, reported by James Aylett.
1614 Omega 1.3.4 (2016-01-01):
1616 This release includes all changes from 1.2.22 which are relevant.
1618 documentation:
1620 * The lists of recognised MIME types and of ignored extensions are now
1621   generated along with the corresponding source code from a single master list.
1622   Partly addresses #569, reported by Charles Atkinson.
1624 * Note when $json and $jsonarray were added.
1626 indexers:
1628 * omindex:
1630   + Avoid using the shell to run most external commands as it's unnecessary
1631     overhead.  For the built-in filters, the only cases which now use a shell
1632     are where we run two unzip commands.  For user-specified commands, a simple
1633     and slightly conservative test is used, which should avoid a shell in most
1634     common cases where it isn't needed.  Notably, environment variables set
1635     before the command are handled.
1637   + Track files which couldn't be indexed in the user metadata and skip them by
1638     default on subsequent runs to avoid the costs of repeatedly running a
1639     filter on a file it can't handle.  Run omindex with --retry-failed to retry
1640     such files.
1642   + Overhaul the "per-site" terms:
1643     - 'H' prefix is hostname as before, except that if the term would be > 240
1644       bytes (unlikely but possible) the end is hashed is the same way 'U'
1645       prefix terms are.
1646     - 'P' terms are now added for every directory level, not just the start
1647       URL's path.
1648     - A new 'J' prefix term is added with the start URL (less any trailing
1649       '/'), which means all files indexed from a particular "site" are now
1650       indexed by one term.  See #376.
1652   + Add 'skip' pseudo-mimetype which extensions can be mapped to, and they will
1653     then be reported and skipped (to complement the existing 'ignore'
1654     pseudo-mimetype which causes files with the specified extension to be
1655     quietly ignored).
1657   + Treat a command of 'true' specially as meaning make the text extraction a
1658     no-op (as actually running /bin/true effectively would).  This provides a
1659     way to index some file types by only meta-data.  Fixes #519, reported by
1660     Brian Burton.
1662   + Add support for wildcard mimetypes */* and *.  Combined with filter command
1663     ``true`` for indexing by meta-data only, you can specify a fall back case
1664     of indexing by meta-data only using ``--filter '*:true'``.  From a
1665     suggestion by Brian Burton on xapian-discuss.
1667   + Index message/rfc822 and message/news.  These are individually saved email
1668     messages and news articles.
1670   + Index archived web page formats MAFF and MHTML.
1672   + Handle .xla, yet another XL extension.
1674   + Handle metadata in LibreOffice HTML export (dcterms.subject,
1675     dcterms.description, dcterms.creator and dcterms.contributor).
1677   + Use zlib's gzopen() instead of invoking "gzip -dc" for compressed Abiword
1678     documents.
1680 omega:
1682 * Add options argument to $transform.
1684 * Cache compiled regexps used in $transform.
1686 * Add $ord OmegaScript command which returns the Unicode codepoint for the
1687   first character of a UTF-8 string.
1689 * Add $chr OmegaScript command which returns the UTF-8 string for given Unicode
1690   codepoint.
1692 * Add $csv OmegaScript command which escapes a string for use as a field in a
1693   CSV file ("always quote" mode inspired by patch from Gaurav Arora.)
1695 * New $filters encoding which avoids collisions.  We also compare CGI parameter
1696   xFILTERS to what $filters would have returned in previous releases, so that
1697   on upgrades old format serialised filters are handled correctly.
1699 * Fix $jsonarray not to prepend ']' to the first array element.
1701 * Skip weighting scheme setup for a pure date range query - it won't be
1702   weighted anyway, so we can avoid having to parse weighting scheme parameters,
1703   etc.
1705 * Use value ranges when date range filtering by value.  Should be more
1706   efficient than a MatchDecider, and will automatically take advantage of any
1707   future value range optimisations in xapian-core.
1709 * Add default_db and default_template config options.  These allow the default
1710   template and default database name to be set via the config file, rather than
1711   being stuck with the respective defaults of "default" and "query".  Fixes
1712   #310, reported by Marco Hennigs.
1714 * Add support for non-exclusive filters.  Fixes #234, reported by Thomas
1715   Viehmann.
1717 testsuite:
1719 * Add start of testsuite for omega CGI.
1721 build system:
1723 * configure script now defaults to looking for xapian-config-1.3.  This is now
1724   automatically done for development series (odd middle component of the
1725   version number), but not for stable series (even middle component).  Fixes
1726   #695, reported by Jorge C. Leitão
1728 * Don't pointlessly link omega binary with libmagic (as we have since 1.3.1).
1730 portability:
1732 * Fix "make check" compilation failure on platforms without timegm().
1734 Omega 1.3.3 (2015-06-01):
1736 This release includes all changes from 1.2.20-1.2.21 which are relevant.
1738 documentation:
1740 * INSTALL: IRIX is past EOL so drop information about IRIX make.
1742 indexers:
1744 * omindex:
1746   + Add support for %f in command passed to --filter to allow specifying
1747     commands where the input file is not the final argument.  Fixed #570,
1748     reported by Charles Atkinson.
1750   + Allow --filter to handle commands which produce output in a temporary file
1751     rather than on stdout.
1753   + Allow --filter to specify the character set of the output the filter
1754     produces.
1756   + Handle application/vnd.ms-excel, text/x-perl and application/x-dvi via
1757     default --filter settings instead of hardcoded cases (now possible thanks
1758     to the new abilities that --filter has).
1760   + Add support for specifying a MIME subtype of '*' in --filter arguments.
1762   + Add -track-ctime option to allow omindex to pick up changes to file
1763     ownership and permissions.
1765   + Index terms from the leafname with an 'F' prefix, rather than treating them
1766     as more body text.  (Fixes #633, reported by Emmanuel Garette)
1768 omega:
1770 * Fix handling of multiple P.<prefix> fields - previously only the first seen
1771   was used.  These fields are also now taken into account when deciding if the
1772   query has changed.  $query now returns an OmegaScript list with one entry for
1773   each CGI parameter passed.
1775 templates:
1777 * templates/query: Fix setting setting of prefix map for P - in 1.3.2, this
1778   would failed to also search in the subject.  Now it also searches in the
1779   subject and topic.
1781 build system:
1783 * configure: Fix typo in message: 'libmagic-devl' -> 'libmagic-devel'
1785 portability:
1787 * Require a compiler with good C++11 support, like xapian-core now does.
1789 * Now we require C++11, just include <cstdint> for uint32_t.
1791 * Link omindex-list with our (GNU) getopt for platforms which don't use GNU libc.
1792   Thanks to James Aylett
1794 * Add timegm.cc to scriptindex_SOURCES to fix build on platforms which don't
1795   provide timegm().
1797 * Suppress bogus uninitialised variable warning with -Os under GCC 4.7.2.
1799 packaging:
1801 Omega 1.3.2 (2014-11-24):
1803 This release includes all changes from 1.2.16-1.2.19 which are relevant.
1805 documentation:
1807 * docs/overview.rst: Document built-in list of stopwords.
1809 * docs/termprefixes.rst: Update for renaming of 'brass' backend to 'glass'.
1811 indexers:
1813 * omindex:
1815   + The starting URL wasn't previously URL encoded.  In 1.2.18, a minimally
1816     intrusive fix was implemented.  In 1.3.2, we now encode the starting URL
1817     as we do for the rest of the filename.
1819   + Don't assume .doc is application/msword but let libmagic decide, since .doc
1820     files may actually be RTF, and sometimes people use .doc for plain-text
1821     documentation.
1823   + Add support for indexing 'topic' and 'created date' meta-data for
1824     OpenDocument format and HTML.
1826   + Index "topic" for PDF documents.
1828   + Commit changes and exit, rather than skipping the current file on most
1829     unexpected errors reading directories or initialising libmagic - otherwise
1830     we can end up deleting a lot of database entries on errors like EHOSTDOWN
1831     when indexing network mounts.
1833   + Add --opendir-sleep=SECS option to allow working around problems with
1834     indexing files on Microsoft DFS shares.
1836   + If we get ENOTDIR trying to index a file, skip it quietly (unless in
1837     verbose mode) as we already do if we get ENOENT, since ENOTDIR is what we
1838     get if the file and the directory it was in got removed between us getting
1839     the filename and trying to open it.
1841   + Handle ENOENT, ENOTDIR and EACCES from readdir().
1843   + If we've already opened the file (as we often will have if using a modern
1844     libmagic with magic_descriptor() available), then use fstat() on that fd
1845     rather than stat()/lstat() on the pathname.
1847   + Pass error message string and errno value in ReadError exceptions.
1849   + Report strerror(errno) if we can't read a file.
1851   + Filtering via text/html now handles HTML documents which specify a charset.
1853   + Add support for indexing Microsoft Publisher files using pub2xhtml.
1855   + Restrict the length of what we consider to be an extension, currently to 7
1856     characters or whatever the longest extension in the mime_map is if it is
1857     longer.
1859   + Avoid '//' in temporary filenames (cosmetic only).
1861 * omindex-list: New tool to list URLs of all the documents in a database (or
1862   list of databases) indexed by omindex.
1864 omega:
1866 * Allow setting query expansion scheme to "bo1".
1868 * Make the $json and $jsonarray force the text to be valid UTF-8, since
1869   otherwise the output isn't valid JSON.
1871 * Check parameters to $set{weighting,bm25 ...} and $set{weighting,trad ...}
1872   converted OK.  Based on patch from Aarsh Shah.
1874 * Add support to $set{weighting,...} for bb2, dlh, dph, ifb2, ineb2, inl2, lm,
1875   pl2 when we're built against a xapian-core which is new enough to have these
1876   schemes.
1878 * Add $snippet to generate a snippet of text tailored to the search.
1880 build system:
1882 * configure: Enable GCC's -Woverloaded-virtual warning.
1884 portability:
1886 * Ship common/safewinsock2.h, needed under mingw.
1888 Omega 1.3.1 (2013-05-03):
1890 This release includes all changes from 1.2.10-1.2.15 which are relevant.
1892 documentation:
1894 * INSTALL,configure: Provide hints as to what package to install for magic.h.
1896 indexers:
1898 * The HTML parser now explicitly handles <APPLET>, <OBJECT> and <TR>.
1900 * Use a generated compact and efficient table to convert HTML tag names
1901   to enum codes - this is both faster and smaller than the approach we were
1902   using, with the benefit that the table is auto-generated.
1904 * Always use our built-in conversion code for the character sets it can handle
1905   (previously we'd use iconv if available; now we only use iconv for other
1906   character sets).  This gives us more consistent results, and in particular
1907   means we now handle BOMs better (at least when using GNU iconv).
1909 * A lot of data labelled as "iso-8859-1" is actually "windows-1252".  The two
1910   only differ in characters which are control characters in iso-8859-1, so
1911   assume the latter when we see the former.
1913 * omindex:
1915   + Extend --filter to handle commands which produce HTML on stdout.
1917   + Don't report an error if a file is deleted (or renamed) between us reading
1918     the directory entry for it and trying to read the file itself by default.
1919     In --verbose mode, the situation is still reported, but now with a
1920     specific message.
1922   + If omindex receives any of the signals SIGHUP, SIGINT, SIGQUIT or SIGTERM,
1923     then kill any active external filter child process, then handle the signal
1924     as we did before.  If setpgid() is available, put each external filter in
1925     its own process group and kill the whole process group when we get a
1926     signal.
1928   + Use magic_descriptor() if the version of libmagic we're building against
1929     is new enough to have it.  This eliminates an extra opening of a file
1930     being indexed in certain cases.
1932   + Use rst2html to handle .rst and .rest files.
1934 omega:
1936 * Add new $json and $jsonarray OmegaScript commands to support producing JSON
1937   output.
1939 * Add $truncate command which truncates a string after a word.
1941 * Add support for $set{weighting,tfidf} to allow the new TfIdfWeight weighting
1942   scheme to be used.
1944 build system:
1946 * configure: Now looks for libmagic in MAGIC_PREFIX, to allow building with
1947   libmagic installed in a non-standard location.
1949 * Remove support for 'configure --enable-quiet', 'make QUIET=' and 'make
1950   QUIET=y' - automake now supports 'configure --enable-silent-rules', 'make
1951   V=1' and 'make V=0' which are broadly equivalent and more standard.
1953 portability:
1955 * tmpdir.cc: Add safeunistd.h for rmdir, required by GCC 4.7 (reported by
1956   Gaurav Arora).
1958 Omega 1.3.0 (2012-03-14):
1960 general:
1962 * Make libmagic a required dependency.
1964 documentation:
1966 * docs/termprefixes.html: Document how to map a user prefix to multiple term
1967   prefixes.
1969 * docs/overview.html: Improve documentation of htdig_noindex.
1971 indexers:
1973 * omindex:
1975   + Index title with an 'S' prefix rather than no prefix.
1977   + If the document with the highest existing docid before the run was updated,
1978     we were reporting it as "added", but now we correctly report it as
1979     "updated".
1981   + Catch and report std::exception explicitly, so failing to allocate memory
1982     is no longer reported as "Unknown exception".
1984 * scriptindex:
1986   + Remove special error handling case noting that index=nopos was replaced
1987     with indexnopos - this was removed in 1.1.0 so there's been enough time to
1988     upgrade.
1990 omega:
1992 + DEFAULTOP now defaults to AND rather than OR, since that matches what pretty
1993   much every search engine does these days.  Closes ticket#512.
1995 * Allow mapping a query string prefix to more than one term prefix (which
1996   xapian-core has supported since 1.0.4).
1998 * Add support for search inputs for multiple probabilistic prefixes, with
1999   support for per-prefix stemmers.
2001 * Drop legacy support for handling '.' separated terms in xP - that changed in
2002   Omega 0.9.7, more than 5 years ago now.
2004 * Remove support for OLDP CGI parameter which was superseded by xP
2005   approximately a decade ago, and isn't even documented!
2007 * Drop special handling for R-prefixed terms in $prettyterm - we stopped
2008   generating these in Xapian 1.0.
2010 templates:
2012 * templates/query:
2014   + We now map unprefixed queries to include S-prefixed terms to match the
2015     change in omindex to prefixing terms from the title with S.  You may want
2016     to make the same update to your own templates.
2018   + Set up prefixes for 'author:' and 'title:'.
2020 packaging:
2022 * xapian-omega.spec: We're ABI compatible within a release series so make
2023   dependency on xapian-core-libs >= rather than =.
2025 Omega 1.2.23 (2016-03-28):
2027 documentation:
2029 * Update links to Xapian website and trac to use https, which is now supported,
2030   thanks to James Aylett.
2032 indexers:
2034 * Fix HTML/XML entity decoding to be O(n) not O(n²) - processing HTML/XML with
2035   a lot of entities is now much faster.
2037 templates:
2039 * Remove unused country code to name maps.  These were intended as examples,
2040   but they aren't very useful as such, and really just bloat the templates
2041   needlessly.
2043 Omega 1.2.22 (2015-12-29):
2045 documentation:
2047 * Stop maintaining ChangeLog files.  They make merging patches harder, and stop
2048   'git cherry-pick' from working as it should.  The git repo history should be
2049   sufficient for complying with GPLv2 2(a).
2051 * Clarify help text for omindex --mime-type option.
2053 * docs/omegascript.rst:
2055   + Fix documentation of $last to say it's the MSet index *one beyond* the end
2056     of the current page.  Reported by Andrew Chilton.
2058   + Clarify that $split and $substr work in bytes.  Previously we said
2059     "characters" which could be taken as meaning they work with UTF-8
2060     characters.
2062   + Update documentation for $filters - it was missing these CGI parameters
2063     from the list of those serialised: COLLAPSE, DOCIDORDER, SORT, SORTREVERSE,
2064     SORTAFTER
2066   + Explicitly note user can use $setmap to create their own maps.
2068 * docs/overview.rst:
2070   + SVG extraction is built-in too.
2072   + Expand paragraph about command `false`.  Note the versions where explicit
2073     support was added, and that this will also work with any version on Unix,
2074     where `false` is a command.
2076   + Document `cdb_dir`.
2078 * docs/cgiparams.rst: Document behaviour if xDB is not set.
2080 * Change "characters" to "bytes" in a few places to clarify that we don't mean
2081   Unicode code points.
2083 indexers:
2085 * omindex:
2087   + Add '--title-size' option.
2089   + Handle .oft the same way as .msg - it's some sort of template email, and
2090     has essentially the same format.
2092 omega:
2094 * Make $querydescription ensure the match has been run, so that it includes
2095   filters.
2097 * Avoid $allterms, $cgilist, $filterterms and $terms being O(n²) in the number
2098   of items in the returned list.
2100 * If xFILTERS is not set, don't force the first page as that's unhelpful if
2101   someone fails to set it in their template.
2103 * When environment variable SERVER_PROTOCOL is set to INCLUDED (as it is when
2104   we're being included in a page), we already suppress the HTTP headers, but
2105   now we suppress the blank line after the header too.
2107 * Support option flag_cjk_ngram if built against xapian-core >= 1.2.22.
2109 testsuite:
2111 * Add test coverage for parsing of HTML entities.
2113 build system:
2115 * Fix error reporting if PCRE isn't installed. Fixes #693, reported by lhz7370.
2117 portability:
2119 * Avoid warning when building with glibc >= 2.21.
2121 * Don't provide our own implementation of sleep() under __WIN32__ if there
2122   already is one - mingw provides one, and in some situations it seems to clash
2123   with ours.  Reported to xapian-discuss by John Alveris.
2125 * Stop trying to use O_STREAMING - the patch to implement it was never merged
2126   into the Linux kernel, and I can't find any evidence that other platforms
2127   implement it.  The constant value O_STREAMING used now seems to be used for
2128   the part of O_SYNC which isn't covered by O_DSYNC, which seems likely to hurt
2129   performance if anything.
2131 Omega 1.2.21 (2015-05-20):
2133 documentation:
2135 * docs/overview.rst: Document 'E' prefixed boolean terms for filtering by
2136   extension (see #668, reported by bramvdh).
2138 * docs/encodings.rst: Add a document about character encoding, as suggested by
2139   James Aylett in #550.
2141 indexers:
2143 * omindex:
2145   + outlookmsg2html: Fix handling of message/rfc822 subparts.
2147 omega:
2149 * $prettyurl now decodes valid UTF-8 sequences, and some additional ASCII
2150   characters in the path part: []@!$&'()*+.;= (Fixes #550 and #644, reported by
2151   catkin and terencz.)
2153 * $prettyurl now leaves the query and fragment parts of the URL alone and won't
2154   decode an escaped "/" (omindex doesn't create URLs with any of these, so we
2155   only risk breaking other URLs which have them).
2157 * Drop compilation date and time from output when run from the command line -
2158   they prevent reproducible builds and the version number is sufficient
2159   information.
2161 templates:
2163 * templates/query: When listing matching terms, don't make the commas italic.
2165 * templates/query: Eliminate blank line before <html>.
2167 * templates/xml: Add XML declaration.
2169 * templates/godmode: Specify charset utf-8 in the content-type.
2171 build system:
2173 * Link test programs with libtool's '-no-install' or '-no-fast-install', like
2174   we already do in xapian-core, which means that libtool doesn't need to
2175   generate shell script wrappers for them on most platforms.
2177 portability:
2179 * Add spaces between literal strings and macros which expand to literal strings
2180   for C++11 compatibility.
2182 * Remove 'register' as it's deprecated and clang spits out warnings because of
2183   that.  Any modern compiler likely just ignores it as an optimisation hint
2184   anyway.
2186 Omega 1.2.20 (2015-03-04):
2188 documentation:
2190 * docs/cgiparams.rst: Improve wording of docs for SORT parameter.
2192 * docs/omegascript.rst: Update documentation references to DATE1, DATE2, and
2193   DAYSMINUS which were renamed in 0.6.x and the compatibility aliases removed
2194   in 1.0.0.
2196 indexers:
2198 * omindex:
2200   + Ignore extensions .msi and .msp, which are Microsoft installer files, but
2201     which libmagic sometimes incorrectly identifies as application/msword.
2203   + Interpret a command of "false" in "--filter" as meaning to ignore files
2204     with that MIME type.
2206 omega:
2208 * Handle CGI parameter [=0 as [=1.
2210 templates:
2212 * templates/xml: Update handling of DATE1, DATE2 and DAYSMINUS which were
2213   renamed in 0.6.x and the compatibility aliases removed in 1.0.0.
2215 build system:
2217 * configure: Use pkg-config in preference to determine flags needed to
2218   compile and link with PCRE, as this will just work when cross-compiling
2219   (at least under MXE).
2221 * configure: Define MINGW_HAS_SECURE_API under mingw to get _putenv_s()
2222   declared in stdlib.h.
2224 * Enable automake option 'subdir-objects' to avoid warning from newer automake.
2226 portability:
2228 * Avoid doing link tests with libmagic in configure as they fail on mingw due
2229   to not automatically picking up libraries which libmagic itself depends on.
2231 Omega 1.2.19 (2014-10-21):
2233 documentation:
2235 * docs/overview.rst: Note that pdftotext is part of poppler as well as xpdf.
2236   (Noted by Paul Wise)
2238 Omega 1.2.18 (2014-06-22):
2240 indexers:
2242 * omindex:
2244   + Work around libmagic returning a MIME content-type of "Composite Document
2245     File V2 Document[...]" or "application/CDFV2-corrupt" by returning a more
2246     suitable filetype based on looking at the file's extension.
2248   + The starting URL wasn't previously URL encoded.  In 1.3.2, this will be
2249     fixed by URL encoding it as we do for the rest of the path, for the 1.2
2250     branch we only URL encode it if it contains a character <= 31 or at least
2251     one of '#', '%', ':' or '?'.  This avoids a one-off reindex of every
2252     document in the database in cases which work OK in practice.
2254   + When we skip a file because it exceeds the configured size limit, include
2255     that size limit in the message.
2257 omega:
2259 * Add support for setting the query expansion scheme to use.
2261 portability:
2263 * Don't compile in unixperm.cc - it isn't currently used, and it fails to build
2264   with mingw.  (fixes #635, reported by Alexis Denis)
2266 * Fix warning when built with GCC 4.7.2 using -Os.
2268 * Removed unused inline function, fixing compiler warning.
2270 Omega 1.2.17 (2014-01-29):
2272 documentation:
2274 * docs/overview.html: Add Abiword as an example use of --filter, based on patch
2275   from Frank J Bruzzaniti (fixes#383).
2277 portability:
2279 * Fix "no previous declaration" warning on platforms which don't have
2280   mkdtemp().
2282 Omega 1.2.16 (2013-12-04):
2284 indexers:
2286 * omindex:
2288   + Fix off-by-one when finding documents to delete which would sometimes cause
2289     omindex to fail to delete documents from the database when they weren't
2290     refound during an index update.
2292   + Decode dates in xlsx files.
2294   + Ignore extensions 'adm', 'cur', and 'ico' by default.
2296   + Group-readable files which are owner-readable but not world-readable should
2297     still get a "readable by owner" term added.  Reported by Emmanuel Garette.
2299 build system:
2301 * Compress source tarballs with xz instead of gzip.
2303 * configure: Sync compiler warning flag machinery against xapian-core.  The
2304   changes are special handling for clang, passing -fshow-column where
2305   supported, and handling for new warning flags in GCC 4.6 and 4.7.
2307 Omega 1.2.15 (2013-04-16):
2309 omega:
2311 * Don't pointlessly link utf8convert.o into the omega CGI.
2313 Omega 1.2.14 (2013-03-14):
2315 indexers:
2317 * omindex:
2319   + Correct "max" -> "min" when reserving space for shared strings in .xlsx
2320     files.  This just means we now reserve a more appropriate amount of space
2321     to start with.
2323   + Ignore .com files by default.
2325 Omega 1.2.13 (2013-01-09):
2327 indexers:
2329 * omindex:
2331   + Extracting text using external filters now works for filenames containing a
2332     newline character - previously the newline got lost during escaping for the
2333     shell.
2335   + Fix segfault when -F option without a ':' is passed.
2337   + Skip a file if we get a read error while calculating the MD5 checksum (used
2338     for duplicate detection) - previously we used a checksum of the file up to
2339     that point.
2341   + Avoid rereading SVG and Atom files when we calculate their MD5 checksums.
2343   + Improvement --help output and man page, most notably:
2345     - Say explicitly that --sample-size accepts the same formats as --max-size.
2347     - Note default size limit on files to index is unlimited.
2349   + When generating a sample for a CSV file, limit the size we pre-allocate to
2350     the CSV file size if that's smaller than the requested sample size, in case
2351     the user sets that limit very high.
2353 omega:
2355 * Fix to decode %-encoded character at the end of the query string.
2357 build system:
2359 * INCLUDES is now deprecated in automake, so use AM_CPPFLAGS instead.
2361 Omega 1.2.12 (2012-06-27):
2363 No changes since 1.2.11 except to bump the version - this release was made to
2364 fix an incorrect library version information update in xapian-core 1.2.11.
2366 Omega 1.2.11 (2012-06-26):
2368 indexers:
2370 * Change HTML parser's handling of multiple <body> tags and of text outside of
2371   <body> to match the behaviour of modern web browsers.  (ticket#599)
2373 * omindex:
2375   + Add command line option to control the size of the document sample stored.
2376     Patch from Mihai Bivol.
2378   + Rework .xlsx parsing to substitute the shared strings into the positions
2379     they are used in, so that the sample actually matches what appears in the
2380     spreadsheet, and to index calculated cell contents.
2382   + Improve handling of headers and footers in OpenDocument documents.
2384   + pdftotext outputs a formfeed between each page, which messes up our "empty
2385     body" check, so trim any trailing formfeeds before this check.
2387 build system:
2389 * Don't explicitly link indirect shared library dependencies on FreeBSD,
2390   OpenBSD, and Solaris.
2392 Omega 1.2.10 (2012-05-09):
2394 indexers:
2396 * Add support for CDATA to HTML/XML parser.
2398 * omindex:
2400   + Add --max-size option, based on patch from ndaley in ticket#587.
2402   + Add support for atom feed files, patch from Mihai Bivol in ticket#595.
2404   + If the document with the highest existing docid before the run was updated,
2405     we were reporting it as "added", but now we correctly report it as
2406     "updated".  (Backported from 1.3.0).
2408   + Catch and report std::exception explicitly, so failing to allocate memory
2409     is no longer reported as "Unknown exception".  (Backported from 1.3.0).
2411 * scriptindex:
2413 portability:
2415 * Fix to build with GCC 4.7 by adding cast to rlim_t to fix error about C++11
2416   compatibility (reported by Gaurav Arora).
2418 Omega 1.2.9 (2012-03-08):
2420 documentation:
2422 * docs/overview.html:
2424   + Document that libmagic is used to determine the MIME type if the extension
2425     isn't known.  Partly addresses ticket#569.
2427   + We now limit time as well as CPU and memory for external filters.
2429 indexers:
2431 * Our HTML parser now ignores sections bracketed by <!--UdmComment--> and
2432   <!--/UdmComment-->, like we already do for <!--htdig_noindex-->.
2434 * omindex: Add more extensions to the default ignore list: bin dat db fon jar
2435   lnk pyc pyd pyo sqlite sqlite3 sqlite-journal tmp ttf
2437 Omega 1.2.8 (2011-12-13):
2439 documentation:
2441 * scriptindex.cc: Add link to http://xapian.org/docs/omega/scriptindex.html to
2442   --help output (and so also to the man page which is generated from this).
2444 * omegascript.html: Add note to discourage use of percentage scores.
2446 indexers:
2448 * omindex:
2450   + If we don't get any data from an external filter for 5 minutes, give up -
2451     it has probably ended up blocked indefinitely.
2453   + Improve --help output (and man page which is generated from it).  Closes
2454     bug#572.
2456 * scriptindex:
2458   + If no rules are found in the index script, report an error and give up -
2459     this is inevitably the result of a mistake, and adding empty documents to
2460     the database isn't helpful.
2462 omega:
2464   + Add new $prettyurl{} command which undoes RFC3986 URL escaping which
2465     doesn't affect semantics in practice.  Partly addresses ticket#550.
2467   + Replace URL decoder with new implementation which handles various corner
2468     cases better.  Fixes bug#578.
2470   + If CGI parameter P has trailing spaces, we now remove them all rather than
2471     leaving one.
2473 templates:
2475 * templates/query: HTML escape topterms.
2477 * templates/godmode: HTML escape the contents of document values.
2479 * templates/query: Don't show the percentage score in the default template.
2481 testsuite:
2483 * Add new urlenctest unit test of URL encoding and decoding.
2485 portability:
2487 * configure: Sync changes from xapian-core: Don't pass -Wshadow for GCC < 4.1;
2488   don't pass -Wstrict-null-sentinel for GCC 4.0.x; only enable symbol
2489   visibility on platforms where it is supported.
2491 packaging:
2493 * xapian-omega.spec: Package outlookmsg2html helper.
2495 Omega 1.2.7 (2011-08-10):
2497 documentation:
2499 * docs/termprefixes.html: Document how to map a user prefix to multiple term
2500   prefixes.
2502 * docs/overview.html: Improve documentation of htdig_noindex.
2504 omega:
2506 * Improve $version output from "Xapian - xapian-omega 1.2.7" to "xapian-omega
2507   1.2.7".
2509 packaging:
2511 * xapian-omega.spec: We're ABI compatible within a release series so make
2512   dependency on xapian-core-libs >= rather than =.
2514 Omega 1.2.6 (2011-06-12):
2516 documentation:
2518 * docs/omegascript.html: Correct the documentation of the colours used by
2519   $highlight{}.
2521 * docs/overview.html: Add using unoconv as more complex example of using
2522   --filter (ticket#324).
2524 templates:
2526 * templates/query:
2528   + Make search query input type=search.
2530   + Autofocus the search query input (using HTML autofocus attribute with
2531     Javascript fallback for older browsers).  (ticket#544)
2533 portability:
2535 * Fix a compiler warning.
2537 Omega 1.2.5 (2011-04-04):
2539 documentation:
2541 * Add index page which links to all the other documentation pages.
2543 * INSTALL: Copy new Multi-Arch section from xapian-core/INSTALL.  Replace VPATH
2544   section with better equivalent from Xapian-core/INSTALL.
2546 * docs/omegascript.html: Minor improvements.
2548 indexers:
2550 * The HTML parser no longer uses an exception to signify it has finished in
2551   the normal case as exceptions are typically costly to handle.  In tests,
2552   this made omindex ~0.23% faster when indexing a lot of HTML files.
2554 * omindex:
2556   + Add --ignore-exclusions option, which will index HTML files despite meta
2557     robots tags, etc - omindex is often used in environments where such
2558     exclusions aren't relevant.
2560   + Fix to compile with older versions of libmagic which don't have
2561     MAGIC_MIME_TYPE (e.g. on Ubuntu hardy).
2563   + Tell xls2csv to separate fields with spaces rather than commas, and not to
2564     quote them.  Fixes indexing of numeric fields, and means we don't need to
2565     use our CSV parser to get a sample.
2567   + Add whitespace between chunks of text extracted from Microsoft Office 2007
2568     formats to prevent words in adjacent chunks from being run together.
2570   + Encode reserved characters in URLs - links to files with names containing
2571     '#' and '?' now work.
2573   + Handle .xlr extension the same way as .xls (later Microsoft Works versions
2574     apparently produce such files which are really the same format).
2576   + Index filename extension with new standard prefix E.
2578   + Just report the mimetype as unknown instead of saying "unknown Office 2007
2579     MIME subtype".
2581   + Ignore *.css and *.js by default too.
2583   + Messages reporting skipping files are now more consistent and always report
2584     the filename.
2586   + New --empty-docs option to allow documents we extract no body text from to
2587     be indexed (existing behaviour), skipped, or reported and then indexed.
2589 omega:
2591 * Fix double Content-Type header in some error reporting situations (regression
2592   introduced in 1.2.4).
2594 * Update $url's URL encoding to follow RFC3986.
2596 * Allow QueryParser flags to be set from OmegaScript (ticket#418).  The
2597   FLAG_SPELLING_CORRECTION flag can now be set using
2598   $opt{flag_spelling_correction,1} - the old $opt{spelling,true} way to
2599   enable this flag still works, but it now deprecated.
2601 templates:
2603 * templates/emptydocs,templates/godmode,templates/opensearch,templates/query,
2604   templates/xml: Add missing escaping.  Some of these instances may allow
2605   cross-site scripting, so upgrading your templates is recommended, especially
2606   if you have any sensitive cookies set on the domain Omega is running on.
2608 * templates/xml:
2610   + Try $field{caption} (which is what omindex sets) before $field{title} when
2611     getting a value for the hit tag's title attribute - this is consistent with
2612     how the query template gets the title.
2614   + Add new 'type' attribute which gives $field{type}.
2616   + Add 'DBSize' attribute to <result> element.
2618   + Fix double escaping of matching terms.  This is only likely to affect cases
2619     where a matching term contains '&'.
2621   + Remove support for undocumented HILITECLASS CGI variable.  There's no
2622     evidence I can find using Google code search or web search that this has
2623     been used anywhere, and it's difficult to handle escaping it properly in
2624     the face of all the ways it could reasonably be used.
2626 portability:
2628 * Fix to compile on Microsoft Windows (ticket#350).
2630 Omega 1.2.4 (2010-12-19):
2632 documentation:
2634 * Minor documentation improvements.
2636 indexers:
2638 * Some iconv implementations (such as that on Mac OS X) don't handle many of
2639   the commonly seen mis-punctuated charset names (e.g. UTF16, UTF_16).  We now
2640   check for this if iconv fails, fix up the charset name, and retry.
2642 * The built-in character encoding converter now handles spaces in charset
2643   names.
2645 * Use O_NOATIME if available and either the file is owned by the current euid,
2646   or the current euid is 0 (i.e. we're running as root).  This avoids updating
2647   the access time of files we index which saves time.  Fixes ticket#222.
2649 * Report get_description() for Xapian exceptions, which provides additional
2650   information above get_msg().
2652 * Add boolean terms with add_boolean_term() so they get wdf of 0 and don't
2653   contribute to document length.
2655 * omindex:
2657   + Escape wildcard patterns being passed to unzip - in the unlikely event that
2658     one of these matched files in or under the current directory, we might fail
2659     to extract all the files we wanted to.
2661   + Add explicit support for indexing CSV files (better samples than from
2662     using '-Mcsv:text/plain').
2664   + Add support for indexing .msg files from Microsoft Outlook (using the Perl
2665     module Email::Outlook::Message.  (ticket#334)
2667   + Improve --help for --mime-type option.
2669   + Optionally use libmagic to detect MIME types for files for which we have no
2670     extension mapping, which allows us to handle files with a misleading
2671     extension, or no extension at all.  (ticket#114)
2673   + Add new --filter option which allows the user to specify new filters
2674     provided they return UTF-8 text on stdout.
2676   + If a filter command isn't installed, previously we wouldn't try it again
2677     for the same file extension - now we won't try it again for the same
2678     mime-type.
2680   + Index the leafname of the file (without any extension) as extra keywords.
2682   + Extract author from HTML, OpenDocument, and PDF files.  Index it with an A
2683     prefix, and add it as a field.
2685   + Add support for indexing text and metadata from SVG files.
2687   + Extract metadata from Microsoft Office 2007 file formats.
2689   + Index text in headers and footers for .odt and .docx files.
2691   + Use the CSV parser to generate a nicer sample for files of type
2692     application/vnd.ms-excel.
2694   + Add support for indexing Debian and RPM package files (ticket#493).
2696   + Make the memory limit for filter processes the size of physical memory,
2697     which is a little less arbitrary than 7/8 of this value (ticket#424).
2699   + Under --duplicate=ignore, fix so that old documents which aren't seen get
2700     deleted, which wasn't implemented before (to suppress this deletion, pass
2701     -p as well).
2703   + Rename the short option for --version from -v to -V for consistency with
2704     scriptindex and many other packages, and to free up -v as the short option
2705     for --verbose.  For backward compatibility, "omindex -v" is handled
2706     specially and still reports the version.
2708   + Add --verbose option, and disable the less interesting output unless it is
2709     specified.
2711   + Deprecate "--preserve-nonduplicates" in favour of new long option
2712     "--no-delete" which does the same thing, but has a clearer name.
2714   + The deletion of documents pass at the end of indexing is now more
2715     efficient.  We track how many documents in the database we haven't seen so
2716     we can stop once we've found them all (a particularly big improvement if
2717     there are no documents to delete), and we now use a PostingIterator over
2718     all documents which avoids needing to catch an exception for every gap in
2719     the used document ids.
2721   + Quietly ignore files with mimetype set to "ignore".  The initial list of
2722     extensions set to ignore is: .a .dll .dylib .exe .lib .o .obj .so
2724   + Index file owner and read permissions, to allow finding documents with a
2725     particular owner, and so searches can be restricted to documents a user is
2726     able to read.
2728   + Add file size as a document value, so you can sort on it and filter by it.
2730 * scriptindex:
2732   + Fix file descriptor leak if the LOADFILE action is used on something which
2733     isn't a file.
2735 omega:
2737 * Make sure we write out HTTP headers when reporting an error early on.
2739 * Extend $field to take an optional DOCID argument, rather than always using
2740   the context from $hitlist.
2742 * Add new $emptydocs command which returns a list of documents with doclength
2743   zero.
2745 * Add support for size: range filtering.  Currently the end points of the range
2746   have to be specified in bytes (e.g. size:102400..204800 for 100-200KB).
2748 templates:
2750 * templates/emptydocs: New template which lists documents with doclength zero.
2752 build system:
2754 * configure: Probe for any options needed to enable large file support.
2755   Handling files >= 2GB isn't especially useful, but more importantly this is
2756   needed to allow omindex to index files on filing systems with 64 bit inodes
2757   on some platforms (e.g. 32-bit Linux).
2759 * Use -no-undefined on platforms which need it to dynamically link such as
2760   cygwin (need to do this taken from ticket#282).
2762 portability:
2764 * Fix to compile with Sun C++.
2766 Omega 1.2.3 (2010-08-24):
2768 documentation:
2770 * docs/termprefixes.html: Update "flint and quartz" to "flint and chert" as
2771   quartz is no longer supported.  Give exact term length limit for flint and
2772   chert.
2774 packaging:
2776 * xapian-omega.spec: Don't run autoreconf - it's no longer required.
2778 Omega 1.2.2 (2010-06-27):
2780 portability:
2782 * Apply getopt portability fixes from xapian-core 1.2.0, fixing build failures
2783   on Mac OS X (and probably some other platforms with non-GNU getopt
2784   implementations). (ticket#469)
2786 Omega 1.2.1 (2010-06-22):
2788 This release includes all changes from 1.0.21 which are relevant.
2790 Omega 1.2.0 (2010-04-28):
2792 This release includes all changes from 1.0.20 which are relevant.
2794 build system:
2796 * configure: Tell libtool not to link in deplibs on platforms where we know
2797   they aren't needed.
2799 * configure: On Linux, extract the library search path from ldconfig which
2800   gives us the default entries reliably.
2802 Omega 1.1.5 (2010-04-15):
2804 This release includes all changes from 1.0.19 which are relevant.
2806 Omega 1.1.4 (2010-02-15):
2808 This release includes all changes from 1.0.18 which are relevant.
2810 omega:
2812 * Use the optimised integer to string conversion routines from xapian-core.
2814 Omega 1.1.3 (2009-11-18):
2816 This release includes all changes from 1.0.15-1.0.17 which are relevant.
2818 templates:
2820 * templates/query: If JavaScript is available, convert $field{modtime} to a
2821   string on the client-side so that the timezone is correct.  If JavaScript
2822   isn't available, fall back to the existing behaviour of using UTC.
2823   (ticket#314)
2825 build system:
2827 * configure: Default to looking for xapian-config-1.1 unless XAPIAN_CONFIG is
2828   specified.
2830 Omega 1.1.2 (2009-07-23):
2832 This release includes all changes from 1.0.14 which are relevant.
2834 indexers:
2836 * omindex:
2838   + Handle the "macroenabled" versions of MS Office 2007 files too
2839     (ticket#290).
2841   + Extract pptx notesSlides and comments, if present.  (ticket#290).
2843 Omega 1.1.1 (2009-06-09):
2845 This release includes all changes from 1.0.13 which are relevant.
2847 indexers:
2849 * omindex:
2851   + Check the last modification time of files before reindexing (ticket#342).
2853   + Add "--spelling" option to index spelling correction data.
2855 * scriptindex:
2857   + Add new "spell" action for indexing spelling correction data (ticket#296).
2859 omega:
2861 * Add $suggestion and $opt{spelling} to provide access to spelling correction
2862   (ticket#296).
2864 * Add $opt{weighting} to allow the weighting scheme and parameters to be
2865   specified (ticket#298).
2867 * If SERVER_PROTOCOL in the environment is set to INCLUDED, then our output is
2868   being included in another page (e.g. using SSI) so suppress the output of any
2869   HTTP headers.
2871 templates:
2873 * templates/query: Offer any spelling correction QueryParser gives.
2875 build system:
2877 * configure: Sync warning flags used with GCC with xapian-core apart from
2878   -Woverloaded-virtual which fires for MyHtmlParser::parse_html().  That
2879   probably should be tidied up at some point, but not right now.
2881 Omega 1.1.0 (2009-04-23):
2883 indexers:
2885 * scriptindex:
2887   + Make deprecated "index=nopos" an error.
2889 omega:
2891 * New OmegaScript command $transform{} which performs regular expression
2892   substitutions using the PCRE library (which is now required to build Omega).
2893   (ticket#231)
2895 build system:
2897 * The build system is now bootstrapped with newer versions of autoconf and
2898   libtool which should produce smaller files and speed up configure and
2899   make.
2901 Omega 1.0.23 (2011-01-14):
2903 indexers:
2905 * omindex:
2907   + Escape wildcard patterns being passed to unzip - in the unlikely event that
2908     one of these matched files in or under the current directory, we might fail
2909     to extract all the files we wanted to when indexing document formats like
2910     OpenDocument which use a zip file container.
2912   + The parser for OpenDocument metadata wasn't initialising its "state" field.
2913     Often you'd be lucky and it would be initialised to zero, but this could
2914     have caused misparsing of metadata in some cases.
2916 * scriptindex: Fix file descriptor leak if the LOADFILE action is used on
2917   something that isn't a file.
2919 * If fstat() fails when trying to load a file, preserve the errno value from
2920   the fstat call to report to the user.
2922 portability:
2924 * configure: Probe for any options needed to enable large file support.
2925   Handling files >= 2GB isn't especially useful, but more importantly this is
2926   needed to allow omindex to index files on filing systems with 64 bit inodes
2927   on some platforms (e.g. 32-bit Linux).
2929 * Add -no-undefined to AM_LDFLAGS on platforms which need it to dynamically
2930   link such as cygwin (need to do this taken from ticket#282).
2932 Omega 1.0.22 (2010-10-03):
2934 portability:
2936 * Fix to compile with Sun C++.
2938 Omega 1.0.21 (2010-05-18):
2940 portability:
2942 * Fix build failure in freemem.cc on Microsoft Windows.
2944 Omega 1.0.20 (2010-04-27):
2946 portability:
2948 * Fix build failure on Mac OS X and possibly some other platforms (regression
2949   caused by fix for getopt-related warnings on Cygwin in 1.0.19).
2951 Omega 1.0.19 (2010-04-15):
2953 portability:
2955 * Fix getopt-related warning on Cygwin.
2957 Omega 1.0.18 (2010-02-14):
2959 indexers:
2961 * Make the default charset "utf-8" not "UTF-8" as we lower case explicitly
2962   specified character sets to compare to see if we need to reparse.  Previously
2963   XML documents which explicitly specified their character set as UTF-8 would
2964   cause needless restart or the parser.
2966 * omindex:
2968   + Increase the wdf boost for the document title from 2 to 5, since 2 isn't
2969     really enough.
2971 * scriptindex:
2973   + Don't abort with "Unknown Exception" if indexing is disallowed or we hit
2974     </body> for a document which had an overridden character set.  Fixes
2975     ticket#410.
2977 Omega 1.0.17 (2009-11-18):
2979 indexers:
2981 * omindex:
2983   + On Linux, change the memory limit on external filters to use _SC_PHYS_PAGES
2984     since _SC_AVPHYS_PAGES excludes pages used by the OS cache and so will
2985     often report a really low value.  Fixes Debian bug#548987 and ticket#358.
2987   + Fix likely crash when reading output from external filter program if read()
2988     is interrupted by a signal.
2990   + Fix potential crash when indexing PostScript files (fixed by using delete[]
2991     (not delete) for array allocated by new[]).
2993 testsuite:
2995 * utf8converttest: Charset "8859_1" isn't understood by Solaris libiconv, and
2996   isn't a standard charset name, so just test it when using our built-in
2997   converter and GNU libc.
2999 portability:
3001 * Fix build failure on Mac OS X 10.6.
3003 * Also check for socketpair() in -lxnet if it isn't found without, which
3004   enables resource limits on external filter programs called by omindex on
3005   Solaris, and possibly some other platforms.  Fixes ticket#412.
3007 Omega 1.0.16 (2009-09-10):
3009 * omega: Fix cross-site scripting vulnerability in reporting of exceptions
3010   (CVE-2009-2947).
3012 Omega 1.0.15 (2009-08-26):
3014 general:
3016 * omegascript.vim: The list of OmegaScript commands in the vim mode was rather
3017   out of date, and a few commands were misclassified.  Fix both problems and
3018   avoid future recurrences by automatically generating those lists from the
3019   command list in query.cc.
3021 documentation:
3023 * omegascript.html: Document that $date uses UTC.  (ticket#314)
3025 templates:
3027 * query: Link to "xapian.org" rather than "www.xapian.org".
3029 * inc/toptermsjs: Use double-quotes rather than single quotes for parameter
3030   values on the <script> tag.
3032 portability:
3034 * omindex: Implement correct handling of paths when calling external filter
3035   programs on Microsoft Windows.
3037 Omega 1.0.14 (2009-07-21):
3039 indexers:
3041 * omindex: Make sure that output is flushed after every message, not just after
3042   some of them.
3044 portability:
3046 * Avoid infinite loop in omindex and scriptindex when reading files under
3047   Cygwin with automatic end of line translation enabled.  This same bug can
3048   also manifest on Unix platforms if the file is truncated by another process
3049   while being read.
3051 Omega 1.0.13 (2009-05-23):
3053 indexers:
3055 * omindex:
3057   + If the filter program needed for a file format isn't installed, report this
3058     explicitly when skipping subsequent files with the extension instead of
3059     misleadingly reporting "Unknown extension".
3061   + Make -s actually work as a short-form for --stemmer (as documented by
3062     "omindex --help" and "man omindex").
3064   + Drop the copyright info from the output of --version as it's perennially
3065     out of date and we don't report it for any other Xapian programs.
3067 * scriptindex:
3069   + Add new "valuenumeric" action to add a document value using
3070     Xapian::sortable_serialise() to allow numeric sorting (ticket#260).
3072 build system:
3074 * configure: Enable more GCC warnings - "-Wstrict-null-sentinel" for 4.0+,
3075   "-Wlogical-op -Wmissing-declarations" for 4.3+.
3077 Omega 1.0.12 (2009-04-19):
3079 omega:
3081 * $log now retries a partial write, or one interrupted by a system call.
3083 build system:
3085 * configure: Fix iconv parameter type probe not to implicitly cast a string
3086   literal to char* - this a warning under GCC currently, but the user could
3087   pass -Werror explicitly in CXXFLAGS, and this could be promoted to an error
3088   in future GCC versions, and may already be so for some other compilers.
3090 * Overriding CXXFLAGS at make-time (e.g. "make CXXFLAGS=-Os") no longer
3091   overrides any flags required for building with Xapian.
3093 * We now actually use the compiler warning flags which configure detects.
3095 Omega 1.0.11 (2009-03-15):
3097 documentation:
3099 * cgiparams.html: Note the technique of using a stub database file to allow a
3100   default of searching over multiple databases.
3102 indexers:
3104 * omindex:
3106   + Add support for indexing Microsoft Office 2007 formats and XPS files
3107     (bug#290).
3109   + Fix the extraction of metadata from OpenDocument formats.
3111   + Fix "-l" which would previously always cause a segmentation fault if used
3112     ("--depth-limit" wasn't affected).
3114 build system:
3116 * configure: The output of g++ --version changed format (again) with GCC 4.3
3117   which meant configure got "g++" for the version.  Instead use the (hopefully)
3118   more robust technique of using g++ -E to pull out __GNUC__ and
3119   __GNUC_MINOR__.
3121 * configure: Turn on _FORTIFY_SOURCE where available (as we do in xapian-core).
3123 portability:
3125 * Fix to compile when RLIMIT_AS isn't available (as on NetBSD and OpenBSD).
3126   Instead use RLIMIT_VMEM or RLIMIT_DATA if either is available, else don't try
3127   to limit the memory the filter process can use.
3129 Omega 1.0.10 (2008-12-23):
3131 build system:
3133 * This release now uses newer versions of the autotools (autoconf 2.62 ->
3134   2.63; automake 1.10.1 -> 1.10.2).  The newer autoconf fixes a regression
3135   in autoconf 2.62 (and so Omega 1.0.7) with detecting the endian-ness of some
3136   platforms.
3138 Omega 1.0.9 (2008-10-31):
3140 documentation:
3142 * docs/overview.html: Document HTML parsing a bit, including robots
3143   meta and htdig_noindex.
3145 omega:
3147 * omega: Catch std::exception and report what its what() method returns.
3149 * omega: Remove undocumented and non-functional support for numeric sorting
3150   via CGI parameter SORT=#<slot> (SORT=<slot> works as before).
3152 build system:
3154 * configure: Sync warning flag handling changes from xapian-core to eliminate
3155   many warnings from GCC 4.3.
3157 Omega 1.0.8 (2008-09-04):
3159 documentation:
3161 * Fix a few typos and improve wording in a few places.
3163 indexers:
3165 * omindex:
3167   + If the character encoding is specified using <meta http-equiv=...> in an
3168     HTML document then reparse the document if it isn't the encoding we're
3169     already using so that any preceding <title> is converted correctly
3170     (bug#292).
3172   + Convert text from meta tag parameters to UTF-8 (bug#293).
3174   + Handle <meta charset="..."> (new in HTML 5).
3176   + Fix bug in HTML tag parameter parsing which was probably just a small
3177     performance penalty in real world cases, but could perhaps result in
3178     parsing bogus extra parameters in carefully contrived situations.
3180 portability:
3182 * Add missing <signal.h>, noted on FreeBSD by Henrik Brix Andersen.
3184 Omega 1.0.7 (2008-07-14):
3186 documentation:
3188 * omegascript.html,scriptindex.html: Fix empty titles.
3190 indexers:
3192 * omindex:
3194   + When indexing text files, handle UCS-2 and UTF-16 text files with a
3195     byte-order mark (BOM), and ignore any UTF-8 "byte-order" mark.
3197   + The built-in conversion code (used when iconv isn't available) now handles
3198     UCS-2/UTF-16 with and without a BOM, and also the explicit BE and LE forms.
3200 omega:
3202 * Overhaul the $highlight colour combinations since some were rather
3203   unreadable (Debian bug 484456).
3205 build system:
3207 * configure: Synchronise code for working out warning flags used for builds
3208   with that used for xapian-core, which in particular handles different
3209   output formats from "gcc --version".
3211 portability:
3213 * configure: Fix header checks to pre-include <sys/types.h> which Mac OS X
3214   needs for some other headers to work.
3216 * configure: Fix probing for iconv to work better when iconv isn't found
3217   (previously this only worked on Mac OS X with fink).
3219 * Fix compilation error on FreeBSD, introduced in 1.0.5.
3221 * In omega, cast size to unsigned before division to avoid a warning about
3222   signed overflow.
3224 packaging:
3226 * xapian-omega.spec: Remove "www." from xapian.org and oligarchy.co.uk URLs.
3228 Omega 1.0.6 (2008-03-17):
3230 documentation:
3232 * docs/omegascript.html: Improve formatting.
3234 indexers:
3236 * omindex:
3238   + Add support for DjVu files.
3240   + If we get an error trying to read a directory entry, report it to the user
3241     rather than ignoring it.
3243 omega:
3245 * New OmegaScript commands $addfilter, $lower, $upper.
3247 portability:
3249 * Check "defined HAVE_SYSMP" rather than just "HAVE_SYSMP".  This doesn't
3250   change behaviour, but fixes a compile warning on platforms other than Linux
3251   and IRIX.
3253 Omega 1.0.5 (2007-12-21):
3255 documentation:
3257 * Convert .txt docs to reStructedText which we process to produce HTML.
3259 * Add a note inviting suggestions for additional reliable filter programs.
3261 * overview.html: omindex hasn't generated "W"-prefix terms since 0.9.7, so
3262   remove the documentation saying it does.
3264 indexers:
3266 * omindex:
3268   + If a file's extension isn't found in the mime_map and contains uppercase
3269     ASCII characters, check for the lower cased extension (so .PDF and .Pdf
3270     behave the same way as .pdf, unless you deliberately add different mappings
3271     for them).
3273   + '-f' is documented by --help as a short option for '--follow', but wasn't
3274     previously actually recognised.
3276   + Limit filter programs to 7/8 of free physical memory on platforms where we
3277     know how to determine this statistic (currently at least Linux, FreeBSD,
3278     IRIX, HP-UX; probably Solaris and a few others too).  This helps to prevent
3279     runaway filters from causing a denial of service (bug#111).
3281   + Avoid rereading uncompressed AbiWord documents in order to calculate their
3282     MD5 checksums.
3284 * scriptindex:
3286   + Now inserts a ':' between prefix and term, using the same criteria which
3287     Xapian::QueryParser does.
3289   + The 'BOOLEAN' action now ignores an empty input rather than adding just the
3290     prefix as a term.
3292   + The 'UNIQUE' action now issues a warning for empty input but otherwise
3293     ignores it.
3295 portability:
3297 * Add explicit includes of C headers needed to build with the latest snapshots
3298   of GCC 4.3.
3300 Omega 1.0.4 (2007-10-30):
3302 omega:
3304 * If an OmegaScript template specifies the same field name as both a boolean
3305   and a probabilistic term prefix then previous the boolean setting would
3306   be ignored (e.g. $setmap{prefix,foo,A}$setmap{boolprefix,foo,H}).  Now this
3307   generates an error.  If you set prefixes in your templates, you may wish to
3308   check them over before upgrading.
3310 Omega 1.0.3 (2007-09-28):
3312 general:
3314 * Distribution tarballs are now in the POSIX "ustar" format since it saves
3315   a few KB and we need to use it for xapian-core anyway.
3317 documentation:
3319 * Expand the output of 'mbox2omega --help' and refer the reader to it from
3320   docs/scriptindex.txt.
3322 indexers:
3324 * omindex:
3326   + Add support for indexing AbiWord documents and TeX DVI files.
3328   + Impose a 5 minute CPU time limit on filter programs to prevent problems if
3329     a filter program goes into an infinite loop on a malformed input.  Partly
3330     addresses bug#111.
3332 * scriptindex:
3334   + Fix line number tracking in dump files.
3336 omega:
3338 * Add $muldiv{A,B,C} which calculates int(A*B/C).
3340 * Fix bug in decimal fraction in $size for files >= 1M in size.
3342 templates:
3344 * query:
3346   + Set HTML charset to utf-8 since that's what databases now are by default.
3348   + Restyle to use CSS to draw a "score bar" instead of using images.
3350   + Rework the layout of each hit.
3352   + Add popup hints on mouse-over for various items.
3354   + Tidy up some HTML gremlins.
3356 Omega 1.0.2 (2007-07-05):
3358 documentation:
3360 * scriptindex.txt: Fix typo.
3362 indexers:
3364 * omindex:
3366   + If --url isn't passed, default to "/", but print a warning noting that this
3367     default has been used (at least for now).
3369   + Report files that aren't indexed because their extensions aren't
3370     recognised.
3372 build system:
3374 * Value of XAPIAN_CONFIG supplied to configure is now passed to distcheck,
3375   to ensure that it works with uninstalled copies of Xapian.
3377 portability:
3379 * Fix test programs to build with a development snapshot of GCC 4.3.
3381 Omega 1.0.1 (2007-06-11):
3383 documentation:
3385 * overview.txt: As of 1.0.0, we no longer use pstotext for PostScript, but
3386   instead use ps2pdf followed by pdftotext (since this works for Unicode).
3388 * scriptindex.txt: Document that you can delete a document by supplying a new
3389   document which only contains the unique term.
3391 indexers:
3393 * Fix bug in HTML parser - if the text between two tags consisted entirely of
3394   whitespace it would just be ignored which could run words together if
3395   the tags didn't produce implicit whitespace.  This bug dates back to at least
3396   Omega 0.8.2.
3398 * omindex: Under Linux (and probably some other platforms) struct dirent can
3399   tell us the type of a directory entry for some filing systems, so make use of
3400   this to avoid calling stat() (or lstat()) unnecessarily - when indexing
3401   /usr/share/doc on my Linux box, this saves about 14000 explicit calls to
3402   stat() (leaving about 7000).
3404 omega:
3406 * Fix handling of query parsing errors (broken by changes in 1.0.0).
3408 packaging:
3410 * The required automake version has been lowered to 1.8.3, so RPMs can now be
3411   built on RHEL 4 and SLES 9.
3413 Omega 1.0.0 (2007-05-17):
3415 general:
3417 * Omega and the indexers now work in UTF-8.  If iconv() is available, omindex
3418   will use it to convert documents from other formats, otherwise it has
3419   built-in support for UTF-8 and ISO-8859-1; omindex knows how to run the
3420   various external filter programs to generate UTF-8 output; scriptindex
3421   assumes input is already in UTF-8.
3423 * Change the project name (used to name tarballs, and default installation
3424   paths) to "xapian-omega" since that's what the RPMs and Debian packages
3425   already use (there's a Rogue-like game called Omega).
3427 documentation:
3429 * docs/overview.txt: Document what each of the OmegaScript templates does.
3431 * docs/quickstart.txt: Assorted minor improvements.
3433 * docs/termprefixes.txt: Document new 'Z' prefix, and that the 'R' and 'W'
3434   prefixes are no longer used by Xapian.
3436 * docs/cgiparams.txt: FMT isn't limited to just `a-z' - the actual restriction
3437   is that it may not contain `..'.
3439 * docs/scriptindex.txt: Explicitly note that index=nopos is deprecated
3440   (scriptindex already emits a warning).
3442 * NEWS: Add note that Omega < 0.8.0 NEWS entries are in the xapian-core NEWS
3443   file.
3445 * TODO: Updated.
3447 indexers:
3449 * Updated to use the new Xapian::TermGenerator class.  This means that the
3450   indexing strategy has changed.
3452 * "--help" now reports the default stemming language (i.e. "english").
3454 * Implement new sample generating function which normalises all runs of
3455   whitespace to a single space, and fixes invalid UTF-8 in the sample.
3457 * omindex:
3459   + We now index PostScript by converting to PDF with ps2pdf and then indexing
3460     that.  This allows us to index PostScript files containing Unicode
3461     characters outside of ISO-8859-1, and also means we now get metadata from
3462     PostScript files.  The downside is it is quite a bit slower.
3464   + Add support for indexing MS Works documents using wps2text (part of
3465     libwps).
3467   + Don't index empty files.
3469 * scriptindex:
3471   + Fix optimisation of "load truncate=N" to actually work!
3473   + The "truncate" action knows not to chop off a multibyte UTF-8 character.
3475   + Update short option list for scriptindex to match documented usage (-h, -V
3476     and -s were not working).
3478   + Remove -q and -u options - they no longer do anything and are only accepted
3479     for compatibility with really old versions (0.6.1 and earlier for -q; 0.7.5
3480     and earlier for -u).
3482 omega:
3484 * Add an alternative implementation of date range filtering which uses a
3485   MatchDecider.  This allows everything that the existing implementation does,
3486   plus you can support sorting on a choice of dates (e.g. first published or
3487   last updated), and filtering works to a resolution of a minute rather than a
3488   day.  Set CGI parameter DATEVALUE to enable this, and to specify the value to
3489   use.  Since omindex now adds the last modified date as value 0, this will
3490   work with omindex.
3492 * Enhance $substr{} to accept a negative length (meaning to count back from the
3493   end of the string).
3495 * New CGI parameters to allow finer control of sorting and ranking - SORTAFTER
3496   and DOCIDORDER.
3498 * The sorting options are now encoded in $filters so Omega can automatically
3499   reset to page 1 if they are changed.
3501 * Add new OmegaScript $weight command which returns the raw document weight -
3502   mostly useful for debugging purposes.
3504 * $topterms{} now generates unstemmed terms.
3506 * $prettyterm{TERM} has been updated to fit with changes to the term generation
3507   strategy.
3509 * Add 'you' and 'your' as stopwords.
3511 * $filesize{SIZE} enhanced to return a decimal point for K, M, and G (e.g.
3512   "2.1K" and "4.0M" rather than "2K" and "4M"); $filesize{0} is now "0 bytes";
3513   $filesize{1} is now "1 byte"; $filesize{SIZE} where SIZE is negative is now
3514   "".
3516 * Remove $freqs as it has been deprecated for ages.
3518 * Remove support for xB, xDATE1, xDATE2, xDAYSMINUS, and xDEFAULTOP which were
3519   deprecated in favour of xFILTER in 0.7.5 (over 3 years ago).
3521 * Remove deprecated aliases for CGI parameters (deprecated in 0.6.3 or 0.6.5,
3522   more than 3.5 years ago): RAW_SEARCH (now RAWSEARCH), DATE1 (now START),
3523   DATE2 (now END), DAYSMINUS (now SPAN but with slightly different semantics),
3524   and MIN_HITS (now MINHITS).
3526 * Remove "bias_weight" and "bias_halflife" CGI parameters since they rely on
3527   Enquire::set_bias() which has been removed.
3529 templates:
3531 * The 'query' template no longer uses $topterms by default.
3533 * New 'topterms' template provides a query template with $topterms support.
3535 * Template fragments which aren't intended for direct use have been moved to
3536   an "inc" subdirectory.
3538 testsuite:
3540 * md5test: Add tests for MD5 code.
3542 build system:
3544 * `./configure --enable-quiet' already allows you to specify at configure time
3545   to pass `--quiet' to libtool.  Now you can override this at make-time by
3546   using `make QUIET=' (to turn off `--quiet') or `make QUIET=y' (to turn on
3547   `--quiet').
3549 * configure: Disable probes for f77, gcj, and rc completely by preventing
3550   the probe code from even appearing in configure - this reduces the size of
3551   configure by 29% and should speed it up significantly.
3553 portability:
3555 * Fixed to build with GCC 4.3 snapshot.
3557 * We now make use of the safe*.h portability headers from xapian-core.
3559 * Ensure that the result of snprintf is zero terminated since MSVC's snprintf
3560   is broken (by design it seems).
3562 * configure: xapian-config --cxxflags now includes -ptused for SGI's C++
3563   compiler, so we don't need to probe for it here.
3565 * configure: Perform a link test for posix_fadvise to fix misdetection on
3566   HP-UX.
3568 Omega 0.9.10 (2007-03-04):
3570 documentation:
3572 * docs/omegascript.txt: Rewrite introductory paragraph.  Note that
3573   whitespace is significant, and add explicit warning to $setmap.
3575 * docs/termprefixes.txt: Expand section on boolean prefixes, showing
3576   how to generate them using scriptindex, and how to allow them to be
3577   selected in an HTML form.
3579 indexers:
3581 * omindex: Generate correct MD5 checksums on big-endian platforms.
3583 omega:
3585 * Fix $substr{} with negative start to actually work.
3587 * Fix $substr{} to never cause a C++ exception.
3589 packaging:
3591 * omega.spec.in: Remove "." from the end of the Summary.
3593 Omega 0.9.9 (2006-11-09):
3595 documentation:
3597 * Ship our custom INSTALL file rather than the generic one from autoconf which
3598   we've accidentally been shipping instead since 0.9.5.
3600 indexers:
3602 * scriptindex: The "date" action no longer modifies the value it operates on
3603   (it was never meant to!)
3605 omega:
3607 * Report an error if $setmap is called with an even number of parameters.
3608   An incorrect example in the documentation used to suggest this, so it's
3609   particularly useful to catch this case.
3611 packaging:
3613 * RPMs: Prevent binaries getting an rpath for /usr/lib64 on FC6.
3615 Omega 0.9.8 (2006-11-02):
3617 omega:
3619 * $substr where the start is negative and longer than the string (e.g.
3620   $substr{abcd,-5,1}) wasn't working as intended.
3622 build system:
3624 * configure: Tell AC_CHECK_HEADERS to suppress its backward compatibility mode,
3625   so it only checks headers with the compiler.  This speeds up configure a
3626   little, and is what we do elsewhere.
3628 * configure: Warning flags for GCC weren't actually getting used.  Fix this to
3629   work and use the same warning flags for GCC and Intel C++ as xapian-core does.
3630   Fix all the warnings this uncovered!
3632 * omega,omindex,scriptindex: Remove some old unused code.
3634 portability:
3636 * Ensure that we always pass an unsigned char value to isupper(), toupper(),
3637   etc as they are undefined on other values (glibc makes them work for signed
3638   char values too, but this is an extension).
3640 * configure: Pass magic options to SGI's C++ compiler to allow linking of
3641   templates to work.
3643 * configure: IRIX doesn't allow stdint.h to be included from C++ so we need
3644   a smarter configure test than AC_CHECK_HEADERS.
3646 * Fix warnings from SGI's C++ compiler.
3648 Omega 0.9.7 (2006-10-10):
3650 documentation:
3652 * omegascript.txt: Note that (by design) an omegascript template can't
3653   contain an infinite loop.
3655 * termprefixes.txt: "$setmap{title,S}" should be "$setmap{prefix,title,S}".
3657 * Use the default paths to the database directories and the omega CGI binary in
3658   examples.
3660 * README: Update reference to "CVS" to say "SVN".
3662 indexers:
3664 * Don't get confused by "a<b" in Javascript in a <script> tag.  Fixes bug#91.
3666 * Support htdig's "ignore this bit" comments.
3668 * Don't generate terms with more than 3 trailing symbols ('-', '+', or '#').
3670 * omindex:
3672   + Add the file last modified time as value #0.
3674   + Generate an MD5 checksum of each file indexed and store it in value #1
3675     to allow duplicates to be collapsed.
3677   + Store the file's last modified time in the document data as "modtime" so it
3678     shows up in search results (and tweak the query template so the display of
3679     this information looks nicer).  Don't add "modtime" field if the timestamp
3680     is (time_t)-1.
3682   + Run pdfinfo once and pull out the fields we want using string operations,
3683     instead of running it twice filtered through sed.
3685   + Parse the XML from OpenDocument and OpenOffice using new subclasses of
3686     HtmlParser.  Only extract meta.xml once.
3688   + Add "size" field to document data.
3690   + Run xls2csv on MS Excel files, run catppt on MS Powerpoint files, and also
3691     index MS Word templates (.dot) the same way as .doc files.
3693   + Don't generate 'W' terms since omega doesn't use them.
3695   + If a filter program isn't installed, then don't try it again for the same
3696     extension (not perfect but an improvement - previously we indexed an empty
3697     document!)
3699   + If popen() fails, treat it as a read error.
3701 * scriptindex:
3703   + Add new "load" action to allow the contents of an external file to be
3704     loaded and parsed.
3706   + Fix check for whether a record has content in the case where the same field
3707     is processed more than once.
3709 omega:
3711 * Add $pack and $unpack OmegaScript commands to allow big endian binary values
3712   to be encoded and decoded (for use with omindex's lastmod in value #1).
3714 * omega.conf: Fix code which reads omega.conf to be line based as documented
3715   rather than the wacky whitespace based scheme that was actually implemented.
3716   Also we now allow "#" comments and blank lines in omega.conf.
3718 * Fix $highlight{} to work with capitalised words (it used to work but
3719   regressed in 0.8.2).
3721 * Use '\t' to separate terms in xP since filter terms might contain '.'.  Fixes
3722   bug#87.
3724 testsuite:
3726 * Add htmlparsetest which tests the MyHtmlParser class.
3728 build system:
3730 * Makefile.am: Make use of the dist_ prefix to avoid having to list files in
3731   EXTRA_DIST as well as in *_SCRIPTS, *_DATA, and man_MANS.
3733 * Makefile.am: Prefer $(sysconfdir) to @sysconfdir@ since the former can be
3734   overridden on the "make" command line.
3736 portability:
3738 * xapian-config will now switch Sun's C++ compiler into ANSI C++ compliant
3739   mode, so remove all the special case bits of code added for just this one
3740   compiler.
3742 * omindex: Fix escaping of filenames to cast characters to "unsigned char" so
3743   that isalnum() works correctly everywhere.  Not a security hole as dangerous
3744   characters were still being escaped.
3746 * Call pclose() not fclose() on a FILE* obtained from popen().  This bug could
3747   cause us to run out of file descriptors on some platforms.
3749 * configure: Check for strftime.
3751 packaging:
3753 * omega.spec.in: Include documentation in the RPM package.
3755 Omega 0.9.6 (2006-05-15):
3757 documentation:
3759 * docs/omegascript.txt: Clarified description of $now.
3761 indexers:
3763 * scriptindex: Fix "index" and "indexnopos" without a prefix to set the weight
3764   correctly (bug introduced in 0.9.5).
3766 omega:
3768 * Added new OmegaScript commands $filterterms and $substr.
3770 portability:
3772 * configure: Update snprintf detection to match xapian-core.
3774 * Fix MSVC warnings.
3776 packaging:
3778 * omega.spec.in: Create and package /var/lib/omega/cdb and /var/log/omega.
3780 Omega 0.9.5 (2006-04-08):
3782 documentation:
3784 * README: Add pointer to documentation.
3786 * Added man pages for omindex and scriptindex, generated using help2man.
3788 indexers:
3790 * scriptindex:
3792   + If we fail to open the index script, die with an error (previously we
3793     acted as if an empty file was specified).
3795   + Warn about a useless "weight" action, even if it's followed by another
3796     non-useless action (e.g. "field") - previously we only warned if it
3797     was last or followed only by other useless actions.
3799   + Warn if "unique=<prefix>" is used without a corresponding
3800     "boolean=<prefix>" on the same line.
3802   + Warn that "index=nopos" is deprecated and should be replaced by
3803     "indexnopos".
3805   + Add explanatory text "(note that actions are executed from left to right)"
3806     when reporting useless actions.
3808   + Added new "hash" command to allow hashed terms to be generated from long
3809     URLs like omindex does.
3811 * htdig2omega.script,mbox2omega.script: Make use of the new scriptindex "hash"
3812   command.
3814 * dbi2omega: Check DBIDRIVER environmental variable to allow a driver other
3815   than mysql to be specified without modifying the script.
3817 omega:
3819 * Fix $opt[fieldnames] handling.  Previously it would try to kick in if you
3820   didn't set fieldnames but set any alphabetically later option!  The symptom
3821   was that $field{} would stop working (bug#72).
3823 portability:
3825 * omindex,omega: Tweaks for MSVC compilation.
3827 Omega 0.9.4 (2006-02-21):
3829 documentation:
3831 * COPYING: Updated FSF address.
3833 Omega 0.9.3 (2006-02-16):
3835 documentation:
3837 * overview.txt: The U prefix (URL term) was grouped with the date searching
3838   prefixes, but it makes more sense to group it with the prefixes relating to
3839   parts of the URL (H for hostname, P for path, etc).
3841 * overview.txt: Add pointer to documentation of the supported query syntax.
3843 * omegascript.txt: Improve descriptions of $cgi, $collapsed, $value, $version.
3845 * termprefixes.txt: Fix typo.
3847 indexers:
3849 * omindex: add --preserve-nonduplicates / -p option to not delete any documents
3850   that aren't updated, in replace duplicates mode (so that multiple runs of
3851   omindex on different subsites don't stomp on each other).
3853 * omindex,scriptindex: Add "--stemmer" option to omindex and scriptindex
3854   to allow the stemming language to be set.  Fixes bug#11.
3856 * omindex,scriptindex: More consistent --help and --version output.
3858 * omindex: Add support for OpenDocument format mimetypes and extensions out of
3859   the box.  Previously you could index them but had to pass a "-m" option for
3860   each OpenDocument filename extension you wanted to handle.
3862 * scriptindex: The "-q" option no longer actually controls anything.  Just
3863   ignore it for backwards compatibility (and don't document it in --help).
3865 omega:
3867 * If executing an OmegaScript command causes a Xapian exception to be thrown,
3868   catch it and copy the error message into error_msg (which is read by the
3869   $error command).  This allows such errors to reported in a nicer way.
3871 * Added "SORTREVERSE" CGI parameter which allows the sort order to be reversed
3872   when sorting on a value.  Removed "SORTBANDS" CGI parameter since it no
3873   longer does anything.
3875 * Added $find{LIST,STRING} to return the subscript of the first occurrence of
3876   string STRING in list LIST.
3878 * Added $lookup{CDBFILE,KEY} OmegaScript command to perform a lookup in a CDB
3879   file.
3881 * Added new feature which allows you to avoid storing fieldnames in every
3882   document.  Instead you just store the field values, one per line, and add
3883   something like "$set{fieldnames,$split{caption sample url}}" to the
3884   OmegaScript template to specify the fieldnames to use.  This can save a lot
3885   of disk space for a large database.
3887 * Add new "$split{}" OmegaScript command which splits a string to give an
3888   OmegaScript list.
3890 * Fix $url{} to escape "+" to "%2b".  Also fix encoding of top-bit-set
3891   characters on platforms where char is signed by default.
3893 * Speed up $highlight{} - only compare terms which are the same length.
3895 * Reduce memory usage if a lot of documents are marked as relevant.
3897 templates:
3899 * query: Make the page title shorter so there's more chance it will fit on icon
3900   bars, etc.
3902 * opensearch: Add missing escaping.
3904 * godmode: If a non-existent docid is specified, report the error and prompt
3905   the user to enter another docid.  Fixes bug#60.
3907 portability:
3909 * omega: Fix printf type mismatch on 64 bit platforms.
3911 * omega: Cast time_t to unsigned long to avoid problems on 64bit platforms.
3913 * Use snprintf where available.
3915 * Write top-bit set characters using \xXX notation to avoid warnings from
3916   Intel's C++ compiler.
3918 Omega 0.9.2 (2005-07-15):
3920 * omega: Changed $highlight so if OPEN and CLOSE aren't specified, they default
3921   to highlighting each word from the query with a different background colour
3922   like gmane does (previous default was to use '<strong>' and '</strong>').
3924 * omega: Call QueryParser::set_database() as this is now used to decide what to
3925   do for terms like "C#".
3927 * omega: Added the ability to set boolean prefixes for the QueryParser by
3928   setting a "boolprefix" map in the omegascript template.
3930 * omega: Added $length{} and $stoplist{} commands to OmegaScript.
3932 * scriptindex: Fix infinite loop if there's no newline at the end of a dumpfile.
3934 * docs/termprefixes.txt: Explain how to use termprefixes with scriptindex and
3935   omega, since that's what most people will want to know.
3937 * docs/omegascript.txt: Use standard "S" prefix for title in example for
3938   $setmap, rather than "XT".
3940 Omega 0.9.1 (2005-06-06):
3942 * Releases are now created using libtool 1.5.18 and automake 1.9.5.
3944 * Updated RPM packaging.
3946 Omega 0.9.0 (2005-05-13):
3948 * Updated for 0.9.0 API changes.
3950 * omindex/scriptindex: Generate terms like "c#".
3952 * Added mbox2omega script which allows a mail folder to be indexed using
3953   scriptindex.  Mostly it's an example as there's no mechanism included to show
3954   the full original message.
3956 omega:
3958 * The configuration file is now looked for differently - you can now set
3959   the environmental variable OMEGA_CONFIG_FILE.  See docs/overview.txt for
3960   details.
3962 * $highlight can now highlight terms like "C#".
3964 * Add new template 'opensearch' to implement basic opensearch feeds of search
3965   results.
3967 omindex:
3969 * URL hashing previously depended on sizeof(long) so databases weren't totally
3970   portable between platforms.  This is now fixed, but to do so we've had to
3971   break compatibility with databases built on platforms with 64 bit longs
3972   with URLs > 228 bytes.
3974 * Removed useless "DUPE_duplicate" option.
3976 * Added support for indexing Perl "pod" documentation using pod2text.
3978 * Replaced -l/--no-recurse with -l/--depth-limit which takes an argument
3979   allowing recursion to be restriction to any depth, not just 0 or infinity!
3981 * Extend -M/--mime-type to allow an existing mapping to be removed by omitting
3982   the type.
3984 * Fixed code so that we get lstat() prototype on Linux systems where we have
3985   posix_fadvise().
3987 scriptindex:
3989 * Improved handling of extra blank lines in dump file.
3991 * Strip multiple \r characters from end of line.
3993 * Complain if a dump file doesn't appear to have been = escaped correctly.
3995 * Flush database after each input file to ensure all changes from a file
3996   make it in.
3998 documentation:
4000 * docs/omegascript.txt: Clarify $field description slightly.
4002 * docs/cgiparams.txt,docs/omegascript.txt: Fixed 3 references to OmXxxx classes.
4004 * docs/termprefixes.txt: Added a single document covering all aspects of term
4005   prefixes.
4007 * docs/omegascript.txt: Moved $collapsed into correct place alphabetically!
4009 * docs/cgiparams.txt,docs/overview.txt: Improved description of how B filters
4010   are handled when building the query.
4012 * docs/scriptindex.txt: Note that actions are applied in the specified order.
4014 Omega 0.8.5 (2004-12-23):
4016 * README,INSTALL: Proper installation instructions.
4018 * omega: If an exception is thrown, make sure that the HTTP headers
4019   get written so that we don't cause "500 Internal Server Error".
4020   This problem was introduced by the change to allow a user specified
4021   Content-Type in 0.8.0.  Partly addresses bug#60.
4023 * scriptindex: Fixed "Unknown Exception" when trying to "unhtml" text which
4024   contains "</body>" (bug#61).  This bug was introduced in 0.8.4.
4026 * omindex/scriptindex: <h1> - <h6> and </h1> - </h6> now leave a space in the
4027   dumped HTML.  This bug was introduced in 0.8.4 - before that any tag left
4028   a space in the dumped HTML.
4030 * omindex: Only try to delete removed documents in "replace duplicates" mode
4031   (which is the default).
4033 * omindex: Change behaviour of crawler such that it doesn't follow symbolic
4034   links any more.  The new "--follow" command line option turns following of
4035   symlinks back on.
4037 * dbi2omega: Add a comment to the start of the file detailing what
4038   dbi2omega does.
4040 Omega 0.8.4 (2004-12-08):
4042 * omindex,scriptindex: Improved HTML to text conversion - now we strip
4043   leading and trailing whitespace and convert all other consecutive groups of
4044   whitespace to a single space.  Also the parser now knows that some tags
4045   should be regarded as word breaks and some shouldn't (previously all tags
4046   were treated as word breaks).
4048 * omindex: Removed bogus extra line from code which was meant to
4049   truncate samples, titles, etc at a word boundary, but has never actually
4050   worked!
4052 * omindex: Added hooks for indexing the following formats: OpenOffice (requires
4053   unzip), MS Word (requires antiword), Wordperfect (requires wpd2text), RTF
4054   (requires unrtf).
4056 * omindex: If a filename to be passed to a filter program has a leading "-",
4057   protect it from possible interpretation as an option by prepending "./".
4059 * omega: When there's only a boolean query we promote it to be the query.
4060   Tweaked so we use boolean weights in this case.
4062 * omega: Use Query::empty() instead of the now deprecated Query::is_empty().
4064 * omega,omindex,scriptindex: Use the new Database/WritableDatabase
4065   constructors.
4067 * templates/godmode: Finished off godmode template.
4069 * Compile everything as C++.
4071 * Check snprintf actually works - some older versions don't implement C90
4072   snprintf semantics.
4074 * XAPIAN_FLAGS already links with xapianqueryparser so remove
4075   -lxapianqueryparser from omega_LDADD as it was causing link errors on cygwin.
4077 Omega 0.8.3 (2004-09-20):
4079 * scriptindex: --version now actually reports the version.  --help now exits
4080   with status 0 rather than status 1.
4082 * RPM packaging: Updated.  The most notable change is that the RPM is now
4083   called xapian-omega because there's already an omega RPM (in Fedora Core at
4084   least) which is a game.  Also htdig2omega and htdig2omega.script are now
4085   included in the RPM.
4087 * Install htdig2omega.script in ${prefix}/share/omega/ rather than
4088   ${prefix}/share/.
4090 Omega 0.8.2 (2004-09-13):
4092 * omega: $highlight now handles accented characters (bug#9).
4094 * omega: Use new checkatleast parameter to Enquire::get_mset to implement
4095   MINHITS.
4097 * omindex: When running with "replace duplicates" mode (the default), detect
4098   documents removed since the last indexing run and delete them from the
4099   database (bug #34).
4101 * omindex: Use the new WritableDatabase::replace_document(term, doc) method.
4103 * scriptindex: Report index script file name and line number when
4104   reporting errors in it.  Added warning for redundant actions,
4105   such as "truncate" as the last action in a rule.
4107 * templates/query: Always report if the database is not found - previously we
4108   only did so if there was a query.
4110 * templates/query: Fixed missing </center> tag which happened in certain cases.
4112 * docs/omegascript.txt: Added note about that $add{$hit,1} gives
4113   the "hit number".
4115 * Now includes htdig2omega and htdig2omega.script which allow you to crawl
4116   remote websites with ht://dig, then build a searchable index of them with
4117   Xapian and Omega.
4119 * Link with -lxapianqueryparser, not -lomqueryparser.
4121 Omega 0.8.1 (2004-06-30):
4123 * omindex: Renamed hash() to hash_string() to avoid colliding with something
4124   on IRIX.
4126 * omega: Changed MORELIKE to pick up to 40 terms, rather than up to 6 (feedback
4127   on the mailing list suggests this gives much better results).
4129 * scriptindex: Added explicit catch for std::bad_alloc.
4131 Omega 0.8.0 (2004-04-19):
4133 * scriptindex: Change default to *not* overwriting the database (use
4134   --overwrite if you really want to do this); -u is now accepted but ignored.
4136 * scriptindex: Use getopt for option parsing.
4138 * omindex: Added --overwrite option which forces an existing database to be
4139   deleted before indexing begins.
4141 * templates/xml: Correct spelling of `relavence' to `relevance'.  NB: if you're
4142   parsing the XML output, you'll need to fix this spelling in your parser!
4144 * templates/xml: Now set HTTP header: "Content-Type: application/html".
4146 * templates/xml: Remove unused OmegaScript code:
4147   `$set{topterms,$or{$ne{$msize,0},$query}}'.
4149 * indextext.cc,omindex.cc,scriptindex.cc: Updated to use add_term() instead of
4150   add_term_nopos().
4152 * omega: Added $httpheader Omegascript to allow arbitrary HTTP headers and
4153   alternative Content-Type headers to be specified.
4155 * omega: If the probabilistic query was bad, don't try to run the match.
4157 * omega: Don't crash if there's a date filter but no probabilistic query.
4159 * omindex/scriptindex: Raw terms with a multicharacter prefix are now indexed
4160   with a : inserted (e.g. as XFOO:Rterm).  This matches what the query parser
4161   does.
4163 * omindex/scriptindex: Don't create R terms for terms which start with a digit.
4165 * omindex: Use O_STREAMING and/or posix_fadvise() when reading files to be
4166   indexed (if available).  This helps to keep the Xapian database in cache,
4167   and should greatly improve indexing throughput.
4169 * docs/scriptindex.txt: Make more explicit that boolean produces a *single*
4170   boolean term.
4172 * docs/cgiparams.txt: Note that START and END should be in the format YYYYMMDD.
4174 For NEWS entries for Omega versions prior to 0.8.0, see the xapian-core NEWS
4175 file.