Kylie is a web browser.
The HTML parser in MwHtmlParser.c creates a linked list of all the
nodes: wordparts, whitespace and special tags.
Newline immediately before end tag is ignored. Newline immediately after
start tag is ignored.
Composite objects (currently limited to TABLE, ROW and CELL, but
frames belong there too) branch the list so it actually becomes a tree.
When the widget gets the list back, it lays out the boxes by assigning
width and height and placing them in a line from left to right. If
there is too little space left for another box, start over on a new
In a second pass the objects are drawn which are located in the
currently visible part of the window.
Two callbacks in the widget, begin_a and
end_a, handle and tags. The coordinates are put in the
a_href or a_name tables depending on their HREF or NAME values.
Composite objects are displayed by recursively drawing the list
There are two linked lists for backwards and forwards navigation.
Each time we visit a link, the current url is added to the backwards
lists and the forwards list is cleared, *except* when we visit the
link by clicking the back button. In that case the current url is
added to the forwards list instead.
Type 1 fonts
If Mowitz was compiled with t1lib support, Kylie can take advantage
of it out of the box. The standard fonts.txt file is used for font
management. Antialias is not supported.
The IO is split into different modules with narrow interfaces. The
io.c: Register protocol drivers, normalize urls, cache documents.
External linkage: load_url.
http.c: Fetch documents over http. The only symbol with external
linkage is load_http, which should *only* be called from io.c.
file.c: Fetch local file or predefined "documents".
External linkage: load_file and load_about.
FTP is currently not implemented.
None of this belongs in the widget code. The widget should only
have the bare minimum required to render stuff in a window.
The widget will probably eventually move over to Mowitz.
It should suffice to have url resource that is a string to give
to a loader function.
This function can also be set through a resource and defaults to
a function which loads the file from the local file system using
the url as filename.
Everything else belongs in the application.
The file image.c contains a small, stack-oriented library of functions
which can perform a variety of operations on images. The only thing
we're using it for at the moment is to load images, usually with
the help of external applications such as the netpbm kit.
An advantage to this approach is that we can display many types of
images. In the future we will also be able to manipulate images in
more ways than we are using now.
The disadvantage is that it is relatively slow. This is mainly due
to the fact that we have to convert between the library's internal
format, image, and the format X understands, XImage. It should be
possible to help the situation somewhat by caching the XImage; the
current cache implementation only caches the image.
What's New in This Release:
· Implemented < select > < option >, < optgroup > and < textarea >.
· Speeded up object_between and add_object_box radically.
· Fixed the combo box so it stores history instead of crashing.
· Added a 30 second timeout to the connect() call in http.c.
· Display an error message rather than crashing when a document can't be loaded. Create widgets for (some) form controls.
· Suppress garbage (i.e. extra spaces or words) between < table > and first < tr >.
· Documented table code (in README).