VEERSION .9871 I now include the executable, regression, in both the Windows and Linux prebuilt packages. This is for downloaders to be able to verify the quality of Rebecca for the version they download. I also added the regression test suite to the autoconf build system where it builds it by default. This is for those who port RebeccaAIML to another platform to be able to run regression tests to ensure the quality of the port. Use "./configure --help" to see all the autoconf options available. Updated the code for the regression testing. It now uses header and footer html files in resources/testing instead of having the html hard coded. Fixed it to output
instead of the incorrect
for html page breaks. I also improved it to be dll boundary safe by having it use Tag::instanceOf() instead of dynamically casting through dynamic_cast<>(). I also added an Arguments class to regression to enable a smooth transition over to autoconf VERSION .987 Condition and Li were not handling empty string cases correctly. See the latest regression tests in the documentation for the exact case. Li::getPredicateName() and Li::getAimlPattern() are now const methods. This change will break abi compatiblity with anyone using the framework but not api compatibility with the framework. Those using the framework will have to recompile and relink against this new version. Added these methods to the framework on the class Li: bool Li::isDefaultListItem() It returns true if the Li is a default list item or not. bool Li::isValueOnlyListItem() It returns true if the Li is a value only list item. bool Li::isNameAndValueListItem() It returns true if the Li is a name and value list. Added these methods to the framework on the class Condition: bool Condition::isBlockCondition() Returns true if this Condition is a block condition otherwise it will return false. bool Condition::isSinglePredicateCondition() Returns true if this Condition is a single predicate condition otherwise it will return false. bool Condition::isMutliPredicateCondition() Returns true if this Condition is a multi-predicate condition otherwise it will return false. Updated documentation for GraphBuilder::callSystemCommand() Removed the documentation about the bug aboug xsd not being validated. I really should have removed this a *long* time ago, but it's removed now. See the doxygen documentation for more details of these new methods and updates. VERSION .9861 Whenever topic was being set it was not calling srai's correctly. This was due to a bad logging call. VERSION .986 Fixed bug with PlainWordImpl::trimToOneSpace where I was not checking if the size of a string was greater than zero before using it. Fixed a bug with srai where the star indexes were not being calculated right during srai. Fixed a bug where rebecca would not let go of her internal AIML file and string caching system. Upgraded the qtgui and tested it underneath QT 4.1.4 Added the Callback method Callbacks::learnTagFileNotFound() for when the AIML XML learn tag cannot find a file it will call this callback. This will allow the programmer to handle file not founds for AIML XML programmatically. Added a new method GraphBuilder::callSystemCommand() which acts the same as calling the AIML XML tag "System" by sending the command to the operating system and returning the output of the command. VERSION .985 Added autoconf support for Unix'es and Linux. Now you can compile using, "configure; make; make install". See the doc/linuxINSTALL.txt in the distribution for information on how to utilize this. Added an Arguments class to each sample. The purpose of this is two fold. One is to show how you could parse arguments when utilizing RebeccaAIML api and the second is to make the installers of the samples easier to write in the future. The Arguments class now gives a few switches with each sample. See the source code of each sample for the list of available switches. However, you can type "console.exe -help" or "consoleAIMLHtmlConverter.exe -help" to get a list of the switches too. Added RPM support to the build. In the download section you should now be able to download RPM's for Rebecca for several flavors of Fedora Core. Tweaked the source files to work with gcc 4.1.0 VERSION .984 Added the feature of being able to add AIML strings to Rebecca on the fly through the method GraphBuilder.addString("aiml string"). You can add a whole category programatically as easily as: builder.addString ( "" "test aiml string" "" "" ); Added the learn tag per AIML 1.0.1 specification. Fixed the gender, person, and person2 tag implementations to pass all of the regression tests. Fixed the addFile and addDirectory to be tolerant of adding files which are native to the file system. Before you could at best portably use relative strings. Now you can use just about any file system string for GraphBuilder.addFile() and GraphBuilder.addDirectory(). As a result of this I was able to simply part of the qtGUI core to using whichever native absolute paths that came from Windows or Unix. See the documentation of these methods for more details: http://rebecca-aiml.sourceforge.net/documentation.htm Under the covers updated and changed the Transcode to translate both from xerces xml strings and to xerces xml strings. VERSION .983 Bug fix release. I fixed a bug reported by Charles Chevallier where when srai is called the input AIML tags behaved incorrectly. To fix this bug I had to alter the signature of GraphBuilderFramework.checkedInfiniteLoopGetResponse(). It now has a new boolean argument variable "keepPreviousUserInput". You set this to false if you do not want the previous user input stored internally. Usually you only want to set this to false when you call this from implementations of the Srai AIML tag. I fixed a bug reported by Charles Chaevallier where when punctuation is at the begining of a Rebecca Response it would cause her to crash. I fixed a one-off error where I incorrectly indexed some of the internal data structures and this would cause a crash. Made the stack operational thanks to a missing predicate found by Ryan Neill Put in more bot properties (the most common ones), thanks to Ryan Neill for pointing this out to me. VERSION .982 Bug fix release. I fixed a bug under Linux for the GraphBuilder::addCustomTagLibrary method. It would load the string given as soname.so when it should have loaded it as libsoname.so. I also fixed a bug reported by Charles Chevallier where Rebecca was not erasing commas before storing strings into her internal "that" variable. I added a regression test case for it so the bug will not reappear. I also fixed the "System" AIML tag to be able to return the string now under both Windows and Linux. Now the regression test for the "System" tag works! VERSION .981 Added a new cross platform simple QT GUI to the samples section to showcase how you would program a GUI with the RebeccaAIML engine. Fixed a bug where when you call new and delete on AIMLFacade or StringPimpl it would crash under Windows if you were mixing and matching Debug and Release. Now, new and delete are dll boundary safe. Forgot to put .98 in VERSION .98 for the GraphBuilderAIML::getVersion(). So, all resulting programs built using .98 will report they are version .972 when they encounter the AIML XML Tag . Fixed that in this version, it will say .981 when the tag is encountered. VERSION .98 I opened up the RebeccaAIML framework in which you can inherit from AIML XML Tag classes to add or modify the current working set. You will need Boost C++ library to use the framework. With the release of the framework you can now add your own custom AIML XML Tag dll or shared object in which you can change the functionality of the engine. The framework is fully documented and I provide a sample which overrides all the AIML XML Tags to provide a Html converter. It converts AIML XML files into html pages with links. The html pages provide a way to "cruise" through the AIML brain and see how the brain would look like in memory. VERSION .972 Copy constructor of StringPimpl was not setting its private implementation handle to 0 and when it was called it would try to delete and in turn crash RebeccaAIML. I also changed the default precompiled windows binary to be multithreaded dll instead of just multithreaded. VERSION 0.971 Enabled true multi-lined that's. Now Rebecca can pass another regression test involving multi-lined that's. Also now the that index's involving previous input's and previous sentences works correctly. VERSION 0.97 A new regression testing system has been put into place. The regression test suite is that of ProgramD's. However, in the future I will add more test cases which should work for both the test regression suite here and for ProgramD's. How that is accomplished is through the use of xml to define the test cases. This is all from the work of Joel on ProgramD. From the regression testing, I have found bugs and made more fixes to this release. I also have found a few bugs which I will fix in an upcomming release. This release fixes yet another bug with the condition tag. The condition tag before only accepted AIML tags for the result of a succesful condition. Now regular text can be added as well to the condition tag as it should be. I also fixed up white space problems with this release as well as made the exceptions of FileNotFound and DirectoryNotFound more verbose. VERSION 0.96 This release fixes a bug in which the AIML tag "Condition" did not work at all. Also this release fixes the AIML.xsd. Therefore, I have enabled Schema validation in this release. With schema validation enabled, bad AIML tags will be reported to their respective callbacks and the XML parser automatically handles not adding bad AIML to the graph builder. Thus your callbacks will alert you to bad AIML tags, and your graph builder should still remain bullet proof. See the documentation for more details on XML callbacks through the class CallBacks. VERSION 0.951 Fixed the "muliti-lined that" bug. This bug was minor but an annoyance. Whenver a "that" has more than one line the last line should be choosen as a that. VERSION 0.95 Initial release. All AIML tags are implemented except for and the java script. There is currently a bug with the AIML.xsd that does not allow the AIML tag to validate correctly. So for the time being I have removed the AIML.xsd validation but will put it back as soon as that is fixed.