
Last update: September 2, 2006
Version 2.04+
Revised license agreement (August 2, 2006)
- Removed $NO_HASH define
- Added {$DO_ROWS_AND_COLUMNS} and {$HASH_ATTRIBUTE_OBJECT} defines.
- Added the ability to create a descendent component framework
from within the TagExplorer demo application
- Fixed a problem with the Stop method not working correctly
- Make extensive changes to the TErrorType property
- Removed the following attribute properties
1. NameStart
2. NameLength
3. ValueStart
4. ValueLength
The Start and Length property for each attribute is still available.
Version 2.03
- Source code is compilable under Delphi8 and Delphi 2005 without any changes
- Source code is compilable under C++ Builder 6. Some internal method
names were changed to help avoid naming conflicts.
- Fixed an error concerning unquoted attribute values that ended with a
forward slash (/). If it was the last attribute value in the tag, it
was mistaken as an indication that the tag was an XHTML tag.
- Fixed an error with the internal ParseEntity method where an ampersand
( & ) immediately following a Linux newline was ignored and caused the entity
to be.
- In the internal ParseEntity method, when it was determined that the method
was NOT dealing with an entity, it was shorting the result exactly 1 character.
Most noticable in long URLs in attribute values when cfTranslateEntities
was set to true. Fixed.
- Hex and decimal entities are now handled properly - ATagParser can now
translate character, numeric and hex entities.
- The OnEntity event, including all references to it, has been removed. This
means that etEntity in the Elements property, cfDetectEntities in the ComplexFilters
property and tfDetectEntities in the TextFilters property have all been
removed as well. It simply caused more problems than it solved.
- Fixed an elusive memory error that occurred when the attribute value exceeded
its buffer size of 64k. The buffer size has been increased and logic was
added to deal with potential overflows. This error usually occured when
working with ASP.NET files where forms had a __VIEWSTATE value that was
very, very large.
- UTF-8 and UTF-16LE and UTF-16BE are handled automatically via the ParsePointer,
ParseStream and ParseFile methods.
- Delphi Widestrings are handled via the new ParseWideString method.
- Comment parsing was simplified and no longer uses a stack to determine
unterminated comments. It also helped improve the detection of styles and
scripts embedded in comments.
- The EndTagTable array in HTML_Ex unit was removed. End tags now share
the same hash value as their corresponding start tags. To tell them apart,
simply use the ElementType property.
- A PHP specific element type was added that returns PHP code blocks via
the OnData event.
Tag and attribute ID constants were created to help make Delphi CASE statements
identifying attributes and tag names more verbose and easier to read.
- Removed StartTagAlpha array from HTML_Ex unit.
- Changed acronymn to acronym in HTML_Ex unit and adjusted the StartTagTable
array to reflect the new hash value.
- Instead of loading and then parsing, this version handles both in a single
operation.
The Parse method is now protected and parsing is handled by the following methods.
- ParseContent
- ParseStream
- ParseFile
- ParsePointer
- ParseString
- ParseWideString
- The following methods were moved from TATagParser to TCustomTagParser
to help facilitate descendants.
- PushElements
- PopElements
- PushErrors
- PopErrors
- PushComplexFilters
- PopComplexFilters
- PushTextFilters
- PopTextFilters
- Added the following related methods.
- PushAllSettings
- PopAllSettings
** A big thank you to Michael Hawk for the heads-up on a couple of these
problems.
Version 2.02
Version 2.02 of ATagParser introduces a few new properties, a couple of new
set additions and one new event.
- Changed FlattenAttributes so that trailing whitespace is removed from the
returned string.
- Changed acronymn in HTML_Ex.pas to acronym and updated its hash value and position
in the StartTagTable array.
- Added tfDetectEntities and tfAllowWhiteSpace to the TextFilters property.
- Added DeadSpace and DeadSpaceCount properties.
- Added DocIndex property to TBaseElement.
- Added cfParseQuoteToQuote option to ComplexFilters property.
- Added HasEvent property to the TTagElement object.
- This allows you to check to see if a particular set of attributes contains
an event.
- Added IsEvent property to the TAttributeElement object. This allows you to
check and see if the current attribute is an event.
- Added DeadSpace property to TCustomTagParser. This property contains the
amount (in bytes) of dead space (meaningless space between tags) in a document.
- Added IsQuoted property to the TAttributeElement object. Since checking the
title of web pages is such a common activity, an OnTitle event was added
to make it simple.
- Added tfPreviousText option to TextFilters property.
- Added PreviousText property to TTagElement object.
- Fixed a particularly nasty access violation that occurred when ATagParser
parsed a file that contained only text.
- Corrected length error that occurred when returning malformed comments (it
was 1 short)
- Corrected erComment error that didn't return the length of the malformed
comment
- Corrected the dupClose error that occurred at the end of ASP code blocks
- Fixed the infamous embedded tags in script problem - where an end tag (</)
is embedded in a script and not escaped properly. Technically, this is an error
because the HTML specification say that a script is terminated at the first
occurrence of </. But, because most browsers allow it, so do we.
- Added version for Delphi 7
- Corrected a small problem that kept ATagParser from recognizing custom
Delphi tags.
- Corrected the dupClose error that occurred at the end of CDATA sections
- Corrected problem where complex custom tags (#x a=b) were reported as complex
tags
- Improved documentation.
- Fixed lots of little inconsistencies in the help file and documentation.