============ 3.7.3 ============

2020-11-24 Ulrik Sandborg-Petersen

	* tests/qa2h.py: Fix a Python3 compatibility in making
	tests/mqlqa.h and tests/bptqa.h.

	* Fix Python 3 compatibility in mqltry and bpttry.

	modified:   tests/Makefile.am
	modified:   tests/bptqa2h.py
	modified:   tests/qa2h.py

2020-06-03 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.3.

	* sqlite3/: Update to SQLite3 version 3.32.1 from 2020-05-25.

	modified:   sqlite3/sqlite3_emdros.1
	modified:   sqlite3/src/shell.c
	modified:   sqlite3/src/sqlite3.c
	modified:   sqlite3/src/sqlite3.h
	modified:   sqlite3/src/sqlite3ext.h

	* sqlite3/tool/: Update to lemon.c and lempar.c from SQLite
	version 3.32.1.

============ 3.7.2 ============

2020-05-13 Ulrik Sandborg-Petersen

	* Update build scripts for Python 3 compatibility:

	modified:   ChangeLog
	modified:   doc/progref/buildhtb.py
	modified:   generate_extrafiles.py.in
	modified:   tests/bptqa2h.py
	modified:   tests/file2h.py
	modified:   tests/qa2h.py

2019-07-12 Ulrik Sandborg-Petersen

	* tests/emdftry.cpp: Test for more test cases in testing
	split_string() from libemdf's string_func.cpp: We have so far
	neglected to test that it does the right thing when a string
	starts or ends with one of the split characters.  In fact, it was
	testing this, and getting the result wrong.

	* EMdF/string_func.cpp: Fix bugs in split_string(): When the input
	contains only splitstring chars, return a list containing the
	empty string. When the input begins with one or more splitchars,
	prepend the empty string. When the input ends with one or more
	splitchars, and does not consist solely of splitchar chars, also
	append the empty string.

	* tests/emdftry.cpp: Also test for the case that the input only
	consists of chars from the splitchars string.

	* EMdF/string_func.cpp: Fix bug occurring when the input consists
	solely of chars from the splitchars string.

2019-06-03 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.2

============ 3.7.1 ============

2019-06-03 Ulrik Sandborg-Petersen

	* generate_extrafiles.py.in: Add wildcarde to the following two
	lines, so that pyc and pyo are installed if available.  This is
	necessary on CentOS 7, where the EmdrosPy.pyc and EmdrosPy.pyo
	files are automatically created.

	@SWIG_WITH_PYTHON2_WRAPPERS_TRUE@"%{prefix}/lib/emdros/EmdrosPy.py*"
	@SWIG_WITH_PYTHON3_WRAPPERS_TRUE@"%{prefix}/lib/emdros/EmdrosPy3.py*"

2019-05-24 Ulrik Sandborg-Petersen

	* win32/Makefile.am: Fix non-portable GNU make extension, so that
	the Makefile becomes portable.

2019-05-17 Ulrik Sandborg-Petersen

	* wx/vtreecanvas.cpp, include/vtreecanvas.h: Fix scrolling issues
	and repainting issues on macos with wxWidgets 3.1.2.

2019-05-10 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.1.

============ 3.7.0 ============

2019-05-10 Ulrik Sandborg-Petersen

	* Windows: Gave the MinGW build machinery an overhaul, so that it
	works again.  Also, documented how to use it.

	modified:   SWIG/mingw.mak
	modified:   amalgamation/mingw.mak
	modified:   include/mingw.mak
	modified:   pcre/mingw.mak
	modified:   src/importtool/mingw.mak
	modified:   src/mingw.mak
	modified:   tests/mingw.mak
	new file:   win32/README.MinGW.Windows.txt
	modified:   win32/mingw-body.mak
	modified:   win32/mingw.mak

	* win32/Makefile.am: Distribute README.MinGW.Windows.txt.

	* win32/win32.mak: Distribute the doc\man5\*.html files.

	* src/win32.mak: Don't build negraimport.exe twice. Do build
	tigerxmlimport.exe.

	* include/win32.mak: Invocation of erase now uses /q instead of
	-q.

	* MinGW: Improve the MinGW build support on Windows.

	modified:   amalgamation/mingw.mak
	modified:   include/mingw.mak
	modified:   sqlite3/src/mingw.mak
	modified:   win32/mingw-body.mak
	modified:   win32/mingw.mak

	* win32/win32.mak: As part of the CLEAN target, remove all
	ReleaseUnicode{2,3,4,5,6,7} and DebugUnicode{2,3,4,5,5,6,7}
	directories in win32\.

2019-05-09 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.

	* emdros.spec.in: Remove commented-out #BuildRoot line, in order
	to get rid of an rpmbuild warning on Fedora 30.

	* emdros.spec.in: Fix bogus date in specfile changelog, in order
	to get rid of an rpmbuild warning on Fedora 30.

	* generate_extrafiles.py.in: Don't try to distribute non-installed
	Emdros{Py,Py3}.{pyc,pyo} files.  This would otherwise cause a
	build failure on Fedora 30.

	* m4/emdros_mysql.m4: Bugfix: If MySQL libraries are not found,
	and the user specified --with-mysql=maybe (or didn't have
	--with-mysql switch at all, which is the default), don't fail with
	an error message. Instead, just don't do MySQL.

	* src/importtool/win32.mak: Fix BUILD_FOR_DEVEL=1 build by linking
	against "$(OUTDIR)\libemdros_importers.lib".

	* win32/emdros.nsi.in: Don't try to distribute no-longer-existing
	file "doc\README.MySQL.Win32.txt".

	* harvest/templatelang_classes.cpp: Fix warning on Visual Studio's
	compiler on X64, related to std::string::size_type vs. long.

	* m4/emdros_swig.m4: Don't include code to test for PHP5.  PHP5
	support was removed in 3.7.0.pre04, due to the end of life status
	of PHP5.

	* m4/emdros_swig.m4: Don't ignore the following switches:

	--with-swig-language-python2=no
	--with-swig-language-python3=no
	--with-swig-language-php7=no
	--with-swig-language-csharp=no
	--with-swig-language-java=no

	--without-swig-language-python2
	--without-swig-language-python3
	--without-swig-language-php7
	--without-swig-language-csharp
	--without-swig-language-java

	That is, reinstate the correct behavior.

	* harvest/templatelang_classes.cpp: Fix bugs introduced earlier
	today in the code which handles substrings.

	* win32/config.mak.in: Replace "!endif" with "!ENDIF".

	* win32/mingw-config.sed: Initial addition.

	* win32/Makefile.am: Add rule to make target "mingw-config.mak"
	from "config.mak" using "mignw-config.sed", and distribute the
	result.  It changes the Visual Studio NMAKE syntax to MinGW make
	syntax.

	* Windows: Change all mingw.mak files to use the new
	mingw-config.mak, not config.mak.  This is necessary since we have
	added Visual Studio NMAKE syntax to config.mak.

	Files affected:

	modified:   EMdF/mingw.mak
	modified:   MQL/mingw.mak
	modified:   SWIG/mingw.mak
	modified:   amalgamation/mingw.mak
	modified:   harvest/mingw.mak
	modified:   importers/mingw.mak
	modified:   include/mingw.mak
	modified:   pcre/mingw.mak
	modified:   sqlite3/mingw.mak
	modified:   sqlite3/src/mingw.mak
	modified:   src/importtool/mingw.mak
	modified:   src/mingw.mak
	modified:   src/qrytool/mingw.mak
	modified:   tests/mingw.mak
	modified:   util/mingw.mak
	modified:   win32/mingw.mak
	modified:   wx/mingw.mak
	modified:   zlib/mingw.mak

	* win32/mingw.mak: Update the section that copies header files
	etc. from MySQL, mirroring win32/win32.mak.

============ 3.7.0.pre20 ============

2019-04-22 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre20.

	* zlib/win32.mak, zlib/mingw.mak: Build the liz_emdros.lib/.a
	library if BPT == 1.

============ 3.7.0.pre19 ============

2019-04-22 Ulrik Sandborg-Petersen

	* m4/emdros_mysql.m4: Make detection of MySQL libraries and
	headers work better, especially on macOS with HomeBrew.

	* emdros.pc.in, m4/emdros_mysql.m4, m4/emdros_postgresql.m4:

	Rename as follows:

	- MYSQL_DASH_INCLUDE => MYSQL_CFLAGS
	- POSTGRESQL_DASH_INCLUDE => POSTGRESQL_CFLAGS

	* include/emdfdb.h, EMdF/emdfdb.cpp: Rename the non-public
	EMdFDB::getInst() => EMdFDB::doGetInst().  This is so as to avoid
	warnings about hiding virtual functions in descendant classes,
	such as BPTEMdFDB.  Especially the Solaris CC compiler complained
	about this.

2019-04-20 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Fix compilation error on compilers
	(such as Solaris 10 CC) which do not understand how to convert
	const char* to std::string in a template.

2019-04-19 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre19.

	* m4/emdros_postgresql.m4: Try harder to find libpq-fe.h, using
	AC_CHECK_HEADER.  This is in preparation for being able to make a
	Homebrew Formula.

	* m4/emdros_mysql.m4: Try harder to find mysql.h and
	libmysqlclient.so, also looking for mysql_config and using it if
	available.

============ 3.7.0.pre18 ============

2019-04-19 Ulrik Sandborg-Petersen

	* m4/emdros_macos.m4, m4/emdros_wx.m4

	- On macOS, do --universal_binary even if we are not doing wxWidgets.

	- Refactor the setting of arch flags and isysroot completely.

	- Remove the option of doing wxWidgets with WX_NONUNICODE.

	* tests/Makefile.am: Remove the last vestiges of being able to do
	WX_NONUNICODE builds.

	* Makefile.am: Rename MACOSX_VERSION_MIN to the new
	MACOS_VERSION_MIN.

	* m4/emdros_macos.m4: If the user selects
	--enable-universal_binary on macOS, and does not select either
	--enable-dependency-tracking or --disable-dependency-tracking,
	then we do as if --disable-dependency-tracking was specified.
	This is required for --enable-universal_binary to work.

	* m4/emdros_macos.m4: Properly support building on macOS 10.14.

	* INSTALL.Mac.txt: Update with instructions for macOS 10.14.
	Also, update the example of compiling wxWidgets so it uses the
	latest version of wxWidgets (3.1.2).

	* m4/emdros_macos.m4: AC_SUBST(MACOS_VERSION_MIN).

	* EMdF/bptemdfdb.cpp, include/bptemdfdb.h: Silence some warnings
	about overloaded, hidden virtual functions.  These were due to not
	keeping the BPTEMdFDB interface in sync with the EMdFDB interface.

	* include/emdf_hash.h: Silence a clang warning:

	../include/emdf_hash.h:78:29: warning: unused parameter 'value' [-Wunused-parameter]

	* WarningSilenceHunt:

	- include/layout.h, wx/layout.cpp: Add a virtual function
	LayoutItem::doToHTML() which takes three parameters, and make
	LayoutItem::toHTML take two parameters.  Make it so throughout the
	hierachy, except those toHTML functions which do take two
	paramters.

	- wx/htreecanvas.cpp: Use the new doToHTML() where requisite.

	- include/htreecanvas.h, wx/htreecanvas.cpp: Change the signature
	of HTreeCanvas::PrepareDC so it uses a wxDC& instead of a wxDC*.

	- include/htreecanvas.h, wx/htreecanvas.cpp: If on wxWidgets >=
	3.0.0, rename HTreeCanvas::PrepareDC to HTreeCanvas::DoPrepareDC.

	- include/importerwizard.h: Remove unused field
	ImportDatabaseWizardPage::m_pSFMTextCtrl.

	- include/browsewidget.h, wx/browsewidget.cpp: Remove unused field
	BrowseWidget::m_pParent.

	- include/vtreecanvas.h, wx/vtreecanvas.cpp: If on wxWidgets >=
	3.0.0, rename VTreeCanvas::PrepareDC to VTreeCanvas::DoPrepareDC.

	- include/leftrightchooser.h, wx/leftrightchooser.cpp: Remove
	unused field LeftRightChooser::m_pParent.

	* src/qrytool/output_style.h, src/qrytool/output_style.cpp:
	Silence warning:

	- Remove Tree_Output_style::print_reference(const Solution
	*pSolution).

	- Add Tree_Output_style::print_solution_reference(const Solution
	*pSolution).

	- Add Tree_Output_style::print_reference(const std::string&
	reference);

	- Call Tree_Output_style::print_solution_reference(const Solution
	*pSolution) where requisite.

	- Change the signature of start_raster_unit_row() to include the
	reference.

	- src/qrytool/wxilqtout.h, src/qrytool/wxilqtout.cpp,
	src/qrytool/mainframe.cpp: Rename
	WXILLayoutCanvas::InitializeViewMetrics() to
	WXILLayoutCanvas::InitializeInterlinearViewMetrics().

	* tests/emdtry.cpp: Silence a clang warning.

	* src/importtool/importtool.cpp: Silence some 'unused parameter'
	warnings.

2019-04-18 Ulrik Sandborg-Petersen

	* wx/importerwizard.cpp: Fix debug asserts on wxWidgets 3.1.2
	related to the misuse of wxALIGN_CENTER_VERTICAL in a
	wxBoxSizer(wxVERTICAL).

	* wx/importerwizard.cpp: Solve more debug asserts with wxWidgets
	3.1.2.

2019-04-17 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre18.

	* zlib/win32.mak, zlib/mingw.mak: Always build ..\include\zconf.h
	and ..\include\zlib_emdros.h.  Only build libzlib_emdros.{a,lib}
	if we are doing USE_BPT=1.  Otherwise, we won't be able to build
	the amalgamation when USE_BPT != 1.

	* win32/win32.mak, win32/mingw.mak: Always enter ..\zlib and make
	the directory, even if we are not doing BPT.

	* m4/emdros_wx.m4: Reinstate -arch i386 on macOS 10.13.  It is on
	10.14 that we should no longer do -arch i386.

============ 3.7.0.pre17 ============

2019-04-16 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre17.

	* harvest/templatelang.yxx: Fix the "template_string" production
	to also include the "bare" keywords introduced in 3.7.0.pre14:

	- KEY_BARE_ATTRIB
	- KEY_BARE_ATTRIBNOMANGLE
	- KEY_BARE_FEATUREJSONMANGLE
	- KEY_BARE_MAXLENGTH
	- KEY_BARE_SUBSTRING
	- KEY_BARE_FROM
	- KEY_BARE_TO

============ 3.7.0.pre16 ============

2019-04-16 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre16.

	* tests/test_json/known_good_output/testerror2.txt: Update with
	the changes necessitated by the enhancement of include/mql_yylex.h
	in 3.7.0.pre15.

	* tests/mqlqa.h.in, tests/bptqa.h.in: Update with the changes
	necessitated by the enhancement of include/mql_yylex.h in
	3.7.0.pre15.

============ 3.7.0.pre15 ============

2019-04-16 Ulrik Sandborg-Petersen

	* RenderObjects: Add new key "monad_feature" alongside "start",
	"end", "docindexfeature", and "get" in the fetchinfo stylesheets.
	This sets the monad feature to use for retrieving objects, and
	defaults to "monads".

	Files affected:

	modified:   doc/progref/Content.txt
	modified:   doc/progref/config.py.in
	modified:   harvest/renderobjects.cpp
	modified:   include/renderobjects.h

2019-04-12 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre15.

	* include/mql_yylex.h: Enhance Token::getTokenName() so that it
	emits better diagnostics, such as when used in syntax error
	contexts.

	* EMdF/json_classes.cpp: When creating a JSONValue from a
	JSONKeyValuePair *pTail (i.e., a JSON object), guard against
	adding keys that are already there, deleting the former entry and
	replacing it with the new, if present.

============ 3.7.0.pre14 ============

2019-04-12 Ulrik Sandborg-Petersen

	* harvest/renderxml.cpp: Fix memory leaks in XML2HTMLDocHandler.

2019-04-08 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre14.

	* doc/progref/Content.txt: Document the hitherto-undocumented {{
	featurejsonmangle }} harvest template.

	* doc/progref/Content.txt: Document the upcoming setvar substring
	templates for the harvest template language.

	* HarvestLib: Implement new templates

	{{ setvar 'output-var-name' substring var 'input-var-name' from /startindex/ maxlength /max-length/ }}
	{{ setvar 'output-var-name' substring feature /feature-index/ from /startindex/ maxlength /max-length/ }}
	{{ setvar 'output-var-name' substring featurejsonmangle /feature-index/ from /startindex/ maxlength /max-length/ }}
	{{ setvar 'output-var-name' substring featurenomangle /feature-index/ from /startindex/ maxlength /max-length/ }}

	* HarvestLib: Also implement 'attrib' and 'attribnomangle'
	variants of the setvar substring template:

	{{ setvar 'output-var-name' substring attrib 'input-attrib-name' from /startindex/ maxlength /max-length/ }}
	{{ setvar 'output-var-name' substring attribnomangle 'input-attrib-name' from /startindex/ maxlength /max-length/ }}

============ 3.7.0.pre13 ============

2019-04-08 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre13.

	* importers/win32.mak, importers/mingw.mak: Fix order of importing
	config.mak and using its variables.

	* src/importtool/win32.mak, src/importtool/mingw.mak: Adjust to
	the new reality of the BUILD_FOR_DEVEL variable.

============ 3.7.0.pre12 ============

2019-04-06 Ulrik Sandborg-Petersen

	* zlib/: Remove redundant files zlib/zconf.h.win32 and
	zlib/zconf.h.mingw. As of yesterday, they are simply copies of
	zconf.h, so we might as well remove this redundancy.

	Files affected:

	modified:   zlib/Makefile.am
	modified:   zlib/mingw.mak
	modified:   zlib/win32.mak
	deleted:    zlib/zconf.h.mingw
	deleted:    zlib/zconf.h.win32

	* pcre/win32.mak: Build the targets "pcre_config_h" and
	"pcre_emdros_h" even when BUILD_FOR_DEVEL is non-1.

	* pcre: Clearer division of labor on Windows between
	pcre/win32.mak and include/win32.mak, as well as pcre/mingw.mak
	and include/mingw.mak.

	In particular, include/pcre_emdros.h and include/pcre_config.h are now made in include/win32.mak or include/mingw.mak.

	Similarly, pcre/pcre_config.h is made in pcre/win32.mak or
	pcre/mingw.mak.

2019-04-05 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre12.

	* win32/config.h.win32: Don't #define HAVE_UNISTD_H, since the
	convention is to leave it undefined, not define it to 0.  zconf.h
	needs this.

	* zlib/zconf.h.win32, zlib/zconf.h.mingw: Also upgrade these to
	ZLib version 1.2.11 from 2017.  These had been accidentally not
	upgraded when we upgraded ZLib back in Emdros version 3.7.0.pre04.

	* amalgamation/amalgamation.xml: Add include/zconf.h to the list
	of header files for the C++.  This is necessary on Windows, where
	we don't have a system-wide ZLib.

	* include/Makefile.am: Always make zconf.h, but don't distribute
	it.  This is due to the addition of include/zconf.h to
	amalgamation/amalgamation.xml.

============ 3.7.0.pre11 ============

2019-04-05 Ulrik Sandborg-Petersen

	* include/get_version.cpp: Initial addition.

	This program is meant to be run on Windows. It reads
	..\configure.ac and finds the Emdros version.  It then emits
	#defines to std::cout, appropriate for generating
	emdros-lconfig.h.in.

	* include/Makefile.am: Add get_version.cpp to EXTRA_DIST.

	* include/get_version.cpp: Make it compile with MS Visual Studio
	C++ compiler.

	* win32/README.txt: Update slightly.

	* win32/config.h.win32: Remove the #define VERSION line.  It had
	not been updated since version 1.0.0, and was not being used.

	* win32/Makefile.am: Don't make the file win32/lconfig.h.win32,
	and don't distribute this file, nor distribute
	win32/lconfig.h.win32.in.

	These files are about to be obsoleted.

	* win32/lconfig.h.win32.in: Remove this file.  It is about to be
	obsoleted.

	* include/emdros-lconfig.h.in, include/win32.mak, include/mingw.mak:

	This change is about Windows.

	Don't #include the file "win32-lconfig.h" in emdros-lconfig.h.in.
	Instead, make that file, and copy it + the contents of
	emdros-lconfig.h.in into emdros-lconfig.h in the Windows
	makefiles.

	Also, in include/win32.mak and in include/mingw.mak, make the
	program .\get_version.exe from include\get_version.cpp.  Then use
	this program to build the win32-lconfig.h as it pertains to the
	EMDROS_VERSION #define and friends (EMDROS_VERSION_MAJOR,
	EMDROS_VERSION_MINOR, EMDROS_VERSION_RELEASE).

	* amalgamation/win32.mak, amalgamation/mingw.mak: Build the right
	object files with the right names.

	Also, build amalgamation\emdros-lconfig.h from
	..\include\emdros-lconfig.h.

	* win32/config.mak.in: Add the configuration variable
	BUILD_FOR_DEVEL.  If set to 1 (which is the default), then all of
	the Emdros libraries are built as usual.  Otherwise, if it is
	empty (or non-1), then only the amalgamation is built and used.

	Note that the libsqlite3_emdros.lib library is built even if
	BUILD_FOR_DEVEL is non-1.  This is because we need to build
	sqlite3_emdros.exe, which depends on this library.

	Files affected:

	modified:   EMdF/mingw.mak
	modified:   EMdF/win32.mak
	modified:   MQL/mingw.mak
	modified:   MQL/win32.mak
	modified:   harvest/mingw.mak
	modified:   harvest/win32.mak
	modified:   pcre/mingw.mak
	modified:   pcre/win32.mak
	modified:   src/mingw.mak
	modified:   src/qrytool/mingw.mak
	modified:   src/qrytool/win32.mak
	modified:   src/win32.mak
	modified:   tests/mingw.mak
	modified:   tests/win32.mak
	modified:   util/mingw.mak
	modified:   util/win32.mak
	modified:   win32/config.mak.in

	* win32/README.txt: Document the new BUILD_FOR_DEVEL variable.

	* importers/win32.mak, importers/mingw.mak: Support the new
	BUILD_FOR_DEVEL variable in this directory as well.

	* tests/win32.mak, tests/mingw.mak: Add test targets on Windows.

	* win32/win32.mak: Add target 'test', and call this as part of the
	'dist' target.

	* win32/win32.mak: Distribute the Emdros amalgamation library.

	* win32/config.mak.in, win32/win32.mak: Add ability to define all
	configuration variables on the command line when invoking nmake.

	* sqlite3/src/sqlite3.c, sqlite3/src/sqlite3.h: Update to SQLite
	version 3.27.2 from 2019-02-15.

	* win32/mingw.mak: Add target 'test', and let 'dist' depend on it.

2019-03-06 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre11.

	* m4/emdros_swig.m4: Enable compilation of Python2 SWIG bindings
	from a release tarball even when the swig(1) program is not
	available.

============ 3.7.0.pre10 ============

2019-03-05 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre10.

	* debian/control: Add missing "python" package to Build-Depends.

	* INSTALL: Add missing "python" package to requirements on Ubuntu.

	* INSTALL: Mention how to compile a .deb on Raspberry Pi, or other
	memory-constrained systems.

	* amalgamation/amalgamation.xml, amalgamation/Makefile.am: Move
	the source files in util/ from the main amalgamation into the
	amalgamation containing the importers.

	Also, rename the non-core-Emdros amalgamation file from

	emdros_amalgamation_2_importers.cpp

	to

	emdros_amalgamation_2_importers_util.cpp

	This was done because:

	a) The Raspberry Pi model 3B (+) only has 1GiB of RAM.  This was
	barely enough to compile the amalgamation when the util/ files
	were togehter with EMdF, MQL, and harvest.  Moving the util/ files
	makes it easier to compile on Raspberry Pi.

	b) The util/ files are not essential to running Emdros.  They are
	essential to running the programs that come with Emdros, such as
	mql(1) and renderobjects(1).  However, if a user wants to compile
	Emdros only, such as for a mobile device (Android/iOS), then this
	is easier now.

============ 3.7.0.pre09 ============

2019-03-02 Ulrik Sandborg-Petersen

	* MQL/mql_query.cpp: In ObjectBlock::getSMI(), make the MQL engine
	much faster if the ObjectBlock is prefixed by NOTEXIST, and is the
	only block in the surrounding BlockString.

	* include/mql_query.h: Add new method,
	ObjectBlock::isLastInBlockString().

	* EMdF/inst.cpp: In Inst::begin(), don't attempt to advance the
	iterator, but just set it according to the Universe's first
	monad. This was done before as an optimization, but resulted in
	having to set the last monad of the Universe too high if we were
	doing a monad set relation other than part_of, such as overlap()
	or starts_in().

	* MQL/mql_query.cpp: Obtain a substantial speed gain for monad set
	relations "overlap" and "starts_in", by tweaking
	ObjectBlock::getSMI().  This was enabled by the change in
	EMdF/inst.cpp.

	* MQL/mql_query.cpp, include/mql_query.h, MQL/mql_R.cpp: Today's
	previous change to NOTEXIST resulted in wrong behavior in some
	cases.  Hence, the conditions were changed slightly, so that
	ObjectBlock::getSMI() only made the NOTEXIST-optimization if the
	call was made indirectly from BlockString.

	If, instead, we called ObjectBlock::getSMI() from the NOTEXIST
	part of mql_R.cpp's R_block(), then we should not make the
	optimzation, as this would result in not checking the entire
	Substrate for the non-existence of the NOTEXIST object block, but
	only the first monad.

	* MQL/mql_query.cpp, include/mql_query.h: Extend the processing of
	the topograph with the knowledge of whether a BlockString consists
	solely of NOTEXIST object blocks.  This is done through adding
	methods called

	XYZ::hasOnlyNOTEXISTObjectBlocksInBlockString()

	to the hierarchy below Blocks, then calling that in Blocks::weed()
	and adding a boolean to all the weed() methods below the Blocks
	class.  This is then passed on, and set in ObjectBlock::weed() as
	ObjectBlock::m_bBlockStringHasOnlyNOTEXIST.

	* MQL/mql_query.cpp: Enhanced the optimization in
	ObjectBlock::getSMI() for NOTEXIST, so that it also works when the
	BlockString consists solely of more than one NOTEXIST object
	block, and not just when there is only one NOTEXIST object block.

2019-02-27 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre09.

	* INSTALL: Mention that the package "python" is necessary on
	Fedora for building after a make clean of make distclean.

	* INSTALL: Mention the necessity of the packages "xdg-utils" and
	"desktop-file-utils" on Fedora for building after a "make clean"
	or "make distclean".

	* NEWS: Rearrange slightly, with better wording.

	* NEWS: Mention the emdros.pc pkg-config file, which is new in the
	3.7.0 release.

============ 3.7.0.pre08 ============

2019-02-26 Ulrik Sandborg-Petersen

	* m4/emdros_banner.m4, m4/emdros_buildenv_env.m4: Fix bug:
	USE_AMALGAMATION should be tested for equalityt with "1", not
	"yes".  This caused problems compiling on Ubuntu 16.04 LTS when
	the BPT engine was included.

	* include/emdf.h: Add typedefs for emdros_i8 and emdros_u8.

	* include/lzma_emdros.h, EMdF/lzma_emdros.cpp: Don't #include
	<cstdint>.  Instead, use the new emdros_u8 the existing emdros_u32
	in place of uint8_t and uint32_t.

	This improves compatibility with those platforms which do not have
	or do not by default enable a C++11 compiler.

2019-02-15 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre08.

	* README-Emdros-on-Android.txt: Remove the outdated instructions,
	and write an overview.  TODO: Write how to actually do it.

	* README-Emdros-on-iOS.txt: Update the instructions to be correct
	as of today's date.

============ 3.7.0.pre07 ============

2019-02-15 Ulrik Sandborg-Petersen

	* sqlite3/VERSION: Remove this text file, since:

	a) It had not been updated for a while (Ulrik had forgotten to do
	so), and

	b) Its contents were not being used anywhere, and

	c) So it was a maintenance burden, and also completely
	unnecessary.

	Files affected:


	modified:   m4/emdros_sqlite3.m4
	modified:   sqlite3/Makefile.am
	deleted:    sqlite3/VERSION
	modified:   sqlite3/src/Makefile.am

	* src/qrytool/mainframe.h, src/qrytool/mainframe.cpp:

	Attempt to reinstate compilability with wxWidgets 2.8, by
	declaring MainFrame::m_pEditWindow to be a wxTextControl under
	wxWidgets >= 2.8.0 && < 3.0.0, and to be a wxStyledTextCtrl under
	wxWidgets >= 3.0.0.

	* sqlite3/src/sqlite3.c: Upgrade to version 3.27.1 (2019-02-08)
	from www.sqlite.org.

	Files affected:

	modified:   sqlite3/src/shell.c
	modified:   sqlite3/src/sqlite3.c
	modified:   sqlite3/src/sqlite3.h
	modified:   sqlite3/src/sqlite3ext.h

	* sqlite3/tool/Makefile.am: Don't copy lempar.c to sqlite3/src/.
	This is no longer necessary, and has not been since the beginning
	days of the SQLite3 amalgamation.

	* sqlite3/tool/lemon.c, sqlite3/tool/lempar.c: Update to the
	latest lemon version, from the SQLite3 sources for SQLite 3.27.1
	(2019-02-08).

	* BPT2: Remove all references to the BPT2 engine.

	This is done for two reasons:

	1) Legal, financial constraints arising out of contractual
	obligations with Ulrik's former employer make it unlikely that the
	BPT2 engine can reach its full financial potential.  It is better
	to reimplement the best of the ideas without legal encumbrances.

	Such a re-implementation will not be called 'BPT version 2', to
	minimize confusion.

	PLEASE NOTE: The legal difficulties are of a financial nature
	only, not an IP rights nature.  Ulriks' holding company owns the
	full Intellectual Property Rights to the BPT engine, including
	both versions 1 and 2.

	2) Therefore, the current stubs in the Emdros code for BPT version
	2 are a maintenance burden, not to mention code bloat.  There is
	no code like No Code.

	Files affected:

	modified:   EMdF/Makefile.am
	modified:   EMdF/mingw.mak
	modified:   EMdF/string_func.cpp
	modified:   EMdF/win32.mak
	modified:   INSTALL
	modified:   MQL/emdros_environment.cpp
	modified:   MQL/mql_database_statements.cpp
	modified:   amalgamation/amalgamation.xml
	modified:   configure.ac
	modified:   emdros.spec.in
	modified:   include/Makefile.am
	modified:   include/Makefile.inc
	modified:   include/emdf_enums.h
	modified:   include/emdros-lconfig.h.in
	modified:   include/mingw.mak
	modified:   m4/emdros_banner.m4
	modified:   m4/emdros_buildenv_end.m4
	modified:   src/bptdump.cpp
	modified:   tests/bpttry.cpp
	modified:   tests/mqltry.cpp
	modified:   util/Makefile.am
	modified:   util/messages.cpp
	modified:   util/mingw.mak
	modified:   util/opt.cpp
	modified:   util/win32.mak
	modified:   win32/body.mak
	modified:   win32/config.mak.in
	modified:   win32/lconfig.h.win32.in
	modified:   win32/win32.mak

2019-02-14 Ulrik Sandborg-Petersen

	* amalgamation/mkamalgamation.cpp: Fix bug in fout.open: Use
	"m_name.c_str()" instead of "m_name", thus making Sun's CC
	compiler happy.

	* src/qrytool/mainframe.h, src/qrytool/mainframe.cpp: Hopefully
	reinstate compileability with wxWidgets 2.8, by adding a new
	method:

	wxString MainFrame::GetEditWindowText()

	This checks for the wxWidgets version, and does the right thing
	for wxWidgets >= 2.8 vs. 3.0.

2019-02-13 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre07.

	* src/qrytool/consout.cpp: In ConsoleQTOutput::printFeature(),
	mark the object_type_name parameter as UNUSED, thus silencing a
	warning.

	* tests/emdftry.cpp: Silence some 'unused parameter' warnings in
	the case that USE_POSTGRESQL and USE_MYSQL are both false.  This
	is a plausible scenario, if we are compiling for SQLite3 only, for
	example.

	* zlib/pcre_emdros.h.win32: Removed redundant file.

============ 3.7.0.pre06 ============

2019-02-13 Ulrik Sandborg-Petersen

	* include/emdros-version.h.in, include/version-emdros.h: Remove,
	and move the following definitions to include/emdros-lconfig.h.in:

	EMDROS_VERSION
	EMDROS_VERSION_MAJOR
	EMDROS_VERSION_MINOR
	EMDROS_VERSION_RELEASE

	This was done because emdros-lconfig.h is part of the
	amalgamation, but version-emdros.h is not.  Thus third-party
	applications using the amalgamation would have a hard time
	#include'ing the amalgamation, since version-emdros.h might not be
	available.

	The resolution has the effect of reducing the dependencies.

	Files affected:

	deleted:    include/emdros-version.h.in
	modified:   configure.ac
	modified:   .gitignore
	modified:   MQL/emdros_environment.cpp
	modified:   amalgamation/amalgamation.xml
	modified:   include/Makefile.am
	modified:   include/Makefile.inc
	modified:   include/emdf.h
	modified:   include/emdros-lconfig.h.in

	* configure.ac, debian/changelog: Bump to 3.7.0.pre06.

	Ulrik realized he had already released 3.7.0.pre05.

============ 3.7.0.pre05 ============

2019-02-06 Ulrik Sandborg-Petersen

	* m4/emdros_solaris.m4: Move various definitions into a new file,
	m4/emdros_solaris_end.m4.  This so as not to set some variables
	before using them.

	* configure.ac: Invoke EMDROS_SOLARIS_END towards the end.

	* m4/emdros_buildenv_end.m4: Regarding the variables
	ADDITIONAL_CXXFLAGS and ADDITIONAL_CFLAGS:

	- If we are on Solaris + the Sun CC compiler, don't alter them.
	- Else, if the user has already set them, don't alter them.
	- Else, only set them if we are on the GNU g++ compiler.

	* amalgamation/mkamalgamation.cpp: Fix bug in fin.open: Use
	"source_pathname.c_str()" instead of "source_pathname", thus
	making Sun's CC compiler happy.

	* EMdF/sqlite3emdfdb.cpp: #include <sqlite3conn.h>
	unconditionally. Otherwise, the Amalgamation will fail when we
	compile without SQLite3 support.

	* debian/docbase.in: Alter as follows:

	-Files: ${prefix}/share/doc/emdros/*.pdf.gz
	+Files: ${prefix}/share/doc/emdros/*.pdf

	Hopefully this fixes the "`Format' sections are invalid" error
	from dpkg-buildpackage.

	* debian/docbase.in: Actually, the issue was different.

	Format: PDF
	-Files: ${prefix}/share/doc/emdros/*.pdf
	+Files: @prefix@/share/doc/emdros/*.pdf

	Format: HTML
	-Index: ${prefix}/share/doc/emdros/emdros-progref-guide.html/index.html
	-Files: ${prefix}/share/doc/emdros/emdros-progref-guide.html/*.html
	+Index: @prefix@/share/doc/emdros/emdros-progref-guide/index.html
	+Files: @prefix@/share/doc/emdros/emdros-progref-guide/*.html

	Hopefully this fixes it.

	* doc/progref/Makefile.am: Alter progrefdir as follows:

	-progrefdir = ${docdir}/emdros-progref-guide.html
	+progrefdir = @prefix@/share/doc/emdros/emdros-progref-guide

	* MQL/emdros_environment.cpp: Add new API:
	EmdrosEnv::getEmdrosVersion().

	Modified files:

	modified:   MQL/emdros_environment.cpp
	modified:   include/environment_emdros.h

	* doc/progref/Content.txt: Document the new
	EmdrosEnv::getEmdrosVersion() API.

	modified:   doc/progref/Content.txt
	modified:   doc/progref/config.py.in

	* include/json_classes.h: Add a SWIG directive so that the
	"error_message" parameter is treated as an output parameter on
	readAndParseJSONFromFile().

	* SWIG bindings: Reinstate the inclusion of
	include/json_classes.h.  This had accidentally dropped out.

	Files affected:

	modified:   SWIG/csharp/libcsemdros.i
	modified:   SWIG/java/libjemdros.i
	modified:   SWIG/php7/libemdfphp.i
	modified:   SWIG/python/pyemdros.i
	modified:   SWIG/python3/py3emdros.i

	* SWIG bindings: Also add the JSON stuff to the C# and Java
	Makefile.inc files.

	Files affected:

	modified:   SWIG/csharp/Makefile.inc
	modified:   SWIG/java/Makefile.inc

	* m4/: Use "-z" instead of "-v" to test if a variable was not set.
	This was done because of the need to support ancient bash versions
	(on a particular Solaris 10 installation) which did not support
	"-v".

	* NEWS: Add to the NEWS that /usr/local is now the default
	installation path.

	* AUTHORS: Give due credit to Kirk E. Lowery.

	* PCRE usage: Make sure that all patterns are treated as UTF8 when
	calling pcre_study().  This changes the regex game for MQL, which
	can now exclusively support Unicode, not legacy encodings such as
	Latin-1 / ISO-8859-X.

	Also do this for the configuration files implemented by
	util/conf.cpp and util/conf_ini.cpp.

	Files affected:

	modified:   MQL/mql_query.cpp
	modified:   util/conf.cpp
	modified:   util/conf_ini.cpp
	modified:   NEWS

	* src/qrytool/consout.cpp: Silence an 'unused parameter' warning.

	* tests/mqltry.cpp: Change the file from ISO-8859-1 (Latin-1)
	encoding to UTF-8 encoding.

	* pcre/config.h, pcre/config.h.win32: #define SUPPORT_PCRE8 and
	SUPPORT_UTF to 1.

	* PCRE: The PCRE_UTF8 option is not public for the 'pcre_study'
	function, so revert the changes made to MQL/mql_query.cpp, etc.

	Files affected:

	modified:   tests/mqlqa.h.in
	modified:   util/conf.cpp
	modified:   util/conf_ini.cpp

	* PCRE: The PCRE_UTF8 option is, however, public for the
	pcre_compile() function, so use it with this function.

	Files affected:

	modified:   MQL/mql_query.cpp
	modified:   util/conf.cpp
	modified:   util/conf_ini.cpp

	* amalgamation/amalgamation.cpp: #define SUPPORT_PCRE8,
	SUPPORT_UTF, and SUPPORT_UTF8 by default, i.e., unless
	USE_LOCAL_PCRE is defined to be 0.

	* tests/mqlqa.h.in, tests/bptqa.h.in: Add tests for the new UTF8
	support in PCRE.

2019-02-04 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre05.

============ 3.7.0.pre04 ============

2019-02-04 Ulrik Sandborg-Petersen

	* MQL/mql_query.cpp, include/mql_query.h: Add
	ObjectBlock::m_bIsAfterNonNOTEXISTInBlockString, and set it during
	the weed stage.

	* MQL/mql_R.cpp: Fix bug in NOTEXIST which caused two consecutive
	NOTEXISTS at the beginning of block_string to give false results.
	The second was not evaluated with respect to the whole Universe
	and the whole Substrate as it should.

	* tests/mqlqa.h.in, tests/bptqa.h.in: Add test cases for the fix
	to NOTEXIST.

	* Update Windows build machinery for the new reality.

	Files affected:

        modified:   src/importtool/mingw.mak
        modified:   src/importtool/win32.mak
        modified:   src/mingw.mak
        modified:   src/qrytool/mingw.mak
        modified:   src/qrytool/win32.mak
        modified:   src/win32.mak
        modified:   win32/emdros.nsi.in
        modified:   win32/mingw.mak
        modified:   win32/win32.mak

	* install_mac.sh.in: Remove mention of $PREFIX/share/emdros/hal.

	* Makefile.am: Also do subdirectory "amalgamation" in the
	"macdist" target.

	* win32/config.mak.in: Update default wxWidgets on Windows from
	3.1.1 to 3.1.2.

	* Makefile.am: As part of the "macdist" target, don't make
	directory "development/share/emdros/hal".

2019-02-03 Ulrik Sandborg-Petersen

	* emdros.spec.in: Add gcc-c++ to BuildRequires. Add a version of
	BuildRequires for the case of WX_DO_UNICODE_FALSE.

	* sqlite3/src/Makefile.am: Add sqlite3_emdros_amalgamation.c to
	DISTCLEAN.

	* NEWS: Rewrite the part about --enable-devel | --disable-devel to
	be slightly clearer, and less verbose.

	* util/: Move the importer implementations into ../importers.

	Files affected:

	renamed:    util/negraimporter.cpp -> importers/negraimporter.cpp
	renamed:    util/negraschema.mql -> importers/negraschema.mql
	renamed:    util/penn_yylex.cpp -> importers/penn_yylex.cpp
	renamed:    util/pennimporter.cpp -> importers/pennimporter.cpp
	renamed:    util/pennlexer.re -> importers/pennlexer.re
	renamed:    util/pennparser.yxx -> importers/pennparser.yxx
	renamed:    util/pennschema.mql -> importers/pennschema.mql
	renamed:    util/pennschema_id_d.mql -> importers/pennschema_id_d.mql
	renamed:    util/plaintextimporter.cpp -> importers/plaintextimporter.cpp
	renamed:    util/plaintextschema.mql -> importers/plaintextschema.mql
	renamed:    util/sfmimporter.cpp -> importers/sfmimporter.cpp
	renamed:    util/simplebibleschema.mql -> importers/simplebibleschema.mql
	renamed:    util/slashedtextimporter.cpp -> importers/slashedtextimporter.cpp
	renamed:    util/slashedtextschema.mql -> importers/slashedtextschema.mql
	renamed:    util/tigerxmlimporter.cpp -> importers/tigerxmlimporter.cpp
	renamed:    util/unboundbibleimporter.cpp -> importers/unboundbibleimporter.cpp

	* Makefile.am: Add "importers/" to SUBDIRS.

	* importers/Makefile.am: Initial addition.

	* configure.ac: Add importers/Makefile to AC_OUTPUT.

	* util/Makefile.am: Remove importers.

	* util/agxml.cpp: Remove, since the Annotation Graph exporter
	program has been removed.  Also remove from util/Makefile.am.

	* util/sfm.cpp: Move to ../importers/, where it belongs.

	Files affected:

	modified:   importers/Makefile.am
	modified:   util/Makefile.am
	renamed:    util/sfm.cpp -> importers/sfm.cpp

	* amalgamation/amalgamation.xml: Get the importer files from
	importers/, not util/.

	* importers/win32.mak, importers/mingw.mak: Initial addition.

	* util/win32.mak, util/mingw.mak: Remove stuff now in importers/.

	* win32/win32.mak, win32/mingw.mak: Add importers/ subdir.  Also,
	distribute libemdros_importers.lib.

	* sqlite3/tool/Makefile.am: Don't build the lemon source code: It
	is not used from here.

	* m4/m4/emdros_pcre.m4: Fix PCRE_DEPS_BACKBACKBACK and
	PCRE_LDADD_BACKBACKBACK.

	* Add PCRE_DEPS and PCRE_LDADD where requisite.  Files affected:

	modified:   MQL/Makefile.am
	modified:   harvest/Makefile.am
	modified:   importers/Makefile.am
	modified:   util/Makefile.am

	* zlib/Makefile.am: Rename LIB_EMDF_{CURRENT,REVISION,AGE} to
	LIB_EMDROS_*.

	* zlib/*: Upgrade to ZLib version 1.2.11 from January 15, 2017.

	* MQL/mql_R.cpp: Make R_NOTEXIST_object_block() faster, by not
	putting the ListOfStraws onto the heap, but onto the stack.

2019-01-26 Ulrik Sandborg-Petersen

	* doc/progref/Makefile.am: Fix trailing backslash typo, thereby
	enabling compiling again.

	* SWIG/csharp/Makefile.am: Fix invocation of Mono compiler on
	Fedora 29 by adding "TERM=xterm " before the invocation of
	@MONOCOMPILER@.  The error was:

	Unhandled Exception:
	System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542

	This seems to fix the problem on Fedora 29.

	* SWIG/csharp/Makefile.am: Be more explicit about dependencies for
	target EmdrosDotNet.dll.

	* SWIG/Makefile.am: Add the following line to the Makefile.am:

	.NOTPARALLEL:

	This disables paralell make in GNU make and some BSD-derived make
	programs.

	This solves some issues with "make -j8".

	* SWIG/Makefile.am,
	SWIG/csharp/Makefile.am. SWIG/java/Makefile.am: Move
	".NOTPARALLEL:" from SWIG/Makefile.am into the subdirs for csharp
	and java, where they belong.

	* m4/emdros_docs.m4: Fix bugs with detection of these programs:

	- groff
	- pdflatex
	- zip

	* emdros.spec.in, generate_extrafiles.py.in: Move the inclusion of
	%doc/man1/*.html from emdros.spec.in into
	generate_extrafiles.py.in, and make it depend on whether
	@DO_PROG_GROFF@ is true or not.

	* debian/docs.in:

	-doc/progref/emdros-progref-guide-@VERSION@.zip
	+@DO_PROG_ZIP_TRUE@doc/progref/emdros-progref-guide-@VERSION@.zip

	This fixes .deb builds when the zip program is not available.

2019-01-17 Ulrik Sandborg-Petersen

	* INSTALL: Update with more instructions for Ubuntu and Fedora 29.
	Mention the need for pkg-config.

	* build-deb.sh: Initial addition.

	* Makefile.am: Distribute build-deb.sh.

	* .travis.yml: Initial addition.

	* INSTALL: Remove mention of lyx.  Add more packages for Ubuntu,
	now that lyx is gone as a requirement.

	* .travis.yml: More Ubuntu Xenial packages, this time for LaTeX.

	* .travis.yml: Add a PPA for SWIG 3.0.12.

	* INSTALL: Remove all mention of PHP 5.  Rewrite Ubuntu section to
	also mention a fresh git clone.

	* SWIG/csharp/libcsemdros.i, SWIG/csharp/Makefile.inc: Removed the
	unused IntVector.

	* SWIG/java/libjemdros.i, SWIG/java/Makefile.inc: Remove the
	unused IntVector.

	* INSTALL: Remove mention of package transfig, which was needed
	when we had the LyX docs in this repo.  No need for transfig any
	more.

	* m4/emdros_swig.m4: For Python 3, check for the "python3" program
	first.

	This is done because pyenv can, on some platforms, cause
	AC_CHECK_PROGS to succeed with no Python interpreter being set.

	* Reduce the verbosity of the build slightly, in order to have
	better Travis CI builds.

	Files affected:

	modified:   doc/cms/buildhtb.py
	modified:   doc/progref/Makefile.am
	modified:   doc/progref/buildhtb.py
	modified:   src/importtool/doc/Makefile.am
	modified:   src/qrytool/doc/Makefile.am
	modified:   doc/progref/Makefile.am

	* Add pdflatex-log.txt to CLEANFILES in the following Makefiles:

	modified:   doc/progref/Makefile.am
	modified:   src/importtool/doc/Makefile.am
	modified:   src/qrytool/doc/Makefile.am

	* tests/Makefile.am: Remove the obsolete Mac OS Rez and SetFile
	targets.

	Files affected:

	modified:   tests/Makefile.am
	deleted:    tests/htmlcanvastest.r
	deleted:    tests/htreetest.r

	* Likewise, remove the following obsolete files:

	deleted:    src/importtool/EmdrosImportTool.r
	deleted:    src/qrytool/EmdrosQueryTool.r

	* m4/emdros_docs.m4, configure.ac: Add m4 script to detect
	presence or absence of pdflatex, groff, and zip.

	* doc/Makefile.am, doc/progref/Makefile.am: Use the new
	PROG_PDFLATEX, PROG_GROFF, and PROG_ZIP, along with AM conditions
	DO_PROG_PDFLATEX, DO_PROG_GROFF, and DO_PROG_ZIP, to determine
	which targets to build.

	* doc/progref/Content.txt: Fix some (X)HTML validity issues.

2019-01-16 Ulrik Sandborg-Petersen

	* configure.ac: Revert the default prefix to be /usr/local .

	* Makefile.am: Add the following files to DISTCLEANFILES:

        debian/emdros.doc-base
        debian/emdros.prerm
        debian/emdros.postrm
        debian/emdros.postinst
        debian/control

	* rmfiles.sh: Add the following files to the removed files:

        debian/emdros.doc-base
        debian/emdros.prerm
        debian/emdros.postrm
        debian/emdros.postinst
        debian/control

	* Makefile.am, rmfiles.sh: Don't delete debian/control -- it is
	not a generated file.  Instead, delete debian/rules

	* m4/: Import the *.m4 files from the version4 branch.

	Files affected:

	deleted:    m4/buildenv.m4
	deleted:    m4/buildenv2.m4
	new file:   m4/emdros_banner.m4
	new file:   m4/emdros_bpt.m4
	new file:   m4/emdros_bpt2.m4
	new file:   m4/emdros_buildenv.m4
	new file:   m4/emdros_buildenv_end.m4
	new file:   m4/emdros_macos.m4
	new file:   m4/emdros_mongodb.m4
	new file:   m4/emdros_mysql.m4
	new file:   m4/emdros_pcre.m4
	new file:   m4/emdros_postgresql.m4
	new file:   m4/emdros_solaris.m4
	new file:   m4/emdros_sqlite3.m4
	renamed:    m4/emdrosswig.m4 -> m4/emdros_swig.m4
	renamed:    m4/wxemdros.m4 -> m4/emdros_wx.m4
	new file:   m4/emdros_zlib.m4

	* emdros.pc.in: Initial addition of pkg-config emdros.pc template.

	* configure.ac: Update to use the new machinery in m4/.

	AS A CONSEQUENCE:

	- Depend on AutoConf version 2.69.

	In addition:

	- REMOVE SWIG support for php 5.x
	- REMOVE SWIG support for perl
	- REMOVE SWIG support for Android
	- REMOVE SWIG support for ruby

	If anyone is bitten by these changes, please do write to Ulrik to
	let him know you need a particular SWIG backend back.

	* EMdF/Makefile.am: Define -DSQLITE3_EMDFDB_NO_FSYNC
	unconditionally.

	* SWIG/Makefile.am: Remove support for the following SWIG backends:

	- perl
	- php 5
	- ruby
	- Android

	* SWIG/python/Makefile.am: Update for the new m4 machinery.

	* Makefile.am: Update for the new m4 machinary.  Remove support
	for the removed SWIG bindings.

	* INSTALL: Doc updates for the new m4 machinery.

	* include/emdros-version.h.in: #define
	EMDROS_VERSION_{MAJOR,MINOR,RELEASE}.

	* include/emdros-lconfig.h.in: #include "emdros-version.h".  Also,
	don't #define EMDROS_VERSION_{MAJOR,MINOR,RELEASE}.

	* pcre/Makefile.am: Use LIB_EMDROS_{CURRENT,REVISION,AGE} instead of LIB_PCRE_{CURRENT,REVISION,AGE}

	* generate_extrafiles.py.in: Update for the

	* include/mql_utility.h, MQL/mql_utility.cpp, MQL/mql_R.cpp: The
	keyword "restrict" was used for a function. Rename it to
	R_restrict().

	* include/emdf_wstring.h, EMdF/emdf_wstring.cpp: Remove, since it
	long been obsolete.

	* include/emdros-lconfig.h.in: It is 2019. <ostream.h> and
	<istream.h> are history.  Accordingly, remove HAVE_ISTREAM and
	HAVE_OSTREAM from include/emdros-lconfig.h.in.

	Also remove the distinction from the following files:

	modified:   examples/HAL/hallexer.h
	modified:   include/conf.h
	modified:   include/emdf_output.h
	modified:   include/emdros-lconfig.h.in
	modified:   include/environment_emdros.h
	modified:   include/harvest_fts.h
	modified:   include/layout.h
	modified:   include/monads.h
	modified:   include/mql_execute.h
	modified:   include/mql_gq.h
	modified:   include/opt.h
	modified:   include/pennimporter.h
	modified:   include/qdxml.h
	modified:   src/qrytool/output_style.h

	* Update the Makefile machinery to obey --enable-devel |
	--disable-devel (AM condition DO_DEVEL).

	Files affected:

	modified:   EMdF/Makefile.am
	modified:   MQL/Makefile.am
	modified:   amalgamation/Makefile.am
	modified:   harvest/Makefile.am
	modified:   util/Makefile.am

	* EMdF/Makefile.am: Always (unconditionally) compile the following
	files:

	- pgconn.cpp
	- mysqlconn.cpp
	- sqlite3conn.cpp

	* win32/lconfig.h.win32.in: Remove HAVE_ISTREAM and HAVE_OSTREAM.

	* src/qrytool/: Remove TECkit.

	* src/qrytool/Makefile.am: Update for the new m4 infrastructure.

	* src/importtool/Makefile.am: Update for the new m4 infrastructure.

	* src/Makefile.am: Update for the new m4 infrastructure.

	* src/agexport.cpp: Remove, since it had not been tested to work
	for more than a decade.

	* src/Makefile.am: Remvoe agexport.cpp.

	* tests/Makefile.am: Update for the new m4 infrastructure.

	* Makefile.am: Remove examples/ from SUBDIRS.

	NOTE: This removes:

	1) examples/HAL/
	2) examples/ChunkingTool/
	3) examples/KJVParsed/
	4) examples/sfm/

	Number (1) and (2) are moved to the example-programs-emdros repo
	on GitHub.

	Number (3) is moved to example-databases repo on GitHub.

	* SWIG/*/Makefile.am: Update for new infrastructure.

	modified:   SWIG/csharp/Makefile.am
	modified:   SWIG/csharp/Makefile.inc
	modified:   SWIG/java/Makefile.am
	modified:   SWIG/java/Makefile.inc
	modified:   SWIG/php7/Makefile.am
	modified:   SWIG/python/Makefile.am
	modified:   SWIG/python3/Makefile.am

	* INSTALL: Give it a big overhaul.

	* Makefile.am: Remove explicit rule for generating
	generate_extrafiles.py, since there is already an implicit rule
	for doing so.

	* Makefile.am: Install emdros.pc in the right place.

	* emdros.spec.in: Update for the new m4 infrastructure.

	* SWIG/csharp/libcsemdros.i: Incorporate the files libemdf.i and
	libmql.i into libcsemdros.i, then delete the former two.

	* SWIG/java/libjemdros.i: Incorporate the following files into
	libjemdros.i, and delete these files:

	- SWIG/java/libemdfjava.i
	- SWIG/java/libmqljava.i

	* pcre/Makefile.am: Only build libpcre_emdros.la if DO_DEVEL is true.

	* sqlite3/src/Makefile.am: Update for the new m4 infrastructure.

	AS A RESULT:

	1) set the version info for libsqlite3_emdros.la to the same as the
	Emdros libraries (LIB_EMDROS_{CURRENT,REVISION,AGE}).

	2) Rename sqlite3_localamalgam.c to sqlite3_emdros_amalgamation.c.

	* win32/win32.mak: Remove the following:

	- TECkit
	- agexport.html
	- agexport.exe

	* src/win32.mak: Don't compile the -- now removed -- agexport.cpp.

	* doc/agexport.1: Remove.

	Files affected:

	modified:   doc/Makefile.am
	deleted:    doc/agexport.1
	modified:   doc/emdros.1

	* SWIG/python/Makefile.am: Update for the new m4 infrastructure.

	Files affected:

	modified:   SWIG/python/Makefile.am
	deleted:    SWIG/python/libemdfpython.i
	deleted:    SWIG/python/libmqlpython.i
	modified:   SWIG/python/pyemdros.i

	* SWIG/python3/py3emdros.i: Incorporate, then remove the following
	two files:

	deleted:    libemdfpython.i
	deleted:    libmqlpython.i
	modified:   py3emdros.i

	* SWIG/: Remove the following obsolete directories:

	- SWIG/perl/
	- SWIG/php/ (PHP 5)
	- SWIG/ruby/
	- SWIG/Android/

	* doc/*.1, doc/*.1.in, doc/*.5: Move into doc/man1 and doc/man5 as
	appropriate.

	* doc/man1/emdros.1: Move to doc/man5/emdros.5.

	It is not a command, but a general description.  So it does not
	belong in Section of the manual.

	* doc/man5/emdros.5: Update.

	* Manual pages: Remove the following, as they are no longer part
	of the Emdros distribution proper.  Instead, they are part of the
	example-programs-emdros GitHub repo:

	- doc/man1/mqlhal.1.in
	- doc/man1/hal_build_db.1

	* doc/cms/: Initial addition of these files. Files affected:

	modified:   configure.ac
	new file:   doc/cms/Makefile.am
	new file:   doc/cms/buildhtb.py
	new file:   doc/cms/cms.css
	new file:   doc/cms/dot.gif

	* doc/man1/eqt.1.in: Renamed to doc/man1/eqtu.1.in.  The old eqt /
	eqtu distinction was due to the Unicode / Non-Unicode dichotomy of
	the wxWidgets libraries.  This dichotomy is gone in current
	versions of wxWidgets, and hence eqt does not exist any more.

	* doc/man1/eqtu.1.in: Rewrite, so as not to mention eqt(1).

	* doc/Makefile.am: Update for the new m4 infrastructure.

	AS A RESULT:

	1) Remove all *.lyx files from the distribution.
	2) Remove all *.txt files from the distribution.
	3) Use the new doc/man1/ and doc/man5/ directory structure.

	Files affected:

	deleted:    doc/Getting-Started.lyx
	deleted:    doc/HOW-TO-USE.txt
	deleted:    doc/MQL-Programmers-Guide.lyx
	deleted:    doc/MQL-Query-Guide.lyx
	deleted:    doc/MQL-Query-subset.lyx
	deleted:    doc/MQL-README.txt
	modified:   doc/Makefile.am
	deleted:    doc/Monad-Sets.lyx
	deleted:    doc/New-EMdF.lyx
	deleted:    doc/README-doc.txt
	deleted:    doc/README.MySQL.Win32.txt
	deleted:    doc/Rel-EMdF.lyx
	deleted:    doc/Standard-MdF.lyx
	deleted:    doc/TheDoor.fig
	deleted:    doc/ThisDoor.html
	deleted:    doc/bootstrapping.txt
	deleted:    doc/xinetd.mql

	All of the *.txt files that were deleted had obsolete information,
	and neded to be rewritten from scratch.

	The *.lyx files have been moved to the docs-emdros repo on GitHub,
	along with TheDoor.fig.

	* debian/: Update for new m4 infrastructure.

	Files affected:

	modified:   debian/emdros.examples
	modified:   debian/emdros.manpages
	modified:   debian/emdros.postinst.in
	modified:   debian/emdros.postrm.in
	modified:   debian/rules.in

	* wx/Makefile.am: Update for new m4 infrastructure.

	* src/qrytool/Makefile.am: Update for new m4 infrastructure.

	Files affected:

	modified:   src/qrytool/Makefile.am
	renamed:    src/qrytool/emergence-eqtu.desktop -> src/qrytool/scripturesys-eqtu.desktop

	* src/importtool/Makefile.am: Update for new m4 infrastructure.

	Files affected:

	modified:   src/importtool/Makefile.am
	renamed:    src/importtool/emergence-importtool.desktop -> src/importtool/scripturesys-importtool.desktop

	* emdros.spec.in: Add

	%{prefix}/share/doc/emdros/

	to the installed files.

	* emdros.pc.in: Remove

	@MONGODB_DASH_INCLUDE@

	from the Cflags, since we don't have it at the moment.

	* INSTALL: Remove the obsolete section: "What happens after
	building Emdros?"

	* NEWS: Update with more NEWS for 3.7.0, from today.

	* doc/Makefile.am: Distribute all of the man pages in doc/man1/.

	* emdros.spec.in: Distribute all of the HTML man pages for man1.

	* m4/emdros_wx.m4: Update for macOS 10.13 and 10.14.

	* examples/: Removed completely.

	Files affected:

	deleted:    examples/ChunkingTool/EmdrosChunkingTool.r
	deleted:    examples/ChunkingTool/Info.plist.in
	deleted:    examples/ChunkingTool/Makefile.am
	deleted:    examples/ChunkingTool/ctdoc.cpp
	deleted:    examples/ChunkingTool/ctdoc.h
	deleted:    examples/ChunkingTool/ctmf.cpp
	deleted:    examples/ChunkingTool/ctmf.h
	deleted:    examples/ChunkingTool/ctwx.cpp
	deleted:    examples/ChunkingTool/ctwx.h
	deleted:    examples/ChunkingTool/ctwx.rc
	deleted:    examples/ChunkingTool/doc/ChunkingToolGuide.hhp
	deleted:    examples/ChunkingTool/doc/Content.txt
	deleted:    examples/ChunkingTool/doc/MainScreen.png
	deleted:    examples/ChunkingTool/doc/MainScreenGreekExample.png
	deleted:    examples/ChunkingTool/doc/Makefile.am
	deleted:    examples/ChunkingTool/doc/Makefile.inc
	deleted:    examples/ChunkingTool/doc/MenuBar.png
	deleted:    examples/ChunkingTool/doc/ToolBar.png
	deleted:    examples/ChunkingTool/doc/config.py.in
	deleted:    examples/ChunkingTool/doc/files.txt
	deleted:    examples/ChunkingTool/emergence-chunkingtool.desktop
	deleted:    examples/ChunkingTool/mingw.mak
	deleted:    examples/ChunkingTool/tisch.cfg
	deleted:    examples/ChunkingTool/wihebrew.cfg
	deleted:    examples/ChunkingTool/win32.mak
	deleted:    examples/HAL/HALSpace.cpp
	deleted:    examples/HAL/HALSpace.h
	deleted:    examples/HAL/Makefile.am
	deleted:    examples/HAL/doc/Content.txt
	deleted:    examples/HAL/doc/Makefile.am
	deleted:    examples/HAL/doc/config.py.in
	deleted:    examples/HAL/doc/files.txt
	deleted:    examples/HAL/hal.cfg
	deleted:    examples/HAL/hal.cpp
	deleted:    examples/HAL/hal_build_database.cpp
	deleted:    examples/HAL/hal_build_database.h
	deleted:    examples/HAL/hal_defines.h
	deleted:    examples/HAL/hal_execution_environment.cpp
	deleted:    examples/HAL/hal_execution_environment.h
	deleted:    examples/HAL/hal_schema.cpp
	deleted:    examples/HAL/hal_schema.h
	deleted:    examples/HAL/hal_string_func.cpp
	deleted:    examples/HAL/hal_string_func.h
	deleted:    examples/HAL/halblddb.cpp
	deleted:    examples/HAL/hallexer.h
	deleted:    examples/HAL/hallexer.re
	deleted:    examples/HAL/mingw.mak
	deleted:    examples/HAL/win32.mak
	deleted:    examples/KJVParsed/EmdrosChunkingTool-KJVParsed.cfg
	deleted:    examples/KJVParsed/EmdrosQueryTool-KJVParsed.cfg
	deleted:    examples/KJVParsed/Makefile.am
	deleted:    examples/KJVParsed/README-KJVParsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.17.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.18.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.19.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.20.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.21.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.22.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.23.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.24.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.25.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.26.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.27.parsed.txt
	deleted:    examples/KJVParsed/parsed/01Matt.28.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/02Mark.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.17.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.18.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.19.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.20.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.21.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.22.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.23.parsed.txt
	deleted:    examples/KJVParsed/parsed/03Luke.24.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.17.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.18.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.19.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.20.parsed.txt
	deleted:    examples/KJVParsed/parsed/04John.21.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.17.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.18.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.19.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.20.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.21.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.22.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.23.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.24.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.25.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.26.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.27.parsed.txt
	deleted:    examples/KJVParsed/parsed/05Acts.28.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/06Rom.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/071Cor.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/082Cor.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/09Gal.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/09Gal.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/09Gal.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/09Gal.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/09Gal.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/09Gal.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/10Eph.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/10Eph.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/10Eph.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/10Eph.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/10Eph.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/10Eph.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/11Phil.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/11Phil.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/11Phil.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/11Phil.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/12Col.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/12Col.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/12Col.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/12Col.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/131Thess.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/131Thess.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/131Thess.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/131Thess.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/131Thess.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/142Thess.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/142Thess.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/142Thess.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/151Tim.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/151Tim.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/151Tim.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/151Tim.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/151Tim.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/151Tim.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/162Tim.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/162Tim.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/162Tim.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/162Tim.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/17Titus.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/17Titus.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/17Titus.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/18Phlm.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/19Heb.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/20Jas.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/20Jas.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/20Jas.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/20Jas.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/20Jas.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/211Pet.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/211Pet.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/211Pet.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/211Pet.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/211Pet.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/222Pet.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/222Pet.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/222Pet.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/231John.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/231John.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/231John.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/231John.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/231John.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/242John.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/253John.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/26Jude.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.01.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.02.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.03.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.04.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.05.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.06.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.07.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.08.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.09.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.10.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.11.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.12.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.13.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.14.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.15.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.16.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.17.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.18.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.19.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.20.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.21.parsed.txt
	deleted:    examples/KJVParsed/parsed/27Rev.22.parsed.txt
	deleted:    examples/KJVParsed/queries/q1_First_word_in_S_is_The.mql
	deleted:    examples/KJVParsed/queries/q2_S_dominating_WHNP.mql
	deleted:    examples/KJVParsed/queries/q3_the_grace_of_X.mql
	deleted:    examples/KJVParsed/queries/q4_unordered_group.mql
	deleted:    examples/Makefile.am
	deleted:    examples/sfm/Makefile.am
	deleted:    examples/sfm/README.txt
	deleted:    examples/sfm/schema.sfm
	deleted:    examples/sfm/test.sfm

	* src/qrytool/Makefile.am: Add rule for creating
	doc/EQTUsersGuide.htb.

	This re-enables "make dist" from a bare, non-"make all"'ed directory.

2019-01-15 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.pre04.

	* debian/control: Don't have the following in Build-Depends:

	libwxgtk2.8-dev | libwxgtk3.0-dev, libwxgtk2.8-dev | libwxgtk-media3.0-dev

	The reason is, we want to be able to build on servers without
	these dependencies.  In addition, these packages are only
	necessary for building the GUI, which is not an essential part of
	Emdros on a server.

============ 3.7.0.pre03 ============

2018-12-11 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Demote to 3.7.0.pre03 from 3.7.0.rc1.

	* wx/wxemdros.m4: Add support for building on macOS version 10.13
	(High Sierra) and 10.14 (Mojave).

	Note that Xcode 10 // SDK for macOS 10.14 no longer contains
	support for compiling i386 applications.  This means that I must
	compile with Xcode 9.4 or earlier in order to retain i386 support.

2018-12-08 Ulrik Sandborg-Petersen

	* include/memobject.h, harvest/memobject.cpp: Split MemObject into
	MemObjectBase and MemObject.

	* include/memobject.h: Add new implementations
	MemObjectFromMatchedObject and MemObjectWithOwnedMatchedObject.

	* include/arena.h: Fix bugs in Arena::allocate_align4().

2018-11-30 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.rc1.

============ 3.7.0.pre02 ============

2018-11-30 Ulrik Sandborg-Petersen

	* include/emdf.h: Add the following typedefs:

	- emdros_i32
	- emdros_u32
	- emdros_i64
	- emdros_u64

	Set the appropriately for WIN32+MSVC vs. all others.

	* include/emdf.h: Change the typedef of monad_m and id_d_t from
	long to emdros_i32.

	On Windows, they are the same underlying 32-bit type.  On Linux,
	long is 64 bits, and int is 32 bits.  We have never exploited the
	upper 32 bits.

	Ulrik currently doesn't think we should move Emdros in the
	direction of raising MAX_MONAD from the current 2100000000
	(just short of 2^31).  Instead, we should move in the direction of
	many smaller databases, each with its own unique (UUID) db_id.

	* include/emdf.h: Introduce a new typedef, emdf_ivalue, which is
	meant to hold all integer values that come into / out of the EMdF
	layer.  For now, it is typedef'd to be emdros_i32.

	typedef emdros_i32 emdf_ivalue;

	* src/qrytool/mainframe.cpp: Use the new wxFONTFAMILY_XXX,
	wxFONTSTYLE_XXX, and wxFONTWEIGHT_XXX constants where applicable.

	* EMdF/string_func.cpp, include/string_func.h:

	Introduce the following, new functions:

	- emdf_ivalue2string()
	- uint2string()
	- string2int()
	- string2emdf_ivalue()

	* Change the API of EMdFConnection, so that it takes an
	emdf_ivalue instead of a long whenever getting an integer into /
	out of the database.

	Files affected:

	modified:   include/conn.h
	modified:   include/mysqlconn.h
	modified:   include/pgconn.h
	modified:   include/sqlite3conn.h
	modified:   EMdF/sqlite3conn.cpp

	* Change the API of EMdFDB so that it takes an emdf_ivalue instead
	of a long whenever it needs to get an integer value into/out of
	the database.

	Also, be more careful about which XXX2string() and string2XXX()
	functions it uses, e.g., id_d2number_string() instead of
	int2string() whenever appropriate.

	Files affected:

	modified:   EMdF/emdfdb.cpp
	modified:   EMdF/bpt2emdfdb.cpp
	modified:   EMdF/bptemdfdb.cpp
	modified:   EMdF/mysqlemdfdb.cpp
	modified:   EMdF/pgemdfdb.cpp
	modified:   EMdF/sqlite3emdfdb.cpp
	modified:   include/emdfdb.h
	modified:   include/bpt2emdfdb.h
	modified:   include/bptemdfdb.h
	modified:   include/sqlite3emdfdb.h

	* EMdF/emdf_output.cpp, include/emdf_output.h: Change the API to
	use an emdf_ivalue instead of a long in EMdFOutput::jsonOutValue()
	and EMdFOutput::jsonOutValueOrNull().

	* MQL: Adapt to using emdf_ivalue instead of long or int whenever
	appropriate.

	Files affected:

	modified:   MQL/mql.yxx
	modified:   MQL/mql_enumeration_statements.cpp
	modified:   MQL/mql_helper_classes.cpp
	modified:   MQL/mql_object_statements.cpp
	modified:   MQL/mql_query.cpp
	modified:   include/mql_enumeration_statements.h
	modified:   include/mql_query.h
	modified:   include/mql_types.h
	modified:   SWIG/csharp/Makefile.inc
	modified:   SWIG/java/Makefile.inc

	* Adapt util/  to use emdf_ivalue instead of int or long whenever
	appropriate.

	Files affected:

	modified:   include/pennimporter.h
	modified:   util/pennimporter.cpp

	* Adapt harvest/ to use emdf_ivalue instead of int or long whenever
	appropriate.

	Files affected:

	modified:   harvest/harvest_fts.cpp
	modified:   include/harvest_fts.h

	* tests/emdftry.cpp: Adapt to using emdf_ivalue or id_d_t instead
	of int or long whenever appropriate.

	* wx/importerwizard.cpp: Adapt to using id_d_t or monad_m instead
	of long.

	* configure.ac: Warn that the following SWIG interfaces are
	deprecated, and will be removed in a future release:

	- Android
	- perl
	- php
	- ruby

	* tests/emdftry.cpp: Reinstate compileabulity on Win32.

	* EMdF/sqlite3emdfdb.cpp: Silence some warnings on Windows by
	using UNUSED().

	* src/qrytool/mainframe.cpp: Use the new wxFONTFAMILY_XXX,
	wxFONTSTYLE_XXX, and wxFONTWEIGHT_XXX constants where applicable,
	also on Windows.

	* Silence some warnings on Windows by better usage of types that
	are 32-bit vs. 64-bit.

	Files affected:

	include/encryption.h
	EMdF/string_func.cpp
	EMdF/qdxml.cpp
	MQL/mql.yxx
	MQL/mql_gq.re
	util/pennlexer.re
	examples/HAL/hallexer.re
	examples/HAL/HALSpace.cpp

	* Silence some warnings on Windows by using UNUSED().

	Files affected:

	modified:   MQL/mql_query.cpp
	modified:   MQL/mql_select_statements.cpp

	* Better usage of 32-bit vs- 64-bit and unsigned vs. signed types.

	Files affected:

	- EMdF/qdxml.cpp
	- harvest/templatelang.yxx

	* debian/changelog: Bump to 3.7.0.pre02.

	* Better usage of 32-bit vs- 64-bit and unsigned vs. signed types.

	This Removes lots of warnings on Windows.

	Files affected:

	modified:   EMdF/inst.cpp
	modified:   EMdF/json.re
	modified:   EMdF/sqlite3conn.cpp
	modified:   EMdF/string_func.cpp
	modified:   EMdF/table.cpp
	modified:   MQL/mql.re
	modified:   MQL/mql.yxx
	modified:   MQL/mql_execution_environment.cpp
	modified:   MQL/mql_object.cpp
	modified:   MQL/mql_query.cpp
	modified:   MQL/mql_sheaf.cpp
	modified:   harvest/harvest_fts.cpp
	modified:   harvest/harvest_fts2.cpp
	modified:   harvest/harvest_fts3.cpp
	modified:   harvest/renderobjects.cpp
	modified:   harvest/templatelang.re
	modified:   include/memobject.h
	modified:   src/qrytool/harvest.cpp
	modified:   src/qrytool/mytable.cpp
	modified:   src/qrytool/output_style.cpp
	modified:   src/qrytool/qtoutput.cpp
	modified:   util/conf.cpp
	modified:   util/md5_emdros.cpp
	modified:   util/negraimporter.cpp

	* tests/mqltry.cpp: Remove warning about unused local variable.

	* win32/config.mak.in: Don't compile C# bindings on Windows by
	default.

	* Better usage of 32-bit vs- 64-bit and unsigned vs. signed types.

	This Removes some warnings on Windows.

	Files affected:

	modified:   EMdF/json.re
	modified:   MQL/mql_gq.re
	modified:   MQL/mql_sheaf.cpp
	modified:   examples/HAL/hallexer.re
	modified:   util/conf_ini.cpp
	modified:   util/pennlexer.re

2018-11-20 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.7.0.pre02.

============ 3.7.0.pre01 ============

2018-11-16 Ulrik Sandborg-Petersen

	* win32/body.mak: Also link against wxScintilla on Windows. This
	is necessary because the Emdros Query Tool recently started using
	wxScintilla.

	* win32/win32.mak, win32/emdros.nsi.in: Remove files that are no
	longer present in doc/ from the dist Makefile target and
	installation files.

2018-11-15 Ulrik Sandborg-Petersen

	* Major restructuring to put all computed features into the EMdF
	layer, not the MQL layer.

	* EMdF/infos.cpp: FeatureInfo now has an extra parameter,
	"parameter1", which may be empty.  The FeatureInfo object computes
	whether the feature is computed or not, and is able to distinguish
	between retrieved feature name/type and output feature name /
	type.

	* include/emdf_value.h: Reindent.

	* include/emdf_value.h, EMdF/emdf_value.cpp: Add new toString()
	variant, which converts enumeration constants.

	* EMdF/emdf_ffeatures.cpp, include/emdf_ffeatures.h: Add
	parameter1 as a part of the feature name to all c'tors of
	EMdFComparison.

	* EMdF/emdfdb.cpp, include/emdfdb.h: A lot of changes:

	- Finish the transition to putting the computed features into the
	  EMdF layer, not the MQL layer.

	- Reimplement EMdFDB::getFeatures() such that it uses getInst() as
	the underlying implementation, instead of its own implementation.

	- Alter getFeatureVectors() such that it is able to prepare for
	getting the computed features.

	- Alter getFeatureValues() such that it computes the value of the
	computed features.

	- EMdFDB::createFeature() now takes a FeatureInfo parameter,
	rather than distinct parameters for the feature information.

	- EMdFDB::encodeFeatureNameForPrequeryString() now takes the
	feature name, parameter1, and the feature type id as parameters.

	- EMdFDB::getEMdFComparison() now takes an extra "parameter1"
	parameter.

	* EMdF/inst.cpp, include/inst.h: Add a new c'tor to the Inst
	class:

	Inst::Inst(const std::list<FeatureInfo>& feature_infos)

	* EMdF/mysqlemdfdb.cpp: Adjust to the new reality of computed
	features in the EMdF layer.

	* EMdF/pgemdfdb.cpp: Adjust to the new reality of computed
	features in the EMdF layer.

	* EMdF/sqlite3emdfdb.cpp: Adjust to the new reality of computed
	features in the EMdF layer.

	* MQL layer: Adjust to the new reality of computed features being
	pushed down into the EMdF layer.

	Files affected:

	modified:   MQL/mql.yxx
	modified:   MQL/mql_helper_classes.cpp
	modified:   MQL/mql_object.cpp
	modified:   MQL/mql_object_statements.cpp
	modified:   MQL/mql_query.cpp
	modified:   MQL/mql_select_statements.cpp
	modified:   MQL/mql_sheaf.cpp
	modified:   include/mql_object_type_statements.h
	modified:   include/mql_query.h
	modified:   include/mql_types.h

	Note especially that the Sheaf grammar for the console output
	needs to change, since the features that are in the GET clauses
	can now be of the form "feature_name(feature_name)", e.g.,
	"first_monad(monads)".

	* Util layer/importers: Adjust to the new reality described above.

	Files affected:

	modified:   util/mql_exporter.cpp
	modified:   util/pennimporter.cpp
	modified:   util/plaintextimporter.cpp
	modified:   util/sfmimporter.cpp
	modified:   util/slashedtextimporter.cpp
	modified:   util/tigerxmlimporter.cpp
	modified:   util/unboundbibleimporter.cpp

	* Test layer: Adjust to the new reality described above.

	* SWIG/java/Makefile.inc, SWIG/csharp/Makefile.inc: Adjust to the
	new reality.

	* tests/bptqa.h.in: Add a lot of tests of the new computed
	features, and update some error messages.

	* EMdF/bptemdfdb.cpp, include/bptemdfdb.h: Remove an obsolete
	incarnation of BPTEMdFDB::getFeatures(), and change the signature
	of BPTEMdFDB::createFeature().

2018-11-14 Ulrik Sandborg-Petersen

	* Add ComputedFeatureName as a valid option whenever we have a
	feature_list in the MQL grammar.  This enables the inclusion of
	computed features in the following statement kinds:

	- SELECT ALL OBJECTS: Enabled in the GET clause.
	- GET FEATURES
	- GET OBJECTS HAVING MONADS IN

	Still missing: GET AGGREGATE FEATURES...

	* Move the eComputedFeatureKind, as a part of a bigger scheme to
	move towards putting the computed features into the EMdF layer.

	Affected files:

	- include/mql_enums.h
	- include/emdf_enus.h
	- EMdF/emdf_enums.cpp <== NEW FILE
	- amalgamation/amalgamation.xml
	- EMdF/Makefile.am
	- EMdF/mingw.mak
	- EMdF/win32.mak

	* EMdF/emdfdb.cpp, include/emdfdb.h: Remove the following methods,
	since they were no longer used:

	- EMdFDB::getComputedFeature()
	- EMdFDB::getComputedFeatures()

2018-11-07 Ulrik Sandborg-Petersen

	* amalgamation/amalgamation.xml: Also include:

	include/lzma_emdros.h
	EMdF/lzma_emdros.cpp

2018-11-05 Ulrik Sandborg-Petersen

	* harvest template language: Add template construct {{ lastmonad
	}}, which is analogous to the template construct {{ firstmonad }},
	except it emits the last, not the first, monad of the object's
	monad set.

	modified:   doc/progref/Content.txt
	modified:   doc/progref/config.py.in
	modified:   harvest/templatelang.re
	modified:   harvest/templatelang.yxx
	modified:   harvest/templatelang_classes.cpp
	modified:   include/templatelang_classes.h

	* util/pennparser.yxx: #include <cassert>, fixing a compilation
	error.

	* amalgamation/amalgamation.xml: Add the files below to the list
	of headers.  This reinstates usability of the amalgamation.

	- include/pcre_config.h
	- include/environment_emdros.h

2018-11-02 Ulrik Sandborg-Petersen

	* amalgamation/amalgamation.xml: Remove redundant EMdF/json.h.  It
	is there already as EMdF/jsonpars.h.

	* amalgamation/win32.mak: Make it compile on Windows.

	* pcre/config.h: Reinstate compileability of the amalgamation
	partially, by prefixinf those config variables which clash with
	Emdros's emdros-config.h with "PCRE_".

	* Reinstate amalgamation compileability when MySQL is not used,
	and silence some warnings related to not using MySQL and/or
	PostgreSQL.

	Files affected:

	modified:   EMdF/mysqlconn.cpp
	modified:   EMdF/mysqlemdfdb.cpp
	modified:   EMdF/pgconn.cpp
	modified:   EMdF/pgemdfdb.cpp
	modified:   include/mysqlconn.h
	modified:   include/pgconn.h

	* MQL/emdros_environment.cpp: Silence some warnings.

	* win32/lconfig.h.win32: Delete.

	* win32/lconfig.h.win32.in: Initial addition. Also, flesh it out
	further than the old win32/lconfig.h.win32.  Also, built the
	latter from the former in the Makefile.am.

	* win32/config.mak.in: Make it explicit that you can nowadays only
	have MySQL support on Windows if you are making X64 binaries.

	* EMdF/Makefile.am: Add json.c to CLEANFILES.

	* win32/Makefile.am: Add lconfig.win32.h to CLEANFILES.

	* amalgamation/amalgamation.xml: Add some #undefs to two
	<code_prefix>...</code_prefix> element in the PCRE C amalgamation.

	* include/arena.h: Make the Microsoft MSVC compiler less
	warning-angry.

	* EMdF/emdfdb.cpp: Silence several Microsoft MSVC compiler
	warnings.

	Also affected:

	modified:   MQL/mql_helper_classes.cpp
	modified:   include/mql_execution_environment.h
	modified:   include/mql_query.h

	* m4/emdrosswig.m4: Force ./configure to obey a
	--without-swig-language-XYZ and --with-swig-language-XYZ=no
	switch.

	* util/pennparser.yxx: Don't #define assert(X).  This was likely
	introduced with an earlier version of the lemon tool or the bison
	tool.  Nowadays, it only causes trouble for the amalgamation.

	* wx/conndlg.cpp: Remove asserts on macOS.

2018-11-01 Ulrik Sandborg-Petersen

	* Makefile.am: Change order of SUBDIRS such that util/ comes
	before amalgamation/.  We need this because of changes to come.

	* amalgamation/amalgamation.xml: Update the mkamalgamation.cpp
	program to the one from the version4 branch.  Accordingly, add
	amalgamation/amalgamation.xml, and also update:

	- win32.mak
	- mingw.mak
	- Makefile.am
	- mkamalgamation.py

	The mkamalgamation.cpp program was ported from Python to C++ via
	the new mkamalgamation.py.

	* m4/emdrosswig.m4: Test the Mono compiler, to see if it works at
	all.  On Fedora 29, mcs always throws an error, due to a bug in
	Mono 4.8, which is what ships with Fedora 29.

	If the Mono compiler does not work, do not do SWIG C#.

	* EMdF/Makefile.am: Distribute smart_vector.cpp.

	* pcre/: Upgrade to PCRE 8.42 from 2018-03-20.

	* configure.ac: Downbump to 3.7.0.pre01 from 3.7.0.  I intend to
	make at least one preview release before 3.7.0 is released.

	* generate_extrafiles.py.in: Als distribute:

	%{prefix}/lib/emdros/EmdrosPy3.pyo

	* Add the possibility to query computed features:

	- first_monad(<monad_set_name>)
	- last_monad(<monad_set_name>)
	- monad_count(<monad_set_name>)
	- monad_set_length(<monad_set_name>)

	Also, document this. Also, add tests.

	modified:   MQL/mql.yxx
	modified:   MQL/mql_query.cpp
	modified:   doc/MQL-Programmers-Guide.lyx
	modified:   doc/MQL-Query-Guide.lyx
	modified:   include/mql_enums.h
	modified:   include/mql_query.h
	modified:   tests/bptqa.h.in
	modified:   tests/mqlqa.h.in

	* Extend the computed feature comparisons to also use Object
	Reference Usages.

	modified:   MQL/mql.yxx
	modified:   MQL/mql_query.cpp
	modified:   include/mql_query.h
	modified:   tests/bptqa.h.in
	modified:   tests/mqlqa.h.in

	* amalgamation/amalgamation.json: Deleted, since it is now
	obsolete, as of the addition of amalgamation/amalgamation.xml.

2018-10-29 Ulrik Sandborg-Petersen

	* src/qrytool/mainframe.cpp, src/qrytool/mainframe.h: Use a
	wxStyleTextCtrl instead of a wxTextCtrl for the edit/query window.
	This is because the wxTextCtrl gives the user a lot of problems on
	the Mac.

2018-10-12 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.7.0.

	* Relicense the code under the MIT license.

	* LICENSE.md: Initial addition.

	* Relicense the docs under the Creative Commons BY-SA 4.0
	International Public License.

	* Build system: Remove all .pro files (QMake for Qt).  Ulrik
	doesn't use them any more, and so they are unmaintained.  If
	anyone needs them back, please let Ulrik know.

	Also update all affected Makefile.am's (to not distribute *.pro):

	modified:   EMdF/Makefile.am
	modified:   MQL/Makefile.am
	modified:   Makefile.am
	modified:   harvest/Makefile.am
	modified:   pcre/Makefile.am
	modified:   sqlite3/Makefile.am
	modified:   sqlite3/src/Makefile.am
	modified:   src/Makefile.am
	modified:   util/Makefile.am

	* Build system: Remove all support for DJGPP.  Ulrik hasn't used
	it for years, and now that SQLite2 is gone, it is doubtful that
	Emdros will even compile under DJGPP.

	* util/pennlexer.lxx: Remove long-obsolete file.  Has been
	superseded by util/pennlexer.re.

	* Remove obsolete files:

	- MQL/mql.lxx
	- MQL/mql_get_query.lxx
	- examples/HAL/hallexer.l

	* emdros.spec.in: Update license, and update for obsoleted/removed
	files.

	* SWIG/python3/Makefile.am: Put EmdrosPy3.py through

	$(PYTHON3) -m ompilealll -f -b EmdrosPy3.py

	Also, install EmdrosPy3.pyc.

	* generate_extrafiles.py.in: Don't distribute EmdrosPy3.pyo, since
	it is not generated.

	* configure.ac: Add warning at the end banner, saying that Perl
	bindings are now deprecated, and will be removed in a future
	release.

============ 3.6.1 ============

2018-10-04 Ulrik Sandborg-Petersen

	* include/emdf_values.h: EMdF/emdf_values.cpp: Rename private
	function EMdFValue::compareListOfIntegerWithAtomicValue() to
	EMdFValue::compareListOfIntegerWithOther().

	* MQL: In SELECT ALL OBJECTS, allow FeatureComparison objects of
	the following new forms:

	- feature_name = ()
	- feature_name = (<non-empty-list-of-integer>)
	- feature_name = (<non-empty-list-of-id_d>)
	- feature_name = (<non-empty-list-of-enum-const>)

	Files affected:

	modified:   MQL/mql.yxx
	modified:   MQL/mql_query.cpp
	modified:   include/mql_query.h
	modified:   tests/mqlqa.h.in

	* src/qrytool/mainframe.cpp: Silence a warning about
	polymorphic EmdrosException being caught by value.

	* tests/htmlcanvastest.cpp: Silence a warning about
	polymorphic QDException being caught by value.

	* include/lzma_emdros.h, EMdF/lzma_emdros.cpp: Only compile the
	body of these files if defined(USE_BPT) && USE_BPT.  The reasons
	are:

	- This is only used when we use the BPT engine.

	- We don't want to cause code bloat with unused code if we are not
	using the BPT engine.

	- Old C++ compilers from pre-C++11 eras (such as Sun's CC compiler
	on Solaris 10) aren't able to compile this file.

	* doc/MQL-Programmers-Guide.lyx: Add new MQL syntax introduced
	today to Chapter 4.

	* EMdF/logging.cpp: When calling ctime_r on Solaris, decide
	whether to use the POSIX-compliant version or the
	non-POSIX-compliant version.

	* m4/emdrosswig.m4: Fix awk syntax on Darwin/macOS for determining
	whether we can compile PHP5 and PHP7.

	* wxWidgets: Reinstate compileability with wxWidgets version
	2.8.12.

	Files affected:

	modified:   wx/htreecanvas.cpp
	modified:   wx/layout.cpp
	modified:   wx/vtreecanvas.cpp

	* NEWS: Add NEWS for 3.6.1.


2018-10-02 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.6.1.

	* win32/body.mak: Add support for WXUNICODE_PROGRAM7.  Not used in
	Emdros for now, but added because other projects use it.

============ 3.6.0 ============

2018-06-15 Ulrik Sandborg-Petersen

	* win32/: Remove SQLite2 support.  Files affected:

        modified:   win32/README.txt
        modified:   win32/body.mak
        modified:   win32/config.mak.in
        modified:   win32/lconfig.h.win32
        modified:   win32/mingw-body.mak
        modified:   win32/mingw.mak
        modified:   win32/win32.mak

	* src/bptdump.cpp: Also catch std::exception.  This is useful if
	it's the C++ STL that has thrown an exception, and we need to know
	what it is.

	* win32/win32.mak: In the CLEAN target, cd into sqlite3 rather
	than the non-existing sqlite directory.

	* win32/body.mak: Under Win32, add /LARGEADDRESSAWARE to the
	linker flags.  This should make us able to use 3GiB under most
	Windows versions.  NOTE: This is not necessary if compiling with
	64 bit support.

	* NodeJS support has been removed.  Reason: The latest version of
	SWIG (3.0.12 at the time of writing) does not support the latest
	Node.  Also, the Node.JS wrappers never really worked.

	* configure.ac: Set AC_PREFIX_DEFAULT to /usr instead of
	/usr/local.  This helps build .deb packages on Ubuntu 18.04.

2018-05-12 Ulrik Sandborg-Petersen

	* NEWS: Update with release notes for 3.6.0 (since 3.5.0).

2018-05-11 Ulrik Sandborg-Petersen

	* MQL/mql_query.cpp, include/mql_query.h,
	MQL/mql_select_statements.cpp: Differentiate calculateMMap by
	aggregate querying strategy: InnermostFirst and OutermostFirst.
	Reinstate using mmap when using InnermostStrategy.  This gives a
	performance gain.

	* INSTALL: Mention that the same set of packages also works on
	Fedora 28.

	* SWIG/csharp/Makefile.am: Add $(SWIG_GENERATED_CSHARPFILES) to
	DISTCLEANFILES.

	* include/emdfdb.h: Bump 'Last changed' date to 5/11-2018.

	* EMdF/emdfdb.cpp, include/emdfdb.h: Add a new parameter to
	EMdFDB::getObjectsHavingMonadsIn() main entry point, namely:

	EMdFFFeatures *pre_query_constraints,

	This is not used in the SQL implementations of EMdF, but it is
	used by the BPT engine, which in turn doesn't use the
	pre_query_string SQL fragment.

	* MQL/mql_R.cpp: In R_inst(), pass the pre_query_constraints to
	the EMdFDB::getObjectsHavingMonadsIn() method.

	* MQL/mql_select_statements.cpp: In GET OBJECTS HAVING MONADS IN,
	in the exec() phase, pass a nil (0) pointer to the
	EMdFDB::getObjectsHavingMonadsIn() method for the
	pre_query_constraints parameter.

	* EMdF/json.yxx, MQL/mql.yxx: In a campaign to remove all
	warnings, remove some warnings in the syntax_error function.

	* harvest/templatelang.yxx: In a campaign to remove all warnings,
	remove some warnings in the syntax_error function

	* util/pennparser.yxx: In a campaign to remove all warnings,
	remove some warnings in the syntax_error function, and in the
	yy_destructor() function.

	* Continuing the campaign to remove warnings, the following files
	had warnings removed.  Most of the warnings were about GCC 8.0's
	new "catching polymorphic exception 'class XYZ' by value" warning.
	The recommended way is to throw by value and catch by reference,
	according to the book by Herb Sutter and Alexei Alexandrescu.

	- EMdF/emdfdb.cpp
	- EMdF/mysqlemdfdb.cpp
	- EMdF/pgemdfdb.cpp
	- EMdF/sqlite3emdfdb.cpp
	- MQL/mql_R.cpp
	- MQL/mql_query.cpp
	- MQL/mql_select_statements.cpp
	- harvest/harvest_fts.cpp
	- harvest/harvest_fts2.cpp
	- harvest/harvest_fts3.cpp
	- harvest/renderobjects.cpp
	- harvest/renderxml.cpp
	- include/mql_query.h
	- src/agexport.cpp
	- src/bptdetach.cpp
	- src/bptdump.cpp
	- src/fts_harvester.cpp
	- src/fts_indexer.cpp
	- src/manage_indices.cpp
	- src/mql.cpp
	- src/mqldump.cpp
	- src/negraimport.cpp
	- src/pennimport.cpp
	- src/plaintextimport.cpp
	- src/qrytool/exec.cpp
	- src/renderobjectstool.cpp
	- src/sfmimport.cpp
	- src/slashedtextimport.cpp
	- src/tigerxmlimport.cpp
	- src/ubimport.cpp
	- src/upgrade_db.cpp
	- tests/bpttry.cpp
	- tests/emdftry.cpp
	- tests/erwtry.cpp
	- tests/mqllingtry.cpp
	- tests/mqltry.cpp
	- tests/qdtry.cpp
	- util/bpt2dumper.cpp
	- amalgamation/mkamalgamation.cpp
	- wx/layout.cpp

	* MQL/mql_query.cpp, include/mql_query.h: Implement
	ObjectBlockString::canChooseAQStrategyInnermostFirst(), and use it
	in UnorderedGroup::canChooseAQStrategyInnermostFirst().  The
	corresponding ObjectBlockString::aggregateQuery() method was
	already implemented.

	* MQL/mql_select_statements.cpp: Remove some debugging output.

2018-05-10 Ulrik Sandborg-Petersen

	* EMdF/monads.cpp: Fix bugs in SetOfMonads::fillGaps() and
	FastSetOfMonads::fillGaps() resulting in crash when "this" set of
	monads is empty.

	* MQL/mql_select_statements.cpp: Always use 'Innermost' aggregate
	query strategy if the query allows it.  Until now, we have been
	overriding this if the all_m_1 SetOfMonads was less than 2 million
	monads long.  Now we want to obey the query planner even in the
	face of "small" databases.

	* include/inst.h, EMdF/inst.cpp: Use a FastSetOfMonads for
	Inst::bigUnion() and Inst::almostRealBigUnion().  Do the same for
	the InstContents.

	* include/mql_query.h, MQL/mql_query.cpp: Use a FastSetOfMonads
	for all aggregate querying functions.

	* MQL/mql_select_statements.cpp: Use a FastSetOfMonads for
	aggregate querying.

	* MQL/mql_query.cpp: In method Block::aggregateQuery(): Remove
	redundant local variables.

	* MQL/mql_query.cpp: Fix bug in
	BlockString2::hasObjectBlockInBlockString() which caused it not to
	consider m_block_string2 if m_block_string1 did not have an
	ObjectBlock.

	* EMdF/emdfdb.cpp: Fix some error messages which misleadingly
	reported that they came from EMdFDB::getInst, when in fact they
	came from other methods.

	* MQL/mql_query.cpp: In ObjectBlock::symbol(), don't set
	m_bDoCalculatePreQueryString to false when m_pMSRC->getOperation()
	== kMSROOverlap.  This used to be necessary, until today.

	* MQL/mql_query.cpp: In
	ObjectBlock::canChooseAQStrategyInnermostFirst(), don't deny that
	we can choose the InnermostFirst strategy, even if the
	ObjectBlock's operation is kMSROOverlap.  Also just recurse down
	into the m_opt_blocks -- don't check m_feature_constraints on the
	grounds that we can't do R_inst() on kMSROOverlap.

	* MQL/mql_query.cpp: Make many improvements to the
	'InnermostFirst' part of the aggregate querying machinery.

	* MQL/mql_query.cpp: In ObjectBlock::makeInst(), don't use the
	mmap if we are doing the innermost first strategy (for now).  This
	is because the characteristic string is right now built with the
	assumption that we always use the outermost first strategy.

2018-05-08 Ulrik Sandborg-Petersen

	* Makefile.am: Remove Android.mk, since it is no longer present.

	* emdros.spec.in: Remove @WITH_SQLITE2@, since SQLite2 support was
	removed in 3.6.0.

	* EMdF/emdfdb.cpp, include/emdfdb.h: Change the signature of
	getObjectsHavingMonadsIn() and related methods such that they take
	a new parameter: pre_query_string.

	* EMdF/bptemdfdb.cpp, EMdF/bpt2emdfdb.cpp: Also do
	pre_query_string in the signature of getObjectsHavingMonadsIn for
	these dummy classes.

	* MQL/mql_R.cpp: In R_inst(), pass the pre_query_string to the
	getObjectsHavingMonadsIn() call.

	* MQL/mql_select_statements.cpp: In GET OBJECTS HAVING MONADS IN,
	Pass an empty pre_query_string to
	EMdFDB::getObjectsHavingMonadsIn().

2018-04-28 Ulrik Sandborg-Petersen

	* INSTALL: Mention the need for the re2c package on Ubuntu.

2018-04-18 Ulrik Sandborg-Petersen

	* EMdF/mysqlconn.cpp: In beginTransaction(), report error if
	execCommand("BEGIN") also reported error.  And set
	m_bTransactionInProgress to true iff the BEGIN command returned
	true.

	* SQLite 2: Remove all support for SQLite 2.  SQLite2 has been
	deprecated for some time, and has been unmaintained by the SQLite
	authors for many, many years.  Emdros 3.6.0 seems like a good
	opportunity to remove it.

	* debian/rules.in: Remove SQLite2 support.

	* debian/control: Downgrade requirement from debhelper (>= 10) to
	debhelper (>= 9), so as to compile on Ubuntu 16.04.

	* Debian/Ubuntu: Make sure that the following files are run
	through config.status, for replacement of @prefix@ with the
	correct thing:

	- debian/emdros.postinst
	- debian/emdros.postrm
	- debian/emdros.prerm

	Do this in Makefile.am in the root.

	* debian/rules.in: Add --prefix=@prefix@ to dh_auto_configure.
	This should finally enable locating an Emdros package in places
	other than /usr.

	* m4/wxemdros.m4: AC_SUBST(DO_WXWIDGETS).

	* debian/emdros.postinst.in, debian/emdros.postrm.in: Only do the
	blue-E icon rigmarole iff "x@DO_WXWIDGETS@" = "xyes".

	* wx/blue-E-512x512.png, wx/blue-E-256x256.png: Initial
	addition. Made with The GIMP from wx/blue-E-big.xcf.

	* wx/Makefile.am: Add blue-E-512x512.png and blue-E-256x256.png to
	EXTRA_DIST.

	* Remove RPM-GPG-KEY-ulrikp_emdros_org from the source
	distribution.  It was an ancient, expired GPG key.

2018-04-17 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.6.0.

	* EMdF/pgemdfdb.cpp: Use 'TEMPLATE template0' when doing CREATE
	DATABASE on PostgreSQL.  This is so as to avoid using template1,
	which may conflict with the encoding used.

	* EMdF/mysqlconn.cpp, include/mysqlconn.h: Implement support for
	transactions.  They have been around for a while in MySQL, and not
	using them means abysmal performance on CREATE OBJECT(S).

	* EMdF/mysqlconn.cpp: As part of the connect() method, call
	execCommand("SET autocommit = 0").  This ensures faster data
	ingestion times, now that we have transactions on MySQL.

============ 3.5.25 ============

2018-04-07 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.25.

	* include/emdros-lconfig.h.in: #include "win32-lconfig.h" on
	Windows.

	* include/win32.mak, include/mingw.mak: Don't replace
	emdros-lconfig.h with ../win32/lconfig.h.win32 -- instead, place
	the local config in include/win32-lconfig.h.

	* EMdF/bptemdfdb.cpp, include/bptemdfdb.h: Implement a dummy
	version of BPTEMdFDB::dumpPayload().  This ensures that
	src/bptdetach.cpp can compile, even when BPT is not present.

	* win32/README.txt: Add instructions for compiling wxWidgets for
	x64 mode on Windows.

	* win32/config.mak.in: Bump default wxWidgets version to 3.1.1 on
	Windows.

	* win32/lconfig.h.win32, include/emdros-lconfig.h.in: Remove the
	last vestiges of HAVE_WSTRING and HAVE_OSTREAM_OUT_WSTRING.  They
	were no longer used.

	* include/emdros-lconfig.h.in: Guard #define HAVE_ISTREAM dna
	HAVE_OSTREAM with #ifndef HAVE_XXX... this enables compilation on
	Windows with fewer warnings.

	* win32/config.mak.in: Bump default wxWidgets version to 3.0.4 on
	Windows, because 3.1.1 gives problems compiling with Visual Studio
	2017 with CPU=x64.

	* wx/viewmetrics.cpp, wx/vtreecanvas.cpp: Avoid deprecation
	warnings on wxWidgets 3.1.x, with respect to wxFontFamily,
	wxFontStyle, and wxFontWeight.

============ 3.5.24 ============

2018-04-03 Ulrik Sandborg-Petersen

	* include/lzma_emdros.h, EMdF/lzma_emdros.cpp: Move closer to
	being able to be used for the BPT engine.

	* src/bptdump.cpp, include/bptdumper.h, util/bptdumper.cpp:
	Upgrade to support BPT 1.9.4, with LZMA compression and the new
	--payload-codec option.

	* tests/bpttry.cpp: Update to support payload_codec parameter.

	* src/bptdetach.cpp: Initial addition. A utility to detach a
	payload from a BPT database.

	* src/Makefile.am, src/win32.mak, src/mingw.mak: Compile
	bptdetach.cpp.

	* win32/win32.mak: Install bptdetach.exe.

	* include/lzma_emdros.h, EMdF/lzma_emdros.cpp: Finish so that it
	is usable as a compression codec for the BPT engine.

	* amalgamation/amalgamation.json: Update so that it includes
	EMdF/lzma_emdros.cpp and include/lzma_emdros.h.

	* COPYING: Mention that the LZMA compression codec is in the
	Public Domain.

2018-03-31 Ulrik Sandborg-Petersen

	* include/lzma_emdros.h, EMdF/lzma_emdros.cpp: Move closer to
	being able to be used for the BPT engine.

	* m4/buildenv.m4: Define and AC_SUBST the following variables:

	- EMDROS_VERSION_MAJOR
	- EMDROS_VERSION_MINOR
	- EMDROS_VERSION_RELEASE

	* include/emdros-lconfig.h.in: #define the following defines:

	- EMDROS_VERSION_MAJOR
	- EMDROS_VERSION_MINOR
	- EMDROS_VERSION_RELEASE
	- EMDROS_CHECK_VERSION

2018-03-30 Ulrik Sandborg-Petersen

	* include/lzma_emdros.h, EMdF/lzma_emdros.cpp: Include support for
	LZMA encoding / decoding in Emdros.  Will be used for BPT.  The
	code is in the Public Domain, based on the Public Domain parts of
	PDLzip.

	* include/Makefile.am, include/Makefile.inc: Distribute
	include/lzma_emdros.h.

	* EMdF/Makefile.am, EMdF/win32.mak, EMdF/mingw.mak: Distribute and
	compile lzma_emdros.cpp.

2018-03-16 Ulrik Sandborg-Petersen

	* INSTALL: Update instructions for MariaDB.

2018-03-08 Ulrik Sandborg-Petersen

	* INSTALL: Update instructions for Fedora 27.

2018-03-01 Ulrik Sandborg-Petersen

	* wx/htreecanvas.cpp, wx/vtreecanvas.cpp, wx/layout.cpp: Use
	wxPENSTYLE_SOLID instead of wxSOLID, thereby getting rid of some
	deprecation warnings on wxWidgets 3.1.x.

2018-02-28 Ulrik Sandborg-Petersen

	* win32/body.mak: Add /EHsc to CPPFLAGS_EXTRA, since this enables
	exceptions on Visual Studio's compiler.

2018-02-23 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.24.

	* m4/emdrosswig.m4: Support php-config7.2.

============ 3.5.23 ============

2018-02-13 Ulrik Sandborg-Petersen

	* include/harvest_fts3.h: Remove unimplemented forward declaration
	of BookcaseHitList3.

	* include/harvest_fts3.h,harvest/harvest_fts3.cpp: Implement
	support in FTS3 for more than one indexed_feature, by passing a
	comma-separated list of feature names on the indexed OTN.

	* harvest/harvest_fts3.cpp: Guard against segfault crashes in FTS3
	when there are no hits, or no query terms.

	* include/harvest_fts.h,harvest/harvest_fts.cpp: Factor out the
	translation of * and ? in query terms into its own function.  Use
	this in FTS 1 and FTS3.

	* harvest/harvest_fts3.cpp: Enable the use of * and ? in query
	terms in FTS3.

	* src/fts_harvester.cpp: Document the options -hpp, -page, and -fe
	3 in the usage.

	* SWIG/java/Makefile.inc, SWIG/csharp/Makefile.inc: Update to the
	latest required files.

	* harvest/harvest_fts3.cpp: Make FTS3 obey largest_proximity.

2018-02-07 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.23.

	* harvest/Makefile.am: Remove GNU-ism by not using $<.  Hopefully
	this makes it easier to compile without GNU make, e.g., on
	Solaris.

	* EMdF/logging.cpp: Update the call to ctime_r on Solaris, so as
	to be POSIX compliant.  This now works on Solaris 10.

============ 3.5.22 ============

2017-12-21 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.22.

	* harvest/templatelang.yxx: Fix omission of 'var' in the new {{
	inccounter <string> var <string> }} and {{ deccounter <string> var
	<string> }} harvest render templates.

============ 3.5.21 ============

2017-12-21 Ulrik Sandborg-Petersen

	* Add versions of inccounter and deccounter to the harvest
	template language which take the name of a variable to use for
	incrementing / decrementing the counter.

	* configure.ac, debian/changelog: Bump to 3.5.21.

============ 3.5.20 ============

2017-12-03 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.20.

	* SWIG/php/Makefile.am: Fix bug which prevented SWIG PHP bindings
	from being distributed even if made at "make dist" time.

	* SWIG/php7/Makefile.am: Fix the same bug as just reported for
	PHP5.

	* m4/emdrosswig.m4: For PHP5, check for php-config5.4, and also
	check in descending order of php-config5.6, php-config5.5,
	php-config5.4, and php-config.

	* m4/emdrosswig.m4: Better diagnostic output for PHP5 and PHP7
	when we don't have swig(1) installed on the build system.

============ 3.5.19 ============

2017-12-02 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.19.

	* SWIG/java/Makefile.am: Always build TestEmdros.java, so as to be
	able to make an RPM.

============ 3.5.18 ============

2017-12-02 Ulrik Sandborg-Petersen

	* MQL/mql_sheaf.cpp: Fix bug in FlatSheaf::addMO() whereby pow_m
	objects arising from gap_blocks or opt_gap_blocks did not get into
	the flat sheaf.

	* tests/mqltry.cpp: Fix one of the tests with the new output
	resulting from the previous change today.

2017-11-17 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.18.

	* m4/emdrosswig.m4: Make sure that Python2 and Python3 bindings
	are not attempted to be built if: a) the SWIG program is not
	present on the system, and b) The necessary source code has not
	been pre-built and pre-distributed.  In distributed release
	tarballs, the necessary source code has usually been pre-built,
	and so this bug is not usually triggered by release tarballs.
	This is fixed so as to make Emdros easier to compile after a "make
	distclean", or simply after a git checkout.

============ 3.5.17 ============

2017-10-22 Ulrik Sandborg-Petersen

	* SWIG/php/Makefile.am: Fix bug with self-referencing
	MAYBE_BUILT_SRC in PHP5 SWIG bindings.

2017-10-13 Ulrik Sandborg-Petersen

	* INSTALL: Make the instructions for Ubuntu more explicit.  In
	particular, explicitly mention which packages are essential (the
	bare minimum), and which are optional in which scenarios.  Also,
	split the instructions into: a) Building a .deb from a tarball,
	and b) Building from source after a make distclean.

2017-10-12 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.17.

	* Remove throw (exception-class-list) declarations on all member
	functions.  This is because these throw declarations are
	deprecated in C++, and generate too many warnings for the warnings
	to be useful.

	Note that this may have an impact on the SWIG bindings, which are
	no longer able to know which C++ exceptions to catch and transform to
	the host language's exception system.

	The following files were changed as a result.  Note that, as an
	exception to the usual rule, the date at the top of the file was
	not updated.

	modified:   EMdF/bpt2emdfdb.cpp
	modified:   EMdF/bptemdfdb.cpp
	modified:   EMdF/emdf_ffeatures.cpp
	modified:   EMdF/emdf_value.cpp
	modified:   EMdF/emdfdb.cpp
	modified:   EMdF/minidom.cpp
	modified:   EMdF/monads.cpp
	modified:   EMdF/mysqlemdfdb.cpp
	modified:   EMdF/pgemdfdb.cpp
	modified:   EMdF/qdxml.cpp
	modified:   EMdF/sqlite3emdfdb.cpp
	modified:   EMdF/sqliteemdfdb.cpp
	modified:   EMdF/table.cpp
	modified:   MQL/emdros_environment.cpp
	modified:   MQL/mql_R.cpp
	modified:   MQL/mql_execute.cpp
	modified:   MQL/mql_query.cpp
	modified:   MQL/mql_sheaf.cpp
	modified:   harvest/harvest_fts.cpp
	modified:   harvest/harvest_fts2.cpp
	modified:   harvest/renderobjects.cpp
	modified:   harvest/renderxml.cpp
	modified:   include/bpt2emdfdb.h
	modified:   include/bptemdfdb.h
	modified:   include/emdf_ffeatures.h
	modified:   include/emdf_value.h
	modified:   include/emdfdb.h
	modified:   include/environment_emdros.h
	modified:   include/harvest_fts.h
	modified:   include/harvest_fts2.h
	modified:   include/layout.h
	modified:   include/llist.h
	modified:   include/minidom.h
	modified:   include/monads.h
	modified:   include/mql_R.h
	modified:   include/mql_execute.h
	modified:   include/mql_query.h
	modified:   include/mql_sheaf.h
	modified:   include/mysqlconn.h
	modified:   include/mysqlemdfdb.h
	modified:   include/pgconn.h
	modified:   include/pgemdfdb.h
	modified:   include/qdxml.h
	modified:   include/renderobjects.h
	modified:   include/sqlite3conn.h
	modified:   include/sqlite3emdfdb.h
	modified:   include/sqliteconn.h
	modified:   include/sqliteemdfdb.h
	modified:   include/table.h
	modified:   include/tigerxmlimporter.h
	modified:   util/tigerxmlimporter.cpp
	modified:   wx/layout.cpp

	* harvest/renderxml.cpp: Add '/* fall through */ comments in
	READ_UTF8 macro in order to silence some compiler warnings.

============ 3.5.16 ============

2017-10-03 Ulrik Sandborg-Petersen

	* util/emdfxml.dtd: Initial addition.

	* util/Makefile.am: Create emdfxml_dtd.h from emdfxml.dtd.

	* util/emdfxml.cpp, include/emdfxml.h: Initial addition. Not
	finished yet.

2017-09-17 Ulrik Sandborg-Petersen

	* include/mingw.mak: Re-enable compilation on Windows MinGW, by
	adding USE_BPT2 to emdros-lconfig.h.

	* amalgamation/mingw.mak: Update the MinGW mingw.mak Makefile to
	the new amalgamation file set.

	* examples/HAL/hal.cpp: Fix bug in opening a file which caused
	MinGW compilation to fail.

	* include/Makefile.am: In zlib_emdros.h, guard #include <zlib.h>
	with an #if preprocessor statement which only includes it if BPT
	or BPT2 are to be compiled.  This is so as to be able to compile
	the Emdros amalgamation (which includes zlib_emdros.h in emdros.h)
	on Windows without having the BPT and BPT2 engines enabled.

	* SWIG/nodejs/Makefile.am: Don't EXTRA_DIST MAYBE_BUILT_SRC.

	* amalgamation/mingw.mak: Make it more robust w.r.t. parallel
	make.

2017-09-16 Ulrik Sandborg-Petersen

	* SWIG/nodejs/Makefile.am: Copy the amalgamation source code to
	SWIG/nodejs/ as part of BUILT_SOURCES.

	* SWIG/java/Makefile.inc: Add eMonadSetMetadata.java.

	* SWIG/java/Makefile.inc: Remove eMonadSetMetadata.java again.

	* SWIG/java/Makefile.am: Make the Makefile rules significantly
	more robust w.r.t. parallel make.

	* SWIG/csharp/Makefile.am: Make the Makefile rules significantly
	more robust w.r.t. parallel make.

2017-08-17 Ulrik Sandborg-Petersen

	* harvest/harvest_fts3.cpp: Enable FTS3 to query not only string
	features, but also integer, list of integer, list of id_d, and
	list of enum features.

2017-08-15 Ulrik Sandborg-Petersen

	* win32/body.mak: Add '!IF "$(COMPILE_EMDROS)" == "1" ... !ENDIF'
	around the parts that pertain to Emdros only.  This enables
	body.mak to be re-purposed for projects outside of Emdros.

	* win32/config.mak.in: Define COMPILE_EMDROS = 1.

	* win32/body.mak: Set the default Windows subsystem version to 6.0
	for both X86 and X64.

	* win32/body.mak: Fix detection of wxWidgets on Windows in Emdros
	debug builds.

	* win32/body.mak: Add /EHsc (exception handling turned on) outside
	of the new COMPILE_EMDROS !IF ... !ENDIF.

	* win32/body.mak: Define WINVER=0601, since we don't plan to
	support Windows 2000 any more.

	* win32/body.mak: Remove APPVER from -subsystem:windows.

	* win32/body.mak: Do /RELEASE or /DEBUG link flags according to
	the DEBUG nmake variable.

	* win32/body.mak: Import wxzlib, wxjpeg, wxpng, and wxtiff in
	Debug on non-Debug versions depending on the DEBUG nmake variable.

	* win32/body.mak: Update the CPP_UNICODE_PROJ settings to reflect
	the others.

	* win32/body.mak: Add rule to compile .cc files alongside .cpp in
	CPP_UNICODE_OBJS.

	* src/qrytool/win32.mak, src/importtool/win32.mak,
	examples/ChunkingTool/win32.mak: Remove redundant (and, in DEBUG
	mode, wrong) linking to wxzlib.lib.

	* win32/body.mak: Use the /Yc switch instead of the obsolote /YX
	switch.

	* win32/body.mak: Define /D_CRT_SECURE_NO_WARNINGS=1 and
	/D_SCL_SECURE_NO_WARNINGS=1, to get rid of a lot of deprecation
	warnings that cloud the more useful warnings.

2017-08-13 Ulrik Sandborg-Petersen

	* INSTALL.Mac.txt: Better instructions for building wxWidgets on
	Mac OS X 10.9 and beyond.

2017-07-29 Ulrik Sandborg-Petersen

	* generate_extrafiles.py.in: Fix path to libemdrosguiu.a.

	* m4/emdrosswig.m4: Modernize the way the include path to Python.h
	is found, by using the Python module, distutil.sysconfig.

	* INSTALL: Document which packages to install for Node.JS SWIG
	bindings on Fedora.  Also, remove all instructions for Fedora
	10-24.

	* The SWIG bindings build system has been changed radically so
	that SWIG is no longer required to build a "make dist" tarball.
	That is, files generated by swig(1) are no longer EXTRA_DIST'ed
	unless they can be built.  This means that people other than Ulrik
	(or Ulrik when he does not have swig(1) installed) can now build
	"make dist" tarballs and still get them to work.

	* SWIG/java/Makefile.am: Don't set the -target to 1.6 and -source
	to 1.6 when compiling Java with javac.  Instead, let javac choose
	the target.

	* emdros.spec.in: Don't distribute SWIG/php/EmdrosPHP.ini and
	SWIG/php7/EmdrosPHP7.ini as %doc, since they are not
	documentation.

	* To the harvest template language, add a variant of the
	listappendbegin ... listappendend template, which first joins the
	added material with the empty string in between, and then splits
	it on a delimiter string, then extending the list with the
	resulting split list.

2017-07-27 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.16.

	* INSTALL: Add python3-devel to the list of Fedora optional
	packages.

============ 3.5.15 ============

2017-07-20 Ulrik Sandborg-Petersen

	* emdros.spec.in, generate_extrafiles.py.in: Make headless
	rpmbuild happy by conditionally including
	%{prefix}/lib/emdros/libemdrosguiu.a and not including general
	glob %{prefix}/lib/*.a in emdros.spec.in.

	* tests/mqltry.cpp: Allow parallel execution of the tests, even if
	both SQLite2 and SQLite3 are enabled.  This is done by using
	suffixes to the "emdf3" and "emdf4" databases, a distinct suffix
	for each of the SQLite2 and SQLite3 backends.

	* tests/mqltry.cpp: Remove the emdf{3,4}{,_sqlite2,_sqlite3}
	databases after a successful run.

2017-07-19 Ulrik Sandborg-Petersen

	* doc/Makefile.am: Distribute *.pdf into $(DOCDIR).

	* doc/progref/Makefile.am: Distribute *.html, including
	index.html, into ${docdir}/emdros-progref-guide.html/.

	* doc/progref/Makefile.inc: Initial addition. Created by
	doc/progref/Makefile.am.

	* SWIG/php/Makefile.am, SWIG/php7/Makefile.am: Use separator
	character ':', not '_' in invocation of sed, since $(pkglibdir)
	may include the '_' character, causing Debian builds to fail.

	* Makefile.am: Use $(MAKE) -C syntax for the "test" target and the
	$(EXAMPLESZIP) target..

	* tests/Makefile.am: Use $(MAKE) -C syntax for the "test" target
	for the asv and test_json subdirectories.

	* EMdF/Makefile.am, MQL/Makefile.am, harvest/Makefile.am,
	util/Makefile.am: Increase the chances of doing parallel make
	correctly, without failing on copying lempar.c or lemon.c, or
	compiling lemon.

	* SWIG/php7/Makefile.am: Fix the rule for creating
	php_EmdrosPHP7.h.

	* doc/progref/Makefile.am: Fix some rules in order to re-enable
	make dist.

	* tests/asv/Makefile.am, tests/test_json/Makefile.am: Increase the
	chances of doing parallel make correctly, without failing on not
	making asv.mql.

	* doc/progref/Makefile.am: Fix multiple issues with generation and
	instalation of doc files.

	* debian/control, debian/emdros.doc-base: The Debian section is
	now "Text" rather than "unknown".

	* debian/emdros.doc-base: Use ${prefix}/ rather than /usr/.  Also,
	distribute *.pdf.gz, not *.pdf.

	* signthis.bat: Update to reflect Ulrik's (local) setup for
	authenticode.  This file is only used by Ulrik when he creates
	official Windows binaries for Emdros.

	* debian/emdros.doc-base: Renamed into debian/emdros.doc-base.in,
	with @prefix@ instead of ${prefix} (which did not work).

	* Makefile.am: Generate debian/emdros.doc-base from
	debian/emdros.doc-base.in.

	* debian/changelog: Remove "-1" suffix from the 3.5.15 version,
	since a Debian 3.0 (native) package may not have this suffix.

	* emdros.spec.in: Update RPM SPEC file to reflect the newly
	installed /usr/share/doc/emdros/emdros-progref-guide.html/* files.

	* doc/progref/Makefile.am: Distribute dot.gif and cms.css into
	${docdir}/emdros-progref-guide.html/.

	* debian/docbase.in, Makefile.am: Renamed
	debian/emdros.doc-base.in into debian/docbase.in, to avoid
	problems with dh_installdocs.  Also reflect this change in
	Makefile.am.

	* emdros.spec.in: Avoid running the xdg tools for installing icons
	and .desktop application files if ${prefix}/bin/eqtu has not been
	installed, e.g., on a headless server with no wxGTK installed.

	* INSTALL: Improve instructions for building .rpm abd .deb
	packages, and for installing each of these formats on CentOS,
	Fedora, and Ubuntu.

	* emdros.spec.in: Make rpmbuild on Fedora 25 happy, by not listing
	the doc/*.pdf files twice, and by packaging %{prefix}/lib/*.a in
	the devel package.

2017-07-18 Ulrik Sandborg-Petersen

	* configure.ac: Check for TCL 8.6 if doing SQLite2.  Also, when
	looking for the tcl.h header, look in /usr/include/tcl as one of
	the places.

	* INSTALL: Update instructions for building .deb packages,
	mentioning how to do configure switches in debian/rules.

	* AUTHORS: Update email address of Kirk Lowery.  Update copyright
	years of Emdros.  Martin Petersen's name is now Martin Korshoej
	Petersen.

	* debian/rules.in: Add @WITH_SWIG_PHP7@ and @WITH_SWIG_PYTHON3@ to
	the dh_auto_configure rule, reflecting the recent addition of
	these language versions.

	* Makefile.am: Add rule to build debian/rules from
	debian/rules.in, and chmod the debian/rule file to 755.

	* debian/compat, debian/control: Bump compat level from 8 to the
	currently recommended compatibility level, 10.

	* Update Debian files to follow the installation of documentation
	more closely. Files changes:

	debian/docs.in
	debian/emdros.doc-base
	debian/emdros.examples
	debian/emdros.manpages

	* debian/source/format: Update from source format from 1.0 to the
	currently recommended, 3.0 (native).

	* Makefile.am: Distribute all of the new debian/ files.


2017-07-14 Ulrik Sandborg-Petersen

	* examples/HAL/HALSpace.cpp, examples/HAL/hal.cpp: Add the option
	"similarity_csv" to the arsenal of things to do.  It computes the
	cosine similarity between all rows, and saves the cosine
	similarities as the name given for the "similarity_csv" CSV file.

2017-07-11 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Fix bug in GET OBJECTS HAVING MONADS IN whereby
	an object could get into the FlatSheaf more than once.

2017-06-23 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.15.

============ 3.5.14 ============

2017-06-23 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.14.

	* include/arena.h: Better debugging info when Arena::allocat() fails.

	* include/arena.h: Let the chunk size be variable in the Chunk.
	Use this in order to safeguard against needing to allocate a size
	that is larger than the m_chunk_size.

============ 3.5.13 ============

2017-06-23 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.13.

	* Makefile.am: Use "python", not "$(PYTHON)" to invoke Python.

============ 3.5.12 ============

2017-06-22 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.12.

	* configure.ac: Don't do SQLite2 by default.  The user has to
	explicitly add --with-sqlite in order to get SQLite2 support.
	This is because SQLite2 is deprecated, and will be removed in a
	future version.

============ 3.5.11 ============

2017-06-22 Ulrik Sandborg-Petersen

	* EMdF/json_classes.cpp: Silence a compiler warning in
	JSONValue::castToInteger().

	* generate_extrafiles.py.in: Initial addition.

	* Makefile.am: At BUILT_SOURCES time, build
	generate_extrafiles.py, and use it to generate the two files,
	extrafiles-emdros.txt, and extrafiles-emdros-devel.txt, in the
	build dir root.

	* emdros.spec.in: Modernize the RPM spec file, so that it works
	with CentOS 7.  Use extrafiles-emdros.txt and
	extrafiles-emdros-devel.txt to do devel and main packages
	correctly.  Solve issue with debug info being incorporated in the
	emdros and emdros-devel RPM packages.

2017-06-15 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.11.

============ 3.5.10 ============

2017-06-01 Ulrik Sandborg-Petersen

	* configure.ac: Reinstate compileability on Solaris, by guarding
	ADDITIONAL_CXXFLAGS and ADDITIONAL_CFLAGS with a test for whether
	we are using GNU gcc/g++.  That is, don't set these to -Wall
	-Wextra, unless we are using the GNU compilers.

	* wx/conndlg.cpp: Comment out BackendKindValidator's copy c'tor,
	since it did not compile on Solaris with wxWidgets 2.8.

2017-05-31 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.10.

	* include/treeitem.h, include/viewmetrics.h: Add #include
	<algorithm>, so as to be able to compile with Visual Studio 2017
	on Windows.

============ 3.5.9 ============

2017-05-31 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.9.

	* tests/test_json/known_good_output/{test2.txt,test3.txt}: Adjust
	to the new reality of the escapeJSONChars() being correct (see
	2017-05-29 in version 3.5.7).

============ 3.5.8 ============

2017-05-31 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump Emdros version to 3.5.8.

	* harvest/Makefile.am: Don't compile the Emdros Scripting Language
	source files, since it is not yet ready.

============ 3.5.7 ============

2017-05-29 Ulrik Sandborg-Petersen

	* include/string_func.h: Fix escapeJSONChars() so that it does not
	escape '\'' as "\\'".  This is so as to conform with the JSON
	standard.

2017-05-23 Ulrik Sandborg-Petersen

	* harvest/emdroslang.yxx: Fix some compilation errors.

	* EMdF/json_classes.cpp, include/json_classes.h: Add member
	function JSONValue::castToString().

	* harvest/emdroslang.yxx, harvest/emdroslang.re: Make a complete parser
	and lexer which now also compile.

	* harvest/emdroslang_classes.cpp, include/emdroslang_classes.h:
	Make it compile.

	* include/mql_enums.h: Move the eELOperation enum into
	include/emdroslang_classes.h.  It was created yesterday, and was
	misplaced into include/mql_enums.h.

	* include/emdf_hash.h: Implement a visitAllEntries() method on
	EmdrosStringHashTable<V>.

	* harvest/emdroslang_classes.cpp, include/emdroslang_classes.h:
	Implement most of the Emdros Scripting Language.

2017-05-22 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.7.

	* harvest/emdroslang.yxx, harvest/emdroslang.re: Implement a
	recognizer for the newly designed language.

	* include/mql_enums.h: Implement eELOperation enum.

	* harvest/emdroslang.yxx: Implement a fully functional parser,
	generating an AST (pending implementation of
	harvest/emdroslang_classes.cpp).

	* include/emdroslang_classes.h: Implement all EmdrosLang class
	declarations necessary for the new grammar.

	* include/json_classes.h, EMdF/json_classes.cpp: Implement a copy
	constructor, assignment operator, and a private "copyOther" member
	function on class JSONValue.

	* include/json_classes.h, EMdF/json_classes.cpp: Implement the
	following methods:

	- JSONValue::isFalse()
	- JSONValue::castToBool()
	- JSONValue::castToInteger()

	* harvest/emdroslang_classes.cpp: Implement ELASTNode,
	ELStatement, and ELExpression (the latter is mostly done, but not
	quite).

2017-05-22 Ulrik Sandborg-Petersen

	* include/string_func.h, EMdF/string_func.cpp: Make all formal
	parameters which were "std::string" or "const std::string" be
	"const std::string&" instead.

2017-05-08 Ulrik Sandborg-Petersen

	* win32/body.mak: Add WX program 6 (we had up to program 5
	before).

============ 3.5.6 ============

2017-04-18 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.6.

	* SWIG/nodejs/binding.gyp.in: Adjust to the new reality of the new
	file names for the amalgamation.

	* m4/emdrosswig.m4: Reinstate the WITH_SWIG_* AC_SUBST variables,
	thus re-enabling the control over the building of .spec and .deb
	files with a previous invocation of ./configure.

	Indirectly affected files:

	./emdros.spec.in
	./debian/rules.in
	./configure.ac

	It is unknown how far back this bug has been present.

	* m4/emdrosswig.m4: Fix the detection of SWIG's ability to do PHP7
	bindings.  It was fundamentally broken.

============ 3.5.5 ============

2017-04-13 Ulrik Sandborg-Petersen

	* amalgamation/amalgamation.json, amalgamation/mkamalgamation.cpp:
	Two issues fixed:

	- Those header files which are written in C, not C++, now have the
	#ifdef __cplusplus \ extern "C" { \ #endif \ ... #ifdef
	__cplusplus \ } \ #endif incantation, so as not to cause linkage
	breakage when using amalgamation/emdros.h.

	- Those header files which are internal from PCRE and SQLite3 are
	now ignored rather than included in emdros.h.  This is so as not
	to cause compiler problems.

	* include/: Guard some declarations with #ifndef SWIG ... #endif,
	so as not to have too many SWIG-wrapped classes and functions.

	Files affected:

	- include/harvest_fts.h
	- include/json_classes.h
	- include/mql_execute.h
	- include/mql_sheaf.h
	- include/renderobjects.h
	- include/renderxml.h

	* sqlite3/src/Makefile.am, sqlite3/src/win32.mak: define
	-DNDEBUG=1, so as to skip asserts, causing a speed improvement in
	SQLite3.

	* amalgamation/amalgamation.json: #define NDEBUG (1) if we are
	doing SQLite3, and NDEBUG has not been defined.

	* SWIG/csharp/Makefile.inc: Don't distribute .cs files that are no
	longer generated by SWIG, due to the guarding with #ifndef SWIG
	... #endif done above.

	* SWIG/java/Makefile.inc: Same thing for Java as for C#.

	* SWIG/Android/Makefile.am: Rearrange so that:

	- Java files are written into SWIG/Android/Java,
	- C++ files and C files and h files are written into SWIG/Android/Cpp,
	- The above files are distributed from there, and
	- The "zip" target creates a ZIP file after compiling Emdros,
	which can be used to distribute into an Android project.

	This was done because tar apparently cannot handle file names with
	paths longer than 99 characters, at least not without specifying
	--posix.

	It was also done because the amalgamation may or may not exist at
	the time of make dist, and will have to be re-copied anyway on the
	user's machine.

	So, in summary: It was the right thing to do.

	* amalgamation/amalgamation.json: Put the following files back
	into the "available_headers", so as to be able to compile the C
	amalgamation at all.

	- pcre/pcre_internal.h
	- pcre/ucp.h

	... but also add them to "ignored_headerfiles", so as not to add
	them to emdros.h.

	* amalgamation/mingw.mak: Update to reflect the recent changes in
	the amalgamation output.

	* amalgamation/mkamalgamation.cpp: When creating emdros.h, only
	emit C++ headers, not C headers.  This finally solves the issue
	with compiler errors due to internal/external C headers being
	included.

2017-04-11 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.5.

	* SWIG/Android/: Initial addition.

	These SWIG Java bindings are customized for Android.

	* Silence some "unused parameter" warnings.

	Files affected:

	- util/negraimporter.cpp
	- util/bptdumper.cpp
	- src/qrytool/wxilqtout.cpp

============ 3.5.4 ============

2017-04-10 Ulrik Sandborg-Petersen

	* amalgamation/: The amalgamation is now split into five files
	rather than three:

	- amalgamation/emdros_amalgamation_1.cpp
	- amalgamation/emdros_amalgamation_2.cpp
	- amalgamation/emdros_c_amalgamation_1.c
	- amalgamation/emdros_c_amalgamation_2.c
	- amalgamation/emdros.h

	This is because, on Android, the MIPS64 and MIPS architectures
	cannot deal with the size of the code produced by the old
	amalgamations.

	The SWIG/nodejs/Makefile.am has also been amended accordingly,
	since it copies and uses the amalgamation.

	* sqlite3/src/encryption.c, include/bpt2emdfdb.h: Silence some
	"unused parameter" warnings.

	* Silence some "std::auto_ptr is deprecated" warnings.  Revert
	back to C++98 pointer syntax (and semantics), so as to keep Emdros
	truly portable.

	Files affected:

	- include/conf_ini.h
	- include/erw.h
	- util/conf_ini.cpp
	- util/erw.cpp

	* EMdF/bpt2emdfdb.cpp: Silence a lot of "unused parameter"
	warnings.

	* pcre/internal.h, pcre/ucpinternal.h: Removed from Git, and from

	- amalgamation/amalgamation.json

	because these files were no longer part of the latest PCRE (8.40).

	* pcre/AUTHORS, pcre/ChangeLog: Update to PCRE 8.40.

	* Silence some "unused parameter" warnings.

	Files affected:

	- EMdF/sqliteemdfdb.cpp
	- EMdF/sqlite3emdfdb.cpp
	- EMdF/mysqlemdfdb.cpp
	- EMdF/bptemdfdb.cpp
	- include/layout.h
	- include/leftrightchooser.h
	- include/vtreecanvas.h
	- wx/browsewidget.cpp
	- wx/conndlg.cpp
	- wx/dropdown_widget.cpp
	- wx/importerwizard.cpp
	- wx/leftrightchooser.cpp
	- wx/viewmetrics.cpp
	- wx/vtreecanvas.cpp
	- wx/layout.cpp
	- wx/htreecanvas.cpp
	- wx/wxorder_chooser.cpp
	- src/qrytool/mainframe.cpp
	- src/qrytool/qtconnwizard.cpp
	- include/llist.h

	* util/md5_emdros.cpp: Don't use 'register' as a modifier for some
	local variables, since 'register' is deprecated in C++1z, and
	clang complains (on macOS, at least).

	* sqlite3/: Upgrade to SQLite 3.18.0 from 2017-03-28.

	* Silence some 'unused parameter' warnings.

	Files affected:

	- EMdF/mysqlconn.cpp
	- EMdF/sqlite3conn.cpp
	- EMdF/sqliteconn.cpp
	- examples/ChunkingTool/ctmf.cpp

2017-04-07 Ulrik Sandborg-Petersen

	* src/qrytool/bhs4_trees.cfg, src/qrytool/bhs4_bracketed.cfg:
	Initial addition. Also distribute on Linux, Mac, and Windows.

2017-03-07 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.4.

	* EMdF/qdxml.cpp: One further optimization.

============ 3.5.3 ============

2017-03-03 Ulrik Sandborg-Petersen

	* tests/win32.mak: Build emdros_qdtry.exe.

	* win32/win32.mak: Distribute emdros_qdtry.exe.

	* EMdF/qdxml.cpp, include/qdxml.h: Remove throw(QDException)
	clause from declaration and implementation of getNextChar().

	* EMdF/qdxml.cpp: Fix bug in getNextChar() which could cause an
	exception to be thrown in fillBuffer().

	* EMdF/qdxml.cpp, include/qdxml.h: Remove members tok, ptr, and
	pos, since they are not used in the new implementation of
	getNextChar() and fillBuffer().

	* EMdF/qdxml.cpp: Lower the size of READ_SIZE from 1MB to 32KB,
	with no loss of performance, and greater usability on mobile
	platforms.  This also has ramifications for render_XML, which may
	be used with the Render library's stylesheets.

	* EMdF/qdxml.cpp: Various improvements in runtime of XML parsing
	algorithm.

2017-03-02 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.3.

	* EMdF/minidom.cpp: Bugfix: MiniDOMText::pretty() should
	XML-mangle the text.

	* EMdF/minidom.cpp: Speed improvement: MiniDOMElement::pretty()
	now uses EMdF/string_func.cpp's escapeXMLEntities() instead of
	passing over the string 4 times.

	* tests/Makefile.am: Rename the 'qdtry' program to 'emdros_qdtry',
	and put it in the bin_PROGRAMS variable.

============ 3.5.2 ============

2017-03-02 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.2.

	* src/renderobjectstool.cpp: Catch std::exception.

============ 3.5.1 ============

2017-03-02 Ulrik Sandborg-Petersen

	* EMdF/qdxml.cpp: Fix a memory allocation issue which occurs under
	obscure circumstances under Windows, by swapping out the
	QDParser::fillBuffer() method with a new implementation.  Also add
	QDParser::readIntoBuffer().

	This also affects harvest/renderxml.cpp, which is where the bug
	surfaced.

	* tests/qdtry.cpp: Simplify the code, removing dead code.

2017-03-01 Ulrik Sandborg-Petersen

	* include/emdf.h: #define macro UNUSED(), in order to silcense
	some compiler warnings.

	* Add UNUSED() to unused parameters in:

	- EMdF/bptemdfdb.cpp
	- EMdF/conn.cpp
	- include/bptemdfdb.h
	- include/emdfdb.h
	- include/table.h

	* harvest/renderobjects.cpp: Fix 'local variable hides other local
	variable' bug in render_objects

	* include/table.h: Explicitly call the c'tor of base class of
	TableRow in the copy constructor.

	* Add UNUSED() to unused parameters, or silence other warnings, in:

	- EMdF/emdfdb.cpp
	- EMdF/logging.cpp
	- MQL/mql.yxx
	- MQL/mql_R.cpp
	- MQL/mql_execute.cpp
	- MQL/mql_helper_classes.cpp
	- MQL/mql_monads_statements.cpp
	- MQL/mql_object_statements.cpp
	- MQL/mql_query.cpp
	- MQL/mql_select_statements.cpp
	- examples/HAL/HALSpace.cpp
	- examples/HAL/hal_build_database.cpp
	- examples/HAL/hal_execution_environment.cpp
	- examples/HAL/hal_string_func.cpp
	- harvest/harvest_fts.cpp
	- harvest/harvest_fts2.cpp
	- harvest/renderobjects.cpp
	- harvest/templatelang.yxx
	- harvest/templatelang_classes.cpp
	- include/bpt2emdfdb.h
	- include/mql_execution_environment.h
	- include/mql_query.h
	- include/pennimporter.h
	- include/qdxml.h
	- include/renderobjects.h
	- src/mql.cpp
	- src/qrytool/consout.cpp
	- src/qrytool/mytable.h
	- src/qrytool/output_style.cpp
	- src/qrytool/qtoutput.cpp
	- src/qrytool/qtoutput.h
	- src/ubimport.cpp
	- tests/bpttry.cpp
	- tests/mqllingtry.cpp
	- util/erw.cpp
	- util/mql_exporter.cpp

2017-02-14 Ulrik Sandborg-Petersen

	* include/string_list.h: Implement StringList::getLength() and
	ParserList<T>::getLength().

	* doc/progref/Content.txt: Document StringList::getLength().

2017-02-02 Ulrik Sandborg-Petersen

	* tests/win32_testall.bat: Initial addition.

2017-02-01 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.1.

	* tests/mqlqa.h.in, tests/bptqa.h.in: Test the following cases:

	SELECT ALL OBJECTS WHERE [OT_Name integer_feature IN (integer-list)]

	SELECT ALL OBJECTS WHERE [OT_Name id_d_feature IN (integer-list)]

	* tests/mqltry.cpp: Also test SQLite3 with a password.  This is
	useful if the encryption module is included.  Otherwise, it just
	tests SQLite3 twice without encryption.

	* tests/bpttry.cpp: Also test BPT and BPT2 backends with
	passwords, bothh sscanf-based and char-based.

	* tests/bpttry.cpp: Teach bpttry to run successfully even if
	neither BPT nor BPT2 are installed.

	* tests/Makefile.am: As part of the test suite, run bpttry with -b
	3 and -b 2.

============ 3.5.0 ============

2017-01-30 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.5.0.

	* pcre/config.h.win32: #define something that needed #defining on
	Windows.

	* win32/win32.mak, win32/body.mak: Update to use latest MySQL
	Connector directory hierarchy.

	* win32/config.mak.in: Do X64 binaries by default, since MySQL no
	longer ships with X86 binaries.  Do C# SWIG bindings by default.
	Upgrade to latest JDK 1.8.0_121.  Change path to NSIS to be inside
	C:\Program Files (x86)\.

============ 3.4.1.pre43 ============

2017-01-30 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre43.

	* doc/progref/Content.txt: Update for new SWIG bindings (Python
	3.x and PHP7).

	* INSTALL: Update with info on new
	--with-swig-language-{nodejs,python3,php7}.

	* sqlite3/src/*: Upgrade to SQLite 3.16.2 (2017-01-06).

	* sqlite3/tool/lemon.c, sqlite3/tool/lempar.c: Upgrade to lemon(1)
	from SQLite 3.16.2 (2017-01-06).

	* pcre/: Upgrade to PCRE 8.40 (2017-01-11)

============ 3.4.1.pre42 ============

2017-01-25 Ulrik Sandborg-Petersen

	* Add support for PHP7 when either SWIG 3.0.11 or higher is
	installed, or when building from an official tarball.

	* Add support for Python 3.

	* MQL/Makefile.am: Do building of lemon.c in a way that supports
	parallel make, without stopping the build.

	* SWIG/php/Makefile.am: Do macdist correctly.

	* SWIG/php7/Makefile.am: Do macdist correctly.

	* SWIG/python/test.py: Make it work with modern versions of
	Python2 and modern versions of Emdros.

	* SWIG/python3/test3.py: Add /usr/lib/emdros to the sys.path.

2017-01-24 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre42.

	* commit_tarball.sh: Add a 'git pull' command before 'git add'.

============ 3.4.1.pre41 ============

2016-12-29 Ulrik Sandborg-Petersen

	* amalgamation/amalgamtion.json: Include util/md5_emdros.cpp in
	the amalgamation, since a client requires this functionality.

2016-12-28 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre41.

============ 3.4.1.pre40 ============

2016-12-17 Ulrik Sandborg-Petersen

	* INSTALL: Document the required packages on Ubuntu 16.04 better,
	specifying some PPAs needed.

	* m4/emdrosswig.m4: Fix bug on Ubuntu 16.04 LTS w.r.t. PHP5 not
	being detected even though it is installed.

	* configure.ac: Enable compilation with PostgreSQL support on
	Ubuntu 16.04 LTS (Xenial) amd64 by adding the requisite directory
	to the list of directories in which to look for libpq.a.

	At some point, we should use the pg_config program instead of or
	in addition to this.

2016-12-10 Ulrik Sandborg-Petersen

	* MQL/emdros_environment.cpp: Add kBPT2 as a valid backend that
	can be instantiated.

	* win32/config.mak.in: Add BPT2 variable.

	* win32/body.mak: Make sure that /DUSE_POSTGRESQL=1|0 etc. are
	defined for all backends, based on what's in the config.mak.

	* win32/win32.mak: Add a step to do zlib if BPT2 is == 1.

2016-11-25 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre40.

============ 3.4.1.pre39 ============

2016-11-24 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre39.

	* EMdF/json_classes.cpp: Ensure that it compiles on Android, by
	not requiring std::ostream::operator<< to be able to handle long
	long.

============ 3.4.1.pre38 ============

2016-11-24 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre38.

	* Android.mk: Update with latest source paths, especially from
	PCRE, but also from EMdF.

	* Android.mk: Add -DHAVE_CONFIG_H to LOCAL_CFLAGS, so as to be
	able to compile the PCRE library.

	* Android.mk: Add the following at the top:

	LOCAL_PATH := $(call my-dir)


============ 3.4.1.pre37 ============

2016-11-23 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre37.

	* INSTALL: Update instructions for Fedora 25.

	* INSTALL: Say explicitly which packages are optional on Fedora
	25.

	* SWIG/java/Makefile.am: Don't require javac to be installed for
	"make dist".

	* INSTALL: Say explicitly which packages are optional on Ubuntu
	16.04 LTS (xenial).

	* util/opt.cpp: Add printBackendsAvailable() function.

	* util/opt.cpp: Add getBackendsAvailable() function, and use it in
	printusageStandardArguments().

	* util/opt.cpp: Document -b b2, -b bpt2 as options to select BPT2.

	* src/mql.cpp: Call printBackendsAvailable() when giving --version
	switch.

	* emdros.spec.in: Allow building an RPM without any SWIG bindings.

	* SWIG/java/Makefile.am: Enable make dist from a distcleaned
	directory.

	* m4/emdrosswig.m4: Fix bug in detection of PHP5 from PHP_CONFIG
	--vernum.

	* SWIG/php/Makefile.am: Only make the SWIG C++ bindings for PHP if
	SWIG_WITH_PHP_WRAPPERS is true, i.e., if PHP5 is installed on the
	system, and SWIG is also installed.

============ 3.4.1.pre36 ============

2016-11-16 Ulrik Sandborg-Petersen

	* harvest/templatelang_classes.cpp: Implement these new templates:

	- {{ namedsetaddbegin 'named-set-name' 'delimiter' }}...{{
	namedsetaddend }}.

	- {{ namedsetremovebegin 'named-set-name' 'delimiter' }}...{{
	namedsetremoveend }}.

	- {{ namedsetemit 'named-set-name' 'delimiter' }}

	- {{ namedsetclear 'named-set-name' }}

	- {{ if namedsetempty 'named-set-name' }}...{{ endif }}

	* harvest/templatelang_classes.cpp: As a result of the new
	templates, implement a stack of eEmitTarget to tell the engine
	what to emit to.

	* harvest/templatelang_classes.cpp: Rename
	TemplateLangExecEnv::setBigString() to setBigstring.  The
	Bigstring class is not named BigString.

	* harvest/renderobjects.cpp: Use the renamed setBigstring().

	* doc/progref/: Update Content.txt and files.txt with the new
	templates, and fix documentation bug w.r.t. the "dictionaries" key
	/ value pair in the stylesheets.  Also update the date, and bump
	the version being documented to 3.4.1.pre36.

2016-11-11 Ulrik Sandborg-Petersen

	* EMdF/string_func.cpp: Add kBPT2 capabilities to
	string2backend_kind and backend_kind2string.

	* src/mql.cpp: Put the creation of the EmdrosEnv and the
	validation of the connection inside the big try ... catch
	statement.  This was necessary in order to debug BPT2EMdFDB.

	* tests/bpttry.cpp: Add ability to test BPT2EMdFDB.

	* util/messages.cpp: Add message for kBPT2 about it not being Open
	Source.

2016-11-04 Ulrik Sandborg-Petersen

	* doc/bootstrapping.txt: Change PostgreSQL instructions to have
	switches "-s" and "-d" to the createuser program.

2016-10-29 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre36.

============ 3.4.1.pre35 ============

2016-10-28 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre35.

	* sqlite3/: Upgrade to SQLite 3.15.0 from 2016-10-14.

	This should give a speed increase on databases using SQLite3.

	* sqlite3/tool/: Upgrade to lemon from SQLite 3.15.0, including
	sqlite3/doc/lemon.html.

	This brings about a slight speed increase in the parsing of MQL,
	JSON, the renderobjects / renderxml template language, and the
	Penn Treebank parser.

	* tests/bptqa.h.in: Make the BPT tests not fail, by updating the
	expected error messages as introduced in 3.4.1.pre32.

	* tests/bptqa.h.in: Make the BPT tests also test the new
	UnorderedGroup construct, by copying the tests of this from
	tests/mqlqa.h.in.

	* win32/emdros.nsi.in: Make it optional whether to install SWIG
	java bindings, SWIG C# bindings, or SWIG python bindings on
	Windows.

============ 3.4.1.pre34 ============

2016-10-28 Ulrik Sandborg-Petersen

	* m4/emdrosswig.m4: On the Mac, do Perl bindings only if we are
	not doing C++11.  This is because the Perl headers on the Mac
	cause a compiler error when using a C++11-enabled compiler.

	* m4/buildenv2.m4: On all platforms using configure.ac, fix bugs
	in setting of the variables:

	- CXX_basename
	- COMPILER_IS_GPLUSPLUS

	This is especially relevant on the Mac when using the new support
	for C11++, since some errors were logged before when running the
	configure script in this case.

2016-10-20 Ulrik Sandborg-Petersen

	* examples/KJVParsed/Makefile.am: Add a CLEANFILES variable.

	* configure.ac, debian/changelog: Bump to 3.4.1.pre34.

	* INSTALL.Mac.txt: Mention the need to install the command line
	tools with `xcode-select --install`.

============ 3.4.1.pre33 ============

2016-10-12 Ulrik Sandborg-Petersen

	* m4/buildenv.m4: Call AX_CXX_COMPILE_STDCXX with options "noext"
	(don't insist on extensions like GNU extensions) and "optional"
	(C++11 is not strictly required).

	* sqlite/src/Makefile.am: Don't use -i option in invocation of
	sed, since this breaks the build on Solaris.


2016-10-08 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre33.

============ 3.4.1.pre32 ============

2016-10-04 Ulrik Sandborg-Petersen

	* MQL/mql_query.cpp: Change the error message shown when an Object
	Reference Usage crosses an "export barrier", so that it also
	mentioned UnorderedGroup as an export barrier.

	* tests/mqlqa.h.in: Add some tests for the UnorderedGroup construct.

	* doc/MQL-Query-Guide.lyx: Add documentation for the new
	UnorderedGroup.

	* doc/MQL-Query-Guide.lyx: Add documentation for the "monad set
	relations" (part_of, overlap, substrate).

	* m4/ax_cxx_compile_stdcxx.m4: Initial addition.

	* m4/buildenv.m4: Add AX_CXX_COMPILE_STDCXX(11)

	* m4/wxemdros.m4: Use HAVE_CXX11 to determine whether to modify
	CXX to have -stdlib=libc++ on Mac OS X.

	* configure.ac: Put EMDROS_BUILDENV before integration of libtool.

2016-10-03 Ulrik Sandborg-Petersen

	* Add [UnorderedGroup ...] construct.  Inside it, it must have a
	bare list of object_blocks.  If all inner object_blocks are
	present in the Substrate, it succeeds, with a Sheaf which contains
	a ListOfStraws where each Straw has only one MatchedObject, namely
	one for each occurrence of that object_block within the substrate.

	Example:

	SELECT ALL OBJECTS
	WHERE
	[Verse
	    [UnorderedGroup
	        [Token surface='God']
	        [Token surface='love']
	    ]
	]
	GO

2016-09-23 Ulrik Sandborg-Petersen

	* m4/emdrosswig.m4: For the Mono compiler, use MCS, not GMCS, as
	the default, as recommended by the Mono project itself.

2016-09-12 Ulrik Sandborg-Petersen

	* configure.ac: SQLite2 will be deprecated in a future release, so
	add warning about this to the final dump of messages.

	* configure.ac, debian/changelog: Bump to 3.4.1.pre32.

	* sqlite/src/Makefile.am: Make the build more robust w.r.t. spaces
	in the path up to the sources, by adding libsqlite_emdros.la
	instead of -lsqlite_emdros to the shell's LDADD variable.

	* sqlite3/src/Makefile.am: Make the build more robust
	w.r.t. spaces in the path up to the sources, by adding
	libsqlite3_emdros.la instead of -lsqlite3_emdros to the shell's
	LDADD variable.

============ 3.4.1.pre31 ============

2016-09-09 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre31.

	* tests/asv/osis2mql.py: Make this script compatible with both
	Python2 and Python3, in order to compile the .deb on Ubuntu 16.04
	LTS with Python2 not installed.

	* m4/emdrosswig.m4: Make the PHP code use php-config5.5 or
	php-config-5.6 if available.  Also, make sure that "php-config
	--vernum" does not return PHP 7 or PHP < 5.  This is because the
	current version of SWIG does not produce code compatible with
	PHP7.  These changes help make Emdros work better on Ubuntu 16.04
	LTS.

	* tests/asv/Makefile.am: Also distribute known_good_output/*.txt,
	thus enabling the tests to run from the tarball.

============ 3.4.1.pre30 ============

2016-09-03 Ulrik Sandborg-Petersen

	* debian/control: Remove dependency on "libwxgtk2.8-dev |
	libwxgtk3.0-dev", since it was redundant -- the -dev packages
	already pulled that in.  Also, it made trouble on Ubuntu 16.04
	LTS.

2016-07-30 Ulrik Sandborg-Petersen

	* tests/test_json/known_good_output/test{1,2,3}.txt: Update with
	latest output from jsontry, which was changed in 3.4.1.pre26.

	* include/string_func.h: Implement the following:

	- longlong2string()
	- sz2longlong()

	* EMdF/string_func.cpp: Implement the following in terms of
	sz2longlong():

	- string2longlong()
	- string2long()

	- EMdF/string_func.cpp: Change the first parameter to joinList()
	and joinVector() from "std::string" to "const std::string&".

	* include/mql_yylex.h: Change the integer type from long to long
	long.  That way, it is the same number of bits on Linux and
	Windows.

	* include/json_classes.h, EMdF/json_classes.cpp: As a result of
	the change from long to long long in the Token class, also change
	the integer type from long to long long.

	* include/template_classes.h, harvest/template_classes.cpp:
	Everything to do with counters now use long long.  The reason is
	that a long is 32 bits on Windows, whereas we really need this to
	be at least 64 bits, for some costumer stylesheets to work.

	* MQL/mql.re, EMdF/json.re, harvest/templatelang.re: Use
	sz2longlong, not strtol, to convert integers.

2016-07-27 Ulrik Sandborg-Petersen

	* include/templatelang_classes.h: Make the CounterMap a
	std::map<std::string, long long> instead of a
	std::map<std::string, long>.  The reason is that a long is 32 bits
	on Windows, whereas we really need this to be at least 64 bits,
	for some customer stylesheets to work.

2016-07-25 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre30.

============ 3.4.1.pre29 ============

2016-07-22 Ulrik Sandborg-Petersen

	* MQL/mql_helper_classes.cpp: Fix memory leak in AggregateFeature
	d'tor.

	* MQL/mql_select_statements.cpp: Fix memory leak in
	GetAggregateFeaturesStatement d'tor.

2016-07-21 Ulrik Sandborg-Petersen

	* Document and implement a new MQL statement:

	GET AGGREGATE FEATURES.

	Files affected:

	- MQL/mql.re
	- MQL/mql.yxx
	- MQL/mql_helper_classes.cpp
	- MQL/mql_query.cpp
	- MQL/mql_select_statements.cpp
	- include/mql_types.h
	- include/mql_query.h
	- include/mql_select_statements.h
	- include/mql_enums.h
	- doc/MQL-Programmers-Guide.lyx

	* include/mql_query.h: Make FeatureComparison::m_feature_index be
	an int, not a short int, as the latter gave some problems.

	* tests/mqlqa.h.in: Add tests of GET AGGREGATE FEATURES, based on
	the ASV, Genesis 1:1-10.

	* tests/bptqa.h.in: Add tests of GET AGGREGATE FEATURES, based on
	the ASV, Genesis 1:1-10.

2016-07-19 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre29.

	* MQL/mql.re: Add the following new keywords to the MQL lexer:

	- AGGREGATE
	- MIN
	- SUM
	- COUNT

============ 3.4.1.pre28 ============

2016-07-15 Ulrik Sandborg-Petersen

	* MQL/mql_sheaf.cpp: Add a variant of the FlatStraw which is based
	on an Inst instead of an Arena.

	* MQL/mql_sheaf.cpp: Add a variant of the FlatStrawConstIterator
	which knows how to deal with the FlatStraw based on an Arena.

	* configure.ac, debian/changelog: Bump to 3.4.1.pre28.

	* MQL/mql_sheaf.cpp: Remove all references to the obsolete #define
	DISABLE_MATCHED_OBJECT_VALUES.

	* MQL/mql_sheaf.cpp: Add an InstObject-based MatchedObject kind,
	to the outside world exposed as an kMOKID_D.

	* MQL/mql_select_statements.cpp: Use the new Inst-based FlatStraw
	to return the FlatSheaf from the GET OBJECTS HAVING MONADS IN
	query.  This gives a substantial speedup on large GET OBJECTS
	HAVING MONADS IN result sets, because we no longer have to
	transform the Inst to a FlatSheaf with Arena objects in each
	FlatStraw, nor do we have to create all of the MatchedObject
	objects.

============ 3.4.1.pre27 ============

2016-06-26 Ulrik Sandborg-Petersen

	* amalgamation/amalgamation.json: Add string2som_map.{cpp,h}.

2016-06-23 Ulrik Sandborg-Petersen

	* EMdF/arena.cpp, include/arena.h: Add ObjectArena,
	ObjectArenaChunk, ObjectArenaAccessor, and
	ObjectArenaConstIterator.

2016-06-23 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Fix a potential memory (heap)
	corruption in RenderObjects::clean().

	* harvest/renderobjects.cpp: Use an Arena instead of a std::list
	of pointers to keep track of the MSEPMemObjectPair objects.  This
	gives a slight speedup, and better memory usage.

2016-06-22 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre27.

	* Add implementation of String2SOMMap and
	String2SOMMapConstIterator. Files affected:

	- include/string2som_map.h
	- EMdF/string2som_map.cpp

	and associated build files.

	* MQL/mql_sheaf.cpp, include/mql_sheaf.h: Add
	Sheaf::harvestMarks() and associated Straw and MatchedObjects
	methods.  The result is a String2SOMMap.

	* tests/mqltry.cpp: Test Sheaf::harvestMarks() as well as
	String2SOMMap and String2SOMMapConstIterator.

============ 3.4.1.pre26 ============

2016-06-18 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre26.

	* EMdF/string_func.cpp: Add readOneUTF8Char().

	* include/string_func.h: Add readOneUTF8Char().

	* include/string_func.h: Declare all functions that were not
	declared extern, extern.

	* include/string_func.h: Add the following functions:

	- void codepoint2slashu(std::string& result, unsigned int c); 

	- std::string escape_UTF8_string_with_slashu(const std::string& instr);

	* include/string_func.h: Add a parameter, bool bEscapeAsUnicode,
	to escapeJSONChars().  If true, it calls
	escape_UTF8_string_with_slashu() on the result of JSON-mangling
	chars.  This parameter is mandatory; there is no default value.

	* EMdF/json_classes.cpp, include/json_classes.h: Add a
	parameter, bEscapeAsUnicode, to pretty and printCompact().

	* tests/jsontry.cpp: Add -u option, which sets bEscapeAsUnicode to
	true when calling JSONValue::pretty() and
	JSONValue::printCompact().

	* doc/jsontry.1: Document the -u option.


============ 3.4.1.pre25 ============

2016-06-15 Ulrik Sandborg-Petersen

	* tests/erwtry.cpp: Include <emdros_environment.h>, not
	<emdros/emdros_environment.h>, which doesn't exist unless Emdros
	is already installed.

	* m4/wxemdros.m4: Do wx-config --libs all instead of just
	wx-config --libs for wxWidgets 2.9, 3.0, and 3.1.  The reason is
	that we probably need wxWebView for packages that use Emdros.

2016-06-14 Ulrik Sandborg-Petersen

	* m4/wxemdros.m4: Upgrade to work better with Mac OS X and
	wxWidgets 3.1.X.

2016-06-01 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre25.

============ 3.4.1.pre24 ============

2016-06-06 Ulrik Sandborg-Petersen

	* m4/wxemdros.m4: On Mac OS X 10.8, make the minimum OS be 10.7
	instead of 10.6.  This is because recent versions (i.e., 3.1.0) of
	wxWidgets do not support compilation on 10.6.

2016-05-18 Ulrik Sandborg-Petersen

	* INSTALL: Add packages to install on Ubuntu 16.04 LTS (Xenial).

2016-05-08 Ulrik Sandborg-Petersen

	* amalgamation/amalgamation.json: Add util/messages.cpp to the
	sources being compiled.

2016-04-28 Ulrik Sandborg-Petersen

	* Add support for \u + 4-digit hex number to the JSON lexer.

	* doc/progref/Content.txt: Document the \u option in the JSON
	lexer.

2016-04-21 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.1.pre24.

	* debian/changelog: Bump to 3.4.1.pre24.

============ 3.4.1.pre23 ============

2016-04-21 Ulrik Sandborg-Petersen

	* tests/bptqa.h.in: Make it work again.

	* tests/bptqa2h.py: Simplify the C++ output, so as to reduce the
	compilation time.

	* tests/bpttry.cpp: Use the new output from bptqa2h.py.

2016-04-20 Ulrik Sandborg-Petersen

	* EMdF/Makefile.am: Unravel the makefile dependency graph for the
	JSON parser.  This helps parallel make.

	* configure.ac, include/emdros-lconfig.h.in: Obey
	--with-default-backend switch.

	* Modernize the following Makefile.am files to work with recent
	and future automake tools, by removing references to $(srcdir)/:

	- SWIG/csharp/Makefile.am
	- SWIG/java/Makefile.am
	- SWIG/nodejs/Makefile.am
	- SWIG/perl/Makefile.am
	- SWIG/php/Makefile.am
	- SWIG/python/Makefile.am
	- SWIG/ruby/Makefile.am
	- sqlite/src/Makefile.am

	* Add syntax starts_in(monad, Substrate) to topographic queries,
	on a part with part_of(monads, Substrate) etc.

	* tests/mqlqa.h.in: Update with tests which test the new starts_in
	syntax.

2016-04-19 Ulrik Sandborg-Petersen

	* EMdF/Makefile.am: Make it easier to build the json parser after
	a "make clean".  Specifically, json.h is now generated correctly.

	* amalgamation/Makefile.am: Add 'mkamalgamation' to CLEANFILES.

	* EMdF/Makefile.am: Make it more robust w.r.t. parallel make.

2016-04-15 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.1.pre23.

	* debian/changelong: Bump to 3.4.1.pre23.

	* amalgamation/mingw.mak: Get it working.

	* win32/mingw-body.mak: Get it working.

============ 3.4.1.pre22 ============

2016-04-14 Ulrik Sandborg-Petersen

	* harvest/templatelang_classes.cpp: Fix memory leak in
	TemplateLangExecEnv's d'tor.

	* include/renderobjects.h: Fix memory leak in d'tor of
	MSEPObjectPair.

2016-04-13 Ulrik Sandborg-Petersen

	* amalgamation: Reimplement mkamalgamation.py in C++ as
	mkamalgamation.cpp.  This is so as to be able to build the
	amalgamation sources on Windows without depending on Python being
	present.

	* amalgamation: Add win32.mak and mingw.mak.

	* win32/win32.mak: Do ..\amalgamation\win32.mak.

	* win32/mingw.mak: Do ..\amalgamation\mingw.mak.

	* EMdF/pgconn.cpp: Remove redundant definition of sleep(), since
	this caused problems for the amalgamation on Win32 because sleep()
	was already defined with a body in emdfdb.cpp.

	* Build enhancement: Define USE_SYSTEM_ZLIB to be 0 or 1.

	* include/emdros-lconfig.h.in: #define DEFAULT_BACKEND_ENUM if not
	defined.

	* amalgamation/amalgamation.json: Compile ZLIB if necessary as
	part of the amalgamation.

	* EMdF/crc32.cpp: Rename crc32.cpp to crc32_emdros.cpp, and
	similarly for the include/crc32.h.  This is because otherwise, we
	get problems with the amalgamation due to the inclusion of
	zlib/crc32.h.

	* EMdF/Makefile.am: Make the creation of the JSON parser more
	smooth, thus making it easier to run make in parallel mode ("make
	-j8", for example).

	* amalgamation/amalgamation.json: Don't include ZLIB sources after
	all.  They are not readily amenable to being compiled in an
	amalgamation.

2016-04-12 Ulrik Sandborg-Petersen

	* EMdF/json_classes.cpp: Prevent segfault due to stack overflow on
	very long lists of JSON values, by destroying the list iteratively
	rather than via stack calls of the d'tor.

	* EMdF/json_classes.cpp: Implement JSONValue::printCompact(),
	which prints a minified version of the JSON value, recursively.

	* tests/jsontry.cpp: Add option "-c", which causes the new
	printCompact method to be used, rather than 'pretty'.

	* win32/mingw-body.mak: Upgrade to be able to compile with
	wxWidgets 3.1.0.

2016-04-11 Ulrik Sandborg-Petersen

	* Reinstate compileability on wxWidgets 3.1.0 by removing mentions
	of deprecated flags in the code using wxWidgets.

	* include/sqlite3conn.h: getLastInsertRowID(): Return a long,
	rather than an int, in order to conform to the sqlite3_int64
	return value (and prevent loss of data).

	* include/sqlite3conn.h: Comment out the
	SQLite3EMdFConnection::getLastInsertRowID() method, since it was
	dead code -- never used.

	* include/string_func.h: Add hasJSONCharsToMangle() and
	escapeJSONChars().

	* Template language: Add new template {{ featuremanglejson }},
	uses escapeJSONChars to output a feature as a string that can be
	used inside of a JSON string.

2016-04-10 Ulrik Sandborg-Petersen

	* win32/body.mak: Upgrade to work with wxWidgets 3.1.X as well as
	2.8, 2.9, and 3.0.

	* win32/config.mak.in: Compile with wxWidgets 3.1.0 by default.

2016-04-09 Ulrik Sandborg-Petersen

	* harvest/templatelang.re: Fix bug whereby KEY_BARE_COUNTER would
	be called 'bare-feature' in an error message.

	* harvest/templatelang.yxx: Make KEY_BARE_FORMAT a part of
	template_string.


2016-04-08 Ulrik Sandborg-Petersen

	* harvest/mingw.mak: Compile harvest_fts3.cpp.

	* harvest/win32.mak: Compile harvest_fts3.cpp.

	* util/mingw.mak: Compile erw.cpp.

	* util/win32.mak: Compile erw.cpp.

	* INSTALL: Document the last step of installing .debs with dpkg
	-i.

2016-04-01 Ulrik Sandborg-Petersen

	* MQL/mql_execute.cpp: Fix bug whereby XML and JSON output
	wouldn't get completely nixed if bPrintResult was false.

2016-03-31 Ulrik Sandborg-Petersen

	* amalgamation/mkamalgamation.py: Include util/opt.cpp and
	include/opt.h in the amalgamation.

	* amalgamation/mkamalgamation.py: Include util/messages.cpp and
	include/messages.h in the amalgamation.

2016-03-30 Ulrik Sandborg-Petersen

	* amalgamation/mkamalgamation.py: Add #line line numbers to all
	files, even after including a header file.

	* amalgamation/mkamalgamation.py: Include the following new files:

	- include/harvest_fts3.h
	- harvest/harvest_fts3.cpp

	* harvest/renderobjects.cpp: Make it compile with a C++11 compiler.

	* README-Emdros-on-iOS.txt: Many improvements to the instructions.

	* README-Emdros-on-Android.txt: Improvements to the instructions.

	* Android.mk: Compile harvest_fts3.cpp.

2016-03-05 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.1.pre22.

	* debian/changelog: Bump to 3.4.1.pre22.

============ 3.4.1.pre21 ============

2016-03-05 Ulrik Sandborg-Petersen

	* m4/emdrosswig.m4: Fix bug that prevented Node.JS from not being
	attempted to be compiled, even on systems where node was not
	installed.

2016-02-28 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.1.pre21.

	* debian/changelog: Bump to 3.4.1.pre21.

============ 3.4.1.pre20 ============

2016-02-28 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.1.pre20.

	* debian/changelog: Bump to 3.4.1.pre20.

	* Remove GNU-ism $< from Makefile.am's where possible, so as to be
	more compatible with the Open Group Makefile standard.  Files
	affects:

	SWIG/nodejs/Makefile.am
	include/Makefile.am
	tests/Makefile.am
	util/Makefile.am

============ 3.4.1.pre19 ============

2016-02-23 Ulrik Sandborg-Petersen

	* harvest/templatelang_classes.cpp: Add new TemplateSetCounterVar
	class.

	* harvest/templatelang.yxx: Add template {{ setcounter 'string'
	var 'string' }}, which converts the variable given in the second
	string to an integer (from base 10), and then sets the counter
	given in the first string.

	* doc/progref/Content.txt: Update with new {{ setcounter 'string'
	var 'string' }} command.

	* doc/progref/Content.txt: Restructure the documentation of the
	RenderLibrary template tags, so as to: a) Split the material
	between RenderObjects and RenderXML, and b) Add headings which
	group the various kinds of templates.

	* harvest/templatelang.re: Add KEY_BARE_FORMAT == "format".

	* harvest/templatelang.yxx: Add template {{ counter 'string'
	format 'string' }}.

	* harvest/templatelang_classes.cxx: Implement class
	TemplateCounterFormat.

	* EMdF/string_func.cpp: Add function long2string_format().

	* doc/progref/Content.txt: Add documentation on the new template,
	{{ counter 'string' format 'string' }}.

2016-02-17 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.1.pre19.

	* debian/changelog: Bump to 3.4.1.pre19.

	* amalgamation/Makefile.am: Use syntax compatible with make(1)
	from the Open Group.  That is, don't use the GNU-ism "$<".

============ 3.4.1.pre18 ============

2016-02-17 Ulrik Sandborg-Petersen

	* configure.ac:  Bump to 3.4.1.pre18.

	* debian/changelog: Bump to 3.4.1.pre18.

	* configure.ac: For Mac OS X 10.11 compatibility, remove
	AC_TYPE_SIZE_T and AC_FUNC_MALLOC.

	* EMdF/bptemdfdb.cpp: Changes for Mac OS X 10.11 compatibility
	related to #undef malloc.

	* SWIG/nodejs/emdrosnode.i: Update so as to compile with any
	version of Node.JS supported by SWIG, including Node 4.3.1.

============ 3.4.1.pre17 ============

2016-02-13 Ulrik Sandborg-Petersen

	* ./configure.ac: Bump to 3.4.1.pre17.

	* debian/changelog: Bump to 3.4.1.pre17.

	* MQL/mql_sheaf.cpp: Add Sheaf::countObjects(),
	Sheaf::countObjectsFromObjectType(), Sheaf::countStraws().  Also
	in Straw and MatchedObject.

	* doc/progref/Content.txt: Update the Sheaf documentation.

	* tests/mqltry.cpp: Add some tests of the above machinery.

============ 3.4.1.pre16 ============

2016-02-13 Ulrik Sandborg-Petersen

	* Add SWIG support for Node.JS.

	* amalgamation/mkamalgamation.py: Fix bug in the making of
	emdros.h, so that header files are only emitted once.

	* m4/wxemdros.m4: Attempt to add support for Mac OS X 10.10
	(Yosemite) and 10.11 (El Capitan).

	* m4/wxemdros.m4: Add support for compiling against the (as yet
	unreleased) wxWidgets 3.1.X (master) branch.

	* INSTALL.Mac.txt: Update instructions to work with modern
	versions of Mac OS X.

	* Makefile.am: Only add the .app bundles to the macdist DMG if
	WX_DO_UNICODE is true.

	* include/Makefile.am: Reinstate compileability with
	--enable-local-zlib.

============ 3.4.1.pre15 ============

2016-01-11 Ulrik Sandborg-Petersen

	* EMdF/string_func.cpp: Add joinVector().

	* tests/file2h.py: Initial addition.

	* util/conf_ini.cpp, include/conf_ini.h: Add an implementation of an INI file parser.

2015-12-17 Ulrik Sandborg-Petersen

	* ./configure.ac: Bump to 3.4.1.pre15.

	* debian/changelog: Bump to 3.4.1.pre15.

	* sqlite3/src/: Update from SQLite 3.8.7.4 to SQLite 3.9.2 dated
	2015-11-03.

	* sqlite3/tool/: Update lemon.c and lempar.c to the version from
	the SQLite 3.9.2 source ZIP file.

============ 3.4.1.pre14 ============

2015-12-17 Ulrik Sandborg-Petersen

	* EMdF/bpa.cpp, include/bpa.h: Implement a Big Pointer Array (to
	be used for an implementation of an extensible hash table).

	* util/mql_exporter.cpp: Don't emit an empty set of monads as a
	DEFAULT in the schemas where we have features with type SET OF
	MONADS which are not the privileged set of monads.

2015-12-08 Ulrik Sandborg-Petersen

	* EMdF/make_primes_list.py: Do %(boilerplate)s in
	include/emdf_primes.h.

2015-11-16 Ulrik Sandborg-Petersen

	* ./configure.ac: Bump to 3.4.1.pre14.

	* debian/changelog: Bump to 3.4.1.pre14.

============ 3.4.1.pre13 ============

2015-11-16 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Fix a possible loss of data issue,
	making a variable be of type long instead of int.

	* harvest/harvest_fts.cpp: Fix bugs which could give incomplete
	and/or wrong results with FTS version 1, when:

	- A largest_proximity was given which was: a) > 1 and b) < length
	of largest bookcase object.

	- More than one query term was given.

	* m4/emdrosswig.py: Make sure we can compile EmdrosPy from source,
	even if the swig(1) program installed on the build-machine has a
	version lower than 2.0.12.

2015-10-26 Ulrik Sandborg-Petersen

	* tests/emdftry.cpp: Add more tests of sets of monads, in
	particular, the SetOfMonads::toCompactString() and
	SetOfMonads::toCompactStringFM() with complementary
	::from... methods.

	2015-10-19 Ulrik Sandborg-Petersen

	* Add EMdF/make_primes_list.py, which in turn generates
	emdf_primes.cpp and emdf_primes.h. Add these, too, to the
	repository and the build system.

2015-10-16 Ulrik Sandborg-Petersen

	* ./configure.ac: Bump to 3.4.1.pre13.

	* EMdF/string_func.cpp, include/string_func.h: Add ulong2hex()
	function.

	* Add int EMdFDB::m_max_table_name_length;

	* Add EMdFDB::normalizeTableName(), which aims to shorten the
	table name given as the first parameter unambiguously, even when
	the backend server in question needs a name with fewer characters.

	* Set m_max_table_name_length in the c'tors of PgEMdFDB,
	MySQLEMdFDB, SQLiteEMdFDB, and SQLite3EMdFDB.

	* Add EMdFDB::normalizeIndexName().

	* Update the following to use normalizeTableName and
	normalizeIndexName:

	- EMdFDB
	- MySQLEMdFDB
	- PgSQLEMdFDB
	- SQLiteEMdFDB
	- SQLite3EMdFDB

	* tests/mqlqa.h.in: Test the new normalizeTableName and
	normalizeIndexName machinery, by adding some more tests.

	* tests/bptqa.h.in: Also add the new tests in tests/mqlqa.h.in to
	bptqa.h.in.

	* tests/bptqa.h.in: Fix some of the existing queries, since they
	had merely been copied from mqlqa.h.in at an earlier date, and so
	needed to conform to the format of the BPT QA Python script which
	turns bptqa.h.in into bptqa.h.

	* include/emdf.h: Up the MAX_IDENTIFIER_CHARS from 255 to 512.
	This was necessary so as to be able to test the new machinery
	which supports very long table names.

	*** COMPATIBILITY NOTE *** This means that any existing databases
	on PostgreSQL and MySQL need to be DROPped and reCREATEd in order
	to support object type names longer than about 490 characters (512
	minus the length of the additions for indexes, sets of strings,
	and _objects for the OT_objects).

	* EMdF/sqlite3emdfdb.cpp: Fix bug in SQLite3EMdFDB backend with
	UPDATE OBJECT TYPE: It could not alter a table which had a SET OF
	MONADS feature.  Now it can.

	* EMdF/pgemdfdb.cpp, EMdF/mysqlemdfdb.cpp, EMdF/emdfdb.cpp: Make
	the EMdFDB::tableExists() function virtual, and implemen it in the
	PgEMdFDB and MySQLEMdFDB backends. This was necessitated by the
	need to call tableExists from normalizeTableName().  The
	implementation in EMdFDB::tableExists() caused transactions to
	abort when used on a table which did not exist.  Also changed in
	the respective include/ files.

	* debian/changelog: Bump to 3.4.1.pre13.

============ 3.4.1.pre12 ============

2015-10-03 Ulrik Sandborg-Petersen

	* amalgamation/mkamalgamation.py: Revert the changes from
	2015-09-26.

	* amalgamation/mkamalgamation.py: Add bptemdfdb.cpp and
	bpt2emdfdb.cpp to the list of files being amalgamated.

	* m4/emdrosswig.m4: Better detection of whether the SWIG Python
	bindings can be built, in the case where there is no suitable
	swig(1) binary on the build system.

2015-09-26 Ulrik Sandborg-Petersen

	* include/Makefile.am: Better handling of generated header files,
	with the usual #ifndef ... # define ... # endif-enclosure.

	* amalgamation/mkamalgamation.py: Make a better amalgamation.

2015-08-30 Ulrik Sandborg-Petersen

	* Template language for renderobjects and renderxml: Add the
	following two constructs:

	{{ if varequal 'var1' var 'var2' }}...template1...{{ endif }}
	{{ if varequal 'var1' var 'var2' }}...template1...{{ else }}...template2{{ endif }}

	The intention is to be able to compare two variables.

	Also documented these.

2015-08-15 Ulrik Sandborg-Petersen

	* tests/asv/known_good_output/: Adjust known good output so as to
	take the new FTS output into account.

	* RenderXML: Add template {{ copyattribs }} and document it.

	* BUGFIX: RenderXML: Honor the {{ setnixing XYZ }} templates.

2015-06-22 Ulrik Sandborg-Petersen

	* Don't #include <emdros-lconfig.h>, but "emdros-lconfig.h", as
	the former makes for trouble when compiling the amalgamation with
	clang on Mac OS X / for iOS.

	Affected files:

	include/mysqlconn.h
	include/pgconn.h
	include/sqlite3conn.h
	include/sqliteconn.h

	* amalgamation/mkamalgamation.py: Don't copy emdros-config.h or
	emdros-lconfig.h into the amalgamation, but leave them out, where
	they belong.

	* src/qrytool/win32.mak: Make it possible to compile the
	non-wxWidgets programs even if wxWidgets is not installed on the
	build machine.

2015-06-19 Ulrik Sandborg-Petersen

	* zlib/win32.mak: Unconditionally build ..\include\zlib_emdros.h,
	thereby reinstating compileability of BPT on Windows.

2015-04-18 Ulrik Sandborg-Petersen

	* Big changes to the build machinery, including the following
	files:

	- configure.ac
	- */Makefile.am

	Added the following to configure.ac:

	EMDROS_LDADD
	EMDROS_LDADD_SWIG
	EMDROS_DEPS
	EMDROS_DEPS_SWIG

	* Moved mkamalgamation.py into amalgamation/, and added a
	Makefile.am in there.

	* amalgamation/mkamalgamation.py: Now does a better job of
	generating correct C++ and C.

	* EMdF/pgconn.cpp: Rename BUFFER_LENGTH to
	PG_EXEC_COPY_BUFFER_LENGTH, so as not to clash with another symbol
	in the amalgamation.

	* EMdF/sqliteconn.cpp, include/sqliteconn.h: Do dummy code if
	USE_SQLITE2 is 0.

	* EMdF/sqlite3conn.cpp, include/sqlite3conn.h: Do dummy code if
	USE_SQLITE3 is 0.

2015-04-16 Ulrik Sandborg-Petersen

	* Add mkamalgamation.py and change the source code to allow an
	amalgamation to be built.

	* debian/changelog, configure.ac: Bump to Emdros 3.4.1.pre12.

============ 3.4.1.pre11 ============

2015-03-26 Ulrik Sandborg-Petersen

	* FTS: Add the option of going through the query results in pages
	of configurable length in terms of # of hits.  Valid for both FTS
	and FTS2.

	Files affected:
	- ChangeLog
	- doc/fts_harvester.1
	- harvest/harvest_fts.cpp
	- include/harvest_fts.h
	- src/fts_harvester.cpp

2015-03-23 Ulrik Sandborg-Petersen

	* src/mql.cpp: Make the mql(1) command obey the -n/--nop switch
	again (this functionality was lost sometime in 2013 with the
	introduction of the MQLResultCallback mechanism).

	* MQL/mql_select_statements.cpp: Fix small memory leak in SELECT
	statements that have a MaxRange, such as SELECT ALL OBJECTS, and
	indeed all that have a QueryBase object as its parent.  This bug
	was introduced in 3.4.1.pre07.

2015-03-18 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre11.

	* Made the Windows SWIG bindings able to be compiled with BPT.

	  Affected files:

	  - SWIG/python/win32.mak
	  - SWIG/java/win32.mak
	  - SWIG/csharp/win32.mak

============ 3.4.1.pre10 ============

2015-01-20 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre10.

	* MQL/mql_query.cpp: Fix a bug in ObjectBlock::aggregateQuery
	introduced in 3.4.1.pre09 on 2015-01-20.  This bug caused many
	queries to segfault.


============ 3.4.1.pre09 ============

2015-01-20 Ulrik Sandborg-Petersen

	* MQL/mql_query.cpp: Fix a bug in ObjectBlock::aggregateQuery
	whereby a segfault could occur if the query planner decided to use
	a kAQSInnermostFirst strategy, and an inner ObjectBlock's R_inst
	was empty (no possible results).

2015-01-13 Ulrik Sandborg-Petersen

	* m4/wxemdros.m4: Switch the order of wx-config-3.0 and
	wx-config in AC_CHECK_PROGS so that the latter is found first, if
	both are present.

	* m4/emdrosswig.m4: Don't throw an error, only warn, if we are
	trying to do Emdros SWIG bindings yet we are also not doing shared
	libraries.  This means that we can, once again, compile with
	--disable-shared.

2014-12-31 Ulrik Sandborg-Petersen

	* m4/wxemdros.m4: Check for wx-config-3.0 in addition to
	wx-config.  Also, don't try to be clever and look in
	$WX_CONFIG_DIR.  Just use the standard AC_CHECK_PROGS macro.

2014-12-30 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre09.

	* m4/emdrosswig.m4: Don't require the presence of the SWIG
	program, so long as the sources that it compiles are present.
	Also, don't bail with an error if SWIG is installed, but not a
	good enough version (i.e., is before 2.0.12).

============ 3.4.1.pre08 ============

2014-12-30 Ulrik Sandborg-Petersen

	* INSTALL: Mention minimal packages for CentOS 7.0.

2014-12-20 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre08.

	* SQLite 3 backend: Upgrade to SQLite 3.8.7.4 from 2014-12-09.
	Previous version: 3.8.6.

	This should incur some major speed improvements on SQLite3,
	according to the SQLite changelog.

	Files affected:

	- sqlite3/VERSION
	- sqlite3/src/sqlite3.c
	- sqlite3/src/sqlite3.h
	- sqlite3/src/sqlite3ext.h
	- sqlite3/src/shell.c

============ 3.4.1.pre07 ============

2014-12-20 Ulrik Sandborg-Petersen

	* sqlite/src/shell.c: Fix a compilation error in SQLite2's shell.c
	on gcc 4.9.2 (e.g., Fedora 21).

	* m4/emdrosswig.m4: Enable finding Java files for JDK 1.8.0 on
	various platforms (including Fedora 21).

	* INSTALL: Add list of packages to install on Fedora 21.

	* configure.ac: Add LT_INIT([static]) and AM_PROG_LIBTOOL, so as
	to be current w.r.t. libtool usage.

	* INSTALL: For packages on Ubuntu, go to SWIG 3.0 rather than just
	"swig", which on Ubuntu 14.10 installs SWIG 2.0.X.

	* emdros.spec.in: Reinstate rpmbuild'ability on Fedora 21 by doing
	the glob %{prefix}/lib/*.* instead of the two globs
	%{prefix}/lib/*.so and %{prefix}/lib/*.a.  This: a) adds the *.la
	files, and b) avoids failing because *.a files or *.so might not
	be generated (*.a are not generated by default on Fedora 21).

	* SWIG bindings: Enable usage of SWIG 3.0, not just 2.0.  Also,
	require 2.0.12 or later.

	Affected files:

	- configure.ac
	- m4/emdrosswig.m4
	- SWIG/*/Makefile.am

	New AC_SUBST variable added: SWIG_PROGRAM.

2014-12-04 Ulrik Sandborg-Petersen

	* SWIG/java/Makefile.inc, SWIG/csharp/Makefile.inc: Update so as
	to have the latest full gamut of Java / C# files to include from
	SWIG.

2014-12-01 Ulrik Sandborg-Petersen

	* Add the following clause to topographic queries:

	  /* empty == WITH MAX RANGE MAX_M MONADS. */
	  WITH MAX RANGE MAX_M MONADS
	  WITH MAX RANGE integer MONADS
	  WITH MAX RANGE FEATURE MONADS FROM [object_type_name]

	  See the MQL Programmer's Reference Guide, Chapter 3 about the
	  topographic queries for the syntax.

	  The significance is that the power block is restricted to be
	allowed to maximally run as far as the "max range", thus making it
	easier to restrict very bad queries from running wild.

	  The form 

	  WITH MAX RANGE FEATURE MONADS FROM [object_type_name]

	  simply takes, before query execution time, the largest object
	length from the object type in question and uses that as the
	maximum range.

	  Examples:

	  SELECT ALL OBJECTS
	  IN {1-100000}
	  WITH MAX RANGE 100 MONADS
	  RETURNING FULL SHEAF
	  WHERE
	  [Word pos=V]
	  ..  // This is restricted to extending over at most 100 monads.
	  [Word pos=PRON]
	  GO

	  SELECT ALL OBJECTS
	  IN {1-100000}
	  WITH MAX RANGE FEATURE MONADS FROM [Clause]
	  RETURNING FULL SHEAF
	  WHERE
	  [Word pos=V]
	  ..  // This is restricted to extending over at most as many monads
	      // as the longest clause in the database.
	  [Word pos=PRON]
	  GO

	  As can be seen, this new clause sits between the "IN
	{monad-set}" clause and the "RETURNING (FULL|FLAT) SHEAF" clause.


	* tests/bpttry.cpp: Work towards making it work on Windows.

2014-11-24 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.1.pre07

	* debian/changelog: Add entry for 3.4.1.pre07.

============ 3.4.1.pre06 ============

2014-11-22 Ulrik Sandborg-Petersen

	* m4/emdrosswig.m4: Enable Ruby SWIG bindings on Ubuntu 14.10, by
	properly finding rubyarchhdrdir.

	* win32/config.mak.in: Bump wxWidgets version on Windows to 3.0.2.

	* win32/config.mak.in: Use JDK 1.7.0u72 on Windows.

2014-11-04 Ulrik Sandborg-Petersen

	* INSTALL: Add section on which packages to pull in minimally for
	Ubuntu 14.04 LTS.

2014-10-28 Ulrik Sandborg-Petersen

	* INSTALL: Add section on which packages to pull in for Ubuntu
	14.10.

2014-10-21 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre06.

============ 3.4.1.pre05 ============

2014-10-13 Ulrik Sandborg-Petersen

	* wx/layout.cpp: Fix the spacing between selected boxes (wxINVERT)
	some more.

	* pcre/win32.mak: Fix compilation on Windows.

2014-10-11 Ulrik Sandborg-Petersen

	* wx/layout.cpp: Fixed the wxINVERT code of certain Layout box
	types to be able to work on OS X, not just Windows.  This has an
	impact on, among other things, the Emdros Query Tool and focus
	object blocks, as well as the Emdros Chunking Tool, which is now
	usable on wxOSX.

2014-10-06 Ulrik Sandborg-Petersen

	* Fixed automatic finding of the existence of BPT2.

2014-09-30 Ulrik Sandborg-Petersen

	* include/mingw.mak, pcre/mingw.mak: Reinstate buildability of
	programs under MinGW on Windows, after upgrade of PCRE.

	* include/mingw.mak: Use /B with copy on SQLite2 and SQLite3
	headers.  This causes copy.exe to copy byte-for-byte rather than
	appending Ctrl+Z.

	* EMdF/win32.mak, EMdF/mingw.mak, util/win32.mak, util/mingw.mak:
	Add compilation of bpt2emdf.cpp and bpt2dumper.cpp.

2014-09-26 Ulrik Sandborg-Petersen

	* debian/control: Build-require wxWidgets 3.0 OR 2.8.

	* configure.ac: Add --with-bpt2 as an option, and set USE_BPT2 and
	DO_BPT2.

	* emdros.spec.in: Added @WITH_SQLITE3@, @WITH_BPT@, and
	@WITH_BPT2@ to the call to configure.

	* include/emdros-lconfig.h.in: #define USE_BPT2.

	* INSTALL: Mention --with-bpt2.


2014-09-19 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.1.pre05.

	* EMdF/bpt2emdfdb.cpp, include/bpt2emdfdb.h: Initial addition. Are
	just dummy implementations that report an error.

	* INSTALL: Mention what packages to install on Ubuntu 14.04
	"Trusty Tahr".

============ 3.4.1.pre04 ============

2014-09-19 Ulrik Sandborg-Petersen

	* include/emdf_enums.h: Add kBPT2 to eBackendKind.

	* include/bpt2dumper.h: Initial addition.

	* util/bpt2dumper.cpp: Initial addition.

	* src/bptdump.cpp: Add support for BPT engine version 2.

	* pcre/config.h, pcre/config.h.win32: Resolve #define conflitcs
	with PACKAGE_* between Emdros and PCRE by renaming PACKAGE_* to
	PCRE_PACKAGE_ for PCRE.

2014-09-07 Ulrik Sandborg-Petersen

	* pcre/config.h, pcre/config.h.win32: Definde a PCRE_VERSION
	#define, not a VERSION define, so as not to clash with the
	Emdros-defined VERSION #define.

	* win32/body.mak: Upgrade so as to be able to do 5 Unicode
	programs.  Not needed yet, but we might need it.

2014-09-05 Ulrik Sandborg-Petersen

	* Add to Harvest template language a construct:

	  {{ attribnomangle }}

	  which does not mangle the attribute.

2014-09-02 Ulrik Sandborg-Petersen

	* include/win32.mak, pcre/win32.mak: Get the chain of
	responsibility right w.r.t. creation of include/pcre_emdros.h.

2014-09-01 Ulrik Sandborg-Petersen

	* pcre/win32.mak, pcre/config.h.win32: Make it compile on Windows
	again.

2014-08-29 Ulrik Sandborg-Petersen

	* pcre/*: Upgrade to PCRE 8.35 from 2014-04-04, in anticipation of
	a future addition of Unicode strings.

	* sqlite3/src/*: Upgrade to SQLite 3.8.6 from 2014-08-15.

2014-08-13 Ulrik Sandborg-Petersen

	* win32/mingw-body.mak: Add CPROGRAM1, and linking with CC instead
	of CXX for it.

	* sqlite3/src/mingw.mak: Do sqlite3_emdros.exeas CPROGRAM1,
	linking with CC.

	* pcre/mingw.mak: Do dftables.exe as CPROGRAM1, linking with CC.

	* sqlite/src/mingw.mak: Do sqlite_emdros.exeas CPROGRAM1, linking
	with CC.

	* src/mingw.mak: Match up the PROGRAMXYZ's with the right object
	files for PROGRAMXYZ_OBJS.

	* win32/mingw-body.mak: Make it work correctly with LINK32 on
	MinGW from Code::Blocks.  Also, add CPROGRAM2 and CPROGRAM3 and
	associated variables.

2014-07-14 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.0.pre04.

============ 3.4.1.pre03 ============

2014-06-10 Ulrik Sandborg-Petersen

	* tests/bptqa.h.in: Add some more tests.

	* tests/bpttry.cpp: Refactor so as to be able to do schemas 5 and
	7.

	* include/bptdumper.h: Add schemas 5 and 7.

2014-06-09 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.0.pre03.

============ 3.4.1.pre02 ============

2014-06-09 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.0.pre02.

	* MQL/mql_query.cpp: Fix the usage of PCRE regular expressions so
	that:

	a) !~ works as exactly the opposite of ~.  Before, some cases of
	!~ were reported wrongly.

	b) The input string, if empty, is now matched by a regular
	expression that can match the empty string.  Before, the faulty
	requirement was that the input (i.e., feature) string would be
	non-empty for the regex to match, even if the regex had the
	potential to match the empty string.

	* src/qrytool/harvest.cpp: Guard against a failed sheaf in
	Harvest::sheaf_monads_separated().

	* src/qrytool/harvest.cpp: Harvest c'tor: Fix several potential
	memory leaks.

	* src/qrytool/harvest.cpp: Harvest c'tor: Stop early without
	generating erros if there are no solutions, i.e., if the unified
	set of monads is empty.

	* Makefile.am: Distribute callgrind.sh.

============ 3.4.1.pre01 ============

2014-06-02 Ulrik Sandborg-Petersen

	* include/string_func.h, EMdF/string_func.cpp: Add print_indent().

	* EMdF/emdfdb.cp, include/emdfdb.h: Add function std::string
	getStringFromeComparisonOp(eComparisonOp op);

	* MQL/mql_query.cpp, include/mql_query.h: Add pretty-printing
	machinery to FFeatures and children.

	* MQL/mql_R.cpp, MQL/mql_query.cpp: Don't make the optimization
	that, if we have not met a negative context, AND the
	FeatureComparison can be pre-queried, we don't check it in
	R_feature_comparison.  The reason is that this gives wrong results
	in some cases, in which pre-querying is not sufficient to
	establish that a given feature-comparison is true.  For example,
	if you use a construct such as the following:

	(feature1 <> value1 AND feature1 OP value2)
	OR
	(feature2 <> value3 AND feature2 OP value4)

	where at least one of the following is true:

	1) OP is either ~ or !~

	2) value2 and value4 are object reference usages (e.g, w1.feature_name)

	This will get pre-queried as:

	(feature1 <> value1) OR (feature2 <> value3)

	which along is not sufficient to establish that feature1 <> value,
	or tat feature2 <> value3.  Hence, we should not make this
	assumption in R_feature_comparison.


2014-05-27 Ulrik Sandborg-Petersen

	* include/templatelang_classes.h,
	harvest/templatelang_classes.cpp: Add
	TemplateLangExecEnv::setVariables(), as well as a typedef for
	TemplateLangVariableMap.

	* harvest/renderxml.cpp: Add a new version of RenderXML() which is
	able to take a TemplateLangVariableMap as a parameter, and set the
	variables using the TemplateLangExecEnv::setVariables() API
	call. The old version of RenderXML still functions, and uses an
	empty variable map.

	* harvest/renderobjects.cpp: Add a new version of
	RenderObjects::process() which is able to take a
	TemplateLangVariableMap as a parameter, and set the variables
	using the TemplateLangExecEnv::setVariables() API call. The old
	version of RenderObjects::process still functions, and uses an
	empty variable map.

	* SWIG/csharp/Makefile.inc, SWIG/java/Makefile.inc: Add missing
	eAggregateQueryStrategy and SWIGTYPE_p_TemplateLangVariableMap.

	* zlib/win32.mak: Use /b switch on the copy command that creates
	zlib_emdros.h, thereby enabling compatibility with MinGW32.

2014-05-25 Ulrik Sandborg-Petersen

	* SWIG/csharp/Makefile.inc: Add eAggregateQueryStrategy.cs.

2014-05-20 Ulrik Sandborg-Petersen

	* m4/wxemdros.m4: Better support for building on Mac OS X 10.7,
	10.8, and 10.9.

2014-05-18 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bumped to 3.4.1.pre01.

============ 3.4.0 ============

2014-05-13 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bumped to 3.4.0.

	* Makefile.am: Don't distribute
	EmdrosOSX/EmdrosOSX.xcodeproj/project.pbxproj, since it is not the
	recommended way of doing Emdros on Mac OS X.

	* wx/importerwizard.cpp: Add more verbose wxMessageBox upon
	success, and a failure wxMessageBox upon failure.

	* src/importtool/importtool.cpp, src/importtool/importtool.h: Make
	it wxFrame-based instead of purely ImporterWizard-based.  This is
	so as to be able to work and exit gracefully on wxMac.

	* win32/README.txt: Update instructions to wxWidgets 3.0.0 instead
	of 2.9.X.

	* INSTALL.Mac.txt: Update to be contemporary (and not from 2009).

	* src/qrytool/mainframe.cpp: Update Emdros Query Tool version to
	1.5.0.

	* configure.ac: Bump all the CURRENT library versions to the
	following:

	  LIB_EMDF_CURRENT=5
	  LIB_MQL_CURRENT=5
	  LIB_PCRE_CURRENT=1
  	  LIB_SWIG_CURRENT=5

	* COPYING: Update Copyright year to 1999-2014.

============ 3.4.0.pre20 ============

2014-05-12 Ulrik Sandborg-Petersen

	* Makefile.am: Add EMDROS_EXAMPLES_VERSION variable, and set it to
	2.0.

	* src/fts_indexer.cpp: Document -o switch in the --help output.

	* doc/fts_harvester.1: Document the -fe switch.

	* tests/asv/Makefile.am: Add tests for fts_indexer and
	fts_harvester.

	* src/importtool/importtool.cpp: Call m_pWizard->Destroy directly
	from OnInit, not in OnExit, so as to avoid hanging the
	application.

	* wx/layout.cpp, include/layout.h: Fix logic error in
	LayoutParagraph::AddBox(): It used to be that we treated
	bAddToM_Boxes parameter as if it meant "bParagraphOwnsBox".  This
	led to empty lines after LayoutParagraph::rewrap was called, since
	we no longer had a copy lying around if the first call to
	LayoutParagraph() had bAddToM_Box == fale.  Now, we have an
	additional parameter which explicitly tells us whether the
	paragraph owns the box.  This is used in LayoutCanvas::AddBox().
	This fixes the Chunking Tool not working when resizing or
	maximizing the area.

	* examples/ChunkingTool/ctmf.cpp: Fix various things to get it
	working again.

2014-05-11 Ulrik Sandborg-Petersen

	* tests/asv/Makefile.am: Fix bug with asv.sqlite2 creation.

	* win32/config.mak.in: Update the defaults to:

	  - JDK 1.7.0_55
	  - MySQL Server 5.6

	* include/bptemdfdb.h, EMdF/bptemdfdb.cpp: Add missing parameter,
	const std::string& monad_set_name, to BPTEMdFDB::getInst(), so as
	not to violate the hiding rule:

	http://www.parashift.com/c++-faq-lite/hiding-rule.html

	* include/pgemdfdb.h, EMdF/pgemdfdb.cpp: Add missing method,
	PgEMdFDB::createDatabase(const std::string&, const std::string&),
	so as not to violate the hiding rule.

	* include/mysqlemdfdb.h, EMdF/mysqlemdfdb.cpp: Add missing method,
	MySQLEMdFDB::createDatabase(const std::string&, const std::string&),
	so as not to violate the hiding rule.

	* include/harvest_fts2.h, harvest/harvest_fts2.cpp: Add missing
	method BookcaseIndexer2::process_bookcase(const SetOfMonads& som)
	so as not to violate the hiding rule.

	* examples/KJVParsed/*: Initial addition, an example of an Emdros
	database which is the King James Version (KJV) of the Bible with
	full sentence parsing.

	* Emdros Query Tool: Add configuration option:
	data_tree_object_type_name_for_nonterminals. When set to "true",
	and we are doing a tree view, add the name of the object type as
	the first line in each nonterminal box.

	* src/qrytool/penn.cfg: Redo according to the --distinct-nt-otns
	schema, and the output from the Charniak parser.

	* EMdF/win32.mak: Remove initial, extraneous "a".

	* Makefile.am, examples/Makefile.am,
	examples/KJVParsed/Makefile.am: Add target 'examples', which
	creates a ZIP file with examples.

	* Makefile.am: Add clean-local target, which cleans
	$(EMDROS_SPEC_FILE), $(EXAMPLESZIP), and $(EXAMPLESDIR).

2014-05-09 Ulrik Sandborg-Petersen

	* INSTALL: Rearrange so as to be more in line with the expected
	sequence of execution.  Also, add information on platforms
	supported.

	* README-Emdros-on-iOS.txt: Initial addition.

	* Makefile.am: Add README-Emdros-on-iOS.txt to EXTRA_DIST.


2014-05-08 Ulrik Sandborg-Petersen

	* configure.ac: Bumped to 3.4.0.pre20

	* debian/changelog: Bumped to 3.4.0.pre20

	* Makefile.am, tests/asv/Makefile.am: On Solaris, make(1) does not
	define $< the same way as GNU make does it when there is more than
	one dependency, so don't use it with more than one dependency.

	* INSTALL: Mention that the package texlive-epstopdf-bin is
	necessary on Fedora 20 to get everything compiling.

============ 3.4.0.pre19 ============

2014-04-24 Ulrik Sandborg-Petersen

	* Enhance compatibility with building for iOS by moving the
	#define of USE_SYSTEM_SQLITE2 and USE_SYSTEM_SQLITE3 to
	include/emdros-lconfig.h.in.  Before, developers had to be aware
	that they had to set these #defines to 1 if they did not want to
	use the versions of SQLite3 and SQLite3 built into Emdros.  This
	they might do when using the obligatory ./configure step, on the
	host Mac OS X machine, but then they might forget to set these
	-Defines in their Xcode build settings.  Now, they are #defined in
	include/emdros-lconfig.h, as done by ./configure, thereby enabling
	the configure script and its parameters to decide, both for the
	build for the Mac OS X host, and for the build for iOS.

	Files affected:

	- configure.ac
	- EMdF/Makefile.am
	- EMdF/mingw.mak
	- EMdF/sqlite3conn.cpp
	- EMdF/sqliteconn.cpp
	- EMdF/win32.mak
	- include/emdros-lconfig.h.in
	- win32/lconfig.h.win32


2014-04-21 Ulrik Sandborg-Petersen

	* tests/Makefile.am: Move bptqa.h from bpttry_LDADD to where it
	belongs, namely bpttry_DEPENDENCIES.  This means that we can now
	compile on Xcode 5 (on Mountain Lion and Mavericks).

	* configure.ac: Don't add -lreadline and -lncurses to LIBS;
	instead, put them in TARGET_READLINE_LIBS where they belong.
	Thus, enable better cross-OS-version support, especially on Mac OS
	X >= 10.7 --> 10.6.

2014-04-11 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.0.pre19.

	* Makefile.am: Add valgrind.sh to EXTRA_DIST.

	* doc/MQL-Programmers-Guide.lyx: Bump version number being
	documented to 3.4.0.pre16.

	* valgrind.sh: Add --trace-children=yes to the list of valgrind
	parameters.

============ 3.4.0.pre18 ============

2014-04-10 Ulrik Sandborg-Petersen

	* tests/test_json/Makefile.am: Make KNOWN_GOOD_OUTPUT variable
	work, and hence also distribute the known good output.

	* MQL/mql_select_statements.cpp: Fix memory leak in GET OBJECTS
	HAVING MNADS IN, which always occurred.  That is, the d'tor of
	GetObjectsHavingMonadsIn now deletes m_monads_feature.

	* Upgrade SQLite3 from 3.8.4.1 to SQLite 3.8.4.3 due to bugfixes
	upstream.

	  Files affected:

	  - sqlite3/VERSION
	  - sqlite3/src/sqlite3.c
	  - sqlite3/src/sqlite3.h


2014-04-09 Ulrik Sandborg-Petersen

	* debian/changelog: Fix time zone for 3.4.0.pre18.

	* Reinstate the faster behaviour of the JSON lexer from
	3.4.0.pre12, this time without crashing.

2014-04-08 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.0.pre18.

	* EMdF/json.re: The changes introduced in 3.4.0.pre12 were indeed
	faster, but also resulted in SEGFAULT crashes if there was a
	syntax error in the input.  This is a bad enough thing that I do
	not want to trade it for extra speed.  So, changes reverted.

	* tests/test_json/: Add rudimentary tests of the JSON parsing and
	pretty-printing machinery.

	* tests/asv/Makefile.am: Fix mistake in calling of test -z on the
	output of the diff process.

	* include/mql_yylex.h: Make token initalization and setInteger() a
	bit faster.

	* EMdF/json.re: Do away with CHAR_MAGIC tokens, since they are
	illegal in JSON. Instead, just return <<EOF>> if encountered.

	* EMdF/json.re: Guard against strings that don't end before EOF.

	* EMdF/json.re, EMdF/json_classes.h: Go back to the same scheme
	used in MQL's lexer, i.e., create a new Token every time.  This is
	done because we do not want to crash on syntax error.

============ 3.4.0.pre17 ============

2014-03-16 Ulrik Sandborg-Petersen

	* configure.ac: Bumped to 3.4.0.pre17

	* debian/changelog: Bumped to 3.4.0.pre17

	* include/llist.h: Got an average speedup of about 9% on many
	queries involving sheaves (both full Sheaf and FlatSheaf)
	including SELECT ALL OBECTS and GET OBJECTS HAVING MONADS IN.
	This was achieved by tuning the iterators in include/llist.h,
	which are used heavily in MQL/mql_sheaf.h.

	* Upgrade SQLite3 to 3.8.4.1 (from 2014-03-11).  File affected:

	  - sqlite3/VERSION
	  - sqlite3/src/sqlite3.c
	  - sqlite3/src/sqlite3.h
	  - sqlite3/src/sqlite3ext.h
	  - sqlite3/src/shell.c

============ 3.4.0.pre16 ============

2014-03-16 Ulrik Sandborg-Petersen

	* doc/progref/Content.txt: Add the method
	"FlastStraw::getObjectTypeName()".

	* Add a new clause to the MQL statement "GET OBJECTS HAVING MONADS
	IN": It is now possible to specify which monad set to use as the
	set of monads.

	For example:

	GET OBJECTS HAVING MONADS IN
	{ 2-997 }
	USING MONAD FEATURE parallel_som
	[NP GET self]
	GO

	Files affected:

	- include/mql_select_statements.h
	- MQL/mql_select_statements.cpp
	- MQL/mql.yxx
	- doc/MQL-Programmers-Guide.lyx
	- tests/mqlqa.h.in
	- tests/bptqa.h.in


2014-02-26 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.0.pre16.

	* include/arena.h: Implement allocate_align4.

============ 3.4.0.pre15 ============

2014-02-02 Ulrik Sandborg-Petersen

	* Implement a different solution to the problem which was
	attempted fixed yesterday, namely that all_m_1 is no longer
	something we can just intersect with { 1-MAX_MONAD } and expect
	the result to be valid, since we may now have totally different
	monad spaces:

	  - MQL/mql.yxx: Do in_clause as { 1 - MAX_MONAD } if empty
	(absent) or IN ALL.

	  - MQL/mql_query,cpp, include/mql_query.h: Implement a method
	called getOutermostSetOfMonadsFeatureSet(std::set<std::string>&)
	on most classes in mql_query.cpp.  This only gets the outermost
	layer of monad set features, and thus does not recurse into the
	inner "blocks".

	  - MQL/mql_select_statements.cpp: In QueryBase::myMonads(), do an
	intersection between Su and pEE->m_all_m_1 if the topograph's
	getOutermostSetOfMonadsFeatureSet() method returns a set with 1
	element, namely "monads".

	  - MQL/mql_query.cpp: Redo Blocks::getSMI() so as to deal better
	with non-"monads" set of monads features, as well as being able to
	deal better with NOTEXIST object blocks.

	  - MQL/mql_query.cpp: Fix long-standing bug in
	BlockString::getSMI() when doing an OR.  Now it deal with both the
	first part of the OR and the remainder part of the OR separately,
	then set-union'ing the two monad sets.

	* include/mql_query.h: Fix StartMonadIterator::getU() so as to be
	able to cope with an empty Su.

	* tests/bptqa.h.in: Add the latest additions from mqlqa.h.in
	regarding SET OF MONADS features.

	* debian/emdros.postinst, debian/emdros.postrm, emdros.spec.in:
	Always succeed, even if xdg-desktop-menu or xdg-icon-resource
	fails.  This allows installation on headless servers, for example.

2014-02-01 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Fix a problem with creation of all_m_1 in empty
	databases.  The monad set returned is now empty, rather than
	throwing a MonadsException.

	* MQL/mql_query.cpp: Fix some problems in Block::getSMI() with the
	combination: overlap operation, non-"monads" feature. Also fix
	some latent, probably never-detected problems with the overlap
	operator with the monads feature being the regular "monads".
	Ramifications

	* MQL/mql.yxx: Fix in_clause when either absent (empty) or IN ALL
	to return the pEE->m_all_m_1 first and last monads, unless
	pEE->m_all_m_1 is empty, in which case we return the full monad
	set { 1 - MAX_MONAD }.

	* MQL/mql_execution_environment.cpp: Add
	MQLExecEnv::updateAll_m_1().

	* MQL/mql_object_statements.cpp: Use MQLExecEnv::updateAll_m_1()
	after execution in all statement types that could possibly change
	all_m_1 in the database.

	* MQL/mql_object_type_statements.cpp: Use
	MQLExecEnv::updateAll_m_1() after execution in all statement types
	that could possibly change all_m_1 in the database.

	* src/mql.cpp: In cleanup, don't delete pCallback before deleting
	pEE, since pEE will attempt to clean pCallback first.

2014-01-13 Ulrik Sandborg-Petersen

	* Add preliminary support for compilation with MinGW on Windows.
	This is not yet complete, and is not yet documented.

	* win32/config.mak.in: Do wxWidgets by default on Windows, and
	default to c:\wxWidgets-3.0.0 as the directory in which to find
	it.

	* EMdF/emdfdb.cpp, EMdF/sqlite3emdfdb.cpp: Start the process of
	adding R-Tree "monad indexes". Not finished yet.

	* MQL/mql_select_statements.cpp: Remove debugging output for
	topographic queries (query strategy).

	* MQL/mql_select_statements.cpp: For topographic queries, Make
	sure we don't pick the Innermost strategy if the m_all_m_1
	cardinality is less than 2 million (small databases).

	* win32/mingw-body.mak: Do WX programs 2-4 correctly.  Support for
	compilation of wxWidgets programs using regular expressions.

	* win32/mingw-body.mak: Add '-static -static-libgcc
	-static-libstdc++' to LINK32.

2014-01-11 Ulrik Sandborg-Petersen

	* INSTALL: Mention that the same packages that work for Fedora 18
	and 19, also work for Fedora 20, when wanting to build Emdros
	after "make distclean".

2014-01-06 Ulrik Sandborg-Petersen

	* configure.ac, debian/changelog: Bump to 3.4.0.pre15.

	* Implement an "innermost first" strategy for pre-querying
	topographic queries under certain conditions.

	* EMdF/inst.cpp: Implement an "Inst::almostRealBigUnion", which
	simply adds all objects from first monad to last monad of each
	object to a set of monads.

	* MQL/mql_query.cpp: Use the new Inst::almostRealBigUnion when
	doing innermost first strategy.

	* MQL/mql_select_statements.cpp: Fix QueryBase::myMonads to no
	longer do an intersection of Su with All_m_1.  The reason this is
	no longer a valid procedure is that we no longer have only one set
	of monads.

	* tests/mqlqa.h.in: Add about 9 tests to check that the above
	changes work for some of the intended fix-cases, namely usage of
	SET OF MONADS features.

============ 3.4.0.pre14 ============

2014-01-04 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Remove long-since redundant parameter
	stored_feature_names to method EMdFDB::getFeaturesByQuery, so as
	to simplify the code.

	* EMdF/emdfdb.cpp: Fix memory leak in GET FEATURES statement, by
	calling the d'tor of all objects in the pFeature_values array of
	EMdFValue after each row has been retrieved.  This is done in
	getFeaturesByQueryExec.

2014-01-01 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.0.pre14

	* debian/changelog: Be able to compiler 3.4.0.pre14.

	* EMdF/emdfdb.cpp: Fix memory leak in GET OBJECTS HAVING MONADS IN
	and topographic overlap queries which use a monad set which is a
	feature rather than he standard "monads" set of monads.

============ 3.4.0.pre13 ============

2013-12-31 Ulrik Sandborg-Petersen

	* configure.ac: Bump to 3.4.0.pre13.

	* debian/changelog: Bump to 3.4.0.pre13.

	* examples/ChunkingTool/doc/Content.txt: Clarify the Chunking Tool
	documentation to say you cannot place any SQLite files underneath
	C:\Program Files\ on Windows.

	* doc/pennimport.1: Document the new --doc-ids option.

	* INSTALL: Document that you need to install zlib1g-dev on Ubuntu
	12.04 LTS in the minimal set of packages.

============ 3.4.0.pre12 ============

2013-12-30 Ulrik Sandborg-Petersen

	* Make JSON parsing machinery somewhat faster, resulting in
	shorter startup time for BPTEMdFDB (among other things).

	* src/qrytool/Makefile.am: Remove -lz from ALWAYSLDADD, instead
	relying on the ZLIB_LIBADD_SWIG variable set by configure.ac.
	This enables us to compile the query tool even when ZLIB is
	unavailable.

2013-12-29 Ulrik Sandborg-Petersen

	* src/mql.re: Make MQL parsing very slightly faster (very! slightly).

2013-12-28 Ulrik Sandborg-Petersen

	* Make FTS harvester (both version 1 and version 2) able to take a
	comma-separated list of indexed feature names.  This is useful,
	for example, when indexing both a surface feature and its
	equivalent in a different orthography.  The parameters formerly
	known as "indexed_feature_name", now "indexed_feature_name_list"
	must be strings that contain comma-separated lists of
	feature-names to be indexed.

2013-12-18 Ulrik Sandborg-Petersen

	* win32/body.mak: Enable use of wxWidgets 3.0.

2013-10-24 Ulrik Sandborg-Petersen

	* debian/changelog: Fix trailer lines going back to 3.4.0.pre09.
	Debian package building has not worked since then, apparently.

2013-10-21 Ulrik Sandborg-Petersen

	* Bump to 3.4.0.pre12, also in debian/changelog.

	* MQL/mql_features_statement.cpp: Remove an unused variable, so as
	to silence a warning.

============ 3.4.0.pre11 ============

2013-10-19 Ulrik Sandborg-Petersen

	* EMdF/string_func.cpp: Fix a serious bug in encodeSTRINGstring()
	whereby any double quote (") character got translated as \\\x02
	instead of \\\".  This had ramifications for, e.g., bptdump,
	mqldump, and other parts of the system.

	* MQL/mql.yxx: Make feature_name rule able to be "monads".

	* Enable 'monads' as a possible feature name to GET in GET OBJECTS
	HAVING MONADS IN and in SELECT ALL OBJECTS. Files affected:

	 - include/emdfdb.h
	 - EMdF/emdfdb.cpp

	* tests/mqlqa.h.in, tests/bptqa.h.in: Test the new "GET monads"
	functionality for GET OBJECTS HAVING MONADS IN nad SELECT ALL
	OBJECTS.

	* Enable 'monads' as a possible feature to get in GET FEATURES
	FROM OBJECTS.

	* tests/mqlqa.h.in, tests/bptqa.h.in: Test the new "GET monads"
	functionality for GET FEATURES FROM OBJECTS.

2013-10-17 Ulrik Sandborg-Petersen

	* Bump to 3.4.0.pre11, also in debian/changelog.

	* sqlite/src/Makefile.am: Make temp_SOURCES correctly do
	$(srcdir)/temp.c instead of temp.c, thereby reinstating dependency
	chains.  This makes it less likely that "make -j X" where X > 1
	will fail.

	* zlib/: Upgrade to ZLib 1.2.8, released on 28 Apr 2013.

============ 3.4.0.pre10 ============

2013-10-17 Ulrik Sandborg-Petersen

	* Bump to 3.4.0.pre10, also in debian/changelog.

	* Upgrade to SQLite 3.8.1, released 2013-10-17. Files affected:

	  - sqlite3/VERSION
	  - sqlite3/src/shell.c
	  - sqlite3/src/sqlite3.c
  	  - sqlite3/src/sqlite3.h

============ 3.4.0.pre09 ============

2013-10-17 Ulrik Sandborg-Petersen

	* Bump to 3.4.0.pre09, also in debian/changelog.

	* Makefile.am: Change emdros-@VERSION@.spec filename to
	emdros-spec-@VERSION@.spec, so as to make it easier to do filename
	completion.

	* include/inst.h, EMdF/inst.cpp: Downgrade to the faster SkipList
	version from 3.4.0.pre07.  It was a bad idea to use BBTree for
	Inst, because speed suffered, and probably also memory consumption
	was greater with BBTree than with SkipList.  The reason for the
	speed decrease is currently unknown, but the 3.4.0.pre08 version
	has been tagged in branches/emdros-3-4-0-pre08-with-bb-trees/, so
	that the reason can be found.

	* sqlite3/tool/lemon.c: Upgrade to lemon.c from SQLite 3.8.1.0.

============ 3.4.0.pre08 ============

2013-10-17 Ulrik Sandborg-Petersen

	* src/qrytool/TECkit/version_defs.h: Add. It was a leftover that
	never got incorporated in the last import of the latest TECkit
	sources .

	* rmfiles.sh: Remove the following files:

	m4/libtool.m4
	m4/ltoptions.m4
	m4/ltsugar.m4
	m4/ltversion.m4
	m4/lt~obsolete.m4

	* SWIG/csharp/Makefile.am, SWIG/java/Makefile.am: Now say (with
	echo) what to do with ll.txt made with gen_files.

	* SWIG/csharp/Makefile.inc, SWIG/java/Makefile.inc: Run gen_files
	and thereby add BookcaseHarvesterParameters.{cs,java}.

	* Makefile.am, configure.ac: Let Makefile.am do the creation of
	the Emdros spec file. Rename it from emdros.spec to
	emdros-@VERSION@.spec.  This is so as to be able to rpmbuild more
	than one version at a time.

2013-10-14 Ulrik Sandborg-Petersen

	* EMdF/inst.cpp, include/inst.h: Use a BBTree instad of a SkipList
	for the storage in the Inst.

============ 3.4.0.pre07 ============

2013-10-14 Ulrik Sandborg-Petersen

	* tests/bptqa2h.py: Add #include <string> at the top of bptqa.h.

	* tests/Makefile.am: Make bpttry depend on bptqa.h, and make
	mqltry depend on mqlqa.h.

	* EMdF/sqlite3emdfdb.cpp: Make the creation of indices work with
	the new SQLite 3.8.0.2.

2013-10-13 Ulrik Sandborg-Petersen

	* debian/changelog: Upgrade to 3.4.0.pre07.

	* Upgrade to SQLite 3.8.0.2.

	* tests/Makefile.am: Let mqltry depend on mqlqa.h, and let bpttry
	depend on bptqa.h.

	* MQL/mql_sheaf.cpp: Fix bug in MatchedObject::printConsole()
	whereby an extraneous 0 would be printed if we were printing a
	pow_m MatchedObject, thereby causing mqltry(1) to fail.

============ 3.4.0.pre06 ============

2013-10-01 Ulrik Sandborg-Petersen

	* Bump to 3.4.0.pre06

	* debian/changelog: Upgrade to 3.4.0.pre06.

	* m4/wxemdros.m4: Mac OS X: Leave behind 10.5 compatibility when
	compiling with wxWidgets >= 2.9 on 10.6. That also means, dropping
	support for ppc and only doing i386 and x86_64.

	* include/string_func.h: Add inline function long2szNonReversing.

	* EMdF/string_func.cpp: Redo long2string() with
	logn2szNonReversing, and do encodeSTRINGstring() a little bit
	differently. Rationale: Speed.

	* MQL/mql_sheaf.cpp: Make outputting of Console results faster.
	XML outputting should also be faster, but that is only because of
	the changes in string_func.{cpp,h}.

============ 3.4.0.pre05 ============

2013-10-01 Ulrik Sandborg-Petersen

	* Bump to 3.4.0.pre05

	* debian/changelog: Upgrade to 3.4.0.pre05.

	* Revert the changes done in @4896, so as to work again with
	BPT. It was not a bad idea, but just poorly executed.

============ 3.4.0.pre04 ============

2013-08-22 Ulrik Sandborg-Petersen

	* INSTALL: Correct some package dependency documentation for
	Ubuntu etc.

	* harvest/harvest_fts2.cpp: Make sure that, when there is only one
	token to find, and the token is not found, we do not return an
	error, but return zero results cleanly.

	* include/Makefile.am: When we are doing our own zlib, copy
	../zlib/zconf.h into include/.

============ 3.4.0.pre03 ============

2013-08-22 Ulrik Sandborg-Petersen

	* include/mql_sheaf, MQL/mql_sheaf.cpp, doc/progref/Content:
	Removed the unnecessary object_type_id parameter to the c'tor of
	FlatStraw, since it was causing problems for the new PHP bindings,
	and was unnecessary anway.  It was never stored, just discarded in
	the c'tor.

	* SWIG/php/test.php: Add a test for FlatStraw.

	* INSTALL: Explain which packages to pull in on Ubuntu for a
	minimal build.

	* debian/control: Remove dependency on xdg-utils, since this
	causes problems on headless servers, such as Ubuntu 12.04 LTS.

	* debian/emdros.postrm, debian/emdros.postinst: Do some Bourne
	Shell magic to work at all on headless servers without xdg-utils.

2013-08-20 Ulrik Sandborg-Petersen

	* sqlite/src/Makefile.am: Move -lphtread from
	libsqlite_emdros_la_LIBADD to libsqlite_emdros_la_LDFLAGS, where
	it belongs.  Also add -ldl to libsqlite_emdros_la_LDFLAGS.
	Hopefully this will get rid of the error that libsqlite_emdros.so
	is not linked by default into mql(1).

	* SWIG/php/Makefile.am: Add rule for $(srcdir)/phpemdros_wrap.h.

	* MQL/mql_R.cpp: Eliminate an unmotivated call to
	pEE->pOut->flush().

	* MQL/mql_execution_environment.cpp, MQL/mql_execute.cpp: Fix XML
	output so it conforms to the DTD again.

============ 3.4.0.pre02 ============

2013-08-19 Ulrik Sandborg-Petersen

	* tests/asv/Makefile.am: Actually include the known_good_output/
	files. This makes the tests run even from a dist tarball.

2013-08-18 Ulrik Sandborg-Petersen

	* m4/wxemdros.m4: For Mac OS X 10.8, do not set the SYSROOT, since
	we may have overridden this.

	* include/environment_emdros.h, MQL/emdros_environment.cpp: Add a
	version of EmdrosEnv::executeString() which does not have an
	MQLResultCallback parameter, just so as to be able to do the PHP
	bindings correctly.

	* SWIG/php/test.php: Initial addition.

	* emdros.spec.in, debian/docs.in: Add SWIG/php/EmdrosPHP.ini and
	SWIG/php/test.php to docs distribution.

	* tests/asv/Makefile.am: Add osistohtml.json to EXTRA_DIST.

2013-08-17 Ulrik Sandborg-Petersen

	* include/monads.h, EMdF/monads.cpp: Don't use C++ keyword
	'restrict' as a method name. Instead, call the method
	'removeMonadsBefore'. Also affected:

	- tests/emdftry.cpp.

	* Add PHP as a SWIG-supported language.

	* debian/changelog: Add support for 3.4.0.pre02.

	* emdros.spec.in, debian/rules.in, debian/docs.in: Add support for
	PHP.

2013-08-03 Ulrik Sandborg-Petersen

	* win32/body.mak: On X86, default to WINVER=0x0500 (Windows 2000),
	and do not /D define __WIN95__.

	* win32/config.mak.in: Upgrade to wxWidgets 2.9.5.

	* win32/config.mak.in: Use makensis.exe, not makensisw.exe, for
	NSISEXE.  This makes it work from the command line.

	* win32/README.txt: Update instructions for wxWidgets 2.9.5

2013-08-01 Ulrik Sandborg-Petersen

	* Android.mk, harvest/win32.mak, harvest/harvest.pro: Add
	compilation of harvest/harvest_fts2.cpp.

	* win32/README.txt: Add explanation of how to build wxWidgets with
	wxWidgets version 2.9.5 and above.

2013-07-31 Ulrik Sandborg-Petersen

	* include/monads.h, EMdF/monads.cpp: Add
	(Fast)SetOfMonads::hasLargerGap(). Add operator= and copy
	constructor to FastSetOfMonads.

	* Add FTS engine version 2.

	* Add EXPERIMENTAL support for USING RANGE (A,B) to topographic
	queries. See MQL/mql.yxx for the syntax. No docs yet, as we need
	to test it to see whether it is actually useful and correct in its
	current implementation.

	* m4/wxemros.m4: Do ISYSROOT for Mac OS X with wxWidgets 2.9.X.
	Also, for 10.8, minimum Mac OS X version is 10.6, not 10.7, and we
	use an ISYSROOT of 10.7.

	* include/emdf_hash.h: typedef some things on Windows instead of
	#include'ing <stdint.h>.

2013-07-25 Ulrik Sandborg-Petersen

	* m4/emdrosswig.m4: Reinstate the ability to do ruby SWIG backend.

2013-07-24 Ulrik Sandborg-Petersen

	* Add include/mql_execution_environment.h:MQLResultCallback class,
	in order to be able to consume an MQLResult (only a topographic
	Sheaf for now) while doing the (for now, topographic) query.  This
	is then used in src/mql.cpp in order to not consume so much memory
	for large query-results.  Add a parameter to
	EmdrosEnv::executeString() and friends. Also amend SWIG.

	* Make sure that the MQResultCallback is not used after the call
	to mqlExecuteStream().

============ 3.4.0.pre01 ============

2013-07-24 Ulrik Sandborg-Petersen

	* m4/buildenv.m4, m4/buildenv2.m4, m4/emdrosswig.m4,
	m4/wxemdros.m4: Initial addition.

	* configure.ac: Replace everything that was moved to m4/ with
	calls to the macros available there.

	* Makefile.am, */Makefile.am, */*/Makefile.am: Replace INCLUDES
	with the newer AM_CPPFLAGS.

	* wx/Makefile.am: Rearrange to use the MAYBE_ idiom instead of
	lib_LIBRARIES += libemdrosguiu.a.  Remove NON_UNICODE build
	possibility. Comment the libemdrosguiu_a_LDFLAGS out, since it is
	not appropriate for a static library.

	* m4/wxemdros.m4: Change it so that it does ppc arch in universal
	binary on wxWidgets 2.9 (and 3.0). Also, complain if we try to
	build with wxWidgets 2.9 (or 3.0) on Mac OS X 10.4.

	* m4/wxemdros.m4: Bugfixes for Universal binaries on Mac OS X.

	* m4/buildenv.m4: Really set the correct Mac OS X
	DARWINMAJORVERSION.  Before, it was always set to 10 regardless of
	which machine we were on.

	* m4/wxemdros.m4: Redo the versioning of DARWINMAJORVERSION.

	* Makefile.am: When doing macdist target, look for the Emdros
	sources in ../ rather than ./ . This is easier for the maintainer
	(me).

	* m4/wxemdros.m4: AC_SUBT(MACOSX_VERSION_MIN), and set it the same
	way as for wxWidgets 2.8 when compiling without wxWidgets.

	* Makefile.am: In target macdist, use @MACOSX_VERSION_MIN@ instead
	of hard-coding "10.4".

	* m4/buildenv.m4, m4/wxemdros.m4: Revert the previous changes
	which tried but failed to "correct" the detection of the Mac OS X
	version on which we are building. It was actually correct, but
	needed to be updated for the new m4/ structure.

	* m4/wxemdros.m4: Future-proof the detection of MACOSX_VERSION_MIN
	slightly by setting it to 10.8 if we get "unknown".  That, at
	least, will most likely compile on 10.9.

	* src/qrytool/mainframe.cpp: In Mainframe::ResizeSplitters(): Only
	do the work if the splitters actually exist and are not nil.  This
	ensures that the query tool works on Mac OS X with wxWidgets
	2.9.5.

	* examples/ChunkingTool/ctmf.cpp: Do toolbar creation correctly on
	wxWidgets 2.9.5.  Now it works on Mac OS X.

2013-07-23 Ulrik Sandborg-Petersen

	* Android.mk: Add EMdF/emdf_hash.cpp to the build.

	* src/qrytool/mainframe.cpp: Make sure that the font size is
	honored, by setting the default style and font even after a
	wxTextCtrl::Clear() call.

	* configure.ac: Don't even try to compile with wxWidges 2.5.

	* debian/changelog: Make it able to deb-build under Debian and
	derivatives.

============ 3.3.1.pre26 ============

2013-07-14 Ulrik Sandborg-Petersen

	* EMdF/win32.mak, EMdF/EMdF.pro, EMdF/djgpp.mak: Add compilation
	of emdf_hash.cpp.

	* include/emdf_hash.h: Add hash_djb2_int(), and make it inline.


2013-07-12 Ulrik Sandborg-Petersen

	* Add include/emdf_hash.h and EMdF/emdf_hash.cpp, an
	implementation of a basic hash table from std::string to a
	template parameter V.

	* MQL/mql_helper_classes.cpp: Use the new hash table in
	FeatureEnv::m_feature_name2index_map, thereby getting a speed
	increase in CREATE OBJECTS WITH OBJECT TYPE.

2013-07-11 Ulrik Sandborg-Petersen

	* In Penn Importer, restore the old, default behavior of using
	"self" id_ds as the parents and corefs, adding an option to
	src/pennimporr (called --doc-ids) to optionally use the newer
	behaviour of using doc-id features.

	* INSTALL: Mention that the same set of packages needed on Fedora
	18 are also needed on Fedora 19.

2013-07-04 Ulrik Sandborg-Petersen

	* Update the documentation of the Emdros Query Tool, to remove an
	actually occurring misunderstanding, whereby a user thought that
	they *had* to put their database underneath C:\Program
	Files\Emdros\.... Now, even the remotest possibility of confusion
	has been removed by adding some comments on the subject.

	* doc/progref/builthtb.py: Update to handle {PREUNDERSCORE}
	correctly, without the preceding backslash.

	* doc/progref/Content.txt: Fix some <pre class="code">...</pre>
	snippets which did not have the requisite "<!-- widthincm:
	... -->" comment after the </pre>, and which therefore were not
	treated correctly as pre in LaTeX.

2013-07-02 Ulrik Sandborg-Petersen

	* MQL/mql_sheaf.cpp: In MatchedObject::getFeatureAsString(): Use
	EMdFValue::toString() instead of the wrong getString() for
	kEVSetOfMonads, thereby avoiding an exception.

2013-06-22 Ulrik Sandborg-Petersen

	* tests/bptqa.h.in: Update some of the tests, so as to check some
	aspects more rigorously.

	* tests/mqlqa.h.in: Bring over some of the tests from bptqa.h.in,
	bringing the total to 363.

	* EMdF/emdfdb.cpp: Fix bug in UPDATE OBJECT.  For features whose
	type is set of monads, it previously did not also update the
	first_monad_mdf_XYZ column of the table.  Now it does.

	* EMdF/emdfdb.cpp: Fix potential correctness bug in GET OBJECTS
	HAVING MONADS IN and in SELECT ALL OBJECTS with overlap, whenever
	the monad set in question would be something other than "monads".

2013-06-21 Ulrik Sandborg-Petersen

	* tests/bptqa.h.in: Add some more tests, bringing the total to
	376.

	* Add ability to have WITH INDEX when creating / updating a
	feature with type "enumeration".  Files affected:

          - MQL/mql.yxx
	  - include/mql_types.h
	  - MQL/mql_helper_classes.cpp
	  - MQL/mql_object_statements.cpp

	* examples/HAL/doc/Content.txt: Update for correctness.

2013-06-20 Ulrik Sandborg-Petersen

	* util/mql_exporter.cpp: Add export of features whose type is 'SET
	OF MONADS'.  This also affects src/mqldump.cpp.

2013-06-12 Ulrik Sandborg-Petersen

	* Add directory tests/asv/ and flesh it out with some tests.

	* tests/Makefile.am: Add target test, which simply enters
	tests/asv/ and runs make test.

	* ./Makefile.am: Add target test, which simply enters tests and
	runs make test.

	* tests/Makefile.am: Run SQLite2 and SQLite3 invocations of
	emdftry, mqltry, and mqllingtry, if those backends are built.

============ 3.3.1.pre25 ============

2013-06-12 Ulrik Sandborg-Petersen

	* debian/changelog: Upgrade to 3.3.1.pre25.

2013-06-05 Ulrik Sandborg-Petersen

	* harvest/templatelang.json: No longer nix \t and \r within the
	template string. Instead, add them to the output.

2013-05-27 Ulrik Sandborg-Petersen

	* include/arena.h: Fix Bigstring::addsz to NOT add the trailing
	'\0'.  Also fix the documentation.  This also fixes
	EMdF/string_func.cpp: joinList(std::string, std::list<id_d_t>),
	which in turn is used a number of places, including the NEGRA
	Importer, util/negraimporter.cpp.

	* util/negraschema.mql: Do STRING instead of STRING FROM SET for
	those features with high cardinality.

============ 3.3.1.pre24 ============

2013-05-23 Ulrik Sandborg-Petersen

	* src/renderobjects.cpp, src/renderobjects.h: BUGFIX: Make sure
	that, when using the priority list, objects with more than one
	MonadSetElement get emitted even after the first MSE.

	* include/renderobjects.h: Make sure that the innards of
	RenderObjects don't get exposed to SWIG.

	* configure.ac: Add some PostgreSQL paths (for Solaris 10 and
	PostgreSQL 8.3).

	* configure.ac: When doing wxWidgets, only set CXX and CC with
	wx-config if they are not already set by the user!

	* wx/importerwizard.cpp, wx/configwizard.cpp, wx/vtreecanvas.cpp,
	wx/conndlg.cpp, src/qrytool/mainframe.cpp, tests/htreetest.cpp,
	tests/htmlcanvastest.cpp, examples/ChunkingTool/ctmf.cpp: Change
	all occurrences of "_T(" to "wxT(", thereby enabling compilation
	on Solaris with CC.


2013-05-10 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: Add ability to do * and ? in query
	terms. Also, do away with the highlighting of anything but the
	first query term in the hit, so as to be able to do the regular
	expressions correctly.

============ 3.3.1.pre23 ============

2013-05-02 Ulrik Sandborg-Petersen

	* debian/changelog: Update to 3.3.1.pre23.

2013-05-01 Ulrik Sandborg-Petersen

	* include/mql_execution_environment.h: Surround declaration of
	m_arena with #ifndef SWIG ... #endif.  It is an internal variable,
	only meant to be used from inside Emdros, and thus not to be used
	from SWIG-bindings.

2013-04-30 Ulrik Sandborg-Petersen

	* MQL/mql_helper_classes.cpp: Change the definition in
	FeatureAssignment of std::string m_feature_name into std::string*
	m_pFeature_name. Don't delete the incoming string in the c'tor,
	but use it directly.

	* MQL/mql_query.cpp: Use is_self() in
	FeatureComparison::makeConstraints().

2013-04-29 Ulrik Sandborg-Petersen

	* doc/MQL-Programmers-Guide.lyx: Correct some errors in a few
	grammars.

	* MQL/mql_gq.re: Get a slight speed increase by using
	Bigstring::addChars() instead of a loop with Bigstring::addChar()
	in MQLGQScanner::addToken().

	* include/arena.h: Add Arena::clear(), and reuse it in
	Bigstring::clear().

	* include/string_func.h: Add inline function is_self(const
	std::string& str).

	* EMdF/string_func.cpp: Optimize str_toupper slightly. Optimize
	str_tolower more. Add str_tolower(std::string& in) with only one
	parameter.

	* include/mql_execution_environment.h: Add member Arena
	MQLExecEnv::m_arena.

	* MQL/mql_execution_environment.cpp: Add m_arena.clear() to
	MQLExecEnv::clean().

	* MQL/mql_helper_classes.cpp, MQL/mql_object_statements.cpp: Add
	FeatureEnv class, and use it instead of the old machinery for
	CREATE OBJECT, CREATE OBJECTS WITH OBJECT TYPE, and UPDATE OBJECT.

	Files also affected:

	  - include/mql_types.h
	  - include/mql_object_statements.h

	* include/arena.h: Add bool Bigstring::is_other_than_whitespace().

	* MQL/mql_execute.cpp: Get a slight speed increase by using
	Bigstring::is_other_than_whitespace() before deciding whether to
	run the query, then using Bigstring:addChars(" GO", 3) before
	converting to std::string.


2013-04-27 Ulrik Sandborg-Petersen

	* src/qrytool/TECkit/Makefile.am: Don't add absolute path to
	libteckit.la in LDFLAGS and DEPENDENCIES for TxtConv and
	TECkit_Compile.  This facilitates make -jX where X is > 1.

	* include/monads.h, EMdF/monads.cpp: Add
	SetOfMonads::getCardinality() and
	FastSetOfMonads::getCardinality().  Not used yet.  For future
	query optimization.

============ 3.3.1.pre22 ============

2013-04-27 Ulrik Sandborg-Petersen

	* configure.ac: Do WITH_SWIG_CSHARP properly.

	* configure.ac: chmod 755 debian/rules ... enable building .debs
	again.

	* util/pennimporter.cpp: Fix bug in putNonterminals: After the
	first round of objects had been emitted, the next round would get
	emitted to the object type 'Nonterminal' rather than the correct
	nttype nonterminal, even if we had told the c'tor to emit distinct
	Nonterminal types.

	* util/pennimporter.cpp: Start a transaction every time in
	putNonterminals.

	* doc/MQL-Programmers-Guide.lyx: Clarify that declaring a string
	FROM SET is not a good idea if the cardinality of the data is
	high.

	* util/pennschema.mql: Change declaration of Token.surface from
	STRING FROM SET WITH INDEX to be without FROM SET, as declaring it
	FROM SET slows things down tremendously on MySQL.

	* util/pennimporter.cpp, include/pennimporter.h,
	util/pennschema.mql: Add a "docid : INTEGER" feature to all
	relevant object types. Redeclare "parent" to have type "INTEGER"
	instead of "ID_D". Use docid's value instead of "self" for the
	"parent". Reset the docid to 0 for every new document, thus
	keeping the numbers low inside of each document.

	* src/pennimport.cpp: Up the number of documents to read before
	emitting a batch of MQL from 10 to 1000, due to performance
	setbacks by using 10 instead of 100.

	* include/emdfdb.h: Add APIs EMdFDB::lockTablesForCreateObjects()
	and EMdFDB::unlockTablesForCreateObjects(). These are virtual
	dummy methods returning true (DB success).

	* EMdF/emdfdb.cpp: Use the new (un)lockTablesForCreateObject() in
	EMdFDB::createObjects().

	* EMdF/mysqlemdfdb.cpp: Implement the new
	(un)lockTablesForCreateObject() so as to gain a speed advantage on
	MySQL when doing CREATE OBJECTS WITH OBJECT TYPE [...].

	* util/unboundbibleimporter.cpp, util/pennimporter.cpp: Move the
	definition of EmdrosMemObject from unboundbibleimporter.cpp to
	pennimporter.cpp where it belongs (since the class is declared in
	pennimporter.h).

	* util/pennimporter.cpp: Up the number of objects to emit before
	doing a GO from 50,000 to 100,000. This is for both terminals and
	nonterminals.

	* util/pennimporter.cpp: Amend EmdrosMemObject::putMQL() such that
	it only emits a value if it is different from the default, thereby
	speeding up loading and creation of MQL.

	* MQL/mql_query.cpp: Improve type checking in
	FeatureComparison::type() when doing object reference
	usages. Specifically, don't bail if one feature is WITH INDEX and
	the other isn't.

	* doc/Rel-EMdF.lyx: Clarify that
	declaring a string FROM SET is not a good idea if the cardinality
	of the data is high.

	* EMdF/emdfdb.cpp, include/emdfdb.h: Remove
	EMdFDB::getStringFromSet(). It was not being used, and so was dead
	code.

	* EMdF/bptemdfdb.cpp, include/bptemdfdb.h: Remove
	BPTEMdFDB::getStringFromSet(). It was not being used, and so was
	dead code.

	* include/emdfdb.h: Remove pConn2, as it was made redundant by te
	removal of EMdFDB::getStringFromSet().  Other files affected:

	  - EMdF/emdfdb.cpp
	  - EMdF/pgemdfdb.cpp
	  - EMdF/mysqlemdfdb.cpp
	  - EMdF/sqliteemdfdb.cpp
	  - EMdF/sqlite3emdfdb.cpp

	* doc/bootstrapping.txt: Mention how to make a PostgreSQL user
	able to create databases on recent PostgreSQL versions.

	* configure.ac: Do test for BPT correctly.

	* debian/rules.in: Also do @WITH_POSTGRESQL@ as an option to configure.



2013-04-26 Ulrik Sandborg-Petersen

	* include/string_list.h: Make ParserListNodet<T>'s d'tor delete
	the m_value iff T is a pointer.  This fixes a memory leak in
	util/pennimporter.cpp:class PennTreebankImporter.

	* util/pennimporter.cpp: Enable reading empty documents. They are
	simply not emitted if they consist solely of whitespace or
	comments, or are empty.

	* include/pennimporter.h, util/pennimporter.cpp: Lay the
	groundwork for being able to emit MQL for smaller numbers of
	documents than the ones given on the command line.

	* src/pennimport.cpp: Use this in the Penn Treebank importer.

	* util/pennimporter.cpp: Change
	EmdrosImporterBase::readDocumentsFromFiles() to emit which file is
	being read, before it is being read, to stderr.

	* util/pennimporter.cpp: Fix a memory leak in
	PennTreebankImporter, namely not deleting the EmdrosMemoryObject
	objects upon destruction of the PennTreebankImporter.

	* src/pennimport.cpp, include/pennimporter.h: Up the number of
	documents to read before emitting MQL from 10 to 100.

	* tests/Makefile.am: Make sure that @ZLIB_LIBADD@ is used where
	appropriate.

	* configure.ac: Do not use -lz in BACKENDLDADD or
	BACKENDLDADDSWIG. Instead, use ZLIB_LIBADD and ZLIB_LIBADD_SWIG
	respectively.

	* debian/changelog: Bump to 3.3.1.pre22.

	* debian/rules.in, configure.ac: Add debian/rules.in, and make
	debian/ruls from it in configure, thereby enabling carrying over
	of options to configure when doing a make dist. Just like
	emdros.spec.in.

============ 3.3.1.pre21 ============

2013-04-25 Ulrik Sandborg-Petersen

	* harvest/renderxml.cpp: Fix bug in ElementInfo::fill(): If the
	start or end template was present, but empty, the compiler would
	throw a syntax error. This has been fixed by not compiling a
	template if the start or end template is empty.

	* configure.ac: Compile on Ubuntu Quantal (Ubuntu 12.10) amd64
	architecture.

	* debian/changelog: Be able to compile 3.3.1.pre21 as such.

	* configure.ac: Enable configure to detect the presence of the BPT
	sources, thereby making it unnecessary explicitly to say
	--with-bpt.

	* INSTALL: Add instructions for building .deb files (Ubuntu /
	Debian / etc). Also, amend instructions for compiling BPT.

2013-04-16 Ulrik Sandborg-Petersen

	* include/arena.h: Enable Bigstring::addChars() and
	Bigstring::addsz() to add a string whose length is greater than
	the m_chunk_size size.

	* Makefile.am: Add Android.mk and README-Emdros-on-Android.txt to
	EXTRA_DIST.

	* include/arena.h: Fix off-by-one bug in Arena::allocate().

2013-03-31 Ulrik Sandborg-Petersen

	* wx/conndlg.cpp: Make it actually work with the latest wxWidgets
	(2.8.12).  That is, don't try to use sizers when simple
	enabling/disabling of controls will work just as well.

2013-03-30 Ulrik Sandborg-Petersen

	* EMdF/string_func.cpp: Change backend_kind2string() by renaming
	the output of kSQLite2 from "SQLite" to "SQLite2".

	* wx/conndlg.cpp: Mention SQLite2 instead of SQLite in two helper
	strings.

============ 3.3.1.pre20 ============

2013-03-22 Ulrik Sandborg-Petersen

	* sqlite3/src/: Upgrade to SQLite 3.7.16. Also update
	sqlit3/VERSION.

============ 3.3.1.pre19 ============

2013-03-22 Ulrik Sandborg-Petersen

	* sqlite3/tool/lemon.c, sqlite3/tool/lempar.c: Upgrade to lemon
	from SQlite 3.7.16.  The lempar.c had not changed, so svn doesn't
	show any update for this file.

	* EMdF/Makefile.am, MQL/Makefile.am, util/Makefile.am,
	harvest/Makefile.am: Use the lemon from SQLite3, not SQLite2.

	* EMdF/json.yxx, MQL/mql.yxx, util/pennparser.yxx,
	harvest/templatelang.yxx: #define assert(X) to be nothing,
	necessary because of new lemon from SQLite3.  Also, set
	pEE->bSyntaxError to true in the %syntax_error pragma.

	* include/mql_yylex, include/penn_yylex.h: Improve
	Token::getTokenName(), so that it does not segfault if we have
	reached the EOF.

	* src/qrytool/TECkit/: Upgrade to TECkit from 2011, a.k.a. svn
	checkout r116, checked out on 2013-03-23 from
	http://scripts.sil.org/svn-public/teckit .

2013-03-21 Ulrik Sandborg-Petersen

	* include/bptemdfdb.h: Rename the protected method
	'loadStringSetIntoCache' to be named 'loadStringSetIntoCacheBPT',
	so as not to hide the virtual function with the same name (but
	different arguments) in EMdFDB.

	* include/bptemdfdb.h: Similarly, rename the version of getInst()
	which does all the work into getInstLocalBPT().

	* include/bptemdfdb.h: Synchronize the parameter list of the
	public version of getObjectsHavingMonadsIn() with what is really
	used in ../../BPT/include/bpemdfdb.h.

	* include/sqlite3conn.h, EMdF/sqlite3conn.cpp,
	EMdF/sqlite3emdfdb.cpp: Rename the
	SQLite3EMdFConnection::useDatabase() to useDatabaseSQLite3(), so
	as to avoid hiding the method EMdFConnection::useDatabase(). Also
	change its usage in SQLite3EMdFDB.

	* include/mql_select_statements.h: Remove unused private field
	SelectStatement::m_pArbitraryMonadSet, since it is already present
	in the base class, QueryBase.

	* include/mql_sheaf.h: Reduce memory footprint of FlatStraw by
	removing redundant (unused) field, FlatStraw::m_object_type_id.
	It was set in the constructor, but never used. Since it was
	private, andhad no access-method, it was really not used. So
	remove it.

	* util/md5_emdros.cpp: Correct call to memset(ctx, 0 sizeof(ctx))
	to memset(ctx, 0, sizeof(*ctx)), so as to memset the size of the
	struct, not the size of the pointer.

	* MQL/mql_query.cpp: Remove a redundant bDummyOK.

	* MQL/mql_R.cpp: Comment out an unused call to
	R_retrieval_retrieval in R_object_block_inst().

	* MQL/mql_execute.cpp: Remove unused declaration and setting of
	bWasCompiler in mqlExecuteStream().

	* src/bptdump.cpp: Remove unused variable bPrintOutput.

	* src/qrytool/mqlqtwx.cpp: Remove some unused variables, and other
	warning fixes.

	* src/qrytool/wxilqtoutput.cpp: Make an int into unsigned int so
	as to get rid of a signedness comparison warning, and other
	warning-fixes.

	* tests/mqltry.cpp: Remove an unused variable, and correct an
	error message which should not appear, in order for it to say what
	would actually be wrong, were it ever to be displayed.

	* util/pennimporter.cpp: Get rid of an "Unused variable" warning.

	* util/negraimporter.cpp, include/negraimporter.h: Get rid of some
	signedness problems.

	* harvest/memobject.cpp, include/memobject.h: Get rid of some
	signedness problems.

	* wx/layout.cpp: Get rid of several warnings.

	* wx/vtreecanvas.cpp: Get rid of several warnings.

	* src/qrytool/output_style.cpp: Get rid of several warnings.

2013-??-?? Ulrik Sandborg-Petersen

	* src/qrytool/mqlqtwx.cpp: Don't try to connect if either the
	database name or the configuration is empty.

	* src/wxilqtout.cpp: Get rid of a warning.

	* src/importtool/importtool.cpp: Get rid of a warning.

	* tests/qdtry.cpp: Get rid of a warning.

	

============ 3.3.1.pre18 ============

2013-03-01 Ulrik Sandborg-Petersen

	* Add ./signthis.bat, also to ./Makefile.am.


2013-02-19 Ulrik Sandborg-Petersen

	* sqlite/src/test3.c, sqlite/src/test2.c: Alter the source code to
	be able to run on 64-bit machines. Use the same technique as in
	sqlite/src/test1.c, of using a makePointerStr function to generate
	pointer-representations as strings, then parse them back with
	getXXXPointer, instead of using sprintf("%x") and then using
	Tcl_GetInt().

	* sqlite/src/date.c: Bring up-to-date with the latest changes from
	the fossil repository, branch version_2, date 2007-01-08.

	* sqlite/src/vdbe.c, sqlite/test/tclsqlite.test: Bring up-to-date
	with the latest changes from the fossil repository, branch
	version_2, date 2006-10-24.

	* sqlite/src/tclsqlite.c: Add call to Tcl_Init(interp) in
	Libsqlite_Init() so as to be able to run "clock seconds" from
	../test/date.tcl.  This is apparently due to an upgrade in Tcl
	since the release of SQLite 2.8.17.

	* sqlite/tools/: Add files missing from the real SQLite 2
	distribution. Also add to sqlite/tools/Makefile.am's EXTRA_DIST
	variable.

	* configure.ac: Define DEBUG to be "-DNDEBUG=1" when
	--disable-debug is added to the configure command line.  This is
	so as to compile out some things from the parsers based on lemon.

	* configure.ac: Set MACOSX_MIN_VERSION also when not doing
	wxWidgets. Also, set MACOSX_CFLAGS, and set
	-DSQLITE_WITHOUT_ZONEMALLOC when doing Mac OS X minimum version <
	10.5.

	* MQL/mql_execute.cpp: Only define and use MQLParserTrace() from
	the mql_parser.cpp file (made with lemon from mql.yxx) #ifndef
	NDEBUG.

2013-01-29 Ulrik Sandborg-Petersen

	* tests/mqltry.cpp: Add ability to use key on SQLite 3 databases,
	with -p option. Note that in order to make this work with real
	encryption, you can contact Emergence Consult
	(http://emergence.dk) to license the encryption for SQLite 3.

============ 3.3.1.pre17 ============

2013-01-28 Ulrik Sandborg-Petersen

	* Upgrade to SQLite 3.7.15.2, both the source and the docs.

============ 3.3.1.pre16 ============

2013-01-19 Ulrik Sandborg-Petersen

	* EMdF/table.cpp: Correct the c'tor initialization of m_iter in
	the various kinds of Table iterators.

	* include/arena.h: Silence some warnings in addsz and addChars, by
	casting the size_t argument of allocate to (int).

	* win32/win32.mak: Change the DIST_DIR to
	emdros-$(VERSION)-windows, from emdros-$(VERSION)-win32, so as not
	to confuse the packager, given that we can also make x64 versions
	now.  Note that DIST_DIR does not become part of the actual setup
	or distributable file.

2013-01-18 Ulrik Sandborg-Petersen

	* EMdF/string_func.cpp: Remove erronerous use of 'typename'.

2013-01-17 Ulrik Sandborg-Petersen

	* MQL/mql_result.cpp, include/mql_result.h: Add constructor for
	FlatSheaf*, as MQLResult::MQLResult(FlatSheaf*, MQLExecEnv*).

	* MQL/mql_select_statements.cpp: Get a speed increase in GET
	OBJECTS HAVING MONADS IN, by directly creating a FlatSheaf,
	instead of flattening a normal sheaf.

	* MQL/mql_sheaf.cpp, include/mql_sheaf.h: Add MatchedObject
	constructor which takes two monad_m: first_monad and last_monad,
	thus being able to construct a MatchedObject directly without a
	SetOfMonads. This is useful if we know that the SetOfMonads is
	single range or single monad.

	* EMdF/inst_object.cpp, include/inst_object.h: Add
	InstObject::somHasOnlyOneMSE().

	* MQL/mql_select_statements.cpp: Got a speed increase in GET
	OBJECTS HAVING MONADS IN, by creating MatchedObjects with the new
	MatchedObject constructor which takes first_monad/last_monad
	instead of a SetOfMonads.

2013-01-16 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: Got an even greater speed improvement.

	* include/mql_sheaf.h: In MatchedObject, add
	MatchedObject::getFirst(), analogous to MatchedObject::getLast().

	* EMdF/inst.cpp: Remove the dependency of the SkipList random
	number generator on time(NULL). Instead, choose a good, but fixed,
	number.  This means no more variation in times due to the RNG in
	SkipList being seeded with time(NULL).

	* include/string_func.h, EMdF/string_func.cpp: Reimplement the
	templates joinListEmptyBetween<T> and joinList<T> so that they are
	not templates, but overloaded functions. Use a Bigstring (from
	<arena.h>) for all three implementations.

	* util/negraimporter.cpp, util/tigerxmlimporter.cpp: Use the new
	overloaded functions instead of the templates.

	* EMdF/string_func.cpp: Add joinListInBigstring and
	joinListEmptyBetweenInBigstring.

	* harvest/templatelang_classes.cpp: Use the new
	joinListInBigstring and joinListEmptyBetweenInBigstring
	implementations.

	* harvest/templatelang_classes.cpp: Reimplement the variable
	mechanism, so that it uses Bigstrings instead of std::strings.

	* harvest/harvest_fts.cpp: Make getting snippets slightly faster,
	by using m_bookcase_lm2title_map.find(hit.m_bookcase_lm) instead
	of m_bookcase_lm2title_map.lower_bound(hit.m_hit_fm).

	* tests/emdftry.cpp: Test strip(const std::string&).

	* EMdF/string_func.cpp: Bugfix the strip() version that strips
	whitespace.

	* include/mql_sheaf.h: Add MatchedObject::somHasOnlyOneMSE().

	* harvest/renderobjects.cpp: Get a speed increase in
	RenderObjects::loadObjects() by using the
	MatchedObject::somHasOnlyOneMSE(), MatchedObject::getFirst(), and
	MatchedObject::getLast() functions.

2013-01-15 Ulrik Sandborg-Petersen

	* Makefile.am: When making .dmg on Mac, make a link to
	/Applications.

============ 3.3.1.pre15 ============

2013-01-12 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: Got a speed improvement across the
	board in the FTS harvester, by using monad-set tricks.

2012-12-31 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Fix an off-by-one error in the calculation of
	the lower bound of the MSE within which to look for objects in GET
	OBJECTS HAVING MONADS IN.

	* EMdF/emdfdb.cpp: Do away with pInst->hasObject() in GET OBJECTS
	HAVING MONADS IN.

	* EMdF/inst.cpp: Raise the capacity of the SkipList to be around
	2^19 (by setting MAX_NUMBER_OF_LEVELS to 18).

	* EMdF/inst.cpp: Use 1 bit rather than 3 in order to determine
	whether to increase the height of the current node, when inserting
	a new skip list node.  This means that the probability is 1/2
	rather than 1/8, which is better, according to:

	http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_skip.aspx

2012-11-27 Ulrik Sandborg-Petersen

	* Make gcc's -Weffc++ option more happy (still not completely
	happy).

2012-11-02 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: In RenderObjects::GetDocument(),
	don't leave the m_pTemplateEE's Bigstring dangling after deleting
	the local pBigstring. Instead, set it back to m_xml so that we are
	ready for the next process() invocation.

2012-11-01 Ulrik Sandborg-Petersen

	* configure.ac: Change the ISYSROOT of Mac OS X on 10.7 to 10.6.

2012-10-28 Ulrik Sandborg-Petersen

	* configure.ac: Set ISYSROOT for when building Universal binaries
	on Mac OS X 10.6 to the -isysroot for 10.4, and set Mac OS X
	minimum version to 10.4.

	* conigure.ac: Set CXX and CC, when doing wxWidgets, from
	wx-config --cxx|--cc

2012-09-28 Ulrik Sandborg-Petersen

	* configure.ac: Change the default MACOSX_VERSION_MIN from 10.5 to
	10.6 when compiling on Mac OS X 10.7.  The reason is that XCode
	can't do 10.5 binaries on Mac OS X 10.7.

	* configure.ac: Correct LD_FLAGS to LDFLAGS.

2012-09-25 Ulrik Sandborg-Petersen

	* win32/body.mak: Add WXUNICODE_PROGRAM{2,3,4} and
	INTDIR_UNICODE{2,3,4} and dependent variables.  This is so as to
	be able to build more wxWidgets programs.

2012-09-22 Ulrik Sandborg-Petersen

	* include/arena.h: Use strncpy rather than strcpy in
	Bigstring::addsz(). Also, fix the Doxygen doc for this method to
	say that the trailing zero IS copied.

	* configure.ac: For wxWidgets 2.9 and build host == Mac OS X 10.6,
	do -arch x86_64 instead of -arch ppc.  This is so as to be able to
	use cocoa on this platform.

============ 3.3.1.pre14 ============

2012-09-22 Ulrik Sandborg-Petersen

* win32/body.mak: Fix looking for wxWidgets 2.9. Also, don't
	mention 'monolithic' library when failing to locate wxWidgets. For
	2.8, we should use monolithic; for 2.9, we don't use monolithic.

	* SWIG/java/win32.mak: Make it work with TARGET_CPU rather than
	CPU.

	* SWIG/csharp/win32.mak: Make it work with TARGET_CPU rather than
	CPU.

2012-09-06 Ulrik Sandborg-Petersen

	* configure.ac: For Mac OS X, change the default ARCH_FLAGS when
	the version of Mac OS X is 10.6 from "-arch i386 -arch ppc -arch
	x86_64" to "-arch i386 -arch ppc" both when doing wxWidgets 2.8
	and when doing wxWidgets 2.9.  The reason is that this is the
	default which wxWidgets applies.

2012-08-29 Ulrik Sandborg-Petersen

	* EMdF/string_func.cpp: Optimize the version of strip() that only
	takes one parameter, the input string, and strips whitespace.

2012-08-28 Ulrik Sandborg-Petersen

	* include/mql_query.h: Add
	MonadSetRelationClause::getUniverseOrSubstrate().

	* MQL/mql_R.cpp: Do Universe, not Substrate, in R_inst(), when the
	MonadSetRelationClause specifies the Universe.  This has not been
	a bug until the BPT engine came on, since the SQL-based backends
	always use the Universe, filtering out what's not in the
	substrate.  The BPT engine, however, is more specific.

	* MQL/mql_query.cpp, include/mql_query.h: Add
	MonadSetRelationClause::calculateCharacteristicString().

	* MQL/mql_query.cpp: In
	ObjectBlock::calculateCharacteristicString(), use the new
	MonadSetRelationClause::calculateCharacteristicString().

	* tests/bptqa2h.py: Fix query and answer strings to have a newline
	where they needs to.

============ 3.3.1.pre13 ============

2012-08-23 Ulrik Sandborg-Petersen

	* src/qrytool/mqlqtwx.rc,src/importool/importtool.rc,examples/ChunkingTool/ctwx.rc:
	Add "#define wxUSE_NO_MANIFEST 1" in order not to link against the
	wrong COMCTL32.DLL from include/wx/defs.h on Win7 64 bit.

	* win32/body.mak: New WINLIBS. Also, add /DwxUSE_NO_MANIFEST=1 to
	the WX_CPPLFLAGS variable.

	* Make sure that DO_X64 is set in win32/config.nsh by
	win32/win32.mak.

	* src/emdros.nsi.in: !include config.nsh before needing DO_X64.

	* src/qrytool/mainframe.cpp: Fix bugs with creation of MainFrame
	on wxWidgets 2.9.4.

	* win32/body.mak: Set debug flags correctly.

	* src/qrytool/mainframe.h: Set initial size of eqtu to be a little
	bigger, so as to accommodate the entire tool bar.

	* wx/conndlg.cpp, include/conndlg.h: Fix problem with too much
	update on wxWidgets 2.9.4 (windows), which would cause the backend
	dropdown to be unusable.

2012-08-22 Ulrik Sandborg-Petersen

	* win32/body.mak: Attempts at making it work with wxWidgets 2.9
	and 64 bits.

	* tests/bptqa2h.py: In order for this to compile on Win32, we need
	to split strings that are longer than 65535 characters.  Do so.

	* win32/body.mak: Link against wxmsw29u(d)_webview.lib.

	* win32/win32.mak: Take the manifest file from
	win32\ReleaseUnicode for:

	- eqtu.exe
	- EmdrosImportToolUnicode.exe
	- EmdrosChunkingToolUnicode.exe

	* wx/importerwizard.cpp: Fix bug in creation of Penn Treebank
	importer. In particular, it treated the first id_d as the first
	monad, set the first id_d to 1, and made the output kind dependent
	on the value of the first monad (0 or non-zero determining whether
	it emitted nonterminals as one object type or distinct object
	types).

	* wx/importerwizard.cpp: Now, when emitting Penn Treebank output,
	always emit nonterminals as distinct object types.

2012-08-21 Ulrik Sandborg-Petersen

	* tests/bptqa.h.in: Out-comment some of the queries which aren't
	supposed to work at the moment.

	* MQL/mql_query.cpp, include/mql_query.h: Add additional, required
	exception EmdrosException to throws clause of a lot of methods
	relating to makeConstraints.

2012-08-17 Ulrik Sandborg-Petersen

	* Add the rudiments of a test suite for the BPT engine.  It
	doesn't do anything in the Open Source version, of course.

	Added files:

	  - tests/bpttry.cpp
	  - tests/bptqa2h.py
	  - tests/bptqa.h.in

	Amended files:

	  - tests/Makefile.am
	  - tests/win32.mak
	  - win32/win32.mak

	* MQL/mql_query.cpp: ObjectBlockBase::symbolObjectTypeExists(): If
	we could not get largest object length, do a database error.
	Before, it would just fall through to there being no database
	error.

	* EMdF/emdfdb.cpp: In EMdFDB::getFeaturesForObjectType(): Add an
	ORDER BY in order to make sure it always gets them in a fixed
	order.

2012-08-04 Ulrik Sandborg-Petersen

	* Remove the /Developer/Tools/SetFile calls on Mac OS X, since
	they've long been obsolete:

	  - examples/ChunkingTool/Makefile.am

	* Add EmdrosOSX/EmdrosOSX.xcodeproj/project.pbxproj, also to
	Makefile.am's EXTRA_DIST.

2012-08-03 Ulrik Sandborg-Petersen

	* configure.ac: Set -mmacosx-version-min to 10.6 on Mac OS X
	Mountain Lion, since it doesn't support compiling Emdros for
	10.5. It has issues with the STL if one tries to build with 10.5.

	* src/qrytool/doc/Makefile.am: Use the 'convert' tool
	from ImageMagick instead of the xpmtoppm tool from netpbm to
	convert from XPM to PNG.

	This was because xpmtoppm on Fedora 17 i686 couldn't handle the
	wx/copy.xpm image.

	Also in examples/ChunkingTool/doc/Makefile.am

	Also document dependency on ImageMagick in INSTALL.

	* win32/config.mak.in, win32/body.mak: More Win64 improvements.

2012-07-26 Ulrik Sandborg-Petersen

	* Update the win32 build machinery to run even when BPT is not
	being compiled.

	* Update the win32 build machinery to be able to compile for
	Win64.

	* win32/emdros.nsi.in: Update NSIS script to be able to do Win64
	install, if the DO_X64 !define is done at the top.  Also, add x86
	to normal installer name.

	* Remove the /Developer/Tools/SetFile calls on Mac OS X, since
	they've long been obsolete:

	  - src/qrytool/Makefile.am
	  - src/importtool/Makefile.am
	  - tests/Makefile.am

============ 3.3.1.pre12 ============

2012-07-25 Ulrik Sandborg-Petersen

	* util/bptdumper.cpp: Make the signature of BPTdumpAsBPT work with
	the latest signature from include/bptdumper.h.

	* SWIG/java/Makefile.am: By default, use -source 1.6 and -target
	1.6 instead of 1.4 for both. This is 2012!

	* SWIG/python/Makefile.am: Fix typo in ZLIB_LIBADD_SWIG that
	affected compilation.

2012-07-23 Ulrik Sandborg-Petersen

	* Add zlib/. This is strictly for the proprietary BPT engine for
	now, so won't affect Emdros usage if not using BPT.

	* Make zlib stuff work on Windows.

2012-07-22 Ulrik Sandborg-Petersen

	* configure.ac: If --with-bpt is specified, do add -lz to the
	requisite LDFLAGS.  This is because the latest BPT uses zlib.

	* src/bptdump.cpp, doc/bptdump.1: Add --payload-db and
	--payload-key as options.

2012-07-08 Ulrik Sandborg-Petersen

	* configure.ac: Refine which -arch flags, -isysroot flags, and
	-mmacosx-version-min flags to use depending on which version of
	Mac OS X is being used, when doing Universal binaries.

2012-07-07 Ulrik Sandborg-Petersen

	* configure.ac: When doing wxWidgets 2.9 and a Universal Binary,
	do i386 and ppc, and require Mac OS X version >= 10.5.

2012-06-27 Ulrik Sandborg-Petersen

	* MQL/mql_select_statements.cpp: Did
	Inst::const_iterator.hasNext() instead of != pInst->end(). This is
	in the GET OBJECTS HAVING MONADS IN statement.

	* util/mql_exporter.cpp: In DumpObjectDataForObjectType, use
	Inst::const_iterator.hasNext() instead of != pInst->end().

2012-06-18 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Removed unused variable OTN_surrogate
	in startElement and endElement.

============ 3.3.1.pre11 ============

2012-06-12 Ulrik Sandborg-Petersen

	* util/bptdumper.cpp and src/bptdump.cpp: Support for new BPT
	(1.6), with schema versions 1, 2, and 3.

2012-06-11 Ulrik Sandborg-Petersen

	* harvest/renderxml.cpp: Changed declaration of utf_mask and
	extra_utf8_bits to be array of "const unsigned int" rather than
	"const int", thereby making it valid C++11.

	* EMdF/bptemdfdb.cpp: Fixed bug in BPTEMdFDB::getConnection(): It
	returned false instead of the correct nil (0).  Now it returns 0.

	* src/bptdump.cpp: Correct the help output to not say 'mql' but
	'bptdumper'.

2012-06-03 Ulrik Sandborg-Petersen

	* harvest/templatelang_classes.cpp: Fixed bug in
	TemplateLangExecEnv::emitVar: It did not honor m_bIsSettingVar,
	but emitted to the document instead. Now it honors
	m_bIsSettingVar.

	* harvest/renderobjects.cpp: Optimize "prefix" and "suffix" for
	the case where the prefix or suffix is empty.

	* Added the following constructs to the Template language:

	  - {{ setvar 'variable-name' 'string-literal-to-set-variable-as' }}
	  - {{ if listempty 'list-name' }}...{{ endif }} 
	  - {{ if listempty 'list-name' }}...{{ else }}...{{ endif }} 
	  - {{ dictlookup 'dictname' counter 'counter-name' 'default-value' }}

	* harvest/templatelang.yxx: Fixed bug: The words 'counter',
	'feature', 'featurenomangle', 'var', and 'varnomangle' could not
	be a part of a literal string.

	* Got a speed increase on the template language by simplifying
	adjecent TemplateString AST nodes into one TemplateString AST
	node.  Before, a lot of single-character TemplateString AST nodes
	would show up in the AST, all adjacent.

	* Got a slight speed increase in RenderObjects by splitting
	startElements and endElements up into two cases: One for
	m_bUseDocumentIndexFeatureInsteadOfPriorityList being true, and
	one for it being false.

2012-05-29 Ulrik Sandborg-Petersen

	* configure.ac: Updates for Fedora 17:

	  - Use JDK 1.7.0
	  - Use Ruby 1.9

2012-05-28 Ulrik Sandborg-Petersen

	* debian/changelog: Added 3.3.1.pre11 and 3.3.1.pre10.

2012-05-24 Ulrik Sandborg-Petersen

	* Got a speed increase in RenderObjects by:

	  - Changing the OTN in MemObject to a long 

	  - Using longs instead of std::string's in RenderObjects's maps.

	* Got a speed increase in RenderObjects by:

	  - harvest/memobject.cpp: Using member of type long instead of a
	std::string to represent the docindexfeature.

	* Got a speed increase in RenderObjects bt:

	  - harvest/renderobjects.cpp: Changin type of m_fms and m_lms to
	be std::map<monad_m, *std::list<id_d_t> > instead of the bare list
	(not pointer to list).

============ 3.3.1.pre10 ============

2012-05-24 Ulrik Sandborg-Petersen

	* Got a great speed increase (~15% on some stylesheets, ~7% on
	others) in the renderobjects library by using one Bigstring
	instead of two (before, it was one Bigstring in RenderObjects and
	one in TemplateExecEnv -- now there is just one, in
	RenderObjects).

	* EMdF/emdf_value.cpp: Fixed fall-through mistake in
	EMdFValue::compare() for SetOfMonads.

2012-04-25 Ulrik Sandborg-Petersen

	* Got a slight speed increase for the renderobjects library by
	using a Bigstring (from include/arena.h) instead of a pure
	std::string in TemplateExecEnv.

	Files affected:

	- include/templatelang_classes.h
	- harvest/templatelang_classes.cpp

	* include/arena.h: Add Bigstring::addBigstring().

	* Got a slight speed increase for the renderobjects library by
	using a Bigstring for the RenderObjects::m_xml member instead of a
	std::list<std::string>.  This uses the new
	Bigstring::addBigstring().

	* include/arena.h: Added method with signature:

	std::string Bigstring::toString().

	* Got a slight speed increase for the RenderXML library.

	* include/string_func.h: Do a slight optimization in
	escapeXMLEntities().

	* include/arena.h: Make chunk size configurable, both for Arena
	and for Bigstring. They both default to Chunk::chunk_size.

	* harvest/renderxml.cpp: Got a slight speed increase by
	simplifying handleChars(). In particular, whitespace is no longer
	normalized.

	* include/string_func.h: Add hasXMLCharsToMangle().

	* harvest/renderxml.cpp: Use hasXMLCharsToMangle() where
	appropriate.

	* harvest/templatelang_classes.cpp: Use hasXMLCharsToMangle()
	where appropriate.

============ 3.3.1.pre09 ============

2012-04-16 Ulrik Sandborg-Petersen

	* Changed the MQL lexer and parser to use a Token type of {Token*}
	rather than a {Token} object on the stack. Changed files:

	  - MQL/mql.yxx
	  - MQL/mql_execute.cpp
	  - include/mql_yylex.h

	This is also how it is done in all of the other parsers.



2012-03-02 Ulrik Sandborg-Petersen

	* debian/changelog: Put the entry for 3.3.1.pre09 in the right
	order (i.e., at the top).

2012-02-22 Ulrik Sandborg-Petersen

	* emdros.spec.in: Distribute %{prefix}/lib/*.a (libemdrosguiu.a).

2012-02-18 Ulrik Sandborg-Petersen

	* .../*.pro: With the most recent version of Qt (4.8.0),
	everything below Mac OS X 10.6 is now a Tier 3 platform. In
	addition, Mac OS X 10.6, arch==x86 is a Tier 2 platform.

	Tthat means, only Mac OS X >=10.6 && arch==x86_64 is a Tier 1
	platform.

	Therefore, all *.pro files have been changed to reflect this, so
	that only Mac OS X >=10.6 and x86_64 are officially supported on
	Qt.

	If you need something below this, you can always redo the *.pro
	files.  It's just not officially supported.

============ 3.3.1.pre08 ============

2012-02-16 Ulrik Sandborg-Petersen

	* Add debian/ directory, in order to be able to build a .deb on
	Debian.

	This is a crude implementation, but it works.

	To build:

	$ tar xfzv emdros-x.y.z.tar.gz
	$ cd emdros-x.y.z
	$ dpkg-buildpackage -rfakeroot
	$ cd .. # The .deb package is in this directory
	$ sudo dpkg -i emdros_*.deb # This should install it.

============ 3.3.1.pre07 ============

2012-02-12 Ulrik Sandborg-Petersen

	* wx/Makefile.am: The addition of _la_LIBADD and for both
	non-Unicode and Unicode builds in 3.3.1.pre06 caused a lot of
	problems on Mac.  In fact, wx/libemdrosgui(u).dlib didn't link at
	all, since the _LIBADD flag added the static wxWidgets libraries
	to the static ($(AR)) build of libemdrosgui(u).a.

	To fix this, I decided to make libemdrosgui(u).la into a static
	library always: Changed it from _LTLIBRARIES to _LIBRARIES, and
	did _a_ instead of _la_ in wx/Makefile.am.

	This necessitated a change in all makefiles pointing to
	libemdrosgui(u).la, to point to .a instead.

	The following files were changed:

	- wx/Makefile.am
	- src/importtool/Makefile.am
	- src/qrytool/Makefile.am
	- tests/Makefile.am
	- examples/ChunkingTool/Makefile.am


============ 3.3.1.pre06 ============

2012-02-03 Ulrik Sandborg-Petersen

	* wx/Makefile.am: Add _la_LIBADD and for both non-Unicode and
	Unicode builds, thereby enabling building on Ubuntu Oneiric.

============ 3.3.1.pre05 ============

2012-01-02 Ulrik Sandborg-Petersen

	* util/schema.cpp: Fixed a harmless warning.

	* EMdF machinery: Monad set features are now compact strings.

	* EMdF machinery: getInst and getObjectsHavingMonadsIn can now
	take the monad set from a monad set feature instead of the
	constituting set of monads.

	* MQL: The following syntax was added to the
	MonadSetRelationClause of the object block:

	  part_of(<monad-set-name>, substrate)
	  part_of(<monad-set-name>, universe)
	  overlap(<monad-set-name>, substrate)
	  overlap(<monad-set-name>, universe)

          The intention is to use the monad set name as the feature from
	which to take the monad set for the Inst.  If it is "monads", then
	the regular constituting monad set is used.

	* tests/mqlqa.h.in: Upped the number of tests to 357, now testing
	the new MQL (and EMdF) machinery just mentioned.

	* EMdF/emdfdb.cpp: dropDatabase() now doesn't call sleep(2). This
	was an old relic from 2001, when PostgreSQL (or was it MySQL)
	needed some time to actually drop the database before it could be
	recreated, as the mqltry program did.

	* EMdF/inst.cpp: Now, when inserting in the the SkipList linked
	list, when there is a tie on the InstObject's first_monad, test
	its object id_d and sort on that.  This means that the Inst order
	is now always well-defined, provided an object is only ever
	inserted once.

2011-12-13 Ulrik Sandborg-Petersen

	* EMdF/monads.cpp: Add SetOfMonads::fromString(). Also test in
	EMdF/emdftry.cpp.

	* Added more support for sets of monads as features.

	* Added more tests of MQL in tests/mqlqa.h.in, particulary testing
	the new set of monads features, but also testing UPDATE OBJECTS.

============ 3.3.1.pre04 ============

2011-10-26 Ulrik Sandborg-Petersen

	* Harvest template language: Changed "{{ setnixing on }}" to "{{
	setnixing doc }}". Added "{{ setnixing all }}". Documented both.

2011-10-24 Ulrik Sandborg-Petersen

	* EMdF/monads.cpp: SetOfMonads::fromCompactString() fixed a
	harmless warning about first_m being possibly uninitialized in
	this method.  It couldn't, by nature of the compact string, but
	just so as to not have warnings, it was fixed.

	* Added the following to the template language:

	  - {{ setnixing on }}
	  - {{ setnixing off }}

	Also documented these templates in the Programmer's Reference
	Guide.

2011-10-21 Ulrik Sandborg-Petersen

	* wx/vtreecanvas.cpp: When changing the Interlinear lines (on or
	off), scroll to approximately the same node as was at the top of
	the window before the change.

	* wx/vtreecanvas.cpp: Add extra "int deltaY" parameter to
	CVTreeCanvas::ScrollToGivenPosition(), thereby enabling even
	better retention of the correct placement in the tree.

2011-10-17 Ulrik Sandborg-Petersen

	* harvest/templatelang.re: Added ability to escape \\ and \' in
	the templates.  This is useful if you need to add a ' to the
	output and don't want it to be treated like the beginning of a
	never-ending string.

	* src/renderobjectstool.cpp: Now the top-level stylesheet passed
	to RenderObjects is the top-level stylesheet, not the inner one.
	This has ramifications for dictionaries, which are now to be found
	at the outermost level. This needs to be fixed so that the
	dictionaries can also be found where they used to be found (in
	templatelangclasses.cpp's dictlookup class).

	* harvest/renderobjects.cpp: Got a speed increase in some
	situations by using a FastSetOfMonads instead of a SetOfMonads in
	RenderObjects::objects2Document().

============ 3.3.1.pre03 ============

2011-10-16 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: Fixed bug in BookcaseHarvester::process
	that caused the harvesting to fail if the same surface token was
	used more than once in the query string (e.g., "to be or not to
	be": both of the tokens 'to' and 'be' occur more than once, so
	this would fail).

2011-10-03 Ulrik Sandborg-Petersen

	* Inside include/, use #include "..." if it is a file in the local
	include directory, so as to allow it to compile on Mac OS X / iOS.

============ 3.3.1.pre02 ============

2011-08-24 Ulrik Sandborg-Petersen

	* src/qrytool/wxilqtout.cpp: Removed some old code in MyIdle which
	didn't compile on wxWidgets 2.9: wxApp::SendIdleEvents was called,
	and this is an internal function which should not be called by
	user code.

	* win32/body.mak: Add support for hassle-free building against
   	  wxWidgets 2.8 or 2.9.

	* Removed support for Non-unicode wxWidgets builds on Win32:
	  - examples/ChunkingTool/win32.mak
	  - src/importtool/win32.mak
	  - src/qrytool/win32.mak
	  - ChangeLog
	  - wx/win32.mak
	  - win32/body.mak
	  - win32/emdros.nsi.in
	  - win32/win32.mak
	  - win32/README.txt

============ 3.3.1.pre01 ============

2011-08-03 Ulrik Sandborg-Petersen

	* doc/progref/Content.txt: Fixed the documentation about
	dictlookup to say the correct thing w.r.t. being able to be used
	under fetchinfo, not renderinfo. Also, added docs to dictlookup
	... var ... to say it can be used both under fetchinfo and under
	renderinfo.

2011-07-29 Ulrik Sandborg-Petersen

	* win32/win32.mak: Now distributes renderobjects.exe on Win32.

2011-07-18 Ulrik Sandborg-Petersen

	* harvest/templatelang_classes.cpp: Fixes for Solaris CC
	compiler. (It couldn't convert std::pair<std::string, char[1]> to
	std::pair<std::string, std::string>).

	* harvest/renderobjects.cpp: Fixes for Solaris CC compiler.  Same
	issue as immediately above.

============ 3.3.0 ============

2011-06-30 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Upgraded to Python 2.8, JDK 1.6.0u26, and
	MySQL 5.5 by default.

	* win32/body.mak: Given the move to MySQL 5.5, the path to
	libmysql.lib needed to be changed (no opt\ directory any more).

	* win32/win32.mak: Changed the paths to libmysql.lib and
	libmysql.dll to match MySQL 5.5.

	* win32/win32.mak: Now distributes + makes shortcut to
	doc\fts_harvester.html.

2011-06-29 Ulrik Sandborg-Petersen

	* win32/body.mak: Added the following targets:
	   - PROGRAM16
	   - PROGRAM17
	   - PROGRAM18
	   - PROGRAM19

	* src/win32.mak: Added the following target:

	   - PROGRAM16 = fts_harvester.exe.

	* win32/win32.mak: Now dists fts_indexer.exe and fts_harvester.exe

	* Added the harvest library to all SWIG bindings (not just Python
	any more).

2011-06-21 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Upgraded to:

	  - JDK 1.6.0_26
	  - MySQL 5.5
	  - Python 2.7.x

2011-06-19 Ulrik Sandborg-Petersen

	* A potential segfault was fixed for very long sets of monads
	(i.e., with many MSEs) that had to go through the MQL parser.

	The trouble was that the destructor of MQLMonadSetElement just
	callede "delete m_next;", which caused a stack overflow for very
	long chains of MQLMonadSetElements.

	The problem was solved by marking the first MQLMonadSetElement in
	the chain with a flag, and then checking in the destructor whether
	this flag was set.  If it is, then iterate over the linked list
	and delete the elements one by one, bypassing the stack.

2011-06-18 Ulrik Sandborg-Petersen

	* EMdF/monads.cpp: Got a slight speed increase in some situations
	in SetOfMonads::addMSE() and methods that use it, such as
	SetOfMonads::unionWith() and SetOfMonads::add().  The specific
	situation is when the mse to be added is subsumed by or adjacent
	to the last MSE in the monad set.

============ 3.2.1.pre17 ============

2011-06-18 Ulrik Sandborg-Petersen

	* util/pennimporter.cpp: Now commits transaction before launching
	into emitting nonterminals. Also, begins transaction before
	emitting tokens.  This should make it work on PostgreSQL, which
	otherwise would balk at the DROP INDEXES ... statement, saying the
	command was aborted until the transaction was committed.

2011-06-17 Ulrik Sandborg-Petersen

	* util/pennlexer.re: Ignore tokens of the form \[[0-9\.]+\], since
	these are in the output from the Stanford parser, and we don't
	want to represent these in the MQL.

	* util/pennschema.mql: Nonterminal.mytype is now called
	Nonterminal.nttype.  Same thing in util/pennimporter.cpp

	* util/pennimporter.cpp: Don't segfault if file is empty; instead,
	emit nothing.

	* src/pennimport.cpp: Fix the usage information: It is
	--start-monad and --start-id_d, not --start_monad and
	--start_id_d."

	* src/pennimport.cpp: Added option --distinct-nt-otns, which
	causes nonterminals to be emitted as distinct object types.

	* doc/pennimport.1: Documented optoin --distinct-nt-otns.

	* util/pennimporter.cpp: What used to be called 'Root' is now
	'DocumentRoot', since otherwise it would clash with the ROOT
	object type that exists when doing --distinct-nt-otns on output
	from the Stanfard parser.  Also affected:

	  - util/pennschema.mql
          - doc/pennimport.1

	* util/pennimporter.cpp and util/pennschema.mql: Now drops all
	  indexes on all object types while importing.

	* Added the clause "IF NOT EXISTS" to the CREATE OBJECT TYPE
	statement.  In short, if you do this:

	CREATE OBJECT TYPE
	IF NOT EXISTS
	[OT]
	GO

	then no error is thrown if the object type OT exists
	already. Instead, the object type is just left as is.  If it does
	not exist already, it is created as usual.

	* util/pennimporter.cpp: Used the new IF NOT EXISTS clause when
	doing object types that stem from nonterminals.

	* util/pennimporter.cpp: Make object types that stem from
	nonterminals be WITH SINGLE RANGE OBJECTS.

============ 3.2.1.pre16 ============

2011-06-12 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Reverted the decision made in
	3.2.1.pre15 on 2011-05-20 to only use the xmlindex when the
	first/last monad were the same, but to let the first/last monad
	rule the roost otherwise.  The reason this was a bad decision was
	that it didn't even work for intersecting hierarchies, which was
	the reason for the change in the first place.  Now, xmlindex is
	the only thing consulted.

2011-06-09 Ulrik Sandborg-Petersen

	* Fixed bugs introduced because of the recent (in 3.2.1.pre16)
	move to a struct-based mql_yylex.h:Token instead of a class-based
	Token class.  Files affected:

	  - include/mql_yylex.h (introduced newToken() and deleteToken()).
	  - harvest/templatelang_classes.cpp (used newToken())
	  - EMdF/json_classes.cpp (used newToken())
	  - MQL/mql_execute.cpp (used newToken(), removed function of same
	    name here)

2011-06-07 Ulrik Sandborg-Petersen

	* Fixed bugs in deletion of Tokens (missing call to
	  Token::clear()) in the following files:

	  - EMdF/json_classes.cpp
	  - harvest/templatelang.yxx
	  - harvest/templatelang_classes.cpp

	* EMdF/string_func.cpp: Reimplemented the following to not use
	either toupper() (str_toupper) or the local table:

	  - str_tolower()
	  - str_toupper()
	  - strcmp_nocase()

	* tests/emdftry.cpp: Now tests both str_tolower() and
	str_toupper().

	* include/Makefile.am: Fixed bug whereby emdros_reserved_words.h
	didn't get made correctly.  This had no impact on any code
	internal to Emdros, however.  Also, the emdros_reserved_words.h
	string array is now declared as an array of "static const char*"
	rather than "static char *", as required by modern C++ compilers.

	* include/Makefile.am: The targets that depended on the Makefile
	itself were made to not depend on it.  They have been debugged, so
	that dependency serves no purpose any longer.

	* include/arena.h: Added the following methods:

	  - Arena::countBytes()
	  - Arena::allocate1()
	  - Bigstring::addChars(const char *pSrc, size_t nchars) 

	* include/arena.h: Reimplemented Bigstring::toString() and
	Bigstring::addChar() for speed.

	* Reimplemented the following (partially) for speed:

	  - MQL/mql_gq.re
	  - MQL/mql.re

	* EMdF/monads.cpp: Reimplemented SetOfMonads::fromCompactString
	for speed and simplicity.

	* include/string_func.h: Reimplemented hex2char(char, char) for
	speed.


	* EMdF/string_func.cpp: Changed hex2long slightly for speed.

	* MQL/mql.re: Reimplemented the hex part of stringdq for speed.

2011-06-01 Ulrik Sandborg-Petersen

	* Went to a parsing-scheme whereby the tokens aren't new'ed and
	deleted all the time, but where there is just one top-level token:

	  - include/mql_yylex.h
	  - EMdF/json.yxx
	  - EMdF/json.re
	  - EMdF/json_classes.cpp
	  - MQL/mql.yxx
	  - MQL/mql.re
	  - harvest/templatelang.re
	  - harvest/templatelang_classes.cpp

	This gave a nice speed-increase.

	* Found out std std::string::push_back(c) is slightly faster than
	std::string::append(1, c).  Therefore, used it in:

	  - EMdF/json.re
	  - MQL/mql.re
	  - harvest/templatelang.re

	* MQL/mql_query.cpp: Found a memory leak in ObjectBlock, whereby
	ObjectBlock::m_pMSRC wasn't deleted in the destructor. This bug
	was introduced in Emdros 3.2.1.pre12.

	* EMdF/pgconn.cpp: Used new, non-obsolete functions for doing
	COPY, in execCOPY().  Also, used a new scheme to divide the copy
	data into chunks: Instead of doing it line-wise, we now do it in
	chunks of up to 16384 bytes.

	* include/arena.h: Added Bigstring::clear().

	* Reimplemented the FeatureAssignment machinery such that it is
	  somewhat faster to create large databases.  Files affected:

	  - include/mql_types.h
	  - include/mql_object_statements.h
	  - MQL/mql_helper_classes.cpp
	  - MQL/mql_object_statements.cpp

	* EMdF/string_func.cpp: Reimplemented str_tolower() and
	strcmp_nocase such that only ASCII characters A-Z are converted to
	lower-case.  That is, tolower() is no longer used.  Instead, a
	local table is used.

	* Makefile.am: Now EXTRA_DISTs install-sh, to be rpmbuildable on
	Fedora 15.

2011-05-23 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Upgraded to wxWidgets 2.8.12 on Win32.

	* src/common.pro: Added CONFIG += console

	* src/common.pro: Fixed \ to \\ in Win32 paths.

	* Made sure that QMAKE_CXXFLAGS += -EHsc (for exception handling)
	  only happens when using MSVC.  This was in the following files:

	  - EMdF/EMdF.pro
	  - MQL/MQL.pro
	  - harvest/harvest.pro


============ 3.2.1.pre15 ============

2011-05-20 Ulrik Sandborg-Petersen

	* XML/renderobjects.cpp: Now the docindexfeature (e.g., xmlindex)
	is only used when there is a tie on first or last monads.
	Otherwise, the first/last monads now rule the roost.

	The reason this was done was so as to allow databases with several
	intersecting hierarchies.  Then the docindexfeature can be used
	only for those cases in which there is doubt according to the
	monads, i.e., when the start- or end-monads are the same.

2011-05-15 Ulrik Sandborg-Petersen

	* Decided to remove support for PowerPC (ppc) architecture on Mac
	OS X 10.4.  The reason is that this doesn't work with the Qt
	Framework libraries as downloaded by Qt SDK 1.1 (Qt Framework
	4.7.3).

2011-05-14 Ulrik Sandborg-Petersen

	* Decided that, since Mac OS X 10.4 is a Tier 2 platform for Qt, I
	will not support Emdros on Mac OS X 10.4, but only 10.5 and later.
	Accordingly, I changed all of the relevant *.pro files such that:

	  - Build taget is 10.5
	  - The architectures support are: ppc, i386, and x86_64.

2011-05-13 Ulrik Sandborg-Petersen

	* Changed all Qt qmake *.pro files such that:
	  - Everything builds against Tiger (Mac OS X 10.4)
	  - A Universal build is done, with ppc and i386 being in the mix.
	  - It is possible to build on PowerPC Tiger and Leopard.

2011-05-07 Ulrik Sandborg-Petersen

	* examples/HAL/Makefile.am: No longer depends on or links in
	TECKit.

	* examples/HAL/HALSpace.{h,cpp}: Reimplemented the implementation
	of a Matrix so that it can be a sparse matrix rather than taking
	up O(n^2) space.

============ 3.2.1.pre14 ============

2011-04-29 Ulrik Sandborg-Petersen

	* Changed the following files to link in the harvest library:

	- SWIG/csharp/win32.mak
	- SWIG/java/win32.mak
	- SWIG/python/win32.mak

2011-04-28 Ulrik Sandborg-Petersen

	* MQL/mql.yxx: Upped the stack size to 2000.  Before, it was 100.
	This was causing problems for some very complicated queries.

	* MQL/mql.yxx: Added a %stack_overflow handler.

2011-04-12 Ulrik Sandborg-Petersen

	* Added doc/fts_harvester.1.

	* win32/win32.mak: Added fts_harvester.html and fts_filters.html
	to Win32 distribution.

============ 3.2.1.pre13 ============

2011-02-25 Ulrik Sandborg-Petersen

	* Tried to reduce the number of std::string::reserve() calls in
	the following functions/methods:

	- EMdF/string_func.cpp:str_tolower()
	- MQL/mql.re:MQLScanner::addToken()

	This gave a speedup on large MQL files, especially ones creating
	new Emdros databases.

	* Enhanced the Qt qmake system:

	  - Now builds the libutil_emdros library.

	  - Now builds the following programs:

	    - mql
	    - mqldump
	    - bptdump
	    - fts_indexer
	    - fts_harvester

	  - sqlite3conn.cpp and sqliteconn.cpp are now compiled in (!)

============ 3.2.1.pre12 ============

2011-02-18 Ulrik Sandborg-Petersen

	* MQL/mql_query.cpp: Removed some UP300 debugging output.

	* Changes to the qmake *.pro infrastructure:

	   - win32:QMAKE_CXXFLAGS += -EHsc

	     Added to: EMdF/EMdF.pro, MQL/MQL.pro and harvest/harvest.pro

	   - Emdros.pro: CONFIG now has a copyheader target, which does
	nothing on unix and macx, but copies win32\\config.h.win32 into
	.\\include\\emdros-config.h.

	   - EMdF.pro: DEFINES now is defined with += instead of =.

	   - Whenever copying something on win32, add /B to each file to
	indicate binary files.  This prevents the Windows copy command
	from adding a SUB (Ctrl-Z) code at the end of the copied file,
	which would otherwise cause problems when compiling with MinGW32.

2011-02-17 Ulrik Sandborg-Petersen

	* Updated the following files to work on Windows:

	  - pcre/pcre.pro
	  - sqlite/src/src.pro
	  - sqlite3/src/src.pro

	* SWIG/java/Makefile.inc: Added the following new files:

	  - eMonadSetName.java
	  - eMonadSetRelationOperation.java

	* SWIG/csharp/Makefile.inc: Added the following new files:

	  - eMonadSetName.cs
	  - eMonadSetRelationOperation.cs

2011-02-14 Ulrik Sandborg-Petersen

	* MQL/mql.re: Added four new keywords:
	  - overlap
	  - part_of
	  - substrate
	  - universe

	* Added new syntax to the topographic part:

	  [ObjectBlockObjectType part_of(universe)]
	  [ObjectBlockObjectType part_of(substrate)]
	  [ObjectBlockObjectType overlap(universe)]
	  [ObjectBlockObjectType overlap(substrate)]

	  The new syntax element, called "monad_set_relation_clause" must
   	  appear right before any feature_constraint clause.

	  It specifies how the object block in question should relate to
	  the parent universe or substrate.

	  If the operation is part_of, then the object in question must be
	  part_of either the substrate or the universe, as specified.

	  If the operation is overlap, then the object in question must
	  have at least one monad in the substrate or universe, as
	  specified. That is, the intersection must be nonempty.

	  The default (as it always has been) is part_of(substrate).

	  This works on both plain object blocks and NOTEXIST object
	  blocks.

	* tests/mqlqa.h.in: Added five new tests that test the new part_of
	and overlap functionality.

2011-02-14 Ulrik Sandborg-Petersen

	* harvest/memobject.cpp: Fixed bug in MemObject::getFeature():
	Before, if the index at which to get the feature was the same as
	the length of the feature-list, it would go ahead and access the
	one-beyond-the-end entry int the vector of feature-values, thus
	causing a segfault.  Now, it checks that the feature index is
	really <, not <= the size of the feature-vector, before it access
	the feature vector.

============ 3.2.1.pre11 ============

2011-01-28 Ulrik Sandborg-Petersen
	* harvest/memobject.cpp: Fixed bug in MemObject::getFeature():
	Before, if the index at which to get the feature was the same as
	the length of the feature-list, it would go ahead and access the
	one-beyond-the-end entry int the vector of feature-values, thus
	causing a segfault.  Now, it checks that the feature index is
	really <, not <= the size of the feature-vector, before it access
	the feature vector.

	* Reenabled the support for qmake for the following libraries:

	  - pcre sqlite sqlite3 EMdF MQL harvest

============ 3.2.1.pre10 ============

2011-01-28 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Added Doxygen docs for some of the
	methods of RenderObjects.

	* harvest/renderobjects.cpp: Added another constructor to
	RenderObjects, which takes a std::string for the JSON stylesheet.

	* harvest/renderobjects.cpp: Made it possible to pass a JSON
	stylesheet which is the *outer* stylesheet, containing the
	"fetchinfo" key.  That is, it is no longer required to pass the
	*inner* stylesheet, inside the "fetchinfo" key.

	* harvest/renderobjects.cpp: Added an optional key to the
	stylesheet: "prepend_XML_declaration", which, when pointing to a
	JSON Boolean which is false, turns off the "feature" of adding an
	XML declaration to the output in RenderObjects::getDocument().

	* harvest/renderobjects.cpp: Added two functions (not methods),
	both called "render_objects", which do the whole RenderObjects
	thing in one go.

	* tests/jsontry.cpp: Now return 2 (not 0) upon JSON parsing
	failure.

	* EMdF/json.re: The JSON Scanner now is able to return the part of
	the input scanned so far, as a std::string.  Also, it stores a
	local copy of the input std::string for the same reason.

	* EMdF/json_classes.cpp: The JSONExecEnv now has a method,
	JSONExecEnv::getInputScannedSoFar(), which may be called, e.g.,
	after a syntax error, to see the part of the input having been
	scanned by the JSON Scanner.

	* tests/jsontry.cpp: The jsontry(1) program now has a -d switch,
	which, when present, causes the program to print the input scanned
	up until the JSON parser's syntax error, if a syntax error
	occurred.  Upon success, this switch has no effect.

	* doc/jsontry.1: Documented the -d switch.

============ 3.2.1.pre09 ============

2011-01-08 Ulrik Sandborg-Petersen

	* EMdF/json_classes.cpp include/json_classes.h:

	  Changed the interface of class JSONValue quite a bit:

	  - Added JSONValue(eJSONValueKind kind), which creates any kind
	of JSONValue which is either null, false, 0, empty string, empty
	list, or empty object.

	  - Made m_pObject and m_pList contain "JSONValue *" rather than
	"const JSONValue".

	  - Changed JSONValue::getList() such that it returns a const
	reference to a std::list<JSONValue*> rather than a const reference
	to a std::list<const JSONValue*>.  This obviously has
	ramifications for any code using this interface!

	  - Added void append(JSONValue* pValue);

	  - Added void addKeyValue(const std::string& key, JSONValue *pValue);

	  - Added JSONValue* getObjectValue(const std::string& key);

	  - Added JSONValue* operator[](const std::string& key) { return getObjectValue(key); };


	* harvest/renderobjects.cpp, harvest/renderxml.cpp: Changes due to
	the new interface to getList().

	* EMdF/bptemdfdb.cpp: Changed return value of
	BPTEMdFDB::FeatureInfo2SQLvalue() to be the empty string rather
	than false, thereby avoiding a compiler warning.

2011-01-04 Ulrik Sandborg-Petersen

	* doc/Makefile.am: Now uses groff instead of man2html to produce
	the HTML pages from the man pages.

2010-12-23 Ulrik Sandborg-Petersen

	* configure.ac: Fixed problem with "if text WX_RELEASE" --> "if
	test WX_RELEASE".

2010-12-23 Ulrik Sandborg-Petersen

	* configure.ac: Fixed problem with WXLIBS_ALL and spaces
	surrounding the = after it.

2010-12-22 Ulrik Sandborg-Petersen

	* Harvest Template Language: Added the following constructs:

	  - {{ setcounter string integer }}
	  - {{ inccounter string step-integer }}
	  - {{ deccounter string }}
	  - {{ deccounter string step-integer }}

============ 3.2.1.pre08 ============

2010-12-11 Ulrik Sandborg-Petersen

	* configure.ac: Added "all" to "--libs" when doing wxWidgets 2.9.
	This should make it work better with wxWidgets 2.9...

2010-12-10 Ulrik Sandborg-Petersen

	* Further speed increases for renderobjects. This time by taking
	care of the special case in RenderObjects::startElements and
	RenderObjects::endElements() where there is precisely 1 object to
	deal with.

	* EMdF/qdxml.cpp: Fixed bugs in QDParser::getNextChar(): Before,
	when reading the sequence \r\n (as when reading a Windows XML file
	on Unix), the method would try to call m_pInputStr->get(c),
	instead of reading from the buffer.  This would cause an incorrect
	character to be read. Also, the column would be 1 off, since
	m_column wouldn't get incremented.

	* Made the implementation of QDParser::getNextChar() slightly
	faster.

	* tests/qdtry.cpp: Extended the test.

	* EMdF/qdxml.cpp: Fixed a bug whereby the stack of states would
	sometimes not be empty at the end of the parse.

	* EMdF/minidom.cpp: Made handleChars() faster.

	* harvest/renderxml.cpp: Simplified
	XML2HTMLDocHandler::getOutput().

	* harvest/harvest_fts.cpp: Used joinListEmptyBetween where
	appropriate.

	* include/string_func.h: Gave the escapeXMLEntities() function a
	speed increase.

============ 3.2.1.pre07 ============

2010-12-07 Ulrik Sandborg-Petersen

	* Changed the harvest library's template language such that {{
	listappendbegin ... }} need not be in the same string as {{
	listappendend }}.

	* Updated the harvest library docs to reflect the change
	(somewhere in time) that {{ listemit 'list-name-string' }} is now
	{{ listemit 'list-name-string' 'list-item-separator' }}.

	* Added the following template tags to the template language:

	  - {{ setvar 'variable-name-as-string' }} ... {{ setvarend }}
	  - {{ emitvar 'variable-name-as-string' }}
	  - {{ dictlookup 'dictionary-name' feature feature-index-as-int 'default-value' }}
	  - {{ dictlookup 'dictionary-name' featurenomangle feature-index-as-int 'default-value' }}
	  - {{ dictlookup 'dictionary-name' var 'variable-name-as-string' 'default-value' }}
	  - {{ dictlookup 'dictionary-name' varnomangle 'variable-name-as-string' 'default-value' }}
	  - {{ if varequal 'variable-name' 'value' }}

	* EMdF/json.re: Made it conform more to the ECMAScript standard,
	by allowing strings to contain LineContinuation's.  That is, you
	can now write strings like:

	"This string extends\
	over several lines\
	by virtue of backslash + LineTerminator\
	sequences called\
	LineContinuation\
	in the ECMAScript standard."

	* harvest/memobject.cpp: MemObject::getFeature() now does range
	checking on the feature-index. [bugfix]

	* harvest/renderobjects.cpp: Dramatical speed-up on large ranges
	of monads due to reimplementation of
	RenderObjects::objects2Document().

	* harvest/renderobjects.cpp: Fixed a bug whereby the postprocess
	entries 'prefix' and 'suffix' would cause the TemplateExecEnv to
	be cleaned before using the prefix or suffix templates, thus
	losing any lists etc.  As a consequence, you can have at most one
	prefix and at most one suffix entry.  The program enforces this.

2010-11-18 Ulrik Sandborg-Petersen

	* Upgraded to SQLite 3.7.3.

	* EMdF/sqlite3conn.cpp: Made it compile with the local SQLite
  	  3.7.3.

============ 3.2.1.pre06 ============

2010-11-17 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: Added a parameter, bool bEmitVacuum, to
	BookcaseIndexer::process().  Only if this is true (which is the
	default), do we emit VACUUM DATABASE ANALYZE GO at the end.

	* src/fts_indexer.cpp: Added --no-vacuum option.

	* doc/fts_indexer.1: Documented --no-vacuum option.

	* harvest/harvest_fts.cpp: Added the following to the
	BookcaseHitList::getSnippet API: The ability to have %bcfm, %bclm,
	%hm, and %tm in the various input strings.

	* harvest/harvest_fts.cpp: Now distinguishes between bookcase_OTN
	and bookcase_title_OTN in BookcaseHitList.

	* src/fts_harvester.cpp: Now has --bookcase-title-otn and -btotn
	arguments to use the bookcase_title_OTN in BookcaseHitList.

2010-11-11 Ulrik Sandborg-Petersen

	* Makefile.am: On Mac OS X, the hdiutil command to make a .dmg
	image now uses file system type HFS+ rather than the default.
	This is because the default on Mac OS X 10.4 (HFSX) can cause
	problems on Mac OS X 10.5, as per this knowledge base entry:

	http://support.apple.com/kb/TS1260

============ 3.2.1.pre05 ============

2010-11-10 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: Made it compile on Win32 (two iterators
	had to be changed to const_iterator).

2010-11-08 Ulrik Sandborg-Petersen

	* doc/Makefile.am: Now lyx -e pdf2 is used to generate the PDFs,
	rather than lyx -e pdf.  The former is pdflatex (which works on
	Fedora 14), and the latter is something else (which doesn't work
	on Fedora 14).

2010-11-04 Ulrik Sandborg-Petersen

	* Re-added support for wxWidgets 2.9.1.  This was done by
	  modifying the following files:

	  - include/wxutil_emdros.h
	  - wx/layout.cpp
	  - wx/importerwizard.cpp
	  - wx/conndlg.cpp

============ 3.2.1.pre04 ============

2010-11-03 Ulrik Sandborg-Petersen

	* Updated the wx/blue-E.ico Windows icon to contain the following
	sizes: 16x16, 32x32, 48x48, 64x64, and 128x128.  Before, only the
	sizes 16 and 32 were present.

	* Restored compatibility with wxWidgets 2.6.x.  In order to do
	this, the following files were updated:

	- src/qrytool/mainframe.cpp
	- src/qrytool/mqlqtwx.cpp
	- wx/importerwizard.cpp
	- wx/vtreecanvas.cpp
	- wx/conndlg.cpp
	- include/browsewidget.h

	* Fixed the problem with PostgreSQL 8.1 and later that connecting
	to the "emdf" pseudo-database would fail if the user used to
	connect does not have superuser privileges.  Instead, we now
	connect to the postgres database.

============ 3.2.1.pre03 ============

2010-10-31 Ulrik Sandborg-Petersen

	* include/json_classes.h: in SWIG, the parameter std::string&
	  error_message is now declared OUTPUT.

	* include/harvest_fts.h: in SWIG, the parameters "std::string&
	snippet" and "std::string& snippet_title" of
	BookcaseHitList::getSnippet() arenow declared OUTPUT.

2010-10-30 Ulrik Sandborg-Petersen

	* SWIG/python/libemdfpython.i: Added the following:

	  - include/json_classes.h

	* SWIG/python/pyemdros.i: Added the following:

	  - include/renderobjects.h
	  - include/renderxml.h
	  - include/harvest_fts.h

	* SWIG/python/Makefile.am: Now links against the harvest library.

	* harvest/harvest_fts.cpp: Fixed bug in Google-esque search

	* include/json_classes.h: Now the operator[] on JSONValue is
	  hidden from SWIG.

	* harvest/harvest_fts.cpp: HarvestHitList::harvestHits() now
	  returns success even if the results are empty.

	* harvest/harvest_fts.cpp: Added the ability to only return 1 hit
	  per document/bookcase, thus being more like "real" information
	  retrieval.

2010-10-29 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: Made the search work in more cases.

	* harvest/harvest_fts.cpp: Fixed speed problems with Google-esque
	  search.

	* harvest/harvest_fts.cpp: Fixed bug in Google-esque tokenization.

2010-10-28 Ulrik Sandborg-Petersen

	* harvest/harvest_fts.cpp: When indexing (as well as harvesting), add
	  the indexed feature name to the index_OTN.

	* Added:

	  src/fts_harvester.cpp

	  and made it compile on Makefile.am technology. Win32.mak still
	  missing.

	* src/fts_indexer.cpp: Usage now documents -s and -sf.

	* src/harvest_fts.cpp: Fixed bug in HarvestHitList::addHit().

	* src/harvest_fts.cpp: Made the search work in most (all?) cases.

	* src/harvest_fts.cpp: Made the search work with proximity searches.

	* src/harvest_fts.cpp: Added methods to BookcaseHitList so as to
	  be able to extract the tokens associated with a hit.

	* doc/Makefile.am: Now knows how to make %.html from %.5.

2010-10-28 Ulrik Sandborg-Petersen

	* src/fts_indexer.cpp: Added the following options to
	  src/fts_indexer:

	  - -s stylesheet-name
	  - -sf stylesheet-filename

	* harvest/harvest_fts.cpp: Added the following classes:

	  - BookcaseHit
	  - BookcaseHitList
	  - BookcaseHitListConstIterator
	  - BookcaseHarvester

	* harvest/harvest_fts.cpp: Added the following functions:

	  - harvestFTS
	  - harvestFTSTokenize
	  - harvestFTSGoogleTokenize
	  - harvestFTSGoogle


2010-09-10 Ulrik Sandborg-Petersen

	* Removed build.sh.in from build structure, since it was obsolete.

	* EMdF/json_classes.cpp: Added the following functions:

	  - readAndParseJSONFromString
	  - readAndParseJSONFromFile

	* harvest/harvest_fts.cpp: Added the following two functions:

	  - stringFilterFactoryJSONString
	  - stringFilterFactoryJSONFileName
============ 3.2.1.pre02 ============

2010-09-04 Ulrik Sandborg-Petersen

	* harvest/win32.mak: Now compiles harvest_fts.cpp on Windows.

	* include/win32.mak: Now adds USE_BPT to EMDROS_LCONFIG_WIN32_H.

2010-08-26 Ulrik Sandborg-Petersen

	* Added the SFBlockEmpty filter to the harvest_fts.cpp file.

	* Fixed harvest_fts.cpp such that it obeys the filters
	w.r.t. blocking values from being used.

	* Added the possibility of using filters to the
	src/fts_indexer.cpp program.

	* harvest/harvest_fts.cpp: The bookcase index object type is now
	declared with the same object range type as the source
	bookcase-otn object type.  For example, if the bookcase-otn object
	type is declared "WITH MULTIPLE RANGE OBJECTS", the bookcase index
	object type will also be "WITH MULTIPLE RANGE OBJECTS", etc.

	* harvest/harvest_fts.cpp: Now wraps the creation of the objects
	in a transaction, and vacuums the database at the end.

2010-08-25 Ulrik Sandborg-Petersen

	* Added some "full text search" classes based on the "bookcase"
	idea.

	  include/harvest_fts.h
	  harvest/harvest_fts.cpp

	Right now, only the indexing mechanism is implemented.  The actual
	search will come later.

	Still missing:

	- More Filters.  Such as removal of stop words.

	- The actual search.

	* Added src/fts_indexer.cpp, and the machinery to build it as a
	command-line program. Also added doc/fts_indexer.1.  This program
	is used to create the indexes for the full text search mentioned
	above.

	Still missing:

	- The output shown with --help needs to document all options,
	including -tb, -td, -tp, -tu, and -th (and whatever else)...

	- The fts_indexer.cpp program should have switches to select the
	monad range within which to do the indexing (--fm, --lm, or
	whatever mqldump uses!).

	- Filters

============ 3.2.1.pre01 ============

2010-08-05 Ulrik Sandborg-Petersen

	* wx/conndlg.cpp: Now is able to connect to the BPT engine if
	present.

	* src/qrytool/mqlqtwx.cpp: Now is able to connect to the BPT
	engine.

	* include/emdros-lconfig.h.in: Now is able to #define USE_BPT from
	the AC_SUBST made with ./configure and --with-bpt|--without-bpt.

2010-08-03 Ulrik Sandborg-Petersen

	* src/bptdump.cpp now has a --key option.  The BPT backend engine
	is still not Open Source.  Please contact the developer if you
	wish to license this engine.

============ 3.1.2.pre16 equals 3.2.0 ============

2010-07-04 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Upgraded to JDK 1.6.0_20 and Python 2.6 on
	Win32.

2010-06-22 Ulrik Sandborg-Petersen

	* MQL/mql.yxx: Worked around a compiler bug in Visual Studio
	2010. It wouldn't accept a 0 as a NIL pointer.  Now compiles again
	on Visual Studio 2010.

2010-06-05 Ulrik Sandborg-Petersen

	* Upgrade to wxWidgets 2.8.11 on Win32.

============ 3.1.2.pre15 ============

2010-05-25 Ulrik Sandborg-Petersen

	* bug #3006825 was fixed:

	A feature can be declared WITH INDEX, implying that a DB index
	should be created on that feature.

	A bug existed in Emdros whereby this index was not created until
	the user first drops, then creates all indexes.  That is, the
	index was not created at CREATE OBJECT TYPE time.

	The trouble was in EMdFDB::createObjectType, which ran the index
	creation method before the features had been created.

	Now, the createIndicesOnOTObjects method isn't called until all
	features have been created, thus fixing the bug.

2010-05-10 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Removed or disabled all debugging output.

	* harvest/renderxml.cpp: Removed or disabled all debugging output.

2010-05-04 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Removed all time-printing code.

	* harvest/renderxml.cpp: Removed all time-printing code.

2010-05-01 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: The "docindexfeature" method now
	relies wholly on the document index feature, and not at all on the
	first/last monad of the MSE.

2010-05-01 Ulrik Sandborg-Petersen

	* src/qrytool/mqlqtwx.cpp: Added the following flags to eqt(u):

	-c|-b|-d|-u|-p|-h|--png

	and the ability to take an MQL file as input (last parameter).

2010-05-01 Ulrik Sandborg-Petersen

	* src/qrytool/output_style.cpp and src/qrytool/emdros_wrapper.cpp:

	Assorted changes to the XML output style, including changes to the
	self-documenting DTD.

2010-04-23 Ulrik Sandborg-Petersen

	* include/llist.h: Llist<T>::erase() now has an additional,
	optional parameter, called "bDeleteContents", which is false by
	default, to mimic the behavior before.

	* harvest/renderxml.cpp: Now always sets the pElementNode's
	attributes in "start", regardless of whether it has "{{ attrib" in
	it.  This is necessary because "attrib" is not the only template
	construct which needs access to the attributes; "if attribequal"
	needs it too.

2010-04-09 Ulrik Sandborg-Petersen

	* XML output now escapes > as &gt;.

============ 3.1.2.pre14 ============

2010-03-20 Ulrik Sandborg-Petersen

	* util/tigerxmlimporter.cpp: When the XML parser doesn't know a
	particular element, it will now give a warning ended by '\n'
	rather than std::endl; -- thus increasing performance if there are
	many such elements.

	* src/qrytool/output_style.cpp: Now implements
	XML_Output_style (an XML output style for the Query Tool.)

	* src/qrytool/emdros_wrapper.cpp: Now knows how to use
	XML_Output_style.

============ 3.1.2.pre13 ============

2010-03-20 Ulrik Sandborg-Petersen

	* util/tigerxmlimporter.cpp: Now sets m_corpus_id to "NOTSET" if
	the <corpus> element does not have an "id" attribute.

	* util/tigerxmlimporter.cpp: Now ignores all unknown tags which
	are not mentioned in the TIGERXML standard.

2010-03-16 Ulrik Sandborg-Petersen

	* EMdF/logging.cpp: Fixed bug in get_time(), which, on Win32,
	might be able to write a '\0' char to an out-of-bounds memory
	location.

2010-03-10 Ulrik Sandborg-Petersen

	* include/memobject.h: Added getNoOfFeatures() member.

	* harvest/renderobjects.cpp: Now has an additional method of
	getting the order of the objects that start on the same monad: The
	"priority_list" may be omitted, in which case all "object_types"
	members must have a "docindexfeature" member, pointing to a string
	which shows what the feature is called which has the "document
	index" as an integer.  For example:

	CREATE OBJECT TYPE
	[mytext
	   xmlindex : INTEGER;
	]
	GO

	CREATE OBJECT TYPE
	[paragraph
	   xmlindex : INTEGER;
	]
	GO

	CREATE OBJECT TYPE
	[token
	   xmlindex : INTEGER;
	   surface  : STRING;
	]
	GO

	The idea is to fill xmlindex with an integer which identifies the
	order in which the objects appear in the original document.  So,
	if using a SAX parser to parse an XML document, one can just keep
	a continually incrementing count of objects made, which will
	create "xmlindex" in document order.

	This is then used by renderobjects.cpp to render the objects
	correctly, given that there is no "priority_list".

2010-03-09 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Found out that X BETWEEN Y AND Z is painfully
	slow on Mac OS X for SQLite 3, so I changed all cases to X>=Y AND
	X<=Z in emdfdb.cpp.

============ 3.1.2.pre12 ============

2010-03-09 Ulrik Sandborg-Petersen

	* Made the JSON implementation compile again on Windows (moved the
	relevant lines from MQL/win32.mak to EMdF/win32.mak).

	* EMdF/emdfdb.cpp Made it compile on Win32 again, since MSVC 2008
	  doesn't have <stdint.h>.

	* EMdF/string_func.cpp: Made it compile on Win32 again, since MSVC
	  2008 doesn't have snprintf, but does have _snprintf.

	* util/win32.mak: Made it compile again, by removing some
	extraneous whitespace.

	* win32/config.mak.in: Upgraded to MySQL 5.1 and PostgreSQL 8.4 by
	default (PostgreSQL not tested!).

	* include/string_func.h: Reimplemented the following functions:

	- hex2char(unsigned char a, unsigned char b)
	- octal2char(const char *o)
	- char2hex(unsigned char c)
	- char2upperhex(unsigned char c)
	- char2octal(unsigned char c)

	* tests/emdftry.cpp: Made it slightly faster to run, by using \n
	instead of std::endl;

	* tests/emdftry.cpp: Added tests on:

	- hex2char(unsigned char a, unsigned char b)
	- hex2char(unsigned char *h)
	- octal2char(const char *o)
	- char2hex(unsigned char c)
	- char2upperhex(unsigned char c)
	- char2octal(unsigned char c)
	- FastSetOfMonads::isMemberOf().

	* EMdF/qdxml.cpp: Fixed a problem with recognizing the <?xml part
	of the XML declaration.

	* Now dists and installs jsontry.exe and jsontry.html on Win32.

	* EMdF/emdfdb.cpp: EMdFDB c'tor now sets pConn2 to 0 (nil).

	* EMdF/monads.cpp: Fixed a bug in FastSetOfMonads::isMemberOf(),
	whereby isMemberOf would fail on Win32 if the set had enough MSEs,
	and the monad to test for membership was < the set's first monad.

	* Removed a 'dead code' version of
	BPTEMdFDB::getObjectsHavingMonadsIn() (which is dead code in the
	closed-source BPT engine)

	- EMdF/bptemdfdb.cpp
	- include/bptemdfdb.h


============ 3.1.2.pre11 ============

2010-03-05 Ulrik Sandborg-Petersen

	* include/Makefile.am and and include/Makefile.inc and
	win32/win32.mak: Made sure that include/pcre_emdros.h and
	pcre_config.h were installed only as appropriate on Unix/Linux,
	and that they are always installed on Win32.

2010-03-03 Ulrik Sandborg-Petersen

	* include/Makefile.inc: Made sure that include/pcre_config.h is
	installed if the AM_CONDITIONAL "USE_LOCAL_PCRE" is true.

============ 3.1.2.pre10 ============

2010-03-03 Ulrik Sandborg-Petersen

	* Added the scaffolding for a bptdump(1) utility, including:

	  - doc/bptdump.1
	  - include/bptdumper.h
	  - util/bptdumper.cpp
	  - src/bptdump.cpp

	  and related changes to Makefiles and Win32 compilation and
	  distribution stuff.

============ 3.1.2.pre09 ============

2010-02-25 Ulrik Sandborg-Petersen

	* EMdF/stringfunc.cpp: Reimplemented long2string(), and used it in
	  lieu of sprintf("%ld") whereever possible.

	* tests/emdftry.cpp: Added some more long2string() tests.

	* BUGFIX: EMdF/emdfdb.cpp: Got rid of all calls to sprintf(),
	instead using std::ostringstream and long2string().  This fixes a
	bug whereby the locale would influence whether Emdros worked or
	not: If sprintf("%ld", ...) was used in a locale where this would
	yield thousands grouping separators, Emdros might fail.

2010-02-19 Ulrik Sandborg-Petersen

	* The changes done for the BPT engine was merged back into the
	Open Source version of Emdros (see 2010-02-09 until 2010-02-18 in
	this ChangeLog).  However, the BPT engine itself is not Open
	Source for the foreseeable future, so the methods in the file
	EMdF/bptemdfdb.cpp was replaced with stubs that just report
	failure.

2010-02-18 Ulrik Sandborg-Petersen

	* Optimizations for the BPT engine.

	* The BPT engine now is able to reproduce the database faithfully
	with mqldump, even with respect to the enum values.

2010-02-17 Ulrik Sandborg-Petersen

	* Optimizations for the BPT engine.

2010-02-16 Ulrik Sandborg-Petersen

	* Changes to the pcre config.h and config.h.win32 files, so that
	there are no complaints about multiply #define'd constants.

	* Various BPT speedups.

	* Bumped BPT page cache to 2x256 pages.

2010-02-15 Ulrik Sandborg-Petersen

	* The BPT implementation now is fully functional, and is very
	fast.

2010-02-13 Ulrik Sandborg-Petersen

	* More work on the BPT implementation.  All test-queries on the
	WIHEBREW database now give the exact same results as on the other
	backends, except for the ones that use SELECT OBJECTS (not SELECT
	ALL OBJECTS!).  The reason is that the other backends do an ORDER
	BY object_id_d, whereas the BPT implementation does an ORDER BY
	first_monad.

	* EMdF/json.re: Now is able to do negative integers as well!
	Necessary for the BPT.

2010-02-12 Ulrik Sandborg-Petersen

	* More work on the BPT implementation.  It isn't quite right yet.

2010-02-11 Ulrik Sandborg-Petersen

	* Added SetOfMonads::toCompactStringFM() and
	  SetOfMonads::fromCompactStringFM().

2010-02-11 Ulrik Sandborg-Petersen

	* Made the BPT implementation work, and made it right.
	  Next up: Make it fast.

2010-02-10 Ulrik Sandborg-Petersen

	* Moved JSON classes from MQL library to EMdF library.

	* include/emdfdb.h: The following are now virtual:
	virtual bool createMin_max_m_table(void);
	virtual bool setMin_max_m_fromObjectTypes(bool bBeVerbose);
	virtual bool setMin_max_m_fromObjectType(const std::string& object_type_name, bool bBeVerbose);
	virtual bool setMax_m(monad_m max_m_candidate, bool bSetUnconditionally = false);
	virtual bool setMin_m(monad_m min_m_candidate, bool bSetUnconditionally = false);
	virtual bool getMin_m(monad_m& /* out */ min_m);
	virtual bool getMax_m(monad_m& /* out */ max_m);
	virtual bool getAll_m_1(SetOfMonads& /* out */ all_m_1);

	* added the beginnings of a Bit Packed Table backend.  BPTEMdFDB
	and BPTEMdFConnection.

	  - EMdF/bptemdfdb.cpp
	  - EMdF/bptconn.cpp
	  - include/bptemdfdb.h
	  - include/bptconn.h

============ 3.1.2.pre08 ============

2010-02-08 Ulrik Sandborg-Petersen

	* More work on getting PCRE 8.01 to work on Win32 (wasn't quite
	there yet on 2010-02-06).

	* win32/win32.mak: Now does ..\pcre\win32.mak right after
	..\include\win32.mak, instead of after ..\EMdF\win32.mak.

2010-02-06 Ulrik Sandborg-Petersen

	* EMdF/sqlite3conn.cpp: Now uses the pVfs->xAccess function
	directly, rather than sqlite3OsAccess(), which was made into a
	static (private) function at some point in the 3.6.X series of
	SQLite3.

	* include/wxutil_emdros.h: Now doesn't #include <conf.h>, but
	<wx/string.h>.  This was because it gave compilation problems on
	__WXMAC__.

	* Made PCRE 8.01 work on Win32.  In particular,
	pcre/config.h.win32 was added, and copied to
	../include/pcre_config.h.  On Unix, config.h is copied to
	../include/pcre_config.h.  Also, all mentions of config.h in the
	source files was changed to pcre_config.h, and -DHAVE_CONFIG_H was
	done away with.

	* tests/mqllingtry.cpp: Made it compile even when NEWLINE is
	#defined.

2010-02-04 Ulrik Sandborg-Petersen

	* configure.ac is now smarter at finding tcl.h.

2010-01-26 Ulrik Sandborg-Petersen

	* Updated PCRE to version 8.01 from version 6.7 (04-Jul-06).  The
	  license is still BSD.

	* Removed the part of configure.ac that removes "-g -O2" from
	CXXFLAGS and CFLAGS.  It made sense when I added those, but it no
	longer makes sense.

2010-01-21 Ulrik Sandborg-Petersen

	* Upgraded to SQLite 3.6.22, and also now uses the amalgamation
	  rather than individual files.

============ 3.1.2.pre07 ============

2009-11-15 Ulrik Sandborg-Petersen

	* wx/layout.cpp: Added getPenWidth(), and used it in
	BorderedStackedLatinLayoutBox, both in order to draw, and in order
	to add the pen's width to the box's width.

	* wx/htreecanvas.cpp: HTreeCanvas::Draw() now draws
	HTreeBox (10,10) pixels down and to the right.

	* wx/htreecanvas.cpp: HTreeBox::DrawToBitmap (and therefore,
	DrawToClipboard) now draws a 10 pixel white border around the box.

	* wx/htreecanvas.cpp: HTreeBox::layout() now takes the width of
	the first terminal's parent into account when positioning the
	first terminal.

============ 3.1.2.pre06 ============

2009-11-14 Ulrik Sandborg-Petersen

	* src/qrytool/mainframe.cpp: Bumped version number of query tool
	  to 1.4.0.

2009-11-13 Ulrik Sandborg-Petersen

	* examples/ChunkingTool/ctmf.cpp: All word-level boxes are now
	  centered.

	* src/qrytool/solution.cpp: Fixed a compiler warning.

	* src/qrytool/wxilqtout.cpp: Changes to the horizontal tree
	  layout:

	  - For terminal nodes, the boxes are centered.

	  - For nonterminal nodes, the category boxes are
	    BorderedStackedLatinLayoutBoxes, with the first line in black,
	    showing the category, and the rest of the lines in blue, showing
	    everything else.

	* wx/layout.cpp:
	BorderedStackedLatinLayoutBox::RecalculateExtents: added an
	additional requirement for the full height of the latin font
	height to be added, namely that m_strings.size() > 1.

============ 3.1.2.pre05 ============

2009-11-13 Ulrik Sandborg-Petersen

	* wx/htreecanvas.cpp: Word-layout is now affected by each word's
	  parent as well.

	* wx/layout.cpp: StackedLatinLayoutBox's c'tor now has an extra
	  bool parameter: bIsCentered.

	* wx/htreecanvas.cpp: Now horizontal lines go all the way to the
	  pixel at the left or the right where the line actually ends.

	* src/qrytool/wxilqtout.cpp: Now all StackedLatinLayoutBox'es are
	  centered.

2009-11-09 Ulrik Sandborg-Petersen

	* wx/layout.cpp: Added BorderedStackedLatinLayoutBox.

	* wx/layout.cpp: Added bIsCentered = false to list of parameters
	in LayoutBox's constructor. bIsCentered wins over bIsRightToLeft
	when drawing text.

	* tests/htreetest.cpp: Added some
	BorderedStackedLatinLayoutBox'es, and made the LayoutBox'es
	centered.

	* wx/htreecanvas.cpp: Added the capability to have the branch
	labels below the main box, and rearranged the layout a bit,
	shortening it in the vertical direction.

============ 3.1.2.pre04 ============

2009-10-20 Ulrik Sandborg-Petersen

	* Added the "volatile" keyword to the
	MQLExecEnv::m_bContinueExecution boolean, at a customer's
	suggestion.

	* Added {{ listclear 'listname' }} to template language.

	* harvest/renderobjects.cpp: Adding objects now doesn't just add
	the first and last monad blindly.  Rather, if there is only one
	MSE in an object's set of monads, then the first and last are
	added.  Otherwise, if there is more than one MSE in an object's
	set of monads, then all MSEs are added as (first, last, id_d).

	This means that we can now support objects which have gaps in
	them, in the harvest library

	The recommended way of dealing with identity is to have an
	attribute on the renderobjects stuff which says: id_d=\"{{ id_d
	}}\".

============ 3.1.2.pre03 ============

2009-10-16 Ulrik Sandborg-Petersen

	* Documented MQLExecEnv::m_bContinueExecution in the Programmer's
	  Reference Guide.

	* Fixed some MSVC2008SP1 compiler errors in
	src/qrytool/mytable.h (no copy constructor, default constructor,
	or assignment operator in MyRow).

============ 3.1.2.pre02 ============

2009-10-16 Ulrik Sandborg-Petersen

	* Added the ability to stop a topographic query's execution by
	setting a boolean in MQLExecEnv to false:

	MQLExecEnv::m_bContinueExecution.

2009-09-08 Ulrik Sandborg-Petersen

	* EMdF/minidom.cpp: Added
	  MiniDOMNode::getSiblingBeforeThisChild(pChild).

============ 3.1.2.pre01 ============

2009-09-05 Ulrik Sandborg-Petersen

	* Upgraded to SQLite 3.6.17.

2009-08-15 Ulrik Sandborg-Petersen

	* win32/emdros.nsi.in: The link to the PDF docs for Emdros
	Chunking Tool used to overwrite the link to the PDF docs for the
	Emdros Query Tool in the Start --> All Programs menu.  Now the two
	are separate.

============ 3.1.1 ============

2009-08-12 Ulrik Sandborg-Petersen

	* Updated the configure.ac script and the code so that it can be
	  compiled with wxWidgets 2.9.

2009-08-04 Ulrik Sandborg-Petersen

	* Changed the default behavior of SQLite2 and SQLite3 to use
	  in-memory storage for temp storage.

2009-08-03 Ulrik Sandborg-Petersen

	* SWIG/java/libemdfjava.i: Rearranged the order of the
	  emdf_exception declarations, such that EmdrosException comes at
	  the end (since it is the parent of them all).  Otherwise,
	  EmdrosException gets thrown no matter which exception subclass
	  it is.

2009-06-19 Ulrik Sandborg-Petersen

	* configure.ac: Corrected the doc string for
	  --with-default-backend ... it said: --default-backend.

2009-06-16 Ulrik Sandborg-Petersen

	* src/qrytool/TECkit/*: Upgraded to TECkit 2.5.1.

2009-06-12 Ulrik Sandborg-Petersen

	* harvest/renderxml.cpp: RenderXML now doesn't make the output
	  into HTML, but returns the output raw.  This means that one can
	  now output stuff other than HTML, and one can also use whatever
	  HTML version one wants, by using the postprocessing directive
	  and doing prefix and suffix entries there with the correct
	  incantations.

	* harvest/harvest.pro: Now also builds harvest library with qmake.

	* Emdros.pro: Now delves into harvest/harvest.pro to build the
	  harvest library.
	
2009-06-11 Ulrik Sandborg-Petersen

	* Added unofficial (!) and incomplete (!) support for Qt's qmake.
	  So far, the following libraries are made, and no executables are
	  made:

	  - pcre
	  - sqlite2
	  - sqliet3
	  - EMdF
	  - MQL

	* include/emdros-lconfig.h.in: Now doesn't unconditionally define
	  the following #defines, but checks first to see if they are
	  defined.  If they are, they are left defined without defining
	  the new value in include/emdros-lconfig.h.

	  - USE_POSTGRESQL
	  - USE_MYSQL
	  - USE_SQLITE2
	  - USE_SQLITE3
	  - LINUX
	  - SUN

	* include/mql_types.h: Feature::m_list_index is now an int rather
	  than an unsigned int, since we actually put -1 into it in the
	  constructor.  This was never a problem, though.

2009-06-07 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Optimized GET OBJECTS HAVING MONADS IN for the
	  "single monad", "unique first monads" case.

	* EMdF/emdfdb.cpp: Fixed some issues with const T which should
	  have been const T& in the GET OBJECTS HAVING MONADS IN code.

2009-05-22 Ulrik Sandborg-Petersen

	* MQL/json.yxx: Now is able to accept an empty list.

	* harvest/renderobjects.cpp: prefix and suffix in postprocessing
	  now apply the template engine.

2009-05-11 Ulrik Sandborg-Petersen

	* include/environment_emdros.h: Now SWIG has been told to free the
	  memory returned by the following:

	  - EmdrosEnv::takeOverResult
	  - EmdrosEnv::takeOverSheaf
	  - EmdrosEnv::takeOverFlatSheaf
	  - EmdrosEnv::takeOverTable
	  - EmdrosEnv::takeOverStatement

	  The lack of this might have caused memory leaks before, when
	  using Emdros via one of the SWIG bindings.
	

2009-05-04 Ulrik Sandborg-Petersen

	* SWIG/php: Removed, since the PHP bindings were so broken.  If
	  anyone is bit by this change, please complain to me.

	* Removed the following from the distribution (but not from local
	  svn):

	  sqlite3/art
	  sqlite3/doc
	  sqlite3/www

	  These constitute the documentation of SQLite3, and are not
	  necessary for the end-user when compiling Emdros.
	
2009-05-02 Ulrik Sandborg-Petersen

	* wx/vtreecanvas.cpp: VTreePrintout now takes a wxString for the
	  title, rather than a wxChar*.  This is so as to avoid compiler
	  warnings with recent versions of GCC.

2009-04-13 Ulrik Sandborg-Petersen

	* EMdF/emdf_value.cpp: Added explicit parentheses around && within
	  || for a check.

	* The SWIG Java bindings are now compiled with
	  -fno-strict-aliasing when compiled with GNU g++ on
	  Linux/Unix/Mac OS X.  The reason is that the SWIG bindings do a
	  lot of type-punning, which is not allowed if -fstrict-aliasing
	  is enforced.  In fact, it would lead to crashing the Java VM in
	  the native code almost every time the SWIG Java bindings were
	  used.

	* include/string_list.h: StringList now has a

	     std::vector<std::string> getAsVector(void) const;

	  method.  IntegerList does, too:
        
	     std::vector<long> getAsVector(void) const;

	* All SWIG bindings now catch and rethrow STL exceptions natively.

	* All SWIG bindings now wrap std::vector<std::string> as
	  StringVector.  This is particularly useful for Java, under which
	  the StringList can now be accessed more easily using
	  StringVector returned by the new StringList::getAsVector().

	* All SWIG bindings now wrap std::vector<int> as IntVector.

	* PHP SWIG bindings now use proxy classes, and also use PHP5
	  rather than PHP4.  The exact SWIG flags are "-php" rather than
	  "-php4 -noproxy" (which were the old flags).  If anyone is stung
	  by this change, please email me.

	
2009-04-11 Ulrik Sandborg-Petersen

	* EQT now shows the full pathname to the current query in the
	  title bar.

2009-04-10 Ulrik Sandborg-Petersen

	* Bugfix on Linux: In the .desktop files, Categories needed to be
	  trailed by ";".  Now they are:

	  - src/qrytool/emergence-eqtu.desktop
	  - src/importtool/emergence-importtool.desktop
	  - examples/ChunkingTool/emergence-chunkingtool.desktop

	* sqlite3/*: Upgraded to SQLite 3.6.12.

	* EMdF/sqlite3conn.cpp: New implementation of
	  mySQLite3OsFileExists on WIN32, due to upgrade to SQLite 3.6.12.
	  The new implementation uses the SQLite 3 VFS layer, and simply
	  takes the first VFS registered.

	* win32/config.mak.in: Upgraded to wxWidgets 2.8.10.

	* SWIG/java/Makefile.am: Now libjemdros_la_CXXFLAGS is set to
	  AM_CXXFLAGS.

2009-04-05 Ulrik Sandborg-Petersen

	* Bugfix in harvest library: Now emits integers exactly as they
	  were in the input, thus making "#00ffff" not be "#0ffff", since
	  the 00 doesn't get reduced to 0.
	
2009-04-04 Ulrik Sandborg-Petersen

	* MQL/mql_sheaf.cpp: MatchedObject::getFeatureAsString() now does
	  something different for ListOfInteger (not list of enum):

	  It used to give something of the form "(,X,Y,Z,)", whereas now
	  it gives "(X,Y,Z)".
	
2009-04-02 Ulrik Sandborg-Petersen

	* src/qrytool/Makefile.am: macdist target now installs eqtc in
	  bin/ rather than development/bin.

2009-03-17 Ulrik Sandborg-Petersen

	* SWIG/java/TestEmdros.java.in: Brought it up-to-date, so that it
	  works with the latest bindings. (It didn't before.)

2009-03-16 Ulrik Sandborg-Petersen

	* include/minidom.h: MiniDOMDocument::getDocumentElement() is now
	  virtual.
	
============ 3.1.0 ============

2009-03-09 Ulrik Sandborg-Petersen

	* libharvest: Added "featurenomangle" to the template language,
	  which means: Don't XML-escape the feature before adding.

2009-03-03 Ulrik Sandborg-Petersen

	* emdros.spec.in: Now uses '%{prefix}/lib/' rather than
	  '%{_libdir}/', the reason being that the former maps to the
	  correct install dir on Fedora 10 x86_64, whereas the latter maps
	  to /usr/lib64/ on Fedora 10 x86_64.  

	  The net result is that Emdros can now be RPM-BUILT on 64-bit
	  RPM-based systems.

	* configure.ac: Now specifies /usr/lib/jvm/java-1.6.0 as for
	  jdk_try_dirs, making it build the SWIG Java bindings on Fedora
	  10 x86_64.

2009-02-13 Ulrik Sandborg-Petersen

	* INSTALL: Now specifies further what RPMs to install on Fedora 10
	  for building.

2009-02-10 Ulrik Sandborg-Petersen

	* win32/body.mak: Made Emdros compile on Win32 again, by
	  rearranging some variable assignments.

	* */Makefile.am: Now uses new "$(top_builddir)/config.status
	  --file=<filename>" syntax for invoking config.status.
	
2009-01-30 Ulrik Sandborg-Petersen

	* wx/htreecanvas.cpp: Now HTreeTerminalNode::calculateMainWidth()
	  and HTreeNonTerminalNode::calculateMainWidth() take both the
	  m_pMainBox's width and m_pBranchLabels's width.
	
2009-01-30 Ulrik Sandborg-Petersen

	* util/md5_emdros.cpp: Now has a C++ wrapper which takes a C++
	  string and returns a hex-ified C++ string.

	* wx/htreecanvas.cpp: Added the following methods:

	  - HTreeNode::getCharacteristicString()

	  - HTreeBox::getCharacteristicString()

	  - HTreeBox::DrawToBitmap()
	
	  - HTreeBox::toHTML()

	* wx/htreecanvas.cpp: Now is able to save the boxes to HTML.  The
	  HTreeBox boxes are saved in separate PNG files.

	* wx/layout.cpp: All toHTML() methods now take an extra "filename"
	  parameter.  It is currently only used with HTreeBox.

	* src/qrytool/mainframe.cpp: The "File | Save output as..." menu
	  item is now called "File | Save output as HTML...".

	* src/qrytool/mainframe.cpp: Bumped EQT version to 1.2.1.

2009-01-30 Ulrik Sandborg-Petersen

	* harvest/renderxml.cpp: Now is able to "nix".  That is, delete
	  all content between two tags.

	* configure.ac: Now has a better test for HOSTISSUN, which also
	  takes Sun x86 into account.

	* bug "[ 2505494 ] User preference: Turn off Query Tool tooltips"
	  fixed: There are now NO tooltips.

2009-01-29 Ulrik Sandborg-Petersen

	* harvest/renderobjects.cpp: Now retrieves features with
	  MatchedObject::getFeatureAsString(), rather than asking for the
	  EMdFValue::toString() value, thereby getting enums correctly as
	  enum constants, rather than integers.

2009-01-25 Ulrik Sandborg-Petersen

	* MQL/json.yxx: Now parses "false" as the value "false" and not
	  "true" (!).  BUGFIX.

2009-01-22 Ulrik Sandborg-Petersen

	* include/importerwizard.h: Removed a redundant typedef before an
	  enum declaration.

	* wx/htreecanvas.cpp: Now compiles on Solaris/SunOS CC.

2009-01-21 Ulrik Sandborg-Petersen

	* wx/htreecanvas.cpp: Fixed some errors thrown by the Sun CC
	  compiler related to std::make_pair() and std::map::insert.

	* Added a Public Domain md5 algorithm:

	  - EMdF/emdf_md5.cpp
	  - includ/emdf_md5.h

	  The source was:

	  http://cvsweb.xfree86.org/cvsweb/cvs/lib/md5.c : 1.1.1.2
	  http://cvsweb.xfree86.org/cvsweb/cvs/lib/md5.h : 1.6

2009-01-20 Ulrik Sandborg-Petersen

	* configure.ac: Modernized the warning about perl bindings being
	  experimental.  
	 
	  Also removed the warning about upgrading databases made with
	  versions prior to 1.2.0.
	
2009-01-16 Ulrik Sandborg-Petersne

	* util/tigerxmlimporter.cpp: Catered to a compiler bug in Sun's CC
	  compiler.

2009-01-13 Ulrik Sandborg-Petersen

	* Now RenderObjects has a "postprocess" option in the stylshet,
	  which is a list of JSONObject objects, with each JSONObject
	  needing to be either "prefix" :
	  prefix-after-XML-declaration-but-before-rest, or "suffix" :
	  to-be-added-to-XML-end.
	
	* Now renderobjects(1) has a --renderxml option, which makes it
	  possible to render the XML from a "renderinfo" stylesheet, not
	  just the objects as XML from a "fetchinfo" stylesheet.
	
	* Now "macdist"s eqtc.

2009-01-10 Ulrik Sandborg-Petersen

	  ======== MAJOR, MAJOR BUGFIX!!! ========
          ********                        ********
          ********       BUGFIX!!!!       ********

	* Fixed bug #1217003: Object references can yield incomplete
	  results (1.2.0preXXX)

          ********       BUGFIX!!!!       ********
          ********                        ********
	  ========================================
	
	
	* tests/mqlqa.h.in: Added a lot of tests for the new object
  	  reference machinery.

	* tests/mqltry.cpp: Now actually reports failure if there is a
	  failure of some kind.  Doesn't just go on.

2009-01-09 Ulrik Sandborg-Petersen

	* tests/mqlqa.h.in: Updated so as to reflect the new error message
	  which comes when an object reference has not been declared, but
	  is used in an object reference usage.
	
	* LANGUAGE_ENHANCEMENT: Did away with the requirement that an
	  object reference usage on an object block cannot reference the
	  object reference declaration on the same object block.  TODO:
	  Update MQL Query Guide.
	
	* Optimized the Feature::getLength(void) method.
	
	* Did away with the distinction between _inst and _DB in
	  R_object_block(), and everywhere else in the code.

	* Continued work on the new method of resolving object references

2009-01-08 Ulrik Sandborg-Petersen

	* Started work on the new method of resolving object references.
	
	* Removed the following:

	  - include/mql_symboltable.h
	  - MQL/mql_symboltable.cpp

2009-01-06 Ulrik Sandborg-Petersen

	* include/htmllayout.h: Removed this file, and its references in the
	  Makefiles.
	
	* wx/htmllayout.cpp: Removed this file, and its references in the
	  Makefiles.
	
	* emdros.spec.in: Now doesn't hardcode the Fedora version number,
	  but uses the %{?dist} syntax instead.

2008-12-26 Ulrik Sandborg-Petersen

	* Removed the previously added CSS parser.

2008-12-09 Ulrik Sandborg-Petersen

	* harvest/: Fixed bugs in code.  Changed files:

	  - harvest/renderobjects.cpp (TemplateLangExecEnv didn't get
	    cleaned before use!)
	  - templatelang_classes.cpp (various small changes).

2008-12-08 Ulrik Sandborg-Petersen

	* harvest/: Added the following to template language:

	   - {{ listappendbegin 'list-name' }}
	   - {{ listappendend }}
	   - {{ listemit 'list-name' 'separator' }}
	
2008-12-05 Ulrik Sandborg-Petersen

	* harvest/templatelang_classes.cpp: Fixed off-by-one bug in
	  TemplateLangExecEnv::incCounter().

2008-12-04 Ulrik Sandborg-Petersen

	* harvest/: Added {{ counter 'counter_name' }} and {{ inccounter
	  'counter_name' }} to template language.  Files affected:

	  - include/templatelang_classes.h
	  - harvest/templatelang.re
	  - harvest/templatelang.yxx
	  - harvest/templatelang_classes.cpp

2008-11-21 Ulrik Sandborg-Petersen

	* src/qrytool/mqlqt.cpp: Fixed "== should be =" bug.  It didn't
	  have any impact at all on the functionality, whatsoever.

2008-11-12 Ulrik Sandborg-Petersen

	* win32/win32.mak: Now distributes _Emdros.pyd for SWIG Python
	  rather than the (non-existent) Emdros.pyd.

	* win32/config.mak.in: Now CPPFLAGS_EXTRA has /EHsc.  WX_CPPFLAGS
	  now doesn't.  This is so as to enable support for exceptions
	  throughout the library.

	* win32/config.mak.in: Moved all non-config stuff into
	  win32/body.mak.

2008-11-08 Ulrik Sandborg-Petersen

	* Got a speed increase in the rendering code of the Query Tool and
	  the Chunking Tool, by caching string widths in the ViewMetrics
	  class.

	  Affected files:

	  - include/viewmetrics.h
	  - wx/viewmetrics.cpp
	  - wx/layout.cpp

2008-11-05 Ulrik Sandborg-Petersen

	* configure.ac: Ran "autoupdate -f -v configure.ac" on Fedora
	  9 (autoconf 2.61).

2008-11-04 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Now uses path for JDK 1.6.0 update 10 by
	  default.
	

2008-10-12 Ulrik Sandborg-Petersen

	* EMdF/monads.cpp: Fixed bugs in FastSetOfMonads::addMSE() and
	  FastSetOfMonads::removeMSE().  In particular, the following
	  sequence would fail with an EmdrosException:

	  FastSetOfMonads fsom(0,9);
	  fsom.removeMSE(MonadSetElement(0,1));
	  fsom.addMSE(MonadSetElement(0,1));

	  The reason was that the map got its value, but not its key,
	  updated when doing the delete (and also when doing the add).

	* EMdF/minidom.cpp: Now MiniDOMComment objects are pretty-printed
	  correctly, with a preceding "<!--".
	
	* tests/emdftry.cpp:

	  - Added the above test.

	  - Made emdftry.cpp work again after the addition of
	    MiniDOMComment() in a previous commit.

	* wx/*.xpm: Changed 'static char *' to 'static char const *',
	  thereby avoiding gcc compiler warnings about assignment of
	  string to char * being deprecated.

	* wx/layout.cpp: LayoutBox::Draw() and
	  LayoutBox::RecalculateExtents() now respect the interlinear
	  lines's bDisplayed boolean.

	* wx/layout.cpp: LayoutParagraph's c'tor now allocates 2
	  LayoutLine* pointers in its m_lines vector.  This results in a
	  significant speedup when creating many LayoutParagraphs.

	* wx/treeitem.cpp: Added member LayoutBoxBase
	  *m_pParagraphSurrogate to CTreeItem.

	* include/treeitem.h: Removed get_paragraph().
	
	* wx/treeitem.cpp: Added member functions:

	  - GetHeightLP(first_line,last_line)
	  - getNoOfLines()

	  Used these in vtreecanvas.cpp's pagination logic, instead of
	  CTreeItem::get_paragraph().

	* wx/vtreecanvas.cpp: Added virtual member function
	  CloneViewMetrics(), and used it in making the printing metrics.

	* wx/vtreecanvas.cpp: Made printing faster, by not making the tree
	  for every page.

	* wx/vtreecanvas.cpp: Printing now sets the ViewMetric's marginLP
	  to the correct left margin.

	* wx/layout.cpp: LayoutLine::Draw() and LayoutLine::GetBoxForX()
	  now honor the m_pMetrics->bIsPrinting flag.

	
2008-10-07 Ulrik Sandborg-Petersen

	* harvest/templatelang_classes.cpp: TemplateAttrib::exec() now
	  uses escapeXMLEntities before calling addToOutput().

2008-09-28 Ulrik Sandborg-Petersen

	* On Linux desktops, added icons and .desktop menu entries for
	  Emdros Query Tool, Emdros Chunking Tool, and Emdros Import Tool.

2008-09-21 Ulrik Sandborg-Petersen

	* configure.ac: On Mac OS X, the 10.4 SDK is now always invoked
	  when doing universal binaries, regardless of whether the build
	  host is PowerPC or Intel.

	* configure.ac: On Mac OS X, when building universal binaries, the
	  switch -mmacosx-version-min is set to 10.4.  This ensures not
	  only that the universal binaries build, but also that they will
	  run on both MacOS X 10.4 and MacOS X 10.5.

2008-09-20 Ulrik Sandborg-Petersen

	* EMdF/qdxml.cpp: QDDocHandler is now able to parse comments.

	* EMdF/minidom.cpp: MiniDOM is now able to handle comments.

2008-09-19 Ulrik Sandborg-Petersen

	* EMdF/minidom.cpp include/minidom.h: Now is able to take a
	  MiniDOMDocument as a parameter when parsing.

	* include/minidom.h: MiniDOMDocument::createText() and
	  MiniDOMDocument::createElement() are now virtual.

	* Added the beginnings of a CSS parser in wx/:

	  - wx/cssprops.txt
	  - wx/cssprops.py
	  - wx/css_classes.cpp
	  - include/css_classes.h
	  - wx/css.yxx
	  - wx/css.re

	* Added code in wx/htmllayout.cpp to start parsing XHTML, and to
	  extract any CSS stylesheet from there.

	* Added a testing framework for CSS and parseXHTML():

	  - tests/csstry.cpp
	

2008-09-18 Ulrik Sandborg-Petersen

	* harvest/renderxml.cpp: Now does stylesheet inheritance correctly.

	* MQL/json.yxx MQL/json_classes.cpp: Now is able to have empty
	  objects with no key/value pairs.

2008-09-15 Ulrik Sandborg-Petersen

	* Added a JSON parser and datastructure framework to libmql.  This
	  API is not yet public.

	* Added tests/jsontry.cpp and doc/jsontry.1.

	* Added directory harvest/ as well as the following files:

	  - harvest/Makefile.am
	  - harvest/win32.mak
	  - harvest/djgpp.mak
	  - harvest/memobject.cpp
	  - harvest/renderobjects.cpp
	  - harvest/renderxml.cpp
	  - harvest/templatelang_classes.cpp
	  - harvest/templatelang.yxx
	  - harvest/templatelang.re
	  - include/memobject.h
	  - include/renderobjects.h
	  - include/renderxml.h
	  - include/templatelang_classes.h
	  - include/templatelang_lexer.h

	* Added the following to include/string_func.h:

	  - is_whitespace()
	  - joinListEmptyBetween()


	* Removed is_whitespace() from wx/layout.cpp, since it is now
	  available in string_func.h.

	* Added escapeXMLEntities() to include/string_func.h


2008-09-13 Ulrik Sandborg-Petersen

	* src/qrytool/wxilqtout.cpp: Output of trees is now much snappier.

	* wx/layout.cpp: In right-to-left paragraphs, a box (such as a
	  HTreeBox) that was wider than the canvas would get shown
	  flush-right on the right side of the canvas, thereby hiding part
	  of the box to the left of the canvas.  This was fixed in
	  LayoutLine::Draw().

2008-09-12 Ulrik Sandborg-Petersen

	* configure.ac: Now OpenGL and AGL are treated correctly in the
	  output of wx-config --libs.

	* MQL/mql_sheaf.cpp: MatchedObject::getFeatureAsString() now
	  returns "" rather than 0 after the ASSERT_THROW at the end (gcc
	  4.3 error).

	* configure.ac: wx_config_dir_try_dirs no longer has
	  /usr/local/bin as one of the hardwired directories.

2008-09-10 Ulrik Sandborg-Petersen

	* wx/browsewidget.cpp: Now works better with default values.

2008-08-30 Ulrik Sandborg-Petersen

	* src/qrytool/harvest.cpp: BUGFIX: Harvesting now always sets the
	  solution monads to be the raster monads for that solution, not
	  the set of monads which caused the solution.

	* src/qrytool/harvest.cpp: BUGFIX: Finding the raster monads for a
	  given set of monads now always adds all monads from a given
	  raster unit that overlaps at least partially with the solution
	  set of monads.  Not just the parts of the raster unit that
	  overlap, but all the raster unit.

	* wx/htreecanvas.cpp: Added HTreeBox::findRoots() and
	  HTreeBox::treeIsFinished().  The latter calls the former, and
	  the latter must be called when all nodes have been added to the
	  tree.  This was done so as to avoid the situation whereby nodes
	  are added which have a parent which is non-nil, but where the
	  parent is not added, and so the naïve algorithm for finding
	  roots (namely getting the children of the "NIL" parent) fails.

	* wx/layout.cpp: LayoutCanvas Now doesn't have a fixed width, but
	  follows the width of the widest paragraph.  This was done so as
	  to accommodate large boxes, e.g., HTreeBoxes.

	* QueryTool: Now has new configuration parameter: data_unit_name.
	  See the docs for the QueryTool for what it does.

	* src/qrytool/harvest.cpp: Now only gets "data_tree_parent"
	  feature if the output_style is "tree".

	* QueryTool: Now is able to apply_focus to trees.

	* QueryTool: BUGFIX: The single_raster_units option used to not
	  work if a raster object spanned more than one MSE.  Now it does.

	* src/qrytool/mainframe.cpp: Bumped Query Tool version number to
	  1.2.0.
	

2008-08-29 Ulrik Sandborg-Petersen

	* EMdF/monads.cpp: FastSetOfMonads::removeMSE(): BUGFIX! Would
	  segfault if the set was empty after removing the MSE.  Also
	  affected FastSetOfMonads::difference().  This has been fixed.

	* tests/emdftry.cpp: Tests for the above bug, both in
	  FastSetOfMonads and in SetOfMonads.

2008-08-27 Ulrik Sandborg-Petersen

	* MQL/mql_query: The ASSERT_THROW(false, MYSTRING) have been
	  changed for Block, such that it says "Unknown block kind" rather
	  than "Unknown object block kind".  This has no impact on any
	  code, since these are never thrown.  They are only there as a
	  defensive measure against forgetting to update the switch
	  statements, should I later expand the number of block kinds.

2008-08-18 Ulrik Sandborg-Petersen

	* include/mql_yylex.h: getTokenName() now works even for
	  end-of-file.  It used to be that the strcmp(szTokenName,
	  INTEGER_MAGIC) call would segfault, for example if there was a
	  syntax error due to <<EOF>> (end-of-file) being met unexpectedly
	  while parsing.

2008-08-14 Ulrik Sandborg-Petersen

	* SWIG/perl/libmqlperl.i: Changed the following:

	  - SWIGTYPE_p_LlistConstIteratorTMatchedObject_t -->
	    SWIGTYPE_p_LlistConstIteratorT_MatchedObject_t

	  - SWIGTYPE_p_LlistConstIteratorTStraw_t -->
	    SWIGTYPE_p_LlistConstIteratorT_Straw_t

	  The reason is that that is what SWIG calls in in 1.3.35.

	  This is done in conditional SWIG compilation, such that the
	  change only occurs when the SWIG version being used is >=
	  1.3.35.
	
	* wx/layout.cpp: Got rid of a usage of wxList (PointsList),
	  because gcc 4.3 complained about that usage.

	* configure.ac:

	  - Now doesn't know at all how to do wxWidgets 2.4.  Only 2.6 and
	    2.8 are supported in the code anyway.

	  - Non-unicode builds are no longer supported.
	

2008-08-13 Ulrik Sandborg-Petersen

	* tests/mqlqa.h.in: Updated because 'feature does not exist' now
	  has new output, showing the feature.

	* doc/Makefile.am: Removed the distribution of xinetd.mql, since
	  this feature currently does not work.

	* doc/progref/Content.txt and doc/progref/files.txt: Removed
	  mention of xinetd/inetd, since this is currently not possible.

	* win32/win32.mak: New location for libmysql.dll in MySQL
	  installation folder.
	
2008-08-05 Ulrik Sandborg-Petersen

	* include/string_list.h: Gave StringList and IntegerList an
	  assignment operator (operator=).

	* include/string_list.h: Made the result of the
	  assignment-operator of ParserList<T> a non-const reference.

2008-07-19 Ulrik Sandborg-Petersen

	* examles/ChunkingTool/ctmf.cpp: Updated some comments, and bumped
	  the version number and updated the About box info.

	
2008-07-18 Ulrik Sandborg-Petersen

	* Bugfix (eqtu): src/qrytool/emdros_wrapper.cpp: Now does an
	  m_pOut->flush() at the end of every show_result().  This is so
	  that, when the "option = quiet" option is on, the EQTU will
	  still display the results, without having to resize the window.
	  The bug is:

	  [ 2021303 ] Query Tool option "quiet" entails having to resize
	  window

	
2008-07-16 Ulrik Sandborg-Petersen

	* util/conf.cpp: Now accepts NEWLINE as a constant in *.cfg files,
	  on a par with CLOSE_PAREN and the others.

	* src/qrytool/output_style.cpp: Now "does the right thing"
	  w.r.t. printing the units in the right order (monad-wise),
	  including inclusions that nest.

	* Fixed bug #2017337: Query Tool configuration wants
	  all-lower-case object types.

	  The affected files are:
	
	  - src/qrytool/output_style.cpp
	  - src/qrytool/solution.cpp

	* Fixed bug #2012449: Query tool crashes on configure command, by
	  simply not showing the menu item "Configure" in the "Tools"
	  menu.

	
2008-07-15 Ulrik Sandborg-Petersen

	* Made it compile with gcc 4.3.1.  In particular, the following
	  files had the following #includes added:

	  - include/arena.h: #include <cstring>
	  - EMdF/sqliteemdfdb.cpp: #include <cstring>
	  - EMdF/sqlite3emdfdb.cpp: #include <cstring>
	  - EMdF/string_func.cpp: #include <cstdlib>
	  - EMdF/qdxml.cpp: #include <cstring>
	  - util/conf.cpp: #include <cstring>
	  - util/sfm.cpp: #include <cstdlib>

	* configure.ac: Made SWIG Java work with OpenJDK 1.6.0 on Fedora
	  9, by adding the correct directory to jdk_try_dir.

2008-07-13 Ulrik Sandborg-Petersen

	* wx/viewmetrics.cpp: Now ViewMetrics ctor has the member
	  initializations in the right order, giving no warnings.

	* wx/htreecanvas.cpp: Added HTreeDrawer and
	  HTreeDrawerConfiguration.

2008-07-12 Ulrik Sandborg-Petersen

	* All error messages of the type 'Feature does not exist for the
	  given object type.' now report which feature it is.

2008-07-09 Ulrik Sandborg-Petersen

	* sqlite/tool/win32.mak: Now uses /EHsc rather than /GX, since the
	  latter has been deprecated in a version of Visual Studio later
	  than 2003."

2008-07-08 Ulrik Sandborg-Petersen

	* MQL/mql_query.cpp: In InstMonadIterator constructor, don't use
	  m_pInst->search(Sm), but m_pInst->begin().  This caused a
	  speedup on topographic queries.
	
2008-07-07 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Fixed NSISEXE, DBINCLUDE_PG.

	* win32/win32.mak: Fixed path to libmysql.dll

2008-06-25 Ulrik Sandborg-Petersen

	* EMdF/pgemdfdb.cpp: Now uses UTF8 rather than ISO-8859-1 for
	  default encoding (PgEMdFDB::getDefaultEncoding).  This is in
	  order to avoid errors on PostgreSQL 8.3.

	* win32 build system: 

	  - Now uses wxWidgets 2.8.8

	  - Now uses J2SDK 1.4.2_17

	  - Now uses PostgreSQL 8.3 (and 8.2 is no longer supported out of
	    the box).

	  - Made it work more smoothly with Visual Studio 2008:

            - Now doesn't use the long-gone /YX compiler flag.

	    - Now uses /EHsc rather than the deprecated /GX compiler flag.

	  - Whereever "C:\Program Files" occurred in config.mak.in, it now
	    uses $(PROGRAMFILES) or %PROGRAMFILES%.

	
2008-06-06 Ulrik Sandborg-Petersen

	* tests/mqltry.cpp: Now uses UTF8 examples throughout.

	
2008-06-04 Ulrik Sandborg-Petersen

	* configure.ac: Now always sets MONOCOMPILER, regardless of
	  whether we are to do SWIG csharp bindings or not.

	* SWIG/csharp/Makefile.am: Now only attempts to build
	  EmdrosDotNet.dll if we are to do SWIG csharp bindings.

	* include/htreecanvas.h wx/htreecanvas.cpp: Now has a HTreeBox,
	  based on LayoutBoxBase, which is owned by HTreeCanvas.

	  There are some changes in the public interface of HTreeCanvas.
	  In particular:

	  - HTreeCanvas ctor now takes a ViewMetrics parameter.

	  - HTreeCanvas::pViewMetrics is no longer available publicly.
	    Instead, use HTreeCanvas::GetViewMetrics().

	* Emdros Query Tool: Now has a "output_style = tree" option.  See
	  default.cfg for how to use it.

2008-06-02 Ulrik Sandborg-Petersen

	* src/qrytool/mytable.h: MyTriple's operator< method was changed,
	  such that:

	  - It actually is a weak strict ordering

	  - It sorts such that the objects appear in the right
	    monad order (e.g., { 1-3 } < { 1-2 }).
	
2008-05-25 Ulrik Sandborg-Petersen

	* Added new header:
	  include/emdros_reserved_words.h

	* EMdF/string_func.cpp: Added convert_to_identifier().

	* util/tigerxmlimporter.cpp: Now is able to translate TigerXML
	  "features" on NTs into object types.  Now is also able to name
	  the "terminal" object type.

2008-05-23 Ulrik Sandborg-Petersen

	* util/tigerxmlimporter.cpp: Now is able to import LTCX files.

	* configure.ac: Now is able to use GMCS for .Net bindings.

	* util/tigerxmlimporter.cpp: Now is able to print the schema not
	  just to std::cout, but to the file chosen with -o.

2008-04-28 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Fixed bug with missing
	  closing-parenthesis (')') in
	  EMdFDB::getObjectsHavingMonadsInFromSingleUniqueMonadOT().

	* EMdF/inst.cpp, MQL/mql_R.cpp: Got a speedup on topographic
	  queries by reworking InstContents::objectsAtSm() and its use in
	  mql_R.cpp: R_object_block_inst().
	
2008-04-27 Ulrik Sandborg-Petersen

	* configure.ac: Added /usr/lib/jvm/java-6-sun to jdk_try_dirs.

	
2008-04-15 Ulrik Sandborg-Petersen

	* win32/win32.mak and SWIG/python/win32.mak: _EmdrosPy.dll is now
	  distributed as _EmdrosPy.pyd.
	

2008-03-24 Ulrik Sandborg-Petersen

	* EmdrosQueryTool: Added the following options:

	  - output_style = kwic

	  Also added partial support in the console output and the
	  WX (GUI) output.
	

2008-03-19 Ulrik Sandborg-Petersen

	* EmdrosQueryTool: Added the following options, with harvesting
	  support:

	  - raster_context_before
	  - raster_context_after
	  - hit_type = (focus|innermost|innermost_focus|outermost)

	* src/qrytool/output_style.cpp: Now focus is shown regardless of
	  whether the focus monad is part of the solution or not.  If only
	  the focus monad is part of the raster unit, it gets shown as
	  focus.

	* src/qrytool/mqlqtwx.cpp: Now the splash screen is only shown for
	  about 1.5 seconds, rather than about 6 seconds.
	  
	* examples/ChunkingTool/ctwx.cpp: Now the splash screen is only
	  shown for about 1.5 seconds, rather than about 6 seconds.

	* include/llist.h: Added LList<T>::back().

	* EmdrosQueryTool: The QTOutput class now has an 'endSolution()'
	  method, which is called in Output_style.  In WXILQTOut, this is
	  implemented as a HTMLHRBox inside a left-to-right Paragraph.

	  

2008-03-18 Ulrik Sandborg-Petersen

	* util/schema.cpp: Fixed bug in EmdrosEnumerations::populate():
	  str_tolower was called on the enumeration name.  This resulted
	  in not being able to retrieve enumerations that used upper-case
	  letters, leading to a crash.  This affects the Emdros Query
	  Tool, among other applications.

	* EMdF/logging.cpp: WIN32 logging is now available.

	* MQL/mql_sheaf.cpp: MatchedObject::getFeatureAsString() now does
	  "the right thing" when the feature is a list of enums: It
	  returns a (parens-enclosed), comma-separated list of enumeration
	  constants (i.e., strings) rather than the raw integer values.

	* src/qrytool/mainframe.cpp: CreateControls() now calls
	  OnFileNew(), thereby hopefully getting rid of the annoying bug
	  whereby any first query entered would fail with a parser error
	  on the unknown character '0x0b'.

2008-03-11 Ulrik Sandborg-Petersen

	* EMdF/string_set_cache.cpp: Now only fills the 'string --> id_d'
	  part if it is really necessary (this is done lazily).
	
	* EMdF/inst.cpp: SkipList now has a method, "bool
	  hasObject(monad_m key, id_d_t object_id_d)", which checks
	  whether an object with the specified first monad and specified
	  object id_d exists in the inst. Callable via
	  InstContents::hasObject, and Inst::hasObject().

	  This was done because most of the time in GET OBJECTS was spent
	  inside std::set<id_d_t>, which apparently is slow (on Linux).

	* EMdF/emdfdb.cpp: Got a sizeable speed increase on GET OBJECTS
	  HAVING MONADS IN.

2008-03-01 Ulrik Sandborg-Petersen

	* EMdF/monads.cpp: Added the following:

	  - FastSetOfMonads::removeMSE()
	  - FastSetOfMonds::unionwWith(const FastSetOfMonads& other)
	  - FastSetOfMonds::difference(const FastSetOfMonads& other)

	* wx/layout.cpp: Added LayoutSymbolBox class.

	* wx/treeitem.cpp: The LayoutBox is now a LayoutBoxBase.

2008-02-25 Ulrik Sandborg-Petersen

	* EMdF/qdxml.cpp: The parser can now actually ignore DOCTYPE.

2008-02-22 Ulrik Sandborg-Petersen

	* wx/layout.cpp: LayoutLine::RecalculateExtents() and
	  LayoutParagraph::RecalculateExtents() now have an extra
	  parameter: bool bRecalculateBoxes.

	* wx/treeitem.cpp: CTreeItem ctor now has an extra parameter: bool
	  bOwnsBox.

============ 3.0.1 ============

2008-02-05 Ulrik Sandborg-Petersen

	* Made it work on MySQL versions prior to 4.1.1.  Support for
	  these ancient versions of MySQL had been dropped when the
	  DEFAULT CHARACTER SET syntax was introduced.  The solution was
	  to surround the DEFAULT CHARACTER SET syntax with '/*!40101'
	  and '*/'.  This makes MySQL only execute it if the version is
	  higher than or equal to 4.1.1.

	* util/pennimporter.cpp: Now doesn't issue as many BEGIN/COMMIT
	  TRANSACTION statements.  This is useful if each file read into
	  the program is small.  However, big files continue to benefit
	  from the "50000 inserts per transaction" rule-of-thumb.

2008-02-03 Ulrik Sandborg-Petersen

	* sqlite3/tool/lemon.c: Changed B_TRUE to BOOL_TRUE, and B_FALSE
	  to BOOL_FALSE, so as to be able to compile on Solaris.

	* src/qrytool/TECkit/Compiler.h: Removed the extraneous semicolon
	  at the end of the "void appendToTable(string& table, T x)"
	  method, thereby enabling compilation on Solaris.

	* src/qrytool/TECkit/Compiler.cpp: Added the latest TECkit changes
	  from Jonathan Kew.

2008-01-28 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Changed CPPFLAGS_EXTRA: Added:
	  /D_HAS_ITERATOR_DEBUGGING=0 /D_SECURE_SCL=0.  This was so as to
	  be able to compile on Windows with Visual Studio (Express) 2005.
	  See the comment above CPPFLAGS_EXTRA for full details.
	
	* Changed the handling of fonts in HTMLTextBox such that it looks
	  in the ViewMetric's font map, instead of having a local copy of
	  the font pointer.

	* wx/viewmetrics.cpp: Added HTMLFontAttributes::fromLong(long).

	* wx/layout.cpp: Fixed HTMLTextBox such that it knows how to
	  RecalculateExtents().

	* wx/layout.cpp: Fixed LayoutLine such that it knows how to
	  RecalculateExtents().

	* wx/layout.cpp: Fixed LayoutParagraph such that
	  RecalculateParagraphExtents actually calls RecalculateExtents on
	  all lines.
	
	* wx/layout.cpp: Fixed LayoutCanvas::ChangeMagnification(), such
	  that it actually works!

	* Upgraded TECkit to TECkit's svn TRUNK, as per Jonathan Kew's
	  email of 2008-01-28.

============ 3.0.0 ============

2008-01-26 Ulrik Sandborg-Petersen

	* Moved the HTML classes around in include/layout.h and
	  wx/layout.cpp.  This was because I had planned to rework the
	  HTML classes into something more like a real HTML-widget.  This
	  is something for a future release.

	* Fixed bug in MQL/mql_enumeration_statements.cpp:
	  ECUpdate::symbolNoTwoValuesSame(): The "kRemove" code had
	  trouble when compiled with Visual Studio(R) 2005: It simply
	  crashed.  The code was rewritten so as to accommodate
	  Microsoft(R)'s compiler.

============ 2.0.8 ============

2008-01-26 Ulrik Sandborg-Petersen

	* win32/win32.mak: Now has "-" in front of all "del" operations,
	  thereby enabling compilation on Windows 2000, where del has
	  different return values than on Windows XP.

2008-01-25 Ulrik Sandborg-Petersen

	* Changed sqlite3/src/pager.c to have sqlite3_open_encrypted.
	  Changed EMdF/sqlite3conn.cpp to use
	  sqlite3/src/pager.c:sqlite3_open_encrypted.  It doesn't do
	  anything, of course...

2008-01-19 Ulrik Sandborg-Petersen

	* Upgraded TECkit to TECkit-release-2006-09-19.

2008-01-09 Ulrik Sandborg-Petersen

	* EMdF/emdfdb.cpp: Fixed GET FEATURES (i.e.,
	  getFeaturesByQueryExec) such that it doesn't throw an exception
	  if all ID_Ds given to the statement are non-existent in the
	  object type given.  Rather, it just returns the empty table.

	  Also added a test to tests/mqltry.cpp.
	
	
============ 2.0.7 ============

2008-01-06 Ulrik Sandborg-Petersen

	* include/layout.h: Removed all default parameter values, so as to
	  make it more transparent what is going on, and so as to force
	  callers to think about all parameters.

	* include/layout.h: Removed the following convenience functions:

	  - LayoutParagraph::AddBox(wxDC*, LayoutBoxBase*)
	  - LayoutCanvas::AddBox(LayoutBoxBase, bParagraphOwnsTheBox)
	  - LayoutCanvas::AddLayoutBox(wxstringvec_t, bool, bool)
	  - LayoutCanvas::AddLayoutBox(wxDC*, wxstringvec_t, bool, bool, bool)

	  This was done so as to make it more transparent what is going
	  on.  In particular, it also forces the caller to think about the
	  parameters that are really getting passed, especially the
	  RecalculateExtents parameter, which slowed everything down a lot
	  by being "true" too often.

	* src/qrytool/wxqtout.cpp: Removed, since it was obsoleted long
	  ago by wxilqtout.cpp.

	* src/qrytool/wxqtout.h: Removed, since it was obsoleted long ago
	  by wxilqtout.h.

	* include/layout.h: Added LayoutCanvas::getDC().

	* src/qrytool/output_style.cpp: show() now doesn't call
	  pOut->flush() for every solution.  This is because it slows us
	  down quite a bit in the graphical version, and is unnecessary in
	  the console version.

	* wx/layout.cpp: Made LayoutBoxBase::DrawBox() work much
	  better. Now doesn't distinguish between whether m_bSpaceAfter is
	  true or false, but simply draws the box from x to x +
	  m_xExtentLP.

	* wx/layout.cpp: Made LayoutBracketBox::Draw() work better for
	  BD_LEFT boxes, i.e., moved them m_pMetrics->spaceBetweenWordsLP
	  to the right, if the box has m_bSpaceAfter.

2008-01-05 Ulrik Sandborg-Petersen

	* wx/layout.cpp: 

	  - LayoutBoxBase's constructor has a new parameter,
	    bIsRightToLeft, which is stored in a new member of the
	    LayoutBoxBase class.

	  - LayoutBox's constructor has a new parameter, bIsRightToLeft,
 	    which is passed on to LayoutBoxBase's constructor.

	  - The bSpaceAfter parameter of LayoutBox's constructor is no
	    longer given a default value.

	  - LayoutBox::DrawText now draws text flush-right within the box
	    if m_bIsRightToLeft is true.

	  - LayoutCanvas::AddLayoutBox() now has an extra parameter:
	    bIsRightToLeft.

	  - Changed the invocations in the query tool and the chunking
	    tool of the relevant parts of Layout API to match these
	    changes.

	* wx/layout.cpp: Made it possible for a LayoutParagraph to draw
	  itself such that, if there is only one line in the paragraph,
	  one can elect to draw the line flush-left.  This is useful in
	  the vtreecanvas, and is used there to let one-line text
	  paragraphs be displayed flush-left if it is a right-to-left
	  tree.

	* src/qrytool/: Reimplemented some of the display code, such that
	  it uses the new API, and is faster.

============ 2.0.6 ============
	
2008-01-04 Ulrik Sandborg-Petersen
	
	* configure.ac: No longer strips -g from CFLAGS and CXXFLAGS if
	  doing --enable-debug.

	* Added @DEBUGFLAG@ to the following files (in AM_CFLAGS or
	  AM_CXXFLAGS):
	
	  - pcre/Makefile.am
	  - sqlite3/src/Makefile.am
	  - sqlite/src/Makefile.am
	  - SWIG/csharp/Makefile.am
	  - SWIG/java/Makefile.am
	  - SWIG/python/Makefile.am
	  - SWIG/ruby/Makefile.am
	  - SWIG/perl/Makefile.am
	  - SWIG/php/Makefile.am

	* wx/vtreecanvas.cpp: Got rid of a warning about order of
	  initialization in VTreeCanvas constructor.

	* include/table.h: Table::getColumn() throw-clause now has
	  TableException at the end, so as not to catch TableException
	  before TableColumnException or TableRowException in the SWIG
	  bindings.

	* Moved the following global variables out of
	  include/encryption.h into EMdF/encryption.cpp:

	  - g_rol_bits
	  - g_eor_string
	  - g_first_eor
	  - g_bRandomGeneratorSeeded

============ 2.0.5 ============
	
2008-01-04 Ulrik Sandborg-Petersen

	* Got a speed increase on SQLite 2 by setting the maximum number
	  of joins to 0 in
	  include/sqliteemdfdb.h:SQLiteEMdFDB::getMaxNoOfJoins().

	* Did the same for MySQL, and got a similar speed increase (~ 8%).

	* Added throw clauses to the follwing in include/monads.h and
	  EMdF/monads.cpp:

	  - SetOfMonads::SetOfMonads(monad_m, monad_m)
	  - SetOfMonads::add(monad_m, monad_m)
	  - SetOfMonads::hasMonadsInRange(monad_m, monad_m)
	  - FastSetOfMonads::FastSetOfMonads(monad_m, monad_m)
	  - FastSetOfMonads::add(monad_m, monad_m)
	  - FastSetOfMonads::hasMonadsInRange(monad_m, monad_m)

2008-01-03 Ulrik Sandborg-Petersen

	* wx/layout.cpp: ZeroWidthHTMLBox constructor: Fixed bug with kind
	  kBR.

============ 2.0.4 ============

2007-12-30 Ulrik Sandborg-Petersen

	* MQL/mql_result.cpp: BUGFIX: MQLResult::isTable() would return
	  true if it was a flat sheaf.  It now returns true only if it is
	  a table.

	* tests/mqltry.cpp: Added some tests for EmdrosEnv::isTable(),
	  EmdrosEnv::isSheaf(), and EmdrosEnv::isFlatSheaf(), testing that
	  they are mutually exclusive.

	* doc/MQL-Programmers-Guide.lyx: Fixed bug in documentation of GET
	  OBJECTS: It is not a table which is returned, but a flat sheaf.

	* EMdF/emdf_value.cpp: Added throw clauses to all EMdFValue
	  methods that needed one.

	* MQL/mql_sheaf.cpp: Added throw clauses to all methods that
	  needed one.

	* include/llist.h: Added throw clauses to all methods that needed
	  one.

	* MQL/emdros_environment.cpp: Added some throw clauses.

	* Added a throw clause to escapeStringForSQL() in the following
	  classes:

	  - EMdFDB
	  - PgEMdFDB
	  - MySQLEMdFDB
	  - SQLiteEMdFDB
	  - SQLite3EMdFDB

	* EMdF/table.cpp: Rearranged some throw clauses, so as to not hide
	  TableRowException behind TableException.
	
2007-12-29 Ulrik Sandborg-Petersen

	* Added some throw clauses to the remaining methods of the
	  EMdF/table.cpp classes that needed it.

============ 2.0.3 ============

2007-12-29 Ulrik Sandborg-Petersen

	* EMdF/emdf_value.cpp: EMdFValue::getString() now doesn't crash
	  the whole library if it isn't a string.  Some users complained
	  that this was the case.  Now an EmdrosException is thrown
	  instead if it isn't a string.

	* EMdF/emdf_value.cpp: EMdFValue::getIntegerList() now throws an
	  EmdrosException if the EMdFValue isn't either a list of integer
	  or a list of id_d.

	* Added some tests of the Table class in tests/emdftry.cpp.

	* Added some tests to tests/mqltry.cpp.

	* include/llist.h: Added initialization of m_pIter(0) to:

	  - LlistConstIterator<T>::LlistConstIterator()
	  - LVlistConstIterator<T>::LVlistConstIterator()

	* tests/emdftry.cpp: Added some tests of EMdFValue.
	
============ 2.0.2 ============

2007-12-29 Ulrik Sandborg-Petersen

	 * MQL/mql_sheaf.cpp: Added MatchedObject::getFeatureAsLong() and
	   MatchedObject::getFeatureAsString().  Also added docs.

	* doc/progref/Content.txt: Added docs for
	  MatchedObject::getEnumLabel().

============ 2.0.1 ============

2007-12-29 Ulrik Sandborg-Petersen

	* wx/layout.cpp: Removed the non-string constructors of LayoutBox,
	  SimpleLayoutBox and LatinLayoutBox.

	* wx/layout.cpp: Got rid of some innocuous compiler warnings that
	  occurred with -Wall.

	* wx/vtreecanvas.cpp: VTreeCanvas::OnChangeInterlinearLine() now
	  called ViewMetrics::Initialize() AFTER calling LoadFonts, since
	  the former needs the latter to be called first!

============ 2.0.0 ============

2007-12-27 Ulrik Sandborg-Petersen

	* wx/Makefile.am now sets AM_CXXFLAGS.

	* wx/layout.cpp: All decendants of LayoutBoxBase (except HTMLBox
  	  and its descendants) now know how to RecalculateExtents().

	* wx/htreecanvas.cpp: Now knows how to ChangeMagnification()
	  on-the-fly, for real!

	* wx/viewmetrics.cpp: Now knows how to ChangeMagnification().

	* wx/htreecanvas.cpp: Now calculates vertical riser dimensions
	  better.

2007-12-17 Ulrik Sandborg-Petersen

	* win32/config.mak.in: Bumped wxWidgets to version 2.8.7, Python
	  to version 2.5, JDK to version j2sdk1.4.2_16, and PostgreSQL to
	  version 8.2.

============ 1.2.0.pre269 ============

2007-12-11 Ulrik Sandborg-Petersen

	* wx/htreecanvas.cpp: Removed
	  HTreeCanvas::ScrollToGivenPosition().

	* wx/htreecanvas.cpp: DrawToBitmap now uses m_width and m_height
	  rather than GetClientSize() to get dimensions of
	  bitmap. (Bugfix.)

2007-12-10 Ulrik Sandborg-Petersen

	* wx/htreecanvas.cpp: HTreeCanvas now is able to layout
	  right-to-left trees.

	* wx/htreecanvas.cpp: HTreeCanvas can now draw itself both to the
	  clipboard and to a bitmap.

2007-12-09 Ulrik Sandborg-Petersen

	* wx/dropdown_widget.cpp: Fixed a bug whereby transferStringsToCB
	  would not set the selection correctly.  This caused problems on
	  wxGTK.

2007-11-18 Ulrik Sandborg-Petersen

	* configure.ac now knows about /usr/lib/jvm/java-1.6.0-sun.

2007-10-24 Ulrik Petersen

	* Added kP to list eHTMLTagKind.

2007-10-18 Ulrik Petersen

	* wx/layout.cpp: Now uses wxNullFont rather than *wxNORMAL_FONT to
	  deselect a wxFont from a wxDC.  This is apparently faster.

	* wx/viewmetrics.cpp: Removed String2PFontTrie, replaced it with a
	  std::map and a characteristic long instead of a characteristric
	  string on font attributes.

	* Made parsing a HTML page much faster.

	* Removed those parts of HTML parsing that added
	  ZeroWidthHTMLBoxes for all but the necessary ones for display.
	  Note that this means it is no longer possible to do toHTML() on
	  a HTMLCanvas, and get the correct HTML back.

	* wx/viewmetrics.cpp: spaceBetweenWordsLP is now better calculated
	  for a variety of magnifications.

	* wx/layout.cpp: HTML tags h1 and h2 now have a linebreak after
	  the end tag.

	* wx/viewmetrics.cpp: Removed xIndentLP, instead calling it
	  marginLP, since that is what it was.

	* wx/viewmetrics.cpp: Added totalWidthLP.

	* wx/layout.cpp: HTMLHRBox now draws itself correctly from the
	  left margin to the right margin.

	* wx/viewmetrics.cpp: HTML SuperScript now is only at 80% size,
	  not 70%.  This looks better at 100% magnification.

	* util/mql_exporter.cpp: Fixed bug whereby _all_ objects would be
	  dumped, regardless of whether a start and end monad had been
	  selected.  Also affects src/mqldump.cpp.

	* EMdF/string_func.cpp: Replaced a ".length() == 0" with
	  ".empty()" in replace_substring(), thereby making it faster.

2007-10-17 Ulrik Petersen

	* include/ViewMetrics.h: Now the five-parameter constructor for
	  ViewMetrics does not have any default values.  This change was
	  made because some compilers confused the two constructors.  Also
	  changed all the places in which this constructor was called, to
	  have all parameters.

	* wx/layout.cpp: Fixed bugs in the anchor-administration of
	  QDHTMLParser.

2007-10-16 Ulrik Petersen

	* wx/htreecanvas.cpp: Now draws vertical risers to the bottom of
	  the category label of the parent, if the vertical riser's x
	  position is within the confines of the left and right borders of
	  the parent category box.

	* wx/htreecanvas.cpp: Now HTreeNode has a "m_pMainBox" member,
	  which is the old HTerminalNode::m_pTerminalBox and the old
	  HNonTerminalNode::m_pCategoryBox.

	* wx/htreecanvas.cpp: Now placement of the "main box" (i.e.,
	  qqacategory box) of HNonTerminalNodes is by
	  m_pMainBox->GetWidthLP()/2 rather than m_width/2. The latter
	  might be larger than the former, if the labels are wider than
	  the category box.

	* wx/layout.cpp: LatinLayoutBox now honors m_bSpaceAfter.

	* wx/layout.cpp: LayoutBracketBox now honors
	  m_bSpaceAfter. Constructor has a bSpaceAfter parameter.

	* wx/layout.cpp: All HTML-related boxes now derive from a new box,
	  HTMLBox.

	* wx/layout.cpp: Added capability to find A NAME anchors.

	* wx/layout.cpp: Added capability to scroll to A NAME anchors.

	* wx/layout.cpp: Added capability to click on anchors and go
	  there.


2007-10-15 Ulrik Petersen

	* wx/layout.cpp: Added StackedLatinLayoutBox class.

	* wx/htreecanvas.cpp: The following now use LayoutBoxBase rather
	  than LayoutBox:

	  - HTreeNode
	  - HTerminalNode
	  - HNonTerminalNode

	* wx/htreecanvas.cpp: HTreeCanvas::getInterWordSpace() is now
	  based on pViewMetrics->getLatinFontHeight() rather than an
	  absolute 2 millimeter.
	

2007-10-14 Ulrik Petersen

	* Fixed bug in wx/layout.cpp: LayoutBox constructor now sets
	  'space after' to true, and 'selected' to false, rather than vice
	  versa.

	* wx/layout.cpp: Now the following have a "bSpaceAfter" parameter
	  in their constructor:

	  - LayoutBox
	  - SimpleLayoutBox
	  - LatinLayoutBox

2007-10-09 Ulrik Petersen

	* Reverted back to schema version
	  12 (EMDROS_VERSION_1_2_0_PRE_208), removing schema version
	  13 (EMDROS_VERSION_1_2_0_PRE_269).

	* Removed the database_metadata table.

	* Removed EMdFDB::getCurrentDBEncoding().

	* src/mqldump.cpp: Removed --dump-encoding switch.

	* src/mqldump.cpp: added --encoding switch.  Also documented it on
	  mqldump.1 man-page.


2007-10-08 Ulrik Petersen

	* Added rudimentary support for specifying a database encoding at
	  CREATE DATABASE time.

	* Added new schema version: 13 (EMDROS_VERSION_1_2_0_PRE_269).

	  This schema is both forwards and backwards compatible with
	  schema 12 (EMDROS_VERSION_1_2_0_PRE_208), i.e., older versions
	  can read the new one, and new versions can read the old one.

	  The only change is the addition of database_metadata, which
	  currently only uses EMDF_DATABASE_METADATA_ENCODING from emdf.h
	  to store the database encoding of the database.  The only place
	  this is read is in EMdFDB::getCurrentDBEncoding(), which in turn
	  is only used in util/mql_exporter.cpp, which in turn is only
	  used by mqldump(1), and even then only when using the
	  --dump-encoding switch.

	  So, no big deal.

	* "encoding" is now an MQL reserved word.

	* Documented it in docs/MQL-Programmers-Guide.lyx and in
	  docs/Rel-EMdF.lyx.

	* EMdF/string_func.cpp: Added charset2string().
	
	* Added the following to the EMdFDB interface:

	  - getDefaultEncoding()

	  - canDeclareEncoding()

	  - EMdFDB::createDatabase(db_name, charset, key).

	* Changed the following:

	  - EMdFDB::initializeDatabase() (to use charset parameter)

	  - EMdFDB::createDatabase(db_name, key) (to use default charset)

	  - CreateDatabaseStatement

	  - util/mql_exporter.cpp (which is used by mqldump(1)).

	* MQL/mql.yxx: Added USING ENCODING clause to CREATE DATABASE
	  statement.

	* mqldump(1) has a new flag: --dump-encoding, which is not on by
	  default.


============ 1.2.0.pre268 ============

2007-10-06 Ulrik Petersen

	* Upgraded to SQLite 3.4.2.
	

2007-10-04 Ulrik Petersen

	* Removed the ViewMetrics::m_tfkVec, which was intended as a quick
	  and dirty way of providing font-support for an intended HTML
	  widget.  The reason was that the concept of how to do it was
	  flawed.

	* Refactored wx/layout.cpp:LayoutBox such that it has a
	  LayoutBoxBase, which is used as the basis of LayoutBracketBox as
	  well.

	* Refactored wx/layout.cpp such that LayoutBoxBase has a boolean,
	  m_bSpaceAfter, which is used to control whether there is a space
	  after the box.  Refactored LayoutLine, LayoutParagraph, and
	  LayoutCanvas to follow suit.

	* wx/layout.cpp: LayoutLine now holds LayoutBoxBase objects, not
	  LayoutBox.  This means that you may have to rewrite your code to
	  use LayoutBoxBase objects, if you use any of the interfaces from
	  include/layout.h.

	* wx/layout.cpp: LayoutBoxBase::DrawBox is now present, and used
	  in both LayoutBox and LayoutBracketBox.  That is,
	  LayoutBracketBoxes may now be selected!

	* wx/layout.cpp: Added the following classes:

	  - ZeroWidthHTMLBox
	  - AnchorBox

	* EMdF/string_func.cpp: Added double2string().

	* wx/viewmetrics.cpp: Added HTMLFontAttributes class.

	* wx/viewmetrics.cpp: Added String2PFontTrie class.

	* wx/viewmetrics.cpp: Added HTML Font- and Tag-machinery to
	  ViewMetrics.

	* wx/layout.cpp: Added HTML capabilities to LayoutCanvas.

	* wx/layout.cpp: Added QDHTMLHandler, as a small HTML parser.  It
	  currently knows the following tags:

	  - h1
	  - h2
	  - p
	  - hr
	  - b
	  - em
	  - u 
	  - sup
	  - a name
	  - a href

	* wx/layout.cpp: Added HTMLCanvas.
	
2007-09-28 Ulrik Petersen

	* Bugfix: A serious bug was fixed in mqldump that would cause some
	  objects not to be dumped under the following conditions:

	  - More than one object of the same type had the same
	    starting-monad.

	  Under these conditions, only one object would be dumped, not the
	  rest.

	* Removed Inst::next(), which was obsolete, and which was also the
	  cause of the problem in mqldump.

	* SELECT ENUMERATION CONSTANTS (EMdFDB::getEnumerationConstants)
	  now does an ORDER BY in the SQL, thereby guaranteeing the output
	  order.  The lack of an ORDER BY was a problem with newer
	  versions of PostgreSQL, which would give a different answer than
	  SQLite 2/3.

============ 1.2.0.pre267 ============

2007-09-26 Ulrik Petersen

	* Upgraded to wxWidgets 2.8.5 on Win32 in win32/config.mak.in.

	* Removed SWIG_EXE from win32/config.mak.in.
	

2007-09-08 Ulrik Petersen

	* Added a horizontal tree layout canvas (HTreeCanvas):

	  - wx/htreecanvas.cpp
	  - include/htreecanvas.h

	* Added a test of the horizontal tree layout canvas:

	  - tests/htreetest.cpp
	

2007-08-29 Ulrik Petersen
	
	* debug.h: ASSERT_THROW now actually prints the line number,
	  rather than "__LINE__".

2007-08-23 Ulrik Petersen

	* Fixed bugs in win32/body.mak as per James van Noord's email of
	  today.

2007-08-17 Ulrik Petersen

	* wx/layout.cpp: LayoutCanvas::AddBox() now has a new parameter,
	  bParagraphOwnsBox, which defaults to true.
	
	* Chunking tool: The regeneration of the display is now faster,
	  because we cache the LayoutBox objects.

============ 1.2.0.pre266 ============

2007-08-15 Ulrik Petersen

	* wx/vtreecanvas.cpp: Remove the "UpdateAllViews();
	this->Refresh();" sequence from VTreeCanvas::HandleButtonDown().
	This is better handled in the descendant class.
	
============ 1.2.0.pre265 ============

2007-08-03 Ulrik Petersen
	
	* EMdF/emdfdb.cpp: objectTypeExists() (both overloaded methods)
	  now don't issue an extra getLargestObjectLength if not
	  necessary.

	* EMdF/emdfdb.cpp: getInst() now doesn't care about
	  largest_object_length.  The reason is that it is not necessary
	  for getInst(): For getInst() we want all those o that, for a
	  given Substrate Su, conform to this formula:

	  o.first() >= Su.first() and o.last() <= Su.last().

	  But since forall o: o.first() <= o.last()

	  this can be rewritten to:

	  o.first() >= Su.first() and o.first() <= Su.last().

	  Hence, we do not need to care about largest_object_length.

	* EMdF/emdfdb.cpp: It used to be the case that, whenever a STRING
	  FROM SET feature was used, getInst() and
	  getObjectsHavingMonadsIn() would retrieve _all_ strings before
	  even running the main query.

	  This was highly inefficient if: a) There were only a small
	  number of FROM SET features to be gotten, and/or b) The number
	  of objects to be retrieved was small.

	  Hence, I reinstated some of the behavior from of yore, when a
	  JOIN would take place.  An arbitrary number of possible joins
	  was chosen, namely 3.  If there are more than 3 joins, we fall
	  back to the old behavior of retrieving all strings before
	  running the query, but only for those features that come after
	  the 3rd FROM SET feature.

	* include/emdfdb.h: Added EMdFDB::getMaxNoOfJoins().  This is for
	  saying how many joins we maximally want to perform in a single
	  query.  It is used in the implementation of GET OBJECTS HAVING
	  MONADS IN and SELECT ALL OBJECTS.

	* include/sqlite3emdfdb.h: Set getMaxNoOfJoins() to 0, since
	  SQLite 3.4.0, for some reason, isn't very fast on CROSS JOINs,
	  which is what I produce by default when querying for FROM SET
	  strings.

2007-07-18 Ulrik Petersen

	* util/pennlexer.re: Removed the debugging output.



============ 1.2.0.pre264 ============

2007-07-15 Ulrik Petersen

	* wx/layout.cpp:LayoutCanvas::OnMouseEvent: event.Skip() is also
	  called even if the event is a ButtonDown event.  This makes it
	  possible for the underlying window to get the focus upon
	  left-click.  Also enables wheel-scrolling on Windows.

	* wx/vtreecanvas.cpp:VTreeCanvas::OnMouseEvent: ditto.
	
2007-07-14 Ulrik Petersen

	* wx/layout.cpp:LayoutCanvas::OnMouseEvent: event.Skip() is called
	  if the event is not a ButtonDown event.  This causes the
	  scroll-wheel to function.

============ 1.2.0.pre263 ============

2007-07-13 Ulrik Petersen

	* VTreeCanvas::OnMouseEvent now calls event.Skip() if it is not a
	  ButtonDown event.  This causes the scroll wheel to function.

2007-07-10 Ulrik Petersen

	* Changed the way configure.ac checks for wxWidgets: NONUNICODE is
	  now only built if non-unicode capabilities really are present.

	* configure.ac now reports on whether wxWidgets is to be built
	  with Unicode and/or Non-Unicode.
	
2007-07-06 Ulrik Petersen

	* Changed the following files to have "..." rather than <...>
	  around some #includes:

	  - util/pennlexer.re
	  - src/qrytool/solution.h
	  - src/qrytool/mytable.cpp
	  - src/qrytool/mqlqt.cpp
	  - src/qrytool/mainframe.cpp
	  - src/qrytool/solution.cpp
	  - src/qrytool/qtconnwizard.cpp

	This in anticipation of the following item:

	* Removed /I "." from win32/body.mak, and "-I." from
	  src/qrytool/Makefile.am.  The reason for this was a desire to be
	  able to #include <...> global files using Visual C++ which
	  conflicted with a local file.

============ 1.2.0.pre262 ============

2007-07-03 Ulrik Petersen

	* Upgraded to SQLite 3.4.0.

2007-06-26 Ulrik Petersen

	* Changed include/viewmetrics.h and wx/viewmetrics.cpp so as to
	  provide initial support for a HTML-like renderer.

	* Added LayoutAnchorBox to include/layout.h.
	
============ 1.2.0.pre261 ============

2007-06-25 Ulrik Petersen

	* Fixed XML Parser (EMdF/qdxml.cpp:QDParser) such that it can
	  correctly parse stuff after comments.

	* Gave the XML parser (EMdF/qdxml.cpp:QDParser) a speedup by
	  giving it a buffer, instead of calling std::istream::getc() all
	  the time.

	* Added tests/qdtry.cpp, to parse an XML file.  It is only built
	  on platforms that use the automake facility (i.e., non-Windows,
	  non-DJGPP).

	* Added a comment-test to the MiniDOM test in tests/emdftry.cpp.

	* Redefined MQL/mql_gq.re:BSIZE from 8192 to 1024*1024.
	
============ 1.2.0.pre260 ============

2007-06-25 Ulrik Petersen

	* Fixed util/pennlexer.re, which had been broken since it was
	  introduced in 1.2.0.pre259.

	* Added -ldl to
	  sqlite3/src/Makefile.am:libsqlite3_emdros_la_LDFLAGS.  This was
	  again forced upon me by an upgrade of Linux distribution (Ubuntu
	  7.04).

	* Fixed examples/HAL/hallexer.re, which had been broken since it
	  was introduced in 1.2.0.pre259.
	
============ 1.2.0.pre259 ============

2007-06-24 Ulrik Petersen
	
	* emdros.spec.in: Changed %doc %{prefix}/man/man1/* back to %doc
	  %{prefix}/share/man/man1/* . I don't know why I had to change it
	  in pre255, but it appears to have been changed back.  Perhaps an
	  oddball version of automake, that didn't define mandir as being
	  based on datadir.

	* emdros.spec.in: Changed the rel %define to 1.f7, since I have
	  upgraded to Fedora 7.

	* Got rid of some warnings in EMdF/qdxml.cpp about uninitialized
	  variables.  The variables could not be used uninitialized, like
	  gcc claimed, but better shut it up...

	* Got a speedup on lexing integers in MQL/mql.re.

	* Added copyright information to MQL/mql.re.

	
2007-06-23 Ulrik Petersen

	* Replaced flex-generated scanners with re2c-generated ones.

	  The version of re2c uses right now is re2c 0.12.1.

	  http://re2c.org

	  New files:

	  - MQL/mql_gq.re
	  - MQL/mql.re
	  - include/mql_lexer.h
	  - include/mql_gq.h
	  - include/
	  - util/pennlexer.re
	  - examples/HAL/hallexer.re

	  Removed files:

	  - ./examples/HAL/lexer3.sed
	  - ./examples/HAL/lexer1.sed
	  - ./MQL/lexer1.sed
	  - ./MQL/lexer2.awk
	  - ./MQL/lexer3.sed
	  - ./MQL/parser1.sed
	  - ./util/pennlexer1.sed
	  - ./util/pennlexer2.awk
	  - ./util/pennlexer3.sed
	  - ./examples/HAL/lexer1.sed
	  - ./examples/HAL/lexer3.sed

	  Removed YYSTYPEs completely.

	  The reason for these changes were my upgrade to Fedora 7.
	  Briefly, Fedora 7 carries flex 2.5.4 as a "compat-flex" package,
	  with a funny executable name.  That is, the "flex" pacakge is
	  version 2.5.33.  Now, flex 2.5.33 works fine as a C scanner, but
	  is has memory leaks in the C++ scanner.  Furthermore, the flex
	  maintainers have publicly said that the C++ scanner in flex is
	  experimental and unstable, and that bugs are unlikely to be
	  fixed.

	  Hence, i looked for something new.  I found re2c, which is
	  available both on Debian/Ubuntu and on Fedora.  It turned out it
	  was not so difficult to use.

	  Also, after my upgrade, YYSTYPE conflicted with a Perl
	  system-header when compiling the the Perl bindings.

	  It was time to move on.

	

============ 1.2.0.pre258 ============

	
2007-06-22 Ulrik Petersen

	* Added AM_PROG_CC_C_O to configure.ac, due to Automake 1.10
	  complaining about sqlite/src/tclsqlite.c.

	* include/Makefile.am now distcleans emdros-config.h.in.  This is
	  because it is entirely generated by autoreconf.

	* Improvements to SWIG/cshap/TestEmdros.cs.in

	
============ 1.2.0.pre256/257 ============

2007-06-07 Ulrik Petersen

	* Cleaned up StartMonadIterator, so that it now has two descendant
	  classes: InstStartMonadIterator, and MonadSetStartMonadIterator.
	  This was necessary because the Perl bindings wouldn't compile if
	  mql_query #include'd <inst.h>, for some strange reason.

	* Removed BlockStr from code.

	* Removed kObjectBlockSTAR from code.

	* Reinstated some of the old test results (notably
	  w.r.t. NOTEXIST) in tests/mqlqa.h.in.

	* Fixed NOTEXIST operator in MQL/mql_R.cpp.

	* Now checks whether there are two power blocks next to each
	  other, and complains if this is so.

	* Added some checks to tests/mqlqa.h.in.

	* Updated doc/MQL-Query-Guide.lyx and
	  doc/MQL-Programmers-Guide.lyx to reflect new language features.

	* Fixed the bug that one could specify power blocks in wrong
	  places.  Also added regressing tests for this.

2007-06-06 Ulrik Petersen

	* Removed m_success from ListOfStraws.

	* Added SOMConstMonadIterator::current().

	* Added to ObjectBlock:
	  - ObjectBlock::m_bIsFirstInBlockString
	  - ObjectBlock::m_bIsLastInBlockString
	  - ObjectBlock::isFirstInBlockString()
	  - ObjectBlock::isLastInBlockString()
	  - ObjectBlock::isSoleBlockInBlockString()

	* Lots of changes to topographic MQL:

	  * Did away with the [wrap] block.

	  * All blocks (except power block) are now allowed
	    after a power block.

	  * You can do [ arbitrary grouping ] with [square brackets].

	  * A STAR construct is now allowed on not just an object block,
	    but also an arbitrary group.

	  Thus MQL is more powerful now than before.  It is also about 8%
	  slower, though.

============ 1.2.0.pre255 ============

2007-05-27 Ulrik Petersen

	* Bumped wxWidgets version in win32/config.mak.in to 2.8.4.

	* Added instructions in win32/README.txt for how to build
	  wxWidgets on Windows.

	* Fixed memory leak in Block dtor: m_wrap_block was not being
	  deleted!

	* Changes to the way SWIG/csharp/CSharpSources.zip is being made.

	* Changes to the way SWIG/csharp/ll.txt is being made.

	* emdros.spec.in: Changed %doc %{prefix}/share/man/man1/* to 
	  %doc %{prefix}/man/man1/* .

============ 1.2.0.pre254 ============

2007-05-21 Ulrik Petersen

	* Changes to the C# bindings:
	  
	  - Namespace is now Emdros rather than org.emdros.
	  - The .Net DLL is now EmdrosDotNet.dll rather than csemdros.dll.
	  - The native DLL is now csemdros.dll on Win32.
        
	* Changes to distribution-mechanism of C# bindings:

	  - Now works on Win32
          - Sources are now in CSharpSources.zip


2007-05-19 Ulrik Petersen

	* Fixed a GNU-ism in EMdF/qdxml.cpp.

	* The std::string parameters to QueryAnswer's ctor in
	  tests/qa2h.py are now const char *.  This is a workaround for a
	  limitation in Microsoft's Visual Studio 2005 C++ compiler.

	* On Win32, the Java and Python bindings now link against SQLite 3
	  if necessary.

	* Added a beta-quality C# SWIG binding.  

============ 1.2.0.pre253 ============

2007-05-16 Ulrik Petersen

	* Speed-improvements to the VTreeCanvas code, and the Layout code.

2007-05-13 Ulrik Petersen

	* Updated util/tigerxmlimporter.cpp so that it compiles with the
	  Sun CC compiler.

	* Fixed src/qrytool/qtconnwizard.cpp in order to compile with the
	  Sun CC compiler.
	
2007-05-08 Ulrik Petersen

	* Completely reimplemented the QDParser (XML parser), so that no
	  code of the original remains.  This should get rid of any
	  Copyright issues that might have remained.

============ 1.2.0.pre252 ============

2007-05-03 Ulrik Petersen

	* Bugfix: Under certain circumstances, if an object type had no
	  objects, and a DELETE OBJECTS was issued on this object type,
	  then the DELETE OBJECTS would fail.  This has been fixed.

	  This had an impact on the ability of the Chunking Tool to save
	  chunks.  It said that a database error had occurred, whenever
	  one tried to commit the changes to the database.

	* Added EMdFDB::objectTypeHasObjects().

	* Added a test to tests/mqlqa.h.in.

	* Chunking Tool:

	  - Now keeps the currently selected box selected, even after a
	    split or merge.
	
	  - Updated About box to display the Emdros version, and bumped
	    version number to 1.1.0.

	* Various changes to the win32 make files.

	* Removed an #ifndef WX_PRECOMP ... #endif from
	  src/qrytool/qtconnwizard.cpp.

2007-05-02 Ulrik Petersen

	* Added two more queries to tests/mqlqa.h.in, bringing the total
	  to 287.

	* llist.h: Added:
	  - Llist<T>::erase(),
	  - Llist<T>::insertBefore()
	  - LlistIterator<T>::LlistIterator(Llist<T> *pMotherList, 
	                                    Lnode<T> *pNode).

	* Moved util/qdxml.cpp to EMdF/qdxml.cpp.
	
	* Added include/minidom.h and EMdF/minidom.cpp.

	* Added some tests to emdftry.cpp for MiniDOM.

============ 1.2.0.pre251 ============

2007-05-01 Ulrik Petersen

	* Added a [wrap] block, including documentation.

============ 1.2.0.pre250 ============

2007-05-01 Ulrik Petersen

	* sqlite3/src/Makefile.am: Added a lot of test files to
	  CLEANFILES.

2007-04-27 Ulrik Petersen

	* Fixed doc/Rel-EMdF.lyx's section on feature types, since it was
	  out-of-date.

	* Almost finished the Query Tool Connection Wizard. 

	  What is left:
	  1) An 'output area options' page; 
	  2) A 'summary' page; 
	  3) Editing rather than creating... 
	  4) Test, test, test.

	* DropdownWidget now has a default width of 100.

============ 1.2.0.pre249 ============

2007-04-27 Ulrik Petersen

	* Upgraded SQLite3 to version 3.3.17.

	* Now distributes RPM-GPG-KEY-ulrikp_emdros_org with the sources,
	  so that I can sign the rpm files.

============ 1.2.0.pre248 ============

2007-04-20 Ulrik Petersen

	* Upgraded SQLite3 to version 3.3.16.

2007-04-15 Ulrik Petersen

	* Added some more wizard pages to the configuration wizard in the
	  Emdros Query Tool.

	* Improved OrderChooserWidget and DropdownWidget.

2007-04-14 Ulrik Petersen

	* Added wx/wxorder_chooser.cpp.

	* Added wx/configwizard.cpp: GetOrderOfStringVecPage class.

	* Added some more wizard pages to the configuration wizard in the
	  Emdros Query Tool.
	

2007-04-06 Ulrik Petersen

	* Made some improvements to the Win32 build.

	* Improved and simplified the Query Tool:

	  - Did away with data_feature_interlinear_line and
	    output_area_interlinear_lines in the configuration. Instead,
	    the number of interlinear lines is now equal to the greatest
	    number of data_feature keys for any object type, and the order
	    is the same as for the data_feature keys.

	  - Did some work on the configuration wizard.

============ 1.2.0.pre247 ============

2007-04-05 Ulrik Petersen

	* Importer Wizard now supports TIGER XML.

	* Added EMdF/string_func.cpp:long2utf8().

	* qdxml.cpp now handles encoding given in XML declaration.


2007-04-04 Ulrik Petersen

	* EMdF/string_func.cpp: Added string_ends_with().

	* Added a "Quick 'n Dirty XML SAX-like parser:

	  - util/qdxml.cpp
	  - include/qdxml.h

	* Added a TIGER XML importer:

	  - util/tigerxmlimporter.cpp
	  - include/tigerxmlimporter.h
	  - src/tigerxmlimport.cpp
	  - doc/tigerxmlimport.1

	* Added EMdF/string_func.cpp: hex2long()

	* Added include/pennimporter.h: EmdrosMemObject::getID_D().
	

2007-03-30 Ulrik Petersen

	* Fixed some (not-so-serious) memory leaks in CREATE OBJECT,
	  UPDATE OBJECT, and SELECT ALL OBJECTS.
	

============ 1.2.0.pre246 ============

2007-03-30 Ulrik Petersen

	* Updated MQL-Programmers-Guide.lyx and MQL-Query-Guide.lyx with
	  new "marks".

	* Decoupled marks from retrieval: They are now wholly independent.

============ 1.2.0.pre245 ============

2007-03-30 Ulrik Petersen

	* Win32 build now uses wxWidgets 2.8.3 by default.

	* The tarball now has updated SWIG bindings (pre244 was packaged
	  with SWIG bindings that didn't compile against the rest).

	* The constructor for MatchedObject that defines an ID_M MO is no
	  longer SWIG'ified.  The reason is that doing so would add a
	  pObjectBlockBase pointer, which is not part of the public API.
	

============ 1.2.0.pre244 ============

2007-03-30 Ulrik Petersen

	* Fixed bug in EMdF/emdfdb.cpp: addFeature() failed to call
	  createFeature() before addFeatureToOT_objects, which resulted in
	  not being able to UPDATE OBJECT TYPE with an "ADD feature" on
	  PostgreSQL and MySQL, if that feature was a STRING FROM SET or
	  ASCII FROM SET.  The problem was that the StringSet table was
	  not there, yet we tried to get the default value in
	  addFeatureToOT_objects.

	* Added "marks" capability to topographic queries.  That is,
	  Object Blocks, Gap Blocks, and Opt Gap Blocks can now have
	  strings of the form given by the regular expression
	  "(`[a-zA-Z_][a-zA-Z0-9_]*)+" right after the object type or
	  "gap" / "gap?".  This can be retrieved with
	  MatchedObject::getMarksString().

	  - Now (Opt)GapBlocks also use ObjectBlockBase to store
	    information, and ObjectBlockBases are added to the OBBVec for
	    (Opt)GapBlocks.
	
2007-03-14 Ulrik Petersen

	* Added a lot of tests to mqltry, via tests/mqlqa.h.in.
	  Especially error conditions are now more thoroughly checked.

	* Added
	  MQL/mql_segment_statement.cpp:CreateSegmentStatement::symbol().

	* Added a lot of error statements to various parts of MQL.

	* Bugfixed MQLMonadSetElement::weed.

	*
	  MQL/mql_helper_classes.cpp:ECDeclaration::symbolValueMoreThanOnce()
	  now checks that the same enum constant is not declared more than
	  once.

============ 1.2.0.pre243 ============

2007-03-12 Ulrik Petersen

	* Added ANALYZE as a command to the VACUUM procedure on SQLite 3,
	  if the user gave the ANALYZE keyword in the MQL.

============ 1.2.0.pre242 ============

2007-03-10 Ulrik Petersen

	* Optimized the usage of StringSetCache objects in EMdFDB by using
	  vectors of pointers to StringSetCache objects instead of going
	  through EMdFDB::m_string_sets_cache.

2007-03-09 Ulrik Petersen

	* Added EMdF/string_set_cache.cpp and accompanying
	  include/string_set_cache.h file.

	* Implemented the new string set cache in EMdFDB.

	* Removed EMdFDB::loadStringsFromSet() and
	  PgEMdFDB::loadStringsFromSet(), since they were not being used!

	* Changed the name EMdFDB::getStringSetStringsAndAddToCache() into
	  EMdFDB::getStringSetStrings(), and also did this in
	  MQL/mql_features_statements.cpp.

	* Added EMdFDB::loadStringSetIntoCache().

2007-03-04 Ulrik Petersen

	* SQLite 2 backend: Now "SELECT sequence_id" is used rather than
	  "SELECT MAX(sequence_id)" for sequences.  This gives a very nice
	  speedup on things like CREATE OBJECT(S) queries.

	* Same thing for SQLite 3 backend.

	* SQlite 2 backend: Now doesn't deleteRedundantSequenceInfo, since
	  it is not necessary with the new UPDATE structure (which is
	  quite old).

	* Same thing for SQLite 3 backend.

	* SQLite 2 and SQLite 3: Now uses the autoincrement facility in
	  INTEGER PRIMARY KEY directly in the _set tables for StringSet
	  tables:

	  - Added EMdFDB::addStringToStringSetTable, which has a default
	    implementation using getNextOtherID_D.

	  - Added SQLiteEMdFDB::addStringToStringSetTable, which uses the
	    autoincrement feature.
	    
	  - Added SQLite3EMdFDB::addStringToStringSetTable, which uses the
	    autoincrement feature.

	* Speed improvements were made to the CREATE OBJECTS WITH OBJECT
	  TYPE and UPDATE OBJECT statements.  These were due both to the
	  above enhancements, and to a new way of doing symbol- and
	  type-checking in the FeatureAssignments class.

	* Bugfix on SQLite 2 for GET OBJECTS HAVING MONADS IN: When
	  GETting features such that more than 31 joins are made (e.g., if
	  you are using more than 31 strings that are declared FROM SET),
	  you may get wrong results on SQLite 2.  This is because SQLite 2
	  cannot handle 32 or more joins.  This has been fixed, by first
	  caching all FROM SET strings necessary, then looking the strings
	  up in the cache by their id_d.

	* The preceding bugfix also proved to be a speed enhancement.

	
2007-03-03 Ulrik Petersen

	* SQLite3 backend: All text (including LIST OF X) is now stored as
	  TEXT rather than BLOB.  This means that: a) SQlite3 is much
	  faster, and b) you now cannot store anything that is NOT UTF-8,
	  and c) the db-format is now backwards incompatible with anything
	  that was created with Emdros-on-SQLite3 before.

2007-02-28 Ulrik Petersen

	* wx/layout.cpp:LayoutBox::DrawBox now also does the right thing
	  on Win32.

	* src/qrytool/mainframe.cpp: Now uses wxConfig to save the
	  currently used directory for saving/loading the query file.

	* src/qrytool/mainframe.cpp: MainFrame::OnFileSaveAs(): Now
	  doesn't give full path as the file name, but only the filename
	  path.  This especially caused problems on Mac OS X, where the
	  slashes ("/") got translated into dashes ("-").

	* src/qrytool/mainframe.cpp: Another attempt was made at removing
	  the "parse error at token character" in the Query Tool on Win32.

	* src/qrytool/mainframe.cpp: Updated About box with new eqt
	  version and a Copyright year range (2005-2007).

	* examples/ChunkingTool/ctmf.cpp: Updated About box with new
	  Chunking Tool version and a copyright year rante (2005-2007).

============ 1.2.0.pre241 ============

2007-02-27 Ulrik Petersen

	* Mac OS X Change: the wxWidgets programs are now told, with
	  /Developer/Tools/SetFile, that the .app bundle has a custom
	  icon: 

	  - examples/ChunkingTool/Makefile.am
	  - src/importtool/Makefile.am
	  - src/qrytool/Makefile.am

2007-02-28 Ulrik Petersen
	
	* wx/layout.cpp:LayoutBox::DrawBox did() not do the right thing on
	  wxWidgetes 2.8.0 on Mac OS X.  The reason was that wxDC::Blit
	  only worked with wxCOPY, and not with wxSRC_INVERT as was being
	  used.  Thus wxDC::Blit always returned false, and didn't do
	  anything; thus the box was never inverted.  I solved this by
	  using DrawRectangle with a white brush, a white pen, and
	  pDC->SetLogicalFunction(wxINVERT).

============ 1.2.0.pre240 ============

2007-02-22 Ulrik Petersen

	* EMdF/emdf_ffeatures.cpp: Fixed bug on Solaris, with MySQL
	  version 5.0.24a, where the following two queries are not
	  equivalent:

	  mysql> SELECT NOT (4 IN (3,5));
	  +------------------+
	  | NOT (4 IN (3,5)) |
	  +------------------+
	  |                1 |
	  +------------------+
	  1 row in set (0.01 sec)

	  mysql> SELECT NOT 4 IN (3,5);
	  +----------------+
	  | NOT 4 IN (3,5) |
	  +----------------+
	  |              0 |
	  +----------------+
	  1 row in set (0.00 sec)

	  What I did was to add parentheses around the ffactor when doing
	  NOT in EMdFFFactor.

2007-02-21 Ulrik Petersen

	* Integrated EmdrosImportTool.app into macdist.

	* Fixed bug in util/pennparser.yxx whereby no kPennRoot would be
	  created if there was not an extra set of parentheses around the
	  tree.  Fixed it by adding a call to PennTreeNode(T) on the tree
	  T in the case where there are no parentheses around the tree for
	  top_tree.

	* Fixed bug in src/qrytool/mqlqtwx.cpp: app_prefix() returned the
	  wrong directory ("..\etc\") on Win32 rather than the correct
	  "..\etc\qrytool".

	* On Windows, the win32/emdros.nsi.in file now emits
	  Emdros-@VERSION@-setup-windows.exe rather than
	  Emdros-win32-@VERSION@.exe. This is because the average user is
	  not expected to know about Win32 (the API), but does not about
	  Windows.

	* wx/conndlg.cpp:ConnectionPanel() now actually remembers its
	  settings from last use, by calling writeConfig in its
	  destructor, which is newly added.

	* Beautified and expanded the About Box in Emdros Query Tool.

	* Emdros Query Tool and Emdros Chunking Tool now do not set the
	  ConnectionDialog's data after creating it... instead,
	  ConnectionPanel::readConfig() is used!

	* ConnectionPanel now remembers backend as well as db username and
	  hostname in config.

============ 1.2.0.pre239 ============

2007-02-21 Ulrik Petersen

	* Fixed bug in wx/conndlg.cpp whereby MySQL might not get shown in
	  the list of options for backend.

2007-02-09 Ulrik Petersen

	* Fixed obscure "bug" (which would never get triggered, or only
	  very, very, very rarely) in R_block(), the NOTEXIST part: R_inst
	  got called with U rather than Uping.  This would only cause a
	  problem if we were doing R_object_block_DB rather than
	  R_object_block_inst, but we don't do that, I don't think.

============ 1.2.0.pre238 ============
	
2007-02-07 Ulrik Petersen

	* Added blue-E.ico to all Win32 wxWidgets programs.

	* src/importtool/Makefile.am now knows how to build
	  ImportToolUsersGuide.htb.

2007-02-06 Ulrik Petersen

	* Upgraded to wxWidgets 2.8.0 on Windows.

	* Fixed bug in wx/conndlg.cpp: All "wx/" files were surrounded by
	  #ifndef WX_PRECOMP ... #endif, whereas it should only be
	  "wx/wx.h".

	* win32/emdros.nsi.in: Added another level of directory
	  indirection to the Emdros .exe applications in the Start menu:
	  "Applications - Non-Unicode" vs. "Applications - Unicode".
	
2007-02-02 Ulrik Petersen

	* Hopefully the problem with "syntax error: character 0xb" or the
	  like in the graphical query tool before using 'OnFileNew' has
	  been fixed.

	* Updated win32 build machinery for installing Emdros Import Tool.

2007-01-30 Ulrik Petersen

	* Added some clarifying comments to MQL/mql_R.cpp.  No code
	  change.

2007-01-28 Ulrik Petersen

	* Finished the implementation of ImportWizardTool.  Thanks to
	  Martin Petersen for implementing most of it.

	

============ 1.2.0.pre237 ============

2007-01-27 Ulrik Petersen

	* Got rid of ObjectBlockBase::m_bIsLastInBlocks (and
	  ObjectBlockBase::isLastInBlocks), since it was never used.

	* Now sets all members of ObjectBlockBase in all constructors.
	  The absence of initialization of some of the members did not
	  cause problems, since they were either initialized later on, or
	  never used.  But initializing them is called 'defensive
	  programming'.

	* MQLExecEnv's destructor failed to delete the individual
	  ObjectBlockBase objects in pOBBVec.  This did not cause memory
	  leaks under normal circumstances, but if an EMdFDB exception was
	  thrown during R_topograph execution, it might have led to a
	  memory leak.  Now MQLExecEnv's destructor deletes the individual
	  ObjectBlockBase objects if pOBBVec is non-nil and non-empty.

	* wx/conndlg.cpp:ConnectionPanel now reads and writes to a
	  wxWidgets configuration file for the default place to look for
	  the Emdros configuration file, and the default place to look for
	  the database file.

	* Set this up in the following apps:

	  - Query Tool
	  - Import Tool
	  - Chunking Tool

	* include/conf.h now has a typedef that maps to a function-pointer
	  with the same signature as app_checkConfiguration.  This is used
	  in wx/conndlg.cpp:{ConnectionPanel,ConnectionDialog) to provide
	  the callback for app_checkConfiguration.  This is necessary
	  because libemdrosgui needs to be self-contained, without
	  undefined symbols.  This is a requirement in ALT Linux, which
	  ships Emdros.

2007-01-25 Ulrik Petersen

	* Got rid of the call to sqlite3OsFileExists and
	  sqlite3UnixFileExists if on Unix, Linux, or Mac OS X (i.e., if
	  not doing Win32).

	* Got rid of the HAVE_SQLITE3OSFILEEXISTS AC_SUBST and define.

	* Added --enable-local-pcre to configure.ac.  The semantics is to
	  enable it by default, and to only disable it iff we have libpcre
	  and pcre.h on the system, and we have --disable-local-pcre as a
	  switch.

2007-01-24 Ulrik Petersen

	* Added the rudiments of an Import Tool built with wxWidgets.  It
	  is not functional yet!

	* Made the destructors virtual in the following classes:

	  - PlainTextImporter
	  - SFMImporter
	  - SlashedTextImporter
	  - NEGRAImporter

	* Made UnboundBibleImporter be a descendant of Emdros
	  ImporterBase.

	* Moved EmdrosMemObject from unboundbibleimporter.h into
	  pennimporter.h.

============ 1.2.0.pre236 ============

2007-01-21 Ulrik Petersen

	* Bugfix: mql_helper_classes.cpp: CreateObjectsStatement (CREATE
	  OBJECTS WITH OBJECT TYPE) had a bug whereby if a feature
	  differed in case between the way it was declared (in CREATE
	  OBJECT TYPE) and in the CREATE OBJECT statement, MQL would
	  segfault.  This has been fixed.

	  The problem was that CreateObjecstStatement::exec did not
	  lowercase the names of the features when putting them into the
	  object_type_features map, whereas
	  FeatureAssignment::makeFeatureArray needed them lower-cased.

	* EMdF/emdfdb.cpp:createFeature() now lower-cases the feature name
	  before doing anything with it.  This means that it gets into the
	  cache lower-cased.

	* Changed a test in tests/mqlqa.h.in such that the new
	  lower-casing in emdfdb.cpp and the new bugfix were tested.
	
============ 1.2.0.pre235 ============

2007-01-21 Ulrik Petersen

	* Added rudimentary support for Mac OS X Universal Binaries, with
	  --enable-universal_binary for configure.

	* On Mac OS X, the AC_SUBST variable BIG_ENDIAN is now set to
	  __BIG_ENDIAN__.  This will help in making universal binaries.

	* Made configure.ac and wx/vtreecanvas.cpp work with wxWidgets
	  2.8.0.

============ 1.2.0.pre234 ============

2007-01-20 Ulrik Petersen

	* Removed the following dead code in MQL/mql_query.cpp and
	  include/mql_query.cpp:

	  - BlockStr::BlockStr(ObjectBlock* notexist_object_block);
	  - Power::Power()

	* tests/mqlqa.h.in: Added a lot of tests, bringing the total up
	  above 225.  This especially increased the coverage in
	  mql_query.cpp.

	* Made the following changes to the Makefile.am's:

	  - All libraries except SWIG libraries are now installed in
	    "libdir" rather than in "pkglibdir."
          - libutil_emdros is now a libtool library.
	  - libteckit is now a libtool library
	  - libemdrosgui(u) are now libtool libraries
          - examples/HAL/Makefile.am: now uses -L and -l to link to
	    libhal, rather than linking directly to libhal.a.
	  - examples/HAL/Makefile.am and src/qrytool/Makefile.am: Now
	    DEPENDENCIES use lib{hal,qrytool}.a rather than the full path.
	    This is due to ALT Linux having problems if I do the latter.

	* Added "theOptionMap" declaration to util/opt.cpp, and removed it
	  from all other .cpp files.

	* Changed emdros.spec.in such that lib/ rather than lib/emdros/ is
	  included in the RPM.

	* emdros.spec.in now always installs in /usr rather than in
	  @prefix@.

	* The checks for libsqlite3 and libsqlite now work better in
	  configure.ac.

	* EMdF/sqlite3conn.cpp was updated yet again because of the
	  sqlite3OsFileExists issue.  Hopefully it has been resolved now.

	* configure.ac now checks for presence of sqlite3OsFileExists, if
	  we are doing the system sqlite3 library.  This is used in
	  EMdF/sqlite3conn.cpp.

	* In order to make tests/mqlqa.h.in be uniform across all
	  backends, the following changes were made:

	  - EMdF/emdfdb.cpp:getMonadsFromID_Ds now has an ORDER BY clause.

	  - EMdF/emdfdb.cpp:getObjectsHavingMonadsInMonadSet now has an
	    ORDER BY clause.

	* emdros.spec.in now has %{prefix}/share/man/man1 rather than
	  %{prefix}/man/man1.

	* emdros.spec.in: Made devel package which includes SWIG bindings.

	* emdros.spec.in: Now always compiles with --disable-static
	  --disable-dependency-tracking --enable-debug.

	* emdros.spec.in: Now has a %changelog section.

	* EMdF/string_func.cpp: Added the option "2" for figuring out the
	  backend (for SQlite 2).
	
	* util/opt.cpp: Added SQlite 3.X.X usage docs, as well as the "2"
	  for SQlite 2.

	* Renamed halblddb to hal_build_db on win32, as it has been on
	  Linux/Unix for some time.

2007-01-19 Ulrik Petersen

	* MQL/mql_query.cpp: Got rid of all the hasFirstLast machinery,
	  since it wasn't used.

	* tests/mqlqa.h.in: Added a lot of tests, bringing the total up
	  above 190.

2007-01-18 Ulrik Petersen

	* Changed the following files such that only files not built are
	  in CLEANFILES.  Instead, built files are now in DISTCLEANFILES:

	  - src/qrytool/doc/Makefile.am
	  - doc/progref/Makefile.am
	  - doc/Makefile.am
	  - examples/ChunkingTool/doc/Makefile.am
	  - examples/HAL/doc/Makefile.am

	  Hopefully this will make it easier for other people to install,
	  since a "make clean" won't make them go hunting for packes lige
	  latex2html and transfig, both of which are required to "make
	  dist" from a distcleaned source directory.

	* Added some more tests to mqlqa.h.in, bringing the total up above
	  175.

2007-01-17 Ulrik Petersen

	* Added more MQL test machinery in tests/ by adding mqlqa.h.in and
	  qa2h.py.  This will make it easier for me to add tests.

	* Added more than 150 tests to mqlqa.h.in.

	* Bugfix: GET OBJECTS HAVING MONADS IN would fail with segfault if
	  a GET ALL clause was added for getting features.  This was
	  because Feature::assignListIndexes was never called.  It is now
	  public (it was private), and is called in
	  GetObjectsHavingMonadsIn::symbol().

	* SELECT FEATURES statement's Symbol stage now says something
	  meaningful when the object type doesn't exist, and also returns
	  true (no DB error) rather than false (DB error) when the object
	  type doesn't exist.

	* Documentation for SELECT OBJECTS AT has been fixed: It said that
	  it retrieved objects which HAD the given monad, whereas it has
	  all along retrieved objects which STARTED AT the given monad.

	* EMdF/emdf_ffeatures.cpp: EMdFComparison::makeConstraints() would
	  ASSERT_THROW an EmdrosException if the feature type was a list,
	  yet HAS was not used.  This was premature checking, as
	  makeConstraints is always called at Symbol-checking time, but
	  the HAS is not checked until Type-checking time, which, of
	  course, is after Symbol-checking time.

	  MQL now gracefully returns an error rather than throwing an
	  EmdrosException.

	* MQL/mql_query.cpp: FeatureComparison::type() would not give a
	  compiler error is feature type was LIST, yet the comparison op
	  was not HAS, provided the LIST and the value had the same type
	  (e.g., LIST OF ENUM vs. ENUM).  It now does.

	* Added some newlines to the ends of a number of compiler errors
	  in MQL/mql_query.cpp.
	
============ 1.2.0.pre233 ============

2007-01-17 Ulrik Petersen

	* sqlite3/src/Makefile.am: The rule for parse.c now does a "rm -f
	  parse.h".  This was so as to get rid of all the "constant
	  redefined warnings" that the compiler issued.

	* win32/config.mak.in: Bumped JDK version to 1.4.2_13.
	
2007-01-15 Ulrik Petersen

	* configure.ac now is better at finding tcl.h, including on Ubuntu
	  6.10.

	* configure.ac now distinguishes between SQLITE2_DEP and
	  SQLITE2_LDADD.  Similarly for SQLITE2_DEP_SWIG and
	  SQLITE2_LDADD_SWIG.  Similarly for SQLite 3.

	* configure.ac now uses sqlite_prepare rather than sqlite_compile
	  for finding SQLite 2 system libraries.

	* configure.ac now uses sqlite3_prepare rather than sqlite_compile
	  for finding SQLite 3 system libraries.

	* EMdF/sqlite3conn.cpp now calls sqlite3OsFileExists directly in a
	  new mySQLite3OsFileExists function, but only if the system
	  SQLite3 library is used.  If the local sqlite3_emdros library is
	  used, then mySQLite3OsFileExists calls sqlite3UnixFileExists or
	  sqlite3WinFileExists according to platform.

	* EMdF/sqlite3emdfdb.cpp now references the new
	  sqlite3conn.cpp:mySQLite3OsFileExists.

	* sqlite3/Makefile.am now always builds stuff in "tool"
	  subdirectory, via MYSUBDIRS.

	* sqlite3/src/Makefile.am: $(srcdir)/parse.c now depends on
	  $(top_builddir)/sqlite3/tool/lemon.  This fixed the problem
	  whereby you could not 'make dist' on a distcleaned and
	  rmfiles.sh'ed directory.

	* EMdF/emdfdb.cpp:EMdFDB::getInst(): It used to be that I did all
	  string set retrieval by joining with the respective _set table.
	  Now all _set tables are taken into the cache before running the
	  query.  This caused problems if we got more than (about) 32
	  joins, since SQLite2 can't do more than (about) 31 joins in a
	  single query.  This did not slow down getInst in my tests.

	* tests/mqltry.cpp now has the correct sheaf for FULL SHEAF 3
	  test.  It had been wrong since 1.2.0.pre232, and mqltry would
	  not complete successfully for 1.2.0.pre232.

	* Speeded CREATE OBJECT and CREATE OBJECTS WITH OBJECT TYPE up a
	  bit, by recoding
	  mql_helper_classes.cpp:FeatureAssignment::listHasFeature().
	
2007-01-14 Ulrik Petersen

	* Bugfix: pcre_emdros.h was present in the source tarball, whereas
	  it should always be made at compile-time.


============ 1.2.0.pre232 ============

2007-01-10 Ulrik Petersen

	* Fixed bug in SWIG Java on big-endian systems: The standard SWIG
	  typemaps for Java INOUT types did not work for Java booleans.
	  This was because GetBooleanArrayElements returned an array of
	  BYTES (or, more precisely, jbooleans), rather than an array of
	  bool (which, on some systems is 4 bytes long).  The typemap
	  simply assumed that the two were of equal length.  Needless to
	  say, this caused problems on big-endian systems, where the byte
	  to be returned was at the end of the four-byte region covered by
	  the bool, and thus was never read into the original
	  jbooleanArray by ReleaseBooleanArrayElements, which expected it
	  at the beginning.

	  I solved this by writing my own typemaps for bool INOUT.

	* SWIG Java bindings are now compiled with "-target 1.4 -source
	  1.4" options to javac.  This means that Java 1.4 can also run
	  the SWIG bindings.
	 
2007-01-02 Ulrik Petersen
	 
	* Added SetOfMonads::fillInsertRange().  This is in preparation 
	  for adding an INSERT MONAD RANGE MQL statement.

	* Added the rudiments of EMdFDB::insertMonadRange() and
	  EMdFDB::insertMonadRangeOT().  This is not finished yet.

	* Added some emdftry.cpp checks of the new methods.
	
2006-12-27 Ulrik Petersen

	* Bugfix: pcre_emdros.h was not present on Unix after an install.

2006-12-26 Ulrik Petersen

	* Fixed bugs in the following files due to new semantics of
	  split_string (i.e., returning an array/list with 1 member rather
	  than 0 if the splitting string was not
	  present).

	  - util/negraimporter.cpp
	  - util/plaintextimporter.cpp
	  - util/sfmimporter.cpp
	  - util/slashedtextimporter.cpp
	  - util/unboundbibleimporter.cpp

	
	* EMdF/string_func.cpp: Bugfix: The std::vector-version of
	  split_string_on_string did not call its list equivalent, but
	  split_string() instead.

	* Added some mqltry.cpp checks.

2006-12-16 Ulrik Petersen

	* wx/vtreecanvas.cpp: Now has a DrawNodeToBitmap() method, which
	  is used by DrawNodeToClipboard.

2006-12-08 Ulrik Petersen

	* wx/leftrightchooser.cpp:
	  LeftRightChooser::OnRightListBoxSelectionChanged was added, as
	  was LeftRightChooser::rightListBoxSelectionChanged, which is a
	  virtual method called by the former method, when the selection
	  of the right listbox has changed.

============ 1.2.0.pre231 ============

2006-12-01 Ulrik Petersen

	* Updates to Win32 build and install scripts.

	* Updated About box for ChunkingTool.

	* Emdros Query Tool now knows where to find its Users' Guide on
	  Windows.

	* doc/progref/buildhtb.py: Fixed an issue with
	  <center>...</center> in LaTeX: The centering wouldn't stop until
	  the end of the document.

	* Fixed some typos in menus in Chunking Tool and Query Tool.

	* include/debug.h:ASSERT_THROW_X() macro changed such that it does
	  not use long2string.  Specifically, added a MY_ASSERT_THROW_X
	  macro which has an extra parameter, MYLINE, which is meant to
	  contain __LINE__ (and does, if you call ASSERT_THROW_X).  MYLINE
	  is then string-ified with #, and added to the rest of the
	  message-string by string concatenation.  Also, include/debug.h
	  now does NOT #include <string_func.h>.  Consequently,
	  util/opt.cpp had to explicitly #include it after this change.

	* MonadSetElement::MonadSetElement(a,b) now throws
	  BadMonadsException, as advertised, rather than an
	  EmdrosException (ASSERT_THROW --> ASSERT_THROW_X).

============ 1.2.0.pre230 ============

2006-11-30 Ulrik Petersen

	* Memoryleak fix: MQLSymbolTableEntry::addFeature() would leak
	  small amounts of memory whenever the m_vec SmartVector didn't
	  need to add the ValPair.

	* Memoryleak fix: includ/string_list.h:ParserList::~ParserList()
	  would delete from m_head, and ParserListNode::~ParserListNode()
	  would delete m_next.  ~ParserList now deletes m_tail, and
	  ~ParserListNode now deletes m_prev.  This was necessary because,
	  when doing a list from the parser, we would delete the tail, not
	  the head.

	* Memoryleak fix: FlatStraw::~FlatStraw didn't delete its
	  MatchedObjects.  This caused severe memory leaks; the larger the
	  result set, the larger the leak.

	* Memoryleak fix: The statements CREATE DATBASE, USE DATABASE, and
	  INITIALIZE DATABASE all failed to delete the WITH KEY key.
	  Therefore, created a WithKeyDatabaseStatement from which they
	  now derive.

	* Memoryleak fix: mqltry.cpp:exec_string_test_sheaf() failed to
	  delete both the sheaf and the flat sheaf after printing.  This
	  caused valgrind to go ballistic on mqltry, even though there was
	  nothing wrong with Emdros itself on this account.

	* Memoryleak fix: SELECT ALL OBJECTS that had a RETURNING clause
	  that was a RETURNING FLAT SHEAF ON object_type_name_list had a
	  memory leak whereby the list of object types would leak.  This
	  was fixed.

	* Memoryleak fix: All Expressions that had
	  either (list_of_integer) or (list_of_identifier) would leak the
	  list.

	* Memoryleak fix: tests/emdftry.cpp had a memory leak when testing
	  IntegerList.

	* Memoryleak fix: tests/mqllingtry.cpp had some memory leaks.  Of
	  course, they weren't serious or threatening, since mqllingtry(1)
	  always exited before the leaks could do any damage.

	* Bugfix in src/qrytool/mqlqt.cpp (eqtc(1)): It would not accept a
	  filename to on the command line as a query to run.  It does now.

	* Bugfix in src/qrytool/mqlqt.cpp (eqtc(1)): Usage and --version
	  would say 'mqlqt' rather than 'eqtc'.

	* Memoryleak fix in src/qrytool/solution.cpp: Did not clear
	  m_raster, m_data, or m_reference in destructor.  It does now,
	  using mytable.cpp:clear_OTTableMap().

	* Memoryleak fix in src/qrytool/qtoutput.cpp: TECkits were never
	  disposed of.

	* Bugfix on Mac OS X for ChunkingTool: Now gets the right path to
	  the .htb file, so that online help is actually displayed.

	* "Bugfix" on Mac OS X for ChunkingTool and EmdrosQueryTool:
	  wxID_ABOUT is used instead of custom ID, which means that the
	  "About" menu item apears under the application menu, where Mac
	  OS X users expect it to be.
	
2006-11-27 Ulrik Petersen

	* Gave InterlinearLineMetrics a "double m_pointSizeScaleFactor",
	  which can be set via the constructor, or else is given the
	  default of 1.0.  This was so as to be able to configure (via
	  ViewMetrics::setILM()) whether to scale a particular line up or
	  down w.r.t. to the default point size.

2006-11-24 Ulrik Petersen

	* Made sure that the minimum m_nSerifLength in a LayoutBracketBox
	  is now something tolerable, thus ensuring that we get good
	  displays of double bracket boxes even at small magnifications
	  and single-line interlinear boxes.

	* Changed the way LayoutBracketBox::Draw draws double bracket
	  boxes, such that: a) It never goes above or below its yTop, and
	  b) It always has a good distance between the top/bottom and the
	  inner serif.

2006-11-19 Ulrik Petersen

	* Simplified the src/qrytool/Makefile.am, taking out
	  libwxqtl(u).a, instead having this in the _SOURCES for eqt and
	  eqtu.

	* Added the following to wx/configwizard.cpp:

	  - class DBConnectionWizardPage
	  - class ConnectionStatusWizardPage

	* Bugfixed wx/conndlg.cpp:ConnectionPanel and
	  wx/conndl.cpp:ConnectionDialog such that:

	  - bHasConfiguration is obeyed.

	  - getters and setters now work correctly (and exist on
	    ConnectionPanel).

	* wx/leftrightchooser.cpp: Added bWantsOnlyOneAtRight parameter to
	  constructor, and made the list boxes larger.  Also made UI
	  updaters for the left/right buttons.

	* Implemented some more of the ConnectionWizard for the Emdros
	  Query Tool.  In particular, the raster unit can now be
	  specified (by RasterUnitWizardPage), but it still won't write
	  the config to a file!

============ 1.2.0.pre229 ============

2006-11-13 Ulrik Petersen

	* configure.in is now configure.ac.

	* Finished the Chunking Tool User's Guide.

	* The Chunking Tool:

	  - Now doesn't respond to "reference_unit" in the config file.

          - Doesn't need (or want) _1, _2, etc. on the end of
	    chunking_area_font_name.

	  - Has some *.cfg files which are much more self-documenting.

	* On Win32, the etc\ directory now has three subdirs: qrytool,
	  hal, and chunkingtool.

	* Bugfix: CreateEnumerationStatement::symbol would check for the
	  existence of constants in an enumeration that did not even
	  exist.  This has been commented out.  Also,
	  EnumerationStatement's constructor now sets m_enum_id to NIL, so
	  as to avoid further embarrassment.
	
============ 1.2.0.pre228 ============

2006-11-13 Ulrik Petersen

	* Removed "OK" and "Cancel" buttons from
	  wx/conndlg.cpp:ConnectionPanel::CreateControls().

2006-11-03 Ulrik Petersen

	* Changed things back in configure.in such that it never links
	  directly against libpq.a or libmysqlclient.a, but rather uses
	  -lpq and -lmysqlclient, thus letting the linker choose.

	  This was due to problems on Mac OS X.  See configure.in (look 
	  for PG_LDADD) for why this was changed back.

	* Changed the way configure.in sets LDFLAGS: Now it doesn't set 
	  it when doing PostgreSQL or MySQL libraries, but rather sets
	  PG_LDADD and MY_LDADD.

2006-10-29 Ulrik Petersen

	* Fixed bug in MySQLEMdFDB::createObjectsOT_objects_data():
	  Handling of empty (but non-0) IntegerLists produced faulty SQL.
	  This bug had been there since 1.2.0.pre226.

	* Changed build procedure on Unix/Linux/Mac OS X as follows:

	  - Added PG_LDADD to configure.in, which, on Mac OS X, defaults
	    to library switches such that libpq.a is linked against,
	    rather than libpq.dylib.  This reduces the dependency on Fink
	    for binaries.  On all other platforms, it defaults to
	    "-L$libpqdir_dir -lpq".

	  - Made it so that -L$libpqdir_dir was not added to LDFLAGS on
	    Mac OS X (or rather, when pg_libfound is true, which it
	    currently is on Mac OS X when libpq.a is found).
	
	  - Used PG_LDADD in BACKENDLDADD.

	  - The default search order for tgetent in configure.in is now:

   	      readline curses ncurses termcap

	    rather than

	      readline ncurses curses termcap

	    This was again so as to reduce the dependency on Fink on Mac
	    OS X.

	  - src/qrytool/Makefile.am and examples/ChunkingTool/Makefile.am
	    had their ALWAYSLDADD rearranged such that EMDFLDADDSWIG was
	    moved behind libmql.la.

	  - EMdF/Makefile.am now uses LIBADD rather than LDADD for
	    BACKENDLDADD.

	  - sqlite/src/Makefile.am now uses LIBADD where appropriate.
	
	  - SQLite 2.X.X and SQLite 3.X.X are no longer searched for in
	    the PostgreSQL-specific directories (libsqlitedir_try_dirs and
	    libsqlite3dir_try_dirs).

	- Updated instructions in doc/bootstrapping.txt for Mac OS X.


============ 1.2.0.pre227 ============

2006-10-28 Ulrik Petersen

	* Updated instructions in INSTALL.Mac.txt.

	* Fixed non-Unicode builds in src/qrytool/Makefile.am and
	  examples/ChunkingTool/Makefile.am such that the Emdros libraries
	  can be depended on, by moving $(ALWAYSLDADD) to the spot after
	  -lemdrosgui.

	* Fixed ALWAYSLDADD in examples/ChunkingTool/Makefile.am such that
	  @PCRE_LIBADD_SWIG@ was moved to the spot AFTER libmql.la.

	* Fixed #pragma interface in include/configwizard.h to point to
	  wx/configwizard.cpp.

	* Fixed the following files such that @prefix@ --> $(prefix).
	  This was so as to be able to rpmbuild as non-root.

	  - src/qrytool/doc/Makefile.am
	  - SWIG/java/Makefile.am
	  - examples/ChunkingTool/doc/Makefile.am

	
2006-10-24 Ulrik Petersen

	* Added include/browsewidget.h and wx/browsewidget.cpp.

	* wx/win32.mak now compiles leftrightchooser.cpp (as well as
	  browsewidget.cpp).

	* Added include/configwizard.h and wx/configwizard.cpp, intended
	  for later use when implementing configuration wizards.

	* Implemented the very beginnings of a configuration wizard for
	  the Chunking Tool.

	* Split the ConnectionDialog in wx/conndlg.cpp into a
	  ConnectionPanel and a ConnectionDialog, so that the
	  ConnectionPanel can be reused.

	* Used the new ConnectionDialog in src/qrytool/mqlqtwx.cpp and in
	  examples/ChunkingTool/ctmf.cpp.
	
============ 1.2.0.pre226 ============

2006-10-20 Ulrik Petersen

	* Added the following to include/string_func.h:

	  - long2compact_string7bits()

	  - compact_string7bits2long()

	  - IntegerList2compact_string7bits()

	  - compact_string7bits2IntegerList()

	  They are not used, however, since this would require yet another
	  incompatible change to the schema.

	* Upgraded on Win32 to wxWidgets 2.6.3 and J2SDK 1.4.2_12 in
	  win32/config.mak.in.

	* Now always does X'hexstring' rewriting in
	  SQLite3EMdFDB::escapeStringForSQL.

	* Made win32 build machinery work with 1.2.0.pre226 (SQLite3 and
	  util/messages.cpp).


2006-10-14 Ulrik Petersen

	* Now the following are always compiled in:

	  - pgemdfdb.cpp
	  - mysqlemdfdb.cpp
	  - sqliteemdfdb.cpp
	  - sqlite3emdfdb.cpp

	  When a particular EMdFDB is not supported, only the constructor
	  and destructor are compiled in.  The constructor does nothing,
	  except construct the object.
	
	  This was so as to simplify the SWIG interface build procedure:
	  Before, all combinations had to be produced; now a single SWIG
	  interface can be built.

	* Now distributes sqlite3/doc/doc/

	* Now macdists sqlite_emdros.1 and sqlite3_emdros.1.

	* Changed the way macdist works: There is now a development/
	  directory which contains bin/, lib/, include/, man/, share/, and
	  sources/.

	* Added install_mac.sh.in, which gets compiled to install_mac.sh
	  and placed in $(MACDISTDIR)/development/ by the macdist target.

2006-10-09 Ulrik Petersen

	* Now actually supports compiling with system-wide PCRE.  Before,
	  it had problems with PCRE_DEP being specified as -lpcre.  I have
	  added PCRE_LIBADD and PCRE_LIBADD_SWIG to configure.in in order
	  to solve this problem.

2006-10-06 Ulrik Petersen

	* Added util/messages.cpp and include/messages.h.

	* Used emdrosMessageConnectionNotOK() from util/messages.cpp in:

	  - src/mql.cpp
	  - src/agexport.cpp
	  - src/manage_indices.cpp
	  - src/mqldump.cpp
	  - src/upgrade_db.cpp
	  - src/qrytool/mqlqt.cpp
	  - tests/emdftry.cpp
	  - tests/mqltry.cpp
	  - examples/HAL/hal.cpp

	* Fixed bug in src/qrytool/mqlqt.cpp: app_prefix referred to
	  _WXMSW_, not WIN32.

	* Changed configure.in and SWIG/*/Makefile.am such that all the
	  SWIG-related -I/include/dir CPPFLAGS are not added to CPPFLAGS,
	  but are only used in the appropriate SWIG/*/ subdir.

	* Added some Doxygen docs to various files.

	* Renamed sqlite3emdfdb.cpp:parseIndexCreationString to
	  parseIndexCreationStringSQLite3, and
	  sqliteemdfdb.cpp:parseIndexCreationString to
	  parseIndexCreationStringSQLite2.  This was so as to get rid of
	  some Doxygen warnings.
	
2006-09-26 Ulrik Petersen

	* src/mql_exporter.cpp now economizes with the amount of 
	  characters it spits out, so that redundant characters are now
	  not emitted.  This, of course, affects mqldump(1).

2006-09-24 Ulrik Petersen

	* Added --with-sqlite3-no-fsync to configure.in, and used it in 
	  EMdF/sqlite3emdfdb.cpp

	* The default is now --with-sqlite-no-fsync=yes and 
	  --with-sqlite3-no-fsync on those platforms that use the 
	  configure script, just like on Win32.

2006-09-23 Ulrik Petersen

	* Fixed bug in EMdFDB: The strings added to the StringSet cache
	  were escaped before being added, but weren't de-escaped when
	  getting them out of the cache.

	* EMdFDB::escapeStringForSQL() (and its descendants) now add
	  "'" ... "'" around the string.

	* Added SQLite 3.3.7.  There is a new eBackendKind enum, 
	  kSQLite3, and a new EMdFDB, SQLite3EMdFDB, but otherwise, it 
	  should just be plug and play.

	* EMdFDB now always drops indexes on FROM SET tables when doing a
	  manage_indices --drop, and recreates them on --create.
	
	* Added EMdFDB::createIndicesOnStringSetTable and
	  EMdFDB::dropIndicesOnStringSetTable.

	* EMdF/emdfdb.cpp: Added extra condition to #include <unistd.h>
	  such that it compiles on Windows.
	
============ 1.2.0.pre225 ============

2006-09-16 Ulrik Petersen

	* Edited emdros.spec.in slightly.
	
2006-09-14 Ulrik Petersen

	* Added docs to progref on IntegerList as well as extending the
	  docs on EMdFValue.

	* string_list.h: ParserListConstIterator::operator= is now NOT
	  SWIG-wrapped.  It wasn't before either, but now it explicitly
	  isn't so, and thus SWIG does not give a warning about its being
	  unable to do so.

	* Added some JDK dirs to jdk_try_dirs in configure.in, including
	  the default JPackage.org package for JDK 1.5.0_8.

============ 1.2.0.pre224 ============

2006-09-13 Ulrik Petersen

	* Made it compile on older systems (libstdc++5 with gcc 3.3, for
	  example, e.g., Ubuntu 5.04 Hoary Hedgehog).  This was done by
	  #include'ing <emdros-config.h> at the top of all files that
	  #include'd it, then immediately #undef'ing malloc.  This is
	  because, on older systems, configure thinks that malloc is not
	  available, and so #defines malloc.  Then, when getting to
	  #include <cstdlib> (either directly or indirectly, e.g., through
	  <string>), <malloc.h> is not #include'd, and so we get build
	  errors.
	
2006-09-11 Ulrik Petersen

	* string_list.h: Bugfix: isEmpty() returned the reverse of what it
	  really was...

	* emdfdb.h: IntegerList used to be #include'd from <string_list.h>
	  directly in emdfdb.h; now it is merely forward-declared, and
	  <string_list.h> is #include'd in emdfdb.cpp.  This should make
	  for faster recompilation.  However, it does mean that you may
	  have to #include <string_list.h> explicitly if you just used
	  emdfdb.h before.  Also add #include <string_list.h> to
	  pgemdfdb.cpp, mysqlemdfdb.cpp, sqliteemdfdb.cpp, and
	  tests/emdftry.cpp.

	* emdf_value.h: Same thing as for emdfdb.h, with respect to
	  <string_list.h>.

	* mql_sheaf.h: Same thing as for emdfdb.h, w.r.t. <string_list.h>.

	* include/sqliteconn.h: Now #includes <debug.h>.

	* MQL/lexer2.awk: Removed #include <string_list.h> from this.
	  This means that mqlflexr.h now doesn't #include <string_list.h>.

	* include/pennimporter.h: Added #include <string_list.h>.

	* include/string_list.h: Added operator= to ParserList, and so
	  also to StringList and IntegerList.

	* include/string_list.h: Turned ParserList around, such that
	  m_next points from head to tail, and m_prev from tail to head,
	  in order to be consistent with normal terminology (and thus be
	  more maintainable).

	* MQL/mql.yxx: Added setNext() calls whenever a StringList or
	  IntegerList was involved, thus making sure that both directions
	  can be traversed.
	
	* src/qrytool/wxilqtout.cpp: Got rid of a warning about unsigned
	  vs. signed, which was really a bug.

	* Removed redundant m_enum_const_values_in_list from class
	  FeatureAssignment.
	

2006-09-07 Ulrik Petersen

	* StringList and IntegerList now have isEmpty exposed in the SWIG
	  interface.

	* Now is actually able to use system SQLite2.  Before, it would
	  complain about sqlite_open_encrypted not being available.

============ 1.2.0.pre223 ============

2006-09-04 Ulrik Petersen

	* Fixed bug in util/sfmimporter.cpp whereby objects could overlap
	  in their monads even though they were distinct.

	* Fixed formatting in doc/sfmimporter.1.

	* string_func.cpp: Added strip(string,string) and strip(string).
	
	* tests/emdftry.cpp now tests strip().

	* tests/emdftry.cpp now actually prints "FAILURE" on last line if
	  one fo the backends failed.

	* util/sfmimporter.cpp now uses strip(field_value) when reading
	  sfm schema.

	* Removed redundant #include <string_func.h> from some header
	  files.

	* util/sfmimporter.cpp now has the option to do integer features.

	* util/unboundbibleimporter.cpp: EmdrosMemObject::putMQL() now
	  converts the value to long and then back to string when doing an
	  INTEGER or ID_D feature.
	
============ 1.2.0.pre222 ============

2006-08-29 Ulrik Petersen

	* Fixed bug in emdf.h: SQLITE_TEXT_TYPE was set to TEXT if we did
	  PostgreSQL (even if other backends were compiled in), and to
	  nothing if we only did SQLite.  

	  In particular, this caused strange behavior on MySQL, whereby
	  searches that were case-sensitive before were now
	  case-INsensitive, since it needed to be LONGBLOB for text...

	  This was fixed by adding EMdFDB::getSQL_TEXT_TYPE() and using it
	  whereever necessary.

	* Reindented emdfdb.h.

	* Mac OS X: Now distributes doc/EQTUsersGuide.htb in the
	  EmdrosQueryTool.app bundle, such that the user's guide is
	  actually there on Mac.

	* Mac OS X: Now distributes all libraries and programs in macdist.

	* Mac OS X: Now doesn't distribute full complement of SWIG
	  dylib or .so libraries; only the first (i.e., XYZ.dylib).

	* Win32: Fixed building of util/sfm.cpp and src/sfmimport.cpp.
	
2006-08-28 Ulrik Petersen

	* Added leftrightchooser.{cpp,h}

	* Created the beginnings of a connection wizard for the Emdros
	  Query Tool.

	* SWIG/java/Makefile.am now uses jar -0 so as to only _store_, not
	  compress the .java and .class files.  This saves some space in
	  the source tarball, since gzip is much better able to work with
	  the uncompressed data than the jar-compressed data.

2006-08-26 Ulrik Petersen

	* Changed all occurrences of assert(X) to ASSERT_THROW(X,
	  "reason").
	
2006-08-25 Ulrik Petersen

	* Finished SFM importer.  Added src/sfmimport.cpp.

	* Fixed bug in src/slashedtextimport.cpp: It said 'negraimport'
	  rather than 'slashedtextimport."

	* Changed the last two colors in the interlinear display of the 
	  wxWidgets-version of the Emdros Query Tool from "BLUE, CYAN" 
	  to "DARK_GREEN, LIGHT_GREEN".

2006-08-24 Ulrik Petersen

	* Moved test.pl target in SWIG/perl/Makefile.am out of the 
          condition that SWIG bindings be built.

============ 1.2.0.pre221 ============

2006-08-24 Ulrik Petersen

	* Added SFM (Standard Format Marker) importer.  It doesn't 
	  work yet.

	* Changed SWIG build processes such that the test programs
	  are now built regardless of whether that particular SWIG 
	  backend is to be built.  This is because the RPM SPEC 
	  file needs them.

	* Changed ChunkingTool build process such that 
	  CHUNKINGTOOLDATA is always installed.  This is because 
	  the RPM SPEC file needs the data.

============ 1.2.0.pre220 ============

2006-08-23 Ulrik Petersen

	* Removed printing of text to std::cerr in
	  util/plaintextimporter.cpp.

============ 1.2.0.pre219 ============

2006-08-18 Ulrik Petersen

	* Removed the option to not do stripped_surface in
	  unboundbibleimporter.

	* Added EMdF/string_func.cpp:remove_chars_in_string().

	* Added EMdF/string_func.cpp:remove_punct().

	* Used remove_punct() in unboundbibleimporter.cpp to get
	  stripped_surface.

	* Added stripped_surface to [word] object type in
	  util/plaintextschema.mql.

	* Made util/plaintextimporter.cpp produce a "stripped_surface"
	  feature.

	* Made util/plaintextimporter.cpp add paragraphs based on '\n\n'.

	* Consoliated the emitMQL* and cleanObjects* methods into one with
	  code and three with parameters, inc util/plaintextimporter.cpp.

	* Fixed bug in src/plaintextimport.cpp: It said 'negraimport' when
	  it should say 'plaintextimport."

	* The split_* family of functions in string_func.cpp now return
	  the list containing instring if none of the split-strings/chars
	  are found.
	
2006-08-17 Ulrik Petersen

	* Added EMdF/string_func.cpp:replace_substring().

	* Tested replace_substring() in tests/emdftry.cpp.

	* Unbound Bible importer:

	  - Added a boolean to the unboundbibleimporter constructor,
	    saying whether we want a stripped_surface feature.
	
	  - Added "%%STRIPPED_SURFACE%%" to [word] object type in
	    unboundbibleschema.mql

	  - Used the replace_substring() function to replace this
	    "%%STRIPPED_SURFACE%%" string with the proper replacement,
	    based on whether we want to do the stripped surface or not.

	  - Added the stripped_surface feature to the Word, which is the
	    surface stripped if "ispunct(3)" characters as defined by
	    FreeBSD ispunct(), plus space.
	
	* Used replace_substring() in unboundbibleimporter.cpp to give the
	  schema a stripped_surface feature, and also added a parameter to
	  the construction of unboundbibleimporter to say

============ 1.2.0.pre218 ============

2006-08-16 Ulrik Petersen

	* Made it compile on Win32.

============ 1.2.0.pre217 ============

2006-08-16 Ulrik Petersen

	* mysqlconn.cpp now reads the "[client]" group from the default
	  configuration files before connecting.

	* configure.in: Now doesn't complain when doing --disable-shared
	  if you have left all SWIG backends as =maybe.  Instead, it
	  simply turns all SWIG backends off.

	* configure.in: Fixed problem with SWIG Python checking: The block
	  finding the Python site directory had a faulty test: "test
	  $DO_SWIG_PYTHON != xno" rather than putting an x in front of
	  $DO_SWIG_PYTHON.


2006-08-09 Ulrik Petersen

	* Improved pennimporter.cpp: It now parses trees that do not 
	  start with ( and that do not start with (S1, but which are 
	  merely trees... In particular, the penn corpus from NLTK 
	  imports cleanly. Also did away with 'S1' token in
	  pennlexer.lxx.

	* Mac OS X: configure.in changed such that certain tests for
	  backends now work correctly.

	* Added util/slashedtextimporter.cpp,
	  include/slashedtextimporter.h, util/slashedtextschema.mql,
	  src/slashedtextimport.cpp, and doc/slashedtextimport.1.

	* EMdF/string_func.cpp: Added is_hex() and parse_C_backslashes(),
	  and tested them in tests/emdftry.cpp.

	* EMdF/string_func.cpp: Added split_string_on_string, both a 
	  std::list version and a std::vector version.

	* Fixed an issue with the word 'defualt' (default) in various
	  programs in src/.

	* util/pennparser.yxx: Now says 'C = T;' for the top_tree rule
	  that has merely a subtree, without introducing another level
	  of indirection.
	
============ 1.2.0.pre216 ============

2006-08-09 Ulrik Petersen

	* Added a plaintextimport program, along with
	  util/PlainTextImporter.cpp, include/PlainTextImporter.h, and
	  util/plaintextschema.mql.

	* PHP_LIBS are now not added to the PHP LIBADD line in
	  SWIG/php/Makefile.am.  The reasons are:

	  1) They are not necessary, and

	  2) libaspell, which is in the PHP_LIBS on Fedora Core 5, is not
	     properly present on FC5: libaspell.so is lacking, while
	     libaspell.so.15 is present.  This causes linking errors on
	     Emdros.
	
============ 1.2.0.pre215 ============

2006-08-08 Ulrik Petersen

	* Solaris/SunOS: Added -R$libpqdir_dir and
	  -R$libmysqlclientdir_dir to SUN_LDFLAGS when ISHOSTSUNCC is
	  "yes".
	
	* Solaris/SunOS: Added @SUN_LDFLAGS@ to SWIG/*/Makefile.am.

2006-08-05 Ulrik Petersen

	* Mac OS X: Now the following libraries are also compiled with
	  -static on Mac OS X: libemdf, libmql, libpcre_emdros,
	  libsqlite_emdros.  This is so as to be able to distribute a .dmg
	  in which the SWIG bindings do not depend on Emdros libraries
	  which are not installed by "make install".

	* SWIG/php and configure.in: Added PHP_LIBS and PHP_LDFLAGS to
	  configure.in, via php-config, and used them in
	  SWIG/php/Makefile.am.

2006-08-04 Ulrik Petersen

	* Mac OS X: src/qrytool/Info.plist.in and
	  examples/ChunkingTool/Info.plist.in updated to say "2006", and
	  changed DTD to be newest, version 1.0.

	* Mac OS X: All binaries are now linked with the libtool -static
	  LDFLAGS flag, via MACLDFLAGS.  This means that no local dylibs
	  are used; instead, the static versions are used.  This is
	  because I wanted the libraries to be installable in a .dmg.  I
	  could not figure out how to tell libtool to look inside the .dmg
	  for the dylibs.

	* configure.in: An error is now thrown if doing at least one SWIG
	  backend, yet not doing shared libraries.

	* configure.in: Added EMDFLDADDSWIG, analogously to EMDFDEPSSWIG,
	  but with $BACKENDLDADD thrown in.

	* Mac OS X: Now distributes SWIG bindings in the .dmg.

	* SWIG/java/TestEmdros.java.in: Changed "enum" to "enum_const" so
	  as to be able to compile with JDK 5.0.

	* configure.in: Now obeys --disable-debug again.  The reason it
	  had started to fail was that AC_PROG_CC and AC_PROG_CXX set
	  CFLAGS and CXXFLAGS to "-g -O2" by default, and also do the
	  AC_SUBST.  AC_PROG_CC and AC_PROG_CXX are invoked by
	  AC_PROG_LIBTOOL, which I had moved up before the test which set
	  CFLAGS and CXXFLAGS to empty if not set at all.

	* configure.in: Now checks for XXX.dylib whenever trying to find
	  XXX.a or XXX.so (Mac OS X).
	
	* configure.in: Now displays message when not doing PostgreSQL
	  because neither libpq.a nor libpq.so nor libpq.dylib can be
	  found.

============ 1.2.0.pre214 ============

2006-08-03 Ulrik Petersen

	* Added #include <dataobj.h> to src/qrytool/mainframe.cpp so as to
	  be able to build on Solaris (wx-motif).

	* Changed build process for examples/HAL/doc/*.tex to use --latex
	  switch on buildhtb.py.

	* Workaround added for bug in wx-config on Solaris: "-L
	  /usr/sfw/lib" was made into "-L/usr/sfw/lib", in configure.in.

2006-08-02 Ulrik Petersen

	* Corrected include/string_list.h such that:

	  - StringList now explicitly has a "StringListConstIterator
	    const_iterator() const;" method.

	  - IntegerList now explicitly has an "IntegerListConstIterator
	    const_iterator() const;" method.

2006-07-28 Ulrik Petersen

	* Changed win32/include to always do pcre_emdros.h,
	  unconditionally.  Note that this involves having a target which
	  is not the name of the file to be copied.

	* Changed all instances of "SQLITE" to "SQLITE2" in the win32.mak
	  files and config.mak.in.

	* include/Makefile.inc: Now doesn't distribute pcre_emdros.h.
	  Instead, it is built by include/Makefile.am.

	* pcre/djgpp.mak: Now copies pcre.h to ../include/pcre_emdros.h.

	* Now creates a different .dmg filename (Intel vs. PPC) on Mac OS
	  X, based on the $host information.

============ 1.2.0.pre213 ============

2006-07-28 Ulrik Petersen

	* There was a problem: SWIG had to know, at swigification time,
	  what backends to support.  So building 1 SWIGified thing was not
	  good. Solution:

	  - configure.in: CHARACTERISTIC_BACKEND_STRING was added as an
	    AC_SUBST().  It is the concatentation of the strings "_sq",
	    "_pg_", and/or "_my", depending on which backends are present.

	  - In SWIG/*/Makefile.am, all 7 combinations (excluding the one
	    where none of them are present) are built.

	  - At compile-time, the right one is selected, based on
	    CHARACTERISTIC_BACKEND_STRING.

	* Changed include/win32.mak to produce emdros-lconfig.h, with
	  USE_XXX and DEFAULT_BACKEND_ENUM #define'ed.  Thus the -D
	  switches in win32/config.mak.in that took care of this before
	  are gone.

	* wx/conndlg.cpp now only lists the choices of backend that are in
	  the binary.

	* configure.in: Fixed bug whereby SQLite 2.x.x would always be
	  built.

	* SQLite: offset_t (which was introduced by me) is now offs_t, due
	  to a conflict with naming on Solaris.

	* TECkit was upgraded to TECkit release 2006-06-02.  My changes
	  were forward ported into the new code.

	* Fixed bug in TECkit/Compiler.h: appendToTable(string, T x) had
	  an extraneous semicolon at the end of the function.  This made
	  it not compile on Solaris.

	* Solaris make did not understand "cp $< $@", so I had to change
	  it throughout all Makefiles.

	* Solaris: EMdF/logging.cpp: ctime_r(pTime, szTime,
	  BUFFER_LENGTH): Restored third parameter.  This works with Sun's
	  compiler, though probably not with gcc


2006-07-27 Ulrik Petersen

	* Changed license so that we can link against OpenSSL (by adding
	  an exception).  This is because OpenSSL is linked to by
	  PostgreSQL, and OpenSSL is under a license that is incompatible
	  with the GPL.  Just to be sure, I added an exception so that one
	  can link against libraries normally distributed with PostgreSQL.

	* On Win32, now distributes libpq.dll, as well as its
	  dependencies (including OpenSSL).

	* On Win32, now doesn't need the buildtools-win32 package!

	* Changed src/qrytool/mainframe.cpp to only complain about
	  libmysql.dll if we are on Win32, and the backend chosen is
	  really kMySQL.

	* On Win32: Now distributes src/qrytool/penn.cfg.

	* Changes to configure.in and Makefile.am's:

	  - --with-wxwin is now --with-wx because the name of the library
	    has changed from wxWindows to wxWidgets.

	  - WXWIN_* is now WX_*

	  - wxWidgets on Mac OS X and others are now treated in the same
	    if ... fi structure.

	  - The following were added:

	    - AC_SUBST(WITH_SQLITE)
	    - AC_SUBST(WITH_POSTGRESQL)
	    - AC_SUBST(WITH_MYSQL)
	    - AC_SUBST(WITH_SWIG_JAVA)
	    - AC_SUBST(WITH_SWIG_PERL)
	    - AC_SUBST(WITH_SWIG_PHP)
	    - AC_SUBST(WITH_SWIG_PYTHON)
	    - AC_SUBST(WITH_SWIG_RUBY)
	    - AC_SUBST(WITH_WXWIDGETS)
	    - AC_SUBST(ENABLE_SHARED)
	    - AC_SUBST(ENABLE_DEBUG)

	  - emdros.spec is now created.

	  - 'maybe' is now a legitimate option for all the --with switches
	    that support it.

	  - --with-swig-language-XXX now supports [yes|no|maybe].

	  - There new WITH_XXX are given the exact value passed to them
	    upon invocation of configure.
	
	* Changes to .spec (RPM) creation:

	  - There is only one emdros.spec that comes out of the
	    configure-process, not several.

	  - Only one RPM is built, not several (simply "emdros"
	    vs. emdros-postgresql, emdros-mysql, emdros-mysql-swig-php,
	    etc.)

	  - All of the configure-time options are carried over from the
	    configure-script to the .spec file.

	* Removed SWIG_SWITCHES from SWIG/*/Makefile.am.  Instead, each
	  SWIG/*/libemdf*.i now #includes AND %includes
	  ../../include/emdros-lconfig.h, and thereby gets USE_XXX.  These
	  are then used in SWIG/*/libemdf*.i.

	
2006-07-26 Ulrik Petersen

	* Changed wx/conndlg.cpp to have a "Backend" combobox.

	* Used this in src/qrytool/ and in examples/ChunkingTool/.

	* Deleted wx/conndlgsimple.cpp and include/conndlgsimple.h.

	
2006-07-25 Ulrik Petersen

	* Improved doc/progref/*.py to be generic, with config.py.  Also
	  made it better able to handle nearly all of the tags and symbols
	  in the DBDG, HAL example docs, QueryTool, etc.  Also made it
	  able to spit out something with a navbar on the left.
	
	* Added:

	  - examples/HAL/doc/

2006-07-21 Ulrik Petersen

	* Used util/opt.cpp in:

	  - src/qrytool/mqlqt.cpp
	  - examples/HAL/hal.cpp
	  - examples/HAL/halblddb.cpp
	  - tests/emdftry.cpp
	  - tests/mqltry.cpp
	  - tests/mqllingtry.cpp

	* Upgraded PCRE to PCRE version 6.7.

	* Made searching for the JDK possible on Mac OS X.

2006-07-20 Ulrik Petersen

	* Used util/opt.cpp in:

	  - src/agexport.cpp
          - src/manage_indices.cpp
	  - src/mqldump.cpp
	  - src/negraimport.cpp
	  - src/pennimport.cpp
	  - src/ubimport.cpp
	  - src/upgrade_db.cpp

	* Fixed bug in util/opt.cpp:getArgumentValue(): It should return
	  false if not present, which it does now.

	* Fixed bug in util/opt.cpp:getStandardArgumentValues():
	  backend_kind was now not being set when no "-b" switch, after
	  the above bug was fixed.

	* Refactored util/opt.cpp such that the default value is now
	  present in the option map.

	* Added encoding to standard arguments.

	* The default encoding on mql(1) is now kCSUTF8 rather than
	  kCSISO_8859_1.

	* Fixed bug in util/opt.cpp:getHasEncodingOption(): It would
	  return true even if there was an "-e" switch which did not have
	  "--encoding" as the long version.

	* Changes to src/negraimport.cpp and src/pennimport.cpp:

	  - --startmonad is now --start-monad
	  - --start_id_d is now --start-id-d
	  - Usage and documentation fixed on the above two points.

	  Note that the usage and documentation used to say --start_monad,
	  which was not what was actually parsed -- it was --startmonad.
	
2006-07-19 Ulrik Petersen

	* Fixed bug in configure.in whereby AC_ARG_WITH(mysql was not
	  --with-mysql but --with-DO_MYSQL.
	
	* Changed configure.in such that it has a default backend.

	* Used default backend as DEFAULT_BACKEND_ENUM in
	  emdros-lconfig.h.in and win32/lconfig*.

	* Used default backend (DEFAULT_BACKEND_ENUM) as backend_kind
	  parameter in include/environment_emdros.h.

	* Surrounded "new PgEMdFDB", "new MySQLEMdFDB" and "new
	  SQLiteEMdFDB" with " #if USE_{BACKEND}...#else throw exception
	  ... #endif" in the following files:

	  - MQL/emdros_environment.cpp
	  - src/manage_indices.cpp
	  - tests/emdftry.cpp

	* Added doc/progref/, also to build machinery.

	* Added include/opt.h and util/opt.cpp.

	* Used util/opt.cpp in src/mql.cpp.

2006-07-18 Ulrik Petersen

	* Changed include/emdf.h:MYSQL_BINARY to EMdFDB::getMYSQL_BINARY()
	  so as to be able to get it only when actually using MYSQL.

	* Uses new EMdFDB::getMYSQL_BINARY in place of VARCHAR_MODIFIER,
	  which has been removed from include/emdf.h.

	* Now tests SQLite 2.X.X in
	  tests/{emdftry.cpp,mqltry.cpp,mqllingtry.cpp} before testing the
	  others.

	* Now prints at the end of configure.in whether we are doing
	  wxWidgets, and if so, which version.

2006-07-10 Ulrik Petersen

	* The system PCRE is now used by default if present, rather than
	  the local pcre.

	* The same goes for SQLite: If it is present on the system, the
	  local SQLite is not compiled.  To do this, include/sqlite.h was
	  renamed to include/sqlite_emdros.h.

	* Reindented a number of files.
	
	* BIG CHANGE: All present (and desired) backends are now compiled
	  into the same binary.

	  - --with-sqlite can now be given the values "yes", "no",
	    "local", "system", and "maybe".

	  - --with-mysql and --with-postgresql can now be given the values
	    "yes", "no", and "maybe". The "maybe" option means that it is
	    compiled in if present on the system.
	
          - configure.in/Makefile.am machinery rearranged.

	  - sqlite/configure.ac no longer used; the relevant sections have
	    been moved to ../configure.in.

	  - Changed "SQLITE" to "SQLITE2" in the
	    configure/Makefile/emdros-lconfig.h machinery, in anticipation
	    of the addition of SQLite3 as a supported backend.  In
	    particular, the AM_CONDITIONAL "SQLITE" is now "SQLITE2", and
	    the #define "USE_SQLITE" is now "USE_SQLITE2".

	  - EMdFDB::getBackendName() is no longer static.  Neither is
	    EmdrosEnv::getBackendName static any longer.

	  - Added eBackendKind enumeration to include/emdf_enums.h.
	
	  - Added eBackendKind EMdFDB::getBackendKind().
	 
	
2006-07-09 Ulrik Petersen

	* Added support for gcc 4.1 by doing a static variable initialization in the template rather than outside of it in smartvector.h.

	* Made libmql link to PCRE_DEP.

============ 1.2.0.pre212 ============

2006-07-01 Ulrik Petersen

	* EMdF/emdfbd.cpp: Changed a DEBUG_X_IS_WRONG from SQLiteEMdFDB to
	  EMdFDB.

	* Now doesn't unconditionally build wxWidgets programs.

	* Fixed bugs introduced in pre211 on PostgreSQL and MySQL:
	  useDatabase() wouldn't connect to the right database, but
	  instead simply (on PostgreSQL) connected to template1.  This
	  caused an EMdFDB::createDatabase to fail, because the right
	  database wasn't connected to.

	  To fix this:

	  - Added PostgreSQL::useDatabase(string,string,bool) and its
	    MySQL equivalent.

	  - Rewrote PgSQL::useDatabase(string,string) (and its MySQL
	    equivalent) to call its local useDatabase(string,string,bool)
	    equivalent, with false as the bool parameter.

	* Fixed bug in SQLite::createDatabase: if the first useDatabase
	  fails, the whole thing now fails.  Before, it simply continued.

2006-06-26 Ulrik Petersen

	* Character tokens are now reported as "the character 0xXY" when
	  the cause of a syntax error.

	* Added include/sfm.h and util/sfm.cpp from LTC project
	  (Linguistic Tree Constructor).
	
	
============ 1.2.0.pre211 ============

2006-06-17 Ulrik Petersen

	* Fixed a bug introduced in pre210 whereby CREATE DATABASE would
	  fail on SQLite.  To fix this:
	
	  - Added EMdFDB::useDatabase(string,string,bool), where the last
	    bool must be true if we are creating or initializing the
	    database.

	  - Moved the code from EMdFDB::useDatabase(string,string) into
	    new useDatabase method.

	  - Added stub in old EMdFDB::useDatabase(string,string) to call
	    the new one with false as the last parameter.

	  - Used the new one dutifully in various places.
	

============ 1.2.0.pre210 ============

2006-06-16 Ulrik Petersen

	* Now uses m_object_type_cache_map in order to answer the question
	  of largest_object_length, if possible.

	* Changes to configure.in to better support latest Solaris.

	* Changes to EMdF/logging.cpp to better support latest Solaris.
	
2006-06-15 Ulrik Petersen
	
	* Fixed compilation of EMdF/logging.cpp on Win32.

	* Removed m_object_type_cache_table from EMdFDB, and reorganized
	  m_object_type_cache_map to be centered around the object type
	  name rather than the object id_d. Also added largest object
	  length to m_object_type_cache_map.  This is done through class
	  EMdF/emdfdb.cpp:ObjectTypeCacheInfo.

	* Fixed bug introduced in 1.2.0.pre208: EMdFDB::dropObject and
	  EMdFDB::dropObjectsInMonads did not update the largest object
	  length.

	* Added EMdFDB::getLargestObjectLengthFromOT_objects().

	* All EMdFDB subclass constructors now call this->useDatabase().
	
2006-05-16  Ulrik Petersen

	* Made FastSetOfMonads::addMSE() faster.

============ 1.2.0.pre209 ============

2006-05-15  Ulrik Petersen

	* Implemented the same idea as in 1.2.0.pre208, but in getInst() 
	  instead.  This made for a very, very nice speed increase, 
	  especially on large (multi-million-token) corpora.

	* Reindented emdfdb.cpp.

============ 1.2.0.pre208 ============

2006-05-14  Ulrik Petersen

	* Removed deleteToken() from include/mql_yylex.h; instead moving
	  it into the destructor of Token!  Also reflected this change in
	  MQL/mql.yxx and elsewhere where deleteToken was being used.

	* Changed the schema to number 12:

	  - Table object_types now has a column called
	    "largest_object_length".  This is maintained whenever an
	    object/a batch of objects is/are created.

	  - This is used in EMdFDB::getObjectsHavingMonadsIn() to speed
	    things up, sometimes dramatically.

	  - Old versions can read the new databases, and this version can
	    read (but not write to) old databases.

	  - Speedups of up to 60% on the Emdros Query Tool over pre199!

	* Moved "logging" definitions out of emdf.h and into logging.h.

	
2006-05-13  Ulrik Petersen

	* Fixed bug in EMdFDB::createObjects() that it didn't abort the
	  transaction although necessary to do so under certain
	  circumstances.

============ 1.2.0.pre207 ============
	
2006-05-13  Ulrik Petersen

	* Removed 'UP100' debugging output from eqtc.

	* Made query tool about 10-15% faster on average, by implementing
	  the idea that if we know the length of the largest object, we
	  don't need to scan the table (MyTable) from the very beginning
	  when doing MyTable::set_universe().

	* Reindented some code.

2006-04-30  Ulrik Petersen

	* Added some Doxygen docs.

	* Reindented a number of files.

	* Added a "clear output window" menu-item and toolbar-button to
	  the Emdros Query Tool.

	* Emdros Query Tool: Now refreshes itself in
	  MainFrame::ClearTextCtrls and in MainFrame::OnFileNew().

	
2006-04-29  Ulrik Petersen

	* Added a lot of Doxygen docs.

	* Removed string_func.{cpp,h}:encodeASCIIstring.

============ 1.2.0.pre206 ============

2006-04-27  Ulrik Petersen

	* Made SWIG java and Python compile on Win32.

	* Fixed bug introduced somewhere around 1.2.0.pre198:
	  EMdFDB::addFeature() always returned before doing its job.

	* Improvements to win32 clean process.

	
2006-04-26  Ulrik Petersen

	* Better support for compilation on Mac OS X even without being
	  dist'ed first on Linux.  In particular, the way the files based
	  on FlexLexer.h are built has been changed (lexer3.sed,
	  lexer2.awk, etc.).

	* Improved src/qrytool/BETA2Unicode.map.
	
============ 1.2.0.pre204-pre205 ============

2006-04-07  Ulrik Petersen

	* All SWIG bindings now are SWIG'ified at dist time, rather than
	  compile time.  SWIG is thus no longer needed (except after a
	  distclean).

============ 1.2.0.pre203 ============

2006-04-05  Ulrik Petersen

	* Changed the RPM SPEC machinery such that:

	  - All RPMs now end in "1.fc5" rather than "1.fc4", as I upgraded
	    to Fedora Core 5.
	
	  - It is possible to do or not do the SWIG bindings and the
	    wxWidgets programs and libraries, based on sed-style
	    configuration.

	  - The default RPM specs no longer produce SWIG bindings; this
	    was decided based on the philosophy that the default RPMs
	    should be easy/easier to compile for the average installation.

	  - It is possible to compile "swig" RPMs.

	  - It is possible to compile "php" RPMs.
	
2006-03-27  Ulrik Petersen

	* Added path for Java 1.5.0_06 to configure.in.

	* Made it compile with gcc 4.1.
	
	
2006-03-21  Ulrik Petersen
	
	* Added capability in wx/layout.cpp for outputting the
	  LayoutCanvas to HTML.

	* Used this in the Emdros Query Tool.
	
============ 1.2.0.pre202 ============

	* Added two optimizations to GET OBJECTS HAVING MONADS IN
	  (EMdFDB::getObjectsHavingMonadsIn):

	  - On SQLite: If there is more than one MSE in the reduced
	    FastSetOfMonads, then the first, sweeping AND is not made,
	    i.e., first_monad <= monad_set.last() AND last_monad >=
	    monad_set.first().

	  - On all backends: If there is only one MSE in the reduced monad
	    set, then there is no WHERE condition on the monads at all iff
	    the first and last monads of the monad set are each within 20%
	    of the total number of monads away from the boundaries in
	    all_m_1.


============ 1.2.0.pre201 ============

2006-03-13  Ulrik Petersen

	* Fixed bug in sqlitemdfdb.h such that it compiles again.

============ 1.2.0.pre200 ============

2006-03-11  Ulrik Petersen

	* Added some Doxygen docs.

	* Added a new path to the logic in configure.in which finds Java
	  JVMs.

============ 1.2.0.pre199 ============

2006-03-11  Ulrik Petersen

	* Made a new distinction: HAVING UNIQUE FIRST MONADS / HAVING
	  UNIQUE FIRST AND LAST MONADS / WITHOUT UNIQUE MONADS.

	* Took advantage of this new structure in CREATE OBJECT TYPE.
	
	* Bumped current schema version to 11.

============ 1.2.0.pre198 ============

2006-03-01  Ulrik Petersen

	* Finished the NEGRA importer added in 1.2.0.pre177.

	* Added "remove_from_substring_and_out()" to EMdF/string_func.cpp.

	* Added "EmdrosImporterBase" to pennimporter.{cpp,h} and used it
	  in NEGRAImporter.

============ 1.2.0.pre197 ============

2006-02-23  Ulrik Petersen

	* The Penn importer now folds Terminals and the Nonterminal right
	  above it into one object.
	
============ 1.2.0.pre196 ============

2006-02-22  Ulrik Petersen

	* Changed util/pennlexer.lxx so that it can handle NAMEs of the
	  form "$(-PNC", which does occur in the TIGER corpus.

============ 1.2.0.pre195 ============

2006-02-21  Ulrik Petersen

	* Made it compile with NSIS on Win32.

	* Made the detection of the PostgreSQL libpq.a library and
	  PostgreSQL include-files better.  In particular, it now works
	  with Fink on Mac OS X, and also has a separate
	  POSTGRESQL_LIB_DIR environment variable for when it goes wrong.
	

============ 1.2.0.pre194 ============

2006-02-20  Ulrik Petersen

	* Apparently it wasn't enough what I did with ARFLAGS in pre193;
	  so I've aded an explicit ARFLAGS = @ARFLAGS@ line to the
	  relevant Makefile.am files, and AC_SUBST(ARFLAGS) to
	  configure.in.  This is so as to work on Sun CC.

============ 1.2.0.pre193 ============

2006-02-20  Ulrik Petersen

	* Changed emdros.spec.in file documentation in INSTALL and in
	  emdros.spec.in.

	* Added section on compiling on Mac OS X in INSTALL.

	* In order to be able to compile on Mac OS X with MySQL's
	  precompiled MySQL binaries, I've changed include/mysqlconn.h so
	  that it #include's <mysql.h> rather than <mysql/mysql.h>.  The
	  configure-script and win32 build procedures have been changed
	  accordingly.

	* Changed "typedef class ...template here..." to "typedef
	  ...template here..." in order to be able to compile with Sun's
	  CC compiler.  Also removed typedef from "typedef class
	  PennToken/Token" in include/penn_yylex.h and in
	  include/mql_yylex.h.

	* Removed function exec_file from src/ubimport.cpp.

	* AR_FLAGS is now ARFLAGS in configure.in. So it works again on
	  Sun CC.
	
	
============ 1.2.0.pre192 ============

2006-02-19  Ulrik Petersen

	* Finished the Penn Treebank importer.

	* Updated *.spec.in files for pennimport.

	* Merged emdros.spec2.in into emdros.spec.in, and removed all
	  traces of spec2 in build.sh.in and in the top Makefile.am.

	* Now differentiates in configure.in between powerpc and Darwin
	  when it comes to BIG_ENDIAN-ness.
	
2006-02-17  Ulrik Petersen

	* Added an almost finished Penn Treebank Importer (util/ and
	  src/).
	
2006-02-17  Ulrik Petersen

	* Added the following files:
	  - include/unboundbibleimporter.h
	  - utils/unboundbibleimporter.cpp
	  - utils/simplebibleschema.mql
	  - src/ubimport.cpp

	  This is basically an importer for the Unbound Bible format.

	* Moved joinList from utils/negraimporter.cpp to
 	  include/string_func.h.

	* Added two versions of split_string to string_func.{cpp,h}: One
	  which yields a std::list<std::string>, and one which yields a
	  std::vector<std::string>.  Also tested the list one in
	  tests/emdftry.cpp.

	
============ 1.2.0.pre191 ============

2006-02-13  Ulrik Petersen

	* Moved chunkingtool from main package to wxwidgets package in
	  emdros.spec*.in.

	* Added parameter for font family to constructor for
	  InterlinearLineMetrics in include/viewmetrics.h.

============ 1.2.0.pre190 ============

2006-02-13  Ulrik Petersen

	* Changed examples/ChunkingTool/ctmf.cpp:loadFile in a manner
	  similar to that done to qrytool/qtoutput.cpp in pre189.

	* Added kForm_NFC to the "output flags" to the call in
	  src/qrytool/qtoutput.cpp which creates the TECkit Converter.

	* Made the RPM .spec files work again.

============ 1.2.0.pre189 ============

2006-02-12  Ulrik Petersen

	* Made it compile, run, and macdist on Mac OS X.

	* Changed src/qrytool/qtoutput.cpp:loadFile such that it works in
	  the case of not being able to load first time, but needing to
	  add app_prefix.

============ 1.2.0.pre188 ============

2006-02-09  Ulrik Petersen

	* Changes to wx/viewmetrics: m_latinFont is now deleted whenever
	  it needs to be deleted.

	* In wx/layout.cpp: Better handling of pDC->SetFont and
	  pDC->GetTextExtent.

============ 1.2.0.pre187 ============

2006-01-28  Ulrik Petersen

	* Changes to wx/layout.cpp and include/layout.h to speed things
	  up.

	* Fixed bug in src/qrytool/wxilqtout.cpp: bool bRightToLeft =
	  false should be m_bIsRightToLeft = false.

	* Added EMdF/monads.cpp:FastSetOfMonads::unionWith(const
	  SetOfMonads& other).

	* Changes to ChunkingTool:

	  - Made the interface a bit faster in response-times.

	  - Added a "Combine" command.

	  - Added a "pre_chunking_unit" feature, which allows you to
	    specify a unit that will be converted to chunks if there are
	    no chunks in the database.

	
============ 1.2.0.pre186 ============

2006-01-24  Ulrik Petersen

	* Added support to the topographic MQL part for NOTEXIST that is
	  not the sole block in the block_str.  See the MQL Programmer's
	  Guide for information on what the new semantics is.

============ 1.2.0.pre185 ============

2006-01-20  Ulrik Petersen

	* Fixed a bug in MatchedObject::sheafIsEmpty(): It would only
	  check whether m_sheaf was 0 (nil), not whether the sheaf was
	  actually empty if there was a sheaf.

	* Fixed a bug in FastSetOfMonads::addMSE(): For the cases of
	  overlap, adjacent, and subsume, I incremented the iterator AFTER
	  I had erased the thing.  Apparently this worked on Linux but not
	  on Windows with the SGI STL.

	
2006-01-14  Ulrik Petersen

	* Got a very small speed increase by:

	  - Reimplementing InstObject::getMonads() and

	  - Removing the focus parameter to MatchedObject's constructor
	    for ID_D MOs.  It wasn't necessary, as it was moved into
	    ObjectBlockBase some time ago.

============ 1.2.0.pre184 ============

2006-01-13  Ulrik Petersen

	* Made the lexers (mql.lxx and mql_get_query.lxx) somewhat faster.
	  This is especially noticeable if a query is very long.

	
============ 1.2.0.pre183 ============

2006-01-13  Ulrik Petersen

	* Fixed bug in manage_indices.cpp: It zero-filled the password
	  before it was used...

	* Fixed bug in win32/win32.mak: libutil_emdros.lib wasn't being
	  built if EMDROS_ONLY==0, which it should.

	* Got a speed increase on CREATE OBJECTS WITH OBJECT TYPE, by
	  doing FeatureAssignment::typeAssignTypes a different way.
	  Instead of relying on the cache in EMdFDB, it now gets passed a
	  std::list<FeatureInfo>.  This affects CREATE OBJECT, CREATE
	  OBJECTS WITH OBJECT TYPE, and UPDATE OBJECT.

	* Changed the way CREATE OBJECT TYPE works: Before, the
	  object_id_d would be INTEGER PRIMARY KEY if range type was not
	  kORTMultipleRange, but would get just an INT NOT NULL and a
	  PRIMARY KEY(object_id_d) if it was kORTMultipleRange.  This was
	  inefficient on SQLite, and was also unnecessary.  This made the
	  example databases quite a bit smaller.  There is no change to
	  the schema: Emdros versions from 1.2.0.pre154 and up can read
	  the new databases, and this version can read databases created
	  with versions 1.2.0.pre154 to 1.2.0.pre182.  It is just an
	  optimization of the OT_objects table.

	* Fixed bug in BlockString::symbolObjectReferences():
	  ppInnermostBlockStringHavingAllForBlockString wasn't being
	  initialized to 0 as it should!

	* Reimplemented mql_R.cpp, the  topographic part of MQL.  That is,
	  I removed  the pParentStraw paremeter.   The reason was  that it
	  was impossible to keep the stipulated invariant, namely that:

	      I12) All functions below R_blocks_XXX and above R_opt_blocks
	      have a parameter, pParentStraw, which shows the current
	      straw being made.  If this parent straw is not added to
	      pResultLOS, then the call in which it is not added must
	      return an empty pResultLOS.  If the call does not return an
	      empty pResultLOS, then the caller can assume that
	      pParentStraw was added exactly once to pResultLOS, or that
	      the callee has deleted pParentStraw.

	* Changed prototype of ListOfStraws::join(Straw* s) to have const
	  Straw *s. Removed ListOfStraws::join(Straw *s, bool bTakeOver)
	  and moved the functionality into
	  ListOfStraws::joinAndTakeOver(Straw *s) and
	  ListOfStraws::join(const Straw *s).

	* Implemented ListOfStraws::appendACopy(const ListOfStraws
	  *pOther).  Used it in the ObjectBlockSTAR implementation in
	  mql_R.cpp.


============ 1.2.0.pre182 ============

2006-01-13  Ulrik Petersen

	* Upgraded to SQLite 2.8.17.

============ 1.2.0.pre181 ============

2006-01-11  Ulrik Petersen

	* Fixed bug in string_func.cpp:string2charset(): Control reached
	  end of function without return value.

	* Updated Win32 build process to use wxWidgets 2.6.2.

	* Made FastMonadSet not SWIG'ified.

	* Removed redundant variables in a number of files (I compiled
	  with -Wall and heeded warnings).

	
============ 1.2.0.pre180 ============

2006-01-11  Ulrik Petersen

	* Fixed bug in EMdFDB::getObjectsHavingMonadsIn():
	  objects_already_seen was not being used, and so an object might
	  show up more than once...

	* Took greater advantage of the new FastSetOfMonads in
	  EMdFDB::getObjectsHavingMonadsIn() by raising both MAX_MSES2 and
	  MIN_GAP.  The result is a nice speed increas on GET OBJECTS
	  HAVING MONADS IN.

	
2006-01-10  Ulrik Petersen

	* Bugfixed + enhanced FastSetOfMonads.

	* Implemented more monads-set tests in emdftry.cpp.

	* Found a bug in the logic for how to treat MSEs in a monad set,
	  and corrected it.  The affected methods are
	  SetOfMonads::part_of, SetOfMonads::removeMSE,
	  SetOfMonads::intersect, SetOfMonads::overlap.  Basically, the
	  order in which the 6 relationships were checked was wrong.  It
	  needs to be 1,5,3,6,2 instead of 1,2,3,4,5.

	
============ 1.2.0.pre179 ============

2006-01-10  Ulrik Petersen

	* Implemented a FastSetOfMonads.

	* Used it in GET OBJECTS HAVING MONADS IN, and got a nice speed
	  increase.

	* Implemented som tests in tests/emdftry.cpp for FastSetOfMonads.
	
============ 1.2.0.pre178 ============

2006-01-09  Ulrik Petersen

	* Fixed bug #1400913 in EMdF/inst.cpp: With the new mql_R.cpp
	  (from 1.2.0.pre163), Inst::next() should really advance the
	  iterator to the next monad, which it didn't.  This caused
	  duplicate results to be returned in some cases.  This was done
	  by changing "pInst->next(i)" to "pInst->nextAtHigherKey(i)".
	  Also, implemented SkipListConstIterator::advanceToNextKey().

	* inst.cpp now uses ci.currentKey() instead of
	  ci.current()->first().

============ 1.2.0.pre177 ============

2005-12-18  Ulrik Petersen

	* Fixed an off-by-one bug in
	  src/qrytool/output_style.cpp:do_reference.
	
2005-12-17  Ulrik Petersen

	* Fixed bug in creation of AGXML anchors: Only the start and end
	  of all SOMs were added, not the start and end of all MSEs in
	  each SOM.

	* Added the rudiments of a NeGRA-format importer.  Doesn't
	  actually even compile yet...

	* Now distributes the TECkit headers on all platforms.

	* Fixed bug in R_object_block_DB: som_last and su_last were not
	  initialized.

	* Emdros Query Tool: 

	  - Fixed doc/EQTUsersGuide.hhp to say "EQTUsersGuide" rather than
	    just "UsersGuide".

	  - Bumped version number to 1.0.2.

	  - app_path is now set correctly on Win32.

	  - It doesn't connect upon startup: You have to press the new
	    "Connect to DB" button, or choose "Tools|New DB connection".

	  - Various typos fixed in strings.

	  - Now refreshes itself upon connect.

	  - Now checks that m_pEE is not 0 (nil) before attempting connection.

	  - Documentation of EQT is now build in PDF as well as in HTML.
	
	
2005-12-16  Ulrik Petersen

	* Added doc/agexport.1.
	
	* Added Emdros Chunking Tool to Start menu on Win32, along with
	  agexport.html.

	* Renamed the Emdros Query Tool's UsersGuide.htb to
	  EQTUsersGuide.htb.

	* Moved the core functionality of mqldump.cpp into
	  util/mql_exporter.cpp.
	

============ 1.2.0.pre176 ============

2005-12-16  Ulrik Petersen

	* Made EmdrosChunkingTool compile and run under Win32.  Changed
	  mainframe.{cpp,h} to ctmf.{cpp,h}.  It is NOT a good idea to
	  have the same filename in different places in the sourcecode,
	  since this will cause problems on Win32 unless the .obj files
	  are placed in different directories -- as is done with SQLite,
	  because it produces a file called "table.obj", which of course
	  would conflict with the object file from EMdF/table.cpp.

	* Now builds agexport.exe on Win32.

	* Updated DJGPP build process.

	* Now distributes EmdrosChunkingTool.exe on Win32, along with
	  libemdrosgui and libutil_emdros, as well as agexport.exe.
	
	
2005-12-15  Ulrik Petersen

	* Added examples/ChunkingTool.

	* Rewrote parts of wx/layout.cpp and include/layout.h such that
	  paragraphs can now be created with a certain indentation.

	* Added GetLong/SetLong in include/layout.h:LayoutBox.

	* doc/ no longer cleans $(PDFFILES) and TheDoor.eps; it merely
	  distcleans them.

	* Added some icons to wx/.

	* Removed option to not compile PCRE.

	* Added blue-E.icns resource to wx/, and used it in the Query Tool
	  and in the ChunkingTool.

	* Added src/agexport.cpp, util/agxml.cpp, and include/agxml.h.

	* Added string_func.cpp:string2charset().

	* Added FlatStraw::getObjectTypeName().

2005-12-14  Ulrik Petersen

	* Restored build of the non-unicode version of the Emdros Query
	  Tool.
	
============ 1.2.0.pre175 ============

2005-11-16  Ulrik Petersen

	* Added Mac OS X support for the Emdros Query Tool.

============ 1.2.0.pre174 ============

2005-11-12  Ulrik Petersen

	* Made eqt not crash if there was something wrong in reading the
	  configuration file.

	* Various other improvements to EQT.

	* Now distributes libteckit.a.

	* Various improvements to the wx/ library.

============ 1.2.0.pre173 ============

2005-11-10  Ulrik Petersen

	* Re-added support for DJGPP.

	* Added LayoutCanvas to wx/layout.cpp.

	* Took advantage of LayoutCanvas in the Emdros Query Tool.  Added
	  src/qrytool/wxilqtout.{cpp,h}.  Got rid of
	  src/qrytool/wxqtout.{cpp,h}.

	* Added Alex Bodn's Public Domain patch for DJGPP to SQLite.

	* Made various improvements to the Emdros Query Tool.

	
============ 1.2.0.pre172 ============

2005-11-07  Ulrik Petersen

	* Implemented Sheaf::appendAndSubsume()

	* Added a BlockString class to mql_query.{cpp,h}
	
	* Implemented OR between strings of blocks (that's what resides in
	  a BlockString).

	* Added checks to mql_query.cpp (::symbolObjectReferences()) which
	  check that we do not cross an "export barrier" with an object
	  reference declaration.  An export barrier is either a STAR, an
	  OR, or a NOTEXIST.

	* Added checks to mqltry.cpp checking the new OR machinery, as
	  well as the symbol-machinery for export barriers.

	* Fixed bug in mqltry.cpp:
	  exec_string_expect_compiler_error_but_no_DB_error did not set
	  bAllOK to false upon failure, which it should and does now.

	* Fixed bug in mql_R.cpp: NOTEXIST at the outermost level would
	  segfault due to R_block_string_NOTEXIST_object_block() returning
	  0 for the sheaf.
	
============ 1.2.0.pre171 ============

2005-11-07  Ulrik Petersen
	
	* Added ListOfStraws::clearButDontDeleteStraws.

	* Rewrote mql_R.cpp partially, so that the current Straw being
	  made is always accessible, on the stack.

2005-11-04  Ulrik Petersen

	* Changed emdros.spec[2].in so that libutil_emdros.a and
	  libemdrosgui.a are now installed.

============ 1.2.0.pre170 ============

2005-11-03  Ulrik Petersen

	* Made the changes from pre169 compile on Win32.

	* Changed eqtc (src/qrytool/mqlqt.cpp) so that it prints the
	  config file being used upon startup.

	* Changed eqtc (src/qrytool/mqlqt.cpp) and eqt(u) so that they use
	  the correct prefix (app_prefix() rather than just prefix()).

============ 1.2.0.pre169 ============

2005-11-03  Ulrik Petersen

	* Added the directories wx/ and util/.  The wx directory has some
	  classes that I plan to use for the Emdros Query Tool, and also
	  splits out some classes from the Emdros Query Tool which are
	  generally useful for wxWidgets-based programs.  The util/
	  directory separates out some stuff from the Emdros Query Tool
	  which is generally useful.

	* Rewrote Emdros Query Tool and HAL-space to use the libraries in
	  wx/ and util/.

	* Added some functions to EMdF/string_func.cpp.

	* Moved myos.h.in from src/qrytool and examples/HAL to
	  include/prefix_emdros.h.in.
	
2005-11-01  Ulrik Petersen

	* Bugfix/Enhancement: It used to be that you could use any
	  operator with LIST_FEATURE op Object_Reference.LIST_FEATURE, not
	  just IN and HAS.  This was bad, as it allowed = between the two,
	  but did not do the expected thing.  Now = is a possibility in
	  addition to IN and HAS, and it compares equal if and only if the
	  two lists have exactly the same sequence of values.

============ 1.2.0.pre168 ============

2005-10-29  Ulrik Petersen

	* Changed configure.in in several ways:

	  - Finding Python, PostgreSQL's libpq, PostgreSQL's libpq-fe.h,
	    and MySQL's libmysqlclient are now much better, and handle
	    FreeBSD and NetBSD in addition to Linux and Solaris.

	* Added -lphtread to
	  sqlite/src/Makefile.am:libsqlite_emdros_la_LDADD.  This was
	  necessary to get it working on NetBSD, and didn't do any harm on
	  Linux or FreeBSD.

	* Changed examples/HAL/Makefile.am: It now adds libhal.a directly
	  on the _LDADD line for halblddb and mqlhal.

	* Added -L/usr/pkg/lib to LDFLAGS in sqlite/configure.ac.  This
	  was so as to get it to work on NetBSD.

	* Changed SWIG/perl/Makefile.am such that the BUILT_SOURCES are
	  now relative to $(srcdir), as they are in the targets.  This was
	  so as to get it to work on NetBSD.

	* Changed SWIG/python/Makefile.am to export PYTHON=$(PYTHON)
	  before running py-compile.  This was so as to get it to work on
	  NetBSD, where PYTHON is set by configure.in, and where "python"
	  does not necessarily exist.

	* Changed sqlite/configure.ac so that -L/usr/pkg/lib is added to
	  LDFLAGS if on NetBSD, and so that Tcl_Init is looked for in
	  tcl84, tcl83, and tcl82 in addition to tcl8.4, tcl8.3, and
	  tcl8.2, and so that -lpthread is added to otherlibs for
	  determining tcl library.  All of this is necessary on NetBSD.
	
	
2005-10-28  Ulrik Petersen

	* Added preliminary support for PHP via SWIG.

	* Got a large speed-increase on the Emdros Query Tool by
	  implementing a different algorithm for comparing MyRow's with
	  each other in the MyTable::m_rows std::multimap.  Especially if
	  the solution-sets are large, you will see a large speed
	  increase.

============ 1.2.0.pre167 ============

2005-10-25  Ulrik Petersen

	* Added INITIALIZE DATABASE statement to docs and code.
	
2005-10-21  Ulrik Petersen

	* Updated emdros.spec.in/emdros.spec2.in to reflect changes in
	  documentation.

============ 1.2.0.pre166 ============

2005-10-20  Ulrik Petersen

	* Made changes to the Win32 build process.

	* Changed off_t to offset_t in SQLite sources.

============ 1.2.0.pre165 ============

2005-10-20  Ulrik Petersen

	* Modified win32/win32.mak to reflect changes in documentation.

============ 1.2.0.pre164 ============

2005-10-20  Ulrik Petersen

	* Removed all kMOKXXX (MatchedObject kinds) except kMOKEMPTY_mo,
	  kMOKID_D, and kMOKID_M from MatchedObject and mql_enums.h
	  (eMOKKind still has kMOKNIL_mo, but this is not present in
	  MatchedObject as an option).

	* Rewrote the weeder for topographic queries.  Also added some
	  constraints, documented in mql_R.cpp.

	* Documented the new invariants in mql_R.cpp.

	* Implemented R_blocks_opt_gap().

	* Got rid of ObjectBlockCommon: Now there is only ObjectBlock.
	  The distinction between ObjectBlock and ObjectBlockFirst had
	  become obsolete when I redesigned the language in 1.2.0.pre163.

	* Updated win32/emdros.nsi.in to reflect new documentation.

	* Fixed some bugs in mql_R.cpp.

	* Added some tests to mqltry.cpp.

	
============ 1.2.0.pre163 ============

2005-10-15  Ulrik Petersen

	* Redesigned the topographic part of MQL from scratch:

	  - STAR is now allowed on the first block in the blocks, and also
	    on the first block after a power block.

	  - You can now start a blocks with a gap_block (but still not
	    after a power_block).

	  - NOTEXIST is now only allowed on a single, lone object block,
	    which has to be the only block in the blocks.

	* mqltry.cpp was updated with new tests.

	* Changes to Emdros Query Tool:

	  - A message is now given when the TECKit mapping can't be
	    loaded.

	  - Another error message was edited slightly.

	* Changes to HAL example:

	  - The default .cfg file is now called "default.cfg" instead of
	    "hal.cfg".

	  - Added preliminary support for output of Burmeister Format
  	    (*.cxt).

	  - Added preliminary support for output of SQL.

	* Added SetOfMonads::getGaps.

	* Added mql_query.h: class Gaps.
	
2005-10-07  Ulrik Petersen

	* Bugfix/speedup: CREATE OBJECTS WITH OBJECT TYPE is now faster in
	  the case where you don't wrap it in a transaction (which you
	  should do, however): The whole process is now wrapped in a
	  transaction, not just some of it (unless you've started a
	  transaction yourself).  This can be seen as a correctness bug,
	  but it can also be seen as a speedup, since all those
	  getNextObject_ID_D calls were done in individual transactions,
	  which was very slow.  This was especially noticeable in
	  hal_build_db.

	* Bugfix: emdfdb.cpp now calls pConn2->finalize() explicitly upon
	  failure.

	* Bugfix in examples/HAL/HALSpace.cpp: maybeExecQuery now sets
	  count = 0 after a successful commit.  This bug (i.e., not doing
	  it) caused problems if there were more than 100000 words.
	
2005-10-07  Ulrik Petersen

	* Optimized Emdros Query Tool to use Llist<> instead of std::list
	  and std::vector.

============ 1.2.0.pre162 ============
	
2005-10-07  Ulrik Petersen

	* Optimized XML output:

	  - Added kOKCompactXML as a new eOutputKind.  Use it unless you
  	    want pretty-printed XML.

	  - Changed interface to EMdFOutput's XML output methods to use
 	    const char* rather than std::string.

	  - Added EMdFOutput::out(char) and EMdFOutput::out(const char*)
	    as inline method.

	  - Made EMdFOutput::out(std::string) into an inline method.

	  - Optimized the XML output code heavily.

	  - Added --cxml switch to mql(1) to select compact XML.
	
============ 1.2.0.pre161 ============
	
2005-10-07  Ulrik Petersen

	* GET OBJECTS HAVING MONADS IN got a speed boost, by increasing
	  MIN_GAP to 40000.

2005-10-06  Ulrik Petersen
	
	* On PostgreSQL, when creating the database, the default encoding
	  is now set to SQL_ASCII.  This was because that was the DEFAULT
	  on versions prior to PostgreSQL 8.0 (on my various Linux
	  systems, at least), but this changed to UNICODE on PostgreSQL
	  8.0 (at least on Fedora Core 4).  This is a temporary fix while
	  I figure out what to do about encodings....

============ 1.2.0.pre160 ============

2005-09-29  Ulrik Petersen

	* Fixed a correctness bug in mql_R.cpp:R_block(): The rest of the
	  code assumed that R_block returned a list of straw with 1 MO in
	  each straw if this was an object block, but that wasn't
	  happening: Instead, the straw that was handed back from
	  R_object_block was appended to the ListOfStraw that was passed
	  to R_block.  This led to bug #1307568, which could cause
	  problems if there was more than 1 object starting at a given
	  point.
	
============ 1.2.0.pre159 ============

2005-09-26  Ulrik Petersen

	* Fixed bug in mqldump.cpp: not being able to dump list of enum.

	* Added macro to emdfdb.h:
	  GET_ENUM_FEATURE_ID_FROM_LIST_OF_ENUM_FEATURE_ID(X).

	* Expanded mqltry.cpp to test lists of {id_d,integer,enum_const}
	  more rigorously.

	* Fixed a bug in EMdFComparison::compare: HAS didn't work.

	* Fixed bug in FeatureComparison::type: lists of enums weren't
	  being type-tested rigorously enough.
	
============ 1.2.0.pre158 ============

2005-09-23  Ulrik Petersen

	* Fixed a bug in the CREATE OBJECT statement whereby lists of
	  enums would get added as a list of enum constants, not as a list
	  of integers as they should.

	* Fixed a bug in CREATE OBJECTS WITH OBJECT TYPE whereby lists of
	  enum would be added to the database in reverse order.

	* Fixed a bug in MatchedObject::printConsole and a similar one in
	  MatchedObject::printXML whereby list of enum constants would be
	  in reverse order of what was in the database.

============ 1.2.0.pre157 ============

2005-09-21  Ulrik Petersen

	* Made the Win32 SWIG DLLs really work again.

	* Made the SWIG Java example work.

============ 1.2.0.pre156 ============

2005-09-21  Ulrik Petersen

	* Made the Win32 SWIG DLLs work again.

2005-09-14  Ulrik Petersen

	* Got a speed increase by removing a copyMO in
	  mql_R.cpp:R_block_str().

	* Got a speed increase by rearranging some stuff in
	  EMdFDB::getInst().  In particular, an InstObject is now only
	  created if bDoAdd is true -- before, it was always created, and
	  then its destructor was called if bDoAdd was false.

============ 1.2.0.pre155 ============

2005-09-10  Ulrik Petersen

	* mqldump.cpp now emits BEGIN transaction immediately after DROP
	  INDEXES ON OBJECT TYPE, and COMMITs it immediately before CREATE
	  INDEXES ON OBJECT TYPE.  Transactions aren't committed and begun
	  in between.  This led to a speed increase when reloading the
	  database.
	
============ 1.2.0.pre154 ============

2005-09-10  Ulrik Petersen

	* Made changes to Solaris Sun Forte CC build in configure.in:
	  libtool is changed so that "CXX=\"g++\"" is changed to
	  "CXX=\"CC\"".  This was so as to make it work again with shared
	  libraries.  
  	    - Automake version: automake-1.9.5-1
	    - libtool version: libtool-1.5.16.multilib2-2
	    - autoconf version: autoconf-2.59-5
	  This is on Fedora Core 4.
	
	* In EMdF/pgconn.cpp, unistd.h is now only #include'd if this is
	  not WIN32.
	
	* By default, Win32 is now compiled as /MT rather than /MD.  This
	  removes the dependency on msvcrt71.dll and msvcp71.dll.  I could
	  not legally distribute these, so users who did not have them
	  were left to obtain them for themselves.  Not very nice...

	* On Win32, the new build machinery (from pre148) is now
	  implemented for SWIG/java and SWIG/python.

	* On Win32, the win32/emdros.nsi.in script now installs the
	  sourcecode.

	* Overhauled the FEATURE_TYPE #defines:
	  - Added FEATURE_TYPE_ENUM
	  - Added FEATURE_TYPE_LIST_OF_INTEGER
	  - Added FEATURE_TYPE_LIST_OF_ID_D
	  - Added FEATURE_TYPE_LIST_OF_ENUM
	  - Changed FEATURE_TYPE_TYPE_MASK so that it strips out all but
  	    the lowest 8 bits.
	  - Overhauled everything that touched featureTypeIdIsXXX and/or
	    FEATURE_TYPE_XXX.

	* src/mqldump.cpp now adds 'quotes' around the DB name when
	  dumping that, so as to accommodate SQLite.
	
	* mqldump now works with LIST OF X.

	* mql_execute.{h,cpp} and
	  emdros_environment.cpp/environment_emdros.h now have
	  "throw(... , EmdrosException)" because that is throwable now.
	  If this were not added, then the program would abort prematurely
	  if an EmdrosException was thrown (on Linux, at least).

	* Added ASSERT_THROW and ASSERT_THROW_X to include/debug.h.  Used
	  them in a number of places.  Removed ASSERT_THROW from
	  EMdF/table.cpp.  Used ASSERT_THROW_X instead.

	* In PgEMdFDB::createObjectsOT_objects_data: FeatureInfo2SQLvalue
	  might throw an EMdFDBDBError exception in getID_DFromSet().
	  Therefore, this is now surrounded by a try... catch, which
	  prints an error message on the local error message stream,
	  including the error message of the exception.  Then throws the
	  exception.

	* mql.cpp now catches more exceptions.
	
============ 1.2.0.pre153 ============

	
2005-09-09  Ulrik Petersen

	* Made BIG_ENDIAN configure.in-variable work on Solaris SPARC.

	* Made changes to TECKit/Compiler.cpp to make it compile on Sun
	  Solaris.

	* Made changes to qrytool/mytable.h to make it compile on Sun
	  Solaris with Sun Forte CC (extraneous const keywords in template
	  arguments which didn't do anything...).

	* libteckit.a, libqrytool.a, libwxqtl.a, libwxqtlu.a, and libhal.a
	  are now lib'ified on Sun Forte CC with "libXXX_a_AR = $(CXX)
	  -xar -o" when HOSTISSUNCC is AM_CONDITIONAL true, and
	  "libXXX_a_AR = $(AR) $(AR_FLAGS)" otherwise.  Note that this may
	  break the build on Darwin -- I just haven't gotten a chance to
	  check that yet.

============ 1.2.0.pre152 ============

2005-09-09  Ulrik Petersen

	* Sets of strings now draw their id_ds from SEQUENCE_OBJECT_ID_DS.
	  This was necessary because SEQUENCE_OTHER_ID_DS is now a limited
	  resource.

	* Renamed sequence_118_0 and sequence_118_1 to sequence_0 and
	  sequence_0 respectively.

	* Renamed SEQUENCE_OTHER_IDS (sequence_1) to SEQUENCE_TYPE_IDS.
	  It is now only used for object type ids, enum ids, and feature
	  type ids.  It is still shift-lefted.
	
	* Added a third sequence (sequence_2), called SEQUENCE_OTHER_IDS.
	  It is used for everything else (i.e., monad sets, and string set
	  ids).

	
2005-09-08  Ulrik Petersen

	* The weeder now catches the case where we have an object
	  reference usage on the same object block as that on which it was
	  declared.

	* Added lists of integers, id_ds, and enum constants to the EMdF
	  and MQL layer.  NOTE: This breaks backwards
	  schema-compatibility!

	* SEQUENCE_OBJECT_ID_DS and SEQUENCE_OTHER_ID_DS now start at 1.
	
	* The way SEQUENCE_OTHER_ID_DS is generated is now changed: The
	  number is drawn, and then shift-lefted 16 bits.  This was so as
	  to make room for a byte (bits 8-15) of modifier-bits.

	* Added feature IN (integer1, integer2, ..., integerN) to
	  topographic language.

	* Added feature IN object_reference_usage to topographic language,
	  where the object reference usage refers to a list of something.

	* Added feature HAS value to topographic language where feature is
	  a list of something, and value is an atomic value or an object
	  reference usage referring to an atomic feature.
	
============ 1.2.0.pre151 ============

2005-08-27  Ulrik Petersen

	* Changed SQLite build scripts to define HOST_IS_BIGENDIAN=[0|1]
	  according to whether this is a PowerPC or Sparc, or something
	  else.
	
2005-08-25  Ulrik Petersen

	* Removed a memory leak in the harvester of the query tool.

============ 1.2.0.pre150 ============

2005-08-21  Ulrik Petersen

	* Made it compile again on Win32, by removing some extraneous
	  stuff in win32/config.mak.in.

============ 1.2.0.pre149 ============

2005-08-21  Ulrik Petersen

	* Added new statement: GET SET FROM FEATURE, which makes use of
	  the new EMdFDB::getStringSetStringsAndAddToCache().

============ 1.2.0.pre148 ============

2005-08-15  Ulrik Petersen

	* Completely overhauled the win32 build, such that debug
	  information can be compiled except if compiling with SWIG.
	
2005-08-08  Ulrik Petersen

	* Fixed bug in lexer/parser: It now gives a meaningful token name
	  rather than a misleading message upon syntax error.

============ 1.2.0.pre147 ============

2005-08-05  Ulrik Petersen

	* Added code to support encryption on SQLite.  You might want to
	  get the encryption-enabled version of SQLite from Dr. Hipp, the
	  author of SQLite.

	* Added Makefile-machinery to distribute the SQLite tests that
	  were added in pre146.
	
============ 1.2.0.pre146 ============

2005-08-04  Ulrik Petersen
	
	* Upgraded to the latest CVS version of SQLite 2.8.16.

	* Added the tests to SQLite 2.8.16, and the machinery to build
	  them, but only on Linux and only if tcl.h is available.
	
============ 1.2.0.pre145 ============

2005-08-02  Ulrik Petersen
	
	* Took out the default password.  Removed default_password.h and
	  print_default_password.cpp.  Also fixed up the documentation.

	* Changed "encryption" so that it is simpler.  In particular,
	  encryption.h is now a static file; it is not dynamically
	  generated.

	* USE DATABASE on SQLite now returns error if the database doesn't
	  exist.  It doesn't just create the database file silently.  To
	  do this, I made an extern definition of sqliteOsFileExists in
	  sqliteconn.cpp.  This is defined in sqlite/src/os.c.

	* Removed some warnings on MSVC by adding a #pragma to emdf.h and
	  including that judiciously.  Also changed some ints to unsigned
	  int to keep the compiler from complaining about comparison type
	  mismatches.
	
============ 1.2.0.pre144 ============

2005-07-30  Ulrik Petersen

	* Upgraded to PCRE 6.1.

	* Added "EMDROS_ONLY" to win32/config.mak.in.

	* Homogenized win32 build process so that LIBFLAGS or LIBFLAGS
	  are always used.

	* Made it build on gcc 4.0.1.

============ 1.2.0.pre143 ============

2005-07-12  Ulrik Petersen

	* Syntactic sugar in monad sets: You can now say {10-} and mean
	  "from 10 (inclusive) up to MAX_MONAD (i.e., practical infinity)".

	* Fixed bug: mql_query.h wasn't installed, but was #include'd in
	  mql_sheaf.h.  It is installed now.

	* Fixed bug: pcre.h was #include'd in mql_query.h, but wasn't
	  installed.  It is now called pcre_emdros.h and is installed.

	* Removed straight_join from MySQL EMdFDB::getInst() because it
	  wasn't serving its purpose any more, and didn't give noticeable
	  speedups.

============ 1.2.0.pre142 ============

2005-07-11  Ulrik Petersen

	* Added machinery on Win32 to build an installer with NSIS
	  (http://nsis.sourceforge.net).

	* Emdros on PostgreSQL on Win32 now REQUIRES PostgreSQL 8.0 or
	  later.

	* Added LyX docs to doc/, and machinery to build and distribute
	  PDFs of them.

	* src/qrytool/TECkit/{TxtConv,TECkit_Compile} are now installed.

	
2005-07-10  Ulrik Petersen

	* Did a reorganization of the documentation files such that they
	  are more Windows-friendly (i.e., unix2dos; a .txt ending).

	* mqlqtwx is now called eqt (Emdros Query Tool); mqlqtwxu is now
	  called eqtu; mqlqt is now called eqtc (Emdros Query Tool
	  Console).

============ 1.2.0.pre141 ============

2005-07-08  Ulrik Petersen

	* Got a speed increase on GET OBJECTS HAVING MONADS IN, and
	  sometimes on getInst, by doing a simple join in the case of a
	  string that is FROM SET, instead of getting them all afterwards.

	* Got a speed increase on SELECT ALL OBJECTS and GET OBJECTS
	  HAVING MONADS IN by not allocating EMdFValue and then assigning,
	  but rather using the new-placement operator directly when
	  constructing the EMdFValue object.

============ 1.2.0.pre140 ============

2005-06-07  Ulrik Petersen

	* Added an optimization to SetOfMonads::part_of().

	* Added changes to src/qrytool/Amsterdam.map from Christopher
	  Samuel.
	
2005-06-04  Ulrik Petersen

	* Changed splash screen of mqlqtwx(u) to the Emdros logo.

	* Changed PROGRAMLDADD to be "" even on COMPILER_IS_GPLUSPLUS.  It
	  was "-lgcc -lstd++".  Also changed DARWIN_LDFLAGS to be "".
	  This was in a bid to make it compile on Mac OS X 10.4 (Tiger).

	* Added a sample TECkit mapping (Amsterdam.map) to mqlqt(wx(u)).
	  Thanks to Dr. Christopher J. Samuel for contributing this.
	
2005-05-31  Ulrik Petersen

	* Changed mqlqtwx(u):

	  - Updated docs slightly.

	
============ 1.2.0.pre139 ============

2005-05-31  Ulrik Petersen

	* Changed mqlqtwx(u):

	  - Made it compile on Win32 again.

	  - Removed an extraneous MainFrame::InfoMessage.
	

============ 1.2.0.pre138 ============

2005-05-31  Ulrik Petersen

	* Changed mqlqt(wx(u)):

	  - Added options "{input,output}_area_font_{name,size}", also to
	    docs.

	  - Made it compile and build in Win32.

	  - Made docs comply with PCRE license.

	  - Changed COPYING and src/qrytool/TECkit/README.txt to reflect
	    inclusion of TECkit, and that the sources are modified.

	  - Added splash screen.

	
============ 1.2.0.pre137 ============

2005-05-31  Ulrik Petersen

	* Changed mqlqt(wx(u)):

	  - Refactored to have EmdrosWrapper as the one that holds an
	    EmdrosEnv, a Configuration, and a QTOutputBase.

	  - Refactored so that getting the schema is now in separate
	    classes, not in mainframe.cpp.

	  - TECkit is now fully configurable, and works.

	  - Added an MQL Cheat Sheet to User's Guide, and updated User's
	    Guide in other ways.

	
2005-05-30  Ulrik Petersen

	* Added monads.cpp:SOMConstMonadIterator, which is an iterator
	  over monads, not monad set elements.

	* Changed mqlqt(wx(u)):

	  - Added "Solution number: %d" before each solution.

	  - Harvesting's calculation of results is now much faster, due to
	    using a multimap based on first monad rather than a vector.

	  - Now does single_raster_units correctly: It is not just the
	    first raster unit in the table, but all raster units, that
	    must be checked for its id_d having been seen before.

	  - Added ability in conf.cpp to have subsubkeys.

	  - Added ability in conf.cpp to have strings as sub(sub)keys.

	* Changed mqlqtwx(u):
	
	  - Added "Save output as...".

	  - Splitter windows are now resized to sensible defaults when the
	    window is maximized or sized.

	  - You can now copy from the schema tree to the clipboard (on
	    Win32).

	  - The "Tab" key now doesn't change to the next window in the
	    input/query window, but instead inserts a tab.
	

============ 1.2.0.pre136 ============

2005-05-28  Ulrik Petersen

	* Gained a ~4% speed increase by only calculating the inst of the
	  inner blocks when necessary.

============ 1.2.0.pre135 ============

2005-05-28  Ulrik Petersen

	* Made it compile on PostgreSQL again.

	* Changed getInst slightly.  Got a negligible speed increase.

	* Now doesn't add opt_gap_block in parser, but in
	  mql_query.cpp:*::type(), and only if surrounding context is
	  potentially a kORTMultipleRange.

	* Got a speed increase on opt_gap_blocks and gap_blocks that have
	  an inner blocks, by doing aggregate querying inside the gap.
	
============ 1.2.0.pre134 ============

2005-05-28  Ulrik Petersen
	
	* Changed machinery in mqlqt(wx(u)) so that it prints much faster
	  on mqlqtwx(u), i.e., it doesn't immediately print to the text
	  control, but buffers stuff and prints upon WXQTOutput::flush().
	
2005-05-27  Ulrik Petersen

	* Added btree_rb.c to the objects built for SQLite.

2005-05-24  Ulrik Petersen

	* Made configure.in look automatically in /usr/lib64/mysql for
	  -lmysqlclient.

============ 1.2.0.pre133 ============

2005-05-24  Ulrik Petersen

	* Changed win32/config.mak.in to reflect my new machine.

	* Changed QTOutput::Yield() and descendants to MyYield().  This
	  was so as to avoid a name-clash on Win32.

	* Gave QTOutput::printFeature and descendants a new parameter,
	  namely const std::string& feature_name.

	* Added TECkit from SIL.

	* Added machinery to QTOutputBase to compile and use TECkit
	  mappings.

	* Changed definition of INTPTR_TYPE from long long to long in
	  sqlite/src/sqliteInt.h, since Visual C++ 6.0 with no service
	  packs installed complained about this when on AMD64.

	* Added definition of BIG_ENDIAN={0|1} to configure.in, and used
	  it in TECkit and querytool Makefile.am's.

	
2005-05-19  Ulrik Petersen

	* Removed some unused methods and constructors from
	  src/qrytool/mytable.cpp.
	
	* Got a speed increase on GET OBJECTS HAVING MONADS IN when there
	  are "strings from sets" to be retrieved -- by batch-loading them
	  after retrieval and then setting the string in the EMdFValue.
	
	* Got a speed increase on MySQL and SQLite on GET OBJECTS HAVING
	  MONADS IN in the case of SINGLE MONAD OBJECTS by using
	  "first_monad IN (...)" instead of direct comparisons.
	
2005-05-18  Ulrik Petersen

	* Added "option = single_raster_units" to src/qrytool/harvest.cpp.
	  It means, if set, that any given raster unit will only ever be
	  printed once.
	
	* Added --with-32bit switch to configure.in and
	  sqlite/configure.ac: It adds the -m32 switch to tell gcc to
	  compile in 32 bit mode om x86_64.  Also added
	  ADDITIONAL_CXXFLAGS and ADDITIONAL_CFLAGS to Makefile.am's.
	
2005-05-15  Ulrik Petersen

	* Completed the refactorization of pre132.

============ 1.2.0.pre132 ============

2005-05-15  Ulrik Petersen

	* Now only compiles mqlqtwxu if Unicode is turned on in wx-config.
	
	* Made mqlqt(wx)(u) able to have no reference feature.

	* Refactored the include/mql_types.h:Feature class to not have to
	  be turned around, using a GrammarFeature class as an intermediate.
	
2005-05-13  Ulrik Petersen
	
	* The XML output now does an EMdFOutput::newline() after the end-tag
	  "</mql_result>", and after the <mql_result> begin-tag.

	
============ 1.2.0.pre131 ============

2005-05-13  Ulrik Petersen

	* The XML output now does an EMdFOutput::flush() after the end-tag
	  "</mql_results>".


============ 1.2.0.pre130 ============

2005-05-11  Ulrik Petersen

	* Added support to the Makefile.am's for compiling in a build
	  directory rather than right in the sources.  This is useful,
	  e.g., for kdevelop.  Also added autogen.sh, which simply calls
	  "autoreconf --install"

	* Moved m_bIsNOTEXIST from ObjectBlockCommon into ObjectBlockBase.

	* Fixed bug: The inner blocks in a gap_block and an opt_gap_block
	  would not get weeded.

	* Removed the changes to mql_R.cpp and mql_sheaf.{h,cpp} in 129
	  (since they caused inaccurate results to be returned).  

============ 1.2.0.pre129 ============

	* Changes unknown.

============ 1.2.0.pre128 ============

2005-05-06  Ulrik Petersen

	* Fixed bug: mql_R.cpp would return Gen 1.1 on the following
	  query:

	  SELECT ALL OBJECTS
	  IN {1-11}
	  WHERE
	  [clause
	     [phrase [word lexeme = "BR>[" ]  ]!  // the verb 'to create'
	     [phrase] *{1-100}!
	     NOTEXIST [phrase function = Objc]
	  ] 
	  GO

	  This is not the desired result.  In order to fix this, I had to
	  differentiate between kMOKEMPTY_mo and
	  kMOKNOTEXIST_EXHAUSTED_POSSIBILITIES_mo.

	* Changed NOT to NOTEXIST in sources where applicable.
	
	* Fixed bug: mql_R.cpp would go into an infinite loop on the
	  following query:

	  SELECT ALL OBJECTS WHERE 
	  [clause
	     NOTEXIST [phrase function = Objc]
	     ..
	     [phrase [word lexeme = "BR>[" ]  ]
	     ..
	     NOTEXIST [phrase function = Objc]
	  ] GO

	  This was because R_block_string failed to return at the end of
	  the function if the inst had been exhausted.

	  Thanks to Hendrik Jan Bosman for reporting this bug.


============ 1.2.0.pre127 ============

2005-05-02  Ulrik Petersen

	* Made mqlqtwx(u) work with wxWidgets-2.6.0.
	
============ 1.2.0.pre126 ============

2005-05-02  Ulrik Petersen

	* Changes to mqlqtwx(u):
	
	  - Changed message "You stopped the process" to "You successfully
	    stopped the process" in src/qrytool/mainframe.cpp.

	  - Added support for key = "string value with spaces" in conf.cpp.

	  - wxqtout.cpp now uses wxTextCtrl.AppendText rather than << for
	    printing and setConf was derived from QTOutputBase in
	    preparation for changing fonts on-the-fly.

	  - wxqtout.cpp:WXQTOutput::Yield now checks for wxWidgets version
	    2.5, and uses a different signature for wxApp::SendIdleEvents
	    in that case.
	
2005-04-30  Ulrik Petersen

	* Changed the default directory on WIN32 for mqlqtwx(u) to be Cwd
	  rather than UserHome.

============ 1.2.0.pre125 ============

2005-04-28  Ulrik Petersen

	* Added examples/HAL/hal.cfg to win32 dist --> etc\.
	
	* Added some more src/qrytool/*.cfg
	
	* Added online help to mqlqtwx(u), and a src/qrytool/doc/
	  directory.
	
============ 1.2.0.pre124 ============

2005-04-27  Ulrik Petersen
	
	* Added a tree control to mqlqtwx(u) to show database schema.

	* Bumped mqlqtwx(u) version to 1.0.1.
	
============ 1.2.0.pre123 ============

	* Changed default win32 build configuration back to no-SWIG,
	  no-WXWIN.
	
	* Fixed bug in EMdFDB::getObjectsHavingMonadsIn(): It chose
	  WITH_MULTIPLE_RANGE_OBJECTS precisely when they did not overlap
	  with original monad set.

============ 1.2.0.pre122 ============

2005-04-18  Ulrik Petersen

	* Made mqlqtwx build in a Unicode and a non-Unicode version under
	  Win32 and Linux.  Note that the Linux Unicode version requires a
	  wxWidgets that uses GTK+ 2.0 or greater.  Otherwise, there is no
	  difference between the Unicode version and the non-Unicode
	  version.
	
	* Added src/qrytool/mqlqtwxu.exe.manifest
	
	* Made "stop" button og mqlqtwx work under Win32.
	
2005-04-16  Ulrik Petersen

	* The Win32 builds now use /MD rather than /MT.  This was so as to
	  accommodate wxWidgets.  This also meant that libmysqlclient.lib
	  had to be exchanged for libmysql.lib.  This means that users
	  must now supply libmysql.dll from their own MySQL
	  installation. It should be placed in the PATH, or together with
	  the Emdros binaries.
	
	* Made HAL work under win32.
	
	* Added win32 build machinery for mqlqtwx.exe.
	
	* Added machinery to src/qrytool/ to check whether we should stop
	  the process in the middle.
	
	* Added src/qrytool/wxqtout.{cpp,h}.
	
	* Fleshed out src/qrytool/mqlqtwx so that it actually sets up the
	  connection, and queries.
	
	* src/qrytool/ now uses SetOfMonads::hasMonadsInRange() instead of
	  SOM::intersect().
	
	* emdftry.cpp now tests SetOfMonads::hasMonadsInRange().
	
	* Used new SetOfMonads::overlap() and
	  SetOfMonads::hasMonadsInRange() to speed up
	  EMdFDB::getObjectsHavingMonadsIn().
	
	* Added SetOfMonads::overlap() and
	  SetOfMonads::hasMonadsInRange().
	
	* Changed implementations of weeder and monads stage in
	  MQLMonadSetElement to iterative rather than a recursive
	  implementations.
	
	* examples/HAL/hal.cpp now uses ConsoleQTOutput instead of
	  std::ostream.

2005-04-15  Ulrik Petersen

	* Used the new QTOutputBase in src/qrytool/*.cpp, and the new
	  ConsoleQTOutput in src/qrytool/mqlqt.cpp.
	
	* Added the following files to src/qrytool/: consout.cpp,
	  consout.h, qtoutput.h.
	
	* Added the beginnings of a mqlqtwx program which uses wxWidgets
	  to accomplish the same as mqlqt(1).
	
	* Added support for --with-wxwin in configure.in.
	
	* Added doc/mqlhal.1.in and doc/halblddb.1.

2005-04-14  Ulrik Petersen

	* Updated win32/win32.mak so that it builds and cleans
	  examples\HAL.  Also removed PostgreSQL-on-Win98.txt.
	
	* Updated examples/HAL build machinery: a) So that it does not
	  depend on flex in the distributed state. b) So that win32 and
	  djgpp hopefully work.

2005-04-13  Ulrik Petersen

	* Updated src/qrytool/exec.cpp so that it respects a QUIT command.
	
	* Fixed bug in mql_get_query.lxx: QUIT now appends " GO" rather
	  than "GO", so that it doesn't become "QUITGO".
2005-04-12  Ulrik Petersen

	* Added examples/HAL, and the machinery to build it.
	
	* Bigstring::addsz(char *) --> addsz(const char*).

============ 1.2.0.pre121 ============

2005-04-12  Ulrik Petersen

	* Fixed some Windows-issues in mql_get_query.cpp, by making it
	  work with Bigstring instead of std::string.  The issue was that
	  on MS Visual C++ 6.0, the adding stuff to a std::string gets
	  slow-er and slow-e-r and sl-ow-e-r and s-l--o---w----e-----r
	  when the string gets above about 1MB in size.  So any big import
	  (CREATE OBJECTS) would get really slow, just in the
	  query-demarcation stage.

	* Added Bigstring *pBigstring to mql_yylex.h:Token.

	* Added Bigstring to arena.h, which is a crude implementation of a
	  big string, optimized for adding characters and C-style strings.

	* Fixed bug in src/qrytool/conf.cpp: a find() was replaced by
	  std::find().
	
	* Added a win32 makefile machinery to support the new qrytool, and
	  also some initial support for DJGPP (which may not work yet).
	
	* Fixed bugs in src/qrytool.cpp:parse_config_file().

	* Redid some output messages in the query tool.

============ 1.2.0.pre120 ============

2005-04-11  Ulrik Petersen

	* Changed build process so that it works on Mac OS X.
	
2005-04-10  Ulrik Petersen

	* Reimplemented
	  src/qrytool/output_style.cpp:Output_style::do_data() so that it
	  works better with linguistic data.
	
	* Added some more constants to
	  src/qrytool/conf.cpp:Configration::do_constants().
	
	* Removed the ability to have more than one reference unit from
	  qrytool.
	
	* Removed separate_solutions option from qrytool: Made a new
	  algorithm that always calculates separate solutions.  Also
	  removed the option from the configuration files.
	
	* Made qrytool HAVE_OSTREAM- and HAVE_ISTREAM-compliant.
	
	* Reinstated HJB's subkey-system in the qrytool configuration
	  files, and used them in the harvester.  Also changed the sample
	  configuration files to reflect this.

	* Updated qrytool's output_style.cpp to only use n-1
	  reference_sep's when there are n features.

	* Fixed bugs in EMdFDB::getObjectsHavingMonadsIn() and in
	  GetObjectsHavingMonadsIn::exec().
	
2005-04-09  Ulrik Petersen

	* Used new GET OBJECTS HAVING MONADS IN statement in the query
	  tool introduced in pre119.
	
	* Fixed bug in MQLResult::out() that would print an empty table if
	  it was a flat sheaf.
	
	* Added two EMdFDB::getObjectsHavingMonadsIn() methods to support
	  the new GET OBJECTS HAVING MONADS IN statement.

	* Added a new GET OBJECTS HAVING MONADS IN statement to MQL.
	
	* Fixed some bugs in ArenaConstIterator, and added Arena::Chunk()
	  constructor.
	
	* Moved some of the symbol-tasks into ObjectBlockBase from
	  ObjectBlockCommon.
	
	* Added
	  Feature::execMakeFeatureNameVector(std::vector<std::string>&).

============ 1.2.0.pre119 ============

2005-04-08  Ulrik Petersen

	* Fixed two bugs in EMdFDB::getMonadsFromID_Ds(). One was for
	  MULTIPLE RANGE OBJECTS: ci.hasNext() had to be ci.next().  The
	  other was an error in counting the number of object ids given
	  already.

	* Fixed memory-leak in MatchedObject's destructor: If an object
	  block had a GET clause, the EMdFValue's would not be deleted.

	* Added mql_execute.h:mqlGetNextQuery().

	* Added src/qrytool to build process.  This is a generic querying
	  tool for MQL.

============ 1.2.0.pre118 ============

2005-04-07  Ulrik Petersen

	* Fixed bug in mql_R.cpp whereby a ! was applied to
	  KleeneSOM.last() instead of to the boolean expression
	  (KleeneSOM.last() >= 2).

	* Updated the build machinery to work on Win32 again, and
	  hopefully to work on DJGPP.

2005-04-04  Ulrik Petersen

	* Gained a speed increase by reworking the "characterstic
	  string"/"MMap" machinery in mql_query.cpp.  Briefly, there is
	  only one query-wide mmap (in the Topograph), and all
	  characteristic strings are now prefixed with the characteristic
	  strings from the object block up to the Topograph (the topograph
	  having the characteristic string "").
	
============ 1.2.0.pre117 ============

2005-04-04  Ulrik Petersen

	* Made TestEmdros.java.in work again, added a Copyright statement
	  to that file.

	* Updated NEWS to reflect changes since pre106.
	
============ 1.2.0.pre116 ============

2005-04-04  Ulrik Petersen

	* Changed mqltry.cpp and mqllingtry.cpp to not use "feature(s)"
	  before feature-constraints.
	
	* Changed "NOT" before an object block to "notexist ::=
	  KEY_NOTEXIST | KEY_NOTEXISTS" in parser.
	
	* Added "notexist" and "notexists" to lexer.
	
	* Removed the "FEATURE"/"FEATURES" keyword before the
	  feature_constraints.
	
============ 1.2.0.pre115 ============

2005-04-04  Ulrik Petersen

	* Fixed some memory leaks in mql_R.cpp.

============ 1.2.0.pre114 ============
	
2005-04-03  Ulrik Petersen

	* Used new Straw::getFirstKind() and got a ~3% speed increase.
	
============ 1.2.0.pre113 ============

2005-04-03  Ulrik Petersen

	* New, faster way of printing monads from MatchedObject.

	* Added Straw::getFirstKind().
	
============ 1.2.0.pre112 ============

2005-04-02  Ulrik Petersen

	* Fixed numerous bugs in the NOT and STAR handling code.  It does
	  work now with all my test queries.
	
	* Removed extraneous printConsole().
	
============ 1.2.0.pre111 ============

2005-04-02  Ulrik Petersen

	* Fixed numerous bugs in the NOT handling code.  It should work
	  now...
	
============ 1.2.0.pre110 ============

2005-04-02  Ulrik Petersen

	* Added support for arbitrary "monad sets" after the star on
	  object blocks.
	
	* Refactored mql_R.cpp so that it now uses Straw instead of
	  ListOfMoNR, and ListOfStraw instead of ListOfListOfMoNR.
	
	* Moved eRetrieval into ObjectBlockBase from ObjectBlockCommon.
	
	* Moved kMOKEMPTY_mo and kMOKNIL_mo into MatchedObject.
	
	* Did away with MoNr.
	
============ 1.2.0.pre109 ============

2005-04-02  Ulrik Petersen

	* Added the rudiments of how to do a monad-set on the Kleene-star.
	
	* Added SetOfMonads::isMemberOf(monad_m, SOMConstIterator&) and
	  MonadSetElement::isBefore(monad_m).
	
============ 1.2.0.pre108 ============

2005-04-01  Ulrik Petersen

	* Implemented support in mql_R.cpp for STAR on non-first object
	  blocks.
	
	* Added STAR rule to block non-terminal.
	
	* Added '\*' to MQL lexer.
	
	* Added ObjectBlockCommon::weedStar, and used it from
	  Block::weedGET().
	
	* Fixed bug in MoNR(pMO, bool) constructor: It did not set m_kind
	  properly if pMO was a gap block.
	
	* Added ListOfListOfMoNR and iterators.
	
	* Added MoNR::isGapBlock_mo() and ListOfMoNR::hasGapBlock_mo().
	
	* Made Block a subclass of ByMonads.
	
	* Moved ByMonads declaration into mql_types.h.
	
============ 1.2.0.pre107 ============

2005-04-01  Ulrik Petersen

	* Fixed three memory leaks: One in each of the Sheaf and FlatSheaf
	  destructors, and one in the QueryBase destructor.
	
	
============ 1.2.0.pre106 ============

2005-03-31  Ulrik Petersen

	* Removed the "-Wl,-rpath -Wl,${my_prefix}/lib/emdros" incantation
	  from PROGRAMLDADD in the configure script, since it was causing
	  problems on Mac OS X.  Added "-lgcc -lstdc++" to that variable
	  for the same reason.

2005-03-30  Ulrik Petersen

	* Now all the mql_flatten_sheaf(...) functions are hidden from
	  SWIG.  This was so as to avoid pointers to sheaves as SWIGTYPEs.
	
	* Updated SWIG/java/TestEmdros.java.in so that it works with this
	  version.
	
	* Fixed bug: GET FEATURES would not turn around the m_features
	  list, so only the last would be retrieved.
	
	* When taking over a sheaf, it used to be that any program would
	  segfault, since the statement, containing the object blocks
	  pointed to in the MatchedObject, would also be destroyed.  So I
	  implemented things so that ObjectBlockBase now contains the
	  parts that are vital for a MatchedObject, and made sure that a
	  copy of the data were made and stored in a vector of
	  ObjectBlockBase pointers.  Then, when creating the MQLResult,
	  that vector is copied into the top-level sheaf from the
	  MQLExecEnv, and set to 0 in MQLExecEnv.
	
	* When flattening a sheaf, the original sheaf is now destroyed.
	  The mql_flatt_sheaf(...) functions now take a "Sheaf**" and set
	  the "*" to 0 after deleting the sheaf.
	
	* Added Feature::getPrev().
	
	* Fixed bug in StringList constructor: It did not set m_prev to 0.
	
	* Changed StringList::addString() to StringList::addStringBack(),
	  and added StringList::addStringFront().
	
	* Added "feature" to the topographic queries in mqltry.cpp
	
	* Added tests/mqllingtry.cpp.
	
	* Added support to mql_R.cpp for processing "NOT".

	* Added "feature"/"features" before feature_constraints in
	  grammar.  This was necessary to keep the grammar LALR(1) after
	  the addition of the NOT.
	
	* Added optional "NOT" before object_block(_first) in mql grammar.

	* Added "m_bIsNOT" to ObjectBlockCommon, and constructor-support
	  in that and derived classes.

2005-03-24  Ulrik Petersen

	* Changed djgpp.mak's to use -O2, and in addition, -DNDEBUG=1 for
	  SQLite.

============ 1.2.0.pre105 ============

2005-03-24  Ulrik Petersen

	* Fixed bug #1169630: ObjectSpecNoOT destructor segfaults on
	  PostgreSQL.  Did so by adding disposeOfObjectSpecNoOT and making
	  the ObjectSpecNoOT destructor non-recursive.

============ 1.2.0.pre104 ============

2005-03-23  Ulrik Petersen

	* Fixed bug in inst_object.cpp: A void function was attempting to
	  return something.
	
	* Made it work with DJGPP again.
	
	* Added mql_flatten_sheaf() function in four overloaded
	  incarnations, and used them in MQLResult::flatten(*).
	
	* Fixed bug #1122043: "SELECT on empty database will throw
	  BadMonadsException". This was done by changing the code in
	  QueryBase::myMonads so that when the DB is the empty DB, we set
	  the substrate to empty rather than intersecting.

============ 1.2.0.pre103 ============

2005-03-23  Ulrik Petersen
	
	* Fixed bug #1169083: llist.h:LVlist<T>::erase() didn't update
	  m_pTail in the case of the node to be deleted BEING the tail.
	
	* Added case in SetOfMonads::addMSE(mse) where the newcomer was
	  just before the first element.

2005-03-13  Ulrik Petersen

	* Fixed potential bug in Sheaf::copyOther(): It now does the right
	  thing if other is a failed sheaf (i.e., makes ourselves a failed
	  sheaf rather than dereferencing the nil pointer).  The fact that
	  this bug has never surfaced may mean it's not a real bug.
	
2005-03-10  Ulrik Petersen

	* Added some more Doxygen docs

2005-03-05  Ulrik Petersen

	* Added some more Doxygen docs

2005-03-04  Ulrik Petersen

	* Fixed bug: MySQLEMdFDB::vacuum() still tried to vacuum
	  OT_monad_ms.
	
	* Removed the following, very old functions which were used to
	  upgrade legacy database to 1.1.8.  No one in their right mind
	  uses them any more, and if they do, they can upgrade with
	  mqldump, which was introduced around 1.1.11.

	  - EMdFDB::upgradeObjectTypeTo110()
	  - EMdFDB::upgradeDatabaseTo110()
	  - EMdFDB::upgradeDatabaseTo115()
	  - EMdFDB::upgradeDatabaseTo118()
	  - EMdFDB::createSequenceTables110()
	  - EMdFDB::moveSequenceValue110()
	  - EMdFDB::moveSequenceValue118()
	
	* Added more Doxygen docs.

2005-03-02  Ulrik Petersen

	* Added loads of Doxygen docs.
	
	* Made EMdFDB::getObjectsHavingMonadsInMonadSet protected, in the
	  version that takes a std::set<id_d_t>; it is used by the other
	  getObjectsHavingMonadsInMonadSet, and should not be public.
	
	* Added EmdrosEnv::isFlatSheaf(), EmdrosEnv::getFlatSheaf(),
	  EmdrosEnv::takeOverFlatSheaf(), and EmdrosEnv::out(FlatSheaf*).
	
	* Added MQLResult::isFlatSheaf() and MQLResult::getFlatSheaf().
	
	* mqltry.cpp now checks more carefully for certain sheaves,
	  checking them against a known-good sheaf, with
	  exec_string_test_sheaf().

============ 1.2.0.pre102 ============
	
2005-03-02  Ulrik Petersen

	* Made it work with SWIG.
	
	* Moved Arena and ArenaConstIterator into arena.h, since it is now
	  shared between mql_sheaf.h and inst.h

2005-03-01  Ulrik Petersen
	
	* mqltry.cpp now checks flat sheaf.
	
	* Added flat sheaf, flat straw, and iterators on them.

	* Added ArenaConstIterator.

	* Added StringList::isEmpty().
	
	* Changed implementation of inst.cpp:Arena so that it adds to the
	  tail and not to the head.

============ 1.2.0.pre101 ============
	
2005-02-26  Ulrik Petersen

	* Added MatchedObject::getEnumLabel()
	
	* Fixed bug: list of features for the GET clause now occurs in
	  sheaf output in the order in which the user entered it.  In so
	  doing, turned Feature-list around.
	
	* mqltry.cpp now tests getting enum with GET clause in sheaf.
	
	* Added mql_helper_classes.cpp: Feature::m_enum_const_cache and
	  Feature::getEnumConstNameFromValue(); populated it in
	  Feature::symbolFeaturesExist().
	
	* Sheaf (both Console and XML) now return label rather than value
	  for enums.
	
	* Made normalizeOTName and featureTypeIdIs* inline functions.
	
	* Made Feature::makeVectorOfSelves pass an unsigned int instead of
	  an int to get rid of a signed/unsigned warning.
	
	* Removed superfluous obj_first and obj_last variables from
	  EMdFDB::getInst().
	
	* Implemented MatchedObject::getNoOfEMdFValues() and
	  MatchedObject::getFeatureList().
	
	* Fixed bug in MatchedObject::printXML(): the i index was never
	  incremented for the feature value vector.
	
	* Fixed a couple of "possibly unitialized variable" warnings (-W).
	
	* Fixed bug: EMdFDB::getInst() could have
	  bFirstLastMonadAreMinMMaxM used uninitialized.


============ 1.2.0.pre100 ============

2005-02-25  Ulrik Petersen

	* The bottom line is that I now point to the ObjectBlockCommon
	  object that gave rise to a MatchedObject from within that
	  MatchedObject.  Then I have a vector of mql_helper_classes.cpp:
	  Feature* in ObjectBlockCommon, in the same order and with the
	  same length as the vector of EMdFValue in MatchedObject.  This
	  vector in ObjectBlocKCommon is used to get at the feature-info,
	  instead of MQLExecEnv::all-sorts-of-stupid-StrVec's.
	
	* Redid MatchedObject::addEMdFValue(): new signature, and used
	  correctly in mql_helper_classes.cpp: Feature::addEMdFValue().
	
	* Added MatchedObject::getFeatureList() and
	  MatchedObject::getNoOfEMdFValues.
	
	* MatchedObject::m_id_d now stores focus.
	
	* Removed MatchedObject::m_object_type_index_focus.
	
	* Added ObjectBlockCommon *m_pObjectBlock to MatchedObject.
	
	* Removed DISABLE_MATCHED_OBJECT_ID_D.
	
	* Made mql_sheaf.h: copyMO() a #define instead of a function.
	
	* Removed ValueTriple from mql_sheaf.cpp.

	* Normalized OT name in ObjectBlockCommon's constructor.
	
	* Added ObjectBlockCommon::m_pFeature_retrieval_as_vector.  Fill
	  it in ObjectBlockCommon::symbol().
	
	* Added mql_helper_classes.cpp:
	  Feature::makeVectorOfSelves(std::vector<Feature*> **ppVec, int
	  current_index) and makeVectorOfSelves(ppVec).
	
	* Removed machinery from MQLExecEnv to statically store object
	  type names, feature names, and enum names:

	  - StrVec MQLExecEnv::m_object_type_names(true);
	  - StrVec MQLExecEnv::m_feature_names(true);
	  - StrVec MQLExecEnv::m_enum_names(true); 
	  - MQLExecEnv::getOTNameFromIndex()
	  - MQLExecEnv::getFeatureNameFromIndex()
	  - MQLExecEnv::getEnumNameFromIndex()
	  - MQLExecEnv::addObjectTypeName()
	  - MQLExecEnv::addFeatureName()
	  - MQLExecEnv::addEnumName()
	  - MQLExecEnv::addStringToStrVec()
	  - MQLExecEnv::fillOTNs()

	  Also removed the places that used them.
	
	* Added copy-constructor to StringList.
	
	* Removed getLeftmostObjectTypeName() from mql_query.cpp.
	
	* Re-added MatchedObject::getKind() method.

============ 1.2.0.pre99 ============

2005-02-24  Ulrik Petersen

	* Fixed SWIG-Java bindings so that they don't have ID_D_mo and
	  ID_M_mo, but only MatchedObject.
	
	* Removed ID_D_mo and ID_M_mo, merging them into MatchedObject.

============ 1.2.0.pre98 ============

2005-02-24  Ulrik Petersen

	* Fixed SWIG-Java bindings so that they work with new (pre93)
	  exceptions.
	
	* Removed Empty_mo and NIL_mo from mql_sheaf.h; implemented
	  support for them in MoNR instead.

============ 1.2.0.pre97 ============

2005-02-22  Ulrik Petersen

	* Updated the schema version to EMDROS_VERSION_1_2_0_PRE97 (8).
	
	* Removed string2dbstring and dbstring2string from
	  string_func.cpp.
	
	* Updated mqltry.cpp to test 8-bit strings.

	* Now stores STRING (as well as ASCII) as plain string, instead of
	  going via string2dbstring.
	
	* Updated emdftry.cpp to test the monad set.
	
	* Updated mql_helper_classes.cpp to use the new InstObject
	  constructor.

	* Gave InstObject a new signature for the constructor that takes a
	  SetOfMonads*.  Now is has a bool saying whether we should delete
	  the SetOfMonads in the destructor.
	
	* Changed way of storing monads: There is no longer an OT_monad_ms
	  table for WITH MULTIPLE RANGE OBJECTS.  Instead, the monad set
	  is stored compactly as a 64-bit encoded string in a "monads"
	  column.

============ 1.2.0.pre96 ============

2005-02-20  Ulrik Petersen

	* Fixed mqldump.cpp so that it works with the new (pre91) way of
	  doing features.
	
2005-02-17  Ulrik Petersen

	* After reading the GPL FAQ carefully, I realized that I needed to
	  make explicit allowance in the license terms for linking against
	  the libraries distributed with Java, Python, Jython, Perl, and
	  Ruby. So I have added this special exception.
	
============ 1.2.0.pre95 ============
	
2005-02-15  Ulrik Petersen
	
	* This has meant that the algorithms for getting string from set
	  can be simplified: You no longer need to do it after the fact,
	  since the connection is completely different.
	
	* This second EMdFConnection is used only in getStringFromSet at
	  the moment.
	
	* There is now a second EMdFConnection in EMdFDB, pConn2.
	
	* SQLite now compiles with -DTHREADSAFE=1.

2005-02-14  Ulrik Petersen

	* Completed the work from 1.2.0.pre94 of making string-comparisons
	  BINARY on MySQL where applicable.

============ 1.2.0.pre94 ============
	
2005-02-13  Ulrik Petersen

	* I also removed some redundant 'quotes' around numbers in WHERE
	  clauses in emdfdb.cpp.
	
	* Just to be sure, and to be backwards compatible with databases
	  created before this preview, I added the BINARY keyword before
	  string literals in WHERE clauses (also in emdf_ffeatures.cpp).
	
	* I also found out that MySQL uses case-insensitive string
	  comparisons on VARCHAR and CHAR unless either a) the column is
	  declared BINARY, or b) the string with which it is compared is
	  prefixed with the keyword BINARY.  Accordingly, I added the
	  BINARY keyword to all VARCHAR declarations for MySQL in
	  emdfdb.cpp.
	
	* I found out that MySQL uses case-insensitive string comparisons
	  for TEXT blobs, whereas it uses case-sensitive string
	  comparisons for BLOB blobs.  This could give problems.
	  Accordingly, I changed emdf.h to say "LONGBLOB" instead of
	  "LONGTEXT" for SQL_TEXT_TYPE.

============ 1.2.0.pre93 ============
	
2005-02-12  Ulrik Petersen

	* Added throw(EMdFDBDBError) to mql_query.{h,cpp} for
	  getConstraints and makeConstraints, and let
	  ObjectBlockCommon::symbol() return false if an EMdFDBDBError was
	  thrown, via calculatePreQueryString, which was modified to catch
	  EMdFDBDBError.
	
	* Added include/emdf_exception.h to hold all EMdF exceptions, and
	  #included it wher necessary.  This was a good idea because
	  emdf_ffeatures.h needed knowledge of EMdFDBDBError, but
	  emdfdb.h, where it was defined, needed knowledge of
	  emdf_ffeatures.h.

	* Added throw(EMdFDBDBError) to emdf_ffeatures, because
	  FeatureInfo2SQLvalue now throws EMdFDBDBError.
	
============ 1.2.0.pre92 ============
	
2005-02-12  Ulrik Petersen

	* Fixed bug in EMdFDB::getID_DFromStringSet: Now it has a boolean
	  parameter saying whether it should create the value if not
	  already there.  If this is set to false, and it is not there,
	  the method returns "0" (NIL).  Since FeatureInfo2SQLvalue is the
	  only place that calls getID_DFromStringSet, a corresponding
	  parameter was added to this method.

	  This is sound: We only do not create it when we are going to use
	  it for comparison, not for creating or updating.  For
	  comparisons, the logic works out so that comparing anything it
	  to NIL yields the expected results.  This is provided NIL never
	  enters the set.

============ 1.2.0.pre91 ============
	
2005-02-10  Ulrik Petersen

	* Made mqldump dump FROM SET and WITH INDEX information.
	
	* Added WITHOUT as a keyword to the lexer.
	
	* The initialization order in SQLiteEMdFDBConnection was
	  reorganized to match the declaration order.
	
	* Added final return statement to
	  upgrade_db.cpp:parse_arguments().
	
	* Changed instantiation order of content and next in constructor
	  of llist.h:LVnode<T>::LVnode(T,n).  This was so as to avoid gcc
	  giving warnings when using -Wall.
	
	* Added EMdFDB::createIndex version which has a
	  std::pair<std::string, unsigned int> in its column list instead
	  of a std::string.
	
	* Added support for WITH INDEX on STRING, ASCII, INTEGER, and
	  ID_D.
	
	* DEBUG_NULL_VALUE_EXCEPTION now says that it is a NULL VALUE
	  EXCEPTION.
	
	* Added InstObject::changeString() and EMdFValue::changeString().
	
	* Added a destructor to all non-terminals in the parser, since I
	  found that sometimes the default destructor was not invoked
	  correctly.
	
	* Added test of FROM SET and WITH INDEX to mqltry.cpp.
	
	* Added test to emdftry for getFeatures(...single object_id_d...).
	
	* Added error message to GetFeaturesStatement::symbol() when
	  object type does not exist.
	
	* Implemented support for FROM SET in EMdFDB and its derived
	  classes.

	* Added "INDEX" as a keyword to the lexer.
	
	* Added "WITH INDEX" as a possibility for declaring features of
	  type STRING, ASCII, INTEGER, and ID_D.
	
	* Added "FROM SET" as a possibility for declaring features of type
	  STRING and ASCII.
	
	* Renamed EMdFDB::ypeIdToString to EMdFDB::typeIdToString.  Note
	  that this is a typo in the sed script below.

============ 1.2.0.pre90 ============
	
2005-02-09  Ulrik Petersen

	* Fixed bug #1103385: "Dropping enum doesn't drop constants from
	  cache".  Actually, I implemented EnumConstCache::dropEnum() to
	  solve it, and called it in EMdFDB::dropEnum().

============ 1.2.0.pre89 ============
	
2005-02-07  Ulrik Petersen

	* Removed quite a few non-used non-terminals from the lexer.
	
	* Removed bison parser, added lemon parser.
	
	* Fixed bug in "BETWEEN first AND last" in EMdFDB that had crept
	  in in pre88.

============ 1.2.0.pre88 ============

2005-01-30  Ulrik Petersen

	* Changed "BETWEEN first AND last" back to ">= first AND <= last"
	  in EMdFDB for WITH SINGLE MONAD OBJECTS.  This gave a speed
	  increase of 5% on average.

============ 1.2.0.pre87 ============
	
2005-01-28  Ulrik Petersen

	* Fixed bug in mqldump.cpp.


============ 1.2.0.pre86 ============
	
2005-01-28  Ulrik Petersen

	* Implemented new WITH SINGLE MONAD OBJECTS object type modifier.
	  This gave a speedup of around 4-8% on my suites of test queries.
	

============ 1.2.0.pre85 ============
	
2005-01-26  Ulrik Petersen

	* Fiddled with DJGPP makefiles so that Emdros once again compiles
	  under DJGPP.


============ 1.2.0.pre84 ============

2005-01-22  Ulrik Petersen

	* Made sure that all header files that need to be #include'd from
	  an installation can also be #include'd.
	
	* Removed the <emdros/> prefix from the #include's in
	  tests/testincludes.cpp.  You are now supposed to
	  -I<path-to-emdros>/include/emdros.

============ 1.2.0.pre83 ============

2005-01-21  Ulrik Petersen

	* Table classes now don't assert() anything, but throw the
	  appropriate exception.
	
	* Added support to SWIG Java bindings for the new exceptions.
	
	* Added "throw" declarations to all (?) methods that can throw an
	  exception.
	
	* Added EmdrosException as a base of all exceptions, and added
	  default string constructors, as well as constructors to give
	  messages, and a destructor, to all exceptions.
	
	* Added --start and --end options to the usage printout for
	  mqldump.

2005-01-19  Ulrik Petersen

	* Removed monads.h:NoElementsException, and all traces of it
	  elsewhere.  This was because it was not used.
	
	* Added more Doxygen docs.

2005-01-16  Ulrik Petersen

	* Added the beginnings of Doxygen documentation.  Still a long
	  ways to go.
	
============ 1.2.0.pre82 ============

2005-01-16  Ulrik Petersen

	* Added three new exceptions: TableException, TableRowException,
	  and TableColumnException.  Used them in some
	  table(row)(iterator) methods.
	
	* Added exception support to Java bindings.  Now the methods that
	  can throw anything in the EMdF and MQL libraries are caught, and
	  a java.lang.Exception thrown, with the exception string set to
	  whatever was the exception.

============ 1.2.0.pre81 ============

2005-01-15  Ulrik Petersen

	* Fixed bug #1102787: UPDATE OBJECT TYPE causes indices on
	  OT_objects to be dropped after removal or addition of features.
	  Now they are all recreated, including any that the user has
	  created, also UNIQUE indexes.  The following methods were added
	  to SQLiteEMdFDB: getIndices(), createIndicesFromIndexMap(), and
	  removeIndicesWithFeature().  In addition, the local (static)
	  function parseIndexCreationString() was added to
	  sqliteemdfdb.cpp.
	
	* Fixed bug #1102813 in SQLiteEMdFDB::dropFeatureFromOT_objects:
	  removing the last feature from an object type with UPDATE OBJECT
	  TYPE used to cause an error on SQLite.  This was due to an
	  extraneous comma in OT_Objects_stream.
	
	* Added message symbol pass of to UPDATE OBJECT TYPE if feature
	  scheduled for addition exists already.
	
	* SQLiteEMdFDB::add/DropFeatureFromOT_objects now use INTEGER
 	  PRIMARY KEY.
	
	* Fixed src/Makefile.am to link upgrade_db against MQL and PCRE.

2005-01-11  Ulrik Petersen

	* Fixed an initialisation bug in mql_R.cpp which caused it not to
	  compile with MSVC6.0.
	
	* Updated upgrade_db.cpp so that one could, in principle, use
	  another malloc than the standard malloc used in the Microsoft
	  standard C library.

2005-01-04  Ulrik Petersen

	* SQLite shell (sqlite_emdros(1)) now really does use libreadline
	  if present.

2005-01-01  Ulrik Petersen
	
	* In mql_R.cpp, moved some declarations of MQLObject *pObj out of
	  the loops, and used pObj instead of object_block->getObject().
	  This gave a slight speed increase.
	
	* Made mql_R.cpp clearer: Moved initialization of variables into
	  separate statements.
	
	* Made a few statements clearer in mql_R.cpp: moved a "new
	  MoNR(...)" out of a call to ListOfMoNR->append() and into a
	  variable declaration.
	
	* Moved case kObjectBlock to the end in Block::XXX()
	  switch(m_kind).  This gave a slight speed increase.
	
	* Added bool isFocus() methods to ObjectBlockCommon and GapBlock,
	  then used them in mql_R.cpp, and got a speed increase of about
	  1% average.
	
	* Simplified mql_R.cpp by removing the pEE argument to the
	  retrieval and focus functions.
	
	* Added BETWEEN X and Y to the ways a power restrictor can be
	  done.  Added BETWEEN keyword to lexer.

============ 1.2.0.pre80 ============

2004-12-06  Ulrik Petersen

	* Made SWIG/java/TestEmdros.java.in work with SWIG 1.3.22.
	
	* Now needs SWIG 1.3.22 or later.

2004-11-08  Ulrik Petersen

	* Changed build procedure to always compile lemon.
	
	* Fixed bug in sqliteemdfdb.cpp:useDatabase: When database is
	  'emdf', we shouldn't set "PRAGMA synchronous", since the emdf
	  database is really no database at all, so there is no sqlite
	  database to perform this on.

2004-11-05  Ulrik Petersen

	* Removed '(object_id_d,mse_first,mse_last)' from INSERT INTO
	  statement in SQLiteEMdFDB::createObjectsOT_monad_ms.
	
	* sqliteemdfdb.cpp:useDatabase now sets "PRAGMA synchronous" based
	  on SQLITE_EMDFDB_NO_FSYNC.
	
	* sqliteconn.cpp:execCommand now does busy-waiting on SQLITE_BUSY.
	
	* sqliteconn.cpp:execCommand now uses sqlite_exec rather than the
	  sqlite_prepare/sqlite_step/sqlite_finalize interface.

2004-10-28  Ulrik Petersen

	* Now uses BETWEEN for object_id_d in EMdFDB::getFeaturesByQuery()
	  and EMdFDB::getMonadsFromID_Ds().
	
	* In EMDFDB::getInst() and
	  EMdFDB::EMdFDB::makeMonadConstraintsFromSOM(), use (first_monad
	  BETWEEN fm AND lm AND last_monad BETWEEN fm AND lm).  See
	  SQL/README.txt for sql10 for reasons for this.  Basically, the
	  old and new expressions are logically equivalent, since
	  first_monad <= last_monad, and the new ones are faster (by
	  between 5% and 8%).
	
	* Did away with all indexes on monads except
	  first_monad/mse_first.  This was due to the conclusion of the
	  SQL/sql9 experiments that only first_monad/mse_first was used,
	  and thus we could save space if we didn't have the extra
	  indexes.
	
	* Moved some variable definitions outside of a loop in
	  EMdFDB::getObjectsHavingMonadsInMonadSet().  This probably
	  increases performance ever so slightly.
	
	* Changed an SOM.add(mse_first,mse_last) to
	  SOM(mse_first,mse_last) in
	  EMdFDB::getObjectsHavingMonadsInMonadSet().  This increases
	  performance ever so slightly.

2004-10-21  Ulrik Petersen

	* Now uses getSOMForObject instead of getMonadsFromID_D in
	  EMdFDB::dropObject.
	
	* Removed EMdFDB::getObjectsAtM() -- it was the same as
	  getObjectsStartingAtSm.
	
	* Added mqlpars.h and mql_parser.cpp to CLEANFILES in
	  MQL/Makefile.am.

2004-10-20  Ulrik Petersen

	* Added WITHOUT OIDS to all CREATE TABLE statements on
	  PostgreSQL. This should speed up database creation and use, and
	  reduce database size by 4 bytes per row.
	
	* Simplified the code in emdfdb.cpp: Now does INTEGER PRIMARY KEY
	  NOT NULL where possible on all platforms, not just SQLite.

	* New way of doing indexes on MySQL on monads on OT_objects and
	  OT_monad_ms: (last_monad,first_monad) and (mse_last,mse_first)
	  rather than all of them separate.  This should speed things up
	  when doing queries on very large databases (millions of words).

2004-10-18  Ulrik Petersen

	* Made the PCRE library an option.  You can now choose not to
	  compile it in.  On Unix/Linux, do --without-pcre at the
	  configure command line.  On Win32, see win32/README.txt.  The
	  default is still to compile it in.

	  The weeder will complain if you try to use a ~ or !~ operator if
	  the PCRE library is missing.

	* Upgraded SQLite to 2.8.15 with DJGPP enhancements by Alex
	  Bodn??? from Israel, <alexbodn{t-a}012{d-ot}net{do-t}il>. See
	  SQLite CVStrac #833:
	  <http://www.sqlite.org/cvstrac/tktview?tn=833>. These sources
	  were placed into the public domain by Alex in the SQLite Wiki,
	  http://www.sqlite.org/cvstrac/wiki?p=HowToCompile, and confirmed
	  to me by email 2004-09-13 from the same email address.

2004-10-10  Ulrik Petersen

	* Removed some bool bIsFirst's from pgemdfdb.cpp, mysqlemdfdb.cpp,
	  and sqliteemdfdb.cpp.

2004-10-09  Ulrik Petersen

	* Fixed critical bug in InstObject::addMse(): It neglected to set
	  m_first if MSEs arrived out-of-order, i.e., the MSE used when
	  constructing the object was not the first MSE.  This caused
	  incomplete results to be returned by the MQL topographic engine
	  when the backend gave the MSEs out-of-order.  See
	  tests/hebrew/correctness-4.mql for an example of what went
	  wrong.  This bug was introduced in 1.2.0.pre30.
	
	* Fixed bug in include/pgconn.h: accessTuple(..., long&) now
	  actually throws EMdFNULLValueException when the value is NULL.

	* mqltry.cpp now explicitly says it's a ROW_ERROR when it is.

2004-10-08  Ulrik Petersen

	* Rewrote ObjectSpecNoOT to use pointer-arithmetic rather than
	  recursive calls to do weed/symbol/type, etc.  The weed call sets
	  a "m_prev" pointer, and then every subsequent call traces m_next
	  to the last one, then does the chain backwards.
	
	* Updated include/emdf.h to reflect the new version
	  (EMDROS_VERSION_1_2_0_PRE_80 was added).  The places that used
	  the versions were updated.

2004-10-07  Ulrik Petersen

	* SQLite now uses INTEGER PRIMARY KEY where possible, instead of
	  PRIMARY KEY (...).  This gives a size reduction in the database.

	* Added dependencies to Makefile.am for the programs in src/ and
	  tests/.

	* Changed "_gut" to "_objects", thereby simplifying the API.
	  There is still a distinction between HAS_SINGLE_RANGE_OBJECTS
	  and its opposite.  It's just that the _gut table is now
	  _objects.  This simplifies the code somewhat.

2004-10-07  Ulrik Petersen

	* Changed '\"' to '\'' in
	  MySQLEMdFBD::CreateObjectsOT_gut_or_objects_data, to harmonize
	  with other backends.  MySQL supports both, but '\'' is more
	  standard SQL.

	* Removed "is_first" from OT_monad_ms.  The only place where it
	  was used was in EMdFDB::getObjectsStartingAtSm(), and there it
	  could just as well be served by "OT_objects.first_monad = Sm".

2004-09-25  Ulrik Petersen

	* Updated win32/config.mak.in to reflect new paths on my system.

============ 1.2.0.pre79 ============

2004-09-20  Ulrik Petersen

	* Added some path options for jdk_try_dir in configure.in.

	* Removed CYGWIN support from sqlite/configure.ac.  Emdros doesn't
	  compile on Cygwin anyway, so no need to support it for sqlite.

	* Made sqlite/configure.ac work with automake-1.6.3, by calling
	  AM_INIT_AUTOMAKE and AC_INIT correctly.

	* Made sqlite/src/Makefile.am work with automake-1.6.3 by moving
	  around some conditional VAR += XXX definitions.

============ 1.2.0.pre78 ============

2004-09-11  Ulrik Petersen

	* Did some reconsideration of certain details of the big name
	  change.  The following sed script was applied to the sources:

s:\([^A-Za-z0-9_]\)EscapeStringForCOPY\([^A-Za-z0-9_]\|$\):\1escapeStringForCOPY\2:g
s:\([^A-Za-z0-9_]\)FreeResult\([^A-Za-z0-9_]\|$\):\1freeResult\2:g
s:\([^A-Za-z0-9_]\)unencrypt_char\([^A-Za-z0-9_]\|$\):\1unencryptChar\2:g
s:\([^A-Za-z0-9_]\)encrypt_char\([^A-Za-z0-9_]\|$\):\1encryptChar\2:g

	  Again, this was done with apply.sh, today.awk, and the command
	  as below (7/17-2004) (except for today's date in today.awk).
	
	  Afterwards, the sources just before the big namechange were
	  changed with this updated sed script, which YOU can use to
	  change your sources.  

	  Note, however, that it changes all free-standing occurrences of
	  "Next" to "getNext", which means that some of your strings or
	  comments may get unintentionally changed (if they contain the
	  string "Next").

s:\([^A-Za-z0-9_]\)EscapeStringForCOPY\([^A-Za-z0-9_]\|\$\):\1escapeStringForCOPY\2:g
s:\([^A-Za-z0-9_]\)FreeResult\([^A-Za-z0-9_]\|\$\):\1freeResult\2:g
s:\([^A-Za-z0-9_]\)unencrypt_char\([^A-Za-z0-9_]\|\$\):\1unencryptChar\2:g
s:\([^A-Za-z0-9_]\)encrypt_char\([^A-Za-z0-9_]\|\$\):\1encryptChar\2:g
s:\([^A-Za-z0-9_]\)AbortTransaction\([^A-Za-z0-9_]\|\$\):\1abortTransaction\2:g
s:\([^A-Za-z0-9_]\)AccessTuple\([^A-Za-z0-9_]\|\$\):\1accessTuple\2:g
s:\([^A-Za-z0-9_]\)AddEMdFValue\([^A-Za-z0-9_]\|\$\):\1addEMdFValue\2:g
s:\([^A-Za-z0-9_]\)AddFeature\([^A-Za-z0-9_]\|\$\):\1addFeature\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_gut\([^A-Za-z0-9_]\|\$\):\1addFeatureToOT_gut\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_gut_or_objects\([^A-Za-z0-9_]\|\$\):\1addFeatureToOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_objects\([^A-Za-z0-9_]\|\$\):\1addFeatureToOT_objects\2:g
s:\([^A-Za-z0-9_]\)AddMSE\([^A-Za-z0-9_]\|\$\):\1addMSE\2:g
s:\([^A-Za-z0-9_]\)AddOid\([^A-Za-z0-9_]\|\$\):\1addOid\2:g
s:\([^A-Za-z0-9_]\)AggregateQuery\([^A-Za-z0-9_]\|\$\):\1aggregateQuery\2:g
s:\([^A-Za-z0-9_]\)BackendName\([^A-Za-z0-9_]\|\$\):\1getBackendName\2:g
s:\([^A-Za-z0-9_]\)BeginTransaction\([^A-Za-z0-9_]\|\$\):\1beginTransaction\2:g
s:\([^A-Za-z0-9_]\)CAbortTransactionStatement:\1AbortTransactionStatement:g
s:^CAbortTransactionStatement:AbortTransactionStatement:g
s:\([^A-Za-z0-9_]\)CArena:\1Arena:g
s:^CArena:Arena:g
s:\([^A-Za-z0-9_]\)CBeginTransactionStatement:\1BeginTransactionStatement:g
s:^CBeginTransactionStatement:BeginTransactionStatement:g
s:\([^A-Za-z0-9_]\)CBlock_string:\1BlockString:g
s:^CBlock_string:BlockString:g
s:\([^A-Za-z0-9_]\)CBlock_str:\1BlockStr:g
s:^CBlock_str:BlockStr:g
s:\([^A-Za-z0-9_]\)CBlocks:\1Blocks:g
s:^CBlocks:Blocks:g
s:\([^A-Za-z0-9_]\)CBlock:\1Block:g
s:^CBlock:Block:g
s:\([^A-Za-z0-9_]\)CByMonads:\1ByMonads:g
s:^CByMonads:ByMonads:g
s:\([^A-Za-z0-9_]\)CChunk:\1Chunk:g
s:^CChunk:Chunk:g
s:\([^A-Za-z0-9_]\)CCommitTransactionStatement:\1CommitTransactionStatement:g
s:^CCommitTransactionStatement:CommitTransactionStatement:g
s:\([^A-Za-z0-9_]\)CCreateDatabaseStatement:\1CreateDatabaseStatement:g
s:^CCreateDatabaseStatement:CreateDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CCreateEnumerationStatement:\1CreateEnumerationStatement:g
s:^CCreateEnumerationStatement:CreateEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CCreateIndexesStatement:\1CreateIndexesStatement:g
s:^CCreateIndexesStatement:CreateIndexesStatement:g
s:\([^A-Za-z0-9_]\)CCreateMonadSetStatement:\1CreateMonadSetStatement:g
s:^CCreateMonadSetStatement:CreateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromID_DsStatement:\1CreateObjectFromID_DsStatement:g
s:^CCreateObjectFromID_DsStatement:CreateObjectFromID_DsStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromMonadsStatement:\1CreateObjectFromMonadsStatement:g
s:^CCreateObjectFromMonadsStatement:CreateObjectFromMonadsStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromQueryStatement:\1CreateObjectFromQueryStatement:g
s:^CCreateObjectFromQueryStatement:CreateObjectFromQueryStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectStatement:\1CreateObjectStatement:g
s:^CCreateObjectStatement:CreateObjectStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectTypeStatement:\1CreateObjectTypeStatement:g
s:^CCreateObjectTypeStatement:CreateObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectsStatement:\1CreateObjectsStatement:g
s:^CCreateObjectsStatement:CreateObjectsStatement:g
s:\([^A-Za-z0-9_]\)CCreateOrUpdateMonadSetStatement:\1CreateOrUpdateMonadSetStatement:g
s:^CCreateOrUpdateMonadSetStatement:CreateOrUpdateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CCreateSegmentStatement:\1CreateSegmentStatement:g
s:^CCreateSegmentStatement:CreateSegmentStatement:g
s:\([^A-Za-z0-9_]\)CDatabaseStatement:\1DatabaseStatement:g
s:^CDatabaseStatement:DatabaseStatement:g
s:\([^A-Za-z0-9_]\)CDeleteMonadsStatement:\1DeleteMonadsStatement:g
s:^CDeleteMonadsStatement:DeleteMonadsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByID_DsStatement:\1DeleteObjectsByID_DsStatement:g
s:^CDeleteObjectsByID_DsStatement:DeleteObjectsByID_DsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByMonadsStatement:\1DeleteObjectsByMonadsStatement:g
s:^CDeleteObjectsByMonadsStatement:DeleteObjectsByMonadsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByQueryStatement:\1DeleteObjectsByQueryStatement:g
s:^CDeleteObjectsByQueryStatement:DeleteObjectsByQueryStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsStatement:\1DeleteObjectsStatement:g
s:^CDeleteObjectsStatement:DeleteObjectsStatement:g
s:\([^A-Za-z0-9_]\)CDropDatabaseStatement:\1DropDatabaseStatement:g
s:^CDropDatabaseStatement:DropDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CDropEnumerationStatement:\1DropEnumerationStatement:g
s:^CDropEnumerationStatement:DropEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CDropIndexesStatement:\1DropIndexesStatement:g
s:^CDropIndexesStatement:DropIndexesStatement:g
s:\([^A-Za-z0-9_]\)CDropMonadSetStatement:\1DropMonadSetStatement:g
s:^CDropMonadSetStatement:DropMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CDropObjectTypeStatement:\1DropObjectTypeStatement:g
s:^CDropObjectTypeStatement:DropObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CECDeclaration:\1ECDeclaration:g
s:^CECDeclaration:ECDeclaration:g
s:\([^A-Za-z0-9_]\)CECUpdate:\1ECUpdate:g
s:^CECUpdate:ECUpdate:g
s:\([^A-Za-z0-9_]\)CEMdFComparison:\1EMdFComparison:g
s:^CEMdFComparison:EMdFComparison:g
s:\([^A-Za-z0-9_]\)CEMdFDBDBError:\1EMdFDBDBError:g
s:^CEMdFDBDBError:EMdFDBDBError:g
s:\([^A-Za-z0-9_]\)CEMdFDBException:\1EMdFDBException:g
s:^CEMdFDBException:EMdFDBException:g
s:\([^A-Za-z0-9_]\)CEMdFFFactor:\1EMdFFFactor:g
s:^CEMdFFFactor:EMdFFFactor:g
s:\([^A-Za-z0-9_]\)CEMdFFFeatures:\1EMdFFFeatures:g
s:^CEMdFFFeatures:EMdFFFeatures:g
s:\([^A-Za-z0-9_]\)CEMdFFTerm:\1EMdFFTerm:g
s:^CEMdFFTerm:EMdFFTerm:g
s:\([^A-Za-z0-9_]\)CEMdFOutputException:\1EMdFOutputException:g
s:^CEMdFOutputException:EMdFOutputException:g
s:\([^A-Za-z0-9_]\)CEMdFOutputWrongCharactersetException:\1WrongCharacterSetException:g
s:^CEMdFOutputWrongCharactersetException:WrongCharacterSetException:g
s:\([^A-Za-z0-9_]\)CEMdFOutput:\1EMdFOutput:g
s:^CEMdFOutput:EMdFOutput:g
s:\([^A-Za-z0-9_]\)CEMdFValue:\1EMdFValue:g
s:^CEMdFValue:EMdFValue:g
s:\([^A-Za-z0-9_]\)CEmdrosEnv:\1EmdrosEnv:g
s:^CEmdrosEnv:EmdrosEnv:g
s:\([^A-Za-z0-9_]\)CEnumConstCache:\1EnumConstCache:g
s:^CEnumConstCache:EnumConstCache:g
s:\([^A-Za-z0-9_]\)CEnumerationStatement:\1EnumerationStatement:g
s:^CEnumerationStatement:EnumerationStatement:g
s:\([^A-Za-z0-9_]\)CExpression:\1Expression:g
s:^CExpression:Expression:g
s:\([^A-Za-z0-9_]\)CFFactor:\1FFactor:g
s:^CFFactor:FFactor:g
s:\([^A-Za-z0-9_]\)CFFeatures:\1FFeatures:g
s:^CFFeatures:FFeatures:g
s:\([^A-Za-z0-9_]\)CFTerm:\1FTerm:g
s:^CFTerm:FTerm:g
s:\([^A-Za-z0-9_]\)CFeatureAssignment:\1FeatureAssignment:g
s:^CFeatureAssignment:FeatureAssignment:g
s:\([^A-Za-z0-9_]\)CFeatureDeclaration:\1FeatureDeclaration:g
s:^CFeatureDeclaration:FeatureDeclaration:g
s:\([^A-Za-z0-9_]\)CFeatureUpdate:\1FeatureUpdate:g
s:^CFeatureUpdate:FeatureUpdate:g
s:\([^A-Za-z0-9_]\)CFeature_comparison:\1FeatureComparison:g
s:^CFeature_comparison:FeatureComparison:g
s:\([^A-Za-z0-9_]\)CFeature:\1Feature:g
s:^CFeature:Feature:g
s:\([^A-Za-z0-9_]\)CGap_block:\1GapBlock:g
s:^CGap_block:GapBlock:g
s:\([^A-Za-z0-9_]\)CGetFeaturesStatement:\1GetFeaturesStatement:g
s:^CGetFeaturesStatement:GetFeaturesStatement:g
s:\([^A-Za-z0-9_]\)CGetMonadSetsStatement:\1GetMonadSetsStatement:g
s:^CGetMonadSetsStatement:GetMonadSetsStatement:g
s:\([^A-Za-z0-9_]\)CGetMonadsStatement:\1GetMonadsStatement:g
s:^CGetMonadsStatement:GetMonadsStatement:g
s:\([^A-Za-z0-9_]\)CID_D:\1ID_D:g
s:^CID_D:ID_D:g
s:\([^A-Za-z0-9_]\)CInsertMonadsStatement:\1InsertMonadsStatement:g
s:^CInsertMonadsStatement:InsertMonadsStatement:g
s:\([^A-Za-z0-9_]\)CInstContents:\1InstContents:g
s:^CInstContents:InstContents:g
s:\([^A-Za-z0-9_]\)CInstObject:\1InstObject:g
s:^CInstObject:InstObject:g
s:\([^A-Za-z0-9_]\)CInst:\1Inst:g
s:^CInst:Inst:g
s:\([^A-Za-z0-9_]\)CList_of_mo_nr:\1ListOfMoNR:g
s:^CList_of_mo_nr:ListOfMoNR:g
s:\([^A-Za-z0-9_]\)CList_of_straws:\1ListOfStraws:g
s:^CList_of_straws:ListOfStraws:g
s:\([^A-Za-z0-9_]\)CMOEMPTY_mo:\1Empty_mo:g
s:^CMOEMPTY_mo:Empty_mo:g
s:\([^A-Za-z0-9_]\)CMOID_D:\1ID_D_mo:g
s:^CMOID_D:ID_D_mo:g
s:\([^A-Za-z0-9_]\)CMOID_M:\1ID_M_mo:g
s:^CMOID_M:ID_M_mo:g
s:\([^A-Za-z0-9_]\)CMONIL_mo:\1Nil_mo:g
s:^CMONIL_mo:Nil_mo:g
s:\([^A-Za-z0-9_]\)CMQLError:\1MQLError:g
s:^CMQLError:MQLError:g
s:\([^A-Za-z0-9_]\)CMQLObject:\1MQLObject:g
s:^CMQLObject:MQLObject:g
s:\([^A-Za-z0-9_]\)CMQLResult:\1MQLResult:g
s:^CMQLResult:MQLResult:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableEntry:\1MQLSymbolTableEntry:g
s:^CMQLSymbolTableEntry:MQLSymbolTableEntry:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableEntryException:\1MQLSymbolTableEntryException:g
s:^CMQLSymbolTableEntryException:MQLSymbolTableEntryException:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableException:\1MQLSymbolTableException:g
s:^CMQLSymbolTableException:MQLSymbolTableException:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTable:\1MQLSymbolTable:g
s:^CMQLSymbolTable:MQLSymbolTable:g
s:\([^A-Za-z0-9_]\)CMQL_execution_environment:\1MQLExecEnv:g
s:^CMQL_execution_environment:MQLExecEnv:g
s:\([^A-Za-z0-9_]\)CMatched_object:\1MatchedObject:g
s:^CMatched_object:MatchedObject:g
s:\([^A-Za-z0-9_]\)CMo_nr:\1MoNR:g
s:^CMo_nr:MoNR:g
s:\([^A-Za-z0-9_]\)CMonadSetCalculationStatement:\1MonadSetCalculationStatement:g
s:^CMonadSetCalculationStatement:MonadSetCalculationStatement:g
s:\([^A-Za-z0-9_]\)CMonadSetChainElement:\1MonadSetChainElement:g
s:^CMonadSetChainElement:MonadSetChainElement:g
s:\([^A-Za-z0-9_]\)CMonadSetElement:\1MQLMonadSetElement:g
s:^CMonadSetElement:MQLMonadSetElement:g
s:\([^A-Za-z0-9_]\)CMonadSetStatement:\1MonadSetStatement:g
s:^CMonadSetStatement:MonadSetStatement:g
s:\([^A-Za-z0-9_]\)CMonadsStatement:\1MonadsStatement:g
s:^CMonadsStatement:MonadsStatement:g
s:\([^A-Za-z0-9_]\)CObjectSpecBase:\1ObjectSpecBase:g
s:^CObjectSpecBase:ObjectSpecBase:g
s:\([^A-Za-z0-9_]\)CObjectSpecNoOT:\1ObjectSpecNoOT:g
s:^CObjectSpecNoOT:ObjectSpecNoOT:g
s:\([^A-Za-z0-9_]\)CObjectSpec:\1ObjectSpec:g
s:^CObjectSpec:ObjectSpec:g
s:\([^A-Za-z0-9_]\)CObjectTypeStatement:\1ObjectTypeStatement:g
s:^CObjectTypeStatement:ObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CObjectTypesStatement:\1ObjectTypesStatement:g
s:^CObjectTypesStatement:ObjectTypesStatement:g
s:\([^A-Za-z0-9_]\)CObject_block_common:\1ObjectBlockCommon:g
s:^CObject_block_common:ObjectBlockCommon:g
s:\([^A-Za-z0-9_]\)CObject_block_first:\1ObjectBlockFirst:g
s:^CObject_block_first:ObjectBlockFirst:g
s:\([^A-Za-z0-9_]\)CObject_block:\1ObjectBlock:g
s:^CObject_block:ObjectBlock:g
s:\([^A-Za-z0-9_]\)CObject_reference_usage:\1ObjectReferenceUsage:g
s:^CObject_reference_usage:ObjectReferenceUsage:g
s:\([^A-Za-z0-9_]\)COpt_gap_block:\1OptGapBlock:g
s:^COpt_gap_block:OptGapBlock:g
s:\([^A-Za-z0-9_]\)CPower:\1Power:g
s:^CPower:Power:g
s:\([^A-Za-z0-9_]\)CQueryBase:\1QueryBase:g
s:^CQueryBase:QueryBase:g
s:\([^A-Za-z0-9_]\)CQuitStatement:\1QuitStatement:g
s:^CQuitStatement:QuitStatement:g
s:\([^A-Za-z0-9_]\)CRest_of_block_str:\1RestOfBlockStr:g
s:^CRest_of_block_str:RestOfBlockStr:g
s:\([^A-Za-z0-9_]\)CSegmentStatement:\1SegmentStatement:g
s:^CSegmentStatement:SegmentStatement:g
s:\([^A-Za-z0-9_]\)CSelectEnumerationConstantsStatement:\1SelectEnumerationConstantsStatement:g
s:^CSelectEnumerationConstantsStatement:SelectEnumerationConstantsStatement:g
s:\([^A-Za-z0-9_]\)CSelectEnumerationsStatement:\1SelectEnumerationsStatement:g
s:^CSelectEnumerationsStatement:SelectEnumerationsStatement:g
s:\([^A-Za-z0-9_]\)CSelectFeaturesStatement:\1SelectFeaturesStatement:g
s:^CSelectFeaturesStatement:SelectFeaturesStatement:g
s:\([^A-Za-z0-9_]\)CSelectMaxMStatement:\1SelectMaxMStatement:g
s:^CSelectMaxMStatement:SelectMaxMStatement:g
s:\([^A-Za-z0-9_]\)CSelectMinMStatement:\1SelectMinMStatement:g
s:^CSelectMinMStatement:SelectMinMStatement:g
s:\([^A-Za-z0-9_]\)CSelectMonadSetsStatement:\1SelectMonadSetsStatement:g
s:^CSelectMonadSetsStatement:SelectMonadSetsStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectTypesStatement:\1SelectObjectTypesStatement:g
s:^CSelectObjectTypesStatement:SelectObjectTypesStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectTypesUsingEnumerationStatement:\1SelectObjectTypesUsingEnumerationStatement:g
s:^CSelectObjectTypesUsingEnumerationStatement:SelectObjectTypesUsingEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectsAtStatement:\1SelectObjectsAtStatement:g
s:^CSelectObjectsAtStatement:SelectObjectsAtStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectsHavingMonadsInStatement:\1SelectObjectsHavingMonadsInStatement:g
s:^CSelectObjectsHavingMonadsInStatement:SelectObjectsHavingMonadsInStatement:g
s:\([^A-Za-z0-9_]\)CSelectStatement:\1SelectStatement:g
s:^CSelectStatement:SelectStatement:g
s:\([^A-Za-z0-9_]\)CSet_of_monad_ms:\1SetOfMonads:g
s:^CSet_of_monad_ms:SetOfMonads:g
s:\([^A-Za-z0-9_]\)CSheaf:\1Sheaf:g
s:^CSheaf:Sheaf:g
s:\([^A-Za-z0-9_]\)CSkipListConstIterator:\1SkipListConstIterator:g
s:^CSkipListConstIterator:SkipListConstIterator:g
s:\([^A-Za-z0-9_]\)CSkipListNode:\1SkipListNode:g
s:^CSkipListNode:SkipListNode:g
s:\([^A-Za-z0-9_]\)CSkipList:\1SkipList:g
s:^CSkipList:SkipList:g
s:\([^A-Za-z0-9_]\)CSmartVector:\1SmartVector:g
s:^CSmartVector:SmartVector:g
s:\([^A-Za-z0-9_]\)CStatement:\1Statement:g
s:^CStatement:Statement:g
s:\([^A-Za-z0-9_]\)CStraw:\1Straw:g
s:^CStraw:Straw:g
s:\([^A-Za-z0-9_]\)CStringListNode:\1StringListNode:g
s:^CStringListNode:StringListNode:g
s:\([^A-Za-z0-9_]\)CStringList:\1StringList:g
s:^CStringList:StringList:g
s:\([^A-Za-z0-9_]\)CTable:\1Table:g
s:^CTable:Table:g
s:\([^A-Za-z0-9_]\)CTopograph:\1Topograph:g
s:^CTopograph:Topograph:g
s:\([^A-Za-z0-9_]\)CUpdateEnumerationStatement:\1UpdateEnumerationStatement:g
s:^CUpdateEnumerationStatement:UpdateEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CUpdateMonadSetStatement:\1UpdateMonadSetStatement:g
s:^CUpdateMonadSetStatement:UpdateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectTypeStatement:\1UpdateObjectTypeStatement:g
s:^CUpdateObjectTypeStatement:UpdateObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByID_DsStatement:\1UpdateObjectsByID_DsStatement:g
s:^CUpdateObjectsByID_DsStatement:UpdateObjectsByID_DsStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByMonadsStatement:\1UpdateObjectsByMonadsStatement:g
s:^CUpdateObjectsByMonadsStatement:UpdateObjectsByMonadsStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByQueryStatement:\1UpdateObjectsByQueryStatement:g
s:^CUpdateObjectsByQueryStatement:UpdateObjectsByQueryStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsStatement:\1UpdateObjectsStatement:g
s:^CUpdateObjectsStatement:UpdateObjectsStatement:g
s:\([^A-Za-z0-9_]\)CUseStatement:\1UseStatement:g
s:^CUseStatement:UseStatement:g
s:\([^A-Za-z0-9_]\)CVacuumDatabaseStatement:\1VacuumDatabaseStatement:g
s:^CVacuumDatabaseStatement:VacuumDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CValueTriple:\1ValueTriple:g
s:^CValueTriple:ValueTriple:g
s:\([^A-Za-z0-9_]\)CValue:\1Value:g
s:^CValue:Value:g
s:\([^A-Za-z0-9_]\)CalculateMMap\([^A-Za-z0-9_]\|\$\):\1calculateMMap\2:g
s:\([^A-Za-z0-9_]\)CanDoComparisonOp\([^A-Za-z0-9_]\|\$\):\1canDoComparisonOp\2:g
s:\([^A-Za-z0-9_]\)CommitTransaction\([^A-Za-z0-9_]\|\$\):\1commitTransaction\2:g
s:\([^A-Za-z0-9_]\)Connect\([^A-Za-z0-9_]\|\$\):\1connect\2:g
s:\([^A-Za-z0-9_]\)ConnectionOk\([^A-Za-z0-9_]\|\$\):\1connectionOk\2:g
s:\([^A-Za-z0-9_]\)ConvertDBName\([^A-Za-z0-9_]\|\$\):\1convertDBName\2:g
s:\([^A-Za-z0-9_]\)CreateConstants\([^A-Za-z0-9_]\|\$\):\1createConstants\2:g
s:\([^A-Za-z0-9_]\)CreateDatabase\([^A-Za-z0-9_]\|\$\):\1createDatabase\2:g
s:\([^A-Za-z0-9_]\)CreateEnum\([^A-Za-z0-9_]\|\$\):\1createEnum\2:g
s:\([^A-Za-z0-9_]\)CreateEnumConstant\([^A-Za-z0-9_]\|\$\):\1createEnumConstant\2:g
s:\([^A-Za-z0-9_]\)CreateFeature\([^A-Za-z0-9_]\|\$\):\1createFeature\2:g
s:\([^A-Za-z0-9_]\)CreateIndex\([^A-Za-z0-9_]\|\$\):\1createIndex\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnDatabase\([^A-Za-z0-9_]\|\$\):\1createIndicesOnDatabase\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTGut\([^A-Za-z0-9_]\|\$\):\1createIndicesOnOTGut\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTMonadMs\([^A-Za-z0-9_]\|\$\):\1createIndicesOnOTMonadMs\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTObjects\([^A-Za-z0-9_]\|\$\):\1createIndicesOnOTObjects\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnObjectType\([^A-Za-z0-9_]\|\$\):\1createIndicesOnObjectType\2:g
s:\([^A-Za-z0-9_]\)CreateMonadSet\([^A-Za-z0-9_]\|\$\):\1createMonadSet\2:g
s:\([^A-Za-z0-9_]\)CreateObject\([^A-Za-z0-9_]\|\$\):\1createObject\2:g
s:\([^A-Za-z0-9_]\)CreateObjectType\([^A-Za-z0-9_]\|\$\):\1createObjectType\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_gut\([^A-Za-z0-9_]\|\$\):\1createObjectTypeOT_gut\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_gut_or_objects\([^A-Za-z0-9_]\|\$\):\1createObjectTypeOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_objects\([^A-Za-z0-9_]\|\$\):\1createObjectTypeOT_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjects\([^A-Za-z0-9_]\|\$\):\1createObjects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsInBetweenData\([^A-Za-z0-9_]\|\$\):\1createObjectsInBetweenData\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_gut\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_DB\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_gut_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_data\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_gut_data\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_or_objects\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_or_objects_DB\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_gut_or_objects_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_monad_ms\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms_DB\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_monad_ms_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms_data\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_monad_ms_data\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects_DB\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_objects_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects_data\([^A-Za-z0-9_]\|\$\):\1createObjectsOT_objects_data\2:g
s:\([^A-Za-z0-9_]\)CreateSchemaVersionTable\([^A-Za-z0-9_]\|\$\):\1createSchemaVersionTable\2:g
s:\([^A-Za-z0-9_]\)CreateSegment\([^A-Za-z0-9_]\|\$\):\1createSegment\2:g
s:\([^A-Za-z0-9_]\)CreateSequenceTables110\([^A-Za-z0-9_]\|\$\):\1createSequenceTables110\2:g
s:\([^A-Za-z0-9_]\)CreateSequenceTables118\([^A-Za-z0-9_]\|\$\):\1createSequenceTables118\2:g
s:\([^A-Za-z0-9_]\)Create_min_max_m_table\([^A-Za-z0-9_]\|\$\):\1createMin_max_m_table\2:g
s:\([^A-Za-z0-9_]\)DBIsInitialized\([^A-Za-z0-9_]\|\$\):\1dbIsInitialized\2:g
s:\([^A-Za-z0-9_]\)DatabaseNameIsOK\([^A-Za-z0-9_]\|\$\):\1databaseNameIsOK\2:g
s:\([^A-Za-z0-9_]\)DeleteDatabase\([^A-Za-z0-9_]\|\$\):\1deleteDatabase\2:g
s:\([^A-Za-z0-9_]\)DeleteMonads\([^A-Za-z0-9_]\|\$\):\1deleteMonads\2:g
s:\([^A-Za-z0-9_]\)DeleteRedundantSequenceInfo\([^A-Za-z0-9_]\|\$\):\1deleteRedundantSequenceInfo\2:g
s:\([^A-Za-z0-9_]\)DropDatabase\([^A-Za-z0-9_]\|\$\):\1dropDatabase\2:g
s:\([^A-Za-z0-9_]\)DropEnum\([^A-Za-z0-9_]\|\$\):\1dropEnum\2:g
s:\([^A-Za-z0-9_]\)DropEnumConst\([^A-Za-z0-9_]\|\$\):\1dropEnumConst\2:g
s:\([^A-Za-z0-9_]\)DropFeature\([^A-Za-z0-9_]\|\$\):\1dropFeature\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_gut\([^A-Za-z0-9_]\|\$\):\1dropFeatureFromOT_gut\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_gut_or_objects\([^A-Za-z0-9_]\|\$\):\1dropFeatureFromOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_objects\([^A-Za-z0-9_]\|\$\):\1dropFeatureFromOT_objects\2:g
s:\([^A-Za-z0-9_]\)DropIndex\([^A-Za-z0-9_]\|\$\):\1dropIndex\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnDatabase\([^A-Za-z0-9_]\|\$\):\1dropIndicesOnDatabase\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTGut\([^A-Za-z0-9_]\|\$\):\1dropIndicesOnOTGut\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTMonadMs\([^A-Za-z0-9_]\|\$\):\1dropIndicesOnOTMonadMs\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTObjects\([^A-Za-z0-9_]\|\$\):\1dropIndicesOnOTObjects\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnObjectType\([^A-Za-z0-9_]\|\$\):\1dropIndicesOnObjectType\2:g
s:\([^A-Za-z0-9_]\)DropMonadSet\([^A-Za-z0-9_]\|\$\):\1dropMonadSet\2:g
s:\([^A-Za-z0-9_]\)DropObject\([^A-Za-z0-9_]\|\$\):\1dropObject\2:g
s:\([^A-Za-z0-9_]\)DropObjectType\([^A-Za-z0-9_]\|\$\):\1dropObjectType\2:g
s:\([^A-Za-z0-9_]\)DropObjectsInMonads\([^A-Za-z0-9_]\|\$\):\1dropObjectsInMonads\2:g
s:\([^A-Za-z0-9_]\)EnumConstExists\([^A-Za-z0-9_]\|\$\):\1enumConstExists\2:g
s:\([^A-Za-z0-9_]\)EnumExists\([^A-Za-z0-9_]\|\$\):\1enumExists\2:g
s:\([^A-Za-z0-9_]\)ErrorMessage\([^A-Za-z0-9_]\|\$\):\1errorMessage\2:g
s:\([^A-Za-z0-9_]\)EscapeStringForSQL\([^A-Za-z0-9_]\|\$\):\1escapeStringForSQL\2:g
s:\([^A-Za-z0-9_]\)ExecAdd\([^A-Za-z0-9_]\|\$\):\1execAdd\2:g
s:\([^A-Za-z0-9_]\)ExecAddUpdateRemove\([^A-Za-z0-9_]\|\$\):\1execAddUpdateRemove\2:g
s:\([^A-Za-z0-9_]\)ExecCOPY\([^A-Za-z0-9_]\|\$\):\1execCOPY\2:g
s:\([^A-Za-z0-9_]\)ExecCommand\([^A-Za-z0-9_]\|\$\):\1execCommand\2:g
s:\([^A-Za-z0-9_]\)ExecMakeFeatureArray\([^A-Za-z0-9_]\|\$\):\1execMakeFeatureArray\2:g
s:\([^A-Za-z0-9_]\)ExecMakeFeatureList\([^A-Za-z0-9_]\|\$\):\1execMakeFeatureList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeList\([^A-Za-z0-9_]\|\$\):\1execMakeList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeNameList\([^A-Za-z0-9_]\|\$\):\1execMakeNameList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeSOM\([^A-Za-z0-9_]\|\$\):\1execMakeSOM\2:g
s:\([^A-Za-z0-9_]\)ExecOneType\([^A-Za-z0-9_]\|\$\):\1execOneType\2:g
s:\([^A-Za-z0-9_]\)ExecSelect\([^A-Za-z0-9_]\|\$\):\1execSelect\2:g
s:\([^A-Za-z0-9_]\)FeatureExists\([^A-Za-z0-9_]\|\$\):\1featureExists\2:g
s:\([^A-Za-z0-9_]\)Finalize\([^A-Za-z0-9_]\|\$\):\1finalize\2:g
s:\([^A-Za-z0-9_]\)GetComputedFeature\([^A-Za-z0-9_]\|\$\):\1getComputedFeature\2:g
s:\([^A-Za-z0-9_]\)GetComputedFeatures\([^A-Za-z0-9_]\|\$\):\1getComputedFeatures\2:g
s:\([^A-Za-z0-9_]\)GetCurrentDatabaseVersion\([^A-Za-z0-9_]\|\$\):\1getCurrentDatabaseVersion\2:g
s:\([^A-Za-z0-9_]\)GetDefault\([^A-Za-z0-9_]\|\$\):\1getDefault\2:g
s:\([^A-Za-z0-9_]\)GetEMdFComparison\([^A-Za-z0-9_]\|\$\):\1getEMdFComparison\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFFactor\([^A-Za-z0-9_]\|\$\):\1getEMdFFFactor\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFFeatures\([^A-Za-z0-9_]\|\$\):\1getEMdFFFeatures\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFTerm\([^A-Za-z0-9_]\|\$\):\1getEMdFFTerm\2:g
s:\([^A-Za-z0-9_]\)GetEVkindFromTypeID_D\([^A-Za-z0-9_]\|\$\):\1getEVkindFromTypeID_D\2:g
s:\([^A-Za-z0-9_]\)GetEnumConstNameFromValue\([^A-Za-z0-9_]\|\$\):\1getEnumConstNameFromValue\2:g
s:\([^A-Za-z0-9_]\)GetEnumConstants\([^A-Za-z0-9_]\|\$\):\1getEnumConstants\2:g
s:\([^A-Za-z0-9_]\)GetEnumerations\([^A-Za-z0-9_]\|\$\):\1getEnumerations\2:g
s:\([^A-Za-z0-9_]\)GetFeatures\([^A-Za-z0-9_]\|\$\):\1getFeatures\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesByQuery\([^A-Za-z0-9_]\|\$\):\1getFeaturesByQuery\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesByQueryExec\([^A-Za-z0-9_]\|\$\):\1getFeaturesByQueryExec\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesForObjectType\([^A-Za-z0-9_]\|\$\):\1getFeaturesForObjectType\2:g
s:\([^A-Za-z0-9_]\)GetInst\([^A-Za-z0-9_]\|\$\):\1getInst\2:g
s:\([^A-Za-z0-9_]\)GetLastInsertRowID\([^A-Za-z0-9_]\|\$\):\1getLastInsertRowID\2:g
s:\([^A-Za-z0-9_]\)GetMonadsFromID_D\([^A-Za-z0-9_]\|\$\):\1getMonadsFromID_D\2:g
s:\([^A-Za-z0-9_]\)GetMonadsFromID_Ds\([^A-Za-z0-9_]\|\$\):\1getMonadsFromID_Ds\2:g
s:\([^A-Za-z0-9_]\)GetNextID\([^A-Za-z0-9_]\|\$\):\1getNextID\2:g
s:\([^A-Za-z0-9_]\)GetNextObjectID_D\([^A-Za-z0-9_]\|\$\):\1getNextObjectID_D\2:g
s:\([^A-Za-z0-9_]\)GetNextOtherID\([^A-Za-z0-9_]\|\$\):\1getNextOtherID\2:g
s:\([^A-Za-z0-9_]\)GetNextTuple\([^A-Za-z0-9_]\|\$\):\1getNextTuple\2:g
s:\([^A-Za-z0-9_]\)GetOTGutOrObjects\([^A-Za-z0-9_]\|\$\):\1getOTGutOrObjects\2:g
s:\([^A-Za-z0-9_]\)GetOTHasSingleRangeObjects\([^A-Za-z0-9_]\|\$\):\1getOTHasSingleRangeObjects\2:g
s:\([^A-Za-z0-9_]\)GetObjectTypes\([^A-Za-z0-9_]\|\$\):\1getObjectTypes\2:g
s:\([^A-Za-z0-9_]\)GetObjectTypesUsingEnumeration\([^A-Za-z0-9_]\|\$\):\1getObjectTypesUsingEnumeration\2:g
s:\([^A-Za-z0-9_]\)GetObjectsAtM\([^A-Za-z0-9_]\|\$\):\1getObjectsAtM\2:g
s:\([^A-Za-z0-9_]\)GetObjectsByMonads\([^A-Za-z0-9_]\|\$\):\1getObjectsByMonads\2:g
s:\([^A-Za-z0-9_]\)GetObjectsHavingMonadsInMonadSet\([^A-Za-z0-9_]\|\$\):\1getObjectsHavingMonadsInMonadSet\2:g
s:\([^A-Za-z0-9_]\)GetObjectsStartingAtSm\([^A-Za-z0-9_]\|\$\):\1getObjectsStartingAtSm\2:g
s:\([^A-Za-z0-9_]\)GetObjectsWithinMonads\([^A-Za-z0-9_]\|\$\):\1getObjectsWithinMonads\2:g
s:\([^A-Za-z0-9_]\)GetSOMForObject\([^A-Za-z0-9_]\|\$\):\1getSOMForObject\2:g
s:\([^A-Za-z0-9_]\)GetSchemaVersion\([^A-Za-z0-9_]\|\$\):\1getSchemaVersion\2:g
s:\([^A-Za-z0-9_]\)Get_all_m_1\([^A-Za-z0-9_]\|\$\):\1getAll_m_1\2:g
s:\([^A-Za-z0-9_]\)Get_max_m\([^A-Za-z0-9_]\|\$\):\1getMax_m\2:g
s:\([^A-Za-z0-9_]\)Get_min_m\([^A-Za-z0-9_]\|\$\):\1getMin_m\2:g
s:\([^A-Za-z0-9_]\)HasFirstLast\([^A-Za-z0-9_]\|\$\):\1hasFirstLast\2:g
s:\([^A-Za-z0-9_]\)HasRow\([^A-Za-z0-9_]\|\$\):\1hasRow\2:g
s:\([^A-Za-z0-9_]\)Hat\([^A-Za-z0-9_]\|\$\):\1hat\2:g
s:\([^A-Za-z0-9_]\)InsertMonads\([^A-Za-z0-9_]\|\$\):\1insertMonads\2:g
s:\([^A-Za-z0-9_]\)Join\([^A-Za-z0-9_]\|\$\):\1join\2:g
s:\([^A-Za-z0-9_]\)JoinTakeOver\([^A-Za-z0-9_]\|\$\):\1joinAndTakeOver\2:g
s:\([^A-Za-z0-9_]\)LoadEnumConstantsIntoCache\([^A-Za-z0-9_]\|\$\):\1loadEnumConstantsIntoCache\2:g
s:\([^A-Za-z0-9_]\)MakeFeatureSQLType\([^A-Za-z0-9_]\|\$\):\1makeFeatureSQLType\2:g
s:\([^A-Za-z0-9_]\)MakeMonadConstraintsFromSOM\([^A-Za-z0-9_]\|\$\):\1makeMonadConstraintsFromSOM\2:g
s:\([^A-Za-z0-9_]\)MayCOPY\([^A-Za-z0-9_]\|\$\):\1mayCOPY\2:g
s:\([^A-Za-z0-9_]\)MonadSetExists\([^A-Za-z0-9_]\|\$\):\1monadSetExists\2:g
s:\([^A-Za-z0-9_]\)Monad_Set_Element:\1MonadSetElement:g
s:\([^A-Za-z0-9_]\)MonadsBuildSet\([^A-Za-z0-9_]\|\$\):\1monadsBuildSet\2:g
s:\([^A-Za-z0-9_]\)MoveSequenceValue110\([^A-Za-z0-9_]\|\$\):\1moveSequenceValue110\2:g
s:\([^A-Za-z0-9_]\)MoveSequenceValue118\([^A-Za-z0-9_]\|\$\):\1moveSequenceValue118\2:g
s:\([^A-Za-z0-9_]\)MyExec\([^A-Za-z0-9_]\|\$\):\1myExec\2:g
s:\([^A-Za-z0-9_]\)Exec\([^A-Za-z0-9_]\|\$\):\1exec\2:g
s:\([^A-Za-z0-9_]\)MyMonads\([^A-Za-z0-9_]\|\$\):\1myMonads\2:g
s:\([^A-Za-z0-9_]\)MySymbol\([^A-Za-z0-9_]\|\$\):\1mySymbol\2:g
s:\([^A-Za-z0-9_]\)MyType\([^A-Za-z0-9_]\|\$\):\1myType\2:g
s:\([^A-Za-z0-9_]\)MyWeed\([^A-Za-z0-9_]\|\$\):\1myWeed\2:g
s:\([^A-Za-z0-9_]\)NoOfFields\([^A-Za-z0-9_]\|\$\):\1getNoOfFields\2:g
s:\([^A-Za-z0-9_]\)NoOfResultTuples\([^A-Za-z0-9_]\|\$\):\1noOfResultTuples\2:g
s:\([^A-Za-z0-9_]\)NormalizeOTName\([^A-Za-z0-9_]\|\$\):\1normalizeOTName\2:g
s:\([^A-Za-z0-9_]\)ObjectID_DExists\([^A-Za-z0-9_]\|\$\):\1objectID_DExists\2:g
s:\([^A-Za-z0-9_]\)ObjectID_DExistsInType\([^A-Za-z0-9_]\|\$\):\1objectID_DExistsInType\2:g
s:\([^A-Za-z0-9_]\)Print\([^A-Za-z0-9_]\|\$\):\1out\2:g
s:\([^A-Za-z0-9_]\)PrintConsole\([^A-Za-z0-9_]\|\$\):\1printConsole\2:g
s:\([^A-Za-z0-9_]\)PrintXML\([^A-Za-z0-9_]\|\$\):\1printXML\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Header\([^A-Za-z0-9_]\|\$\):\1printXMLHeader\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Row\([^A-Za-z0-9_]\|\$\):\1printXMLRow\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Rows\([^A-Za-z0-9_]\|\$\):\1printXMLRows\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CMQLResult\([^A-Za-z0-9_]\|\$\):\1printDTDMQLResult\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CSheaf\([^A-Za-z0-9_]\|\$\):\1printDTDSheaf\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CTable\([^A-Za-z0-9_]\|\$\):\1printDTDTable\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_end\([^A-Za-z0-9_]\|\$\):\1printDTDEnd\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_start\([^A-Za-z0-9_]\|\$\):\1printDTDStart\2:g
s:\([^A-Za-z0-9_]\)Print_XMLDecl\([^A-Za-z0-9_]\|\$\):\1printXMLDecl\2:g
s:\([^A-Za-z0-9_]\)RemoveMSE\([^A-Za-z0-9_]\|\$\):\1removeMSE\2:g
s:\([^A-Za-z0-9_]\)Restrict\([^A-Za-z0-9_]\|\$\):\1restrict\2:g
s:\([^A-Za-z0-9_]\)SelectMonadSets\([^A-Za-z0-9_]\|\$\):\1selectMonadSets\2:g
s:\([^A-Za-z0-9_]\)SetDefaultEnumConst\([^A-Za-z0-9_]\|\$\):\1setDefaultEnumConst\2:g
s:\([^A-Za-z0-9_]\)SetNextObjectID_DIfNotHigher\([^A-Za-z0-9_]\|\$\):\1setNextObjectID_DIfNotHigher\2:g
s:\([^A-Za-z0-9_]\)SetSchemaVersion\([^A-Za-z0-9_]\|\$\):\1setSchemaVersion\2:g
s:\([^A-Za-z0-9_]\)Set_max_m\([^A-Za-z0-9_]\|\$\):\1setMax_m\2:g
s:\([^A-Za-z0-9_]\)Set_min_m\([^A-Za-z0-9_]\|\$\):\1setMin_m\2:g
s:\([^A-Za-z0-9_]\)Set_min_max_m_from_object_type\([^A-Za-z0-9_]\|\$\):\1setMin_max_m_fromObjectType\2:g
s:\([^A-Za-z0-9_]\)Set_min_max_m_from_object_types\([^A-Za-z0-9_]\|\$\):\1setMin_max_m_fromObjectTypes\2:g
s:\([^A-Za-z0-9_]\)ShutdownConnection\([^A-Za-z0-9_]\|\$\):\1shutdownConnection\2:g
s:\([^A-Za-z0-9_]\)Symbol\([^A-Za-z0-9_]\|\$\):\1symbol\2:g
s:\([^A-Za-z0-9_]\)SymbolAddFeatures\([^A-Za-z0-9_]\|\$\):\1symbolAddFeatures\2:g
s:\([^A-Za-z0-9_]\)SymbolAddToObject\([^A-Za-z0-9_]\|\$\):\1symbolAddToObject\2:g
s:\([^A-Za-z0-9_]\)SymbolAllAreOfSameType\([^A-Za-z0-9_]\|\$\):\1symbolAllAreOfSameType\2:g
s:\([^A-Za-z0-9_]\)SymbolAllFeaturesMustBeAssigned\([^A-Za-z0-9_]\|\$\):\1symbolAllFeaturesMustBeAssigned\2:g
s:\([^A-Za-z0-9_]\)SymbolAllFeaturesMustExist\([^A-Za-z0-9_]\|\$\):\1symbolAllFeaturesMustExist\2:g
s:\([^A-Za-z0-9_]\)SymbolAssignValues\([^A-Za-z0-9_]\|\$\):\1symbolAssignValues\2:g
s:\([^A-Za-z0-9_]\)SymbolAssignValuesPrivate\([^A-Za-z0-9_]\|\$\):\1symbolAssignValuesPrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolCheckNoTwoValuesSamePrivate\([^A-Za-z0-9_]\|\$\):\1symbolCheckNoTwoValuesSamePrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolConstantExistence\([^A-Za-z0-9_]\|\$\):\1symbolExistenceOfConstants\2:g
s:\([^A-Za-z0-9_]\)SymbolDefaultIsRemoved\([^A-Za-z0-9_]\|\$\):\1symbolDefaultIsRemoved\2:g
s:\([^A-Za-z0-9_]\)SymbolDoLocalUpdatePrivate\([^A-Za-z0-9_]\|\$\):\1symbolDoLocalUpdatePrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumConstantsExist\([^A-Za-z0-9_]\|\$\):\1symbolEnumConstantsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerationExists\([^A-Za-z0-9_]\|\$\):\1symbolEnumerationExists\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerations\([^A-Za-z0-9_]\|\$\):\1symbolEnumerations\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerationsExist\([^A-Za-z0-9_]\|\$\):\1symbolEnumerationsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolExistenceOfConstants\([^A-Za-z0-9_]\|\$\):\1symbolExistenceOfConstants\2:g
s:\([^A-Za-z0-9_]\)SymbolExistenceOfFeatures\([^A-Za-z0-9_]\|\$\):\1symbolExistenceOfFeatures\2:g
s:\([^A-Za-z0-9_]\)SymbolFeaturesExist\([^A-Za-z0-9_]\|\$\):\1symbolFeaturesExist\2:g
s:\([^A-Za-z0-9_]\)SymbolFeaturesMustNotExist\([^A-Za-z0-9_]\|\$\):\1symbolFeaturesMustNotExist\2:g
s:\([^A-Za-z0-9_]\)SymbolNoFeatureMayBeComputed\([^A-Za-z0-9_]\|\$\):\1symbolNoFeatureMayBeComputed\2:g
s:\([^A-Za-z0-9_]\)SymbolNoTwoValuesSame\([^A-Za-z0-9_]\|\$\):\1symbolNoTwoValuesSame\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectTypeExists\([^A-Za-z0-9_]\|\$\):\1symbolObjectTypeExists\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectsExist\([^A-Za-z0-9_]\|\$\):\1symbolObjectsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectsExistInType\([^A-Za-z0-9_]\|\$\):\1symbolObjectsExistInType\2:g
s:\([^A-Za-z0-9_]\)SymbolValueMoreThanOnce\([^A-Za-z0-9_]\|\$\):\1symbolValueMoreThanOnce\2:g
s:\([^A-Za-z0-9_]\)SymbolValueMoreThanOncePrivate\([^A-Za-z0-9_]\|\$\):\1symbolValueMoreThanOncePrivate\2:g
s:\([^A-Za-z0-9_]\)TableExists\([^A-Za-z0-9_]\|\$\):\1tableExists\2:g
s:\([^A-Za-z0-9_]\)ToString\([^A-Za-z0-9_]\|\$\):\1toString\2:g
s:\([^A-Za-z0-9_]\)TypeAssignTypeID\([^A-Za-z0-9_]\|\$\):\1typeAssignTypeID\2:g
s:\([^A-Za-z0-9_]\)TypeAssignTypes\([^A-Za-z0-9_]\|\$\):\1typeAssignTypes\2:g
s:\([^A-Za-z0-9_]\)TypeFeatureName\([^A-Za-z0-9_]\|\$\):\1typeFeatureName\2:g
s:\([^A-Za-z0-9_]\)Type_id_to_string\([^A-Za-z0-9_]\|\$\):\1ypeIdToString\2:g
s:\([^A-Za-z0-9_]\)Type_id_to_TableColumnType\([^A-Za-z0-9_]\|\$\):\1typeIdToTableColumnType\2:
s:\([^A-Za-z0-9_]\)TypeTypeCompatibility\([^A-Za-z0-9_]\|\$\):\1typeTypeCompatibility\2:g
s:\([^A-Za-z0-9_]\)UpdateEnumConst\([^A-Za-z0-9_]\|\$\):\1updateEnumConst\2:g
s:\([^A-Za-z0-9_]\)UpdateObject\([^A-Za-z0-9_]\|\$\):\1updateObject\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabase\([^A-Za-z0-9_]\|\$\):\1upgradeDatabase\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo110\([^A-Za-z0-9_]\|\$\):\1upgradeDatabaseTo110\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo115\([^A-Za-z0-9_]\|\$\):\1upgradeDatabaseTo115\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo118\([^A-Za-z0-9_]\|\$\):\1upgradeDatabaseTo118\2:g
s:\([^A-Za-z0-9_]\)UpgradeObjectTypeTo110\([^A-Za-z0-9_]\|\$\):\1upgradeObjectTypeTo110\2:g
s:\([^A-Za-z0-9_]\)UseDatabase\([^A-Za-z0-9_]\|\$\):\1useDatabase\2:g
s:\([^A-Za-z0-9_]\)Vacuum\([^A-Za-z0-9_]\|\$\):\1vacuum\2:g
s:\([^A-Za-z0-9_]\)VacuumObjectType\([^A-Za-z0-9_]\|\$\):\1vacuumObjectType\2:g
s:\([^A-Za-z0-9_]\)Weed\([^A-Za-z0-9_]\|\$\):\1weed\2:g
s:\([^A-Za-z0-9_]\)WeedDefault\([^A-Za-z0-9_]\|\$\):\1weedDefault\2:g
s:\([^A-Za-z0-9_]\)WeedDefaultPrivate\([^A-Za-z0-9_]\|\$\):\1weedDefaultPrivate\2:g
s:\([^A-Za-z0-9_]\)WeedFirstLast\([^A-Za-z0-9_]\|\$\):\1weedFirstLast\2:g
s:\([^A-Za-z0-9_]\)WeedGET\([^A-Za-z0-9_]\|\$\):\1weedGET\2:g
s:\([^A-Za-z0-9_]\)WeedMonotonic\([^A-Za-z0-9_]\|\$\):\1weedMonotonic\2:g
s:\([^A-Za-z0-9_]\)WeedNoneIsNIL\([^A-Za-z0-9_]\|\$\):\1weedNoneIsNIL\2:g
s:\([^A-Za-z0-9_]\)WeedObjectTypeNameNotSpecial\([^A-Za-z0-9_]\|\$\):\1weedObjectTypeNameNotSpecial\2:g
s:\([^A-Za-z0-9_]\)WeedPositive\([^A-Za-z0-9_]\|\$\):\1weedPositive\2:g
s:\([^A-Za-z0-9_]\)WeedSelfNotAssigned\([^A-Za-z0-9_]\|\$\):\1weedSelfNotAssigned\2:g
s:\([^A-Za-z0-9_]\)WeedSelfNotDeclared\([^A-Za-z0-9_]\|\$\):\1weedSelfNotDeclared\2:g
s:\([^A-Za-z0-9_]\)WeedTildeOperator\([^A-Za-z0-9_]\|\$\):\1weedTildeOperator\2:g
s:\([^A-Za-z0-9_]\)add_EMdFValue\([^A-Za-z0-9_]\|\$\):\1addEMdFValue\2:g
s:\([^A-Za-z0-9_]\)add_eci\([^A-Za-z0-9_]\|\$\):\1addEci\2:g
s:\([^A-Za-z0-9_]\)add_enum\([^A-Za-z0-9_]\|\$\):\1addEnum\2:g
s:\([^A-Za-z0-9_]\)add_enum_const_to_cache\([^A-Za-z0-9_]\|\$\):\1addEnumConstToCache\2:g
s:\([^A-Za-z0-9_]\)add_enum_to_cache\([^A-Za-z0-9_]\|\$\):\1addEnumToCache\2:g
s:\([^A-Za-z0-9_]\)add_feature\([^A-Za-z0-9_]\|\$\):\1addFeature\2:g
s:\([^A-Za-z0-9_]\)add_feature_to_cache\([^A-Za-z0-9_]\|\$\):\1addFeatureToCache\2:g
s:\([^A-Za-z0-9_]\)add_feature_to_cache_if_not_already_there\([^A-Za-z0-9_]\|\$\):\1addFeatureToCacheIfNotAlreadyThere\2:g
s:\([^A-Za-z0-9_]\)add_mse\([^A-Za-z0-9_]\|\$\):\1addMse\2:g
s:\([^A-Za-z0-9_]\)add_object\([^A-Za-z0-9_]\|\$\):\1addObject\2:g
s:\([^A-Za-z0-9_]\)add_object_type_to_cache\([^A-Za-z0-9_]\|\$\):\1addObjectTypeToCache\2:g
s:\([^A-Za-z0-9_]\)add_stringlist_nodes\([^A-Za-z0-9_]\|\$\):\1addStringListNodes\2:g
s:\([^A-Za-z0-9_]\)add_value\([^A-Za-z0-9_]\|\$\):\1addValue\2:g
s:\([^A-Za-z0-9_]\)append_and_subsume\([^A-Za-z0-9_]\|\$\):\1appendAndSubsume\2:g
s:\([^A-Za-z0-9_]\)append_header\([^A-Za-z0-9_]\|\$\):\1appendHeader\2:g
s:\([^A-Za-z0-9_]\)append_local_error\([^A-Za-z0-9_]\|\$\):\1appendLocalError\2:g
s:\([^A-Za-z0-9_]\)big_union\([^A-Za-z0-9_]\|\$\):\1bigUnion\2:g
s:\([^A-Za-z0-9_]\)calculate_characteristic_string\([^A-Za-z0-9_]\|\$\):\1calculateCharacteristicString\2:g
s:\([^A-Za-z0-9_]\)calculate_pre_query_string\([^A-Za-z0-9_]\|\$\):\1calculatePreQueryString\2:g
s:\([^A-Za-z0-9_]\)clear_errors\([^A-Za-z0-9_]\|\$\):\1clearErrors\2:g
s:\([^A-Za-z0-9_]\)clear_local_error\([^A-Za-z0-9_]\|\$\):\1clearLocalError\2:g
s:\([^A-Za-z0-9_]\)compare_int\([^A-Za-z0-9_]\|\$\):\1compareInt\2:g
s:\([^A-Za-z0-9_]\)compare_string\([^A-Za-z0-9_]\|\$\):\1compareString\2:g
s:\([^A-Za-z0-9_]\)copy_MO\([^A-Za-z0-9_]\|\$\):\1copyMO\2:g
s:\([^A-Za-z0-9_]\)copy_other\([^A-Za-z0-9_]\|\$\):\1copyOther\2:g
s:\([^A-Za-z0-9_]\)create_headers\([^A-Za-z0-9_]\|\$\):\1createHeaders\2:g
s:\([^A-Za-z0-9_]\)decode_feature_name\([^A-Za-z0-9_]\|\$\):\1decodeFeatureName\2:g
s:\([^A-Za-z0-9_]\)decrease_indent\([^A-Za-z0-9_]\|\$\):\1decreaseIndent\2:g
s:\([^A-Za-z0-9_]\)delete_contents\([^A-Za-z0-9_]\|\$\):\1deleteContents\2:g
s:\([^A-Za-z0-9_]\)delete_mos\([^A-Za-z0-9_]\|\$\):\1deleteMos\2:g
s:\([^A-Za-z0-9_]\)delete_object_type_from_cache\([^A-Za-z0-9_]\|\$\):\1deleteObjectTypeFromCache\2:g
s:\([^A-Za-z0-9_]\)delete_straws\([^A-Za-z0-9_]\|\$\):\1deleteStraws\2:g
s:\([^A-Za-z0-9_]\)dump_results\([^A-Za-z0-9_]\|\$\):\1dumpResults\2:g
s:\([^A-Za-z0-9_]\)dump_results_all\([^A-Za-z0-9_]\|\$\):\1dumpResultsAll\2:g
s:\([^A-Za-z0-9_]\)emit_attributes\([^A-Za-z0-9_]\|\$\):\1emitAttributes\2:g
s:\([^A-Za-z0-9_]\)emit_horizontal_line\([^A-Za-z0-9_]\|\$\):\1emitHorizontalLine\2:g
s:\([^A-Za-z0-9_]\)encode_feature_name\([^A-Za-z0-9_]\|\$\):\1encodeFeatureName\2:g
s:\([^A-Za-z0-9_]\)encode_feature_name_for_prequery_string\([^A-Za-z0-9_]\|\$\):\1encodeFeatureNameForPrequeryString\2:g
s:\([^A-Za-z0-9_]\)encrypt_string\([^A-Za-z0-9_]\|\$\):\1encryptString\2:g
s:\([^A-Za-z0-9_]\)end_tag\([^A-Za-z0-9_]\|\$\):\1endTag\2:g
s:\([^A-Za-z0-9_]\)enum_const_info:\1EnumConstInfo:g
s:^enum_const_info:EnumConstInfo:g
s:\([^A-Za-z0-9_]\)execute_file\([^A-Za-z0-9_]\|\$\):\1executeFile\2:g
s:\([^A-Za-z0-9_]\)execute_stream\([^A-Za-z0-9_]\|\$\):\1executeStream\2:g
s:\([^A-Za-z0-9_]\)execute_string\([^A-Za-z0-9_]\|\$\):\1executeString\2:g
s:\([^A-Za-z0-9_]\)extend_with_me\([^A-Za-z0-9_]\|\$\):\1extendWithMe\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_ASCII\([^A-Za-z0-9_]\|\$\):\1featureTypeIdIsASCII\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_ENUM\([^A-Za-z0-9_]\|\$\):\1featureTypeIdIsENUM\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_STRING\([^A-Za-z0-9_]\|\$\):\1featureTypeIdIsSTRING\2:g
s:\([^A-Za-z0-9_]\)fill_gaps\([^A-Za-z0-9_]\|\$\):\1fillGaps\2:g
s:\([^A-Za-z0-9_]\)gap_exists\([^A-Za-z0-9_]\|\$\):\1gapExists\2:g
s:\([^A-Za-z0-9_]\)get_DB_error\([^A-Za-z0-9_]\|\$\):\1getDBError\2:g
s:\([^A-Za-z0-9_]\)get_EMdFValue\([^A-Za-z0-9_]\|\$\):\1getEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_EMdFValue_index\([^A-Za-z0-9_]\|\$\):\1getEMdFValueIndex\2:g
s:\([^A-Za-z0-9_]\)get_Enumeration\([^A-Za-z0-9_]\|\$\):\1getEnumeration\2:g
s:\([^A-Za-z0-9_]\)get_Next\([^A-Za-z0-9_]\|\$\):\1getNext\2:g
s:\([^A-Za-z0-9_]\)get_as_EMdFValue\([^A-Za-z0-9_]\|\$\):\1getAsEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_as_string\([^A-Za-z0-9_]\|\$\):\1getAsString\2:g
s:\([^A-Za-z0-9_]\)get_block\([^A-Za-z0-9_]\|\$\):\1getBlock\2:g
s:\([^A-Za-z0-9_]\)get_block_str\([^A-Za-z0-9_]\|\$\):\1getBlockStr\2:g
s:\([^A-Za-z0-9_]\)get_block_string\([^A-Za-z0-9_]\|\$\):\1getBlockString\2:g
s:\([^A-Za-z0-9_]\)get_characteristic_string\([^A-Za-z0-9_]\|\$\):\1getCharacteristicString\2:g
s:\([^A-Za-z0-9_]\)get_column\([^A-Za-z0-9_]\|\$\):\1getColumn\2:g
s:\([^A-Za-z0-9_]\)get_comparison_op\([^A-Za-z0-9_]\|\$\):\1getComparisonOp\2:g
s:\([^A-Za-z0-9_]\)get_compiler_error\([^A-Za-z0-9_]\|\$\):\1getCompilerError\2:g
s:\([^A-Za-z0-9_]\)get_const_reference\([^A-Za-z0-9_]\|\$\):\1getConstReference\2:g
s:\([^A-Za-z0-9_]\)get_constraints\([^A-Za-z0-9_]\|\$\):\1getConstraints\2:g
s:\([^A-Za-z0-9_]\)get_content\([^A-Za-z0-9_]\|\$\):\1getContent\2:g
s:\([^A-Za-z0-9_]\)get_copy_of_mo\([^A-Za-z0-9_]\|\$\):\1getCopyOfMo\2:g
s:\([^A-Za-z0-9_]\)get_default\([^A-Za-z0-9_]\|\$\):\1getDefault\2:g
s:\([^A-Za-z0-9_]\)get_default_password\([^A-Za-z0-9_]\|\$\):\1getDefaultPassword\2:g
s:\([^A-Za-z0-9_]\)get_default_specification\([^A-Za-z0-9_]\|\$\):\1getDefaultSpecification\2:g
s:\([^A-Za-z0-9_]\)get_default_value\([^A-Za-z0-9_]\|\$\):\1getDefaultValue\2:g
s:\([^A-Za-z0-9_]\)get_ec_initialization\([^A-Za-z0-9_]\|\$\):\1getEcInitialization\2:g
s:\([^A-Za-z0-9_]\)get_ec_name\([^A-Za-z0-9_]\|\$\):\1getEcName\2:g
s:\([^A-Za-z0-9_]\)get_emdf_value\([^A-Za-z0-9_]\|\$\):\1getEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_enum\([^A-Za-z0-9_]\|\$\):\1getEnum\2:g
s:\([^A-Za-z0-9_]\)get_enum_const\([^A-Za-z0-9_]\|\$\):\1getEnumConst\2:g
s:\([^A-Za-z0-9_]\)get_enum_id\([^A-Za-z0-9_]\|\$\):\1getEnumId\2:g
s:\([^A-Za-z0-9_]\)get_enum_name_from_index\([^A-Za-z0-9_]\|\$\):\1getEnumNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_enum_value\([^A-Za-z0-9_]\|\$\):\1getEnumValue\2:g
s:\([^A-Za-z0-9_]\)get_expression\([^A-Za-z0-9_]\|\$\):\1getExpression\2:g
s:\([^A-Za-z0-9_]\)get_feature\([^A-Za-z0-9_]\|\$\):\1getFeature\2:g
s:\([^A-Za-z0-9_]\)get_feature_addition\([^A-Za-z0-9_]\|\$\):\1getFeatureAddition\2:g
s:\([^A-Za-z0-9_]\)get_feature_assignments\([^A-Za-z0-9_]\|\$\):\1getFeatureAssignments\2:g
s:\([^A-Za-z0-9_]\)get_feature_comparison\([^A-Za-z0-9_]\|\$\):\1getFeatureComparison\2:g
s:\([^A-Za-z0-9_]\)get_feature_constraints\([^A-Za-z0-9_]\|\$\):\1getFeatureConstraints\2:g
s:\([^A-Za-z0-9_]\)get_feature_index\([^A-Za-z0-9_]\|\$\):\1getFeatureIndex\2:g
s:\([^A-Za-z0-9_]\)get_feature_index_db\([^A-Za-z0-9_]\|\$\):\1getFeatureIndexDB\2:g
s:\([^A-Za-z0-9_]\)get_feature_index_inst\([^A-Za-z0-9_]\|\$\):\1getFeatureIndexInst\2:g
s:\([^A-Za-z0-9_]\)get_feature_info\([^A-Za-z0-9_]\|\$\):\1getFeatureInfo\2:g
s:\([^A-Za-z0-9_]\)get_feature_infos\([^A-Za-z0-9_]\|\$\):\1getFeatureInfos\2:g
s:\([^A-Za-z0-9_]\)get_feature_name\([^A-Za-z0-9_]\|\$\):\1getFeatureName\2:g
s:\([^A-Za-z0-9_]\)get_feature_name_from_index\([^A-Za-z0-9_]\|\$\):\1getFeatureNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_feature_names\([^A-Za-z0-9_]\|\$\):\1getFeatureNames\2:g
s:\([^A-Za-z0-9_]\)get_feature_removal\([^A-Za-z0-9_]\|\$\):\1getFeatureRemoval\2:g
s:\([^A-Za-z0-9_]\)get_feature_retrieval\([^A-Za-z0-9_]\|\$\):\1getFeatureRetrieval\2:g
s:\([^A-Za-z0-9_]\)get_feature_type_id\([^A-Za-z0-9_]\|\$\):\1getFeatureTypeId\2:g
s:\([^A-Za-z0-9_]\)get_feature_value\([^A-Za-z0-9_]\|\$\):\1getFeatureValue\2:g
s:\([^A-Za-z0-9_]\)get_feature_value_arr_size\([^A-Za-z0-9_]\|\$\):\1getFeatureValueArrSize\2:g
s:\([^A-Za-z0-9_]\)get_ffactor\([^A-Za-z0-9_]\|\$\):\1getFFactor\2:g
s:\([^A-Za-z0-9_]\)get_ffeatures\([^A-Za-z0-9_]\|\$\):\1getFFeatures\2:g
s:\([^A-Za-z0-9_]\)get_first_last\([^A-Za-z0-9_]\|\$\):\1getFirstLast\2:g
s:\([^A-Za-z0-9_]\)get_focus\([^A-Za-z0-9_]\|\$\):\1getFocus\2:g
s:\([^A-Za-z0-9_]\)get_fterm\([^A-Za-z0-9_]\|\$\):\1getFTerm\2:g
s:\([^A-Za-z0-9_]\)get_gap_block\([^A-Za-z0-9_]\|\$\):\1getGapBlock\2:g
s:\([^A-Za-z0-9_]\)get_gap_vector\([^A-Za-z0-9_]\|\$\):\1getGapVector\2:g
s:\([^A-Za-z0-9_]\)get_has_single_range_objects\([^A-Za-z0-9_]\|\$\):\1getHasSingleRangeObjects\2:g
s:\([^A-Za-z0-9_]\)get_id_d\([^A-Za-z0-9_]\|\$\):\1getID_D\2:g
s:\([^A-Za-z0-9_]\)get_identifier\([^A-Za-z0-9_]\|\$\):\1getIdentifier\2:g
s:\([^A-Za-z0-9_]\)get_index\([^A-Za-z0-9_]\|\$\):\1getIndex\2:g
s:\([^A-Za-z0-9_]\)get_index_in_symboltable\([^A-Za-z0-9_]\|\$\):\1getIndexInSymboltable\2:g
s:\([^A-Za-z0-9_]\)get_index_in_symboltable_entry\([^A-Za-z0-9_]\|\$\):\1getIndexInSymboltableEntry\2:g
s:\([^A-Za-z0-9_]\)get_int\([^A-Za-z0-9_]\|\$\):\1getInt\2:g
s:\([^A-Za-z0-9_]\)get_integer\([^A-Za-z0-9_]\|\$\):\1getInteger\2:g
s:\([^A-Za-z0-9_]\)get_is_computed\([^A-Za-z0-9_]\|\$\):\1getIsComputed\2:g
s:\([^A-Za-z0-9_]\)get_is_default\([^A-Za-z0-9_]\|\$\):\1getIsDefault\2:g
s:\([^A-Za-z0-9_]\)get_kind\([^A-Za-z0-9_]\|\$\):\1getKind\2:g
s:\([^A-Za-z0-9_]\)get_last\([^A-Za-z0-9_]\|\$\):\1getLast\2:g
s:\([^A-Za-z0-9_]\)get_last_compiler_stage\([^A-Za-z0-9_]\|\$\):\1getLastCompilerStage\2:g
s:\([^A-Za-z0-9_]\)get_last_kind\([^A-Za-z0-9_]\|\$\):\1getLastKind\2:g
s:\([^A-Za-z0-9_]\)get_leftmost_object_block_first\([^A-Za-z0-9_]\|\$\):\1getLeftmostObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)get_leftmost_object_type_name\([^A-Za-z0-9_]\|\$\):\1getLeftmostObjectTypeName\2:g
s:\([^A-Za-z0-9_]\)get_limit\([^A-Za-z0-9_]\|\$\):\1getLimit\2:g
s:\([^A-Za-z0-9_]\)get_local_error\([^A-Za-z0-9_]\|\$\):\1getLocalError\2:g
s:\([^A-Za-z0-9_]\)get_max_lengths\([^A-Za-z0-9_]\|\$\):\1getMaxLengths\2:g
s:\([^A-Za-z0-9_]\)get_max_lengths_all\([^A-Za-z0-9_]\|\$\):\1getMaxLengthsAll\2:g
s:\([^A-Za-z0-9_]\)get_monad_m_vector\([^A-Za-z0-9_]\|\$\):\1getMonad_mVector\2:g
s:\([^A-Za-z0-9_]\)get_monad_ms_list\([^A-Za-z0-9_]\|\$\):\1getMonad_mList\2:g
s:\([^A-Za-z0-9_]\)get_monads\([^A-Za-z0-9_]\|\$\):\1getMonads\2:g
s:\([^A-Za-z0-9_]\)get_mse_first\([^A-Za-z0-9_]\|\$\):\1getMseFirst\2:g
s:\([^A-Za-z0-9_]\)get_mse_last\([^A-Za-z0-9_]\|\$\):\1getMseLast\2:g
s:\([^A-Za-z0-9_]\)get_name\([^A-Za-z0-9_]\|\$\):\1getName\2:g
s:\([^A-Za-z0-9_]\)get_nr\([^A-Za-z0-9_]\|\$\):\1getNR\2:g
s:\([^A-Za-z0-9_]\)get_object\([^A-Za-z0-9_]\|\$\):\1getObject\2:g
s:\([^A-Za-z0-9_]\)get_object_block\([^A-Za-z0-9_]\|\$\):\1getObjectBlock\2:g
s:\([^A-Za-z0-9_]\)get_object_block_first\([^A-Za-z0-9_]\|\$\):\1getObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)get_object_reference\([^A-Za-z0-9_]\|\$\):\1getObjectReference\2:g
s:\([^A-Za-z0-9_]\)get_object_reference_index\([^A-Za-z0-9_]\|\$\):\1getObjectReferenceIndex\2:g
s:\([^A-Za-z0-9_]\)get_object_reference_usage\([^A-Za-z0-9_]\|\$\):\1getObjectReferenceUsage\2:g
s:\([^A-Za-z0-9_]\)get_object_type_id\([^A-Za-z0-9_]\|\$\):\1getObjectTypeId\2:g
s:\([^A-Za-z0-9_]\)get_object_type_index\([^A-Za-z0-9_]\|\$\):\1getObjectTypeIndex\2:g
s:\([^A-Za-z0-9_]\)get_object_type_name\([^A-Za-z0-9_]\|\$\):\1getObjectTypeName\2:g
s:\([^A-Za-z0-9_]\)get_object_type_name_from_index\([^A-Za-z0-9_]\|\$\):\1getOTNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_operator\([^A-Za-z0-9_]\|\$\):\1getSetOperator\2:g
s:\([^A-Za-z0-9_]\)get_opt_blocks\([^A-Za-z0-9_]\|\$\):\1getOptBlocks\2:g
s:\([^A-Za-z0-9_]\)get_opt_ec_initialization\([^A-Za-z0-9_]\|\$\):\1getOptEcInitialization\2:g
s:\([^A-Za-z0-9_]\)get_opt_gap_block\([^A-Za-z0-9_]\|\$\):\1getOptGapBlock\2:g
s:\([^A-Za-z0-9_]\)get_output_kind\([^A-Za-z0-9_]\|\$\):\1getOutputKind\2:g
s:\([^A-Za-z0-9_]\)get_power\([^A-Za-z0-9_]\|\$\):\1getPower\2:g
s:\([^A-Za-z0-9_]\)get_pre_query_string\([^A-Za-z0-9_]\|\$\):\1getPreQueryString\2:g
s:\([^A-Za-z0-9_]\)get_rest_of_block_str\([^A-Za-z0-9_]\|\$\):\1getRestOfBlockStr\2:g
s:\([^A-Za-z0-9_]\)get_result\([^A-Za-z0-9_]\|\$\):\1getResult\2:g
s:\([^A-Za-z0-9_]\)get_retrieval\([^A-Za-z0-9_]\|\$\):\1getRetrieval\2:g
s:\([^A-Za-z0-9_]\)get_set\([^A-Za-z0-9_]\|\$\):\1getSet\2:g
s:\([^A-Za-z0-9_]\)get_sheaf\([^A-Za-z0-9_]\|\$\):\1getSheaf\2:g
s:\([^A-Za-z0-9_]\)get_string\([^A-Za-z0-9_]\|\$\):\1getString\2:g
s:\([^A-Za-z0-9_]\)get_table\([^A-Za-z0-9_]\|\$\):\1getTable\2:g
s:\([^A-Za-z0-9_]\)get_type\([^A-Za-z0-9_]\|\$\):\1getType\2:g
s:\([^A-Za-z0-9_]\)get_type_id\([^A-Za-z0-9_]\|\$\):\1getTypeId\2:g
s:\([^A-Za-z0-9_]\)get_value\([^A-Za-z0-9_]\|\$\):\1getValue\2:g
s:\([^A-Za-z0-9_]\)has_EMPTY_mo\([^A-Za-z0-9_]\|\$\):\1hasEmpty_mo\2:g
s:\([^A-Za-z0-9_]\)has_NIL_mo\([^A-Za-z0-9_]\|\$\):\1hasNil_mo\2:g
s:\([^A-Za-z0-9_]\)has_default\([^A-Za-z0-9_]\|\$\):\1hasDefault\2:g
s:\([^A-Za-z0-9_]\)has_enum\([^A-Za-z0-9_]\|\$\):\1hasEnum\2:g
s:\([^A-Za-z0-9_]\)has_opt_ec_initialization\([^A-Za-z0-9_]\|\$\):\1hasOptEcInitialization\2:g
s:\([^A-Za-z0-9_]\)increase_indent\([^A-Za-z0-9_]\|\$\):\1increaseIndent\2:g
s:\([^A-Za-z0-9_]\)insert_after\([^A-Za-z0-9_]\|\$\):\1insertAfter\2:g
s:\([^A-Za-z0-9_]\)insert_before\([^A-Za-z0-9_]\|\$\):\1insertBefore\2:g
s:\([^A-Za-z0-9_]\)is_EMPTY_mo\([^A-Za-z0-9_]\|\$\):\1isEmpty_mo\2:g
s:\([^A-Za-z0-9_]\)is_NIL_mo\([^A-Za-z0-9_]\|\$\):\1isNil_mo\2:g
s:\([^A-Za-z0-9_]\)is_NOT\([^A-Za-z0-9_]\|\$\):\1isNOT\2:g
s:\([^A-Za-z0-9_]\)is_aggregate\([^A-Za-z0-9_]\|\$\):\1isAggregate\2:g
s:\([^A-Za-z0-9_]\)is_block\([^A-Za-z0-9_]\|\$\):\1isBlock\2:g
s:\([^A-Za-z0-9_]\)is_block_str\([^A-Za-z0-9_]\|\$\):\1isBlockStr\2:g
s:\([^A-Za-z0-9_]\)is_empty\([^A-Za-z0-9_]\|\$\):\1isEmpty\2:g
s:\([^A-Za-z0-9_]\)is_fail\([^A-Za-z0-9_]\|\$\):\1isFail\2:g
s:\([^A-Za-z0-9_]\)is_feature_comparison\([^A-Za-z0-9_]\|\$\):\1isFeatureComparison\2:g
s:\([^A-Za-z0-9_]\)is_ffactor\([^A-Za-z0-9_]\|\$\):\1isFFactor\2:g
s:\([^A-Za-z0-9_]\)is_fterm\([^A-Za-z0-9_]\|\$\):\1isFTerm\2:g
s:\([^A-Za-z0-9_]\)is_gap_or_opt_gap_block\([^A-Za-z0-9_]\|\$\):\1isGapOrOptGapBlock\2:g
s:\([^A-Za-z0-9_]\)is_member_of\([^A-Za-z0-9_]\|\$\):\1isMemberOf\2:g
s:\([^A-Za-z0-9_]\)is_object_block_first\([^A-Za-z0-9_]\|\$\):\1isObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)is_parenthesis\([^A-Za-z0-9_]\|\$\):\1isParenthesis\2:g
s:\([^A-Za-z0-9_]\)kDB:\1kDb:g
s:\([^A-Za-z0-9_]\)kIN:\1kIn:g
s:\([^A-Za-z0-9_]\)list_has_feature\([^A-Za-z0-9_]\|\$\):\1listHasFeature\2:g
s:\([^A-Za-z0-9_]\)log_write\([^A-Za-z0-9_]\|\$\):\1logWrite\2:g
s:\([^A-Za-z0-9_]\)log_write_time\([^A-Za-z0-9_]\|\$\):\1logWriteTime\2:g
s:\([^A-Za-z0-9_]\)make_constraints\([^A-Za-z0-9_]\|\$\):\1makeConstraints\2:g
s:\([^A-Za-z0-9_]\)make_empty\([^A-Za-z0-9_]\|\$\):\1makeEmpty\2:g
s:\([^A-Za-z0-9_]\)make_inst\([^A-Za-z0-9_]\|\$\):\1makeInst\2:g
s:\([^A-Za-z0-9_]\)mql_append_error\([^A-Za-z0-9_]\|\$\):\1appendError\2:g
s:\([^A-Za-z0-9_]\)mql_clear_error\([^A-Za-z0-9_]\|\$\):\1clearError\2:g
s:\([^A-Za-z0-9_]\)mql_execute_file\([^A-Za-z0-9_]\|\$\):\1mqlExecuteFile\2:g
s:\([^A-Za-z0-9_]\)mql_execute_stream\([^A-Za-z0-9_]\|\$\):\1mqlExecuteStream\2:g
s:\([^A-Za-z0-9_]\)mql_execute_string\([^A-Za-z0-9_]\|\$\):\1mqlExecuteString\2:g
s:\([^A-Za-z0-9_]\)mql_get_error\([^A-Za-z0-9_]\|\$\):\1getError\2:g
s:\([^A-Za-z0-9_]\)mql_prepend_error\([^A-Za-z0-9_]\|\$\):\1prependError\2:g
s:\([^A-Za-z0-9_]\)mql_set_error\([^A-Za-z0-9_]\|\$\):\1setError\2:g
s:\([^A-Za-z0-9_]\)object_type_info:\1ObjectTypeInfo:g
s:^object_type_info:ObjectTypeInfo:g
s:\([^A-Za-z0-9_]\)objects_at_Sm\([^A-Za-z0-9_]\|\$\):\1objectsAtSm\2:g
s:\([^A-Za-z0-9_]\)out_char_data\([^A-Za-z0-9_]\|\$\):\1outCharData\2:g
s:\([^A-Za-z0-9_]\)prepend_and_take_over\([^A-Za-z0-9_]\|\$\):\1prependAndTakeOver\2:g
s:\([^A-Za-z0-9_]\)prepend_with_me\([^A-Za-z0-9_]\|\$\):\1prependWithMe\2:g
s:\([^A-Za-z0-9_]\)print_DTD\([^A-Za-z0-9_]\|\$\):\1printDTD\2:g
s:\([^A-Za-z0-9_]\)print_DTD_end\([^A-Za-z0-9_]\|\$\):\1printDTDend\2:g
s:\([^A-Za-z0-9_]\)print_DTD_start\([^A-Za-z0-9_]\|\$\):\1printDTDstart\2:g
s:\([^A-Za-z0-9_]\)print_XMLDecl\([^A-Za-z0-9_]\|\$\):\1printXMLDecl\2:g
s:\([^A-Za-z0-9_]\)put_Console\([^A-Za-z0-9_]\|\$\):\1printConsole\2:g
s:\([^A-Za-z0-9_]\)put_XML\([^A-Za-z0-9_]\|\$\):\1printXML\2:g
s:\([^A-Za-z0-9_]\)remove_mo\([^A-Za-z0-9_]\|\$\):\1removeMo\2:g
s:\([^A-Za-z0-9_]\)retrieve_feature_values\([^A-Za-z0-9_]\|\$\):\1retrieveFeatureValues\2:g
s:\([^A-Za-z0-9_]\)set_Next\([^A-Za-z0-9_]\|\$\):\1setNext\2:g
s:\([^A-Za-z0-9_]\)set_content\([^A-Za-z0-9_]\|\$\):\1setContent\2:g
s:\([^A-Za-z0-9_]\)set_delete_result\([^A-Za-z0-9_]\|\$\):\1setDeleteResult\2:g
s:\([^A-Za-z0-9_]\)set_feature\([^A-Za-z0-9_]\|\$\):\1setFeature\2:g
s:\([^A-Za-z0-9_]\)set_features\([^A-Za-z0-9_]\|\$\):\1setFeatures\2:g
s:\([^A-Za-z0-9_]\)set_id_d\([^A-Za-z0-9_]\|\$\):\1setID_D\2:g
s:\([^A-Za-z0-9_]\)set_is_aggregate\([^A-Za-z0-9_]\|\$\):\1setIsAggregate\2:g
s:\([^A-Za-z0-9_]\)set_is_computed\([^A-Za-z0-9_]\|\$\):\1setIsComputed\2:g
s:\([^A-Za-z0-9_]\)set_is_default\([^A-Za-z0-9_]\|\$\):\1setIsDefault\2:g
s:\([^A-Za-z0-9_]\)set_new_default\([^A-Za-z0-9_]\|\$\):\1setNewDefault\2:g
s:\([^A-Za-z0-9_]\)set_object_reference_index\([^A-Za-z0-9_]\|\$\):\1setObjectReferenceIndex\2:g
s:\([^A-Za-z0-9_]\)set_success\([^A-Za-z0-9_]\|\$\):\1setSuccess\2:g
s:\([^A-Za-z0-9_]\)set_value\([^A-Za-z0-9_]\|\$\):\1setValue\2:g
s:\([^A-Za-z0-9_]\)sheaf_is_empty\([^A-Za-z0-9_]\|\$\):\1sheafIsEmpty\2:g
s:\([^A-Za-z0-9_]\)start_new_row\([^A-Za-z0-9_]\|\$\):\1startNewRow\2:g
s:\([^A-Za-z0-9_]\)start_single_tag\([^A-Za-z0-9_]\|\$\):\1startSingleTag\2:g
s:\([^A-Za-z0-9_]\)start_tag\([^A-Za-z0-9_]\|\$\):\1startTag\2:g
s:\([^A-Za-z0-9_]\)unencrypt_string\([^A-Za-z0-9_]\|\$\):\1unencryptString\2:g
s:\([^A-Za-z0-9_]\)union_with\([^A-Za-z0-9_]\|\$\):\1unionWith\2:g
s:\([^A-Za-z0-9_]\)update_last\([^A-Za-z0-9_]\|\$\):\1updateLast\2:g
s:\([^A-Za-z0-9_]\)update_row\([^A-Za-z0-9_]\|\$\):\1updateRow\2:g
s:\([^A-Za-z0-9_]\)update_value\([^A-Za-z0-9_]\|\$\):\1updateValue\2:g
s:\([^A-Za-z0-9_]\)zero_fill_string\([^A-Za-z0-9_]\|\$\):\1zeroFillString\2:g
s:\([^A-Za-z0-9_]\)feature_info:\1FeatureInfo:g
s:^feature_info:FeatureInfo:g
s:\([^A-Za-z0-9_]\)Type\([^A-Za-z0-9_]\|\$\):\1type\2:g
s:\([^A-Za-z0-9_]\)CType:\1MQLType:g
s:^CType:MQLType:g
s:\([^A-Za-z0-9_]\)Next\([^A-Za-z0-9_]\|\$\):\1getNext\2:g
s:\([^A-Za-z0-9_]\)Monads\([^A-Za-z0-9_]\|\$\):\1monads\2:g
s:\([^A-Za-z0-9_]\)ObjectTypeExists\([^A-Za-z0-9_]\|\$\):\1objectTypeExists\2:g






	
	  The two codebases were then compared, and they diff'ed equal
	  except for cosmetic differences and code differences in between.
	
	
	* Updated configure.in to work on the latest Debian sid.

2004-08-06  Ulrik Petersen

	* Updated files in the SWIG directories.  Specifically:

	  - SWIG/java/README-Java
	  - SWIG/java/Makefile.inc
	  - SWIG/java/TestEmdros.java.in
	  - SWIG/perl/test.pl.in
	  - SWIG/python/test.py
	  - SWIG/ruby/test.rb.in
	
	* Did some reconsideration of certain details of the big
	  namechange of 2004-07-17.  Thanks to Chris Wilson for comments.

	  The following sed script was applied to the sources:

s:\([^A-Za-z0-9_]\)ListOfMoNr\([^A-Za-z0-9_]\):\1ListOfMoNR\2:g
s:^ListOfMoNr:ListOfMoNR:g
s:\([^A-Za-z0-9_]\)getNr\([^A-Za-z0-9_]\):\1getNR\2:g
s:\([^A-Za-z0-9_]\)getMonad_msList\([^A-Za-z0-9_]\):\1getMonad_mList\2:g
s:\([^A-Za-z0-9_]\)getOTIndex\([^A-Za-z0-9_]\):\1getObjectTypeIndex\2:g
s:\([^A-Za-z0-9_]\)get_operator\([^A-Za-z0-9_]\):\1getSetOperator\2:g
s:\([^A-Za-z0-9_]\)Id_d_mo\([^A-Za-z0-9_]\):\1ID_D_mo\2:g
s:^Id_d_mo:ID_D_mo:g
s:\([^A-Za-z0-9_]\)Id_m_mo\([^A-Za-z0-9_]\):\1ID_M_mo\2:g
s:^Id_m_mo:ID_M_mo:g
s:\([^A-Za-z0-9_]\)getId_d\([^A-Za-z0-9_]\):\1getID_D\2:g
s:\([^A-Za-z0-9_]\)setId_d\([^A-Za-z0-9_]\):\1setID_D\2:g
s:\([^A-Za-z0-9_]\)EMdFOutputWrongCharactersetException\([^A-Za-z0-9_]\):\1WrongCharacterSetException\2:g
s:^EMdFOutputWrongCharactersetException:WrongCharacterSetException:g

	  Again, this was done with apply.sh, today.awk, and the command
	  as below (7/17-2004) (except for today's date in today.awk).
	
	  Afterwards, the sources just before the big namechange were
	  changed with this updated sed script, which YOU can use to
	  change your sources.

s:\([^A-Za-z0-9_]\)AbortTransaction\([^A-Za-z0-9_]\):\1abortTransaction\2:g
s:\([^A-Za-z0-9_]\)AccessTuple\([^A-Za-z0-9_]\):\1accessTuple\2:g
s:\([^A-Za-z0-9_]\)AddEMdFValue\([^A-Za-z0-9_]\):\1addEMdFValue\2:g
s:\([^A-Za-z0-9_]\)AddFeature\([^A-Za-z0-9_]\):\1addFeature\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_gut\([^A-Za-z0-9_]\):\1addFeatureToOT_gut\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_gut_or_objects\([^A-Za-z0-9_]\):\1addFeatureToOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_objects\([^A-Za-z0-9_]\):\1addFeatureToOT_objects\2:g
s:\([^A-Za-z0-9_]\)AddMSE\([^A-Za-z0-9_]\):\1addMSE\2:g
s:\([^A-Za-z0-9_]\)AddOid\([^A-Za-z0-9_]\):\1addOid\2:g
s:\([^A-Za-z0-9_]\)AggregateQuery\([^A-Za-z0-9_]\):\1aggregateQuery\2:g
s:\([^A-Za-z0-9_]\)BackendName\([^A-Za-z0-9_]\):\1getBackendName\2:g
s:\([^A-Za-z0-9_]\)BeginTransaction\([^A-Za-z0-9_]\):\1beginTransaction\2:g
s:\([^A-Za-z0-9_]\)CAbortTransactionStatement:\1AbortTransactionStatement:g
s:^CAbortTransactionStatement:AbortTransactionStatement:g
s:\([^A-Za-z0-9_]\)CArena:\1Arena:g
s:^CArena:Arena:g
s:\([^A-Za-z0-9_]\)CBeginTransactionStatement:\1BeginTransactionStatement:g
s:^CBeginTransactionStatement:BeginTransactionStatement:g
s:\([^A-Za-z0-9_]\)CBlock_string:\1BlockString:g
s:^CBlock_string:BlockString:g
s:\([^A-Za-z0-9_]\)CBlock_str:\1BlockStr:g
s:^CBlock_str:BlockStr:g
s:\([^A-Za-z0-9_]\)CBlocks:\1Blocks:g
s:^CBlocks:Blocks:g
s:\([^A-Za-z0-9_]\)CBlock:\1Block:g
s:^CBlock:Block:g
s:\([^A-Za-z0-9_]\)CByMonads:\1ByMonads:g
s:^CByMonads:ByMonads:g
s:\([^A-Za-z0-9_]\)CChunk:\1Chunk:g
s:^CChunk:Chunk:g
s:\([^A-Za-z0-9_]\)CCommitTransactionStatement:\1CommitTransactionStatement:g
s:^CCommitTransactionStatement:CommitTransactionStatement:g
s:\([^A-Za-z0-9_]\)CCreateDatabaseStatement:\1CreateDatabaseStatement:g
s:^CCreateDatabaseStatement:CreateDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CCreateEnumerationStatement:\1CreateEnumerationStatement:g
s:^CCreateEnumerationStatement:CreateEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CCreateIndexesStatement:\1CreateIndexesStatement:g
s:^CCreateIndexesStatement:CreateIndexesStatement:g
s:\([^A-Za-z0-9_]\)CCreateMonadSetStatement:\1CreateMonadSetStatement:g
s:^CCreateMonadSetStatement:CreateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromID_DsStatement:\1CreateObjectFromID_DsStatement:g
s:^CCreateObjectFromID_DsStatement:CreateObjectFromID_DsStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromMonadsStatement:\1CreateObjectFromMonadsStatement:g
s:^CCreateObjectFromMonadsStatement:CreateObjectFromMonadsStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromQueryStatement:\1CreateObjectFromQueryStatement:g
s:^CCreateObjectFromQueryStatement:CreateObjectFromQueryStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectStatement:\1CreateObjectStatement:g
s:^CCreateObjectStatement:CreateObjectStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectTypeStatement:\1CreateObjectTypeStatement:g
s:^CCreateObjectTypeStatement:CreateObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectsStatement:\1CreateObjectsStatement:g
s:^CCreateObjectsStatement:CreateObjectsStatement:g
s:\([^A-Za-z0-9_]\)CCreateOrUpdateMonadSetStatement:\1CreateOrUpdateMonadSetStatement:g
s:^CCreateOrUpdateMonadSetStatement:CreateOrUpdateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CCreateSegmentStatement:\1CreateSegmentStatement:g
s:^CCreateSegmentStatement:CreateSegmentStatement:g
s:\([^A-Za-z0-9_]\)CDatabaseStatement:\1DatabaseStatement:g
s:^CDatabaseStatement:DatabaseStatement:g
s:\([^A-Za-z0-9_]\)CDeleteMonadsStatement:\1DeleteMonadsStatement:g
s:^CDeleteMonadsStatement:DeleteMonadsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByID_DsStatement:\1DeleteObjectsByID_DsStatement:g
s:^CDeleteObjectsByID_DsStatement:DeleteObjectsByID_DsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByMonadsStatement:\1DeleteObjectsByMonadsStatement:g
s:^CDeleteObjectsByMonadsStatement:DeleteObjectsByMonadsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByQueryStatement:\1DeleteObjectsByQueryStatement:g
s:^CDeleteObjectsByQueryStatement:DeleteObjectsByQueryStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsStatement:\1DeleteObjectsStatement:g
s:^CDeleteObjectsStatement:DeleteObjectsStatement:g
s:\([^A-Za-z0-9_]\)CDropDatabaseStatement:\1DropDatabaseStatement:g
s:^CDropDatabaseStatement:DropDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CDropEnumerationStatement:\1DropEnumerationStatement:g
s:^CDropEnumerationStatement:DropEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CDropIndexesStatement:\1DropIndexesStatement:g
s:^CDropIndexesStatement:DropIndexesStatement:g
s:\([^A-Za-z0-9_]\)CDropMonadSetStatement:\1DropMonadSetStatement:g
s:^CDropMonadSetStatement:DropMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CDropObjectTypeStatement:\1DropObjectTypeStatement:g
s:^CDropObjectTypeStatement:DropObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CECDeclaration:\1ECDeclaration:g
s:^CECDeclaration:ECDeclaration:g
s:\([^A-Za-z0-9_]\)CECUpdate:\1ECUpdate:g
s:^CECUpdate:ECUpdate:g
s:\([^A-Za-z0-9_]\)CEMdFComparison:\1EMdFComparison:g
s:^CEMdFComparison:EMdFComparison:g
s:\([^A-Za-z0-9_]\)CEMdFDBDBError:\1EMdFDBDBError:g
s:^CEMdFDBDBError:EMdFDBDBError:g
s:\([^A-Za-z0-9_]\)CEMdFDBException:\1EMdFDBException:g
s:^CEMdFDBException:EMdFDBException:g
s:\([^A-Za-z0-9_]\)CEMdFFFactor:\1EMdFFFactor:g
s:^CEMdFFFactor:EMdFFFactor:g
s:\([^A-Za-z0-9_]\)CEMdFFFeatures:\1EMdFFFeatures:g
s:^CEMdFFFeatures:EMdFFFeatures:g
s:\([^A-Za-z0-9_]\)CEMdFFTerm:\1EMdFFTerm:g
s:^CEMdFFTerm:EMdFFTerm:g
s:\([^A-Za-z0-9_]\)CEMdFOutputException:\1EMdFOutputException:g
s:^CEMdFOutputException:EMdFOutputException:g
s:\([^A-Za-z0-9_]\)CEMdFOutput:\1EMdFOutput:g
s:^CEMdFOutput:EMdFOutput:g
s:\([^A-Za-z0-9_]\)CEMdFOutputWrongCharactersetException:\1WrongCharacterSetException:g
s:^CEMdFOutputWrongCharactersetException:WrongCharacterSetException:g
s:\([^A-Za-z0-9_]\)CEMdFValue:\1EMdFValue:g
s:^CEMdFValue:EMdFValue:g
s:\([^A-Za-z0-9_]\)CEmdrosEnv:\1EmdrosEnv:g
s:^CEmdrosEnv:EmdrosEnv:g
s:\([^A-Za-z0-9_]\)CEnumConstCache:\1EnumConstCache:g
s:^CEnumConstCache:EnumConstCache:g
s:\([^A-Za-z0-9_]\)CEnumerationStatement:\1EnumerationStatement:g
s:^CEnumerationStatement:EnumerationStatement:g
s:\([^A-Za-z0-9_]\)CExpression:\1Expression:g
s:^CExpression:Expression:g
s:\([^A-Za-z0-9_]\)CFFactor:\1FFactor:g
s:^CFFactor:FFactor:g
s:\([^A-Za-z0-9_]\)CFFeatures:\1FFeatures:g
s:^CFFeatures:FFeatures:g
s:\([^A-Za-z0-9_]\)CFTerm:\1FTerm:g
s:^CFTerm:FTerm:g
s:\([^A-Za-z0-9_]\)CFeatureAssignment:\1FeatureAssignment:g
s:^CFeatureAssignment:FeatureAssignment:g
s:\([^A-Za-z0-9_]\)CFeatureDeclaration:\1FeatureDeclaration:g
s:^CFeatureDeclaration:FeatureDeclaration:g
s:\([^A-Za-z0-9_]\)CFeatureUpdate:\1FeatureUpdate:g
s:^CFeatureUpdate:FeatureUpdate:g
s:\([^A-Za-z0-9_]\)CFeature_comparison:\1FeatureComparison:g
s:^CFeature_comparison:FeatureComparison:g
s:\([^A-Za-z0-9_]\)CFeature:\1Feature:g
s:^CFeature:Feature:g
s:\([^A-Za-z0-9_]\)CGap_block:\1GapBlock:g
s:^CGap_block:GapBlock:g
s:\([^A-Za-z0-9_]\)CGetFeaturesStatement:\1GetFeaturesStatement:g
s:^CGetFeaturesStatement:GetFeaturesStatement:g
s:\([^A-Za-z0-9_]\)CGetMonadSetsStatement:\1GetMonadSetsStatement:g
s:^CGetMonadSetsStatement:GetMonadSetsStatement:g
s:\([^A-Za-z0-9_]\)CGetMonadsStatement:\1GetMonadsStatement:g
s:^CGetMonadsStatement:GetMonadsStatement:g
s:\([^A-Za-z0-9_]\)CID_D:\1ID_D:g
s:^CID_D:ID_D:g
s:\([^A-Za-z0-9_]\)CInsertMonadsStatement:\1InsertMonadsStatement:g
s:^CInsertMonadsStatement:InsertMonadsStatement:g
s:\([^A-Za-z0-9_]\)CInstContents:\1InstContents:g
s:^CInstContents:InstContents:g
s:\([^A-Za-z0-9_]\)CInstObject:\1InstObject:g
s:^CInstObject:InstObject:g
s:\([^A-Za-z0-9_]\)CInst:\1Inst:g
s:^CInst:Inst:g
s:\([^A-Za-z0-9_]\)CList_of_mo_nr:\1ListOfMoNR:g
s:^CList_of_mo_nr:ListOfMoNR:g
s:\([^A-Za-z0-9_]\)CList_of_straws:\1ListOfStraws:g
s:^CList_of_straws:ListOfStraws:g
s:\([^A-Za-z0-9_]\)CMOEMPTY_mo:\1Empty_mo:g
s:^CMOEMPTY_mo:Empty_mo:g
s:\([^A-Za-z0-9_]\)CMOID_D:\1ID_D_mo:g
s:^CMOID_D:ID_D_mo:g
s:\([^A-Za-z0-9_]\)CMOID_M:\1ID_M_mo:g
s:^CMOID_M:ID_M_mo:g
s:\([^A-Za-z0-9_]\)CMONIL_mo:\1Nil_mo:g
s:^CMONIL_mo:Nil_mo:g
s:\([^A-Za-z0-9_]\)CMQLError:\1MQLError:g
s:^CMQLError:MQLError:g
s:\([^A-Za-z0-9_]\)CMQLObject:\1MQLObject:g
s:^CMQLObject:MQLObject:g
s:\([^A-Za-z0-9_]\)CMQLResult:\1MQLResult:g
s:^CMQLResult:MQLResult:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableEntry:\1MQLSymbolTableEntry:g
s:^CMQLSymbolTableEntry:MQLSymbolTableEntry:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableEntryException:\1MQLSymbolTableEntryException:g
s:^CMQLSymbolTableEntryException:MQLSymbolTableEntryException:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableException:\1MQLSymbolTableException:g
s:^CMQLSymbolTableException:MQLSymbolTableException:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTable:\1MQLSymbolTable:g
s:^CMQLSymbolTable:MQLSymbolTable:g
s:\([^A-Za-z0-9_]\)CMQL_execution_environment:\1MQLExecEnv:g
s:^CMQL_execution_environment:MQLExecEnv:g
s:\([^A-Za-z0-9_]\)CMatched_object:\1MatchedObject:g
s:^CMatched_object:MatchedObject:g
s:\([^A-Za-z0-9_]\)CMo_nr:\1MoNR:g
s:^CMo_nr:MoNR:g
s:\([^A-Za-z0-9_]\)CMonadSetCalculationStatement:\1MonadSetCalculationStatement:g
s:^CMonadSetCalculationStatement:MonadSetCalculationStatement:g
s:\([^A-Za-z0-9_]\)CMonadSetChainElement:\1MonadSetChainElement:g
s:^CMonadSetChainElement:MonadSetChainElement:g
s:\([^A-Za-z0-9_]\)CMonadSetElement:\1MQLMonadSetElement:g
s:^CMonadSetElement:MQLMonadSetElement:g
s:\([^A-Za-z0-9_]\)CMonadSetStatement:\1MonadSetStatement:g
s:^CMonadSetStatement:MonadSetStatement:g
s:\([^A-Za-z0-9_]\)CMonadsStatement:\1MonadsStatement:g
s:^CMonadsStatement:MonadsStatement:g
s:\([^A-Za-z0-9_]\)CObjectSpecBase:\1ObjectSpecBase:g
s:^CObjectSpecBase:ObjectSpecBase:g
s:\([^A-Za-z0-9_]\)CObjectSpecNoOT:\1ObjectSpecNoOT:g
s:^CObjectSpecNoOT:ObjectSpecNoOT:g
s:\([^A-Za-z0-9_]\)CObjectSpec:\1ObjectSpec:g
s:^CObjectSpec:ObjectSpec:g
s:\([^A-Za-z0-9_]\)CObjectTypeStatement:\1ObjectTypeStatement:g
s:^CObjectTypeStatement:ObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CObjectTypesStatement:\1ObjectTypesStatement:g
s:^CObjectTypesStatement:ObjectTypesStatement:g
s:\([^A-Za-z0-9_]\)CObject_block_common:\1ObjectBlockCommon:g
s:^CObject_block_common:ObjectBlockCommon:g
s:\([^A-Za-z0-9_]\)CObject_block_first:\1ObjectBlockFirst:g
s:^CObject_block_first:ObjectBlockFirst:g
s:\([^A-Za-z0-9_]\)CObject_block:\1ObjectBlock:g
s:^CObject_block:ObjectBlock:g
s:\([^A-Za-z0-9_]\)CObject_reference_usage:\1ObjectReferenceUsage:g
s:^CObject_reference_usage:ObjectReferenceUsage:g
s:\([^A-Za-z0-9_]\)COpt_gap_block:\1OptGapBlock:g
s:^COpt_gap_block:OptGapBlock:g
s:\([^A-Za-z0-9_]\)CPower:\1Power:g
s:^CPower:Power:g
s:\([^A-Za-z0-9_]\)CQueryBase:\1QueryBase:g
s:^CQueryBase:QueryBase:g
s:\([^A-Za-z0-9_]\)CQuitStatement:\1QuitStatement:g
s:^CQuitStatement:QuitStatement:g
s:\([^A-Za-z0-9_]\)CRest_of_block_str:\1RestOfBlockStr:g
s:^CRest_of_block_str:RestOfBlockStr:g
s:\([^A-Za-z0-9_]\)CSegmentStatement:\1SegmentStatement:g
s:^CSegmentStatement:SegmentStatement:g
s:\([^A-Za-z0-9_]\)CSelectEnumerationConstantsStatement:\1SelectEnumerationConstantsStatement:g
s:^CSelectEnumerationConstantsStatement:SelectEnumerationConstantsStatement:g
s:\([^A-Za-z0-9_]\)CSelectEnumerationsStatement:\1SelectEnumerationsStatement:g
s:^CSelectEnumerationsStatement:SelectEnumerationsStatement:g
s:\([^A-Za-z0-9_]\)CSelectFeaturesStatement:\1SelectFeaturesStatement:g
s:^CSelectFeaturesStatement:SelectFeaturesStatement:g
s:\([^A-Za-z0-9_]\)CSelectMaxMStatement:\1SelectMaxMStatement:g
s:^CSelectMaxMStatement:SelectMaxMStatement:g
s:\([^A-Za-z0-9_]\)CSelectMinMStatement:\1SelectMinMStatement:g
s:^CSelectMinMStatement:SelectMinMStatement:g
s:\([^A-Za-z0-9_]\)CSelectMonadSetsStatement:\1SelectMonadSetsStatement:g
s:^CSelectMonadSetsStatement:SelectMonadSetsStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectTypesStatement:\1SelectObjectTypesStatement:g
s:^CSelectObjectTypesStatement:SelectObjectTypesStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectTypesUsingEnumerationStatement:\1SelectObjectTypesUsingEnumerationStatement:g
s:^CSelectObjectTypesUsingEnumerationStatement:SelectObjectTypesUsingEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectsAtStatement:\1SelectObjectsAtStatement:g
s:^CSelectObjectsAtStatement:SelectObjectsAtStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectsHavingMonadsInStatement:\1SelectObjectsHavingMonadsInStatement:g
s:^CSelectObjectsHavingMonadsInStatement:SelectObjectsHavingMonadsInStatement:g
s:\([^A-Za-z0-9_]\)CSelectStatement:\1SelectStatement:g
s:^CSelectStatement:SelectStatement:g
s:\([^A-Za-z0-9_]\)CSet_of_monad_ms:\1SetOfMonads:g
s:^CSet_of_monad_ms:SetOfMonads:g
s:\([^A-Za-z0-9_]\)CSheaf:\1Sheaf:g
s:^CSheaf:Sheaf:g
s:\([^A-Za-z0-9_]\)CSkipListConstIterator:\1SkipListConstIterator:g
s:^CSkipListConstIterator:SkipListConstIterator:g
s:\([^A-Za-z0-9_]\)CSkipListNode:\1SkipListNode:g
s:^CSkipListNode:SkipListNode:g
s:\([^A-Za-z0-9_]\)CSkipList:\1SkipList:g
s:^CSkipList:SkipList:g
s:\([^A-Za-z0-9_]\)CSmartVector:\1SmartVector:g
s:^CSmartVector:SmartVector:g
s:\([^A-Za-z0-9_]\)CStatement:\1Statement:g
s:^CStatement:Statement:g
s:\([^A-Za-z0-9_]\)CStraw:\1Straw:g
s:^CStraw:Straw:g
s:\([^A-Za-z0-9_]\)CStringListNode:\1StringListNode:g
s:^CStringListNode:StringListNode:g
s:\([^A-Za-z0-9_]\)CStringList:\1StringList:g
s:^CStringList:StringList:g
s:\([^A-Za-z0-9_]\)CTable:\1Table:g
s:^CTable:Table:g
s:\([^A-Za-z0-9_]\)CTopograph:\1Topograph:g
s:^CTopograph:Topograph:g
s:\([^A-Za-z0-9_]\)CUpdateEnumerationStatement:\1UpdateEnumerationStatement:g
s:^CUpdateEnumerationStatement:UpdateEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CUpdateMonadSetStatement:\1UpdateMonadSetStatement:g
s:^CUpdateMonadSetStatement:UpdateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectTypeStatement:\1UpdateObjectTypeStatement:g
s:^CUpdateObjectTypeStatement:UpdateObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByID_DsStatement:\1UpdateObjectsByID_DsStatement:g
s:^CUpdateObjectsByID_DsStatement:UpdateObjectsByID_DsStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByMonadsStatement:\1UpdateObjectsByMonadsStatement:g
s:^CUpdateObjectsByMonadsStatement:UpdateObjectsByMonadsStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByQueryStatement:\1UpdateObjectsByQueryStatement:g
s:^CUpdateObjectsByQueryStatement:UpdateObjectsByQueryStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsStatement:\1UpdateObjectsStatement:g
s:^CUpdateObjectsStatement:UpdateObjectsStatement:g
s:\([^A-Za-z0-9_]\)CUseStatement:\1UseStatement:g
s:^CUseStatement:UseStatement:g
s:\([^A-Za-z0-9_]\)CVacuumDatabaseStatement:\1VacuumDatabaseStatement:g
s:^CVacuumDatabaseStatement:VacuumDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CValueTriple:\1ValueTriple:g
s:^CValueTriple:ValueTriple:g
s:\([^A-Za-z0-9_]\)CValue:\1Value:g
s:^CValue:Value:g
s:\([^A-Za-z0-9_]\)CalculateMMap\([^A-Za-z0-9_]\):\1calculateMMap\2:g
s:\([^A-Za-z0-9_]\)CanDoComparisonOp\([^A-Za-z0-9_]\):\1canDoComparisonOp\2:g
s:\([^A-Za-z0-9_]\)CommitTransaction\([^A-Za-z0-9_]\):\1commitTransaction\2:g
s:\([^A-Za-z0-9_]\)Connect\([^A-Za-z0-9_]\):\1connect\2:g
s:\([^A-Za-z0-9_]\)ConnectionOk\([^A-Za-z0-9_]\):\1connectionOk\2:g
s:\([^A-Za-z0-9_]\)ConvertDBName\([^A-Za-z0-9_]\):\1convertDBName\2:g
s:\([^A-Za-z0-9_]\)CreateConstants\([^A-Za-z0-9_]\):\1createConstants\2:g
s:\([^A-Za-z0-9_]\)CreateDatabase\([^A-Za-z0-9_]\):\1createDatabase\2:g
s:\([^A-Za-z0-9_]\)CreateEnum\([^A-Za-z0-9_]\):\1createEnum\2:g
s:\([^A-Za-z0-9_]\)CreateEnumConstant\([^A-Za-z0-9_]\):\1createEnumConstant\2:g
s:\([^A-Za-z0-9_]\)CreateFeature\([^A-Za-z0-9_]\):\1createFeature\2:g
s:\([^A-Za-z0-9_]\)CreateIndex\([^A-Za-z0-9_]\):\1createIndex\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnDatabase\([^A-Za-z0-9_]\):\1createIndicesOnDatabase\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTGut\([^A-Za-z0-9_]\):\1createIndicesOnOTGut\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTMonadMs\([^A-Za-z0-9_]\):\1createIndicesOnOTMonadMs\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTObjects\([^A-Za-z0-9_]\):\1createIndicesOnOTObjects\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnObjectType\([^A-Za-z0-9_]\):\1createIndicesOnObjectType\2:g
s:\([^A-Za-z0-9_]\)CreateMonadSet\([^A-Za-z0-9_]\):\1createMonadSet\2:g
s:\([^A-Za-z0-9_]\)CreateObject\([^A-Za-z0-9_]\):\1createObject\2:g
s:\([^A-Za-z0-9_]\)CreateObjectType\([^A-Za-z0-9_]\):\1createObjectType\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_gut\([^A-Za-z0-9_]\):\1createObjectTypeOT_gut\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_gut_or_objects\([^A-Za-z0-9_]\):\1createObjectTypeOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_objects\([^A-Za-z0-9_]\):\1createObjectTypeOT_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjects\([^A-Za-z0-9_]\):\1createObjects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsInBetweenData\([^A-Za-z0-9_]\):\1createObjectsInBetweenData\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut\([^A-Za-z0-9_]\):\1createObjectsOT_gut\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_DB\([^A-Za-z0-9_]\):\1createObjectsOT_gut_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_data\([^A-Za-z0-9_]\):\1createObjectsOT_gut_data\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_or_objects\([^A-Za-z0-9_]\):\1createObjectsOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_or_objects_DB\([^A-Za-z0-9_]\):\1createObjectsOT_gut_or_objects_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms\([^A-Za-z0-9_]\):\1createObjectsOT_monad_ms\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms_DB\([^A-Za-z0-9_]\):\1createObjectsOT_monad_ms_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms_data\([^A-Za-z0-9_]\):\1createObjectsOT_monad_ms_data\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects\([^A-Za-z0-9_]\):\1createObjectsOT_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects_DB\([^A-Za-z0-9_]\):\1createObjectsOT_objects_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects_data\([^A-Za-z0-9_]\):\1createObjectsOT_objects_data\2:g
s:\([^A-Za-z0-9_]\)CreateSchemaVersionTable\([^A-Za-z0-9_]\):\1createSchemaVersionTable\2:g
s:\([^A-Za-z0-9_]\)CreateSegment\([^A-Za-z0-9_]\):\1createSegment\2:g
s:\([^A-Za-z0-9_]\)CreateSequenceTables110\([^A-Za-z0-9_]\):\1createSequenceTables110\2:g
s:\([^A-Za-z0-9_]\)CreateSequenceTables118\([^A-Za-z0-9_]\):\1createSequenceTables118\2:g
s:\([^A-Za-z0-9_]\)Create_min_max_m_table\([^A-Za-z0-9_]\):\1createMin_max_m_table\2:g
s:\([^A-Za-z0-9_]\)DBIsInitialized\([^A-Za-z0-9_]\):\1dbIsInitialized\2:g
s:\([^A-Za-z0-9_]\)DatabaseNameIsOK\([^A-Za-z0-9_]\):\1databaseNameIsOK\2:g
s:\([^A-Za-z0-9_]\)DeleteDatabase\([^A-Za-z0-9_]\):\1deleteDatabase\2:g
s:\([^A-Za-z0-9_]\)DeleteMonads\([^A-Za-z0-9_]\):\1deleteMonads\2:g
s:\([^A-Za-z0-9_]\)DeleteRedundantSequenceInfo\([^A-Za-z0-9_]\):\1deleteRedundantSequenceInfo\2:g
s:\([^A-Za-z0-9_]\)DropDatabase\([^A-Za-z0-9_]\):\1dropDatabase\2:g
s:\([^A-Za-z0-9_]\)DropEnum\([^A-Za-z0-9_]\):\1dropEnum\2:g
s:\([^A-Za-z0-9_]\)DropEnumConst\([^A-Za-z0-9_]\):\1dropEnumConst\2:g
s:\([^A-Za-z0-9_]\)DropFeature\([^A-Za-z0-9_]\):\1dropFeature\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_gut\([^A-Za-z0-9_]\):\1dropFeatureFromOT_gut\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_gut_or_objects\([^A-Za-z0-9_]\):\1dropFeatureFromOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_objects\([^A-Za-z0-9_]\):\1dropFeatureFromOT_objects\2:g
s:\([^A-Za-z0-9_]\)DropIndex\([^A-Za-z0-9_]\):\1dropIndex\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnDatabase\([^A-Za-z0-9_]\):\1dropIndicesOnDatabase\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTGut\([^A-Za-z0-9_]\):\1dropIndicesOnOTGut\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTMonadMs\([^A-Za-z0-9_]\):\1dropIndicesOnOTMonadMs\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTObjects\([^A-Za-z0-9_]\):\1dropIndicesOnOTObjects\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnObjectType\([^A-Za-z0-9_]\):\1dropIndicesOnObjectType\2:g
s:\([^A-Za-z0-9_]\)DropMonadSet\([^A-Za-z0-9_]\):\1dropMonadSet\2:g
s:\([^A-Za-z0-9_]\)DropObject\([^A-Za-z0-9_]\):\1dropObject\2:g
s:\([^A-Za-z0-9_]\)DropObjectType\([^A-Za-z0-9_]\):\1dropObjectType\2:g
s:\([^A-Za-z0-9_]\)DropObjectsInMonads\([^A-Za-z0-9_]\):\1dropObjectsInMonads\2:g
s:\([^A-Za-z0-9_]\)EnumConstExists\([^A-Za-z0-9_]\):\1enumConstExists\2:g
s:\([^A-Za-z0-9_]\)EnumExists\([^A-Za-z0-9_]\):\1enumExists\2:g
s:\([^A-Za-z0-9_]\)ErrorMessage\([^A-Za-z0-9_]\):\1errorMessage\2:g
s:\([^A-Za-z0-9_]\)EscapeStringForSQL\([^A-Za-z0-9_]\):\1escapeStringForSQL\2:g
s:\([^A-Za-z0-9_]\)ExecAdd\([^A-Za-z0-9_]\):\1execAdd\2:g
s:\([^A-Za-z0-9_]\)ExecAddUpdateRemove\([^A-Za-z0-9_]\):\1execAddUpdateRemove\2:g
s:\([^A-Za-z0-9_]\)ExecCOPY\([^A-Za-z0-9_]\):\1execCOPY\2:g
s:\([^A-Za-z0-9_]\)ExecCommand\([^A-Za-z0-9_]\):\1execCommand\2:g
s:\([^A-Za-z0-9_]\)ExecMakeFeatureArray\([^A-Za-z0-9_]\):\1execMakeFeatureArray\2:g
s:\([^A-Za-z0-9_]\)ExecMakeFeatureList\([^A-Za-z0-9_]\):\1execMakeFeatureList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeList\([^A-Za-z0-9_]\):\1execMakeList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeNameList\([^A-Za-z0-9_]\):\1execMakeNameList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeSOM\([^A-Za-z0-9_]\):\1execMakeSOM\2:g
s:\([^A-Za-z0-9_]\)ExecOneType\([^A-Za-z0-9_]\):\1execOneType\2:g
s:\([^A-Za-z0-9_]\)ExecSelect\([^A-Za-z0-9_]\):\1execSelect\2:g
s:\([^A-Za-z0-9_]\)FeatureExists\([^A-Za-z0-9_]\):\1featureExists\2:g
s:\([^A-Za-z0-9_]\)Finalize\([^A-Za-z0-9_]\):\1finalize\2:g
s:\([^A-Za-z0-9_]\)GetComputedFeature\([^A-Za-z0-9_]\):\1getComputedFeature\2:g
s:\([^A-Za-z0-9_]\)GetComputedFeatures\([^A-Za-z0-9_]\):\1getComputedFeatures\2:g
s:\([^A-Za-z0-9_]\)GetCurrentDatabaseVersion\([^A-Za-z0-9_]\):\1getCurrentDatabaseVersion\2:g
s:\([^A-Za-z0-9_]\)GetDefault\([^A-Za-z0-9_]\):\1getDefault\2:g
s:\([^A-Za-z0-9_]\)GetEMdFComparison\([^A-Za-z0-9_]\):\1getEMdFComparison\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFFactor\([^A-Za-z0-9_]\):\1getEMdFFFactor\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFFeatures\([^A-Za-z0-9_]\):\1getEMdFFFeatures\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFTerm\([^A-Za-z0-9_]\):\1getEMdFFTerm\2:g
s:\([^A-Za-z0-9_]\)GetEVkindFromTypeID_D\([^A-Za-z0-9_]\):\1getEVkindFromTypeID_D\2:g
s:\([^A-Za-z0-9_]\)GetEnumConstNameFromValue\([^A-Za-z0-9_]\):\1getEnumConstNameFromValue\2:g
s:\([^A-Za-z0-9_]\)GetEnumConstants\([^A-Za-z0-9_]\):\1getEnumConstants\2:g
s:\([^A-Za-z0-9_]\)GetEnumerations\([^A-Za-z0-9_]\):\1getEnumerations\2:g
s:\([^A-Za-z0-9_]\)GetFeatures\([^A-Za-z0-9_]\):\1getFeatures\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesByQuery\([^A-Za-z0-9_]\):\1getFeaturesByQuery\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesByQueryExec\([^A-Za-z0-9_]\):\1getFeaturesByQueryExec\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesForObjectType\([^A-Za-z0-9_]\):\1getFeaturesForObjectType\2:g
s:\([^A-Za-z0-9_]\)GetInst\([^A-Za-z0-9_]\):\1getInst\2:g
s:\([^A-Za-z0-9_]\)GetLastInsertRowID\([^A-Za-z0-9_]\):\1getLastInsertRowID\2:g
s:\([^A-Za-z0-9_]\)GetMonadsFromID_D\([^A-Za-z0-9_]\):\1getMonadsFromID_D\2:g
s:\([^A-Za-z0-9_]\)GetMonadsFromID_Ds\([^A-Za-z0-9_]\):\1getMonadsFromID_Ds\2:g
s:\([^A-Za-z0-9_]\)GetNextID\([^A-Za-z0-9_]\):\1getNextID\2:g
s:\([^A-Za-z0-9_]\)GetNextObjectID_D\([^A-Za-z0-9_]\):\1getNextObjectID_D\2:g
s:\([^A-Za-z0-9_]\)GetNextOtherID\([^A-Za-z0-9_]\):\1getNextOtherID\2:g
s:\([^A-Za-z0-9_]\)GetNextTuple\([^A-Za-z0-9_]\):\1getNextTuple\2:g
s:\([^A-Za-z0-9_]\)GetOTGutOrObjects\([^A-Za-z0-9_]\):\1getOTGutOrObjects\2:g
s:\([^A-Za-z0-9_]\)GetOTHasSingleRangeObjects\([^A-Za-z0-9_]\):\1getOTHasSingleRangeObjects\2:g
s:\([^A-Za-z0-9_]\)GetObjectTypes\([^A-Za-z0-9_]\):\1getObjectTypes\2:g
s:\([^A-Za-z0-9_]\)GetObjectTypesUsingEnumeration\([^A-Za-z0-9_]\):\1getObjectTypesUsingEnumeration\2:g
s:\([^A-Za-z0-9_]\)GetObjectsAtM\([^A-Za-z0-9_]\):\1getObjectsAtM\2:g
s:\([^A-Za-z0-9_]\)GetObjectsByMonads\([^A-Za-z0-9_]\):\1getObjectsByMonads\2:g
s:\([^A-Za-z0-9_]\)GetObjectsHavingMonadsInMonadSet\([^A-Za-z0-9_]\):\1getObjectsHavingMonadsInMonadSet\2:g
s:\([^A-Za-z0-9_]\)GetObjectsStartingAtSm\([^A-Za-z0-9_]\):\1getObjectsStartingAtSm\2:g
s:\([^A-Za-z0-9_]\)GetObjectsWithinMonads\([^A-Za-z0-9_]\):\1getObjectsWithinMonads\2:g
s:\([^A-Za-z0-9_]\)GetSOMForObject\([^A-Za-z0-9_]\):\1getSOMForObject\2:g
s:\([^A-Za-z0-9_]\)GetSchemaVersion\([^A-Za-z0-9_]\):\1getSchemaVersion\2:g
s:\([^A-Za-z0-9_]\)Get_all_m_1\([^A-Za-z0-9_]\):\1getAll_m_1\2:g
s:\([^A-Za-z0-9_]\)Get_max_m\([^A-Za-z0-9_]\):\1getMax_m\2:g
s:\([^A-Za-z0-9_]\)Get_min_m\([^A-Za-z0-9_]\):\1getMin_m\2:g
s:\([^A-Za-z0-9_]\)HasFirstLast\([^A-Za-z0-9_]\):\1hasFirstLast\2:g
s:\([^A-Za-z0-9_]\)HasRow\([^A-Za-z0-9_]\):\1hasRow\2:g
s:\([^A-Za-z0-9_]\)Hat\([^A-Za-z0-9_]\):\1hat\2:g
s:\([^A-Za-z0-9_]\)InsertMonads\([^A-Za-z0-9_]\):\1insertMonads\2:g
s:\([^A-Za-z0-9_]\)Join\([^A-Za-z0-9_]\):\1join\2:g
s:\([^A-Za-z0-9_]\)JoinTakeOver\([^A-Za-z0-9_]\):\1joinAndTakeOver\2:g
s:\([^A-Za-z0-9_]\)LoadEnumConstantsIntoCache\([^A-Za-z0-9_]\):\1loadEnumConstantsIntoCache\2:g
s:\([^A-Za-z0-9_]\)MakeFeatureSQLType\([^A-Za-z0-9_]\):\1makeFeatureSQLType\2:g
s:\([^A-Za-z0-9_]\)MakeMonadConstraintsFromSOM\([^A-Za-z0-9_]\):\1makeMonadConstraintsFromSOM\2:g
s:\([^A-Za-z0-9_]\)MayCOPY\([^A-Za-z0-9_]\):\1mayCOPY\2:g
s:\([^A-Za-z0-9_]\)MonadSetExists\([^A-Za-z0-9_]\):\1monadSetExists\2:g
s:\([^A-Za-z0-9_]\)Monad_Set_Element:\1MonadSetElement:g
s:\([^A-Za-z0-9_]\)MonadsBuildSet\([^A-Za-z0-9_]\):\1monadsBuildSet\2:g
s:\([^A-Za-z0-9_]\)MoveSequenceValue110\([^A-Za-z0-9_]\):\1moveSequenceValue110\2:g
s:\([^A-Za-z0-9_]\)MoveSequenceValue118\([^A-Za-z0-9_]\):\1moveSequenceValue118\2:g
s:\([^A-Za-z0-9_]\)MyExec\([^A-Za-z0-9_]\):\1myExec\2:g
s:\([^A-Za-z0-9_]\)Exec\([^A-Za-z0-9_]\):\1exec\2:g
s:\([^A-Za-z0-9_]\)MyMonads\([^A-Za-z0-9_]\):\1myMonads\2:g
s:\([^A-Za-z0-9_]\)MySymbol\([^A-Za-z0-9_]\):\1mySymbol\2:g
s:\([^A-Za-z0-9_]\)MyType\([^A-Za-z0-9_]\):\1myType\2:g
s:\([^A-Za-z0-9_]\)MyWeed\([^A-Za-z0-9_]\):\1myWeed\2:g
s:\([^A-Za-z0-9_]\)NoOfFields\([^A-Za-z0-9_]\):\1getNoOfFields\2:g
s:\([^A-Za-z0-9_]\)NoOfResultTuples\([^A-Za-z0-9_]\):\1noOfResultTuples\2:g
s:\([^A-Za-z0-9_]\)NormalizeOTName\([^A-Za-z0-9_]\):\1normalizeOTName\2:g
s:\([^A-Za-z0-9_]\)ObjectID_DExists\([^A-Za-z0-9_]\):\1objectID_DExists\2:g
s:\([^A-Za-z0-9_]\)ObjectID_DExistsInType\([^A-Za-z0-9_]\):\1objectID_DExistsInType\2:g
s:\([^A-Za-z0-9_]\)Print\([^A-Za-z0-9_]\):\1out\2:g
s:\([^A-Za-z0-9_]\)PrintConsole\([^A-Za-z0-9_]\):\1printConsole\2:g
s:\([^A-Za-z0-9_]\)PrintXML\([^A-Za-z0-9_]\):\1printXML\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Header\([^A-Za-z0-9_]\):\1printXMLHeader\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Row\([^A-Za-z0-9_]\):\1printXMLRow\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Rows\([^A-Za-z0-9_]\):\1printXMLRows\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CMQLResult\([^A-Za-z0-9_]\):\1printDTDMQLResult\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CSheaf\([^A-Za-z0-9_]\):\1printDTDSheaf\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CTable\([^A-Za-z0-9_]\):\1printDTDTable\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_end\([^A-Za-z0-9_]\):\1printDTDEnd\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_start\([^A-Za-z0-9_]\):\1printDTDStart\2:g
s:\([^A-Za-z0-9_]\)Print_XMLDecl\([^A-Za-z0-9_]\):\1printXMLDecl\2:g
s:\([^A-Za-z0-9_]\)RemoveMSE\([^A-Za-z0-9_]\):\1removeMSE\2:g
s:\([^A-Za-z0-9_]\)Restrict\([^A-Za-z0-9_]\):\1restrict\2:g
s:\([^A-Za-z0-9_]\)SelectMonadSets\([^A-Za-z0-9_]\):\1selectMonadSets\2:g
s:\([^A-Za-z0-9_]\)SetDefaultEnumConst\([^A-Za-z0-9_]\):\1setDefaultEnumConst\2:g
s:\([^A-Za-z0-9_]\)SetNextObjectID_DIfNotHigher\([^A-Za-z0-9_]\):\1setNextObjectID_DIfNotHigher\2:g
s:\([^A-Za-z0-9_]\)SetSchemaVersion\([^A-Za-z0-9_]\):\1setSchemaVersion\2:g
s:\([^A-Za-z0-9_]\)Set_max_m\([^A-Za-z0-9_]\):\1setMax_m\2:g
s:\([^A-Za-z0-9_]\)Set_min_m\([^A-Za-z0-9_]\):\1setMin_m\2:g
s:\([^A-Za-z0-9_]\)Set_min_max_m_from_object_type\([^A-Za-z0-9_]\):\1setMin_max_m_fromObjectType\2:g
s:\([^A-Za-z0-9_]\)Set_min_max_m_from_object_types\([^A-Za-z0-9_]\):\1setMin_max_m_fromObjectTypes\2:g
s:\([^A-Za-z0-9_]\)ShutdownConnection\([^A-Za-z0-9_]\):\1shutdownConnection\2:g
s:\([^A-Za-z0-9_]\)Symbol\([^A-Za-z0-9_]\):\1symbol\2:g
s:\([^A-Za-z0-9_]\)SymbolAddFeatures\([^A-Za-z0-9_]\):\1symbolAddFeatures\2:g
s:\([^A-Za-z0-9_]\)SymbolAddToObject\([^A-Za-z0-9_]\):\1symbolAddToObject\2:g
s:\([^A-Za-z0-9_]\)SymbolAllAreOfSameType\([^A-Za-z0-9_]\):\1symbolAllAreOfSameType\2:g
s:\([^A-Za-z0-9_]\)SymbolAllFeaturesMustBeAssigned\([^A-Za-z0-9_]\):\1symbolAllFeaturesMustBeAssigned\2:g
s:\([^A-Za-z0-9_]\)SymbolAllFeaturesMustExist\([^A-Za-z0-9_]\):\1symbolAllFeaturesMustExist\2:g
s:\([^A-Za-z0-9_]\)SymbolAssignValues\([^A-Za-z0-9_]\):\1symbolAssignValues\2:g
s:\([^A-Za-z0-9_]\)SymbolAssignValuesPrivate\([^A-Za-z0-9_]\):\1symbolAssignValuesPrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolCheckNoTwoValuesSamePrivate\([^A-Za-z0-9_]\):\1symbolCheckNoTwoValuesSamePrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolConstantExistence\([^A-Za-z0-9_]\):\1symbolExistenceOfConstants\2:g
s:\([^A-Za-z0-9_]\)SymbolDefaultIsRemoved\([^A-Za-z0-9_]\):\1symbolDefaultIsRemoved\2:g
s:\([^A-Za-z0-9_]\)SymbolDoLocalUpdatePrivate\([^A-Za-z0-9_]\):\1symbolDoLocalUpdatePrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumConstantsExist\([^A-Za-z0-9_]\):\1symbolEnumConstantsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerationExists\([^A-Za-z0-9_]\):\1symbolEnumerationExists\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerations\([^A-Za-z0-9_]\):\1symbolEnumerations\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerationsExist\([^A-Za-z0-9_]\):\1symbolEnumerationsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolExistenceOfConstants\([^A-Za-z0-9_]\):\1symbolExistenceOfConstants\2:g
s:\([^A-Za-z0-9_]\)SymbolExistenceOfFeatures\([^A-Za-z0-9_]\):\1symbolExistenceOfFeatures\2:g
s:\([^A-Za-z0-9_]\)SymbolFeaturesExist\([^A-Za-z0-9_]\):\1symbolFeaturesExist\2:g
s:\([^A-Za-z0-9_]\)SymbolFeaturesMustNotExist\([^A-Za-z0-9_]\):\1symbolFeaturesMustNotExist\2:g
s:\([^A-Za-z0-9_]\)SymbolNoFeatureMayBeComputed\([^A-Za-z0-9_]\):\1symbolNoFeatureMayBeComputed\2:g
s:\([^A-Za-z0-9_]\)SymbolNoTwoValuesSame\([^A-Za-z0-9_]\):\1symbolNoTwoValuesSame\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectTypeExists\([^A-Za-z0-9_]\):\1symbolObjectTypeExists\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectsExist\([^A-Za-z0-9_]\):\1symbolObjectsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectsExistInType\([^A-Za-z0-9_]\):\1symbolObjectsExistInType\2:g
s:\([^A-Za-z0-9_]\)SymbolValueMoreThanOnce\([^A-Za-z0-9_]\):\1symbolValueMoreThanOnce\2:g
s:\([^A-Za-z0-9_]\)SymbolValueMoreThanOncePrivate\([^A-Za-z0-9_]\):\1symbolValueMoreThanOncePrivate\2:g
s:\([^A-Za-z0-9_]\)TableExists\([^A-Za-z0-9_]\):\1tableExists\2:g
s:\([^A-Za-z0-9_]\)ToString\([^A-Za-z0-9_]\):\1toString\2:g
s:\([^A-Za-z0-9_]\)TypeAssignTypeID\([^A-Za-z0-9_]\):\1typeAssignTypeID\2:g
s:\([^A-Za-z0-9_]\)TypeAssignTypes\([^A-Za-z0-9_]\):\1typeAssignTypes\2:g
s:\([^A-Za-z0-9_]\)TypeFeatureName\([^A-Za-z0-9_]\):\1typeFeatureName\2:g
s:\([^A-Za-z0-9_]\)Type_id_to_string\([^A-Za-z0-9_]\):\1ypeIdToString\2:g
s:\([^A-Za-z0-9_]\)Type_id_to_TableColumnType\([^A-Za-z0-9_]\):\1typeIdToTableColumnType\2:
s:\([^A-Za-z0-9_]\)TypeTypeCompatibility\([^A-Za-z0-9_]\):\1typeTypeCompatibility\2:g
s:\([^A-Za-z0-9_]\)UpdateEnumConst\([^A-Za-z0-9_]\):\1updateEnumConst\2:g
s:\([^A-Za-z0-9_]\)UpdateObject\([^A-Za-z0-9_]\):\1updateObject\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabase\([^A-Za-z0-9_]\):\1upgradeDatabase\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo110\([^A-Za-z0-9_]\):\1upgradeDatabaseTo110\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo115\([^A-Za-z0-9_]\):\1upgradeDatabaseTo115\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo118\([^A-Za-z0-9_]\):\1upgradeDatabaseTo118\2:g
s:\([^A-Za-z0-9_]\)UpgradeObjectTypeTo110\([^A-Za-z0-9_]\):\1upgradeObjectTypeTo110\2:g
s:\([^A-Za-z0-9_]\)UseDatabase\([^A-Za-z0-9_]\):\1useDatabase\2:g
s:\([^A-Za-z0-9_]\)Vacuum\([^A-Za-z0-9_]\):\1vacuum\2:g
s:\([^A-Za-z0-9_]\)VacuumObjectType\([^A-Za-z0-9_]\):\1vacuumObjectType\2:g
s:\([^A-Za-z0-9_]\)Weed\([^A-Za-z0-9_]\):\1weed\2:g
s:\([^A-Za-z0-9_]\)WeedDefault\([^A-Za-z0-9_]\):\1weedDefault\2:g
s:\([^A-Za-z0-9_]\)WeedDefaultPrivate\([^A-Za-z0-9_]\):\1weedDefaultPrivate\2:g
s:\([^A-Za-z0-9_]\)WeedFirstLast\([^A-Za-z0-9_]\):\1weedFirstLast\2:g
s:\([^A-Za-z0-9_]\)WeedGET\([^A-Za-z0-9_]\):\1weedGET\2:g
s:\([^A-Za-z0-9_]\)WeedMonotonic\([^A-Za-z0-9_]\):\1weedMonotonic\2:g
s:\([^A-Za-z0-9_]\)WeedNoneIsNIL\([^A-Za-z0-9_]\):\1weedNoneIsNIL\2:g
s:\([^A-Za-z0-9_]\)WeedObjectTypeNameNotSpecial\([^A-Za-z0-9_]\):\1weedObjectTypeNameNotSpecial\2:g
s:\([^A-Za-z0-9_]\)WeedPositive\([^A-Za-z0-9_]\):\1weedPositive\2:g
s:\([^A-Za-z0-9_]\)WeedSelfNotAssigned\([^A-Za-z0-9_]\):\1weedSelfNotAssigned\2:g
s:\([^A-Za-z0-9_]\)WeedSelfNotDeclared\([^A-Za-z0-9_]\):\1weedSelfNotDeclared\2:g
s:\([^A-Za-z0-9_]\)WeedTildeOperator\([^A-Za-z0-9_]\):\1weedTildeOperator\2:g
s:\([^A-Za-z0-9_]\)add_EMdFValue\([^A-Za-z0-9_]\):\1addEMdFValue\2:g
s:\([^A-Za-z0-9_]\)add_eci\([^A-Za-z0-9_]\):\1addEci\2:g
s:\([^A-Za-z0-9_]\)add_enum\([^A-Za-z0-9_]\):\1addEnum\2:g
s:\([^A-Za-z0-9_]\)add_enum_const_to_cache\([^A-Za-z0-9_]\):\1addEnumConstToCache\2:g
s:\([^A-Za-z0-9_]\)add_enum_to_cache\([^A-Za-z0-9_]\):\1addEnumToCache\2:g
s:\([^A-Za-z0-9_]\)add_feature\([^A-Za-z0-9_]\):\1addFeature\2:g
s:\([^A-Za-z0-9_]\)add_feature_to_cache\([^A-Za-z0-9_]\):\1addFeatureToCache\2:g
s:\([^A-Za-z0-9_]\)add_feature_to_cache_if_not_already_there\([^A-Za-z0-9_]\):\1addFeatureToCacheIfNotAlreadyThere\2:g
s:\([^A-Za-z0-9_]\)add_mse\([^A-Za-z0-9_]\):\1addMse\2:g
s:\([^A-Za-z0-9_]\)add_object\([^A-Za-z0-9_]\):\1addObject\2:g
s:\([^A-Za-z0-9_]\)add_object_type_to_cache\([^A-Za-z0-9_]\):\1addObjectTypeToCache\2:g
s:\([^A-Za-z0-9_]\)add_stringlist_nodes\([^A-Za-z0-9_]\):\1addStringListNodes\2:g
s:\([^A-Za-z0-9_]\)add_value\([^A-Za-z0-9_]\):\1addValue\2:g
s:\([^A-Za-z0-9_]\)append_and_subsume\([^A-Za-z0-9_]\):\1appendAndSubsume\2:g
s:\([^A-Za-z0-9_]\)append_header\([^A-Za-z0-9_]\):\1appendHeader\2:g
s:\([^A-Za-z0-9_]\)append_local_error\([^A-Za-z0-9_]\):\1appendLocalError\2:g
s:\([^A-Za-z0-9_]\)big_union\([^A-Za-z0-9_]\):\1bigUnion\2:g
s:\([^A-Za-z0-9_]\)calculate_characteristic_string\([^A-Za-z0-9_]\):\1calculateCharacteristicString\2:g
s:\([^A-Za-z0-9_]\)calculate_pre_query_string\([^A-Za-z0-9_]\):\1calculatePreQueryString\2:g
s:\([^A-Za-z0-9_]\)clear_errors\([^A-Za-z0-9_]\):\1clearErrors\2:g
s:\([^A-Za-z0-9_]\)clear_local_error\([^A-Za-z0-9_]\):\1clearLocalError\2:g
s:\([^A-Za-z0-9_]\)compare_int\([^A-Za-z0-9_]\):\1compareInt\2:g
s:\([^A-Za-z0-9_]\)compare_string\([^A-Za-z0-9_]\):\1compareString\2:g
s:\([^A-Za-z0-9_]\)copy_MO\([^A-Za-z0-9_]\):\1copyMO\2:g
s:\([^A-Za-z0-9_]\)copy_other\([^A-Za-z0-9_]\):\1copyOther\2:g
s:\([^A-Za-z0-9_]\)create_headers\([^A-Za-z0-9_]\):\1createHeaders\2:g
s:\([^A-Za-z0-9_]\)decode_feature_name\([^A-Za-z0-9_]\):\1decodeFeatureName\2:g
s:\([^A-Za-z0-9_]\)decrease_indent\([^A-Za-z0-9_]\):\1decreaseIndent\2:g
s:\([^A-Za-z0-9_]\)delete_contents\([^A-Za-z0-9_]\):\1deleteContents\2:g
s:\([^A-Za-z0-9_]\)delete_mos\([^A-Za-z0-9_]\):\1deleteMos\2:g
s:\([^A-Za-z0-9_]\)delete_object_type_from_cache\([^A-Za-z0-9_]\):\1deleteObjectTypeFromCache\2:g
s:\([^A-Za-z0-9_]\)delete_straws\([^A-Za-z0-9_]\):\1deleteStraws\2:g
s:\([^A-Za-z0-9_]\)dump_results\([^A-Za-z0-9_]\):\1dumpResults\2:g
s:\([^A-Za-z0-9_]\)dump_results_all\([^A-Za-z0-9_]\):\1dumpResultsAll\2:g
s:\([^A-Za-z0-9_]\)emit_attributes\([^A-Za-z0-9_]\):\1emitAttributes\2:g
s:\([^A-Za-z0-9_]\)emit_horizontal_line\([^A-Za-z0-9_]\):\1emitHorizontalLine\2:g
s:\([^A-Za-z0-9_]\)encode_feature_name\([^A-Za-z0-9_]\):\1encodeFeatureName\2:g
s:\([^A-Za-z0-9_]\)encode_feature_name_for_prequery_string\([^A-Za-z0-9_]\):\1encodeFeatureNameForPrequeryString\2:g
s:\([^A-Za-z0-9_]\)encrypt_string\([^A-Za-z0-9_]\):\1encryptString\2:g
s:\([^A-Za-z0-9_]\)end_tag\([^A-Za-z0-9_]\):\1endTag\2:g
s:\([^A-Za-z0-9_]\)enum_const_info:\1EnumConstInfo:g
s:^enum_const_info:EnumConstInfo:g
s:\([^A-Za-z0-9_]\)execute_file\([^A-Za-z0-9_]\):\1executeFile\2:g
s:\([^A-Za-z0-9_]\)execute_stream\([^A-Za-z0-9_]\):\1executeStream\2:g
s:\([^A-Za-z0-9_]\)execute_string\([^A-Za-z0-9_]\):\1executeString\2:g
s:\([^A-Za-z0-9_]\)extend_with_me\([^A-Za-z0-9_]\):\1extendWithMe\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_ASCII\([^A-Za-z0-9_]\):\1featureTypeIdIsASCII\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_ENUM\([^A-Za-z0-9_]\):\1featureTypeIdIsENUM\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_STRING\([^A-Za-z0-9_]\):\1featureTypeIdIsSTRING\2:g
s:\([^A-Za-z0-9_]\)fill_gaps\([^A-Za-z0-9_]\):\1fillGaps\2:g
s:\([^A-Za-z0-9_]\)gap_exists\([^A-Za-z0-9_]\):\1gapExists\2:g
s:\([^A-Za-z0-9_]\)get_DB_error\([^A-Za-z0-9_]\):\1getDBError\2:g
s:\([^A-Za-z0-9_]\)get_EMdFValue\([^A-Za-z0-9_]\):\1getEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_EMdFValue_index\([^A-Za-z0-9_]\):\1getEMdFValueIndex\2:g
s:\([^A-Za-z0-9_]\)get_Enumeration\([^A-Za-z0-9_]\):\1getEnumeration\2:g
s:\([^A-Za-z0-9_]\)get_Next\([^A-Za-z0-9_]\):\1getNext\2:g
s:\([^A-Za-z0-9_]\)get_as_EMdFValue\([^A-Za-z0-9_]\):\1getAsEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_as_string\([^A-Za-z0-9_]\):\1getAsString\2:g
s:\([^A-Za-z0-9_]\)get_block\([^A-Za-z0-9_]\):\1getBlock\2:g
s:\([^A-Za-z0-9_]\)get_block_str\([^A-Za-z0-9_]\):\1getBlockStr\2:g
s:\([^A-Za-z0-9_]\)get_block_string\([^A-Za-z0-9_]\):\1getBlockString\2:g
s:\([^A-Za-z0-9_]\)get_characteristic_string\([^A-Za-z0-9_]\):\1getCharacteristicString\2:g
s:\([^A-Za-z0-9_]\)get_column\([^A-Za-z0-9_]\):\1getColumn\2:g
s:\([^A-Za-z0-9_]\)get_comparison_op\([^A-Za-z0-9_]\):\1getComparisonOp\2:g
s:\([^A-Za-z0-9_]\)get_compiler_error\([^A-Za-z0-9_]\):\1getCompilerError\2:g
s:\([^A-Za-z0-9_]\)get_const_reference\([^A-Za-z0-9_]\):\1getConstReference\2:g
s:\([^A-Za-z0-9_]\)get_constraints\([^A-Za-z0-9_]\):\1getConstraints\2:g
s:\([^A-Za-z0-9_]\)get_content\([^A-Za-z0-9_]\):\1getContent\2:g
s:\([^A-Za-z0-9_]\)get_copy_of_mo\([^A-Za-z0-9_]\):\1getCopyOfMo\2:g
s:\([^A-Za-z0-9_]\)get_default\([^A-Za-z0-9_]\):\1getDefault\2:g
s:\([^A-Za-z0-9_]\)get_default_password\([^A-Za-z0-9_]\):\1getDefaultPassword\2:g
s:\([^A-Za-z0-9_]\)get_default_specification\([^A-Za-z0-9_]\):\1getDefaultSpecification\2:g
s:\([^A-Za-z0-9_]\)get_default_value\([^A-Za-z0-9_]\):\1getDefaultValue\2:g
s:\([^A-Za-z0-9_]\)get_ec_initialization\([^A-Za-z0-9_]\):\1getEcInitialization\2:g
s:\([^A-Za-z0-9_]\)get_ec_name\([^A-Za-z0-9_]\):\1getEcName\2:g
s:\([^A-Za-z0-9_]\)get_emdf_value\([^A-Za-z0-9_]\):\1getEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_enum\([^A-Za-z0-9_]\):\1getEnum\2:g
s:\([^A-Za-z0-9_]\)get_enum_const\([^A-Za-z0-9_]\):\1getEnumConst\2:g
s:\([^A-Za-z0-9_]\)get_enum_id\([^A-Za-z0-9_]\):\1getEnumId\2:g
s:\([^A-Za-z0-9_]\)get_enum_name_from_index\([^A-Za-z0-9_]\):\1getEnumNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_enum_value\([^A-Za-z0-9_]\):\1getEnumValue\2:g
s:\([^A-Za-z0-9_]\)get_expression\([^A-Za-z0-9_]\):\1getExpression\2:g
s:\([^A-Za-z0-9_]\)get_feature\([^A-Za-z0-9_]\):\1getFeature\2:g
s:\([^A-Za-z0-9_]\)get_feature_addition\([^A-Za-z0-9_]\):\1getFeatureAddition\2:g
s:\([^A-Za-z0-9_]\)get_feature_assignments\([^A-Za-z0-9_]\):\1getFeatureAssignments\2:g
s:\([^A-Za-z0-9_]\)get_feature_comparison\([^A-Za-z0-9_]\):\1getFeatureComparison\2:g
s:\([^A-Za-z0-9_]\)get_feature_constraints\([^A-Za-z0-9_]\):\1getFeatureConstraints\2:g
s:\([^A-Za-z0-9_]\)get_feature_index\([^A-Za-z0-9_]\):\1getFeatureIndex\2:g
s:\([^A-Za-z0-9_]\)get_feature_index_db\([^A-Za-z0-9_]\):\1getFeatureIndexDB\2:g
s:\([^A-Za-z0-9_]\)get_feature_index_inst\([^A-Za-z0-9_]\):\1getFeatureIndexInst\2:g
s:\([^A-Za-z0-9_]\)get_feature_info\([^A-Za-z0-9_]\):\1getFeatureInfo\2:g
s:\([^A-Za-z0-9_]\)get_feature_infos\([^A-Za-z0-9_]\):\1getFeatureInfos\2:g
s:\([^A-Za-z0-9_]\)get_feature_name\([^A-Za-z0-9_]\):\1getFeatureName\2:g
s:\([^A-Za-z0-9_]\)get_feature_name_from_index\([^A-Za-z0-9_]\):\1getFeatureNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_feature_names\([^A-Za-z0-9_]\):\1getFeatureNames\2:g
s:\([^A-Za-z0-9_]\)get_feature_removal\([^A-Za-z0-9_]\):\1getFeatureRemoval\2:g
s:\([^A-Za-z0-9_]\)get_feature_retrieval\([^A-Za-z0-9_]\):\1getFeatureRetrieval\2:g
s:\([^A-Za-z0-9_]\)get_feature_type_id\([^A-Za-z0-9_]\):\1getFeatureTypeId\2:g
s:\([^A-Za-z0-9_]\)get_feature_value\([^A-Za-z0-9_]\):\1getFeatureValue\2:g
s:\([^A-Za-z0-9_]\)get_feature_value_arr_size\([^A-Za-z0-9_]\):\1getFeatureValueArrSize\2:g
s:\([^A-Za-z0-9_]\)get_ffactor\([^A-Za-z0-9_]\):\1getFFactor\2:g
s:\([^A-Za-z0-9_]\)get_ffeatures\([^A-Za-z0-9_]\):\1getFFeatures\2:g
s:\([^A-Za-z0-9_]\)get_first_last\([^A-Za-z0-9_]\):\1getFirstLast\2:g
s:\([^A-Za-z0-9_]\)get_focus\([^A-Za-z0-9_]\):\1getFocus\2:g
s:\([^A-Za-z0-9_]\)get_fterm\([^A-Za-z0-9_]\):\1getFTerm\2:g
s:\([^A-Za-z0-9_]\)get_gap_block\([^A-Za-z0-9_]\):\1getGapBlock\2:g
s:\([^A-Za-z0-9_]\)get_gap_vector\([^A-Za-z0-9_]\):\1getGapVector\2:g
s:\([^A-Za-z0-9_]\)get_has_single_range_objects\([^A-Za-z0-9_]\):\1getHasSingleRangeObjects\2:g
s:\([^A-Za-z0-9_]\)get_id_d\([^A-Za-z0-9_]\):\1getID_D\2:g
s:\([^A-Za-z0-9_]\)get_identifier\([^A-Za-z0-9_]\):\1getIdentifier\2:g
s:\([^A-Za-z0-9_]\)get_index\([^A-Za-z0-9_]\):\1getIndex\2:g
s:\([^A-Za-z0-9_]\)get_index_in_symboltable\([^A-Za-z0-9_]\):\1getIndexInSymboltable\2:g
s:\([^A-Za-z0-9_]\)get_index_in_symboltable_entry\([^A-Za-z0-9_]\):\1getIndexInSymboltableEntry\2:g
s:\([^A-Za-z0-9_]\)get_int\([^A-Za-z0-9_]\):\1getInt\2:g
s:\([^A-Za-z0-9_]\)get_integer\([^A-Za-z0-9_]\):\1getInteger\2:g
s:\([^A-Za-z0-9_]\)get_is_computed\([^A-Za-z0-9_]\):\1getIsComputed\2:g
s:\([^A-Za-z0-9_]\)get_is_default\([^A-Za-z0-9_]\):\1getIsDefault\2:g
s:\([^A-Za-z0-9_]\)get_kind\([^A-Za-z0-9_]\):\1getKind\2:g
s:\([^A-Za-z0-9_]\)get_last\([^A-Za-z0-9_]\):\1getLast\2:g
s:\([^A-Za-z0-9_]\)get_last_compiler_stage\([^A-Za-z0-9_]\):\1getLastCompilerStage\2:g
s:\([^A-Za-z0-9_]\)get_last_kind\([^A-Za-z0-9_]\):\1getLastKind\2:g
s:\([^A-Za-z0-9_]\)get_leftmost_object_block_first\([^A-Za-z0-9_]\):\1getLeftmostObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)get_leftmost_object_type_name\([^A-Za-z0-9_]\):\1getLeftmostObjectTypeName\2:g
s:\([^A-Za-z0-9_]\)get_limit\([^A-Za-z0-9_]\):\1getLimit\2:g
s:\([^A-Za-z0-9_]\)get_local_error\([^A-Za-z0-9_]\):\1getLocalError\2:g
s:\([^A-Za-z0-9_]\)get_max_lengths\([^A-Za-z0-9_]\):\1getMaxLengths\2:g
s:\([^A-Za-z0-9_]\)get_max_lengths_all\([^A-Za-z0-9_]\):\1getMaxLengthsAll\2:g
s:\([^A-Za-z0-9_]\)get_monad_m_vector\([^A-Za-z0-9_]\):\1getMonad_mVector\2:g
s:\([^A-Za-z0-9_]\)get_monad_ms_list\([^A-Za-z0-9_]\):\1getMonad_mList\2:g
s:\([^A-Za-z0-9_]\)get_monads\([^A-Za-z0-9_]\):\1getMonads\2:g
s:\([^A-Za-z0-9_]\)get_mse_first\([^A-Za-z0-9_]\):\1getMseFirst\2:g
s:\([^A-Za-z0-9_]\)get_mse_last\([^A-Za-z0-9_]\):\1getMseLast\2:g
s:\([^A-Za-z0-9_]\)get_name\([^A-Za-z0-9_]\):\1getName\2:g
s:\([^A-Za-z0-9_]\)get_nr\([^A-Za-z0-9_]\):\1getNR\2:g
s:\([^A-Za-z0-9_]\)get_object\([^A-Za-z0-9_]\):\1getObject\2:g
s:\([^A-Za-z0-9_]\)get_object_block\([^A-Za-z0-9_]\):\1getObjectBlock\2:g
s:\([^A-Za-z0-9_]\)get_object_block_first\([^A-Za-z0-9_]\):\1getObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)get_object_reference\([^A-Za-z0-9_]\):\1getObjectReference\2:g
s:\([^A-Za-z0-9_]\)get_object_reference_index\([^A-Za-z0-9_]\):\1getObjectReferenceIndex\2:g
s:\([^A-Za-z0-9_]\)get_object_reference_usage\([^A-Za-z0-9_]\):\1getObjectReferenceUsage\2:g
s:\([^A-Za-z0-9_]\)get_object_type_id\([^A-Za-z0-9_]\):\1getObjectTypeId\2:g
s:\([^A-Za-z0-9_]\)get_object_type_index\([^A-Za-z0-9_]\):\1getObjectTypeIndex\2:g
s:\([^A-Za-z0-9_]\)get_object_type_name\([^A-Za-z0-9_]\):\1getObjectTypeName\2:g
s:\([^A-Za-z0-9_]\)get_object_type_name_from_index\([^A-Za-z0-9_]\):\1getOTNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_operator\([^A-Za-z0-9_]\):\1getSetOperator\2:g
s:\([^A-Za-z0-9_]\)get_opt_blocks\([^A-Za-z0-9_]\):\1getOptBlocks\2:g
s:\([^A-Za-z0-9_]\)get_opt_ec_initialization\([^A-Za-z0-9_]\):\1getOptEcInitialization\2:g
s:\([^A-Za-z0-9_]\)get_opt_gap_block\([^A-Za-z0-9_]\):\1getOptGapBlock\2:g
s:\([^A-Za-z0-9_]\)get_output_kind\([^A-Za-z0-9_]\):\1getOutputKind\2:g
s:\([^A-Za-z0-9_]\)get_power\([^A-Za-z0-9_]\):\1getPower\2:g
s:\([^A-Za-z0-9_]\)get_pre_query_string\([^A-Za-z0-9_]\):\1getPreQueryString\2:g
s:\([^A-Za-z0-9_]\)get_rest_of_block_str\([^A-Za-z0-9_]\):\1getRestOfBlockStr\2:g
s:\([^A-Za-z0-9_]\)get_result\([^A-Za-z0-9_]\):\1getResult\2:g
s:\([^A-Za-z0-9_]\)get_retrieval\([^A-Za-z0-9_]\):\1getRetrieval\2:g
s:\([^A-Za-z0-9_]\)get_set\([^A-Za-z0-9_]\):\1getSet\2:g
s:\([^A-Za-z0-9_]\)get_sheaf\([^A-Za-z0-9_]\):\1getSheaf\2:g
s:\([^A-Za-z0-9_]\)get_string\([^A-Za-z0-9_]\):\1getString\2:g
s:\([^A-Za-z0-9_]\)get_table\([^A-Za-z0-9_]\):\1getTable\2:g
s:\([^A-Za-z0-9_]\)get_type\([^A-Za-z0-9_]\):\1getType\2:g
s:\([^A-Za-z0-9_]\)get_type_id\([^A-Za-z0-9_]\):\1getTypeId\2:g
s:\([^A-Za-z0-9_]\)get_value\([^A-Za-z0-9_]\):\1getValue\2:g
s:\([^A-Za-z0-9_]\)has_EMPTY_mo\([^A-Za-z0-9_]\):\1hasEmpty_mo\2:g
s:\([^A-Za-z0-9_]\)has_NIL_mo\([^A-Za-z0-9_]\):\1hasNil_mo\2:g
s:\([^A-Za-z0-9_]\)has_default\([^A-Za-z0-9_]\):\1hasDefault\2:g
s:\([^A-Za-z0-9_]\)has_enum\([^A-Za-z0-9_]\):\1hasEnum\2:g
s:\([^A-Za-z0-9_]\)has_opt_ec_initialization\([^A-Za-z0-9_]\):\1hasOptEcInitialization\2:g
s:\([^A-Za-z0-9_]\)increase_indent\([^A-Za-z0-9_]\):\1increaseIndent\2:g
s:\([^A-Za-z0-9_]\)insert_after\([^A-Za-z0-9_]\):\1insertAfter\2:g
s:\([^A-Za-z0-9_]\)insert_before\([^A-Za-z0-9_]\):\1insertBefore\2:g
s:\([^A-Za-z0-9_]\)is_EMPTY_mo\([^A-Za-z0-9_]\):\1isEmpty_mo\2:g
s:\([^A-Za-z0-9_]\)is_NIL_mo\([^A-Za-z0-9_]\):\1isNil_mo\2:g
s:\([^A-Za-z0-9_]\)is_NOT\([^A-Za-z0-9_]\):\1isNOT\2:g
s:\([^A-Za-z0-9_]\)is_aggregate\([^A-Za-z0-9_]\):\1isAggregate\2:g
s:\([^A-Za-z0-9_]\)is_block\([^A-Za-z0-9_]\):\1isBlock\2:g
s:\([^A-Za-z0-9_]\)is_block_str\([^A-Za-z0-9_]\):\1isBlockStr\2:g
s:\([^A-Za-z0-9_]\)is_empty\([^A-Za-z0-9_]\):\1isEmpty\2:g
s:\([^A-Za-z0-9_]\)is_fail\([^A-Za-z0-9_]\):\1isFail\2:g
s:\([^A-Za-z0-9_]\)is_feature_comparison\([^A-Za-z0-9_]\):\1isFeatureComparison\2:g
s:\([^A-Za-z0-9_]\)is_ffactor\([^A-Za-z0-9_]\):\1isFFactor\2:g
s:\([^A-Za-z0-9_]\)is_fterm\([^A-Za-z0-9_]\):\1isFTerm\2:g
s:\([^A-Za-z0-9_]\)is_gap_or_opt_gap_block\([^A-Za-z0-9_]\):\1isGapOrOptGapBlock\2:g
s:\([^A-Za-z0-9_]\)is_member_of\([^A-Za-z0-9_]\):\1isMemberOf\2:g
s:\([^A-Za-z0-9_]\)is_object_block_first\([^A-Za-z0-9_]\):\1isObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)is_parenthesis\([^A-Za-z0-9_]\):\1isParenthesis\2:g
s:\([^A-Za-z0-9_]\)kDB:\1kDb:g
s:\([^A-Za-z0-9_]\)kIN:\1kIn:g
s:\([^A-Za-z0-9_]\)list_has_feature\([^A-Za-z0-9_]\):\1listHasFeature\2:g
s:\([^A-Za-z0-9_]\)log_write\([^A-Za-z0-9_]\):\1logWrite\2:g
s:\([^A-Za-z0-9_]\)log_write_time\([^A-Za-z0-9_]\):\1logWriteTime\2:g
s:\([^A-Za-z0-9_]\)make_constraints\([^A-Za-z0-9_]\):\1makeConstraints\2:g
s:\([^A-Za-z0-9_]\)make_empty\([^A-Za-z0-9_]\):\1makeEmpty\2:g
s:\([^A-Za-z0-9_]\)make_inst\([^A-Za-z0-9_]\):\1makeInst\2:g
s:\([^A-Za-z0-9_]\)mql_append_error\([^A-Za-z0-9_]\):\1appendError\2:g
s:\([^A-Za-z0-9_]\)mql_clear_error\([^A-Za-z0-9_]\):\1clearError\2:g
s:\([^A-Za-z0-9_]\)mql_execute_file\([^A-Za-z0-9_]\):\1mqlExecuteFile\2:g
s:\([^A-Za-z0-9_]\)mql_execute_stream\([^A-Za-z0-9_]\):\1mqlExecuteStream\2:g
s:\([^A-Za-z0-9_]\)mql_execute_string\([^A-Za-z0-9_]\):\1mqlExecuteString\2:g
s:\([^A-Za-z0-9_]\)mql_get_error\([^A-Za-z0-9_]\):\1getError\2:g
s:\([^A-Za-z0-9_]\)mql_prepend_error\([^A-Za-z0-9_]\):\1prependError\2:g
s:\([^A-Za-z0-9_]\)mql_set_error\([^A-Za-z0-9_]\):\1setError\2:g
s:\([^A-Za-z0-9_]\)object_type_info:\1ObjectTypeInfo:g
s:^object_type_info:ObjectTypeInfo:g
s:\([^A-Za-z0-9_]\)objects_at_Sm\([^A-Za-z0-9_]\):\1objectsAtSm\2:g
s:\([^A-Za-z0-9_]\)out_char_data\([^A-Za-z0-9_]\):\1outCharData\2:g
s:\([^A-Za-z0-9_]\)prepend_and_take_over\([^A-Za-z0-9_]\):\1prependAndTakeOver\2:g
s:\([^A-Za-z0-9_]\)prepend_with_me\([^A-Za-z0-9_]\):\1prependWithMe\2:g
s:\([^A-Za-z0-9_]\)print_DTD\([^A-Za-z0-9_]\):\1printDTD\2:g
s:\([^A-Za-z0-9_]\)print_DTD_end\([^A-Za-z0-9_]\):\1printDTDend\2:g
s:\([^A-Za-z0-9_]\)print_DTD_start\([^A-Za-z0-9_]\):\1printDTDstart\2:g
s:\([^A-Za-z0-9_]\)print_XMLDecl\([^A-Za-z0-9_]\):\1printXMLDecl\2:g
s:\([^A-Za-z0-9_]\)put_Console\([^A-Za-z0-9_]\):\1printConsole\2:g
s:\([^A-Za-z0-9_]\)put_XML\([^A-Za-z0-9_]\):\1printXML\2:g
s:\([^A-Za-z0-9_]\)remove_mo\([^A-Za-z0-9_]\):\1removeMo\2:g
s:\([^A-Za-z0-9_]\)retrieve_feature_values\([^A-Za-z0-9_]\):\1retrieveFeatureValues\2:g
s:\([^A-Za-z0-9_]\)set_Next\([^A-Za-z0-9_]\):\1setNext\2:g
s:\([^A-Za-z0-9_]\)set_content\([^A-Za-z0-9_]\):\1setContent\2:g
s:\([^A-Za-z0-9_]\)set_delete_result\([^A-Za-z0-9_]\):\1setDeleteResult\2:g
s:\([^A-Za-z0-9_]\)set_feature\([^A-Za-z0-9_]\):\1setFeature\2:g
s:\([^A-Za-z0-9_]\)set_features\([^A-Za-z0-9_]\):\1setFeatures\2:g
s:\([^A-Za-z0-9_]\)set_id_d\([^A-Za-z0-9_]\):\1setID_D\2:g
s:\([^A-Za-z0-9_]\)set_is_aggregate\([^A-Za-z0-9_]\):\1setIsAggregate\2:g
s:\([^A-Za-z0-9_]\)set_is_computed\([^A-Za-z0-9_]\):\1setIsComputed\2:g
s:\([^A-Za-z0-9_]\)set_is_default\([^A-Za-z0-9_]\):\1setIsDefault\2:g
s:\([^A-Za-z0-9_]\)set_new_default\([^A-Za-z0-9_]\):\1setNewDefault\2:g
s:\([^A-Za-z0-9_]\)set_object_reference_index\([^A-Za-z0-9_]\):\1setObjectReferenceIndex\2:g
s:\([^A-Za-z0-9_]\)set_success\([^A-Za-z0-9_]\):\1setSuccess\2:g
s:\([^A-Za-z0-9_]\)set_value\([^A-Za-z0-9_]\):\1setValue\2:g
s:\([^A-Za-z0-9_]\)sheaf_is_empty\([^A-Za-z0-9_]\):\1sheafIsEmpty\2:g
s:\([^A-Za-z0-9_]\)start_new_row\([^A-Za-z0-9_]\):\1startNewRow\2:g
s:\([^A-Za-z0-9_]\)start_single_tag\([^A-Za-z0-9_]\):\1startSingleTag\2:g
s:\([^A-Za-z0-9_]\)start_tag\([^A-Za-z0-9_]\):\1startTag\2:g
s:\([^A-Za-z0-9_]\)unencrypt_string\([^A-Za-z0-9_]\):\1unencryptString\2:g
s:\([^A-Za-z0-9_]\)union_with\([^A-Za-z0-9_]\):\1unionWith\2:g
s:\([^A-Za-z0-9_]\)update_last\([^A-Za-z0-9_]\):\1updateLast\2:g
s:\([^A-Za-z0-9_]\)update_row\([^A-Za-z0-9_]\):\1updateRow\2:g
s:\([^A-Za-z0-9_]\)update_value\([^A-Za-z0-9_]\):\1updateValue\2:g
s:\([^A-Za-z0-9_]\)zero_fill_string\([^A-Za-z0-9_]\):\1zeroFillString\2:g
s:\([^A-Za-z0-9_]\)feature_info:\1FeatureInfo:g
s:^feature_info:FeatureInfo:g
s:\([^A-Za-z0-9_]\)Type\([^A-Za-z0-9_]\):\1type\2:g
s:\([^A-Za-z0-9_]\)CType:\1MQLType:g
s:^CType:MQLType:g
s:\([^A-Za-z0-9_]\)Next\([^A-Za-z0-9_]\):\1getNext\2:g
s:\([^A-Za-z0-9_]\)Monads\([^A-Za-z0-9_]\):\1monads\2:g
s:\([^A-Za-z0-9_]\)ObjectTypeExists\([^A-Za-z0-9_]\):\1objectTypeExists\2:g
	
	  The two codebases were then compared, and they diff'ed equal
	  except for cosmetic differences and code differences in between.
	
	* Redid emdros.spec.in, emdros.spec2.in, and build.sh.in so as to
	  build cleanly again.

2004-07-28  Ulrik Petersen

	* Fixed bug in EMdFDB::featureExists(): It failed to call
	  getFeaturesForObjectType() before calling
	  addFeatureToCacheIfNotAlreadyThere.  It now calls
	  getFeaturesForObjectType, and doesn't call
	  addFeatureToFeatureCacheIfNotAlreadyThere.

2004-07-17  Ulrik Petersen

	* I did a major renaming of almost all classes and methods.  This
	  was as per Chris Wilson's suggestion, and as per agreement with
	  a lot of my users who had responded to my RFC in the Emdros
	  "Open Discussion" forum.

	  This was done as follows:

for f in `find . -type f | grep -v "/sqlite/" | grep -v "/pcre/" | grep -v "NEWS" | grep -v "configure" | grep -v "\.sh" | grep -v "ChangeLog"| grep -v Makefile | grep -v libtool | grep -v ".awk" | grep -v ".sed" | grep -v ".mak"`; do ./apply.sh $f | tee -a out.txt ; done

	  apply.sh:

#!/bin/bash
sed -f name2.sed $1 > /tmp/tmp.txt
DIFF=`diff $1 /tmp/tmp.txt`
if test -z "$DIFF"; then
  echo "$1: No differences"
else
  cat /tmp/tmp.txt | awk -f today.awk > /tmp/tmp2.txt 
  echo "$1: Differences."
  mv /tmp/tmp2.txt $1
fi

	  today.awk:

/Last update:/ {
  gsub("[0-9]+/[0-9]+-[0-4]+", "7/17-2004");
  print;
  next;
}
/Copyright/ {
  if (index($0, "2004") == 0) {
    if (match($0, "[0-9]+-[0-9]+") == 0) {
      gsub("[0-9]+", "&-2004");
    } else {
      gsub("-[0-9]+", "-2004");
    }
  }
  print;
  next;
}
// { print; }

	  name2.sed:

s:\([^A-Za-z0-9_]\)AbortTransaction\([(\" ]\):\1abortTransaction\2:g
s:\([^A-Za-z0-9_]\)AccessTuple\([(\" ]\):\1accessTuple\2:g
s:\([^A-Za-z0-9_]\)AddEMdFValue\([(\" ]\):\1addEMdFValue\2:g
s:\([^A-Za-z0-9_]\)AddFeature\([(\" ]\):\1addFeature\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_gut\([(\" ]\):\1addFeatureToOT_gut\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_gut_or_objects\([(\" ]\):\1addFeatureToOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)AddFeatureToOT_objects\([(\" ]\):\1addFeatureToOT_objects\2:g
s:\([^A-Za-z0-9_]\)AddMSE\([(\" ]\):\1addMSE\2:g
s:\([^A-Za-z0-9_]\)AddOid\([(\" ]\):\1addOid\2:g
s:\([^A-Za-z0-9_]\)AggregateQuery\([(\" ]\):\1aggregateQuery\2:g
s:\([^A-Za-z0-9_]\)BackendName\([(\" ]\):\1getBackendName\2:g
s:\([^A-Za-z0-9_]\)BeginTransaction\([(\" ]\):\1beginTransaction\2:g
s:\([^A-Za-z0-9_]\)CAbortTransactionStatement:\1AbortTransactionStatement:g
s:^CAbortTransactionStatement:AbortTransactionStatement:g
s:\([^A-Za-z0-9_]\)CArena:\1Arena:g
s:^CArena:Arena:g
s:\([^A-Za-z0-9_]\)CBeginTransactionStatement:\1BeginTransactionStatement:g
s:^CBeginTransactionStatement:BeginTransactionStatement:g
s:\([^A-Za-z0-9_]\)CBlock_string:\1BlockString:g
s:^CBlock_string:BlockString:g
s:\([^A-Za-z0-9_]\)CBlock_str:\1BlockStr:g
s:^CBlock_str:BlockStr:g
s:\([^A-Za-z0-9_]\)CBlocks:\1Blocks:g
s:^CBlocks:Blocks:g
s:\([^A-Za-z0-9_]\)CBlock:\1Block:g
s:^CBlock:Block:g
s:\([^A-Za-z0-9_]\)CByMonads:\1ByMonads:g
s:^CByMonads:ByMonads:g
s:\([^A-Za-z0-9_]\)CChunk:\1Chunk:g
s:^CChunk:Chunk:g
s:\([^A-Za-z0-9_]\)CCommitTransactionStatement:\1CommitTransactionStatement:g
s:^CCommitTransactionStatement:CommitTransactionStatement:g
s:\([^A-Za-z0-9_]\)CCreateDatabaseStatement:\1CreateDatabaseStatement:g
s:^CCreateDatabaseStatement:CreateDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CCreateEnumerationStatement:\1CreateEnumerationStatement:g
s:^CCreateEnumerationStatement:CreateEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CCreateIndexesStatement:\1CreateIndexesStatement:g
s:^CCreateIndexesStatement:CreateIndexesStatement:g
s:\([^A-Za-z0-9_]\)CCreateMonadSetStatement:\1CreateMonadSetStatement:g
s:^CCreateMonadSetStatement:CreateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromID_DsStatement:\1CreateObjectFromID_DsStatement:g
s:^CCreateObjectFromID_DsStatement:CreateObjectFromID_DsStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromMonadsStatement:\1CreateObjectFromMonadsStatement:g
s:^CCreateObjectFromMonadsStatement:CreateObjectFromMonadsStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectFromQueryStatement:\1CreateObjectFromQueryStatement:g
s:^CCreateObjectFromQueryStatement:CreateObjectFromQueryStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectStatement:\1CreateObjectStatement:g
s:^CCreateObjectStatement:CreateObjectStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectTypeStatement:\1CreateObjectTypeStatement:g
s:^CCreateObjectTypeStatement:CreateObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CCreateObjectsStatement:\1CreateObjectsStatement:g
s:^CCreateObjectsStatement:CreateObjectsStatement:g
s:\([^A-Za-z0-9_]\)CCreateOrUpdateMonadSetStatement:\1CreateOrUpdateMonadSetStatement:g
s:^CCreateOrUpdateMonadSetStatement:CreateOrUpdateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CCreateSegmentStatement:\1CreateSegmentStatement:g
s:^CCreateSegmentStatement:CreateSegmentStatement:g
s:\([^A-Za-z0-9_]\)CDatabaseStatement:\1DatabaseStatement:g
s:^CDatabaseStatement:DatabaseStatement:g
s:\([^A-Za-z0-9_]\)CDeleteMonadsStatement:\1DeleteMonadsStatement:g
s:^CDeleteMonadsStatement:DeleteMonadsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByID_DsStatement:\1DeleteObjectsByID_DsStatement:g
s:^CDeleteObjectsByID_DsStatement:DeleteObjectsByID_DsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByMonadsStatement:\1DeleteObjectsByMonadsStatement:g
s:^CDeleteObjectsByMonadsStatement:DeleteObjectsByMonadsStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsByQueryStatement:\1DeleteObjectsByQueryStatement:g
s:^CDeleteObjectsByQueryStatement:DeleteObjectsByQueryStatement:g
s:\([^A-Za-z0-9_]\)CDeleteObjectsStatement:\1DeleteObjectsStatement:g
s:^CDeleteObjectsStatement:DeleteObjectsStatement:g
s:\([^A-Za-z0-9_]\)CDropDatabaseStatement:\1DropDatabaseStatement:g
s:^CDropDatabaseStatement:DropDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CDropEnumerationStatement:\1DropEnumerationStatement:g
s:^CDropEnumerationStatement:DropEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CDropIndexesStatement:\1DropIndexesStatement:g
s:^CDropIndexesStatement:DropIndexesStatement:g
s:\([^A-Za-z0-9_]\)CDropMonadSetStatement:\1DropMonadSetStatement:g
s:^CDropMonadSetStatement:DropMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CDropObjectTypeStatement:\1DropObjectTypeStatement:g
s:^CDropObjectTypeStatement:DropObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CECDeclaration:\1ECDeclaration:g
s:^CECDeclaration:ECDeclaration:g
s:\([^A-Za-z0-9_]\)CECUpdate:\1ECUpdate:g
s:^CECUpdate:ECUpdate:g
s:\([^A-Za-z0-9_]\)CEMdFComparison:\1EMdFComparison:g
s:^CEMdFComparison:EMdFComparison:g
s:\([^A-Za-z0-9_]\)CEMdFDBDBError:\1EMdFDBDBError:g
s:^CEMdFDBDBError:EMdFDBDBError:g
s:\([^A-Za-z0-9_]\)CEMdFDBException:\1EMdFDBException:g
s:^CEMdFDBException:EMdFDBException:g
s:\([^A-Za-z0-9_]\)CEMdFFFactor:\1EMdFFFactor:g
s:^CEMdFFFactor:EMdFFFactor:g
s:\([^A-Za-z0-9_]\)CEMdFFFeatures:\1EMdFFFeatures:g
s:^CEMdFFFeatures:EMdFFFeatures:g
s:\([^A-Za-z0-9_]\)CEMdFFTerm:\1EMdFFTerm:g
s:^CEMdFFTerm:EMdFFTerm:g
s:\([^A-Za-z0-9_]\)CEMdFOutputException:\1EMdFOutputException:g
s:^CEMdFOutputException:EMdFOutputException:g
s:\([^A-Za-z0-9_]\)CEMdFOutput:\1EMdFOutput:g
s:^CEMdFOutput:EMdFOutput:g
s:\([^A-Za-z0-9_]\)CEMdFOutputWrongCharactersetException:\1EMdFOutputWrongCharactersetException:g
s:^CEMdFOutputWrongCharactersetException:EMdFOutputWrongCharactersetException:g
s:\([^A-Za-z0-9_]\)CEMdFValue:\1EMdFValue:g
s:^CEMdFValue:EMdFValue:g
s:\([^A-Za-z0-9_]\)CEmdrosEnv:\1EmdrosEnv:g
s:^CEmdrosEnv:EmdrosEnv:g
s:\([^A-Za-z0-9_]\)CEnumConstCache:\1EnumConstCache:g
s:^CEnumConstCache:EnumConstCache:g
s:\([^A-Za-z0-9_]\)CEnumerationStatement:\1EnumerationStatement:g
s:^CEnumerationStatement:EnumerationStatement:g
s:\([^A-Za-z0-9_]\)CExpression:\1Expression:g
s:^CExpression:Expression:g
s:\([^A-Za-z0-9_]\)CFFactor:\1FFactor:g
s:^CFFactor:FFactor:g
s:\([^A-Za-z0-9_]\)CFFeatures:\1FFeatures:g
s:^CFFeatures:FFeatures:g
s:\([^A-Za-z0-9_]\)CFTerm:\1FTerm:g
s:^CFTerm:FTerm:g
s:\([^A-Za-z0-9_]\)CFeatureAssignment:\1FeatureAssignment:g
s:^CFeatureAssignment:FeatureAssignment:g
s:\([^A-Za-z0-9_]\)CFeatureDeclaration:\1FeatureDeclaration:g
s:^CFeatureDeclaration:FeatureDeclaration:g
s:\([^A-Za-z0-9_]\)CFeatureUpdate:\1FeatureUpdate:g
s:^CFeatureUpdate:FeatureUpdate:g
s:\([^A-Za-z0-9_]\)CFeature_comparison:\1FeatureComparison:g
s:^CFeature_comparison:FeatureComparison:g
s:\([^A-Za-z0-9_]\)CFeature:\1Feature:g
s:^CFeature:Feature:g
s:\([^A-Za-z0-9_]\)CGap_block:\1GapBlock:g
s:^CGap_block:GapBlock:g
s:\([^A-Za-z0-9_]\)CGetFeaturesStatement:\1GetFeaturesStatement:g
s:^CGetFeaturesStatement:GetFeaturesStatement:g
s:\([^A-Za-z0-9_]\)CGetMonadSetsStatement:\1GetMonadSetsStatement:g
s:^CGetMonadSetsStatement:GetMonadSetsStatement:g
s:\([^A-Za-z0-9_]\)CGetMonadsStatement:\1GetMonadsStatement:g
s:^CGetMonadsStatement:GetMonadsStatement:g
s:\([^A-Za-z0-9_]\)CID_D:\1ID_D:g
s:^CID_D:ID_D:g
s:\([^A-Za-z0-9_]\)CInsertMonadsStatement:\1InsertMonadsStatement:g
s:^CInsertMonadsStatement:InsertMonadsStatement:g
s:\([^A-Za-z0-9_]\)CInstContents:\1InstContents:g
s:^CInstContents:InstContents:g
s:\([^A-Za-z0-9_]\)CInstObject:\1InstObject:g
s:^CInstObject:InstObject:g
s:\([^A-Za-z0-9_]\)CInst:\1Inst:g
s:^CInst:Inst:g
s:\([^A-Za-z0-9_]\)CList_of_mo_nr:\1ListOfMoNr:g
s:^CList_of_mo_nr:ListOfMoNr:g
s:\([^A-Za-z0-9_]\)CList_of_straws:\1ListOfStraws:g
s:^CList_of_straws:ListOfStraws:g
s:\([^A-Za-z0-9_]\)CMOEMPTY_mo:\1Empty_mo:g
s:^CMOEMPTY_mo:Empty_mo:g
s:\([^A-Za-z0-9_]\)CMOID_D:\1Id_d_mo:g
s:^CMOID_D:Id_d_mo:g
s:\([^A-Za-z0-9_]\)CMOID_M:\1Id_m_mo:g
s:^CMOID_M:Id_m_mo:g
s:\([^A-Za-z0-9_]\)CMONIL_mo:\1Nil_mo:g
s:^CMONIL_mo:Nil_mo:g
s:\([^A-Za-z0-9_]\)CMQLError:\1MQLError:g
s:^CMQLError:MQLError:g
s:\([^A-Za-z0-9_]\)CMQLObject:\1MQLObject:g
s:^CMQLObject:MQLObject:g
s:\([^A-Za-z0-9_]\)CMQLResult:\1MQLResult:g
s:^CMQLResult:MQLResult:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableEntry:\1MQLSymbolTableEntry:g
s:^CMQLSymbolTableEntry:MQLSymbolTableEntry:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableEntryException:\1MQLSymbolTableEntryException:g
s:^CMQLSymbolTableEntryException:MQLSymbolTableEntryException:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTableException:\1MQLSymbolTableException:g
s:^CMQLSymbolTableException:MQLSymbolTableException:g
s:\([^A-Za-z0-9_]\)CMQLSymbolTable:\1MQLSymbolTable:g
s:^CMQLSymbolTable:MQLSymbolTable:g
s:\([^A-Za-z0-9_]\)CMQL_execution_environment:\1MQLExecEnv:g
s:^CMQL_execution_environment:MQLExecEnv:g
s:\([^A-Za-z0-9_]\)CMatched_object:\1MatchedObject:g
s:^CMatched_object:MatchedObject:g
s:\([^A-Za-z0-9_]\)CMo_nr:\1MoNR:g
s:^CMo_nr:MoNR:g
s:\([^A-Za-z0-9_]\)CMonadSetCalculationStatement:\1MonadSetCalculationStatement:g
s:^CMonadSetCalculationStatement:MonadSetCalculationStatement:g
s:\([^A-Za-z0-9_]\)CMonadSetChainElement:\1MonadSetChainElement:g
s:^CMonadSetChainElement:MonadSetChainElement:g
s:\([^A-Za-z0-9_]\)CMonadSetElement:\1MQLMonadSetElement:g
s:^CMonadSetElement:MQLMonadSetElement:g
s:\([^A-Za-z0-9_]\)CMonadSetStatement:\1MonadSetStatement:g
s:^CMonadSetStatement:MonadSetStatement:g
s:\([^A-Za-z0-9_]\)CMonadsStatement:\1MonadsStatement:g
s:^CMonadsStatement:MonadsStatement:g
s:\([^A-Za-z0-9_]\)CObjectSpecBase:\1ObjectSpecBase:g
s:^CObjectSpecBase:ObjectSpecBase:g
s:\([^A-Za-z0-9_]\)CObjectSpecNoOT:\1ObjectSpecNoOT:g
s:^CObjectSpecNoOT:ObjectSpecNoOT:g
s:\([^A-Za-z0-9_]\)CObjectSpec:\1ObjectSpec:g
s:^CObjectSpec:ObjectSpec:g
s:\([^A-Za-z0-9_]\)CObjectTypeStatement:\1ObjectTypeStatement:g
s:^CObjectTypeStatement:ObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CObjectTypesStatement:\1ObjectTypesStatement:g
s:^CObjectTypesStatement:ObjectTypesStatement:g
s:\([^A-Za-z0-9_]\)CObject_block_common:\1ObjectBlockCommon:g
s:^CObject_block_common:ObjectBlockCommon:g
s:\([^A-Za-z0-9_]\)CObject_block_first:\1ObjectBlockFirst:g
s:^CObject_block_first:ObjectBlockFirst:g
s:\([^A-Za-z0-9_]\)CObject_block:\1ObjectBlock:g
s:^CObject_block:ObjectBlock:g
s:\([^A-Za-z0-9_]\)CObject_reference_usage:\1ObjectReferenceUsage:g
s:^CObject_reference_usage:ObjectReferenceUsage:g
s:\([^A-Za-z0-9_]\)COpt_gap_block:\1OptGapBlock:g
s:^COpt_gap_block:OptGapBlock:g
s:\([^A-Za-z0-9_]\)CPower:\1Power:g
s:^CPower:Power:g
s:\([^A-Za-z0-9_]\)CQueryBase:\1QueryBase:g
s:^CQueryBase:QueryBase:g
s:\([^A-Za-z0-9_]\)CQuitStatement:\1QuitStatement:g
s:^CQuitStatement:QuitStatement:g
s:\([^A-Za-z0-9_]\)CRest_of_block_str:\1RestOfBlockStr:g
s:^CRest_of_block_str:RestOfBlockStr:g
s:\([^A-Za-z0-9_]\)CSegmentStatement:\1SegmentStatement:g
s:^CSegmentStatement:SegmentStatement:g
s:\([^A-Za-z0-9_]\)CSelectEnumerationConstantsStatement:\1SelectEnumerationConstantsStatement:g
s:^CSelectEnumerationConstantsStatement:SelectEnumerationConstantsStatement:g
s:\([^A-Za-z0-9_]\)CSelectEnumerationsStatement:\1SelectEnumerationsStatement:g
s:^CSelectEnumerationsStatement:SelectEnumerationsStatement:g
s:\([^A-Za-z0-9_]\)CSelectFeaturesStatement:\1SelectFeaturesStatement:g
s:^CSelectFeaturesStatement:SelectFeaturesStatement:g
s:\([^A-Za-z0-9_]\)CSelectMaxMStatement:\1SelectMaxMStatement:g
s:^CSelectMaxMStatement:SelectMaxMStatement:g
s:\([^A-Za-z0-9_]\)CSelectMinMStatement:\1SelectMinMStatement:g
s:^CSelectMinMStatement:SelectMinMStatement:g
s:\([^A-Za-z0-9_]\)CSelectMonadSetsStatement:\1SelectMonadSetsStatement:g
s:^CSelectMonadSetsStatement:SelectMonadSetsStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectTypesStatement:\1SelectObjectTypesStatement:g
s:^CSelectObjectTypesStatement:SelectObjectTypesStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectTypesUsingEnumerationStatement:\1SelectObjectTypesUsingEnumerationStatement:g
s:^CSelectObjectTypesUsingEnumerationStatement:SelectObjectTypesUsingEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectsAtStatement:\1SelectObjectsAtStatement:g
s:^CSelectObjectsAtStatement:SelectObjectsAtStatement:g
s:\([^A-Za-z0-9_]\)CSelectObjectsHavingMonadsInStatement:\1SelectObjectsHavingMonadsInStatement:g
s:^CSelectObjectsHavingMonadsInStatement:SelectObjectsHavingMonadsInStatement:g
s:\([^A-Za-z0-9_]\)CSelectStatement:\1SelectStatement:g
s:^CSelectStatement:SelectStatement:g
s:\([^A-Za-z0-9_]\)CSet_of_monad_ms:\1SetOfMonads:g
s:^CSet_of_monad_ms:SetOfMonads:g
s:\([^A-Za-z0-9_]\)CSheaf:\1Sheaf:g
s:^CSheaf:Sheaf:g
s:\([^A-Za-z0-9_]\)CSkipListConstIterator:\1SkipListConstIterator:g
s:^CSkipListConstIterator:SkipListConstIterator:g
s:\([^A-Za-z0-9_]\)CSkipListNode:\1SkipListNode:g
s:^CSkipListNode:SkipListNode:g
s:\([^A-Za-z0-9_]\)CSkipList:\1SkipList:g
s:^CSkipList:SkipList:g
s:\([^A-Za-z0-9_]\)CSmartVector:\1SmartVector:g
s:^CSmartVector:SmartVector:g
s:\([^A-Za-z0-9_]\)CStatement:\1Statement:g
s:^CStatement:Statement:g
s:\([^A-Za-z0-9_]\)CStraw:\1Straw:g
s:^CStraw:Straw:g
s:\([^A-Za-z0-9_]\)CStringListNode:\1StringListNode:g
s:^CStringListNode:StringListNode:g
s:\([^A-Za-z0-9_]\)CStringList:\1StringList:g
s:^CStringList:StringList:g
s:\([^A-Za-z0-9_]\)CTable:\1Table:g
s:^CTable:Table:g
s:\([^A-Za-z0-9_]\)CTopograph:\1Topograph:g
s:^CTopograph:Topograph:g
s:\([^A-Za-z0-9_]\)CUpdateEnumerationStatement:\1UpdateEnumerationStatement:g
s:^CUpdateEnumerationStatement:UpdateEnumerationStatement:g
s:\([^A-Za-z0-9_]\)CUpdateMonadSetStatement:\1UpdateMonadSetStatement:g
s:^CUpdateMonadSetStatement:UpdateMonadSetStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectTypeStatement:\1UpdateObjectTypeStatement:g
s:^CUpdateObjectTypeStatement:UpdateObjectTypeStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByID_DsStatement:\1UpdateObjectsByID_DsStatement:g
s:^CUpdateObjectsByID_DsStatement:UpdateObjectsByID_DsStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByMonadsStatement:\1UpdateObjectsByMonadsStatement:g
s:^CUpdateObjectsByMonadsStatement:UpdateObjectsByMonadsStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsByQueryStatement:\1UpdateObjectsByQueryStatement:g
s:^CUpdateObjectsByQueryStatement:UpdateObjectsByQueryStatement:g
s:\([^A-Za-z0-9_]\)CUpdateObjectsStatement:\1UpdateObjectsStatement:g
s:^CUpdateObjectsStatement:UpdateObjectsStatement:g
s:\([^A-Za-z0-9_]\)CUseStatement:\1UseStatement:g
s:^CUseStatement:UseStatement:g
s:\([^A-Za-z0-9_]\)CVacuumDatabaseStatement:\1VacuumDatabaseStatement:g
s:^CVacuumDatabaseStatement:VacuumDatabaseStatement:g
s:\([^A-Za-z0-9_]\)CValueTriple:\1ValueTriple:g
s:^CValueTriple:ValueTriple:g
s:\([^A-Za-z0-9_]\)CValue:\1Value:g
s:^CValue:Value:g
s:\([^A-Za-z0-9_]\)CalculateMMap\([(\" ]\):\1calculateMMap\2:g
s:\([^A-Za-z0-9_]\)CanDoComparisonOp\([(\" ]\):\1canDoComparisonOp\2:g
s:\([^A-Za-z0-9_]\)CommitTransaction\([(\" ]\):\1commitTransaction\2:g
s:\([^A-Za-z0-9_]\)Connect\([(\" ]\):\1connect\2:g
s:\([^A-Za-z0-9_]\)ConnectionOk\([(\" ]\):\1connectionOk\2:g
s:\([^A-Za-z0-9_]\)ConvertDBName\([(\" ]\):\1convertDBName\2:g
s:\([^A-Za-z0-9_]\)CreateConstants\([(\" ]\):\1createConstants\2:g
s:\([^A-Za-z0-9_]\)CreateDatabase\([(\" ]\):\1createDatabase\2:g
s:\([^A-Za-z0-9_]\)CreateEnum\([(\" ]\):\1createEnum\2:g
s:\([^A-Za-z0-9_]\)CreateEnumConstant\([(\" ]\):\1createEnumConstant\2:g
s:\([^A-Za-z0-9_]\)CreateFeature\([(\" ]\):\1createFeature\2:g
s:\([^A-Za-z0-9_]\)CreateIndex\([(\" ]\):\1createIndex\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnDatabase\([(\" ]\):\1createIndicesOnDatabase\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTGut\([(\" ]\):\1createIndicesOnOTGut\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTMonadMs\([(\" ]\):\1createIndicesOnOTMonadMs\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnOTObjects\([(\" ]\):\1createIndicesOnOTObjects\2:g
s:\([^A-Za-z0-9_]\)CreateIndicesOnObjectType\([(\" ]\):\1createIndicesOnObjectType\2:g
s:\([^A-Za-z0-9_]\)CreateMonadSet\([(\" ]\):\1createMonadSet\2:g
s:\([^A-Za-z0-9_]\)CreateObject\([(\" ]\):\1createObject\2:g
s:\([^A-Za-z0-9_]\)CreateObjectType\([(\" ]\):\1createObjectType\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_gut\([(\" ]\):\1createObjectTypeOT_gut\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_gut_or_objects\([(\" ]\):\1createObjectTypeOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectTypeOT_objects\([(\" ]\):\1createObjectTypeOT_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjects\([(\" ]\):\1createObjects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsInBetweenData\([(\" ]\):\1createObjectsInBetweenData\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut\([(\" ]\):\1createObjectsOT_gut\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_DB\([(\" ]\):\1createObjectsOT_gut_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_data\([(\" ]\):\1createObjectsOT_gut_data\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_or_objects\([(\" ]\):\1createObjectsOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_gut_or_objects_DB\([(\" ]\):\1createObjectsOT_gut_or_objects_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms\([(\" ]\):\1createObjectsOT_monad_ms\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms_DB\([(\" ]\):\1createObjectsOT_monad_ms_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_monad_ms_data\([(\" ]\):\1createObjectsOT_monad_ms_data\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects\([(\" ]\):\1createObjectsOT_objects\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects_DB\([(\" ]\):\1createObjectsOT_objects_DB\2:g
s:\([^A-Za-z0-9_]\)CreateObjectsOT_objects_data\([(\" ]\):\1createObjectsOT_objects_data\2:g
s:\([^A-Za-z0-9_]\)CreateSchemaVersionTable\([(\" ]\):\1createSchemaVersionTable\2:g
s:\([^A-Za-z0-9_]\)CreateSegment\([(\" ]\):\1createSegment\2:g
s:\([^A-Za-z0-9_]\)CreateSequenceTables110\([(\" ]\):\1createSequenceTables110\2:g
s:\([^A-Za-z0-9_]\)CreateSequenceTables118\([(\" ]\):\1createSequenceTables118\2:g
s:\([^A-Za-z0-9_]\)Create_min_max_m_table\([(\" ]\):\1createMin_max_m_table\2:g
s:\([^A-Za-z0-9_]\)DBIsInitialized\([(\" ]\):\1dbIsInitialized\2:g
s:\([^A-Za-z0-9_]\)DatabaseNameIsOK\([(\" ]\):\1databaseNameIsOK\2:g
s:\([^A-Za-z0-9_]\)DeleteDatabase\([(\" ]\):\1deleteDatabase\2:g
s:\([^A-Za-z0-9_]\)DeleteMonads\([(\" ]\):\1deleteMonads\2:g
s:\([^A-Za-z0-9_]\)DeleteRedundantSequenceInfo\([(\" ]\):\1deleteRedundantSequenceInfo\2:g
s:\([^A-Za-z0-9_]\)DropDatabase\([(\" ]\):\1dropDatabase\2:g
s:\([^A-Za-z0-9_]\)DropEnum\([(\" ]\):\1dropEnum\2:g
s:\([^A-Za-z0-9_]\)DropEnumConst\([(\" ]\):\1dropEnumConst\2:g
s:\([^A-Za-z0-9_]\)DropFeature\([(\" ]\):\1dropFeature\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_gut\([(\" ]\):\1dropFeatureFromOT_gut\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_gut_or_objects\([(\" ]\):\1dropFeatureFromOT_gut_or_objects\2:g
s:\([^A-Za-z0-9_]\)DropFeatureFromOT_objects\([(\" ]\):\1dropFeatureFromOT_objects\2:g
s:\([^A-Za-z0-9_]\)DropIndex\([(\" ]\):\1dropIndex\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnDatabase\([(\" ]\):\1dropIndicesOnDatabase\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTGut\([(\" ]\):\1dropIndicesOnOTGut\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTMonadMs\([(\" ]\):\1dropIndicesOnOTMonadMs\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnOTObjects\([(\" ]\):\1dropIndicesOnOTObjects\2:g
s:\([^A-Za-z0-9_]\)DropIndicesOnObjectType\([(\" ]\):\1dropIndicesOnObjectType\2:g
s:\([^A-Za-z0-9_]\)DropMonadSet\([(\" ]\):\1dropMonadSet\2:g
s:\([^A-Za-z0-9_]\)DropObject\([(\" ]\):\1dropObject\2:g
s:\([^A-Za-z0-9_]\)DropObjectType\([(\" ]\):\1dropObjectType\2:g
s:\([^A-Za-z0-9_]\)DropObjectsInMonads\([(\" ]\):\1dropObjectsInMonads\2:g
s:\([^A-Za-z0-9_]\)EnumConstExists\([(\" ]\):\1enumConstExists\2:g
s:\([^A-Za-z0-9_]\)EnumExists\([(\" ]\):\1enumExists\2:g
s:\([^A-Za-z0-9_]\)ErrorMessage\([(\" ]\):\1errorMessage\2:g
s:\([^A-Za-z0-9_]\)EscapeStringForSQL\([(\" ]\):\1escapeStringForSQL\2:g
s:\([^A-Za-z0-9_]\)ExecAdd\([(\" ]\):\1execAdd\2:g
s:\([^A-Za-z0-9_]\)ExecAddUpdateRemove\([(\" ]\):\1execAddUpdateRemove\2:g
s:\([^A-Za-z0-9_]\)ExecCOPY\([(\" ]\):\1execCOPY\2:g
s:\([^A-Za-z0-9_]\)ExecCommand\([(\" ]\):\1execCommand\2:g
s:\([^A-Za-z0-9_]\)ExecMakeFeatureArray\([(\" ]\):\1execMakeFeatureArray\2:g
s:\([^A-Za-z0-9_]\)ExecMakeFeatureList\([(\" ]\):\1execMakeFeatureList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeList\([(\" ]\):\1execMakeList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeNameList\([(\" ]\):\1execMakeNameList\2:g
s:\([^A-Za-z0-9_]\)ExecMakeSOM\([(\" ]\):\1execMakeSOM\2:g
s:\([^A-Za-z0-9_]\)ExecOneType\([(\" ]\):\1execOneType\2:g
s:\([^A-Za-z0-9_]\)ExecSelect\([(\" ]\):\1execSelect\2:g
s:\([^A-Za-z0-9_]\)FeatureExists\([(\" ]\):\1featureExists\2:g
s:\([^A-Za-z0-9_]\)Finalize\([(\" ]\):\1finalize\2:g
s:\([^A-Za-z0-9_]\)GetComputedFeature\([(\" ]\):\1getComputedFeature\2:g
s:\([^A-Za-z0-9_]\)GetComputedFeatures\([(\" ]\):\1getComputedFeatures\2:g
s:\([^A-Za-z0-9_]\)GetCurrentDatabaseVersion\([(\" ]\):\1getCurrentDatabaseVersion\2:g
s:\([^A-Za-z0-9_]\)GetDefault\([(\" ]\):\1getDefault\2:g
s:\([^A-Za-z0-9_]\)GetEMdFComparison\([(\" ]\):\1getEMdFComparison\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFFactor\([(\" ]\):\1getEMdFFFactor\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFFeatures\([(\" ]\):\1getEMdFFFeatures\2:g
s:\([^A-Za-z0-9_]\)GetEMdFFTerm\([(\" ]\):\1getEMdFFTerm\2:g
s:\([^A-Za-z0-9_]\)GetEVkindFromTypeID_D\([(\" ]\):\1getEVkindFromTypeID_D\2:g
s:\([^A-Za-z0-9_]\)GetEnumConstNameFromValue\([(\" ]\):\1getEnumConstNameFromValue\2:g
s:\([^A-Za-z0-9_]\)GetEnumConstants\([(\" ]\):\1getEnumConstants\2:g
s:\([^A-Za-z0-9_]\)GetEnumerations\([(\" ]\):\1getEnumerations\2:g
s:\([^A-Za-z0-9_]\)GetFeatures\([(\" ]\):\1getFeatures\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesByQuery\([(\" ]\):\1getFeaturesByQuery\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesByQueryExec\([(\" ]\):\1getFeaturesByQueryExec\2:g
s:\([^A-Za-z0-9_]\)GetFeaturesForObjectType\([(\" ]\):\1getFeaturesForObjectType\2:g
s:\([^A-Za-z0-9_]\)GetInst\([(\" ]\):\1getInst\2:g
s:\([^A-Za-z0-9_]\)GetLastInsertRowID\([(\" ]\):\1getLastInsertRowID\2:g
s:\([^A-Za-z0-9_]\)GetMonadsFromID_D\([(\" ]\):\1getMonadsFromID_D\2:g
s:\([^A-Za-z0-9_]\)GetMonadsFromID_Ds\([(\" ]\):\1getMonadsFromID_Ds\2:g
s:\([^A-Za-z0-9_]\)GetNextID\([(\" ]\):\1getNextID\2:g
s:\([^A-Za-z0-9_]\)GetNextObjectID_D\([(\" ]\):\1getNextObjectID_D\2:g
s:\([^A-Za-z0-9_]\)GetNextOtherID\([(\" ]\):\1getNextOtherID\2:g
s:\([^A-Za-z0-9_]\)GetNextTuple\([(\" ]\):\1getNextTuple\2:g
s:\([^A-Za-z0-9_]\)GetOTGutOrObjects\([(\" ]\):\1getOTGutOrObjects\2:g
s:\([^A-Za-z0-9_]\)GetOTHasSingleRangeObjects\([(\" ]\):\1getOTHasSingleRangeObjects\2:g
s:\([^A-Za-z0-9_]\)GetObjectTypes\([(\" ]\):\1getObjectTypes\2:g
s:\([^A-Za-z0-9_]\)GetObjectTypesUsingEnumeration\([(\" ]\):\1getObjectTypesUsingEnumeration\2:g
s:\([^A-Za-z0-9_]\)GetObjectsAtM\([(\" ]\):\1getObjectsAtM\2:g
s:\([^A-Za-z0-9_]\)GetObjectsByMonads\([(\" ]\):\1getObjectsByMonads\2:g
s:\([^A-Za-z0-9_]\)GetObjectsHavingMonadsInMonadSet\([(\" ]\):\1getObjectsHavingMonadsInMonadSet\2:g
s:\([^A-Za-z0-9_]\)GetObjectsStartingAtSm\([(\" ]\):\1getObjectsStartingAtSm\2:g
s:\([^A-Za-z0-9_]\)GetObjectsWithinMonads\([(\" ]\):\1getObjectsWithinMonads\2:g
s:\([^A-Za-z0-9_]\)GetSOMForObject\([(\" ]\):\1getSOMForObject\2:g
s:\([^A-Za-z0-9_]\)GetSchemaVersion\([(\" ]\):\1getSchemaVersion\2:g
s:\([^A-Za-z0-9_]\)Get_all_m_1\([(\" ]\):\1getAll_m_1\2:g
s:\([^A-Za-z0-9_]\)Get_max_m\([(\" ]\):\1getMax_m\2:g
s:\([^A-Za-z0-9_]\)Get_min_m\([(\" ]\):\1getMin_m\2:g
s:\([^A-Za-z0-9_]\)HasFirstLast\([(\" ]\):\1hasFirstLast\2:g
s:\([^A-Za-z0-9_]\)HasRow\([(\" ]\):\1hasRow\2:g
s:\([^A-Za-z0-9_]\)Hat\([(\" ]\):\1hat\2:g
s:\([^A-Za-z0-9_]\)InsertMonads\([(\" ]\):\1insertMonads\2:g
s:\([^A-Za-z0-9_]\)Join\([(\" ]\):\1join\2:g
s:\([^A-Za-z0-9_]\)JoinTakeOver\([(\" ]\):\1joinAndTakeOver\2:g
s:\([^A-Za-z0-9_]\)LoadEnumConstantsIntoCache\([(\" ]\):\1loadEnumConstantsIntoCache\2:g
s:\([^A-Za-z0-9_]\)MakeFeatureSQLType\([(\" ]\):\1makeFeatureSQLType\2:g
s:\([^A-Za-z0-9_]\)MakeMonadConstraintsFromSOM\([(\" ]\):\1makeMonadConstraintsFromSOM\2:g
s:\([^A-Za-z0-9_]\)MayCOPY\([(\" ]\):\1mayCOPY\2:g
s:\([^A-Za-z0-9_]\)MonadSetExists\([(\" ]\):\1monadSetExists\2:g
s:\([^A-Za-z0-9_]\)Monad_Set_Element:\1MonadSetElement:g
s:\([^A-Za-z0-9_]\)MonadsBuildSet\([(\" ]\):\1monadsBuildSet\2:g
s:\([^A-Za-z0-9_]\)MoveSequenceValue110\([(\" ]\):\1moveSequenceValue110\2:g
s:\([^A-Za-z0-9_]\)MoveSequenceValue118\([(\" ]\):\1moveSequenceValue118\2:g
s:\([^A-Za-z0-9_]\)MyExec\([(\" ]\):\1myExec\2:g
s:\([^A-Za-z0-9_]\)Exec\([(\" ]\):\1exec\2:g
s:\([^A-Za-z0-9_]\)MyMonads\([(\" ]\):\1myMonads\2:g
s:\([^A-Za-z0-9_]\)MySymbol\([(\" ]\):\1mySymbol\2:g
s:\([^A-Za-z0-9_]\)MyType\([(\" ]\):\1myType\2:g
s:\([^A-Za-z0-9_]\)MyWeed\([(\" ]\):\1myWeed\2:g
s:\([^A-Za-z0-9_]\)NoOfFields\([(\" ]\):\1getNoOfFields\2:g
s:\([^A-Za-z0-9_]\)NoOfResultTuples\([(\" ]\):\1noOfResultTuples\2:g
s:\([^A-Za-z0-9_]\)NormalizeOTName\([(\" ]\):\1normalizeOTName\2:g
s:\([^A-Za-z0-9_]\)ObjectID_DExists\([(\" ]\):\1objectID_DExists\2:g
s:\([^A-Za-z0-9_]\)ObjectID_DExistsInType\([(\" ]\):\1objectID_DExistsInType\2:g
s:\([^A-Za-z0-9_]\)Print\([(\" ]\):\1out\2:g
s:\([^A-Za-z0-9_]\)PrintConsole\([(\" ]\):\1printConsole\2:g
s:\([^A-Za-z0-9_]\)PrintXML\([(\" ]\):\1printXML\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Header\([(\" ]\):\1printXMLHeader\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Row\([(\" ]\):\1printXMLRow\2:g
s:\([^A-Za-z0-9_]\)PrintXML_Rows\([(\" ]\):\1printXMLRows\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CMQLResult\([(\" ]\):\1printDTDMQLResult\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CSheaf\([(\" ]\):\1printDTDSheaf\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_CTable\([(\" ]\):\1printDTDTable\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_end\([(\" ]\):\1printDTDEnd\2:g
s:\([^A-Za-z0-9_]\)Print_DTD_start\([(\" ]\):\1printDTDStart\2:g
s:\([^A-Za-z0-9_]\)Print_XMLDecl\([(\" ]\):\1printXMLDecl\2:g
s:\([^A-Za-z0-9_]\)RemoveMSE\([(\" ]\):\1removeMSE\2:g
s:\([^A-Za-z0-9_]\)Restrict\([(\" ]\):\1restrict\2:g
s:\([^A-Za-z0-9_]\)SelectMonadSets\([(\" ]\):\1selectMonadSets\2:g
s:\([^A-Za-z0-9_]\)SetDefaultEnumConst\([(\" ]\):\1setDefaultEnumConst\2:g
s:\([^A-Za-z0-9_]\)SetNextObjectID_DIfNotHigher\([(\" ]\):\1setNextObjectID_DIfNotHigher\2:g
s:\([^A-Za-z0-9_]\)SetSchemaVersion\([(\" ]\):\1setSchemaVersion\2:g
s:\([^A-Za-z0-9_]\)Set_max_m\([(\" ]\):\1setMax_m\2:g
s:\([^A-Za-z0-9_]\)Set_min_m\([(\" ]\):\1setMin_m\2:g
s:\([^A-Za-z0-9_]\)Set_min_max_m_from_object_type\([(\" ]\):\1setMin_max_m_fromObjectType\2:g
s:\([^A-Za-z0-9_]\)Set_min_max_m_from_object_types\([(\" ]\):\1setMin_max_m_fromObjectTypes\2:g
s:\([^A-Za-z0-9_]\)ShutdownConnection\([(\" ]\):\1shutdownConnection\2:g
s:\([^A-Za-z0-9_]\)Symbol\([(\" ]\):\1symbol\2:g
s:\([^A-Za-z0-9_]\)SymbolAddFeatures\([(\" ]\):\1symbolAddFeatures\2:g
s:\([^A-Za-z0-9_]\)SymbolAddToObject\([(\" ]\):\1symbolAddToObject\2:g
s:\([^A-Za-z0-9_]\)SymbolAllAreOfSameType\([(\" ]\):\1symbolAllAreOfSameType\2:g
s:\([^A-Za-z0-9_]\)SymbolAllFeaturesMustBeAssigned\([(\" ]\):\1symbolAllFeaturesMustBeAssigned\2:g
s:\([^A-Za-z0-9_]\)SymbolAllFeaturesMustExist\([(\" ]\):\1symbolAllFeaturesMustExist\2:g
s:\([^A-Za-z0-9_]\)SymbolAssignValues\([(\" ]\):\1symbolAssignValues\2:g
s:\([^A-Za-z0-9_]\)SymbolAssignValuesPrivate\([(\" ]\):\1symbolAssignValuesPrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolCheckNoTwoValuesSamePrivate\([(\" ]\):\1symbolCheckNoTwoValuesSamePrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolConstantExistence\([(\" ]\):\1symbolExistenceOfConstants\2:g
s:\([^A-Za-z0-9_]\)SymbolDefaultIsRemoved\([(\" ]\):\1symbolDefaultIsRemoved\2:g
s:\([^A-Za-z0-9_]\)SymbolDoLocalUpdatePrivate\([(\" ]\):\1symbolDoLocalUpdatePrivate\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumConstantsExist\([(\" ]\):\1symbolEnumConstantsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerationExists\([(\" ]\):\1symbolEnumerationExists\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerations\([(\" ]\):\1symbolEnumerations\2:g
s:\([^A-Za-z0-9_]\)SymbolEnumerationsExist\([(\" ]\):\1symbolEnumerationsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolExistenceOfConstants\([(\" ]\):\1symbolExistenceOfConstants\2:g
s:\([^A-Za-z0-9_]\)SymbolExistenceOfFeatures\([(\" ]\):\1symbolExistenceOfFeatures\2:g
s:\([^A-Za-z0-9_]\)SymbolFeaturesExist\([(\" ]\):\1symbolFeaturesExist\2:g
s:\([^A-Za-z0-9_]\)SymbolFeaturesMustNotExist\([(\" ]\):\1symbolFeaturesMustNotExist\2:g
s:\([^A-Za-z0-9_]\)SymbolNoFeatureMayBeComputed\([(\" ]\):\1symbolNoFeatureMayBeComputed\2:g
s:\([^A-Za-z0-9_]\)SymbolNoTwoValuesSame\([(\" ]\):\1symbolNoTwoValuesSame\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectTypeExists\([(\" ]\):\1symbolObjectTypeExists\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectsExist\([(\" ]\):\1symbolObjectsExist\2:g
s:\([^A-Za-z0-9_]\)SymbolObjectsExistInType\([(\" ]\):\1symbolObjectsExistInType\2:g
s:\([^A-Za-z0-9_]\)SymbolValueMoreThanOnce\([(\" ]\):\1symbolValueMoreThanOnce\2:g
s:\([^A-Za-z0-9_]\)SymbolValueMoreThanOncePrivate\([(\" ]\):\1symbolValueMoreThanOncePrivate\2:g
s:\([^A-Za-z0-9_]\)TableExists\([(\" ]\):\1tableExists\2:g
s:\([^A-Za-z0-9_]\)ToString\([(\" ]\):\1toString\2:g
s:\([^A-Za-z0-9_]\)TypeAssignTypeID\([(\" ]\):\1typeAssignTypeID\2:g
s:\([^A-Za-z0-9_]\)TypeAssignTypes\([(\" ]\):\1typeAssignTypes\2:g
s:\([^A-Za-z0-9_]\)TypeFeatureName\([(\" ]\):\1typeFeatureName\2:g
s:\([^A-Za-z0-9_]\)Type_id_to_string\([(\" ]\):\1ypeIdToString\2:g
s:\([^A-Za-z0-9_]\)Type_id_to_TableColumnType\([(\" ]\):\1typeIdToTableColumnType\2:
s:\([^A-Za-z0-9_]\)TypeTypeCompatibility\([(\" ]\):\1typeTypeCompatibility\2:g
s:\([^A-Za-z0-9_]\)UpdateEnumConst\([(\" ]\):\1updateEnumConst\2:g
s:\([^A-Za-z0-9_]\)UpdateObject\([(\" ]\):\1updateObject\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabase\([(\" ]\):\1upgradeDatabase\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo110\([(\" ]\):\1upgradeDatabaseTo110\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo115\([(\" ]\):\1upgradeDatabaseTo115\2:g
s:\([^A-Za-z0-9_]\)UpgradeDatabaseTo118\([(\" ]\):\1upgradeDatabaseTo118\2:g
s:\([^A-Za-z0-9_]\)UpgradeObjectTypeTo110\([(\" ]\):\1upgradeObjectTypeTo110\2:g
s:\([^A-Za-z0-9_]\)UseDatabase\([(\" ]\):\1useDatabase\2:g
s:\([^A-Za-z0-9_]\)Vacuum\([(\" ]\):\1vacuum\2:g
s:\([^A-Za-z0-9_]\)VacuumObjectType\([(\" ]\):\1vacuumObjectType\2:g
s:\([^A-Za-z0-9_]\)Weed\([(\" ]\):\1weed\2:g
s:\([^A-Za-z0-9_]\)WeedDefault\([(\" ]\):\1weedDefault\2:g
s:\([^A-Za-z0-9_]\)WeedDefaultPrivate\([(\" ]\):\1weedDefaultPrivate\2:g
s:\([^A-Za-z0-9_]\)WeedFirstLast\([(\" ]\):\1weedFirstLast\2:g
s:\([^A-Za-z0-9_]\)WeedGET\([(\" ]\):\1weedGET\2:g
s:\([^A-Za-z0-9_]\)WeedMonotonic\([(\" ]\):\1weedMonotonic\2:g
s:\([^A-Za-z0-9_]\)WeedNoneIsNIL\([(\" ]\):\1weedNoneIsNIL\2:g
s:\([^A-Za-z0-9_]\)WeedObjectTypeNameNotSpecial\([(\" ]\):\1weedObjectTypeNameNotSpecial\2:g
s:\([^A-Za-z0-9_]\)WeedPositive\([(\" ]\):\1weedPositive\2:g
s:\([^A-Za-z0-9_]\)WeedSelfNotAssigned\([(\" ]\):\1weedSelfNotAssigned\2:g
s:\([^A-Za-z0-9_]\)WeedSelfNotDeclared\([(\" ]\):\1weedSelfNotDeclared\2:g
s:\([^A-Za-z0-9_]\)WeedTildeOperator\([(\" ]\):\1weedTildeOperator\2:g
s:\([^A-Za-z0-9_]\)add_EMdFValue\([(\" ]\):\1addEMdFValue\2:g
s:\([^A-Za-z0-9_]\)add_eci\([(\" ]\):\1addEci\2:g
s:\([^A-Za-z0-9_]\)add_enum\([(\" ]\):\1addEnum\2:g
s:\([^A-Za-z0-9_]\)add_enum_const_to_cache\([(\" ]\):\1addEnumConstToCache\2:g
s:\([^A-Za-z0-9_]\)add_enum_to_cache\([(\" ]\):\1addEnumToCache\2:g
s:\([^A-Za-z0-9_]\)add_feature\([(\" ]\):\1addFeature\2:g
s:\([^A-Za-z0-9_]\)add_feature_to_cache\([(\" ]\):\1addFeatureToCache\2:g
s:\([^A-Za-z0-9_]\)add_feature_to_cache_if_not_already_there\([(\" ]\):\1addFeatureToCacheIfNotAlreadyThere\2:g
s:\([^A-Za-z0-9_]\)add_mse\([(\" ]\):\1addMse\2:g
s:\([^A-Za-z0-9_]\)add_object\([(\" ]\):\1addObject\2:g
s:\([^A-Za-z0-9_]\)add_object_type_to_cache\([(\" ]\):\1addObjectTypeToCache\2:g
s:\([^A-Za-z0-9_]\)add_stringlist_nodes\([(\" ]\):\1addStringListNodes\2:g
s:\([^A-Za-z0-9_]\)add_value\([(\" ]\):\1addValue\2:g
s:\([^A-Za-z0-9_]\)append_and_subsume\([(\" ]\):\1appendAndSubsume\2:g
s:\([^A-Za-z0-9_]\)append_header\([(\" ]\):\1appendHeader\2:g
s:\([^A-Za-z0-9_]\)append_local_error\([(\" ]\):\1appendLocalError\2:g
s:\([^A-Za-z0-9_]\)big_union\([(\" ]\):\1bigUnion\2:g
s:\([^A-Za-z0-9_]\)calculate_characteristic_string\([(\" ]\):\1calculateCharacteristicString\2:g
s:\([^A-Za-z0-9_]\)calculate_pre_query_string\([(\" ]\):\1calculatePreQueryString\2:g
s:\([^A-Za-z0-9_]\)clear_errors\([(\" ]\):\1clearErrors\2:g
s:\([^A-Za-z0-9_]\)clear_local_error\([(\" ]\):\1clearLocalError\2:g
s:\([^A-Za-z0-9_]\)compare_int\([(\" ]\):\1compareInt\2:g
s:\([^A-Za-z0-9_]\)compare_string\([(\" ]\):\1compareString\2:g
s:\([^A-Za-z0-9_]\)copy_MO\([(\" ]\):\1copyMO\2:g
s:\([^A-Za-z0-9_]\)copy_other\([(\" ]\):\1copyOther\2:g
s:\([^A-Za-z0-9_]\)create_headers\([(\" ]\):\1createHeaders\2:g
s:\([^A-Za-z0-9_]\)decode_feature_name\([(\" ]\):\1decodeFeatureName\2:g
s:\([^A-Za-z0-9_]\)decrease_indent\([(\" ]\):\1decreaseIndent\2:g
s:\([^A-Za-z0-9_]\)delete_contents\([(\" ]\):\1deleteContents\2:g
s:\([^A-Za-z0-9_]\)delete_mos\([(\" ]\):\1deleteMos\2:g
s:\([^A-Za-z0-9_]\)delete_object_type_from_cache\([(\" ]\):\1deleteObjectTypeFromCache\2:g
s:\([^A-Za-z0-9_]\)delete_straws\([(\" ]\):\1deleteStraws\2:g
s:\([^A-Za-z0-9_]\)dump_results\([(\" ]\):\1dumpResults\2:g
s:\([^A-Za-z0-9_]\)dump_results_all\([(\" ]\):\1dumpResultsAll\2:g
s:\([^A-Za-z0-9_]\)emit_attributes\([(\" ]\):\1emitAttributes\2:g
s:\([^A-Za-z0-9_]\)emit_horizontal_line\([(\" ]\):\1emitHorizontalLine\2:g
s:\([^A-Za-z0-9_]\)encode_feature_name\([(\" ]\):\1encodeFeatureName\2:g
s:\([^A-Za-z0-9_]\)encode_feature_name_for_prequery_string\([(\" ]\):\1encodeFeatureNameForPrequeryString\2:g
s:\([^A-Za-z0-9_]\)encrypt_string\([(\" ]\):\1encryptString\2:g
s:\([^A-Za-z0-9_]\)end_tag\([(\" ]\):\1endTag\2:g
s:\([^A-Za-z0-9_]\)enum_const_info:\1EnumConstInfo:g
s:^enum_const_info:EnumConstInfo:g
s:\([^A-Za-z0-9_]\)execute_file\([(\" ]\):\1executeFile\2:g
s:\([^A-Za-z0-9_]\)execute_stream\([(\" ]\):\1executeStream\2:g
s:\([^A-Za-z0-9_]\)execute_string\([(\" ]\):\1executeString\2:g
s:\([^A-Za-z0-9_]\)extend_with_me\([(\" ]\):\1extendWithMe\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_ASCII\([(\" ]\):\1featureTypeIdIsASCII\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_ENUM\([(\" ]\):\1featureTypeIdIsENUM\2:g
s:\([^A-Za-z0-9_]\)feature_type_id_is_STRING\([(\" ]\):\1featureTypeIdIsSTRING\2:g
s:\([^A-Za-z0-9_]\)fill_gaps\([(\" ]\):\1fillGaps\2:g
s:\([^A-Za-z0-9_]\)gap_exists\([(\" ]\):\1gapExists\2:g
s:\([^A-Za-z0-9_]\)get_DB_error\([(\" ]\):\1getDBError\2:g
s:\([^A-Za-z0-9_]\)get_EMdFValue\([(\" ]\):\1getEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_EMdFValue_index\([(\" ]\):\1getEMdFValueIndex\2:g
s:\([^A-Za-z0-9_]\)get_Enumeration\([(\" ]\):\1getEnumeration\2:g
s:\([^A-Za-z0-9_]\)get_Next\([(\" ]\):\1getNext\2:g
s:\([^A-Za-z0-9_]\)get_as_EMdFValue\([(\" ]\):\1getAsEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_as_string\([(\" ]\):\1getAsString\2:g
s:\([^A-Za-z0-9_]\)get_block\([(\" ]\):\1getBlock\2:g
s:\([^A-Za-z0-9_]\)get_block_str\([(\" ]\):\1getBlockStr\2:g
s:\([^A-Za-z0-9_]\)get_block_string\([(\" ]\):\1getBlockString\2:g
s:\([^A-Za-z0-9_]\)get_characteristic_string\([(\" ]\):\1getCharacteristicString\2:g
s:\([^A-Za-z0-9_]\)get_column\([(\" ]\):\1getColumn\2:g
s:\([^A-Za-z0-9_]\)get_comparison_op\([(\" ]\):\1getComparisonOp\2:g
s:\([^A-Za-z0-9_]\)get_compiler_error\([(\" ]\):\1getCompilerError\2:g
s:\([^A-Za-z0-9_]\)get_const_reference\([(\" ]\):\1getConstReference\2:g
s:\([^A-Za-z0-9_]\)get_constraints\([(\" ]\):\1getConstraints\2:g
s:\([^A-Za-z0-9_]\)get_content\([(\" ]\):\1getContent\2:g
s:\([^A-Za-z0-9_]\)get_copy_of_mo\([(\" ]\):\1getCopyOfMo\2:g
s:\([^A-Za-z0-9_]\)get_default\([(\" ]\):\1getDefault\2:g
s:\([^A-Za-z0-9_]\)get_default_password\([(\" ]\):\1getDefaultPassword\2:g
s:\([^A-Za-z0-9_]\)get_default_specification\([(\" ]\):\1getDefaultSpecification\2:g
s:\([^A-Za-z0-9_]\)get_default_value\([(\" ]\):\1getDefaultValue\2:g
s:\([^A-Za-z0-9_]\)get_ec_initialization\([(\" ]\):\1getEcInitialization\2:g
s:\([^A-Za-z0-9_]\)get_ec_name\([(\" ]\):\1getEcName\2:g
s:\([^A-Za-z0-9_]\)get_emdf_value\([(\" ]\):\1getEMdFValue\2:g
s:\([^A-Za-z0-9_]\)get_enum\([(\" ]\):\1getEnum\2:g
s:\([^A-Za-z0-9_]\)get_enum_const\([(\" ]\):\1getEnumConst\2:g
s:\([^A-Za-z0-9_]\)get_enum_id\([(\" ]\):\1getEnumId\2:g
s:\([^A-Za-z0-9_]\)get_enum_name_from_index\([(\" ]\):\1getEnumNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_enum_value\([(\" ]\):\1getEnumValue\2:g
s:\([^A-Za-z0-9_]\)get_expression\([(\" ]\):\1getExpression\2:g
s:\([^A-Za-z0-9_]\)get_feature\([(\" ]\):\1getFeature\2:g
s:\([^A-Za-z0-9_]\)get_feature_addition\([(\" ]\):\1getFeatureAddition\2:g
s:\([^A-Za-z0-9_]\)get_feature_assignments\([(\" ]\):\1getFeatureAssignments\2:g
s:\([^A-Za-z0-9_]\)get_feature_comparison\([(\" ]\):\1getFeatureComparison\2:g
s:\([^A-Za-z0-9_]\)get_feature_constraints\([(\" ]\):\1getFeatureConstraints\2:g
s:\([^A-Za-z0-9_]\)get_feature_index\([(\" ]\):\1getFeatureIndex\2:g
s:\([^A-Za-z0-9_]\)get_feature_index_db\([(\" ]\):\1getFeatureIndexDB\2:g
s:\([^A-Za-z0-9_]\)get_feature_index_inst\([(\" ]\):\1getFeatureIndexInst\2:g
s:\([^A-Za-z0-9_]\)get_feature_info\([(\" ]\):\1getFeatureInfo\2:g
s:\([^A-Za-z0-9_]\)get_feature_infos\([(\" ]\):\1getFeatureInfos\2:g
s:\([^A-Za-z0-9_]\)get_feature_name\([(\" ]\):\1getFeatureName\2:g
s:\([^A-Za-z0-9_]\)get_feature_name_from_index\([(\" ]\):\1getFeatureNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_feature_names\([(\" ]\):\1getFeatureNames\2:g
s:\([^A-Za-z0-9_]\)get_feature_removal\([(\" ]\):\1getFeatureRemoval\2:g
s:\([^A-Za-z0-9_]\)get_feature_retrieval\([(\" ]\):\1getFeatureRetrieval\2:g
s:\([^A-Za-z0-9_]\)get_feature_type_id\([(\" ]\):\1getFeatureTypeId\2:g
s:\([^A-Za-z0-9_]\)get_feature_value\([(\" ]\):\1getFeatureValue\2:g
s:\([^A-Za-z0-9_]\)get_feature_value_arr_size\([(\" ]\):\1getFeatureValueArrSize\2:g
s:\([^A-Za-z0-9_]\)get_ffactor\([(\" ]\):\1getFFactor\2:g
s:\([^A-Za-z0-9_]\)get_ffeatures\([(\" ]\):\1getFFeatures\2:g
s:\([^A-Za-z0-9_]\)get_first_last\([(\" ]\):\1getFirstLast\2:g
s:\([^A-Za-z0-9_]\)get_focus\([(\" ]\):\1getFocus\2:g
s:\([^A-Za-z0-9_]\)get_fterm\([(\" ]\):\1getFTerm\2:g
s:\([^A-Za-z0-9_]\)get_gap_block\([(\" ]\):\1getGapBlock\2:g
s:\([^A-Za-z0-9_]\)get_gap_vector\([(\" ]\):\1getGapVector\2:g
s:\([^A-Za-z0-9_]\)get_has_single_range_objects\([(\" ]\):\1getHasSingleRangeObjects\2:g
s:\([^A-Za-z0-9_]\)get_id_d\([(\" ]\):\1getId_d\2:g
s:\([^A-Za-z0-9_]\)get_identifier\([(\" ]\):\1getIdentifier\2:g
s:\([^A-Za-z0-9_]\)get_index\([(\" ]\):\1getIndex\2:g
s:\([^A-Za-z0-9_]\)get_index_in_symboltable\([(\" ]\):\1getIndexInSymboltable\2:g
s:\([^A-Za-z0-9_]\)get_index_in_symboltable_entry\([(\" ]\):\1getIndexInSymboltableEntry\2:g
s:\([^A-Za-z0-9_]\)get_int\([(\" ]\):\1getInt\2:g
s:\([^A-Za-z0-9_]\)get_integer\([(\" ]\):\1getInteger\2:g
s:\([^A-Za-z0-9_]\)get_is_computed\([(\" ]\):\1getIsComputed\2:g
s:\([^A-Za-z0-9_]\)get_is_default\([(\" ]\):\1getIsDefault\2:g
s:\([^A-Za-z0-9_]\)get_kind\([(\" ]\):\1getKind\2:g
s:\([^A-Za-z0-9_]\)get_last\([(\" ]\):\1getLast\2:g
s:\([^A-Za-z0-9_]\)get_last_compiler_stage\([(\" ]\):\1getLastCompilerStage\2:g
s:\([^A-Za-z0-9_]\)get_last_kind\([(\" ]\):\1getLastKind\2:g
s:\([^A-Za-z0-9_]\)get_leftmost_object_block_first\([(\" ]\):\1getLeftmostObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)get_leftmost_object_type_name\([(\" ]\):\1getLeftmostObjectTypeName\2:g
s:\([^A-Za-z0-9_]\)get_limit\([(\" ]\):\1getLimit\2:g
s:\([^A-Za-z0-9_]\)get_local_error\([(\" ]\):\1getLocalError\2:g
s:\([^A-Za-z0-9_]\)get_max_lengths\([(\" ]\):\1getMaxLengths\2:g
s:\([^A-Za-z0-9_]\)get_max_lengths_all\([(\" ]\):\1getMaxLengthsAll\2:g
s:\([^A-Za-z0-9_]\)get_monad_m_vector\([(\" ]\):\1getMonad_mVector\2:g
s:\([^A-Za-z0-9_]\)get_monad_ms_list\([(\" ]\):\1getMonad_msList\2:g
s:\([^A-Za-z0-9_]\)get_monads\([(\" ]\):\1getMonads\2:g
s:\([^A-Za-z0-9_]\)get_mse_first\([(\" ]\):\1getMseFirst\2:g
s:\([^A-Za-z0-9_]\)get_mse_last\([(\" ]\):\1getMseLast\2:g
s:\([^A-Za-z0-9_]\)get_name\([(\" ]\):\1getName\2:g
s:\([^A-Za-z0-9_]\)get_nr\([(\" ]\):\1getNr\2:g
s:\([^A-Za-z0-9_]\)get_object\([(\" ]\):\1getObject\2:g
s:\([^A-Za-z0-9_]\)get_object_block\([(\" ]\):\1getObjectBlock\2:g
s:\([^A-Za-z0-9_]\)get_object_block_first\([(\" ]\):\1getObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)get_object_reference\([(\" ]\):\1getObjectReference\2:g
s:\([^A-Za-z0-9_]\)get_object_reference_index\([(\" ]\):\1getObjectReferenceIndex\2:g
s:\([^A-Za-z0-9_]\)get_object_reference_usage\([(\" ]\):\1getObjectReferenceUsage\2:g
s:\([^A-Za-z0-9_]\)get_object_type_id\([(\" ]\):\1getObjectTypeId\2:g
s:\([^A-Za-z0-9_]\)get_object_type_index\([(\" ]\):\1getOTIndex\2:g
s:\([^A-Za-z0-9_]\)get_object_type_name\([(\" ]\):\1getObjectTypeName\2:g
s:\([^A-Za-z0-9_]\)get_object_type_name_from_index\([(\" ]\):\1getOTNameFromIndex\2:g
s:\([^A-Za-z0-9_]\)get_operator\([(\" ]\):\1get_operator\2:g
s:\([^A-Za-z0-9_]\)get_opt_blocks\([(\" ]\):\1getOptBlocks\2:g
s:\([^A-Za-z0-9_]\)get_opt_ec_initialization\([(\" ]\):\1getOptEcInitialization\2:g
s:\([^A-Za-z0-9_]\)get_opt_gap_block\([(\" ]\):\1getOptGapBlock\2:g
s:\([^A-Za-z0-9_]\)get_output_kind\([(\" ]\):\1getOutputKind\2:g
s:\([^A-Za-z0-9_]\)get_power\([(\" ]\):\1getPower\2:g
s:\([^A-Za-z0-9_]\)get_pre_query_string\([(\" ]\):\1getPreQueryString\2:g
s:\([^A-Za-z0-9_]\)get_rest_of_block_str\([(\" ]\):\1getRestOfBlockStr\2:g
s:\([^A-Za-z0-9_]\)get_result\([(\" ]\):\1getResult\2:g
s:\([^A-Za-z0-9_]\)get_retrieval\([(\" ]\):\1getRetrieval\2:g
s:\([^A-Za-z0-9_]\)get_set\([(\" ]\):\1getSet\2:g
s:\([^A-Za-z0-9_]\)get_sheaf\([(\" ]\):\1getSheaf\2:g
s:\([^A-Za-z0-9_]\)get_string\([(\" ]\):\1getString\2:g
s:\([^A-Za-z0-9_]\)get_table\([(\" ]\):\1getTable\2:g
s:\([^A-Za-z0-9_]\)get_type\([(\" ]\):\1getType\2:g
s:\([^A-Za-z0-9_]\)get_type_id\([(\" ]\):\1getTypeId\2:g
s:\([^A-Za-z0-9_]\)get_value\([(\" ]\):\1getValue\2:g
s:\([^A-Za-z0-9_]\)has_EMPTY_mo\([(\" ]\):\1hasEmpty_mo\2:g
s:\([^A-Za-z0-9_]\)has_NIL_mo\([(\" ]\):\1hasNil_mo\2:g
s:\([^A-Za-z0-9_]\)has_default\([(\" ]\):\1hasDefault\2:g
s:\([^A-Za-z0-9_]\)has_enum\([(\" ]\):\1hasEnum\2:g
s:\([^A-Za-z0-9_]\)has_opt_ec_initialization\([(\" ]\):\1hasOptEcInitialization\2:g
s:\([^A-Za-z0-9_]\)increase_indent\([(\" ]\):\1increaseIndent\2:g
s:\([^A-Za-z0-9_]\)insert_after\([(\" ]\):\1insertAfter\2:g
s:\([^A-Za-z0-9_]\)insert_before\([(\" ]\):\1insertBefore\2:g
s:\([^A-Za-z0-9_]\)is_EMPTY_mo\([(\" ]\):\1isEmpty_mo\2:g
s:\([^A-Za-z0-9_]\)is_NIL_mo\([(\" ]\):\1isNil_mo\2:g
s:\([^A-Za-z0-9_]\)is_NOT\([(\" ]\):\1isNOT\2:g
s:\([^A-Za-z0-9_]\)is_aggregate\([(\" ]\):\1isAggregate\2:g
s:\([^A-Za-z0-9_]\)is_block\([(\" ]\):\1isBlock\2:g
s:\([^A-Za-z0-9_]\)is_block_str\([(\" ]\):\1isBlockStr\2:g
s:\([^A-Za-z0-9_]\)is_empty\([(\" ]\):\1isEmpty\2:g
s:\([^A-Za-z0-9_]\)is_fail\([(\" ]\):\1isFail\2:g
s:\([^A-Za-z0-9_]\)is_feature_comparison\([(\" ]\):\1isFeatureComparison\2:g
s:\([^A-Za-z0-9_]\)is_ffactor\([(\" ]\):\1isFFactor\2:g
s:\([^A-Za-z0-9_]\)is_fterm\([(\" ]\):\1isFTerm\2:g
s:\([^A-Za-z0-9_]\)is_gap_or_opt_gap_block\([(\" ]\):\1isGapOrOptGapBlock\2:g
s:\([^A-Za-z0-9_]\)is_member_of\([(\" ]\):\1isMemberOf\2:g
s:\([^A-Za-z0-9_]\)is_object_block_first\([(\" ]\):\1isObjectBlockFirst\2:g
s:\([^A-Za-z0-9_]\)is_parenthesis\([(\" ]\):\1isParenthesis\2:g
s:\([^A-Za-z0-9_]\)kDB:\1kDb:g
s:\([^A-Za-z0-9_]\)kIN:\1kIn:g
s:\([^A-Za-z0-9_]\)list_has_feature\([(\" ]\):\1listHasFeature\2:g
s:\([^A-Za-z0-9_]\)log_write\([(\" ]\):\1logWrite\2:g
s:\([^A-Za-z0-9_]\)log_write_time\([(\" ]\):\1logWriteTime\2:g
s:\([^A-Za-z0-9_]\)make_constraints\([(\" ]\):\1makeConstraints\2:g
s:\([^A-Za-z0-9_]\)make_empty\([(\" ]\):\1makeEmpty\2:g
s:\([^A-Za-z0-9_]\)make_inst\([(\" ]\):\1makeInst\2:g
s:\([^A-Za-z0-9_]\)mql_append_error\([(\" ]\):\1appendError\2:g
s:\([^A-Za-z0-9_]\)mql_clear_error\([(\" ]\):\1clearError\2:g
s:\([^A-Za-z0-9_]\)mql_execute_file\([(\" ]\):\1mqlExecuteFile\2:g
s:\([^A-Za-z0-9_]\)mql_execute_stream\([(\" ]\):\1mqlExecuteStream\2:g
s:\([^A-Za-z0-9_]\)mql_execute_string\([(\" ]\):\1mqlExecuteString\2:g
s:\([^A-Za-z0-9_]\)mql_get_error\([(\" ]\):\1getError\2:g
s:\([^A-Za-z0-9_]\)mql_prepend_error\([(\" ]\):\1prependError\2:g
s:\([^A-Za-z0-9_]\)mql_set_error\([(\" ]\):\1setError\2:g
s:\([^A-Za-z0-9_]\)object_type_info:\1ObjectTypeInfo:g
s:^object_type_info:ObjectTypeInfo:g
s:\([^A-Za-z0-9_]\)objects_at_Sm\([(\" ]\):\1objectsAtSm\2:g
s:\([^A-Za-z0-9_]\)out_char_data\([(\" ]\):\1outCharData\2:g
s:\([^A-Za-z0-9_]\)prepend_and_take_over\([(\" ]\):\1prependAndTakeOver\2:g
s:\([^A-Za-z0-9_]\)prepend_with_me\([(\" ]\):\1prependWithMe\2:g
s:\([^A-Za-z0-9_]\)print_DTD\([(\" ]\):\1printDTD\2:g
s:\([^A-Za-z0-9_]\)print_DTD_end\([(\" ]\):\1printDTDend\2:g
s:\([^A-Za-z0-9_]\)print_DTD_start\([(\" ]\):\1printDTDstart\2:g
s:\([^A-Za-z0-9_]\)print_XMLDecl\([(\" ]\):\1printXMLDecl\2:g
s:\([^A-Za-z0-9_]\)put_Console\([(\" ]\):\1printConsole\2:g
s:\([^A-Za-z0-9_]\)put_XML\([(\" ]\):\1printXML\2:g
s:\([^A-Za-z0-9_]\)remove_mo\([(\" ]\):\1removeMo\2:g
s:\([^A-Za-z0-9_]\)retrieve_feature_values\([(\" ]\):\1retrieveFeatureValues\2:g
s:\([^A-Za-z0-9_]\)set_Next\([(\" ]\):\1setNext\2:g
s:\([^A-Za-z0-9_]\)set_content\([(\" ]\):\1setContent\2:g
s:\([^A-Za-z0-9_]\)set_delete_result\([(\" ]\):\1setDeleteResult\2:g
s:\([^A-Za-z0-9_]\)set_feature\([(\" ]\):\1setFeature\2:g
s:\([^A-Za-z0-9_]\)set_features\([(\" ]\):\1setFeatures\2:g
s:\([^A-Za-z0-9_]\)set_id_d\([(\" ]\):\1setId_d\2:g
s:\([^A-Za-z0-9_]\)set_is_aggregate\([(\" ]\):\1setIsAggregate\2:g
s:\([^A-Za-z0-9_]\)set_is_computed\([(\" ]\):\1setIsComputed\2:g
s:\([^A-Za-z0-9_]\)set_is_default\([(\" ]\):\1setIsDefault\2:g
s:\([^A-Za-z0-9_]\)set_new_default\([(\" ]\):\1setNewDefault\2:g
s:\([^A-Za-z0-9_]\)set_object_reference_index\([(\" ]\):\1setObjectReferenceIndex\2:g
s:\([^A-Za-z0-9_]\)set_success\([(\" ]\):\1setSuccess\2:g
s:\([^A-Za-z0-9_]\)set_value\([(\" ]\):\1setValue\2:g
s:\([^A-Za-z0-9_]\)sheaf_is_empty\([(\" ]\):\1sheafIsEmpty\2:g
s:\([^A-Za-z0-9_]\)start_new_row\([(\" ]\):\1startNewRow\2:g
s:\([^A-Za-z0-9_]\)start_single_tag\([(\" ]\):\1startSingleTag\2:g
s:\([^A-Za-z0-9_]\)start_tag\([(\" ]\):\1startTag\2:g
s:\([^A-Za-z0-9_]\)unencrypt_string\([(\" ]\):\1unencryptString\2:g
s:\([^A-Za-z0-9_]\)union_with\([(\" ]\):\1unionWith\2:g
s:\([^A-Za-z0-9_]\)update_last\([(\" ]\):\1updateLast\2:g
s:\([^A-Za-z0-9_]\)update_row\([(\" ]\):\1updateRow\2:g
s:\([^A-Za-z0-9_]\)update_value\([(\" ]\):\1updateValue\2:g
s:\([^A-Za-z0-9_]\)zero_fill_string\([(\" ]\):\1zeroFillString\2:g
s:\([^A-Za-z0-9_]\)feature_info:\1FeatureInfo:g
s:^feature_info:FeatureInfo:g
s:\([^A-Za-z0-9_]\)Type\([(\" ]\):\1type\2:g
s:\([^A-Za-z0-9_]\)CType:\1MQLType:g
s:^CType:MQLType:g
s:\([^A-Za-z0-9_]\)Next\([(\" ]\):\1getNext\2:g
s:\([^A-Za-z0-9_]\)Monads\([(\" ]\):\1monads\2:g
s:\([^A-Za-z0-9_]\)ObjectTypeExists\([(\" ]\):\1objectTypeExists\2:g


	
2004-07-16  Ulrik Petersen
	
	* Updated algorithm in configure.in to find path to SUNWspro on
	  Solaris. Now uses type instead of which.

============ 1.2.0.pre77 ============

2004-07-15  Ulrik Petersen

	* Upgraded PCRE to version 4.5.

============ 1.2.0.pre76 ============

2004-07-15  Ulrik Petersen

	* Updated algorithm in configure.in to find path to SUNWspro on
	  Solaris.

	* Removed <T,P> after ~CSmartVector in include/smart_vector.h.
	  This was to remove a warning message on Solaris's C++ compiler.

============ 1.2.0.pre75 ============

2004-07-12  Ulrik Petersen

	* djgpp.mak's now don't add -I../sqlite/src to the CXXFLAGS.

	* include/djgpp.mak now copies ..\sqlite\src\sqlite.h to include.

	* MySQLEMdFConnection::Connect() now prints the output of
	  mysql_error(pConn) on error.  Thanks to Chris Wilson for
	  suggesting this change.

============ 1.2.0.pre74 ============

2004-07-11  Ulrik Petersen

	* Added mqlpars.h and mqlflexr.h to rmfiles.sh.

	* Moved mql_parser.cpp.h to mqlpars.h.

	* Moved MQLFlexLexer.h to mqlflexr.h.

	* The header file emdros_version.h was changed to version_emdros.h
	  in include/Makefile.am, include/Makefile.inc, and
	  include/emdf.h.  This was done so as to satisfy DJGPP's 8+3
	  requirements, since there were several files beginning with
	  emdros~*.

	* The header file emdros_environment.h had its contents moved to a
	  new header file, environment_emdros.h.  However, the
	  emdros_environment.h file still works, since it now just
	  #include's environment_emdros.  This was done so as to satisfy
	  DJGPP's requirements for 8+3 names.

	* Lots of header files and .cpp files (and even .template files
	  and .c files) were changed to #ifdef __DJGPP__ or #ifdef DJGPP
	  to take care of including the right stuff on DJGPP.

	* Added support for DJGPP.  The djgpp/ directory was added, and
	  djgpp.mak files were placed in pcre/ include/ sqlite/
	  sqlite/tool sqlite/src EMdF/ MQL/ src/ and tests/.

============ 1.2.0.pre73 ============

2004-07-09  Ulrik Petersen

	* Removed all of Chris Wilson's stuff from the SWIG Perl
	  interface.  See SWIG/perl/test.pl.in for how to use the new
	  interface.  In particular, CStraw_to_array, the typemap to
	  convert a straw to an array, CTable_to_array, and
	  CTable_get_row_col have been removed.  Also, emdros_types.i has
	  been merged into plemdros.i.

	* Added full SWIG Perl support for CTable and its iterators.

	* Added full SWIG Perl support for sheaf.  All the access
	  functions on CMatched_object, CStraw, CList_of_straw, CSheaf,
	  StrawConstIterator, and SheafConstIterator which access sheaf
	  datastructures now return blessed objects of the right kind.

============ 1.2.0.pre72 ============

2004-07-09  Ulrik Petersen

	* Updated SWIG/perl/test.pl.in to reflect modern times.

	* Added code to SWIG/perl/libmqlperl.i to make SheafConstIterator
	  and StrawConstIterator values returned from the various
	  const_iterator() members into blessed values.

============ 1.2.0.pre71 ============

2004-07-09  Ulrik Petersen

	* (Hopefully) made SWIG Perl bindings work again w.r.t. the
	  CList_of_straws-to-Perl-array function.

2004-07-05  Ulrik Petersen

	* Moved to new implementation of CInstObject which can get m_first
	  without calculation.

	* Optimized R_object_block_first, R_object_block_DB and
	  R_object_block_inst.

	* Moved CInst::is_aggregate into an inline function.

============ 1.2.0.pre70 ============

2004-06-29  Ulrik Petersen

	* Inserted extra SELECT FEATURES FROM OBJECT TYPE [Phalanges]
	  after UPDATE OBJECT TYPE in mqltry.cpp.

	* Bugfix: mqltry.cpp now _really_ does check that the correct
	  default value was added after UPDATE OBJECT TYPE.

	* Bugfix: SQLite UPDATE OBJECT TYPE set default value wrongly when
	  type was STRING and ENUM.  In particular, it did not encode the
	  string with db2string when STRING, nor did it insert the enum
	  const _value_, but rather the enum const _name_ when ENUM.

	* CFeatureUpdate::SymbolExistenceOfFeatures() now reports error
	  messages on error.

	* I had been overly zealous in deleting stuff in
	  CFeatureDeclaration::TypeTypeCompatibility() in case of error.

	* EMdFDB::AddFeatureToOT_gut_or_objects returned true when it
	  should have returned false.  Also removed an obsolete comment.

	* mqltry.cpp now does a more complete job of testing that code to
	  add default value to features (UPDATE OBJECT TYPE) works for all
	  types.

2004-06-28  Ulrik Petersen

	* Expanded EMdFDB::AddFeatureToOT_gut_or_objects() to handle
	  enums.  Also does not add default to ALTER TABLE when it is
	  ASCII or STRING, since MySQL can't handle this.
	
	* mqltry.cpp now tests new code to add default value to features
	  when doing UPDATE OBJECT TYPE.
	
	* mqltry.cpp now tests, for UPDATE OBJECT TYPE, updating with all
	  five kinds of types (ASCII, STRING, ENUM, INTEGER, ID_D).

	* Removed #include <iostream> from mql_helper_classes.cpp.

	* Bugfix: Memory leak fixed in
	  CFeatureDeclaration::TypeTypeCompatibility().  This only
	  occurred in the case of an error in the MQL, but it was a
	  potential security hazard because it could lead to a denial of
	  service attack, by issuing enough MQL queries that were wrong.

	* CFeatureDeclaration::TypeTypeCompatibility() now gives error
	  messages upon failure.

	* Added exec_string_get_string to mqltry.cpp.
	
	* Added test to mqltry.cpp to test for new setting of default
	  value after UPDATE OBJECT TYPE.
	
	* Removed AddFeatureToOT_gut_or_objects from MySQLEMdFDB; it is
	  now in EMdFDB.

2004-06-27  Ulrik Petersen

	* Bugfix: Added code to EMdFDB::AddFeatureToOTgut_or_objects() to
	  give the default value.

	* Bugfix: Added MySQLEMdF::AddFeatureToOTgut_or_objects().  This
	  was because MySQL didn't set the default value even though it
	  was added to ALTER TABLE.  In particular, it inserted NULL for
	  strings, which of course causes problems, since no feature is
	  supposed to be NULL.

============ 1.2.0.pre69 ============

2004-06-26  Ulrik Petersen

	* Changedpage size of SQLite from 16384 to 4096 in
	  sqlite/src/pager.h.

============ 1.2.0.pre68 ============

2004-06-26  Ulrik Petersen

	* Changed page size of SQLite from 4096 to 16384 in
	  sqlite/src/pager.h.

============ 1.2.0.pre67 ============

2004-06-26  Ulrik Petersen

	* Added a new case to AddMSE: If mse to be added is adjacent to
	  the last one, we subsume it at the back.

	* Removed debugging printing to stderr from
	  CSet_of_monad_ms::AddMSE.

============ 1.2.0.pre66 ============

2004-06-25  Ulrik Petersen

	* Changed page size of SQLite from 1024 to 4096.  WARNING!
	  WARNING!  This makes Emdros on SQLite incompatible with previous
	  versions!  If you have any SQLite databases which you wish to
	  preserve, you can use mqldump from a previous version to dump
	  the database and then import it with a version later than
	  1.2.0.pre66.  Or alternatively, change the page size back to
	  1024 in sqlite/src/pager.h.

============ 1.2.0.pre65 ============

2004-06-25  Ulrik Petersen

	* New method of doing sequences on SQLite.  It is probably a good
	  idea (performance-wise; correctness _should_ not be affacted) to
	  issue a VACUUM DATABAZE ANALYSE GO" on each SQLite database you
	  have.

	* Fixed bug in EMdFDB::GetMonadsFromID_Ds: A "_" was missing
	  between OTN and gut_or_monad_ms.

	* Removed all vestiges of std::wstring, HAVE_WSTRING, and
	  HAVE_OSTREAM_OUT_WSTRING.

============ 1.2.0.pre64 ============

2004-06-22  Ulrik Petersen

	* Updates to SWIG/java/win32.mak and SWIG/java/Makefile.inc.

	* Bugfix: CEMdFComparison::make_constraints() now returns the
	  value even in the IN-case.

	* mql_sheap.cpp:copy_MO() now uses static_cast rather than
	  dynamic_cast.  On Windows, we are not compiling with RTTI, and
	  we know what it is anyway, so we might as well use static_cast.

	* The assert(false)-dummy-methods in CMatched_object now return a
	  value to keep Microsoft's Visual C++ compiler happy.

	* Removed a suspicious line in src/win32.mak.

============ 1.2.0.pre63 ============

2004-06-20  Ulrik Petersen

	* Added %include "llist.h" to libemdf* under SWIG/*.

	* Made CSet_of_monad_ms::hasOnlyOneMSE() an inline method.

	* CSet_of_monad_ms::hasOnlyOneMSE() now calls LVlist::lengthIs1().

	* CSet_of_monad_ms now uses SOMIterator instead of
	  MSEList::iterator, and SOMConstIterator instead of
	  MSEList::const_iterator.

	* Added CSet_of_monad_ms::copy_other and used it in
	  copy-constructor and operator=.

	* Used CSet_of_monad_ms::hasOnlyOneMSE() in mql_sheaf.cpp,
	  mql_object_statements.cpp, and mql_helper_classes.cpp instead of
	  (size() ==/!= 1).

	* Added private dummy copy-constructor to LVlist and Llist.

	* Added SOMIterator, but this is not SWIG-exposed.

	* Added erase, insert_before, insert_after, front, and back to
	  value-based linked list, and used them in CSet_of_monad_ms.

	* Made lots of bugfixes to value-based linked list.

	* Replaced SOMConstIterator with value-based linked list's const
	  iterator.  This means that previous() is removed from
	  SOMConstIterator!.

	* Now uses value-based linked list as basis for CSet_of_monad_ms.

============ 1.2.0.pre62 ============

2004-06-20  Ulrik Petersen

	* Added value-based (vs. pointer-based) linked list templates to
	  llist.h.  Right now I don't use them for anything, but hey -- I
	  might.  Also dos2unix'd llist.h.

	* Bugfix: CMOID_M's copy-constructor didn't copy
	  m_object_type_index_focus.

	* Bugfix: Yesterday's bout of coding unexpectedly fixed a bug, now
	  tested for in mqltry.cpp.  The issue is, if you have an object
	  that is discontiguous (i.e., has two monad-ranges), within an
	  outer object, and do this:

	  SELECT ALL OBJECTS WHERE
	  [Outer
	    [Inner]
	    ..
	    [Inner]
	  ]

	  then this is going to give a hit, with two instances of the same
	  Inner object in the sheaf.

	  This has been filed as bug 976070.

2004-06-19  Ulrik Petersen

	* Added Llist::extend_with_me and Llist::prepend_with_me, and used
	  them in CList_of_straws::append_and_subsume and
	  CStraw::prepend_and_take_over.

	* Llist::isEmpty() was renamed to empty().

	* Llist::m_bDeleteContentsAtDestruct was removed, and clear(true)
	  called in the destructor of all classes that have an Llist.

	* Llist::length() was removed, and Llist::lengthIs1() was added.

	* Llist's iterators now take care of the case where the mother
	  list is 0.

	* mql_R.cpp now uses new Llist-based iterators.

	* CMo_nr_list is now based on llist.h.

	* Added CList_of_straws::JoinTakeOver(),
	  CStraw::prepend_take_over().

	* Split CMatched_object into four subclasses: CMOEMPTY_mo,
	  CMONIL_mo, CMOID_M, CMOID_D.  Also added mql_sheaf.h:copy_MO.
	  mql_R.cpp now directly creates one of these subclasses.

	* Made CSheaf a class with no virtual functions.

	* Removed flat sheaf from mql_sheaf.{h,cpp}.

============ 1.2.0.pre61 ============

2004-06-19  Ulrik Petersen

	* Added llist.h to include/Makefile.inc.

	* Added llist.h to %include's in SWIG-libmql*.i.

	* Used llist.h in mql_sheaf.{cpp,h}.

	* Added include/llist.h, which contains some templates for linked
	  lists.

============ 1.2.0.pre60 ============

2004-06-18  Ulrik Petersen

	* Added feature_name IN (enum_const1, enum_const2, ... ,
	  enum_constn) to the ways one can do feature-comparisons in
	  topographic queries.  The underlying SQL is an IN (x,y,z), which
	  is faster than fn = x OR fn = y OR fn = z.

	* Implemented support for IN in CFeature_comparison.

	* Added m_in_enum_list, m_in_enum_const_info_list, and
	  m_in_enum_const_cache to CFeature_comparison.

	* Added kIN to EMdFDB::CanDoComparisonOp().

	* Added new GetEMdFComparison to EMdFDB which returns the new
	  CEMdFComparison with the in_enum_list.

	* Added IN to EMdFDB::eComparisonOp2BackendComparisonOp().

	* Added new constructor to CEMdFComparison which takes a list of
	  enum_const_info's. This is for the new IN construct.

	* Added comments to string_list.h.

	* Moved headers around in mql_R.{cpp,h} and mql_query.{cpp,h} by
	  adding forward declarations.

	* Added kIn to eComparisonOp in emdf_enums.h.

	* Moved eInstOrDB from mql_object.h to mql_enums.h.

2004-06-16  Ulrik Petersen

	* Fixed bug #973797 in
	  mql_select_statements.cpp:CQueryBase::MyExec(): Now returns
	  failed sheaf instead of throwing BadMonadsException when
	  substrate is empty.

============ 1.2.0.pre59 ============

2004-06-10  Ulrik Petersen

	* win32/config.mak.in: Changed drive letter of PGTOP to H: from
	  G:.  This is because my drive letters have changed.

	* PgEMdFConnection::ExecCOPY now doesn't allocate a needless
	  "ExecStatusType status;".

	* CreateObjectsOT_objects_data and CreateObjectsOT_gut_data on
	  MySQLEMdFDB and PgEMdFDB now don't attempt to return a value.
	  They are both void functions.

	* Changed TableRow::size() to return unsigned int.  This was to
	  keep 'CXXFLAGS="-Wall -pedantic"' happy.

	* Removed MySQLEMdFConnection::FetchNextRow().

	* Did a cast in CMatched_object::get_EMdFValue to keep
	  'CXXFLAGS="-Wall -pedantic"' happy.

	* Removed an extraneous ";" in mqltry.cpp which caused a test not
	  to include all that it should.

	* MySQLEMdFDB::SetNextObjectID_DIfNotHigher got a %ld instead of a
	  %d to keep 'CXXFLAGS="-Wall -pedantic"' happy.

	* Made destructor of CSheaf and CFlatSheaf virtual, since both had
	  virtual functions.

	* Fixed bug in EMdFDB::TableExists: It didn't call Finalize.
	  Neither did it retrieve the row if there was one.

	* Updated upgrade.cpp to use the new signature, and also updated
	  the messages.

	* Updated EMdFDB::GetCurrentDatabaseVersion()
	  to have two new parameters:
	  - int& /* out */ nVersionWhichWeCanUpgradeTo
	  - std::string& /* out */ strVersionWhichWeCanUpgradeTo

	  Also changed the logic slightly.
	
	* emdf.h: Changed the #define EMDROS_VERSION_1_1_8_TO_1_1_12 to
	  EMDROS_VERSION_1_1_8_TO_1_1_20.

2004-06-05  Ulrik Petersen

	* Changed the indexes on OT_gut for SQLite.

2004-06-03  Ulrik Petersen

	* MQL grammar now accepts WITH MULTIPLE RANGE OBJECTS in
	  paradigmatic relationship with WITH SINGLE RANGE OBJECTS.  MQL
	  lexer now recognizes "multiple" as well as "single".

	* mqltry now tests that CREATE OBJECT(S) complain on single range
	  objects object type, but monad set not single range.

	* CREATE OBJECTS, CREATE OBJECT FROM MONADS, and CREATE OBJECT
	  FROM ID_Ds now all check whether the object type in question has
	  been declared WITH SINGLE RANGE OBJECTS.  If it has, and the
	  monad set is not a single range, they all complain with a
	  compiler error.

	* Fixed bug 965816 in PgEMdFDB::SetNextObjectID_DIfNotHigher().
	  The problem was that currval('sequence_118_0') was called even
	  though nextval had not been called.  This causes CREATE
	  OBJECT(S) WITH ID_D to fail.

	* Updated emdftry to use the new signatures of methods in EMdFDB
	  which now need a bHasSingleRangeObjects boolean.

	* Added machinery in the MQL library to test for the WITH SINGLE
	  RANGE OBJECTS flag on the object types.

	* Changed the CREATE OBJECT TYPE statement so that it now accepts
	  a "WITH SINGLE RANGE OBJECTS" modifier.  This sets the
	  OT_FLAG_WITH_SINGLE_RANGE_OBJECTS flag when creating the object
	  type.

	* Added to SQLiteEMdFDB:

	  - AddFeatureToOT_gut_or_objects()
	  - DropFeatureFromOT_gut_or_objects()
	  - CreateObjectsOT_gut()
	  - CreateObjectsOT_gut_or_objects()

	* Added to PgEMdFDB and MySQLEMdFDB:

	  - CreateObjectsOT_gut_data()
	  - CreateObjectsOT_gut_or_objects_data()
	  - CreateObjectsOT_gut_DB()
	  - CreateObjectsOT_gut_or_objects_DB()
	
	* Added to EMdFDB:

	  - GetOTHasSingleRangeObjects()
	  - GetOTGutOrObjects()
	  - CreateObjectTypeOT_gut()
	  - CreateObjectTypeOT_gut_or_objects()
	  - AddFeatureToOT_gut()
	  - AddFeatureToOT_gut_or_objects()
	  - DropFeatureFromOT_gut()
	  - DropFeatureFromOT_gut_or_objects()
	  - CreateObjectsOT_gut_data()
	  - CreateObjectsOT_gut_DB()
	  - CreateIndicesOnOTGut()
	  - DropIndicesOnOTGut()
	
	* Added machinery to create and use two versions of the object and
	  monad data: One table, OT_gut, for when
	  OT_FLAG_WITH_SINGLE_RANGE_OBJECTS is set, and the other, the old
	  OT_objects/OT_monad_ms.  This was done throughout EMdFDB and its
	  descendants, wherever either OT_objects or OT_monad_ms were
	  mentioned.

	* Added a column to object_types table: object_type_flags.  At the
	  moment, the only flag is emdf.h:
	  OT_FLAG_WITH_SINGLE_RANGE_OBJECTS.  This flag says that the
	  object type only has objects with a single monad range (e.g.,
	  {1}, {2}, {1-3}, {6-8}, etc.).

	* Emdftry now checks whether EMdFDB::GetSchemaVersion returns a
	  reasonable value.

	* Uses EMdFDB::CreateSchemaVersionTable() in
	  EMdFDB::CreateDatabase().

	* Added to EMdFDB: GetSchemaVersion(), SetSchemaVersion(), and
	  CreateSchemaVersionTable().

	* Added to emdf.h:EMDROS_VERSION_1_2_0_PRE_59 and
	  EMDROS_VERSION_CURRENT.

	* Renamed emdf.h: EMDROS_VERSION_1_2_0 to
	  EMDROS_VERSION_1_2_0_PRE_01_TO_1_2_0_PRE_58.

	* EMdFDB::UpgradeDatabase now checks for the new table,
	  schema_version.

	* Added a table, schema_version, to the schema.

	* Changed base class of CGetMonadsStatement to
	  CObjectTypeStatement, and gave it a Symbol method.

	* Used the new object_type_info in CObjectTypesStatement, and in
	  CDeleteObjectsStatement::ExecOneType(),
	  CDeleteObjectsByMonadsStatement::ExecOneType(),
	  CDropIndexesStatement::ExecOneType(),
	  CCreateIndexesStatement::ExecOneType(), and
	  CSelectObjectsHavingMonadsInStatement::ExecOneType().
	
	* Added EMdF/infos.cpp: object_type_info.

	* Changed EMdFDB::UpgradeObjectType to UpgradeObjectType110.

============ 1.2.0.pre58 ============

2004-05-19  Ulrik Petersen

	* mqltry now tests that CREATE OBJECTS WITH ID_D sets sequence 0
	  correctly.

	* Bugfix: CREATE OBJECTS now sets sequence 0 correctly when using
	  WITH ID_D.  The change was in
	  {EMdFDB,SQLiteEMdFDB}::CreateObjects().  This fixes bug 956770.

	* mqltry now tests that CREATE OBJECT WITH ID_D sets sequence 0
	  correctly.

	* Bugfix: CREATE OBJECT FROM MONADS/ID_Ds now make sure that
	  sequence 0 is set properly when using WITH ID_D.  Both
	  statements now call the new SetNextObjectID_DIfNotHigher
	  whenever the WITH ID_D clause is not absent and does not say say
	  NIL.  This fixes bug 945821.

	* Added
	  {EMdFDB,PgEMdFDB,MySQLEMdFDB,SQLiteEMdFDB}::
	  SetNextObjectID_DIfNotHigher(next_id_d).  The methods update
	  sequence_118_0 so that the next id_d drawn is at least
	  next_id_d.  If the current value is greater than or equal to
	  than next_id_d, then the sequence is not touched.

============ 1.2.0.pre57 ============

2004-05-12  Ulrik Petersen

	* Fixed bugs in mql_sheaf.cpp:CSheaf::print_DTD(): type
	  declaration of element "feature" was not (#PCDATA), as it should
	  have been.  There was an extraneous ">" in the ATTLIST for
	  "feature".

	* Fixed bug in mql_sheaf.cpp:CValueTriple::PrintXML(): When
	  printing the feature, out_char_data should be used, not out.
	  This is because the data is #PCDATA, and as such should have
	  some characters escaped.

============ 1.2.0.pre56 ============

2004-05-01  Ulrik Petersen

	* mqldump now has the following options: --batch-create-objects,
	  --batch-size, --start, --end.  The corresponding functionality
	  has also been implemented.

	* Bugfix: CEMdFValue::ToString() now uses id_d2number_string for
	  ID_Ds.  This is because emdf_ffeatures.cpp uses this function
	  for creating SQL.

	* Bugfix: The CreateObjects machinery now use id_d2number_string
	  rather than id_d2string.  This is because feature-values may be
	  NIL, which we don't want to show up in the SQL as "nil".

	* Added string_func.cpp:id_d2number_string().

============ 1.2.0.pre55 ============

2004-04-24  Ulrik Petersen

	* Reprogrammed PgEMdFConnection::ExecCOPY so that it uses the old,
	  in PostgreSQL 7.4 deprecated, functions for sending
	  copy-information.  This is because I wish to support PostgreSQL
	  7.3.

	* Fixed bug in EMdFDB::add_feature_to_cache_if_not_already_there:
	  It didn't actually add it when it was supposed to, but only in
	  when it was there already.

	* Fixed bug: On PostgreSQL, EMdFDB::Set_min_max_m_from_object_type
	  would set min_m to 0 if an object type had no objects. This was
	  a problem, e.g., when calling DELETE OBJECTS BY MONADS.

2004-04-23  Ulrik Petersen

	* Added string_func.h:char2octal().

	* Added CCreateObjectsStatement.

	* Added CObjectSpecBase, and moved CObjectSpec down as a subclass
	  of it.

	* Added CObjectSpecNoOT.

	* Added EMdFDB::CreateObjects().

	* Added CInstObject constructor which takes a CSet_of_monad_ms*.

	* Added CType::m_enum_value and CType::get_enum_value().

	* Added tests/mqltry.cpp:exec_string_get_long().

	* Added statement CREATE OBJECTS WITH OBJECT TYPE.

2004-04-21  Ulrik Petersen

	* Removed EMdFDB::MakeMonadConstraintsFromSOMmse_first since it
	  has been obsoleted by the bugfix in EMdFDB::DropObjectsInMonads.

        * Fixed bug in EMdFDB::DropObjectsInMonads: Up until now, data
          corruption could occur in the sense that an object's monads
          could be partially deleted, even if the object itself was not
          deleted.  This happened if an object had an MSE outside of the
          MSEs in the monad set to be deleted, as well as an MSE inside
          the MSEs in the monad set.  Now the monads are only deleted iff
          the whole object is to be deleted.

	  Note that this bug was also fixed in the 1.1.19-release, with a
	  ChangeLog entry the same day as this.
 
	* Removed EMdFDB::MakeMonadConstraintsFromSOMMonad_m since it was
	  obsoleted.

	* Removed EMdFDB::GetObjectsInUniverse since it was obsoleted.

2004-04-20  Ulrik Petersen

	* Added MQL/parser1.sed and MQL/Makefile.am support for it.  This
	  is for modifying the mql_parser.cpp that Bison outputs.  For
	  now, parser1.sed only adds a dummy initialization to "YYSTYPE
	  yylval".  This was done because dbx on Solaris complained of a
	  read of an uninitialized memory location upon reading the first
	  keyword in a query.

============ 1.2.0.pre54 ============

2004-04-17  Ulrik Petersen

	* Restored support for Win32, by adding code to MQL/lexer1.sed to
	  take care of a compile problem on Win32.

============ 1.2.0.pre53 ============

2004-04-10  Ulrik Petersen

	* Updated configure.in, src/Makefile.am and tests/Makefile.am to
	  better use EMDFLDADD.

	* Reverted to flex-2.5.4a.  This was because 2.5.31, the default
	  on Debian-sid, had too many problems, as evidenced by its list
	  of open bugs on SourceForge.  In particular, it had a nasty
	  memory leak which caused at least 4 bytes to be leaked every
	  time the scanner had run.
	

2004-04-08  Ulrik Petersen

	* Changed OS.object_id_d to MMS.object_id_d in emdfdb.cpp:GetInst.
	

============ 1.2.0.pre52 ============
	
2004-04-07  Ulrik Petersen

	* The "emdf" database now no longer needs to be created. Instead,
	  both MySQL and PostgreSQL resort to tricks when asked to connect
	  to the emdf database.  

 	  For MySQL, the tricks involve (re-)connecting with the database 
	  name set to NULL. This means there is no database associated with
	  the connection.

	  For PostgreSQL, when asked to connect to the "emdf" database, it
	  now connects to the "template1" database, which every PostgreSQL
	  database installation has.

	  SQLite has never needed an "emdf" database.

	* MySQLConnection now has two new private members: Connect() and
	  ShutdownConnection().

	* MySQLConnection::CommitTransaction now no longer prints a
	  warning on stderr.

	* mqltry now explicitly tests connecting to the emdf "database".

	* mql.cpp, manage_indices.cpp, upgrade_db.cpp, emdftry.cpp, and
	  mqltry.cpp have a new message for when connection is not OK.
	  This points users to http://emdros.org/whattodo2.html, and is
	  simpler than the previous message.

============ 1.2.0.pre51 ============

2004-04-07  Ulrik Petersen

	* Changed initial DB in manage_indices and upgrade_db away from
	  "emdf" to the database that is going to be managed or upgraded.

============ 1.2.0.pre50 ============

2004-04-05  Ulrik Petersen

	* Upgraded to SQLite version 2.8.13.

============ Version 1.2.0.pre01 to 1.2.0.pre49 ===========
	
	*** Bugfixes ***

	- The hexadecimal and octal conversions in the MQL lexer (in
	  "double quoted strings, like \xa0 and \377") did not work.  This
	  has been fixed.

	-
	  MQL/mql_object_type_statements:CUpdateObjectTypeStatement::Exec()
	  didn't commit the transaction it had started.  It does now.

	- EMdFDB::UpdateEnumConst() still believed that an enumeration
	  constant was unique among all enumerations.  This is no longer
	  the case, so the part that updates the cache has been fixed.

	- All backends now correctly handle escaping of ASCII strings. To
	  that end, a virtual function was added to all EMdFDB classes:
	  EscapeStringForSQL(), which either uses the backend's escape
	  function (in the case of PgSQL and MySQL) or a custom-written
	  function (in the case of SQLite).

	- mysqlemdfdb.cpp:EscapeStringForSQL now uses regular cast to
	  MySQLEMdFConnection instead of dynamic cast. This caused an
	  exception on Visual C++.

	- emdfdb.cpp:EscapeStringForSQL now returns something, even if
	  this is only to fool the compiler.

	- CMatched_object::copy_other now also copies the EMdF values if
	  they are present.

	- string_func.cpp:is_other_than_whitespace() was buggy: If the
	  string started with whitespace, it would return false, even if
	  the rest of the string was not white-space.  This resulted in
	  the following: If a query started with whitespace and had no GO
	  at the end, the query would not execute.

	- Removed $(DESTDIR)/ from mylibdir in sqlite/src so that one can
	  actually use Automake's DESTDIR machinery.

	- SheafConstIterator and SheafIterator both segfaulted if taken
	  from a failed sheaf. This has been fixed.
	
	
	*** Enhancements ***

	- Added BEGIN TRANSACTION, ABORT TRANSACTION, and COMMIT
	  TRANSACTION statements.

	- src/mqldump.cpp now issues BEGIN TRANSACTION and COMMIT
	  TRANSACTION statements every 1000 objects, unless the
	  --no-create-transactions switch is used.

	- Added DROP INDEXES and CREATE INDEXES statements.  

	- src/mqldump now issues DROP INDEX and CREATE INDEX statements
	  before and after dumping the object data of an object type.

	- Emdros on MySQL can now do a VACUUM DATABASE statement.

 	- Speed and memory improvement: Now the features which are checked
 	  already in the backend in the pre_query_string are not
 	  put into the Inst, unless they need to be checked again.

	- Speed improvement for GET FEATURES: The Symbol stage no longer
	  checks whether the ID_Ds exist in the object type.

	- Speed improvement: GET FEATURES is now quicker when there are
	  many consecutive ID_Ds in the list:

	  - Added CID_D::ExecMakeSOM()

	  - Added EMdFDB::GetFeatures/GetFeaturesByQuery which take a set
	    of "monads" (i.e., object id_ds) in addition to a list of
	    object id_ds.

	  - Split the execution of the query in GetFeaturesByQuery into
	    GetFeaturesByQueryExec, since it was shared between the old
	    (non-som) GetFeaturesByQuery and the new one.  The original
	    rationale for this was later voided, since the old (non-som)
	    GetFeaturesByQuery was removed.  However, it is still good to
	    split them up, since the functions are rather long already.

	  - Changed EMdFDB::GetComputedFeatures so that it takes a set of
	    id_ds ("monad set") rather than a list of id_ds.
	
	- Speed improvement: GET MONADS is now faster when there are lots
	  of consecutive id_ds.  This is using the same technique as with
	  GET FEATURES of using a set of "monads" (i.e., object id_ds).
	
	- Added ability to get features into sheaf by means of the GET
	  clause.

	- Speed improvement: monad_ms_id has been taken out of OT_objects
	  and OT_monad_ms.  This causes a speed improvement.  monad_ms_id
	  was useless anyway, since it was never used.  Moreover, the
	  object_id_d in OT_monad_ms could do the job of monad_ms_id
	  equally well.

	- Speed improvement on SQLite: SELECT OBJECTS HAVING MONADS IN is
	  now faster if there is only one monad-range.  This was
	  accomplished by adding CSet_of_monad_ms::hasOnlyOneMSE() and
	  simplifying the WHERE clause in
	  EMdFDB::GetObjectsHavingMonadsInMonadSet().

	- Speed improvement: SELECT OBJECTS HAVING MONADS IN is now faster
	  if there are more than 100 monad-ranges.  This was accomplished
	  by upping the break-down rate from 100 MSEs per SQL query to
	  200.

	- Speed improvement: Many topographic queries are now faster
	  because of a simple technique in EMdFDB::GetInst: If the
	  boundaries of the substrate are within 20% of the all_m-1
	  boundaries, then we don't produce any WHERE conditions on the
	  monads.  See the comments in the sources for why this is a good
	  idea.

	- Speed improvement: mql_utility.cpp:Restrict now uses the new
	  CSet_of_monad_ms:RemoveMSE(monad_m, monad_m).

	- Speed and memory improvement: Skip lists were implemented for
	  CInst, in place of the std::multimap that was used.  In
	  addition, an arena memory allocator was implemented.  This led
	  to a quite substantial reduction in memory consumption, and an
	  increase in topographic query speed of 5-10%.
	
	- Dropping a feature using UPDATE OBJECT TYPE now drops the column
	  from the OT_objects table.

	- mqltry now tests REMOVE feature_name in UPDATE OBJECT TYPE.

	- Removed size-restrictions on strings (STRING and ASCII) by
	  introducing emdf.h:#define SQL_TEXT_TYPE.

	  - removed emdfdb.h:encode_feature_type_id
	  - removed emdfdb.h:decode_feature_type_id
	  - removed length parameter from CType
	  - removed CType::(type, string_length)
	  - removed CType::WeedStringLength
	  - removed CFeatureDeclaration::WeedStringLength
	  - removed emdf.h:#define MAX_STRING_LENGTH

	- The MQL grammar now uses left-recursion rather than
	  right-recursion for the AND production in the ffeatures
	  hierarchy.  This means no more stack overflows from this source.
	  In addition, mql_execute.cpp now checks for the "stack overflow"
	  return value from the bison parser, and issues an error if it
	  detects stack overflow.

	- GET FEATURES now returns the label rather than the value for
	  enumeration features.

	- Added set_value and set_is_default to enum_const_info.

	- CREATE/USE/DROP DATABASE can now take a T_STRING in addition to
	  a T_IDENTIFIER for its database name.  On PostgreSQL and MySQL,
	  it must still be an identifier, but on SQLite, this means you
	  can give the full path, and non-identifier database filenames.

	- Speed and memory usage improvement:

	  - CInstObject and CSet_of_monad_ms now directly store the set of
	    monads if it only consists of one monad stretch (including
	    only one monad).  This saves a lot of memory (up to around 26%
	    in some test queries), and therefore speeds things up.

	  - CInstObject now has first() and last() methods.

	  - CMatched_object::get_monads and CInstObject::get_monads now
	    return a full set of monads instead of just a const reference
	    to a set of monads.

	  - CInstContents and CInst now have a bool m_is_frozen, which is
	    set by fillingIsDone(), which is called from
	    EMdFDB::GetInst().

	  - CInstContents now store the end of the m_map_by_monad_m
	    locally, rather than calling m_map_by_monad_m::end() all the
	    time.  CInst call CInstContents::end() rather than accessing
	    m_map_by_monad_m directly.

	  - CSet_of_monad_ms::size() has been added, allowing us to see
	    how many stretches there are.

	  - CInst::add_object now takes a first/last monad.

	  - CList_of_straws::delete_straws and CStraw::delete_mo now check
	    for emptiness before deleting.

	- Two new switches added to configure: --disable-mo-oid and
	  --disable-mo-values.  The default is --enable-..., which doesn't
	  change the behavior from what has previously been available.

	  - --disable-mo-oid disables the object id_d in a matched object.
	    This saves RAM if you aren't really interested in what ID_D
	    was there.

	  - --disable-mo-values disables the list of EMdF values in the
	    matched object which you could have filled with feature-values
	    if you had used GET in a topographic query.  If you choose
	    --disable-mo-values, the weeder will tell you if you use GET
	    in a topographic query.

	  The relevant entries in emdros-lconfig.h are
	  DISABLE_MATCHED_OBJECT_ID_D and DISABLE_MATCHED_OBJECT_VALUES.
	  You can set them to 1 yourself if compiling on Win32.  In that
	  case, use the relevant lconfig file in win32/.

	- As of 1.2.0.pre31, SQLite has a new way of creating (and
	  dropping) indexes on OT_monad_ms.  In particular, OT_mm_mf_i and
	  OT_mm_ml_i have been replaced by the double index
	  OT_mm_monads_i, which indexes both mse_first and mse_last.  This
	  leads to speedups on SELECT OBJECTS HAVING MONADS IN.

	  If you have any SQLite databases created with Emdros before
	  1.2.0.pre31, you should do "manage_indices --drop" on the
	  database using a version older than 1.2.0.pre31, and then
	  "manage_indices --create" on the database with the current
	  version.

	- As of 1.2.0.pre46, regexes are non-anchored.

	- As of 1.2.0.pre48, two CSheaf::getSOM() methods have been added,
	  which let you obtain the monads of a sheaf.
	
	*** Misc changes ***

	- AccessTuple has been simplified in the various DB connections.
	
	- The Java SWIG files are now in a package called jemdros.  This
	  was necessary because sometimes, Java packages cannot use code
	  that is not also in another package.

	- Moved EMdFDB::GetNextID and EMdFDB::CreateSequenceTables118()
	  into the respective subclasses.
	
	- The following are now virtual:

	  - EMdFDB::Vacuum()
	  - EMdFDB::BeginTransaction();
	  - EMdFDB::CommitTransaction();
	  - EMdFDB::AbortTransaction();

	- Added EMdFDB::CreateObjectTypeOT_objects().
	
	- Added EMdF/string_list.cpp and include/string_list.h.  Used it
	  in various places in the MQL grammar.

	- (July 8, 2003) Removed CBBFList and CObjectTypeName, along with
	  their grammar rules (i.e., all the buildable_from/covered_by
	  machinery.)

	- Removed support in EMdFDB for covered_by and buildable_from.
	
	- Removed covered_by/buildable_from from mqltry.cpp and
	  emdftry.cpp.

	- Added sheaf_return_type_pair.

	- CMQL_exeuction_environment's m_object_type_names and pEmptySheaf
	  have become static members.  Therefore, a number of member
	  functions no longer needed a CMQL_execution_environment as a
	  parameter.  These include:

	  - All of the put_XML/put_Console members of the sheaf family of
	    classes.
	  - CMatched_object::getObjectTypeName()
	  - CMQLResult::Print()

	- Added MQL/mql_object_type_statements.cpp:CObjectTypesStatement.
	  This is now used for the base class of CDeleteObjectsStatement
	  and CSelectObjectsHavingMonadsIn.  Accordingly, the classes
	  which derive from CDeleteObjectsStatement have been refactored.

	- Added include/emdf_ffeatures.h and EMdF/emdf_ffeatures.cpp.
	
	- Moved emdf_value.cpp:eComparisonOp2SQLString() to
	  EMdFDB::eComparisonOp2BackendComparisonOp().

	- Added EMdFDB::CanDoComparisonOp().

	- Added EMdFDB::GetEVkindFromTypeID_D().

	- Added the following to EMdFDB:

	  - GetEMdFComparison().
	  - GetEMdFFFactor(*).
	  - GetEMdFFTerm()
	  - GetEMdFFFeatures()

	- mql_query.cpp now uses emdf_ffeatures.cpp.

 	- mql_object.cpp now is split into an Inst and a DB part.
	
	- Added SymbolAddToObject() and AddEMdFValue() to CFeature.

	- Added EMdFDB.cpp:feature_type_id_is_ENUM().

	- Added static members m_enum_names and m_feature_names to
	  CMQL_execution_environment, along with getting and
	  adding-members.

	- src/upgrade_db.cpp now gives hints for how to upgrade if
	  upgrade_db can't do the job.

	- Cleanups have been done in how some headers are (not!) included
	  anymore.

	- Added include/emdf_enums.h.

	- Added include/mql_enums.h.

	- Removed segment support.  Segments were a broken concept all
	  along.  I have replaced it with arbitrary monad sets.

	  - USING SEGMENT clauses have been removed from statements which
	    query topographically.

	  - SELECT SEGMENTS and DROP SEGMENT are gone.

	  - CREATE OBJECT doesn't check segment boundaries

	  - mqldump can't dump segments.

	  - mqldump can dump arbitrary monad sets

  	  The following has been retained for backwards compatibility:

	    - CREATE SEGMENT

	  This is because CREATE SEGMENT is likely to occur in MQL dumps
	  from previous database versions.  It has been implemented as a
	  call to CREATE MONAD SET.

	- Implemented CSelectMonadSets, CGetMonadSets, CCreateMonadSet,
	  CUpdateMonadSet, CDropMonadSet.

	- SELECT (ALL|FOCUS) OBJECTS now accepts a new IN clause, which
	  specifies an arbitray monad set as an identifier.
	
	- Removed the following functions:

	  - EMdFDB::DatabaseExists()

	  - CCreateObjectStatement::Monads()

	  - CCreateSegmentStatement::Symbol()

	- Moved CMonadSetElement::WeedPositive() and
	  CMonadSetElement::WeedMonotonice() into a
	  CMonadSetElement::Weed() method, and made both private.

	- Moved pConn->Finalize() into DEBUG_ACCESS_TUPLE_FAILED and
	  DEBUG_NULL_VALUE_EXCEPTION.

	- Differentiated DEBUG_QUERY_FAILED into DEBUG_SELECT_QUERY_FAILED
	  and DEBUG_COMMAND_QUERY_FAILED.  Added pConn->Finalize() to
	  DEBUG_SELECT_QUERY_FAILED.

	- Removed a number of EMdFDB interface methods which were no
	  longer in use.

	  - EMdFDB::GetFeatures(...id_d, list-of-strings)
	  - EMdFDB::GetFeatures(...list-of-id_ds, list_of_strings)
	  - EMdFDB::GetFeaturesByQuery(...list-of-id_ds, list-of-string)

	- Added copy-constructor to enum_const_info.

	- Changed interface of EMdFDB::CreateEnumConst to also have the
	  enumeration name.

	- Changed interface of
	  CEnumerationStatement::SymbolEnumerationExists to take a boolean
	  to say whether to report the error.

	- mqltry now checks that you cannot CREATE ENUMERATION with two
	  identically valued labels.

	- mqltry now checks that you cannot update an enumeration so that
	  two labels have the same value afterwards.

	- Added EMDFDB::LoadEnumConstantsIntoCache().

	- Added is_identifier to EMdF/string_func.cpp, tested it in
	  tests/emdftry.cpp.

	- Added CDatabaseStatement::Symbol(), which checks whether the
	  database name is OK. It must be an identifier on PostgreSQL and
	  MySQL.  Also added EMdFDB::DatabaseNameIsOK(), and its
	  SQLiteEMdFDatabase equivalent.

	- Added CTable::equals() and TableRow::equals().

	- mqltry tests that escaping of strings works correctly.

	- Added comment to conn.h about not chasing rabbit trails by
	  trying to be clever and return the values from AccessTuple
	  rather than passing them as parameters.

	- win32/win32.mak now adds config.mak to the doc directory in the
	  distribution.

	- mql_get_query.lxx now eats up comments.

	- Added support for gcc 2.95 (e.g., Debian Woody).  This was done
	  by checking for istream and ostream in configure.in, and then
	  conditionally including {i,o}stream/{i,o}stream.h where needed.

	- SWIG must now be version 1.3.21.  This was done by checking for
	  this version in configure.in, and by adding
	  jemdrosConstants.java to SWIG/java/Makefile.inc.

	- build.sh.in: Added support for Mandrake.

	- Added SWIG_EXE to win32\config.mak.in, using it in
	  SWIG\java\win32.mak and SWIG\python\win32.mak.

- *** Version 1.1.15 ***
	
2004-03-06    <upet01>

	* Bugfix: Changed MQL/mql_query.cpp:CFTerm::make_constraints and
	CFFeatures::make_constraints: In a positive context, A AND B is
	allowed to have only one if either is not prequeriable.  In a
	positive context, A OR B would not be prequeried at all if either
	one was not prequeriable.  In a negative context, the roles of AND
	and OR are reversed.


	
	

- *** Version 1.1.14 ***

	*** Bugfixes ***

	- If a query started with whitespace and had no GO at the end, the
	  query would not be executed.  This was due to a buggy
	  EMdF/string_func.cpp:is_other_than_whitespace().  This has been
	  fixed.

	- The hexadecimal and octal conversions in the MQL lexer (in
	  "double quoted strings, like \xa0 and \377") did not work.  This
	  has been fixed.

	- mql_object_type_statements:CUpdateObjectTypeStatement::Exec()
	  didn't commit the transaction it had started.  It does now.

	- mql_get_query.lxx did not remove comments.

	
	*** Enhancements ***
	
	- Speed improvement for GET FEATURES: The Symbol stage no longer
	  checks whether the ID_Ds exist in the object type.

	- Speed improvement: SELECT OBJECTS HAVING MONADS IN is now faster
	  if there are more than 100 monad-ranges.  This was accomplished
	  by upping the break-down rate from 100 MSEs per SQL query to
	  200.

	
	
	
- *** Version 1.1.13 ***

	*** Bugfixes ***

	- You couldn't search for STRING features with any of the
	  following operators: =, <, >, <=, >=, <>.  ASCII features worked
	  fine, and so did the regular expression operators.


- *** Version 1.1.12 ***

	*** Bugfixes ***

	- UPDATE ENUMERATION CONSTANT would fail or malfunction for
	  removing and updating constants which had the same
	  case-insensitive constant name as another constant in the same
	  enumeration, at least on MySQL.  For example, if the following
	  had been done:

	  CREATE ENUMERATION sploinks_t {
	    WXQt = 132, 
	    WxQt = 142,
            WXYq = 131,
            WxYq = 141,
  	  } GO

	  and the the following would have been done:

	  UPDATE ENUMERATION sploinks_t {
            remove WxQt
	  } GO

	  then both WxQt and WXQt would have been removed (at least on
	  MySQL).  Similarly, if the following would have been done:

	  UPDATE ENUMERATION sploinks_t {
            update WxYq = -2
	  } GO

	  then the function would have failed with an index error due to
	  the restriction (on MySQL) that enumerations which are
	  case-insensitively equivalent in their constant names must have
	  different values.

	  Both of these problems have been solved by updating
	  EMdFDB::DropEnumConst and EMdFDB::UpdateEnumConst to also take
	  the current value as a parameter.

	  This is part of the effort in this release to make enumeration
	  constants case-sensitive.

	- src/mqldump.cpp had the wrong --help messages for all the
	  "--no-create-*" options: The helps said "Do" when they meant
	  "Don't."  This has been fixed.

	- EMdF/emdfdb.cpp:GetInst now doesn't allocate an empty
	  pFeature_values array of CEMdFValue's when no_of_features_to_get
	  == 0.

	
	*** Enhancements ***

	- Can now compile SWIG support for Java and Python on Win32.
	
	- Less memory consumption due to new CEMdFValue layout (with a
	  union), and a new CInstObject vector of CEMdFValue (rather than
	  std::vector<CEMdFValue*>).

	- Enumeration constants are now case-sensitive.  At the same time,
	  CTable::find() (both kinds) now have an extra parameter:
	  bCompareCaseInsensitively, which tells the find procedure
	  whether to compare with our without case.  At the same time,
	  EMdF/string_func.cpp has a new function: strcmp_case().
	
	- Enabled feature_retrieval clause in object_block(_first).  Now
	  one can GET feature_list from within an object_block(_first) and
	  get them into the sheaf.  (Well almost; the parser-machinery is
	  in place; the rest will follow...).

	- Speed improvement: Since we recently learned that the size() on
	  a list is O(n), we have changed a number of places where
	  SomeList.size() == 0 and SomeList.size() > 0 to use empty(),
	  which is O(1).

	- Speed improvement: EMdF/emdf_output.cpp:CEMdFOutput::newline()
	  now uses "<< '\n'" rather than "<< std::endl", since the latter
	  flushes the output buffer as well as writing a newline.  This
	  caused slow performance with tables and XML output.  Sheaves
	  weren't affected that much, since they used '\n' themselves
	  rather than CEMdFOutput::newline().  Also, mqldump(1) has been
	  updated accordingly, which gives a noticeable performance
	  improvement.

	- Speed improvement: std::ios::sync_with_stdio(false) is now
	  called in the CEMdFOutput constructor.  This causes the C++
	  library (at least on Linux) not to interleave C and C++ output,
	  which causes a performance increase (at least on Linux).  See
	  B. Stroustrup, "The C++ Programming language", 3rd edition,
	  p. 651.

	- Speed improvement: EMdFDB::Type_id_to_string() and
	  EMdFDB::Type_id_to_TableColumnType now use EMdFDB::EnumExists
	  rather than querying the database directly.  This means that the
	  enum cache is used if filled.  This is especially noticeable
	  with mqldump(1).

	
	*** Miscellaneous changes ***

	- emdftry and mqltry have been updated because of the move towards
	  case-sensitive enumeration constants.

	- Since CEMdFOutput::newline() no longer flushes the buffer, we
	  have inserted pEE->pOut->flush() calls at appropriate places in
	  MQL/mql_execute.cpp.

	- EMdF/monads.cpp:Print_MSE and Print_SOM have been removed.

	- Cleanups have been done in the way C headers are (not) imported
	  (any longer).

	- Cleanups have been done in the way <iostream> is included.

	- EMdF/Makefile.am no longer compiles and distributes
	  smart_vector.cpp, since it was just an empty .cpp file that
	  #include'd <smart_vector.h>.

	- win32/win32.mak now has a "dist" target which produces an Emdros
	  distribution ZIP file.

	- Added include/emdros-version.h.in.

	- Renamed CEMdFValue::get_as_string to CEMdFValue::ToString,
	  giving it a new signature.
	
	
- *** Version 1.1.11 ***

	*** Bugfixes ***

	- MQL/mql_sheaf.cpp:CMatched_object::get_monads() used to assert
	  if kind was kMOKID_D.  This has been fixed.

	- EMdF/emdfdb.cpp:feature_type_id_is_STRING() did not return
	  correct results if the feature was an enum.  This has been
	  fixed.

	  This was a problem if the enum queried was the first thing that
	  had been created in the database.  It resulted in obscure errors
	  with, among other MQL statements, GET FEATURES.

	- EMdF/emdfdb.cpp:EMdFDB::GetFeatures() for a single object id_d
	  and CEMdFValue's had a bug whereby its SQL queries were
	  malformed with respect to commas.  This has been fixed.

	- MQL/mql_symboltable.cpp: CMQLSymbolTableEntry::set_features()
	  incremented index twice in each loop.  This has been fixed.

	- MQL/mql_object.cpp:CMQLObject::get_feature_names() used to sort
	  the string-vector.  This caused problems when object blocks
	  returned the same features, but in different orders.

	- MQL/mql_query.cpp:get_characteristic_string() now doesn't sort
	  feature-names (i.e., make them into a set before adding).  This
	  caused problems when object blocks returned the same features,
	  but in different orders.

	- libpcre_emdros.a was not installed.  It now is.

	- libpcre_emdros is now available as a shared library as well as a
	  static library.  This was because libtool complained that
	  linking a library against a static library was not portable.

	- The following files are now packaged in the SWIG RPMs:

	  - EmdrosPerl.la
	  - EmdrosPy.la
	  - EmdrosRuby.la

	  They weren't before.

	- Memory leak: CSmartVector::add_value now has a bool& bWasAdded
	  parameter, making it possible for callers to distinguish between
	  situations where the value was added or not.  This led to
	  possible memory-leaks before.  This has been taken advantage of
	  in the following files, for deleting the string if not used:

	  - MQL/mql_query.cpp
	  - MQL/mql_symboltable.cpp
	  - MQL/mql_execution_environment.cpp

	- Memory leak: CMQLSymbolTable::m_vec_object_block used to be
	  initialized with a (false) parameter in CMQLSymbolTable's
	  constructor.  This caused memory leaks, since the StrCOBCPair's
	  were not deleted.

	- Memory leak: CMQLObject::retrieve_feature_values(/* CInstObject
	  */) did not delete the previous value.  This caused memory
	  leaks.

	- Memory leak: MQL/mql_query.cpp:CValue's destructor failed to
	  delete m_emdf_value.  This has been fixed.

	- Memory leak: MQL/mql_object.cpp:CMQLObject destructor failed to
	  delete the CEMdFValue objects in m_feature_value_vec.  This has
	  been fixed.
	
	- CInstObject's constructor has a reference to
	  std::vector<CEMdFValue*>, which was passed to the
	  copy-constructor of CInstObject::m_feature_values.  This caused
	  memory leaks.  Now, CInstObject's constructor copies the
	  parameter's contents to m_feature_values "by hand".
	
	- EMdF/mysqlconn.cpp: MySQLConn::ConnectionOk() used to use
	  mysql_errno instead of mysql_ping.  This caused ConnectionOk()
	  to return false if the last SQL statement had failed, which is
	  not the intended semantics of ConnectionOk().

	- MQL/mql.yxx has been fixed so that opt_string_length returns
	  MAX_STRING_LENGTH rather than 255 when empty.  Since 255 >
	  MAX_STRING_LENGTH on MySQL, this was a problem when doing
	  something like the following on MySQL:

  	  CREATE OBJECT TYPE
	  [Word
              surface : ASCII; // this used to generate an error
	      lemma : STRING; // and this did, too
	  ]

	- JAVAC was not set with the full path in configure.in if javac
	  could be found in the path.  This caused problems for people
	  with multiple java installations.

	- EMdF/emdfdb.cpp:EMdFDB::CreateSequenceTables118() failed to
	  commit transaction if started.  This has been fixed.

	- src/mql.cpp would return 7 upon success when executing cin.  It
	  should return 0.  This has been fixed.

	- EMdF/mysqlconn.cpp:MySQLEMdFConnection constructor now uses
	  ConvertDBName() on the db parameter.  Otherwise, the db
	  parameter had to be normalized before being used, or the backend
	  would not connect.

	- MQL/mql_get_query.cpp now obeys escaped characters within
	  "double-quote strings", so for example, "\"Processes" no longer
	  causes an error.

	- EMdF/emdfdb.cpp:EMdFDB::UseDatabase is now called from the
	  derived classes' UseDatabase, and now cleans out the tables and
	  maps inside EMdFDB.

	- EMdF/emdfdb.cpp:EMdFDB::Set_min_max_m_from_object_type() would
	  fail if an object type was empty (i.e., had no objects).  This
	  was because the SELECT MIN(mse_first), MAX(mse_last) SQL
	  statement would return NULL values for empty object types, and
	  the EMdFDB machinery was not prepared for NULL values.
	  Accordingly, a new exception was added:
	  include/conn.h:EMdFNULLValueException.  This was used in
	  include/pgconn.h and include/mysqlconn.h in all of the
	  AccessTuple methods.  At the same time, the fall-back
	  AccessTuple methods in EMdF/conn.cpp were removed, and the
	  methods made virtual in include/conn.h.  All of the methods in
	  EMdF/emdfdb.cpp which used the AccessTuple machinery were
	  protected with try...catch blocks.
	
	
	*** Enhancements ***

	- CEmdrosEnv class added.

	- Speed improvement: The AccessTuple machinery for
	  PgEMdFConnection and MySQLEMdFConnection has been updated.  This
	  causes speed improvements on both platforms, about 30% on
	  PostgreSQL and about 50% on MySQL.  At the same time, pgconn.h
	  and mysqlconn.h are no longer installed, since they are strictly
	  not necessary for compiling your own programs.

	- Speed improvement:: EMdFDB::GetFeatures(/* single id_d */) now
	  uses a new method for accessing the results, which results in
	  speed improvements on some topographic queries.

	- Speed improvement: object reference usages are now able to take
	  advantage of the insts, rather than always querying the backend.
	  This causes speedups on some queries.

	  In order to do this, the following changes were made:

	  - MQL/mql_R.cpp:R_object_reference_declaration() was split into
	    R_object_reference_declaration_DB() and
	    R_object_reference_declaration_inst().

	  - MQL/mql_symboltable.cpp:CMQLSymbolTable now stores the object
	    block along with the symbol table entry, at the same index.

	  - MQL/mql_query.cpp:CObject_block_common::Symbol now causes its
	    own this pointer to be stored in the symboltable.

	  - MQL/mql_query.cpp:CObject_reference_usage::Symbol now adds its
	    feature-name to the CMQLObject in the object block in which
	    the object reference was declared.

	- Speed improvement: EMdFDB::GetObjectsHavingMonadsInMonadSet now
	  adds an extra WHERE condition on the first and last monads in
	  the monad set to look for.  This speeds up querying by at least
	  a factor of 33 for queries with 500 monad set elements in the
	  set of monads (433 seconds before, now 13 seconds).

	- Speed improvement: EMdFDB::GetObjectsHavingMonadsInMonadSet has
	  been split up into two member functions, in order to split up
	  the set of monads into several sets of monads.  This speeds up
	  querying quite a bit.  The aforementions query with 500 monad
	  set elements now takes 3 seconds rather than 13.  Overall gain:
	  430 seconds out of 433.
	
	- CTable now has a new interface for iterators.  In particular:

	  - The following classes were created:
	    - TableIterator
	    - TableRow
	    - TableRowIterator

	    The iterators are Java-style iterators.
	
	  - Use CTable::iterator() to get a TableIterator pointing to the
	    first row.

	  - CTable::get_no_of_rows() has been renamed to CTable::size().

	  - The former typedef CTable::iterator has been removed.

	  - The following have been removed:

	    - const_iterator CTable::begin
	    - const_iterator CTable::end
	    - iterator CTable::begin
	    - iterator CTable::end

	  - A number of methods now use TableIterator rather than the old
	    CTable::iterator typedef for one of its inputs.

	- CMQLResult has a new interface.  In particular, the following
	  methods were added:

	  - bool isSheaf() const;
	  - bool isTable() const;
	  - CTable* get_table();

	- The classes in MQL/mql_sheaf.cpp have new Java-style iterators.
	  In particular, the following classes have been added:

	  - StrawConstIterator
	  - SheafIterator
	  - SheafConstIterator

	  The latter two are iterators on CList_of_straws.

	  In addition, CStraw, CList_of_straw, and CSheaf all have
	  iterator() methods which return the appropriate iterator.
	  CList_of_straw and CSheaf have, in addition, a const_iterator
	  method.

	  This means that the begin()/end() methods of CStraw and
	  CList_of_straw have been removed.

	- CSet_of_monad_ms has a new interface for dealing with iterators.
	  In particular:

	  - SOMConstIterator class was added to include/monads.h and
	    EMdF/monads.cpp.
	  - CSet_of_monad_ms::begin() was removed
	  - CSet_of_monad_ms::end() was removed
	  - CSet_of_monad_ms::const_iterator() was added

	  In doing this transition, the following files were touched:

	  - include/monads.h
	  - EMDF/monads.cpp
	  - EMdF/emdfdb.cpp
	  - MQL/mql_monads_statements.cpp
	
	- Monad_Set_Element has had the following methods added:

	  - Monad_Set_Element::equals()
	  - Monad_Set_Element::isBefore()
	
	- The Makefiles.am's have been cleaned up a bit as regards
	  dependencies of libraries.  In order to do this, the following
	  files were changed:

	  - pcre/Makefile.am
	  - EMdF/Makefile.am
	  - MQL/Makefile.am
          - src/Makefile.am
          - tests/Makefile.am
          - SWIG/java/Makefile.am
          - SWIG/perl/Makefile.am
          - SWIG/python/Makefile.am
          - SWIG/ruby/Makefile.am

	- post-increment (identifier++) has been changed to pre-increment
	  (++identifier) wholesale.  This gives slight speedups as
	  described in B. Stroustrup, "The C++ Programming Language", 3rd
	  edition, p. 565.

	  The following files were visited:

	  - EMdF/emdf_output.cpp
          - EMdF/emdf_wstring.cpp
          - EMdF/emdfdb.cpp
          - EMdF/inst.cpp
          - EMdF/monads.cpp
          - EMdF/string_func.cpp
          - EMdF/table.cpp
          - EMdF/utils.cpp
          - MQL/mql_R.cpp
          - MQL/mql_features_statements.cpp
          - MQL/mql_helper_classes.cpp
          - MQL/mql_monads_statements.cpp
          - MQL/mql_object_statements.cpp
          - MQL/mql_select_statements.cpp
          - MQL/mql_sheaf.cpp
          - MQL/mql_symboltable.cpp
          - include/create_encryption.cpp
          - src/manage_indices.cpp
          - src/mql.cpp
          - src/upgrade_db.cpp
          - tests/emdftry.cpp
          - tests/mqltry.cpp

	- When a matched_object contains a sheaf that is empty (because
	  the corresponding object block/gap block did not have any inner
	  blocks), the inner sheaf is no longer present.  Instead
	  CMatched_object::get_sheaf return a nil pointer (0).  In order
	  to be able to tell this situation in advance,
	  MQL/mql_sheaf.cpp:CMatched_object has a new method: bool
	  sheaf_is_empty(void) const;.  At the same time, CSheaf::CSheaf()
	  was taken away and a new constructor put in its place:
	  CSheaf::CSheaf(bool is_fail).  Also,
	  include/mql_execution_environment.h:CMQL_execution_environment
	  has a new member: pEmptySheaf, which is initialized by the
	  constructor of CMQL_execution_environment and deleted by its
	  destructor, and which is used for printing CMatched_objects
	  whose sheaf_is_empty method returns true.  Also, MQL/mql_R.cpp
	  now uses this opportunity for not creating those empty inner
	  sheaves.

	  The following files were touched:

	  - include/mql_sheaf.h
	  - MQL/mql_sheaf.cpp
	  - MQL/mql_R.cpp
	  - include/mql_execution_environment.h
	  - MQL/mql_execution_environment.cpp

	- EMdFDB has a new static member: std::string BackendName().

	- All programs now have a (-V|--version) option which shows the
	  Emdros version as well as the back-end used.

	- MQL/mql_sheaf.cpp:CMatched_object has a new method: std::string
	  getObjectTypeName().

	- MQL/mql_execution_environment.cpp:CMQL_execution_enviroment has
	  a new method: addObjectTypeName().

	- MQL/mql_execution_environment.cpp:CMQL_execution_enviroment has
	  a new method:

	  - fillOTNs(), which is called by the constructor and which
	  populates m_object_type_names with the object types of the
	  database, if possible to connect.

	  At the same time,
	  MQL/mql_object_type_statements.cpp:CCreateObjectType::Exec calls
	  m_pEE->addObjectTypeName() after creating successfully.  Also,
	  MQL/mql_database_statements.cpp:CUseDatabaseStatement::Exec
	  calls m_pEE->fillOTNs().

	- New method: EMdFDB::DBIsInitialized(bool& bIsInitialized), which
	  sets bIsInitialized to true if the current database has an
	  object_types table.  This method is used in the new
	  CMQL_execution_environment::fillOTNs().

	- MQL/mql_enumeration_statements:
	  CEnumerationStatement::SymbolEnumerationExists() now gives an
	  MQL error message if it isn't there.

	- SWIG/java/libjemdros.in, SWIG/python/pyemdros.i
	  SWIG/ruby/rbemdros.i now %apply some type-maps to (const)
	  std::string& so that std::string& is considered an input
	  parameter.  This means that some parameters which could have
	  been a nasty SWIGTYPE representing a pointer to std::string have
	  been replaced with normal strings.  Note that, unfortunately,
	  the strings are pass-by-value rather than pass-by-reference.

	- EMdFDB::GetEnumConstNameFromValue() has been added.  This may
	  be used to get a string from an enum const value.  If more than
	  one enum const has the same value, it is undefined which of them
	  is returned.

	  In order to do this, the following changes were made:

	  - EMdFDB::add_enum_const_to_cache now returns bool, and it also
	    adds the enumeration name.

	  - EMdFDB::GetEnumConstNameFromValue() was added.
	
	  - CEmdrosEnv::GetEnumConstNameFromValue() was added.

	  - tests/emdftry.cpp tests EMdFDB::GetEnumConstNameFromValue().

	- EMdFDB::EnumConstExists now exists in a version for getting the
	  enum_const_name from the value.  Also, tests/emdftry.cpp tests
	  EMdFDB::EnumConstExists().

	- tests/emdftry.cpp tests basic EMdF/string_func.cpp
	  functionality.

	- include/mql_sheaf.h:CMatched_object now has a getter function,
	  get_object_type_index().  In addition,
	  include/mql_execution_environment.h has a getter function,
	  get_object_type_name_from_index().

	- mql(1) now has a new switch: (-n|--nop), which directs the
	  program not to show the output results.  This is useful when
	  benchmarking the query-subsystem, since printing the results can
	  take a long time, and the usual use of MQL does not include
	  printing the results, since they will typically be accessed
	  in-memory.

	- Added examples/hebrew.
	
	*** Miscellaneous changes ***

	- plemdros module renamed to EmdrosPerl.

	- rbemdros module renamed to EmdrosRuby

	- pyemdros module renamed to EmdrosPy

	- configure.in now doesn't need gawk, but can use nawk, since
	  strtonum is no longer used.

	- include/emdf.h now #defines EMDROS_VERSION.

	- src/mql.cpp now uses CEmdrosEnv.

	- tests/mqltry.cpp now uses CEmdrosEnv.

	- SWIG/java/Test.java.in has been renamed to
	  SWIG/java/TestEmdros.java.in
	
	- %prep-section in emdros.spec.in now tests for presence of
	  various files in /usr/local/lib/emdros/, and refuses to build if
	  they are there.

	- A new makefile has been added: include/Makefile.inc.  Currently,
	  it holds the header-files to be included in the package.  This
	  is now referenced from ./Makefile.am and include/Makefile.am for
	  inclusion in Linux/Unix and win32 packages.  This makes it
	  easier for the maintainer.

	- CStatement::set_Next() and m_next have been removed, since the
	  statements are no longer chained in the MQL parser.  This has
	  been the case for a long time.

	- CSet_of_monad_ms has a new method: CSet_of_monad_ms::equals(),
	  which is a proxy for the == operator, and is SWIG-wrapped.

	- The RPM .spec files are no longer created just by running make.
	  Instead, you have to run "make spec".

	- The RPM spec files now don't say "rh80".
	
	- A new target has been created in the top-level Makefile.am:
	  spec2.  It creates, from emdros.spec2.in, two spec files which
	  create RPMs with the SWIG machinery.  At the same time,
	  emdros.spec.in now reverts to not creating SWIG RPMs.

	- All SWIG RPMs now no longer install the static versions of the
	  Emdros SWIG libraries.

	- All programs now refer to http://emdros.org/whattodo.html if a
	  connection could not be established, and the message has been
	  slightly altered (for emdftry and mqltry), and expanded (for
	  mql, manage_indices, and upgrade_db).

	- Upgraded to recent versions of the autotools
	  (automake/autoconf/libtool).  CVS versions were pulled for
	  autoconf and libtool on April 25, 2003.  Automake version is
	  1.7.4.  At the same time, got rid of old, ugly hack in
	  configure.in to change libtool behavior to not move files
	  around.  This had caused problems on the Solaris Sun Forte C++
	  compiler.  With the new autotools, this problem went away.

	- Added a std::endl before each OR in the whereclause of
	  EMdFDB::GetFeaturesByQuery.

	- Added EMdF/emdfdb.cpp:feature_type_id_is_ASCII() function.

	- Added EMdF/string_func.cpp:encodeSTRINGstring() function.

	- MQL/Makefile.am now lets the built sources be included in the
	  distribution rather than being cleaned and built from scratch.
	  This removes many of the dependencies in the former gnuwin32.zip
	  package, as well as dependencies on bison, flex, and FLEXLEXER
	  for users who compile from a distribution preview or release.
	  configure.in was also updated.  You may wish to edit
	  MQL/Makefile.am if you need to change where it finds bison,
	  flex, and FlexLexer.h.

	- configure.in now implements a hack on SunOS using the Sun Forte
	  CC compiler.  The hack make symbolic links in the .libs/
	  directories to ../SunWS_cache.  This was the cause of some
	  linking problems on Solaris, as documented in an e-mail thread
	  between Constantijn and me, where the mail with Constantijn's
	  solution appeared on May 16, 2003.

	
- *** Version 1.1.10.fix1 ***

	*** Bugfixes ***

 	- libpcre_emdros.a was not installed.  It now is.

 	- EMdF/emdfdb.cpp:feature_type_id_is_STRING() did not return
 	correct results if the feature was an enum.  This has been fixed.
 
 	This was a problem if the enum queried was the first thing that
 	had been created in the database.  It resulted in obscure errors
 	with, among other MQL statements, GET FEATURES.
 
 	- EMdF/emdfdb.cpp:EMdFDB::GetFeatures() for a single object id_d
 	and CEMdFValue's had a bug whereby its SQL queries were malformed
 	with respect to commas.  This has been fixed.
	
 	- MQL/mql_object.cpp:CMQLObject::get_feature_names() used to sort
 	the string-vector.  This caused problems when object blocks
 	returned the same features, but in different orders.

 	- MQL/mql_query.cpp:get_characteristic_string() now doesn't sort
 	feature-names (i.e., make them into a set before adding).  This
 	caused problems when object blocks returned the same features, but
 	in different orders.

	- CSet_of_monad_ms::ToString() has a new signature, so that it
	  returns a std::string rather than accepting one as a parameter.

	- CSet_of_monad_ms::get_as_string() was removed.  This was because
	  it was redundant, with the new ToString signature.

	- CSet_of_monad_ms::Difference() renamed to
	  CSet_of_monad_ms::difference().
	
- *** Version 1.1.10 ***

	*** Security enhancements ***

	- All programs now allow the specification of a database user on
	the command-line.  The emdf user is no longer necessary, although
	it is used as a default if no user is specified.  This allows
	fine-grained control over user permissions, as fine-grained as the
	database backend allows it.
	
	- The default password is now disabled by default.  Use
	--enable-default-password on ./configure to enable it.  Or, if
	compiling on Win32, change win32/lconfig.h.win32.{pgsql,mysql}.
	That also means you will probably have to use the -p option on the
	Emdros programs if you use them.
	
	- An encryption interface for strings has been added in include/,
	called encryption.h.  The encryption is simple, and it's only an
	obfuscation, so no real security.  It is used for encrypting the
	default password, and for encrypting the password stored in the
	PgEMdFDB object.

	- The default password is now stored in
	include/create_encryption.cpp.  This is where you should change
	it.  For better security, you should change the
	NO_OF_EOR_STRING_CHARS number as well.

	- The programs in src/ and tests now zero-fill the password after
	it has been used.
	
	- EMdF/pgemdfdb.cpp now encrypts the password it holds in a
	member.
	
	- EMdF/mysqlconn.cpp now doesn't store the password in itself.
	
	*** Bugfixes ***

	- EMdF/Makefile.am has been fixed so it uses BACKENDLDADD where it
	needs to rather than LIBEMDFLDADD or nothing.  At the same time,
	BACKENDLDADD and PROGRAMLDADD have been added to configure.in.

	- EMdF/emdfdb.cpp:GetInst now does string-conversion on 8-bit
	strings, which means that retrieving 8-bit strings for comparison
	in topographic queries now actually works (!).

	- CFeature_comparison::compare used to compare on string-values,
	which meant that, e.g., 200 < 30 for enumerations.  That was
	clearly not the intention!  This has been fixed.
	
	*** Enhancements ***

	- Speed improvement: When using self as the basis for finding
	objects in a SELECT (ALL|FOCOS) OBJECTS query, the self feature
	was not previously checked by the SQL engine, but rather only
	checked later by the MQL engine.  This led to poor performance
	when doing things like:

        SELECT ALL OBJECTS WHERE [Verse self = 1061745 [Word]] GO

	- Speed improvement: EMdF/emdfdb.cpp:EMdFDB::GetInst has been
	updated so that it only issues one query.  This gives good a
	overall performance increase on topographical queries.
	
	- Speed improvement: EMdF/emdfdb.cpp:CreateIndicesOnOTMonadMs now
	adds index on mse_last, which gives slight performance
	improvements on MySQL.  Correspondingly,
	EMdF/emdfdb.cpp:DropIndicesOnOTMonadMs drops the created index.

	- Speed improvement: EMdF/emdfdb.cpp:EMdFDB::GetInst now doesn't
	issue monad-constraints in the where-clause if the first/last
	monad is min_m and max_m respectively.  Also, it doesn't use a
	join on OT_objects and OT_monad_ms when not necessary.
	
	- Speed improvement:
	EMdF/emdfdb.cpp:EMdFDB::GetObjectsHavingMonadsInMonadSet now uses
	a different formula for restricting the monads.  This leads to
	better performance on the SELECT OBJECTS HAVING MONADS IN
	statement.  Thanks to Chris Wilson for this patch.

	- Speed improvement: MQL/mql_query.cpp:* now calculate Insts such
	that object blocks that are at the same level of nesting (and so
	have the same characteristic set) and which have the same object
	type and the same feature-constraints and the same features to
	get, will have the same CInst.

	- Speed improvement: EMdF/emdfdb.cpp:EMdFDB::GetInst() now uses
	STRAIGHT_JOIN on MySQL.  This gives greater performance, since the
	index on OT_monad_ms.object_id_d is now used.

	- Removed dependency on libpq++.  This is because PostgreSQL
	version 7.3.x removes libpq++ from the source distribution, moving
	it to gborg.postgresql.org.  But since we can no longer count on
	it being present, we have removed the need for it.  This was done
	by updating EMdF/pgconn.cpp and include/pgconn.h.  

	- At the same time, we also removed the need to #include any
	PostgreSQL-specific files when simply using the Emdros libraries.
	You will need the PostgreSQL development files (#include-files,
	etc), usually packaged as postgresql-devel on RedHat systems, for
	compiling Emdros, but you no longer need it for simply using
	Emdros from pre-built binaries.

	- The win32 binaries now include all libraries and header-files
	necessary for development on Win32.  This means that there is no
	need to compile Emdros on Win32 if you wish to use Emdros
	libraries rather than the mql program.  You will still need the
	MySQL libraries, but the PostgreSQL libraries have been included.

	- Memory improvement: The EMdFConnection (and its PostgreSQL/MySQL
	descendants) now has a member function for releasing the result it
	is carrying along.  EMdFDB takes advantage of that, meaning that
	Emdros now uses less memory amortized over the total runtime of a
	query.

	- Speed improvement: CSet_of_monads::is_empty is now used
	ubiquitously in CSet_of_monads to test emptiness.  It has been
	inlined, and uses a different algorithm than before.  Emptiness is
	checked for often, and the method used before took 1.50% of the
	time of one query (q8.txt).

	- Speed improvement: ~CSet_of_monads needlessly called clear().
	It doesn't anymore.

	- Speed improvement: CMatched_object::CMatched_object(const
	CMatched_object& other) now has another implementation, and avoids
	the CSet_of_monad_ms::operator=, while taking advantage of the new
	CSet_of_monad_ms::CSet_of_monad_ms(const CSet_of_monad_ms& other)
	copy-constructor.

	- Speed improvement: All member functions in Monad_Set_Element
	have been inlined, and some have had their algorithm changed
	slightly.

	- Speed improvement: CSet_of_monad_ms now stores and maintains
	m_first and m_last.

	- Speed improvement: CInstContents now doesn't maintain a map of
	id_d to CInstObject*'s.  CInstContents::add_object (which was
	CInst::add_object) has a new algorithm as a result.

	- Speed improvement: EMdFDB::GetInst now only adds the current
	object if it is new (i.e., not seen before in the query-results).
	This is at the expense of sorting the query-results first with an
	ORDER BY.

	- Speed improvement: CSet_of_monad_ms::AddMSE now applies a
	short-cut if the mse given is after the last monad in the set.

	- Speed improvement: EMdFDB now stores a cache of object type
	names by object type id_d.  This gives a performance increase,
	especially when printing the results.

	- Speed improvement: The following now make extensive use of the
	technique of not calling the end() iterator-getter all the time in
	iterator-loops, but getting it once at the beginning:
	  - EMdF/emdfdb.cpp
	  - EMdF/emdf_output.cpp
	  - EMdF/emdf_wstring.cpp
	  - EMdF/inst.cpp
	  - EMdF/monads.cpp
	  - EMdF/string_func.cpp
	  - EMdF/table.cpp
	  - EMdF/utils.cpp
	  - MQL/mql_features_statements.cpp
	  - MQL/mql_helper_classes.cpp
	  - MQL/mql_monads_statements.cpp
	  - MQL/mql_mo_nr.cpp
	  - MQL/mql_object.cpp
	  - MQL/mql_object_statements.cpp
	  - MQL/mql_query.cpp
	  - MQL/mql_R.cpp
	  - MQL/mql_select_statements.cpp
	  - MQL/mql_sheaf.cpp
	  - MQL/mql_symboltable.cpp

	- Speed improvement:
	CSet_of_monad_ms::CSet_of_monad_ms(first,last) has been written,
	and it is used in MQL/mql_R.cpp in lieu of Hat().

	- Speed improvement: MQL/mql_utility.cpp:Restrict has been
	optimized.

	- Speed improvement: EMdF/inst_object.cpp's constructor now takes
	the last monad of the object as well, which saves us a call to
	CInstObject::add_mse in EMdFDB::GetInst.

	- Speed improvement: EMdF/monads.cpp:CSet_of_monad_ms has a new
	technique for comparing first/last of monad set elements on some
	of the functions (A_first_m/B_first_m, A_last_m/B_last_m).
	Specifically, part_of(), RemoveMSE(), and intersect().

	- Speed improvement: MQL/mql_sheaf.cpp:* have had their begin/end
	accessors inlined.  Also, CList_of_straws::is_empty has been
	inlined and now references m_list directly.

	- Speed improvement: MQL/mql_sheaf.cpp:CList_of_straws now has
	m_success as public member, and MQL/mql_R.cpp references it
	directly rather than via CList_of_straws::get_success().

	- Speed improvement: MQL/mql_query.cpp:CObject_block_common now
	has m_inst as a public member, and MQL/mql_R.cpp:* have been
	updated not to use CObject_block_common::get_inst().

	- Speed improvement: MQL/mql_R.cpp:R_inst_opt_blocks now returns
	nil (0) if opt_blocks is not a blocks.  At the same time, all
	"CInst& inst" parameters have been changed to "CInst *pInst".

	- Speed improvement: MQL/mql_symboltable.cpp has been rewritten to
	use the new CEMdFValue and CSmartVector class and template.  Also,
	CFeature_comparison::compare now uses the CEMdFValue::compare
	function.

	- Speed improvement: CMQL_execution_environment now carries a
	CSmartVector of object type names used in a topographic query.
	This smart-vector is filled while compiling the query.  It is used
	by CMatched_object to get the object type names required for
	printing its contents.

	- All SWIG ruby-files are now in SWIG/ruby/ instead of in EMdF/.

	- A SWIG Java interface has been added.

	- A SWIG Python interface has been added.
	
	
	*** Miscellaneous changes ***

	- Now doesn't delete the CEMdFOutput in the
	CMQL_execution_environment destructor.  So src/mql.cpp does it
	explicitly, as does tests/mqltry.cpp.

	- RPM binaries now don't contain debug information.
	
	- RPM spec file now obeys $RPM_OPT_FLAGS as well as $CFLAGS and
	$CXXFLAGS.

	- tests/Makefile.am now doesn't include CXXFLAGS in AM_CXXFLAGS
	(this was redundant).

	- EMdFDB::GetObjectsHavingMonadsInMonadSet now identifies itself
	correctly in any error messages.

	- src/Makefile.am has been fixed so manage_indices and upgrade_db
	don't depend on the mql library.

	- tests/mqltry.cpp has been updated so it doesn't emit two
	expected error-messages at the beginning.

	- EMdFDB::GetInst now logs the start-time of the query.

	- tests/emdftry.cpp has been updated so it doesn't emit the local
	error message twice.

	- tests/mqltry.cpp has been updated so it will display a DB error
	if it can't connect.

	- CSet_of_monad_ms::ToString was added, and used in
	MQL/mql_sheaf.cpp:CMatched_object::put_Console.

	- ./Makefile.am now has a new target: static-spec.  It produces
	RPM .spec files which have --disable-shared on the command-line
	when configuring the software.  Useful for testing, since the
	software compiles much faster when not compiling the shared
	libraries.

	- The ruby SWIG bindings now depend on the regular Emdros
	libraries instead of including their object files.

	- The CMQLError::mql_get_error() member function has a new
	signature.

	- The EMdFDB::ErrorMessage() member function has a new signature.
	The returned string will be empty if there are no errors.  Thus
	checking for length > 0 of the returned string will be the same as
	checking for the boolean returned up until this release.  See
	tests/emdfdb.cpp for an example.

	- The libpcre.lib library on Windows has been renamed to
	libpcre_emdros.lib for uniformity with Unix, and also to avoid
	problems with other installations of PCRE on the build machine.

	- EMdFDB::GetCurrentDatabaseVersion() now returns a bool
	bCanUpgrade, and src/upgrade_db.cpp now obeys it.  For the moment,
	Emdros can always upgrade databases, but if future structural
	changes prevent this, we now have the interface to say so.

	
- *** Version 1.1.10pre1 ***

	*** Bugfixes ***

	- EMdF/Makefile.am has been changed so that it does not link to
	PostgreSQL binaries even when doing a MySQL compile.

	
	*** Miscellaneous changes ***

	- A superfluous szQuery has been removed from
	EMdFDB::CreateObjectType.
	
	
- *** Version 1.1.9 ***

	*** Enhancements ***

	- Fixed potential buffer-overflow in EMdF/pgconn.cpp's
	constructor.

	- Fixed potential buffer-overflows in EMdF/emdfdb.cpp.

	- Added examples/ directory and greek and morph_old examples.
	
	*** Bugfixes ***

	- When some inst in the aggregate-querying tree was empty, its
	big-union operation would throw a BadMonadsException.  This is
	fixed; it now just returns an empty monad-set.  To do this,
	inst.cpp:CInst::big_union was modified.

	- But then, if an inst is empty, its object block has no chance of
	returning anything, much less its inner blocks.  So
	CObject_block_common::AggregateQuery was modifed so that it does
	not recurs through its inner blocks if the object block's inst is
	empty.

	- The PCRE library license requires that altered versions be
	marked clearly as such.  Since I remove or replace some of the
	PCRE files in the version I distribute, I ought to notify users of
	this fact.  In compliance with the PCRE license, I have added a
	pcre/ALTERATIONS file that documents the changes.

	*** Miscellaneous changes ***

	- Emdros is now licensed under the GNU GPL.
	
	- Some lines logging a number of things when
	include/emdf.h:EMDROS_LOGGING was set to non-zero were commented
	out.

	- MQL/mql_select_statements:CQueryBase::MyExec() now logs start-
	and stop-times for R_topograph if logging is turned on.

	- MQL/mql_execute.cpp:mql_execute_stream now logs start- and
	stop-times for printing of results when logging is turned on.

	- EMdF/pgconn.cpp:PgEMdFConnection::Exec now writes the query to
	the log if logging is turned on.

	- EMdF/mysqlconn.cpp:MySQLEMdFConnection::Exec now writes the
	query to the log if logging is turned on.

	- EMdF/mysqlconn.cpp's constructor now only writes an error
	message to stderr if EMDF_DEBUG is #define'd.

	- EMdF/emdfdb.cpp:EMdFDB::GetCurrentDatabaseVersion() now reports
	"1.1.8 or later" for current database version instead of just
	"1.1.8".

	
- *** Version 1.1.8 ***

	*** Enhancements ***

	- The CEMdFDB::GetInst functions have been changed.  This gives
	performance increases, time-wise, with most classes of queries.

	One query, which took 2 hours 29 minutes to run without this
	feature, now takes 1 minutes 30 seconds to run, reproducibly.

	That's on a 432,000 monad corpus, on RedHat Linux 8.0 using
	PostgreSQL 7.2.2 on a 700MHz PIII using UltraATA66 for disk
	transfer.

	The CInst::big_union function has also been changed.  Part of the
	speed-increase stems from this.
	
	- All Emdros libraries are now built in two versions by default:
	Shared and static.  Before, only static libraries were supported.

	- Emdros is now truly a concurrent system.  Before 1.1.8, Emdros
	was alsmost a concurrent system, being able to handle many
	connections at once.  However, if one tried to issue two
	concurrent CREATE OBJECT statements, the system was likely to
	fail. 

	In 1.1.8, the mechanism for creating object id_ds and other ids
	has been changed, so that concurrent access is now possible.

	  - The following member functions were deleted:

	    - EMdFDB::SetNextObjectID_DIfLarger

	  - The following member functions were renamed:

	    - EMdFDB::CreateSequenceTables() --> CreateSequenceTables110().

	    - EMdFDB::MoveSequenceValue() --> MoveSequenceValue110()

	  - The following functions were created:

	    - EMdFDB::UpgradeDatabaseTo118()
	    - EMdFDB::CreateSequenceTables118()
	    - EMdFDB::MoveSequenceValue118()

	  - The following functions were changed:
'
	    - EMdFDB::GetNextID()
	    - EMdFDB::CreateDatabase()
	
	- New MQL statement: VACUUM DATABASE.  See the docs for details,
	especially the MQL User's Guide and the PostgreSQL documentation.

	- A system for building RPMS has been added.  It has only been
	tested on RedHat Linux 8.0.  The files involved are:
	emdros.spec.in, postgresql.subst.sed, and mysql.subst.sed.  The
	top-level Makefile produces two spec files:
	emdros-postgresql-@VERSION@ and emdros-mysql-@VERSION@.

	- A bunch of ISO-8859-X encodings have been added to
	include/emdf_output.h:eCharsets and EMdF/emdf_output.cpp.  This
	means that you will now be able to use your favorite ISO-8859
	encoding simply by calling new CEMdFOutput() with the right
	parameter.
	
	- There is preliminary support for SWIGification of the Emdros API
	for Ruby.  Currently, this only works with SWIG 1.3.16 or later,
	and only when using gcc and the accompanying C++ standard
	libraries, and only on i386 Linux.  If anyone modifies the
	makefiles/configure.in to support other platforms, please
	contribute the changes.  See <http://www.swig.org/> for more
	information on SWIG.

	- The UPDATE OBJECTS BY MONADS statement and the DELETE OBJECTS BY
	MONADS statement now use the logic for SELECT OBJECTS HAVING
	MONADS IN for finding which objects should be updated/deleted.
	This will in some cases give speedups.  In order to do this,
	changed MQL/mql_helper_classes:CByMonads::GetObjectsByMonads().

	- The error-message when creating an object type with a feature
	whose enumeration does not exist is now more intelligible.

	- tests/emdftry now emits a more helpful error message if it could
	not connect to the back-end, and tests/mqltry now emits the same
	error message.

	- The two programs emdftry and mqltry, located in the tests/
	directory, are now installed along with the other programs.

	- The Makefiles now only include -I../include once when compiling.

	- Some of the include files needlessly #included <emdfdb.h>.  This
	has been fixed.

	- Emdros now supports a crude logging mechanism, turned on or off
	in emdf.h.  This has only been used so far for
	optimization-purposes.
	
	*** Bugfixes ***

	- Fixed bug in EMdF/emdf_output.cpp:CEMdFOutput::out_char_data, so
	that "<" outputs "&lt;" and "&" outputs "&amp;", not the other way
	around.
	
	- Changed inst.cpp:CInst::add_object so that it only inserts if
	object is not already in the Inst.  There was a potential problem
	with EMdFDB::GetInst in that it split up the monad set into
	sections which may or may not coincide with object boundaries.  If
	the breaks did not coincide with object boundaries, but an object
	had monads in two (or more) sections of the monad set, then the
	same object could be found more than once.  The change to inst.cpp
	prevents this from causing an assertion.

	- Changed library-checking machinery in configure.in so that
	"-lpq++ -lpq" is only added to EMDFLDADD, not to LIBS.  This was
	because compiling pcre with the C compiler on Solaris (cc) gave an
	error when these libraries were present on the command line.

	- Changed include/Makefile.am so that mql_error.h, mql_execute.h,
	mql_types.h, mql_extern.h, and mql_execution_environment.h are
	installed.  Also excluded pcre.h from being distributed in the
	include/ directory.

	- The files include/utils.h and include/emdf_wstring.h are now not
	installed.  They are not necessary to install, as they are only
	used internally to Emdros, and have little utility outside of
	Emdros.

	- The config.h file is now called emdros-config.h.  The lconfig.h
	file is now called emdros-lconfig.h.	
	
	- The files emdros-lconfig.h and emdros-config.h, both created by
	the ./configure script, now reside in include/, and are installed
	along with all other installable headers.  This involves the files
	emdros-lconfig.h.in and emdros-config.h.in.

	- Changed EMdF/emdf_output.cpp:CEMdFOutput::~CEMdFOutput so that
	it flushes the stream before destroying itself.

	- Fixed a bug in EMdF/emdfdb.cpp::GetObjectsAtM().  It used to be
	based on OT_monad_ms, but this might return an id_d more than
	once.  Now it is based on OT_objects, which only returns each
	object id_d once.

	- The class-declarations for the various MQL statements are now
	split into separate header-files.  This gives (slightly) faster
	compile-times.

	- The classes CByMonads and CQueryBase have had their
	compiler-stage member functions renamed to MyWeed, MyMonads,
	MySymbol, etc. in order to avoid obscure warnings on Sun Forte.

	
- *** Version 1.1.7 ***

	*** Enhancements ***

	- Major speed improvements on certain classes of queries.  One
	query that before took 96.45 minutes to run, now takes 3.70
	minutes to run.  The query was:

	select all objects 
	where
	[clause_atom
	   clause_atom_type = ct_WayX
	      [phrase focus
	          function = Subj
	      ]
	]
	go

	In order to do this:
	
	  - Changed EMdF::GetInst() (both functions) in EMdF/emdfdb.cpp
	  and include/emdfdb.h to issue fewer queries.

	
	- Each enumeration is now a namespace in its own right.  That is,
	enumeration constants can have the same name in different
	enumerations.  Within an enumeration, however, constant names must
	still be unique.

	  - Changed EMdF/emdfdb.cpp:EnumConstExists(),
	  include/emdfdb.h:EnumConstExists(), MQL/mql_query.cpp,
	  MQL/mql_helper_classes.cpp, MQL/mql_enumeration_statements,
	  include/mql_types.h, include/mql_query.h.

	- Very minor speed enhancement in
	MQL/mql_R.cpp:R_object_block_first() due to local variables
	containing first/last monads of Su and som.
	
	*** Bugfixes ***

	- Made it explicit in the AUTHORS file that Philip Hazel is the
	author of the PCRE library.

	- Fixed a bug in
	MQL/mql_object.cpp:retrieve_feature_values(CInstObject *pOther)
	which used to cause non-commutativity of AND and OR in feature
	constraints in SELECT (ALL|FOCUS) OBJECTS queries.  More
	precisely, only when feature names were mentioned in alphabetical
	order did the feature constraints work.  Thanks to Hendrik Jan
	Bosman (hjb at th dot vu dot nl) for finding this bug.
	
	- Fixed a bug in MQL/mql_utility.cpp:Restrict: This function used
	to take away the monad with which it was called, which was not the
	intention.  

	- Fixed a bug in MQL/mql_R.cpp:R_object_block_first() that caused
	limits on .. not to be obeyed.
	
	[Clause as c]            // Clause-1
	..
	[Clause mother = c.self] // Clause-2

	to begin looking for Clause-2, not at Clause-1.last()+1, but at
	Clause-1.last()+2.
	
	- Did some memory cleanup using valgrind.

	  - CMQL_execution_environment destructor did not delete pOut,
	  pStatement, pSymbolTable, and pLexer. Fixed.

	  - MQL/mql_sheaf.cpp:CList_of_straws::append_and_subsume failed
	  to "subsume" argument.  Fixed.
	  
	  - MQL/mql_R.cpp:R_block_str and
	  MQL/mql_R.cpp:R_rest_of_block_str. failed to delete the straw
	  they had just Join'ed onto a CList_of_straws.  Fixed.

	  - Fixed a bug in
	  MQL/mql_query.cpp:CFeature_comparison::make_constraints() which
	  caused a memory leak by adding three strings together.

	  - Fixed a bug in MQL/mql_R.cpp:R_block_string where its usage of
	  Restrict led to a memory leak.  Also changed MQL/mql_utility.cpp
	  and include/mql_utility.h in order to change the prototype of
	  Restrict.

	  - Rewrote MQL/mql_utility.cpp:Hat() along similar lines to
	  Restrict, and took advantage of it in MQL/mql_R.cpp.

	  - Made all tables in EMdFDB pointers to tables.  Made all lists
	  in CTable pointers to lists.  This in an effort to track down
	  some obscure memory leaks relating to the STL on Linux.

	  - Changed EMdF/emdf_output.cpp:s_charset_names to be of type
	  const char* rather than std::string.

	  - Changed src/mql.cpp:main() so that the default string values
	  are initialized here rather than in
	  src/mql.cpp:parse_arguments().

	  - Changed EMdF/inst.cpp:~CInst so that it erases all members of
	  m_map_by_monads.

	  - Added EMdF/monads.cpp:CSet_of_monad_ms::clear() and used it in
	  EMdF/monads.cpp:CSet_of_monad_ms::~CSet_of_monad_ms().

	  - Rewrote EMdF/monads.cpp:CSet_of_monad_ms::operator=.

	  - Rewrote EMdF/conn.cpp:AccessTuple(..., long&) so that it uses
	  istringstream rather than strtol.
	
	- Lexer now discards ASCII character 13 on all platforms, meaning
	you can send DOS/Windows-type linebreaks through the mql compiler
	without it complaining.

	- Fixed a %d --> %ld sprintf-bug in
	EMdF/emdfdb.cpp:EMdFDB::MoveSequenceValue().

	- Fixed an ordering-problem with the member-initialization list of
	EMdF/emdf_output.cpp:CEMdFOutput::CEMdFOutput().

	- Fixed a problem in src/Makefile.am and tests/Makefile.am that
	they included @LIBS@ in the ldadd variables, so libraries would
	appear twice.


- *** Version 1.1.6 ***

	*** Enhancements ***

	- Added a new statement, SELECT OBJECTS HAVING MONADS IN.

	  - Changed MQL/mql.yxx, MQL/mql_select_statements.cpp,
	  include/mql_types.h, tests/mqltry.cpp.

	- Weeding of CByMonads now tells you which mse went wrong.
	Changed MQL/mql_helper_classes.cpp.

	
- *** Version 1.1.5 ***

	*** Enhancements ***

	- Added ability to get feature-name "self" in EMdFDB::GetInst.  In
	order to do this:
	
	  - Added include/mql_object.h:CMQLObject::get_feature_infos().

	  - Changed MQL/mql_R.cpp:R_inst() so that it passes a
	    std::list<feature_info> to EMdFDB::GetInst.

	  - Changed EMdF/emdfdb.cpp:EMdFDB::GetInst() (both versions) so
	    that they accept a std::list<feature_info> rather than a
	    std::vector<std::string> for features_to_get.

	- Added min_m and max_m support to the database.  This means that
	all queries are now done within the confines of the smallest monad
	and the largest monad present in the database.

	  - Added EMdF/emdfdb.cpp:{GetCurrentDatabaseVersion(),
	  UpgradeDatabaseTo110() (which is just the old
	  UpgradeDatabase()), UpgradeDatabaseTo115(),
	  Create_min_max_m_table(), Set_min_max_m_from_object_types(),
	  Set_min_max_m_from_object_type(), Set_max_m(), Get_max_m(),
	  Set_min_m(), Get_min_m(), Get_all_m_1(), TableExists()}

	  - Changed EMdF/emdfdb.cpp:{UpgradeDatabase(), CreateDatabase(),
	  DropObject(), DropObjectsInMonads()}

	- Added two new statements: SELECT MIN_M and SELECT MAX_M.

	- Updated tests/emdftry.cpp so that it now stops at first error.

	- Updated tests/mqltry.cpp so that it now tests SELECT MIN_M and
	SELECT MAX_M.

	
	*** Bugfixes ***

	- Fixed a bug in MQL/mql_query.cpp:CBlock::WeedFirstLast where the
	kObjectBlock case would have its bResult be true no matter what.

	- Fixed a bug in
	MQL/mql_query.cpp:CObject_block_common::AggregateQuery where
	make_inst's return value was ignored.

	- SELECT (FOCUS|ALL) OBJECTS now actually obeys restriction of Su
	with the USING SEGMENT clause.

	- SELECT (FOCUS|ALL) OBJECTS now actually works within the
	confines of all_m-1, as advertised in the User's Guide.

- *** Version 1.1.4 ***

	*** Bugfixes ***
	
	- Changed configure.in so that CFLAGS and CXXFLAGS are set to
	empty unless the user has set them.  This is in order to fix a bug
	with gcc3 which hangs on emdftry.cpp with the previously-default
	-O2 switch.
	
	- Fixed a bug in MQL/mql_R.cpp:R_object_block_first which caused
	"first" and "last" restrictors not to be obeyed.

	- Changed EMdF/Makefile.am and MQL/Makefile.am to use xxx_AR
	instead of the previous method of specifying how to build the
	libraries.  This was necessary after a move to Automake 1.5.
	
	- Made MQL/mql_R.cpp:{R_object_block_DB,R_object_block_inst} work
	with Su instead of U for checking the "last" constraint.

	*** Feature-enhancements ***
	
	- Added handling of comments to MQL/mql.lxx and MQL/mql_g_q.lxx.

	- Completed framework for compiling with Visual C++.

	- Added conditional inclusion of <windows.h> to
	EMdF/mysqlemdfdb.cpp and EMdF/mysqlconn.cpp.  This in order to
	compile with Visual C++.

	- Added --password option to mql(1), upgrade_db(1), 
	manage_indices(1), emdftry(1), and mqltry(1).

	- Added --host option to upgrade_db(1), manage_indices(1),
	emdftry(1), and mqltry(1).

	- Added MONAD SET CALCULATION statement.

	- Added a lot of keywords to mql.yxx and mql.lxx.

- *** Version 1.1.3 ***

	- Added --enable-debug | --disable-debug flags to configure
	script.

	- Changed the Makefile.am's so that they honor any user-set CFLAGS
	or CXXFLAGS environment variable.

 	- Changed MQL/mql_execute.cpp so that it tested bSuccess instead
	of bResult in mql_execute_stream just before emitting the results.

 	- Changed include/mql_types.h so that CByMonads has a virtual
	destructor.  This gets rid of a compiler warning (as well as being
	more correct C++).

	- Fixed a few bugs in MQL/mql_query.cpp relating to
	symbol-checking.  Specifically, the MQL query "[Word as w1][Word
	number = w2.number]" now doesn't compile, which it shouldn't,
	since w2 is not declared.
	
- *** Version 1.1.2 ***

	- Changed the warning for kFirstAndLast in
	CObject_block_common::WeedFirstLast (MQL/mql_query.cpp) to read
	"...in their blocks" instead of "...in their block".

	- Added syntax "<= limit" to restrictor in the MQL grammar.
	
	- Fixed a bug in the logic for computing when the limit in a power
	block is reached, so that it actually obeys what is documented in
	the MQL User's Guide, and so that it is more in line with
	intuition. That is, changed

	    if ((((limit != 0) && (som.first() > (Su.first() + limit)))
	to
	    if ((((limit != 0) && (som.first() >= (Su.first() + limit)))
	in mql_R.cpp.

	- Upgraded to PCRE 3.9.
	
	- Fixed some bugs in a number of makefiles (Makefile.am's), so
	that they will run with the latest versions of autoconf and
	automake.  Specifically, added variables EMDFLDADD and EMDFDEPS to
	configure.in, and used these in src/Makefile.am and
	tests/Makefile.am instead of conditional definition according to
	which backend is being used.

	- Fixed a bug in EMdF/Makefile.am so that make install now
	actually works.  It used to complain about installing headers.
	
	- Fixed a bug in EMdFDB::AddFeature and EMdFDB::UpgradeObjectType
	to make it work with PostgreSQL 7.2.1: This version of PostgreSQL
	complains if one gives a NOT NULL or a DEFAULT constraint on an
	"ALTER TABLE ... ADD COLUMN" command.

	- Added a parameter, bool add_not_null to
	EMdFDB::MakeFeatureSQLType in order to accomodate the above
	limitation in PostgreSQL.

	- Fixed bug in tests/emdftry.cpp: Updated various length-constants
	so that the string-features being made could actually hold the
	default strings.

	- Fixed two bugs in MQL/mql.yxx: The rules
	opt_feature_declaration_list and opt_list_of_feature_assignments
	were missing their trailing `;'.

	- Updated MQL/Makefile.am to include behavior for bison version
	1.35, which doesn't produce a parser.cpp.h file, but a parser.hpp
	file.

	- Fixed bug in pcre/Makefile.am: chartables.c is not a dependency
	of maketables.c, but of pcre.c.

	- Removed special rule in pcre/Makefile.am for making the dftables
	program: automake makes a rule all by itself.

	- Added virtual keyword to all Weed, Symbol, Type, Monads, and
	Exec methods in include/mql_types.h.
	
- *** Version 1.1.1 ***
	- Added EMdFDB::Vacuum(), EMdFConnection::Vacuum(), and
	PgEMdFConnection::Vacuum().  These functions clean up the database
	(on PostgreSQL only), by issuing a VACUUM command, optionally with
	the keyword ANALYZE.  See the PostgreSQL user's guide for details.
	The function returns true on success and false on failure (on
	PostgreSQL), or unconditionally true (on all other platforms).

	- Added GET MONADS statement (CGetMonadsStatement) in
	mql_monads_statements.cpp, and EMdFDB::GetMonadsFromID_Ds in
	emdfdb.cpp.

	- Added include/emdf_wstring.h and EMdF/emdf_wstring.cpp, which
	take care of defining std::wstring if it is not defined, and of
	defining std::ostream& operator<<(std::ostream&, std::wstring&) if
	it is not defined.  Also added various things to the configure.in
	script, among other things to check for << on std::wstring.

	- Added the following options to src/mql.cpp: -h , --host
	hostname; -d , --dbname dbname, --help.
	
- *** Version 1.1.0 ***
	*** Changes to database layout ***
	
 	- Changed the implementation of EMdFDB so that it no longer needs
	the OT_monad_ds tables.  Also added a new column to the
	OT_monad_ms tables.  This means that you must *upgrade* your old
	databases with the src/upgrade_db utility, or else start from
	scratch.

	- Changed implementation of certain functions in EMdF/emdfdb.cpp
	that used the objects table to not use the objects table.  The
	objects table is now no longer needed.  Especially
	ObjectID_DExists was changed.

	- Added the column 'value' to the PRIMARY KEY of
	enumeration_constants if using MySQL.  This only occurs when
	creating a new database.  The reason is that otherwise, MySQL
	3.23.36 fails to insert enumeration constants that are identical
	except for case.  It says that the key is duplicate.

	- The OT_monad_ms tables now only have "monad_ms_id" and
	"mse_first" in their primary key when creating new object types.
	The mse_last was redundant, but harmless (except for
	performance-hits).  We do need the mse_first, however, as
	monad_ms_id is not a unique id by itself: Several tuples may share
	any given monad_ms_id, e.g., the monad-set "{ 1-2, 8-9 }" consists
	of two tuples, each with the same monad_ms_id.
	
	- The 'sequences' table has been split into two tables,
	'sequence_0' and 'sequence_1'.  The src/upgrade_db program takes
	care of migrating old data from the 'sequences' table into these
	two tables.

	
	*** Program-internal structural changes ***
	
	- Added the CEMdFOutput class (include/emdf_output.h and
	EMdF/emdf_output.cpp) plus associated exception classes.

	- Added ./lconfig.h.in.
	
	- Changed the way USE_POSTGRESQL and USE_MYSQL are defined (they
	are now in lconfig.h)

	- Changed the interface of PgEMdFDB::PgEMdFDB to now have four
	std::string's; host, user, password, and database.

	- Added the src/upgrade_db.cpp and src/manage_indices.cpp
	programs, as well as a doc/manage_indices.1 man-page.

	- Changed signature of the version of EMdFConnnection::AccessTuple
	which is overridden in derived classes so that the std::string&
	result comes first.  This is so as to be rid of certain warnings
	on Sun systems.

	
	*** Major feature enhancements ***

	- Now supports XML output. See the
	MQL/mql_execution_environment.cpp constructor as well as the
	mql(1) manpage for how to use this.

	- Rudimentary support for using the mql(1) program as a daemon if
	started by xinetd or inetd.  This includes a new statement, QUIT,
	which can be used to close the connection after all commands have
	been executed.  The keyword "GO" is not necessary after this
	statement.  Also, when executing a statement, and the XML output
	is turned on, there will be a <mql_progress>...</mql_progress>
	element which is filled with dots (".") at irregular intervals.
	Note that the intervals are irregular, it means there is no
	guarantee of any response-time before the next dot, thus this
	cannot be used as a timeout measurement.
	
	*** Speed-improvement changes ***
	
	- Changed implementation of EMdF/string_func.cpp:strcmp_nocase.
	This is a big improvement in speed, since the strcmp_nocase
	function gets used a lot.

	- Changed the interface of EMdFDB and various other objects to
	have const std::string& instead of const char*.  This will
	hopefully bring a slight speed increase.

	- Changed implementation of the functions in EMdF/emdfdb.cpp that
	have to do with features so that they all use the feature cache.
	This should bring a slight speed-increase.

	- Added a function EMdFDB::ObjectID_DExistsInType to
	EMdF/emdfdb.cpp.
	
	- Added a function CID_D::SymbolObjectsExistInType which takes
	advantage of EMdFDB::ObjectID_DExistsInType.  

	- Used the CID_D::SymbolObjectsExistInType function in
	CGetFeaturesStatement::Symbol,
	CUpdateObjectsByID_DsStatement::Symbol, and
	CDeleteObjectsByID_DsStatement::Symbol.

	- Changed implementation of MySQLEMdFConnection::AccessTuple so
	that it now only uses mysql_data_seek if we are not just getting
	the next row.  This should be a performance increase on fetching
	those the results of queries that return large results.

	
	*** Bugfixes
	
	- Debugged UPDATE ENUMERATION so that it now actually works.

	- DELETE OBJECTS BY MONADS now actually returns a value as
	documented in the MQL User's Guide.

	- DELETE OBJECTS BY ... now return tables that are really tables.
	There was a bug whereby some rows had two "columns", i.e., two
	object id_ds.  This was just due to not starting a new row at the
	proper time.

	
	*** General improvements ***
	
	- Changed infrastructure of tests/mqltry.cpp so that it now has
	some more safeguarding against errors.

	- Added error message to mql_query.cpp:
	CObject_block_common::SymbolObjectTypeExists.

	- Changed CTable's headers so that they contain type-information
	on each header.  

	- Changed the output from various MQL commands so that booleans
	are no longer reported as '0' or '1', but as 'false' and 'true'
	respectively.

	- Added a few things to ./configure.in so that it compiles more
	easily on Sun Solaris (at least on the Sun machine I have access
	to...!).

	- Changed the Makefiles so that you can now compile even after a
	"make clean" without copying pcre/pcre.h to include/.

	- EMdFDB::ErrorMessage now returns both the local error message
	and the remote error message.
	
	
- *** 14 October 2001 ***
	Version 1.0.4

	- Added possibility of opt_blocks in gap_block and opt_gap_block.
	

