Template Version: @(#)sac_nextcase 1.66 04/17/08 SMI This information is Copyright 2008 Sun Microsystems 1. Introduction 1.1. Project/Component Working Name: W3M 1.2. Name of Document Author/Supplier: Author: Rick Ju 1.3 Date of This Document: 27 May, 2008 4. Technical Description 1. Introduction 1.1. Project/Component Working Name:
w3m a text-based WWW browser 1.2. Name of Document Author/Supplier: Author: Rick Ju Sponser: Irene Huang 1.3. Date of This Document: 05/11/2008 2. Technical Description: 2.1. Details: w3m is a text-based web browser as well as a pager like `more' or `less'. With w3m you can browse web pages through a terminal emulator window (xterm, rxvt or something like that). Moreover, w3m can be used as a text formatting tool which typesets HTML into plain text. w3m has support for tables, frames, SSL connections, color and even inline images on suitable terminals. Generally, it renders pages in a form as true to their original layout as possible. And W3m is small. Its stripped binary for Sparc is only 260kbyte. w3m locally run cgi scripts to test html output (requires *no* webserver). w3m keystroke compatible with lynx and support the keybindings customize. w3m support SSL through the openssl library. And w3m could support cookies. Table rendering algorithm in w3m HTML table rendering is difficult. Tabular environment of LaTeX is not very difficult, which makes the width of a column either a specified value or the maximum width to put items into it. On the other hand, HTML table renderer has to decide the width of a column so that the entire table can fit into the display appropriately, and fold the contents of the table according to the column width. Inappropriate column width decision makes the table ugly. Moreover, table can be nested, which makes the algorithm more complicated. 1. First, calculate the maximum and minimum width of each column. The maximum width is the width required to display the column without folding the contents. Generally, it is the length of paragraph delimited by <BR> or <P>. The minimum width is the lower limit to display the contents. If the column contains the word `internationalization', the minimum width will be 20. If the column contains <pre>..</pre>, the maximum width of the preformatted text will be the minimum width of the column. 2. If the width of the column is specified by WIDTH attribute, fix the column width using that value. If the specified width is smaller than the minimum width of the column, fix the column width to the minimum width. 3. Calculate the sum of the maximum width (or fixed width) of each column and check if the sum exceeds the screen width. If it is smaller than screen width, these values are used for width of each column. 4. If the sum is larger than the screen width, determine the widths of each column according to the following steps. 1. Let W be the screen width subtracted by the sum of widths of fixed-width columns. 2. Distribute W into the columns whose width are not decided, in proportion to the logarithm of the maximum width of each column. 3. If the distributed width of a column is smaller than the minimum width, then fix the width of the column to the minimum width, and do the distribution again. In this process, distributed width is proportion to logarithm of maximum width. The algorithm above assumes that the screen width is known. But it is not true for nested table. According the algorithm above, the column width of the outer table have to be known to render the inner table, while the total width of the inner table have to be known to determine the column width of the outer table. If WIDTH attribute exists there are no problems. Otherwise, w3m assumes that the inner table is 0.8 times as wide as the outer table. It works fine, but if there are two tables side by side in an outer table, the width of the outer table always exceeds the screen width. To render this kind of table correctly, one have to render the table once, check the width of outmost table, and then render the entire table again. Netscape might employ this kind of algorithm. 2.2. Interfaces: Exported Interfaces Interface Classification Comments --------------- --------------- ----------------------- w3m CLI Volatile See w3m-help.txt $HOME/.w3m/config Project Private w3m Configuration information SUNWw3m Uncommited w3m end-user packaging contains binary, libraries. SUNWw3m-l10n Uncommited Localization. Imported Interfaces Interface Classification Comments --------------- --------------- ----------------------- HTML/XML/HTTP Stable These specs are defined W 3C.org OpenSSL Volatile PSARC/2003/500 Firefox Volatile LSARC/2008/158 GTK+ Committed LSARC/2006/202 libpng Volatile LSARC/2006/202 2.3. Doc Impact: Man page is needed. 2.4. Packaging & Delivery: SUNWw3m (base package) - application i.e binary, libraries SUNWw3m-l10n (localization) - Localization. 2.5. Dependencies: w3m depends on OpenSSL, Firefox, GTK+, and libpng. 2.6. L10N Impact: There are string changes. Hence this should be taken care. 2.7 Security Impact: None. 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: Desktop 6.5. ARC review type: FastTrack 6.6. ARC Exposure: open