.
bugfixes:
- If a line is ended by a linebreak, any leading space for the first
word on the next line is removed. As a result of this, text
justification no longer shifts this word;
- Paragraphs containing a linebreak could incorrectly double the
end-of-paragraph spacing.
December 14
Fixed a bug in anchor rendering when it is the first object in a page:
XmHTML couldn't find a proper starting point and didn't render the
anchor at all.
Fixed a bug related to empty named anchors, they used to reset the
left margin (this one has been lurking under the carpet for a very
long time...).
Some improvement in table exposure handling.
December 13
Modified handling of the XmNenableBadHTMLWarnings resource: you can now
select what type of errors the parser detects will be shown.
December 11
libhttp: the HTTPHEAD HTTPLoadMethod now supports both HTTPLoadToFile
and HTTPLoadToString. For the latter, any received headers are stored
in a new headers (array of type HTTPNamedValues) field in the HTTPRequest
return structure.
HTML tables: cell width takes horizontal margin into account properly.
Previously, the cell width tended to be too small for the widest cell.
Bugfix: linebreaks contained in anchors are no longer rendered.
Fixed a number of bugs in the Imakefiles.
December 9
HTML tables:
- Fixed handling of the ROWSPAN attribute: the extra
vertical space is now distributed evenly accross spanned rows;
- fixed an (important) baseline handling bug;
cells now reset the linebreaking mechanism: each cell represents a
minipage that must start with a clean slate. Previously
paragraph breaks were transferred accross rows and cells.
December 8
Fixed a small redraw bug in XmBalloon popup.
Changed the handling of
tags: they are now treated as text
objects. This fixes a bug in table cell content rendering if a table
is placed in an intended paragraph.
Added the Composite Extension fix.
December 4
Released XmHTML/Beta Version 1.1.1
December 3
Nested tables seem to be working almost flawlessly. Added partial
support for the BGCOLOR attribute on all table elements.
Still scrolling problems and offsets between different child tables
doesn't always work correctly.
Loosened the parser to allow appearance of the element inside
elements it shouldn't be appearing the XmNstrictHTMLChecking
resource has been set to false.
December 1
Tables are really going now: the COLSPAN and ROWSPAN attributes are
now working. Table margins, cell and row padding also seems to work.
November 26
More work on table layout: cell heights are now computed correctly,
cell and rowspacing works, cell and row spanning should work.
Nested tables also seems to work but has received little testing.
November 25
First success at table displaying! The layout algorithm seems to work
rather well (and fast!). Details aren't rendered yet (borders, background
color or image), suppport for cell and row spanning hasn't been
added and scrolling is sometimes messed up, but the borderline is: the
basic table layout computation algorithm works, and it works damn GOOD!
November 21
Finally found a satisfying design for table support. Extended the
document formatter to fill in the table data structures.
November 20
Internal changes to the parser as preparation for progressive document
loading. Temporarely removed the ParserObject from the XmHTML Widget
library.
November 14
Played around with the HTML 4.0 event model: added the XmNeventProc
resource to parse any scripts attached to these events and added the
XmNeventCallback callback resource whenever an event should be served.
Support for all HTML4.0 events is present in the code but
currently only the onMouseUp and onMouseDown events
are support for anchors.
Still thinking about a decent and fast way to handle tables.
November 12
Some small performance increases in the document formatter: whenever
possible, objects are reused instead of being deleted.
November 11
Played around a bit with the HTTP.c code in the contrib dir:
- added a timeout on the connect() call using either setsockopt() or a
bruteforce alarm() on systems that don't have support the SO_RCVTIMEO
setsockopt flag;
- added a select() on read() using a user-specified timeout and retry
count;
- added a small tool, httpget.c, in the tools directory demonstrating
a fairly straightforward use of the HTTP code. This little tool can
fetch an URL from any site you give feed it.
The result of the above changes is that loadHTTPURL will never
block again.
Modified a few routines in parse.c so that they can now be shared by
both XmHTML and XmHTMLParser.
Small bugfix in ScrollToLine.
November 10
Added the XmNclientData resource. This resource allows one
to provide a pointer to client data that should be provided as the
last argument to any function installed on any of the functional
XmNanchorVisitedProc and XmNimageProc resources. As a logical
consequence, the corresponding typedef for these resources now have
one additional argument of type XtPointer.
November 8 and 9
Working on tables;
Much work on example_2.c: I'm completely rewriting it in a rather
modular way where a basic Browser object can act in four different ways:
as a complete browser, as member of a HTML frameset, as a popup window
and as the desktop window. All of which can be used in every possible
combination.
November 3
All resource strings used by the XmHTML Widget Library are now placed
in a separate header file called HTMLStrings.h.
November 2
Added a XmBalloon widget to the library. This is a simple ``tooltip''
widget that can be popped up to display a small string. The string can
be displayed in a rectangle or an oval (the latter is achieved using
the Shape extension). example_2.c contains a possible usage: whenever
an anchor is entered that contains the title attribute, this tooltip is
popped up.
October 31
Modified example_4 so it now also compiles and runs with X11R5 (or
earlier)
October 28
CDE and Solaris related Imakefile fixes and a workaround for a possible
bug in SparcWorks cpp.
October 26
Bugfix: the widget's size wasn't always correctly set at creation
time.
Modified XmHTML's translation table: anchor selection/document
scrolling now works with any key combinations but Shift, Meta and Ctrl.
The previous table masked of *all* modifiers, making the widget
practically unseable if, for instance, the NumLock key was active.
October 22
Bugfix on vertical scrolling: any vertical scroll requests are now
properly ignored when the currently loaded document doesn't have
a vertical scrollbar.
October 21
XmHTML's form support is now complete: the XmNformCallback is now
fully implemented thanks to Richard Offer (offer@sgi.com)
Richard also provided a simple HTTP/1.0 implementation. A *big*
round of applause!
October 11
Released XmHTML/Beta Version 1.1.0, the first XmHTML Beta
Release.
October 10
Last preparations for the XmHTML Beta 1.1.0 release.
Fixed a small bug in local anchor jumping: XmNanchorVisitedUnderlineType
resource wasn't properly honored.
Removed a number of unused resource class names from the XmHTML
string table (1kb of data), added the XmCAnchorUnderlineType resource
class and corresponding converter and added a warning message to the
parser (in some cases it forgot to complain about closing elements
without an opening counterpart).
October 9
Added a ``fast'' mode to the parser which entirely bypasses
the document verification and repair routines (as if it wasn't fast enough
already :-) If you are absolute sure that a document is fully compliant
with the HTML3.2 standard, and all elements for which termination is
optional HAVE a terminator, setting the value of the XmNmimeType resource
to text/html-perfect will select the fast parser.
October 8
Finally fixed a very annoying bug: when the widget is created, the height
wasn't always computed correctly, leading to incorrect screen updates when
scrolling (small gaps appeared). The only way to get around this bug was
to resize the widget. It turned out that the core class height gets
modified sometime *after* the Widget's Initialize method has been
called, but before it is being mapped to screen. What causes this is a
mystery to me.
Final preparations for the first official Beta release, 1.1.0: added
a collection of manual pages that describe each and every convenience
function offered by XmHTML and updated the (hugely out of data) widget
description.
October 7
Dithering to a fixed palette is now fully possible. There are four
different methods available (closest match without error correction,
ordered with and without error correction and closest match with error
correction). You can specify a palette using the XmNimagePalette resource
or let XmHTML create one for you.
October 6
Working on implementing support for the XmNimageMapToPalette and
XmNimagePalette resources, which allow you to define a palette for XmHTML
to use. Besides the obvious advantages this can offer, another advantage
is a rather large speedup when switching pages: since a palette contains a
fixed number of colors, XmHTML can allocate all colors on startup and
doesn't have to free them until it is destroyed. This obliterates the need
to release allocated colors each time a new page is loaded.
October 3
Replaced the current quantizer with a compacter and faster one. Previously
XmHTML carried two quantizers: one for global use and one specifically
for PNG images.
Fixed a bug in the colormap reading code of GIF images.
October 2
Fixed a small bug in form handling: optionmenu's didn't get reset when
the reset button was pressed.
September 28
Added support for Fast Loadable Graphics. This is a format especially
designed for XmHTML and optimized for *very* fast loading of images.
The FLG format is actually nothing more than a compacted version of the
XmImageInfo structure, and as such it supports plain transparency,
alpha channel and animations (with all GIF disposal methods).
Data can be stored either compressed or uncompressed. Uncompressed FLG's
are the fastest possible way to load an image into XmHTML, but they can
take up a huge amount of space. A funny thing I noticed though is that,
quite often, an uncompressed FLG takes up less space
than the same image saved as a GIF image...
Animation support: the global colormap of an animation is now only
allocated once for the entire animation instead of being allocated for
each frame separatly. This has two significant advantages: memory usage is
reduced and less time is spent in allocating colors. XmHTML will now also
use the global colormap if the local colormap of an animation frame is
equal to the global colormap.
September 26
Some changes to reduce memory usage:
- Changed the type of the color component fields of the XmImageInfo
structure from signed int to unsigned short (can save up to 1.5kb
per image). Modified all internal color allocation routines as well;
- the size of the clipmasks is now computed correctly: storage
occupied by clipmask data has been reduced by a factor 8;
- alpha channel processing of PNG images been modified to use a colormap
instead of full RGBA quartets: the 24bit RGB data is converted to an
8bit paletted image and the alpha channel is stored separatly.
This reduces the memory occupied by these images with at least a
factor two;
September 22
A lot of improvements in the font allocation/caching routines:
- a separate font cache for each display is now maintained.
The previous scheme didn't look at which display it was running while
the font cache was shared between every XmHTML instance.
Displaying multiple instances of a XmHTML widget on different
displays should now be possible;
- made the font caching scheme a lot more efficient and removed the
limit on the maximum number of loadable fonts (it now uses a binary
tree lookup instead of a lineair search through a table with fixed
size;
- fonts are now freed when the widget is destroyed (that is, the actual
font data is only freed if the widget being destroyed is the last
widget using a display-bound font cache);
- modified the internal data structures so font properties are now
stored with each font instead of calculating them each time the layout
needs to be recalculated;
One very major performance enhancement is the introduction of a
smart font mapping scheme which maps unknown font names to known ones.
I am particularly pleased with this scheme, it allows XmHTML to map fonts
it does not know in the beginning to known ones later one. Assuming the
helvetica font is present in your font path and arial isn't, the following
happens: when XmHTML encounters a
tag, it will not know to which font it should be mapped and it will use the
default font (whatever that is). However, when at a later stage a
is encountered, XmHTML
will see that this Arial font can be mapped to the
Helvetica font (which it does known), and as a result, any future
reference to the Arial font will be mapped to the
Helvetica font. XmHTML is smart enough to take any
combination of weight, slant and size into account when making these
decisions.
Performance tests with the new font caching and mapping schemes show some
very satisfactory results: the cache hit ratio is steadily increasing,
approaching 90 or more percent after about 10 documents with different
fonts have been loaded. The average number of search actions seems to
remain steady around 7 in this case. The font cache contained 55 fonts
(including 10 font mappings) in various families, sizes and styles.
As a side note: this new ``font technology'' allows users to define
their own font mapping by providing a document with a list of simple font
mappings. See html/font_map.html for a sample document.
Before I forget: I made the builtin cursor allocation display-independant
as well.
September 21
First success at flowing text around images with the ALIGN="LEFT"
or ALIGN="RIGHT" attribute set.
September 20
Small parser bugfix: mime type of a new document wasn't properly saved.
Added a ``View Document Source'' menu item to example_2 and fixed a bug
in jumping to locations in different files.
September 18
Fixed a few important bugs:
- imagemap list wasn't properly reset when a document was
reformatted. Could lead to a SIGSEGV in some cases;
- list of anchor data wasn't properly reset in some cases;
XmHTML now properly honors the XmNstringDirection resource:
when set to XmSTRING_DIRECTION_R_TO_L, text is properly inversed.
Paragraphs contents are ordered from bottom to top. Needs a bit more
work though: list markers are always left-aligned at the first line of
a paragraph instead of right aligned at the bottom.
Modified the linebreaking algorithm to handle line/paragraph breaks
properly when the paragraphs contain non-text objects (HTML form components
and images).
Table support: changed the text layout algorithms to work independantly of
XmHTML's dimensions. They now use a (dynamically adjustable) bounding box.
September 16
When the title of a document is requested, leading and trailing spaces
are now removed.
Added the HeadDocType mask bit to the XmHTMLGetHeadAttributes()
convenience function. When set, the value of the tag
will be returned.
Improved path resolution and mime detection routines in example_2.c
September 10-12
Some prelimenary work on XmHTMLTextGetFormatted()
September 4
Fixed a few important memory leaks. One of those caused the stored anchor
data never to be freed.
Reverted a few bad fixes.
September 1
XmHTMLTextSetString fix, text was always rendered twice.
Moved all resources into a stringtable. This actually seems to introduce
a rather noticable speedup in document loading. Haven't got the slightest
clue why this happens.
August 29-31
Numerous bugfixes & memory leak fixups. A GRAND applause to
Ricky Ralston for having the
courage to run XmHTML through purify. Thanks Ricky!!
Started with daily snapshot distribution.
August 28
Released XmHTML/Alpha Version 1.0.21, last Alpha release. The
next release will be the first publically available Beta.
August 26
Rewrote and extended support greatly. Plain text, form
components and images can now be mixed freely.
Some minor changes in anchor rendering: anchors are now only extended to
the right when there is room for it, they no longer cover adjacent text
when activated.
Added the XmNimageRGBConversion resource which allows one to select
the conversion method XmHTML should use when converting 24bit to 8bit
images.
August 25
Changed the proto's for XmHTMLImageReplace() and XmHTMLImageUpdate():
they now return a status indicating whether or not the document needs
a recomputation of document layout if an image is replaced or updated.
Fixed a bug in the default image processing: when images are delayed, the
delayed icon wouldn't show up. I forgot to properly propagate the image
dimensions.
August 21, evening
Fully restored PNG alpha channeling support, there was a silly bug in
doing the 24 to 8 bit conversion. Alpha channeling is now also supported
for delayed images and any combination of background setting, set either
via the loaded document or the SetValues method.
See XmHTML PNG Demo for some screenshots.
Transparent background images are now also supported.
August 21, morning
Fixed a bug in delayed image loading that caused a fatal crash when
the delayed image was freed.
Progressive and normal image loading now share the same XImage creation
and update routines. Also fixed clipmask creation for progressively
loaded images.
Rewrote most part of the handling of PNG images with an alpha channel.
Several bugfixes and changes to example_2 and it's caching routines.
August 20
HTML form support: vertical scrolling of a document with a HTML form in
it should now be correct whether or not a horizontal scrollbar is present.
Also fixed a bug in the SetValues method which caused XmHTML to ignore the
already present form widgets.
Modified the debug routines, output can now be sent to a file.
Eliminated some dead/duplicate code in the painter and widget methods.
August 19
HTML form support:
- The traversal stuff for tabbing between all HTML form components
almost works. Still need to figure out the proper XmTextField
translations so the tab key can be used instead of the enter key;
- added support for the HTML