Mercurial > hg > xemacs-beta
diff man/w3.texi @ 169:15872534500d r20-3b11
Import from CVS: tag r20-3b11
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:46:53 +0200 |
parents | 5a88923fcbfe |
children | 8eaf7971accc |
line wrap: on
line diff
--- a/man/w3.texi Mon Aug 13 09:45:48 2007 +0200 +++ b/man/w3.texi Mon Aug 13 09:46:53 2007 +0200 @@ -0,0 +1,3607 @@ +\input texinfo +@c +@c Please note that this file uses some constructs not supported by earlier +@c versions of TeX-info. You must be running one of the newer TeX-info +@c releases (I currently use version 3.9 from ftp://prep.ai.mit.edu/pub/gnu/) +@c +@c Please do not send in bug reports about not being able to format the +@c document with 'makeinfo' or 'tex', just upgrade your installation. +@c +@c Info formatted files are provided in the distribution, and you can +@c retrieve dvi, postscript, and PDF versions from the web site or FTP +@c site: http://www.cs.indiana.edu/elisp/w3/docs.html +@c +@setfilename w3.info +@settitle Emacs/W3 v3.0.93 User's Manual +@iftex +@finalout +@end iftex +@c @setchapternewpage odd +@c @smallbook +@tex +\overfullrule=0pt +%\global\baselineskip 30pt % for printing in double space +@end tex +@synindex cp fn +@synindex vr fn +@dircategory World Wide Web +@dircategory GNU Emacs Lisp +@direntry +* W3: (w3). Emacs/W3 World Wide Web browser. +@end direntry +@ifinfo +This file documents the Emacs/W3 World Wide Web browser. + +Copyright (C) 1993, 1994, 1995, 1996 William M. Perry +Copyright (C) 1996, 1997 Free Software Foundation + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through Tex and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +@end ifinfo +@c +@titlepage +@sp 6 +@center @titlefont{Emacs/W3} +@center @titlefont{User's Manual} +@sp 4 +@center Third Edition, Emacs/W3 Version 3.0 +@sp 1 +@center March 1997 +@sp 5 +@center William M. Perry +@center @i{wmperry@@cs.indiana.edu} +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1993, 1994, 1995 William M. Perry@* +Copyright @copyright{} 1996, 1997 Free Software Foundation + +Permission is granted to make and distribute verbatim copies of@* +this manual provided the copyright notice and this permission notice@* +are preserved on all copies. + +@end titlepage +@page +@ifinfo +@node Top, Getting Started, (dir), (dir) +@top W3 + +Users can browse the World Wide Web from within Emacs by using Emacs/W3. +All of the widely used (and even some not very widely used) @sc{url} +schemes are supported, and it is very easy to add new methods as the +need arises. + +Emacs/W3 provides some core functionality that can be readily re-used +from any program in Emacs. Users and other package writers are +encouraged to @i{Web-enable} their applications and daily work routines +with the library. + +Emacs/W3 is completely customizable, both from Emacs-Lisp and from +stylesheets @xref{Stylesheets} If there is any aspect of Emacs/W3 that +cannot be modified to your satisfaction, please send mail to the +@t{w3-beta@@indiana.edu} mailing list with any suggestions. +@xref{Reporting Bugs} + +This manual corresponds to Emacs/W3 v3.0.93 + +@menu +* Getting Started:: Getting up and running with Emacs/W3 +* Basic Usage:: Basic movement and usage of Emacs/W3. +* Compatibility:: Explanation of compatibility with + other browsers. +* Stylesheets:: How to control the look of web pages +* Supported URLs:: What @sc{URL} schemes are supported. +* MIME Support:: Support for @sc{mime} +* Security:: Various security methods supported +* Non-Unix Operating Systems:: Special considerations necessary to get + up and running correctly under non-unix + OS's. +* Speech Integration:: Outputting to a speech synthesizer. +* Advanced Features:: Some of the more arcane features. +* More Help:: How to get more help---mailing lists, + newsgroups, etc. +* Future Directions:: Plans for future revisions + +Appendices: +* Reporting Bugs:: How to report a bug in Emacs/W3. +* Dealing with Firewalls:: How to get around your firewall. +* Proxy Gateways:: Using a proxy gateway with Emacs/W3. +* Installing SSL:: Turning on @sc{ssl} support. +* Mailcap Files:: An explanation of Mailcap files. +* Down with DoubleClick:: Annoyed by advertisements? Read this! + +Indices: +* General Index:: General Index. +* Key Index:: Menus of command keys and their references. +@end menu +@end ifinfo + +@node Getting Started, Basic Usage, Top, Top +@chapter Getting Started +@cindex Clueless in Seattle +@cindex Getting Started +@kindex M-x w3 +@vindex w3-default-homepage +@findex w3 +If installed correctly, starting Emacs/W3 is quite painless. Just type +@kbd{M-x w3} in a running Emacs session. This will retrieve the default +page that has been configured (@pxref{Preferences Panel}) - by default the +documentation for Emacs/W3 at Indiana University. + +If the default page is not retrieved correctly at startup, you will have +to do some customization (@pxref{Preferences Panel}). + +Once started, you can use the mouse and the menu or use the following +key commands (for more commands and more detail, @pxref{Basic Usage, , +Basic Usage}). + +@table @asis +@item move forward +press the space bar, + +@item move backwards +press the backspace key, + +@item move to the next HTML reference on the page +press the @kbd{TAB} key, + +@item move to the previous HTML reference on the page +press the @kbd{SHIFT} and @kbd{TAB} keys at the same time. If this does +not work (some text terminals cannot distinguish between @kbd{TAB} and +@kbd{SHIFT-TAB}, pressing the @kbd{ALT} and @kbd{TAB} keys should also +work. + +@item follow a link +put the cursor over it +and press the @kbd{RETURN} key, or @* +click the left mouse button on it, + +@item fetch a @sc{url} +press the @kbd{Control} and @kbd{o} keys at the same time,@* +type the @sc{url}, and then press the @kbd{RETURN} key, + +@item return to the last URL you were at +press the @kbd{l} key, + +@item quit W3 mode +press the @kbd{q} key. +@end table + +@menu +* Downloading:: Where to download Emacs/W3. +* Building and Installing:: Compiling and installing from source. +* Startup Files:: What is where, and why. +* Preferences Panel:: Quick configuration of common options. +@end menu + +@node Downloading, Building and Installing, Getting Started, Getting Started +@section Downloading + +:: WORK :: What you need, and why@* +:: WORK :: Where to download Emacs, XEmacs, various platforms@* +:: WORK :: Where to download Emacs/W3@* +:: WORK :: Where to download related utilities (netpbm, xv, gimp, etc.) + +@node Building and Installing, Startup Files, Downloading, Getting Started +@section Building and Installing + +:: WORK :: Document makefile variables@* +:: WORK :: Document what gets installed where, why + +@node Startup Files, Preferences Panel, Building and Installing, Getting Started +@section Startup Files +@cindex Startup files +@cindex Default stylesheet + +:: WORK :: startup files@* +This section should document where Emacs/W3 looks for its startup files, +and what each one does. 'profile' 'stylesheet' 'hotlist' 'history' etc. + +@node Preferences Panel, , Startup Files, Getting Started +@section Preferences Panel +@cindex Preferences +@kindex M-x w3-preferences-edit + +:: WORK :: pref panel@* +This should document the quick preferences panel. M-x w3-preferences-edit + +@node Basic Usage, Compatibility, Getting Started, Top +@chapter Basic Usage +@cindex Basic Usage +@kindex space +@kindex backspace +@kindex return +@kindex tab +@kindex M-tab +Emacs/W3 is similar to the Info package all Emacs users hold near and +dear to their hearts (@xref{Top,,Info,info, The Info Manual}, for a +description of Info). Basically, @kbd{space} and @kbd{backspace} +control scrolling, and @kbd{return} or the middle mouse button follows a +hypertext link. The @kbd{tab} and @kbd{Meta-tab} keys maneuver around the +various links on the page. + +@b{NOTE:} Starting with Emacs/W3 3.0, form entry areas in a page can be +typed directly into. This is one of the main differences in navigation +from version 2.0. If you are used to using the @kbd{f} and @kbd{b} keys +to navigate around a buffer, I suggest training yourself to always use +@kbd{tab} and @kbd{M-tab} - it will save time and frustration on pages +with lots of form fields. + +By default, hypertext links are surrounded by '[[' and ']]' on +non-graphic terminals (VT100, DOS window, etc.). On a graphics +terminal, the links are in shown in different colors. +@xref{Stylesheets} for information on how to change this. + +There are approximately 50 keys bound to special Emacs/W3 functions. +The basic rule of thumb regarding keybindings in Emacs/W3 is that a +lowercase key takes an action on the @b{current document}, and an +uppercase key takes an action on the document pointed to by the +hypertext link @b{under the cursor}. + +There are several areas that the keybindings fall into: movement, +information, action, and miscellaneous. + +@menu +* Movement:: Moving around in the buffer. +* Information:: Getting information about a document. +* Action:: Following links, printing, etc. +* Miscellaneous:: Everything else. +@end menu + +@node Movement, Information, Basic Usage, Basic Usage +@section Movement + +All the standard Emacs bindings for movement are still in effect, with a +few additions for convenience. + +@table @kbd +@findex w3-scroll-up +@kindex space +@item space +Scroll downward in the buffer. With prefix arg, scroll down that many +screenfuls. +@kindex backspace +@findex scroll-down +@item backspace +Scroll upward in the buffer. With prefix arg, scroll up that many +screenfuls. +@kindex < +@findex w3-start-of-document +@item < +Goes to the start of document +@kindex > +@findex w3-end-of-document +@item > +Goes to the end of document +@kindex b +@kindex Meta-tab +@findex w3-widget-backward +@item Meta-tab, Shift-tab, b +Attempts to move backward one link area in the current document. +Signals an error if no previous links are found. +@kindex f +@kindex tab +@kindex n +@findex w3-widget-forward +@item tab, f, n +Attempts to move forward one link area in the current document. Signals +an error if no more links are found. +@kindex B +@findex w3-backward-in-history +@item B +Move backwards in the history stack. +@kindex F +@findex w3-forward-in-history +@item F +Move forwards in the history stack. +@kindex l +@findex w3-goto-last-buffer +@item l +Return to the last buffer shown before this buffer. +@kindex q +@findex w3-quit +@item q +Kill this buffer. +@kindex Q, u +@findex w3-leave-buffer +@item Q, u +Bury this buffer, but don't kill it +@end table + +@node Information, Action, Movement, Basic Usage +@section Information + +These functions relate information about one or more links on the +current document. + +@table @kbd +@kindex v +@findex url-view-url +@item v +This shows the @sc{url} of the current document in the minibuffer. +@kindex V +@findex w3-view-this-url +@item V +This shows the @sc{url} of the hypertext link under point in the +minibuffer. +@kindex i +@findex w3-document-information +@item i +Shows miscellaneous information about the currently displayed document. +This includes the @sc{url}, the last modified date, @sc{mime} headers, +the @sc{http} response code, and any relationships to other documents. +Any security information is also displayed. +@kindex I +@findex w3-document-information-this-url +@item I +Shows information about the @sc{url} at point. +@kindex s +@findex w3-source-document +@item s +This shows the @sc{html} source of the current document in a separate buffer. +The buffer's name is based on the document's @sc{url}. +@kindex S +@findex w3-source-document-at-point +@item S +Shows the @sc{html} source of the hypertext link under point in a separate +buffer. The buffer's name is based on the document's @sc{url}. +@kindex k +@findex w3-save-url +@item k +This stores the current document's @sc{url} in the kill ring, and also in the +current window-system's clipboard, if possible. +@kindex K +@findex w3-save-this-url +@item K +Stores the @sc{url} of the document under point in the kill ring, and also in +the current window-system's clipboard, if possible. +@end table + +@node Action, Miscellaneous, Information, Basic Usage +@section Action + +First, here are the keys and functions that bring up a new hypertext +page, usually creating a new buffer. +@table @kbd +@kindex m +@findex w3-complete-link +@item m +Choose a link from the current buffer and follow it. A completing-read +is done on all the links, so @kbd{space} and @kbd{TAB} can be used for +completion. +@kindex return +@findex w3-follow-link +@item return +Pressing return when over a hyperlink attempts to follow the link +under the cursor. With a prefix argument (@kbd{C-u}), this forces the +file to be saved to disk instead of being passed off to other viewers +or being parsed as @sc{html}. + +Pressing return when over a form input field can cause auto-submission +of the form. This is for Mosaic and Netscape compatibility. If there +is only one item in the form other than submit or reset buttons, then + +minibuffer for the data to insert into the input field. Type checking +is done, and the data is only entered into the form when data of the +correct type is entered (ie: cannot enter 44 for 'date' field, etc). + +@kindex Middle Mouse Button +@findex w3-follow-mouse +@item Middle Mouse Button +Attempt to follow a hypertext link under the mouse cursor. Clicking on +a form input field will prompt in the minibuffer for the data to insert +into the input field. Type checking is done, and the data is only +entered into the form when data of the correct type is entered (ie: +cannot enter 44 for 'date' field, etc). + +@kindex Control Middle Mouse Button +@kindex Meta return +@findex w3-follow-inlined-image +@item Control Middle Mouse Button, Meta return +Tries to retrieve the inlined image that is under point. It ignores any +form entry areas or hyperlinks, and blindly follows any inlined image. +Useful for seeing images that are meant to be used as hyperlinks when +not on a terminal capable of displaying graphics. + +@kindex p +@findex w3-print-this-url +@item p +Prints out the current buffer in a variety of formats, including +PostScript, @sc{html} source, or formatted text. +@kindex P +@findex w3-print-url-under-point +@item P +Prints out the @sc{url} under point in a variety of formats, including +PostScript, @sc{html} source, or formatted text. +@kindex m +@findex w3-complete-link +@item m +Selects a destination from a list of all the hyperlinks in the current +buffer. Use @kbd{space} and @kbd{tab} to complete on the links. + +@kindex r +@kindex g +@findex w3-reload-document +@item r, g +Reloads the current document. The position within the buffer remains +the same (unless the document has changed since it was last retrieved, +in which case it should be relatively close). This causes an +unconditional reload from the remote server - the locally cached copy is +not consulted. +@kindex C-o +@findex w3-fetch +@item C-o +Prompts for a @sc{url} in the minibuffer, and attempts to fetch +it. If there are any errors, or Emacs/W3 cannot understand the type of link +requested, the errors are displayed in a hypertext buffer. +@kindex o +@findex w3-open-local +@vindex url-use-hypertext-dired +@item o +Opens a local file, interactively. This prompts for a local file name +to open. The file must exist, and may be a directory. If the requested +file is a directory and @code{url-use-hypertext-dired} is @code{nil}, +then a dired-mode buffer is displayed. If non@code{nil}, then Emacs/W3 +automatically generates a hypertext listing of the directory. The +hypertext mode is the default, so that all the keys and functions remain +the same. + +@kindex M-s +@findex w3-save-as +@item M-s +Save a document to the local disk as HTML Source, Formatted Text, LaTeX +Source, or Binary. + +@kindex Hv +@findex w3-show-history-list +@vindex w3-keep-history +@item Hv +If @code{url-keep-history} is non-@code{nil}, then Emacs/W3 keeps track +of all the @sc{url}s visited in an Emacs session. This function takes all +the links that are in that internal list, and formats them as hypertext +links in a list. +@end table + +@cindex Buffer movement +And here are the commands to move around between Emacs/W3 buffers: + +@table @kbd +@kindex l +@findex w3-goto-last-buffer +@item l +Goes to the last WWW buffer seen. +@kindex q +@findex w3-quit +@item q +Quits WWW mode. This kills the current buffer and goes to the most +recently visited buffer. +@kindex Q +@findex w3-leave-buffer +@item u +This is similar to w3-quit, but the buffer is not killed, it is moved to +the bottom of the buffer list (so it is the least likely to show up as +the default with switch-to-buffer). This is different from +@code{w3-goto-last-buffer} in that it does not return to the last WWW +page visited - it is the same as using @code{switch-to-buffer} - the +buffer left in the window is fairly random. +@kindex HB +@kindex B +@findex w3-backward-in-history +@item HB, B +Takes one step back along the path in the current history. Has no +effect if at the beginning of the session history. +@kindex HF +@kindex F +@findex w3-forward-in-history +@item HF, F +Takes one step forward along the path in the current history. Has no +effect if at the end of the session history. +@end table + +@node Miscellaneous, , Action, Basic Usage +@section Miscellaneous + +@table @kbd +@kindex M-m +@findex w3-mail-current-document +@item M-m +Mails the current document to someone. Choose from several different +formats to mail: formatted text, @sc{html} source, PostScript, or LaTeX source. +When the @sc{html} source is mailed, then an appropriate <base> tag is inserted +at the beginning of the document so that relative links may be followed +correctly by whoever receives the mail. +@kindex M-M +@findex w3-mail-document-under-point +@item M-M +Mails the document pointed to by the hypertext link under point to someone. +Choose from several different formats to mail: formatted text, @sc{html} source, +PostScript, or LaTeX source. When the @sc{html} source is mailed, then an +appropriate <base> tag is inserted at the beginning of the document so that +relative links may be followed correctly by whoever receives the +mail. +@kindex p +@findex w3-print-this-url +@item p +Prints the current document. Choose from several different formats to +print: formatted text, @sc{html} source, PostScript (with ps-print), or by using +LaTeX and dvips). + +@findex lpr-buffer +@vindex lpr-command +@vindex lpr-switches +When the formatted text is printed, the normal @code{lpr-buffer} function +is called, and the variables @code{lpr-command} and @code{lpr-switches} +control how the document is printed. + +When the @sc{html} source is printed, then an appropriate <base> tag is +inserted at the beginning of the document. +@vindex w3-print-commnad +@vindex w3-latex-docstyle +When postscript is printed, then the @sc{html} source of the document is +converted into LaTeX source. There are several variables controlling +what the final LaTeX document looks like. + +:: WORK :: Document the new LaTeX backend + +@table @code +@item w3-latex-use-latex2e +@vindex w3-latex-use-latex2e +If non-@code{nil}, configures the LaTeX engine to use the LaTeX2e +syntax. A @code{nil} value indicates that LaTeX 2.0.9 compabibility +will be used instead. +@item w3-latex-docstyle +@vindex w3-latex-docstyle +The document style to use when printing or mailing converted @sc{html} files +in LaTeX. Good defaults are: @{article@}, [psfig,twocolumn]@{article@}, +etc. +@item w3-latex-packages +@vindex w3-latex-packages +List of LaTeX packages to include. Currently this is only used if +@code{w3-latex-use-latex2e} is non-@code{nil}. +@item w3-latex-use-maketitle +@vindex w3-latex-use-maketitle +If non-@code{nil}, the LaTeX engine will use real LaTeX title pages for +document titles. +@item w3-latex-print-links +@vindex w3-latex-print-links +If non-@code{nil}, prints the @sc{url}s of hypertext links as endnotes at the +end of the document. If set to @code{footnote}, prints the @sc{url}'s as +footnotes on each page. +@end table + +@kindex P +@findex w3-print-url-under-point +@item P +Prints the document pointed to by the hypertext link under point. +Please see the previous item for more information. +@kindex M-x w3-insert-formatted-url +@findex w3-insert-formatted-url +@item M-x w3-insert-formatted-url +Insert a fully formatted @sc{html} link into another buffer. This gets the +name and @sc{url} of either the current buffer, or, with a prefix arg, of the +link under point, and construct the appropriate <a...>...</a> markup and +insert it into the desired buffer. +@kindex M-tab +@findex w3-insert-this-url +@item M-tab +Inserts the @sc{url} of the current document into another buffer. Buffer is +prompted for in the minibuffer. With prefix arg, uses the @sc{url} of the +link under point. +@kindex U +@findex w3-use-links +@item U +Selects one of the <LINK> tags from this document and fetch it. Links +are attributes of a specific document, and can tell such things as who +made the document, where a table of contents is located, etc. + +Link tags specify relationships between documents in two ways. Normal +(forward) relationships (where the link has a REL="xxx" attribute), and +reverse relationships (where the link has a REV="xxx" attribute). This +first asks what type of link to follow (Normal or Reverse), then does +a @code{completing-read} on only the links that have that type of +relationship. +@end table + +@node Compatibility, Stylesheets, Basic Usage, Top +@chapter Compatibility with other Browsers +Due to the popularity of several other browsers, Emacs/W3 offers an easy +transition to its much better way of life. This ranges from being able +to share the same preferences files and disk cache to actually emulating +the keybindings used in other browsers. + +@menu +* Emulation:: Emacs/W3 can emulate the keybindings and + other behaviours of other browsers. +* Hotlist Handling:: A hotlist is an easy way to keep track of + interesting Web pages without having to + remember the exact path to get there. +* Session History:: Keeping a history of documents visited + in one Emacs sessions allows the use of + 'forward' and 'back' buttons easily. +* Global History:: Keeping a history of all the places ever + visited on the web. +@end menu + +@node Emulation, Hotlist Handling, Compatibility, Compatibility +@section Emulation +@cindex Browser emulation +@cindex Emulation of other browsers +@cindex Netscape emulation +@cindex Lynx emulation +@findex turn-on-netscape-emulation +@findex turn-on-lynx-emulation +@findex w3-netscape-emulation-minor-mode +@findex w3-lynx-emulation-minor-mode +@vindex w3-mode-hook + +:: WORK :: Document lynx emulation@* +@table @kbd +@item Down arrow +Highlight next topic +@item Up arrow +Highlight previous topic +@item Right arrow, Return, Enter +Jump to highlighted topic +@item Left arrow +Return to previous topic +@item + +Scroll down to next page (Page-Down) +@item - +Scroll up to previous page (Page-Up) +@item SPACE +Scroll down to next page (Page-Down) +@item b +Scroll up to previous page (Page-Up) +@item C-A +Go to first page of the current document (Home) +@item C-E +Go to last page of the current document (End) +@item C-B +Scroll up to previous page (Page-Up) +@item C-F +Scroll down to next page (Page-Down) +@item C-N +Go forward two lines in the current document +@item C-P +Go back two lines in the current document +@item ) +Go forward half a page in the current document +@item ( +Go back half a page in the current document +@item # +Go to Toolbar or Banner in the current document +@item ?, h +Help (this screen) +@item a +Add the current link to a bookmark file +@item c +Send a comment to the document owner +@item d +Download the current link +@item e +Edit the current file +@item g +Goto a user specified @sc{url} or file +@item i +Show an index of documents +@item j +Execute a jump operation +@item k +Show a list of key mappings +@item l +List references (links) in current document +@item m +Return to main screen +@item o +Set your options +@item p +Print the current document +@item q +Quit +@item / +Search for a string within the current document +@item s +Enter a search string for an external search +@item n +Go to the next search string +@item v +View a bookmark file +@item V +Go to the Visited Links Page +@item x +Force submission of form or link with no-cache +@item z +Cancel transfer in progress +@item [backspace] +Go to the history Page +@item = +Show file and link info +@item \ +Toggle document source/rendered view +@item ! +Spawn your default shell +@item * +Toggle image_links mode on and off +@item [ +Toggle pseudo_inlines mode on and off +@item ] +Send an @sc{http} @sc{head} request for the current doc or link +@item C-R +Reload current file and refresh the screen +@item C-W +Refresh the screen +@item C-U +Erase input line +@item C-G +Cancel input or transfer +@item C-T +Toggle trace mode on and off +@item C-K +Invoke the Cookie Jar Page +@end table + +:: WORK :: Document netscape emulation@* +Uh, turn this into pretty tables about what keys are emulated. + +@example +(define-key w3-netscape-emulation-minor-mode-map "\M-s" 'w3-save-as) +(define-key w3-netscape-emulation-minor-mode-map "\M-m" 'w3-mailto) +(define-key w3-netscape-emulation-minor-mode-map "\M-n" 'make-frame) +(define-key w3-netscape-emulation-minor-mode-map "\M-l" 'w3-fetch) +(define-key w3-netscape-emulation-minor-mode-map "\M-o" 'w3-open-local) +(define-key w3-netscape-emulation-minor-mode-map "\M-p" 'w3-print-this-url) +(define-key w3-netscape-emulation-minor-mode-map "\M-q" 'w3-quit) +(define-key w3-netscape-emulation-minor-mode-map "\M-f" 'w3-search-forward) +(define-key w3-netscape-emulation-minor-mode-map "\M-g" 'w3-search-again) +(define-key w3-netscape-emulation-minor-mode-map "\M-r" 'w3-reload-document) +(define-key w3-netscape-emulation-minor-mode-map "\M-i" 'w3-load-delayed-images) +(define-key w3-netscape-emulation-minor-mode-map "\M-a" 'w3-hotlist-add-document) +(define-key w3-netscape-emulation-minor-mode-map "\M-b" 'w3-show-hotlist) +(define-key w3-netscape-emulation-minor-mode-map "\M-h" 'w3-show-history-list) + +@end example + +@node Hotlist Handling, Session History, Emulation, Compatibility +@section Hotlist Handling + +:: WORK :: Document that it supports different types of hotlist formats@* +:: WORK :: Make sure everything hotlist related can be accessed via 'h'@* +In order to avoid having to traverse many documents to get to the same +document over and over, Emacs/W3 supports a ``hotlist'' like Mosaic. This is +a file that contains @sc{url}s and aliases. Hotlists allow quick access to any +document in the Web, providing it has been visited and added to the hotlist. +The variable @code{w3-hotlist-file} determines where this information +is saved. The structure of the file is compatible with Mosaic's +hotlist file, so this defaults to @file{~/.mosaic-hotlist-default}. + +Hotlist commands are: +@table @kbd +@kindex hi +@findex w3-hotlist-add-document +@vindex w3-hotlist-file +@item a +Adds the current document to the hotlist, with the buffer name as its +identifier. Modifies the file specified by @code{w3-hotlist-file}. If +this is given a prefix-argument (via @kbd{C-u}), the title is prompted +for instead of automatically defaulting to the document title. + +@findex w3-hotlist-refresh +@vindex w3-hotlist-file +@kindex hR +@item hR +This rereads the default hostlist file specified by +@code{w3-hotlist-file}. +@findex w3-hotlist-delete +@vindex w3-hotlist-file +@kindex hd +@item d +Prompts for the alias of the entry to kill. Pressing the spacebar or +tab will list out partial completions. The internal representation of +the hotlist and the file specified by @code{w3-hotlist-file} are +updated. +@item hr +@kindex hr +@findex w3-hotlist-rename-entry +@vindex w3-hotlist-file +Some hotlist item names can be very unwieldy (`Mosaic for X level 2 fill +out form support'), or uninformative (`Index of /'). Prompts for the +item to rename in the minibuffer---use the spacebar or tab key for +completion. After having chosen an item to rename, prompts for a new +title until a unique title is entered. Modifies the file specified by +@code{w3-hotlist-file}. + +@item hu +@kindex hu +@findex w3-use-hotlist +Prompts for the alias to jump to. Pressing the @key{spacebar} or +@key{tab} key shows partial completions. + +@item hv +@kindex hv +@findex w3-show-hotlist +Converts the hotlist into @sc{html} and displays it. +@item ha +@kindex ha +@findex w3-hotlist-apropos +Shows the hotlist entries matching a regular expression. +@item hA +@kindex hA +@findex w3-hotlist-append +Appends another hotlist file to the one currently in memory. +@end table +@node Session History, Global History, Hotlist Handling, Compatibility +@section History +@cindex History Lists + +Almost all web browsers keep track of the @sc{url}s followed from a page, so +that it can provide @b{forward} and @b{back} buttons to keep a @i{path} +of @sc{url}s that can be traversed easily. + +@vindex url-keep-history +If the variable @code{url-keep-history} is @code{t}, then Emacs/W3 +keeps a list of all the @sc{url}s visited in a session. + +@findex w3-show-history +To view a listing of the history for this session of Emacs/W3, use +@code{M-x w3-show-history} from any buffer, and Emacs/W3 generates an +@sc{html} document showing every @sc{url} visited since Emacs started (or +cleared the history list), and then format it. Any of the links can +be chosen and followed to the original document. To clear the history +list, choose 'Clear History' from the 'Options' menu. + +@findex w3-forward-in-history +@findex w3-backward-in-history +@findex w3-fetch +Another twist on the history list mechanism is the fact that all +Emacs/W3 buffers remember what @sc{url}, buffer, and buffer position of the +last document, and also keeps track of the next location jumped @b{to} +from that buffer. This means that the user can go forwards and +backwards very easily along the path taken to reach a particular +document. To go forward, use the function @code{w3-forward-in-history}, +to go backward, use the function @code{w3-backward-in-history}. + +@node Global History, , Session History, Compatibility +@section Global History + +:: WORK :: Document that the global history can have diff. formats@* +Most web browsers also support the idea of a ``history'' of @sc{url}s the +user has visited, and it displays them in a different style than normal +@sc{url}s. + +@vindex url-keep-history +@vindex url-global-history-file +If the variable @code{url-keep-history} is @code{t}, then Emacs/W3 +keeps a list of all the @sc{url}s visited in a session. The file is +automatically written to disk when exiting emacs. The list is added to +those already in the file specified by @code{url-global-history-file}, +which defaults to @file{~/.mosaic-global-history}. + +If any @sc{url} in the list is found in the file, it is not saved, but new +ones are added at the end of the file. + +The function that saves the global history list is smart enough to +notice what style of history list is being used (Netscape, Emacs/W3, or +XMosaic), and writes out the new additions appropriately. + +@cindex Completion of URLs +@cindex Usefulness of global history +One of the nice things about keeping a global history files is that Emacs/W3 +can use it as a completion table. When doing @kbd{M-x w3-fetch}, pressing +the @kbd{tab} or @kbd{space} key will show all completions for a +partial @sc{url}. This is very useful, especially for very long @sc{url}s that +are not in a hotlist, or for seeing all the pages from a particular web +site before choosing which to retrieve. + +@node Stylesheets, Supported URLs, Compatibility, Top +@chapter Stylesheets +The way in which Emacs/W3 formats a document is very customizable. All +formatting is now controlled by a default stylesheet set by the user +with the @code{w3-default-stylesheet} variable. Emacs/W3 currently +supports the @sc{W3C} recommendation for Cascading Style Sheets, Level 1 +(commonly known as @sc{CSS1}) with a few experimental items from other +W3C proposals. Wherever Emacs/W3 diverges from the specification, it +will be clearly documented, and will be changed once a full standard is +available. + +Support for @sc{DSSSL} is progressing, but spare time is at an all-time +low. If anyone would like to help, please contact the author. + +The following sections closely parallel the @sc{CSS1} specification so +it should be very easy to look up what Emacs/W3 supports when browsing +through the @sc{CSS1} specification. Please note that a lot of the text +in the following sections comes directly from the specification as +well. + +@menu +* Terminology:: Terms used in the rest of this chapter. +* Basic Concepts:: Why are stylesheets useful? Getting started. +* Pseudo-Classes/Elements:: Special classes for elements. +* The Cascade:: How stylesheets are combined. +* Properties:: What properties you can set on elements. +* Units:: What you can set them to. +@end menu + +@node Terminology, Basic Concepts, Stylesheets, Stylesheets +@section Terminology + +@table @dfn +@item attribute +HTML attribute, ie: @samp{align=center} - align is the attribute. +@item author +The author of an HTML document. +@item block-level element +An element which has a line break before and after (e.g. 'H1' in @sc{HTML}). +@item canvas +The part of the UA's drawing surface onto which documents are rendered. +@item child element +A subelement in @sc{sgml} terminology. +@item contextual selector +A selector that matches elements based on their position in the document +structure. A contextual selector consists of several simple +selectors. E.g., the contextual selector 'H1.initial B' consists of two +simple selectors, 'H1.initial' and 'B'. +@item @sc{css} +Cascading Style Sheets. +@item declaration +A property (e.g. 'font-size') and a corresponding value (e.g. '12pt'). +@item designer +The designer of a style sheet. +@item document +@sc{html} document. +@item element +@sc{html} element. +@item element type +A generic identifier in @sc{sgml} terminology. +@item fictional tag sequence +A tool for describing the behavior of pseudo-classes and pseudo-elements. +@item font size +The size for which a font is designed. Typically, the size of a font is +approximately equal to the distance from the bottom of the lowest letter +with a descender to the top of the tallest letter with an ascender and +(optionally) with a diacritical mark. +@item @sc{html} extension +Markup introduced by UA vendors, most often to support certain visual +effects. The @sc{font}, @sc{center} and @sc{blink} elements are examples +of HTML extensions, as is the @sc{bgcolor} attribute. One of the goals +of @sc{css} is to provide an alternative to @sc{html} extensions. +@item inline element +An element which does not have a line break before and after +(e.g. '@sc{strong}' in @sc{html}) +@item intrinsic dimensions +The width and height as defined by the element itself, not imposed by +the surroundings. In this specification it is assumed that all replaced +elements -- and only replaced elements -- come with intrinsic +dimensions. +@item parent element +The containing element in @sc{sgml} terminology. +@item pseudo-element +Pseudo-elements are used in @sc{css} selectors to address typographical +items (e.g. the first line of an element) rather than structural +elements. +@item pseudo-class +Pseudo-classes are used in @sc{css} selectors to allow information +external to the @sc{html} source (e.g. the fact that an anchor has been +visited or not) to classify elements. +@item property +A stylistic parameter that can be influenced through @sc{css}. +@item reader +The person for whom the document is rendered. +@item replaced element +An element that the @sc{css} formatter only knows the intrinsic +dimensions of. In @sc{html}, @sc{img}, @sc{input}, @sc{textarea}, +@sc{select} and @sc{object} elements can be examples of replaced +elements. E.g., the content of the @sc{img} element is often replaced by +the image that the @sc{src} attribute points to. @sc{css1} does not +define how the intrinsic dimensions are found. +@item rule +A declaration (e.g. 'font-family: helvetica') and its selector +(e.g. @sc{'H1'}). +@item selector +A string that identifies what elements the corresponding rule applies +to. A selector can either be a simple selector (e.g. 'H1') or a +contextual selector (e.g. @sc{'h1 b'}) which consists of several simple +selectors. +@item @sc{sgml} +Standard Generalized Markup Language, of which @sc{html} is an +application. +@item simple selector +A selector that matches elements based on the element type and/or +attributes, and not the element's position in the document +structure. E.g., 'H1.initial' is a simple selector. +@item style sheet +A collection of rules. +@item @sc{ua} +User Agent, often a web browser or web client. +@item user +Synonymous with reader. +@item weight +The priority of a rule. +@end table + +@node Basic Concepts, Pseudo-Classes/Elements, Terminology, Stylesheets +@section Basic Concepts + +Designing simple style sheets is easy. One needs only to know a little +HTML and some basic desktop publishing terminology. E.g., to set the +text color of 'H1' elements to blue, one can say: + +@example + H1 @{ color: blue @} +@end example + +The example above is a simple CSS rule. A rule consists of two main +parts: selector ('H1') and declaration ('color: blue'). The declaration +has two parts: property ('color') and value ('blue'). While the example +above tries to influence only one of the properties needed for rendering +an HTML document, it qualifies as a style sheet on its own. Combined +with other style sheets (one fundamental feature of CSS is that style +sheets are combined) it will determine the final presentation of the +document. + +The selector is the link between the HTML document and the style sheet, and +all HTML element types are possible selectors. + +@node Pseudo-Classes/Elements, The Cascade, Basic Concepts, Stylesheets +@section Pseudo-Classes/Elements + +In @sc{css1}, style is normally attached to an element based on its +position in the document structure. This simple model is sufficient for +a wide variety of styles, but doesn't cover some common effects. The +concept of pseudo-classes and pseudo-elements extend addressing in +@sc{css1} to allow external information to influence the formatting +process. + +Pseudo-classes and pseudo-elements can be used in @sc{css} selectors, +but do not exist in the @sc{html} source. Rather, they are "inserted" by +the @sc{ua} under certain conditions to be used for addressing in style +sheets. They are referred to as "classes" and "elements" since this is a +convenient way of describing their behavior. More specifically, their +behavior is defined by a fictional tag sequence. + +Pseudo-elements are used to address sub-parts of elements, while +pseudo-classes allow style sheets to differentiate between different +element types. + +The only support pseudo-classes in Emacs/W3 are on the anchor tag +(<a>...</a>). + +User agents commonly display newly visited anchors differently from +older ones. In @sc{css1}, this is handled through pseudo-classes on the +'A' element: + +@example + A:link @{ color: red @} /* unvisited link */ + A:visited @{ color: blue @} /* visited links */ + A:active @{ color: lime @} /* active links */ +@end example + +All 'A' elements with an 'HREF' attribute will be put into one and only +one of these groups (i.e. target anchors are not affected). UAs may +choose to move an element from 'visited' to 'link' after a certain +time. An 'active' link is one that is currently being selected (e.g. by +a mouse button press) by the reader. + +The formatting of an anchor pseudo-class is as if the class had been +inserted manually. A @sc{ua} is not required to reformat a currently +displayed document due to anchor pseudo-class transitions. E.g., a style +sheet can legally specify that the 'font-size' of an 'active' link +should be larger that a 'visited' link, but the UA is not required to +dynamically reformat the document when the reader selects the 'visited' +link. + +Pseudo-class selectors do not match normal classes, and vice versa. The +style rule in the example below will therefore not have any influence: + +@example + A:link @{ color: red @} + + <A CLASS=link NAME=target5> ... </A> +@end example + +In @sc{css1}, anchor pseudo-classes have no effect on elements other +than 'A'. Therefore, the element type can be omitted from the selector: + +@example + A:link @{ color: red @} + :link @{ color: red @} +@end example + +The two selectors above will select the same elements in CSS1. + +Pseudo-class names are case-insensitive. + +Pseudo-classes can be used in contextual selectors: + +@example + A:link IMG @{ border: solid blue @} +@end example + +Also, pseudo-classes can be combined with normal classes: + +@example + A.external:visited @{ color: blue @} + + <A CLASS=external HREF="http://out.side/">external link</A> +@end example + +If the link in the above example has been visited, it will be rendered +in blue. Note that normal class names precede pseudo-classes in the +selector. + +@node The Cascade, Properties, Pseudo-Classes/Elements, Stylesheets +@section The Cascade + +In @sc{css}, more than one style sheet can influence the presentation +simultaneously. There are two main reasons for this feature: modularity +and author/reader balance. + +@table @i +@item modularity +A style sheet designer can combine several (partial) style sheets to +reduce redundancy: + +@example + @@import url(http://www.style.org/pastoral); + @@import url(http://www.style.org/marine); + + H1 @{ color: red @} /* override imported sheets */ +@end example +@item author/reader balance +Both readers and authors can influence the presentation through style +sheets. To do so, they use the same style sheet language thus reflecting +a fundamental feature of the web: everyone can become a publisher. The +@sc{ua} is free to choose the mechanism for referencing personal style +sheets. +@end table + +Sometimes conflicts will arise between the style sheets that influence +the presentation. Conflict resolution is based on each style rule having +a weight. By default, the weights of the reader's rules are less than +the weights of rules in the author's documents. I.e., if there are +conflicts between the style sheets of an incoming document and the +reader's personal sheets, the author's rules will be used. Both reader +and author rules override the @sc{ua}'s default values. + +The imported style sheets also cascade with each other, in the order +they are imported, according to the cascading rules defined below. Any +rules specified in the style sheet itself override rules in imported +style sheets. That is, imported style sheets are lower in the cascading +order than rules in the style sheet itself. Imported style sheets can +themselves import and override other style sheets, recursively. + +In @sc{css1}, all '@@import' statements must occur at the start of a +style sheet, before any declarations. This makes it easy to see that +rules in the style sheet itself override rules in the imported style +sheets. + +NOTE: The use of !important in @sc{css} stylesheets is unsupported at +this time. + +Conflicting rules are intrinsic to the CSS mechanism. To find the value +for an element/property combination, the following algorithm must be +followed: + +@enumerate +@item +Find all declarations that apply to the element/property in +question. Declarations apply if the selector matches the element in +question. If no declarations apply, the inherited value is used. If +there is no inherited value (this is the case for the 'HTML' element and +for properties that do not inherit), the initial value is used. +@item +Sort the declarations by explicit weight: declarations marked +'!important' carry more weight than unmarked (normal) declarations. +@item +Sort by origin: the author's style sheets override the reader's style +sheet which override the UA's default values. An imported style sheet +has the same origin as the style sheet from which it is imported. +@item +Sort by specificity of selector: more specific selectors will override +more general ones. To find the specificity, count the number of ID +attributes in the selector (a), the number of CLASS attributes in the +selector (b), and the number of tag names in the selector +(c). Concatenating the three numbers (in a number system with a large +base) gives the specificity. Some examples: +@example + LI @{...@} /* a=0 b=0 c=1 -> specificity = 1 */ + UL LI @{...@} /* a=0 b=0 c=2 -> specificity = 2 */ + UL OL LI @{...@} /* a=0 b=0 c=3 -> specificity = 3 */ + LI.red @{...@} /* a=0 b=1 c=1 -> specificity = 11 */ + UL OL LI.red @{...@} /* a=0 b=1 c=3 -> specificity = 13 */ + #x34y @{...@} /* a=1 b=0 c=0 -> specificity = 100 */ +@end example +Pseudo-elements and pseudo-classes are counted as normal elements and +classes, respectively. +@item +Sort by order specified: if two rules have the same weight, the latter +specified wins. Rules in imported style sheets are considered to be +before any rules in the style sheet itself. +@end enumerate + +The search for the property value can be terminated whenever one rule +has a higher weight than the other rules that apply to the same +element/property combination. + +This strategy gives author's style sheets considerably higher weight +than those of the reader. It is therefore important that the reader has +the ability to turn off the influence of a certain style sheet, +e.g. through a pull-down menu. + +A declaration in the 'STYLE' attribute of an element has the same weight +as a declaration with an ID-based selector that is specified at the end +of the style sheet: + +@example +<STYLE TYPE="text/css"> + #x97z @{ color: blue @} +</STYLE> + +<P ID=x97z STYLE="color: red"> +@end example + +In the above example, the color of the 'P' element would be +red. Although the specificity is the same for both declarations, the +declaration in the 'STYLE' attribute will override the one in the +'STYLE' element because of cascading rule number 5. + +The @sc{ua} may choose to honor other stylistic @sc{html} attributes, +for example 'ALIGN'. If so, these attributes are translated to the +corresponding @sc{css} rules with specificity equal to 1. The rules are +assumed to be at the start of the author style sheet and may be +overridden by subsequent style sheet rules. In a transition phase, this +policy will make it easier for stylistic attributes to coexist with +style sheets. + +@node Properties, Units, The Cascade, Stylesheets +@section Properties + +In the text below, the allowed values for each property are listed +with a syntax like the following: + +@example + Value: N | NW | NE + Value: [ <length> | thick | thin ]@{1,4@} + Value: <uri>? <color> [ / <color> ]? + Value: <uri> || <color> +@end example + +The words between < and > give a type of value. The most common types +are <length>, <percentage>, <url>, <number>and <color> these are +described in the section on [[units]]. The more specialized types +(e.g. <font-family>and <border-style>) are described under the property +where they appear. + +Other words are keywords that must appear literally, without quotes. The +slash (/) and the comma (,) must also appear literally. + +Several things juxtaposed mean that all of them must occur, in the given +order. A bar (|) separates alternatives: one of them must occur. A +double bar (A || B) means that either A or B or both must occur, in any +order. Brackets ([]) are for grouping. Juxtaposition is stronger than +the double bar, and the double bar is stronger than the bar. Thus "a b | +c || d e" is equivalent to "[ a b ] | [ c || [ d e ]]". + +Every type, keyword, or bracketed group may be followed by one of the +following modifiers: + +@itemize @bullet +@item +An asterisk (*) indicates that the preceding type, word or group is +repeated zero or more times. +@item +A plus (+) indicates that the preceding type, word or group is repeated +one or more times. +@item +A question mark (?) indicates that the preceding type, word or group is +optional. +@item +A pair of numbers in curly braces (@{A,B@}) indicates that the preceding +type, word or group is repeated at least A and at most B times. +@end itemize + +Other than the value the following information is also shown. + +@multitable @columnfractions .20 .8 +@item Supported Values: @tab If this is present, it lists the parts of +the specification that Emacs/W3 currently supports. +@item Unsupported Values: @tab If this is present, it represents the +parts of the specifcation that Emacs/W3 does not support. +@item Initial: @tab The default value for the property, unless +explicitly set in a stylesheet. +@item Applies to: @tab What type of elements this property can be attached to. +@item Inherited: @tab Yes or no +@item Percentage values: @tab What a percentage value applies to when given. +@end multitable + +@menu +* Font Properties:: Selecting fonts, styles, and sizes. +* Colors and Backgrounds:: Controlling colors, front and back. +* Text Properties:: Alignment, decoration, and more! +* Box Properties:: Borders, padding, and margins, oh my! +* Classification:: Changing whitespace and display policies. +* Media Selection:: Conditionalize stylesheets on media-type. +* Speech Properties:: Speech output controlled by stylesheets. +@end menu + +@node Font Properties, Colors and Backgrounds, Properties, Properties +@subsection Font Properties + +Setting font properties will be among the most common uses of style +sheets. Unfortunately, there exists no well-defined and universally +accepted taxonomy for classifying fonts, and terms that apply to one +font family may not be appropriate for others. E.g. 'italic' is commonly +used to label slanted text, but slanted text may also be labeled as +being @b{Oblique}, @b{Slanted}, @b{Incline}, @b{Cursive} or +@b{Kursiv}. Therefore it is not a simple problem to map typical font +selection properties to a specific font. + +The properties defined by CSS1 are described in the following sections. +@menu +* font-family:: Groups of fonts. +* font-style:: Normal, italic, or oblique? +* font-variant:: Small-caps, etc. +* font-weight:: How bold can you go? +* font-size:: How big is yours? +* font:: Shorthand for all of the above. +@end menu + +@node font-family, font-style, Font Properties, Font Properties +@subsubsection font-family + +@multitable @columnfractions .20 .8 +@item Supported Values: @tab [[<family-name> | <generic-family>],]* [<family-name> | <generic-family>] +@item Initial: @tab User specific +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable +The value is a prioritized list of font family names and/or generic +family names. Unlike most other CSS1 properties, values are separated +by a comma to indicate that they are alternatives: + +@example + BODY @{ font-family: gill, helvetica, sans-serif @} +@end example + +There are two types of list values: + +@table @b +@item <family-name> +The name of a font family of choice. In the last example, "gill" and +"helvetica" are font families. +@item <generic-family> +In the example above, the last value is a generic family name. The +following generic families are defined: +@itemize @bullet +@item +'serif' (e.g. Times) +@item +'sans-serif' (e.g. Helvetica) +@item +'cursive' (e.g. Zapf-Chancery) +@item +'fantasy' (e.g. Western) +@item +'monospace' (e.g. Courier) +@end itemize +@end table + +Style sheet designers are encouraged to offer a generic font family as a +last alternative. + +Font names containing whitespace should be quoted: + +@example + BODY @{ font-family: "new century schoolbook", serif @} + + <BODY STYLE="font-family: 'My own font', fantasy"> +@end example + +If quoting is omitted, any whitespace characters before and after the +font name are ignored and any sequence of whitespace characters inside +the font name is converted to a single space. + +@node font-style, font-variant, font-family, Font Properties +@subsubsection font-style + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab normal | italic | oblique +@item Initial: @tab normal +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +The 'font-style' property selects between normal (sometimes referred to +as "roman" or "upright"), italic and oblique faces within a font family. + +A value of 'normal' selects a font that is classified as 'normal' in the +UA's font database, while 'oblique' selects a font that is labeled +'oblique'. A value of 'italic' selects a font that is labeled 'italic', +or, if that is not available, one labeled 'oblique'. + +The font that is labeled 'oblique' in the UA's font database may +actually have been generated by electronically slanting a normal font. + +Fonts with Oblique, Slanted or Incline in their names will typically be +labeled 'oblique' in the UA's font database. Fonts with Italic, Cursive +or Kursiv in their names will typically be labeled 'italic'. + +@example + H1, H2, H3 @{ font-style: italic @} + H1 EM @{ font-style: normal @} +@end example + +In the example above, emphasized text within 'H1' will appear in a +normal face. + +@node font-variant, font-weight, font-style, Font Properties +@subsubsection font-variant + +@multitable @columnfractions .2 .8 +@item Value: @tab normal | small-caps +@item Initial: @tab normal +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +Another type of variation within a font family is the small-caps. In a +small-caps font the lower case letters look similar to the uppercase +ones, but in a smaller size and with slightly different proportions. The +'font-variant' property selects that font. + +A value of 'normal' selects a font that is not a small-caps font, +'small-caps' selects a small-caps font. It is acceptable (but not +required) in CSS1 if the small-caps font is a created by taking a normal +font and replacing the lower case letters by scaled uppercase +characters. As a last resort, uppercase letters will be used as +replacement for a small-caps font. + +The following example results in an 'H3' element in small-caps, with +emphasized words in oblique small-caps: + +@example + H3 @{ font-variant: small-caps @} + EM @{ font-style: oblique @} +@end example + +There may be other variants in the font family as well, such as fonts +with old-style numerals, small-caps numerals, condensed or expanded +letters, etc. CSS1 has no properties that select those. + +@node font-weight, font-size, font-variant, Font Properties +@subsubsection font-weight + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 +@item Unsupported Values: @tab bolder | lighter +@item Initial: @tab normal +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +The 'font-weight' property selects the weight of the font. The values +'100' to '900' form an ordered sequence, where each number indicates a +weight that is at least as dark as its predecessor. The keyword 'normal' +is synonymous with '400', and 'bold' is synonymous with '700'. Keywords +other than 'normal' and 'bold' have been shown to be often confused with +font names and a numerical scale was therefore chosen for the 9-value +list. + +@example + P @{ font-weight: normal @} /* 400 */ + H1 @{ font-weight: 700 @} /* bold */ +@end example + +The 'bolder' and 'lighter' values select font weights that are relative +to the weight inherited from the parent: + +@example + STRONG @{ font-weight: bolder @} +@end example + +There is no guarantee that there will be a darker face for each of the +'font-weight' values; for example, some fonts may have only a normal and +a bold face, others may have eight different face weights. There is no +guarantee on how a UA will map font faces within a family to weight +values. The only guarantee is that a face of a given value will be no +less dark than the faces of lighter values. + +@node font-size, font, font-weight, Font Properties +@subsubsection font-size + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab <absolute-size> | <length> +@item Unsupported Values: @tab <percentage> | <relative-size> +@item Initial: @tab medium +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab relative to parent element's font size +@end multitable + +@table @b +@item <absolute-size> +An <absolute-size> keyword is an index to a table of font sizes computed +and kept by the UA. Possible values are: +@itemize @bullet +@item +xx-small +@item +x-small +@item +small +@item +medium +@item +large +@item +x-large +@item +xx-large +@end itemize + +On a computer screen a scaling factor of 1.5 is suggested between +adjacent indexes; if the 'medium' font is 10pt, the 'large' font could +be 15pt. Different media may need different scaling factors. Also, the +UA should take the quality and availability of fonts into account when +computing the table. The table may be different from one font family to +another. +@item <relative-size> +A <relative-size> keyword is interpreted relative to the table of font +sizes and the font size of the parent element. Possible values are +@b{larger} or @b{smaller}. For example, if the parent element has a font +size of 'medium', a value of 'larger' will make the font size of the +current element be 'large'. If the parent element's size is not close to +a table entry, the UA is free to interpolate between table entries or +round off to the closest one. The UA may have to extrapolate table +values if the numerical value goes beyond the keywords. +@end table + +Length and percentage values should not take the font size table into +account when calculating the font size of the element. + +Negative values are not allowed. + +On all other properties, 'em' and 'ex' length values refer to the font +size of the current element. On the 'font-size' property, these length +units refer to the font size of the parent element. + +Note that an application may reinterpret an explicit size, depending on +the context. E.g., inside a VR scene a font may get a different size +because of perspective distortion. + +Examples: + +@example + P @{ font-size: 12pt; @} + BLOCKQUOTE @{ font-size: larger @} + EM @{ font-size: 150% @} + EM @{ font-size: 1.5em @} +@end example + +If the suggested scaling factor of 1.5 is used, the last three +declarations are identical. + +@node font, , font-size, Font Properties +@subsubsection font + +@multitable @columnfractions .2 .8 +@item Value: @tab [ <font-style> || <font-variant> || <font-weight> ]? <font-size> [ / <line-height> ]? <font-family> +@item Initial: @tab not defined for shorthand properties +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab allowed on <font-size> and <line-height> +@end multitable +The 'font' property is a shorthand property for setting 'font-style' +'font-variant' 'font-weight' 'font-size', 'line-height' and +'font-family' at the same place in the style sheet. The syntax of this +property is based on a traditional typographical shorthand notation to +set multiple properties related to fonts. + +For a definition of allowed and initial values, see the previously +defined properties. Properties for which no values are given are set to +their initial value. + +@example + P @{ font: 12pt/14pt sans-serif @} + P @{ font: 80% sans-serif @} + P @{ font: x-large/110% "new century schoolbook", serif @} + P @{ font: bold italic large Palatino, serif @} + P @{ font: normal small-caps 120%/120% fantasy @} +@end example + +In the second rule, the font size percentage value ('80%') refers to the +font size of the parent element. In the third rule, the line height +percentage refers to the font size of the element itself. + +In the first three rules above, the 'font-style', 'font-variant' and +'font-weight' are not explicitly mentioned, which means they are all +three set to their initial value ('normal'). The fourth rule sets the +'font-weight' to 'bold', the 'font-style' to 'italic' and implicitly +sets 'font-variant' to 'normal'. + +The fifth rule sets the 'font-variant' ('small-caps'), the 'font-size' +(120% of the parent's font), the 'line-height' (120% times the font +size) and the 'font-family' ('fantasy'). It follows that the keyword +'normal' applies to the two remaining properties: 'font-style' and +'font-weight'. + +@node Colors and Backgrounds, Text Properties, Font Properties, Properties +@subsection Colors and Backgrounds + +These properties describe the color (often called foreground color) and +background of an element (i.e. the surface onto which the content is +rendered). One can set a background color and/or a background image. The +position of the image, if/how it is repeated, and whether it is fixed or +scrolled relative to the canvas can also be set. + +The 'color' property inherits normally. The background properties do not +inherit, but the parent element's background will shine through by +default because of the initial 'transparent' value on +'background-color'. + +NOTE: Currently, Emacs/W3 can only show background images under XEmacs. +Emacs 19 doesn't have the support in its display code yet. + +@menu +* color:: Foreground colors. +* background-color:: Background colors. +* background-image:: Background images. +* background-repeat:: Controlling repeating of background images. +* background-attachment:: Where background images are drawn. +* background-position:: Where background images are drawn. +* background:: Shorthand for all background properties. +@end menu + +@node color, background-color, Colors and Backgrounds, Colors and Backgrounds +@subsubsection color + +@multitable @columnfractions .2 .8 +@item Value: @tab <color> +@item Initial: @tab User specific +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +This property describes the text color of an element (often referred to +as the foreground color). There are different ways to specify red: + +@example + EM @{ color: red @} /* natural language */ + EM @{ color: rgb(255,0,0) @} /* RGB range 0-255 */ +@end example + +See @ref{Color Units} for a description of possible color values. + +@node background-color, background-image, color, Colors and Backgrounds +@subsubsection background-color + +@multitable @columnfractions .2 .8 +@item Value: @tab <color> | transparent +@item Initial: @tab transparent +@item Applies to: @tab all elements +@item Inherited: @tab no +@item Percentage values: @tab N/A +@end multitable + +This property sets the background color of an element. + +@example + H1 @{ background-color: #F00 @} +@end example + +@node background-image, background-repeat, background-color, Colors and Backgrounds +@subsubsection background-image + +@multitable @columnfractions .2 .8 +@item Value: @tab <url> | none +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab no +@item Percentage values: @tab N/A +@end multitable + +This property sets the background image of an element. When setting a +background image, one should also set a background color that will be +used when the image is unavailable. When the image is available, it is +overlaid on top of the background color. + +@example + BODY @{ background-image: url(marble.png) @} + P @{ background-image: none @} +@end example + +@node background-repeat, background-attachment, background-image, Colors and Backgrounds +@subsubsection background-repeat + +This property is not supported at all under Emacs/W3. + +@node background-attachment, background-position, background-repeat, Colors and Backgrounds +@subsubsection background-attachment + +This property is not supported at all under Emacs/W3. + +@node background-position, background, background-attachment, Colors and Backgrounds +@subsubsection background-position + +This property is not supported at all under Emacs/W3. + +@node background, , background-position, Colors and Backgrounds +@subsubsection background + +@multitable @columnfractions .2 .8 +@item Value: @tab <background-color> || <background-image> || <background-repeat> || <background-attachment> || <background-position> +@item Initial: @tab not defined for shorthand properties +@item Applies to: @tab all elements +@item Inherited: @tab no +@item Percentage values: @tab allowed on <background-position> +@end multitable + +The 'background' property is a shorthand property for setting the +individual background properties (i.e., 'background-color', +'background-image', 'background-repeat', 'background-attachment' and +'background-position') at the same place in the style sheet. + +Possible values on the 'background' properties are the set of all +possible values on the individual properties. + +@example + BODY @{ background: red @} + P @{ background: url(chess.png) gray 50% repeat fixed @} +@end example + +The 'background' property always sets all the individual background +properties. In the first rule of the above example, only a value for +'background-color' has been given and the other individual properties +are set to their initial value. In the second rule, all individual +properties have been specified. + +@node Text Properties, Box Properties, Colors and Backgrounds, Properties +@subsection Text Properties + +@menu +* word-spacing:: +* letter-spacing:: +* text-decoration:: +* vertical-align:: +* text-transform:: +* text-align:: +* text-indent:: +* line-height:: +@end menu + +@node word-spacing, letter-spacing, Text Properties, Text Properties +@subsubsection word-spacing + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab normal +@item Unsupported Values: @tab <length> +@item Initial: @tab normal +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +The length unit indicates an addition to the default space between +words. Values can be negative, but there may be implementation-specific +limits. The UA is free to select the exact spacing algorithm. The word +spacing may also be influenced by justification (which is a value of the +'align' property). + +@example + H1 @{ word-spacing: 0.4em @} +@end example + +Here, the word-spacing between each word in 'H1' elements would be +increased by '1em'. + +NOTE: Emacs/W3 cannot currently support this, due to limitations in +Emacs. It may be implemented in the future. + +@node letter-spacing, text-decoration, word-spacing, Text Properties +@subsubsection letter-spacing + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab normal +@item Unsupported Values: @tab <length> +@item Initial: @tab normal +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +The length unit indicates an addition to the default space between +characters. Values can be negative, but there may be +implementation-specific limits. The UA is free to select the exact +spacing algorithm. The letter spacing may also be influenced by +justification (which is a value of the 'align' property). + +@example + BLOCKQUOTE @{ letter-spacing: 0.1em @} +@end example + +Here, the letter-spacing between each character in 'BLOCKQUOTE' elements +would be increased by '0.1em'. + +NOTE: Emacs/W3 cannot currently support this, due to limitations in +Emacs. It may be implemented in the future. + +@node text-decoration, vertical-align, letter-spacing, Text Properties +@subsubsection text-decoration + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab none | underline | line-through | blink +@item Unsupported Values: @tab overline +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab no, but see clarification below +@item Percentage values: @tab N/A +@end multitable + +This property describes decorations that are added to the text of an +element. If the element has no text (e.g. the 'IMG' element in HTML) or +is an empty element (e.g. '<EM></EM>'), this property has no effect. A +value of 'blink' causes the text to blink. + +The color(s) required for the text decoration should be derived from the +'color' property value. + +This property is not inherited, but elements should match their +parent. E.g., if an element is underlined, the line should span the +child elements. The color of the underlining will remain the same even +if descendant elements have different 'color' values. + +@example + A:link, A:visited, A:active @{ text-decoration: underline @} +@end example + +The example above would underline the text of all links (i.e., all 'A' +elements with a 'HREF' attribute). + +NOTE: The 'line-through' property is only supported under XEmacs +currently. A patch has been sent to the Emacs maintainers to add +support for this, but it has not made it into the main distribution +yet. + +@node vertical-align, text-transform, text-decoration, Text Properties +@subsubsection vertical-align + +This is currently unsupported in Emacs/W3. + +@node text-transform, text-align, vertical-align, Text Properties +@subsubsection text-transform + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab none +@item Unsupported Values: @tab capitalize | uppercase | lowercase +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +@table @b +@item 'capitalize' +Uppercases the first character of each word. +@item 'uppercase' +Uppercases all letters of the element. +@item 'lowercase' +Lowercases all letters of the element. +@item 'none' +Neutralizes inherited value. +@end table + +The actual transformation in each case is human language dependent. + +@example + H1 @{ text-transform: uppercase @} +@end example + +The example above would put 'H1' elements in uppercase text. + +NOTE: This capability was in the previous version of Emacs/W3, but has +not been reimplemented in the new display code yet. Please feel free to +send me patches. + +@node text-align, text-indent, text-transform, Text Properties +@subsubsection text-align + +@multitable @columnfractions .2 .8 +@item Value: @tab left | right | center | justify +@item Initial: @tab User specific +@item Applies to: @tab block-level elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +This property describes how text is aligned within the element. The +actual justification algorithm used is UA and human language dependent. + +Example: +@example + DIV.center @{ text-align: center @} +@end example + +Since 'text-align' inherits, all block-level elements inside the 'DIV' +element with 'CLASS=center' will be centered. Note that alignments are +relative to the width of the element, not the canvas. + +@node text-indent, line-height, text-align, Text Properties +@subsubsection text-indent + +Not currently implemented in Emacs/W3. + +@node line-height, , text-indent, Text Properties +@subsubsection line-height + +Not currently implemented in Emacs/W3. + +@node Box Properties, Classification, Text Properties, Properties +@subsection Box Properties + +@multitable @columnfractions .2 .8 +@end multitable + +@node Classification, Media Selection, Box Properties, Properties +@subsection Classification + +These properties classify elements into categories more than they set +specific visual parameters. + +The list-style properties describe how list items (i.e. elements with a +'display' value of 'list-item') are formatted. The list-style properties +can be set on any element, and it will inherit normally down the +tree. However, they will only be have effect on elements with a +'display' value of 'list-item'. In HTML this is typically the case for +the 'LI' element. + +@menu +* display:: +* white-space:: +* list-style-type:: +* list-style-image:: +* list-style-position:: +* list-style:: +@end menu + +@node display, white-space, Classification, Classification +@subsubsection display + +@multitable @columnfractions .2 .8 +@item Value: @tab block | inline | list-item | none +@item Extensions: @tab line +@item Initial: @tab inline +@item Applies to: @tab all elements +@item Inherited: @tab no +@item Percentage values: @tab N/A +@end multitable + +This property describes how/if an element is displayed on the canvas +(which may be on a printed page, a computer display etc.). + +An element with a 'display' value of 'block' opens whitespace suitable +for a paragraph break. Typically, elements like 'H1' and 'P' are of +type 'block'. A value of 'list-item' is similar to 'block' except that a +list-item marker is added. In HTML, 'LI' will typically have this value. + +An element with a 'display' value of 'inline' results in a new inline +box on the same line as the previous content. + +A value of 'none' turns off the display of the element, including +children elements and the surrounding box. + +@example + P @{ display: block @} + EM @{ display: inline @} + LI @{ display: list-item @} + IMG @{ display: none @} +@end example + +The last rule turns off the display of images. + +A value of 'line' results in a single line break. Emacs/W3 needs this +extension to be able to fully specify the behaviour of @sc{br} and +@sc{hr} elements within a stylesheet. + +NOTE: Emacs/W3 defaults to using 'inline' for this property, which is a +slight deviation from the specification. + +@node white-space, list-style-type, display, Classification +@subsubsection white-space + +@multitable @columnfractions .2 .8 +@item Value: @tab normal | pre | nowrap +@item Initial: @tab normal +@item Applies to: @tab block-level elements +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +This property declares how whitespace inside the element is handled: the +'normal' way (where whitespace is collapsed), as 'pre' (which behaves +like the 'PRE' element in HTML) or as 'nowrap' (where wrapping is done +only through BR elements): + +@example + PRE @{ white-space: pre @} + P @{ white-space: normal @} +@end example + +@node list-style-type, list-style-image, white-space, Classification +@subsubsection list-style-type + +@multitable @columnfractions .2 .8 +@item Value: @tab disc | circle | square | decimal | lower-roman | upper-roman | lower-alpha | upper-alpha | none +@item Initial: @tab disc +@item Applies to: @tab elements with 'display' value 'list-item' +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +This property is used to determine the appearance of the list-item +marker if 'list-style-image' is 'none' or if the image pointed to by the +URL cannot be displayed. + +Fo example: +@example + OL @{ list-style-type: decimal @} /* 1 2 3 4 5 etc. */ + OL @{ list-style-type: lower-alpha @} /* a b c d e etc. */ + OL @{ list-style-type: lower-roman @} /* i ii iii iv v etc. */ +@end example + +@node list-style-image, list-style-position, list-style-type, Classification +@subsubsection list-style-image + +@multitable @columnfractions .2 .8 +@item Value: @tab <url> | none +@item Initial: @tab none +@item Applies to: @tab elements with 'display' value 'list-item' +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +This property sets the image that will be used as the list-item +marker. When the image is available it will replace the marker set with +the 'list-style-type' marker. + +NOTE: This is currently unimplemented in Emacs/W3. + +@example + UL @{ list-style-image: url(http://png.com/ellipse.png) @} +@end example + +@node list-style-position, list-style, list-style-image, Classification +@subsubsection list-style-position + +@multitable @columnfractions .2 .8 +@item Supported Values: @tab outside +@item Unsupported Values: @tab inside +@item Initial: @tab outside +@item Applies to: @tab elements with 'display' value 'list-item' +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +The value of 'list-style-position' determines how the list-item marker +is drawn with regard to the content. For a formatting example see +section 4.1.3. + +@node list-style, , list-style-position, Classification +@subsubsection list-style + +@multitable @columnfractions .2 .8 +@item Value: @tab <keyword> || <position> || <url> +@item Initial: @tab not defined for shorthand properties +@item Applies to: @tab elements with 'display' value 'list-item' +@item Inherited: @tab yes +@item Percentage values: @tab N/A +@end multitable + +The 'list-style' property is a shorthand notation for setting the three +properties 'list-style-type', 'list-style-image' and +'list-style-position' at the same place in the style sheet. + +@example + UL @{ list-style: upper-roman inside @} + UL UL @{ list-style: circle outside @} + LI.square @{ list-style: square @} +@end example + +Setting 'list-style' directly on 'LI' elements can have unexpected +results. Consider: + +@example + <STYLE TYPE="text/css"> + OL.alpha LI @{ list-style: lower-alpha @} + UL LI @{ list-style: disc @} + </STYLE> + <BODY> + <OL CLASS=alpha> + <LI>level 1 + <UL> + <LI>level 2 + </UL> + </OL> + </BODY> +@end example + +Since the specificity (as defined in the cascading order) is higher for +the first rule in the style sheet in the example above, it will override +the second rule on all 'LI' elements and only 'lower-alpha' list styles +will be used. It is therefore recommended to set 'list-style' only on +the list type elements: + +@example + OL.alpha @{ list-style: lower-alpha @} + UL @{ list-style: disc @} +@end example + +In the above example, inheritance will transfer the 'list-style' values +from 'OL' and 'UL' elements to 'LI' elements. + +A URL value can be combined with any other value: + +@example + UL @{ list-style: url(http://png.com/ellipse.png) disc @} +@end example + +In the example above, the 'disc' will be used when the image is +unavailable. + +@node Media Selection, Speech Properties, Classification, Properties +@subsection Media Selection + +To specify that a stylesheet declaration should only apply when using a +certain media type (ie: different font families preferred when printing +versus on-screen presentation), the declarations should be wrapped in +the proposed @b{@@media} directive. + +The @@media directive takes two arguments, the media type, and a block +of style declarations. + +@example + @@media print @{ + BODY @{ font-size: 10pt @} + H1 @{ font-size: 14pt @} + @} +@end example +The '@@media' construct also allows to put include style sheet rules +for various media in the same style sheet: + +@example + @@media print @{ + BODY @{ font-size: 10pt @} + @} + @@media screen @{ + BODY @{ font-size: 12pt @} + @} +@end example + +Currently, the following media types are defined. +@table @b +@item Print +Output for paged opaque material, and for documents viewed on screen in +print preview mode. +@item Screen +A continuous presentation for computer screens. +@item Projector +Paged presentation for projected presentations. +@item Braille +For braille tactile feedback devices. +@item Speech +Aural presentation. +@item Light +The stylesheet will only be applied if the user is using a light background. +@item Dark +The stylesheet will only be applied if the user is using a dark background. +@item Emacs +The stylesheet will only be applied if the user is running in Emacs 19. +@item XEmacs +The stylesheet will only be applied if the user is running in XEmacs 19. +@item All +The default value, the style sheet applies to all output devices. +@end table + +@node Speech Properties, , Media Selection, Properties +@subsection Speech Properties + +Those of us who are sighted are accustomed to visual presentation of +@sc{html} documents, frequently on a bitmapped display. This is not the +only possible presentation method, however. Aural presentation, using a +combination of speech synthesis and 'audio icons', provides an +alternative presentation. This form of presentation is in current use by +the blind and print-impaired communities. + +Often such aural presentation occurs by converting the document to plain +text and feeding this to a 'screen reader' -- software or hardware that +simply reads all the characters on the screen. This results in less +effective presentation than would be the case if the document structure +were retained. + +There are other large markets for aural presentation, including in-car +and home entertainment use; aurual or mixed aural/visual presentation is +thus likely to increase in importance over the next few years. Realizing +that that the aural rendering is essentially independent of the visual +rendering: + +@itemize @bullet +@item +Allows orthogonal aural and visual views. +@item +Allows browsers to optionally implement both aural and visual views to +produce truly multimodal documents. +@end itemize + +@menu +* volume:: +* pause-before:: +* pause-after:: +* pause:: +* cue-before:: +* cue-after:: +* cue:: +* play-during:: +* speed:: +* voice-family:: +* pitch:: +* pitch-range:: +* stress:: +* richness:: +* speak-punctuation:: +* speak-date:: +* speak-numeral:: +* speak-time:: +@end menu + +@node volume, pause-before, Speech Properties, Speech Properties +@subsubsection volume + +@multitable @columnfractions .2 .8 +@item Value: @tab <percentage> | mute | x-soft | soft | medium | loud | x-loud +@item Initial: @tab medium +@item Applies to: @tab all elements +@item Inherited: @tab yes +@item Percentage values: @tab relative to user-specified mapping +@end multitable + +The legal range of percentage values is 0% to 100%. There is a fixed +mapping between keyword values and percentages: + +@itemize @bullet +@item +'x-soft' = '0%' +@item +'soft' = '25%' +@item +'medium' = '50%' +@item +'loud' = '75%' +@item +'x-loud' = '100%' +@end itemize + +Volume refers to the median volume of the waveform. In other words, a +highly inflected voice at a volume of 50 might peak well above +that. Note that '0%' does not mean the same as "mute". 0% represents the +minimum audible volume level and 100% corresponds to the maximum +comfortable level. The UA should allow the values corresponding to 0% +and 100% to be set by the user. Suitable values depend on the equipment +in use (speakers, headphones), the environment (in car, home theater, +library) and personal preferences. Some examples: + +@itemize @bullet +@item +A browser for in-car use has a setting for when there is lots of +background noise . 0% would map to a fairly high level and 100% to a +quite high level. The overall values are likely to be human adjustable +for comfort, for example with a physical volume control: what this +proposal does is adjust the dynamic range. +@item +Another speech browser is being used in the home, late at night, (don't +annoy the neighbors) or in a shared study room. 0% is set to very quiet +and 100% to a fairly quiet level, too. As with the first example, there +is a low slope; the dynamic range is reduced. The actual volumes are low +here, wheras they were high in the first example. +@item +In a quiet and isolated house, an expensive hifi home theatre setup. 0% +is set fairly low and 100% to quite high; there is wide dynamic range. +@end itemize + +The same authors stylesheet could be used in all cases, simply by +mapping the 0 and 100 points suitably at the client side. + +@node pause-before, pause-after, volume, Speech Properties +@subsubsection pause-before + +@multitable @columnfractions .2 .8 +@item Value: @tab <time> | <percentage> +@item Initial: @tab UA specific +@item Applies to: @tab all elements +@item Inherited: @tab no +@item Percentage values: @tab speed +@end multitable + +This property specifies the pause before elements. It may be given in an +absolute units (seconds, milliseconds) or as a relative value in which +case it is relative to the reciprocal of the 'speed' property: if speed +is 120 words per minute (ie a word takes half a second -- 500 +milliseconds) then a pause-before of 100% means a pause of 500 ms and a +pause-before of 20% means 100ms. + +Using relative units gives more robust stylesheets in the face of large +changes in speed. + +@node pause-after, pause, pause-before, Speech Properties +@subsubsection pause-after + +@multitable @columnfractions .2 .8 +@item Value: @tab <time> | <percentage> +@item Applies to: @tab all elements +@item Inherited: @tab no +@item Percentage values: @tab speed +@end multitable + +This property specifies the pause after elements. Values are specified +the same way as 'pause-before'. + +@node pause, cue-before, pause-after, Speech Properties +@subsubsection pause + +@multitable @columnfractions .2 .8 +@item Value: @tab [<time> | <percentage> ]@{1,2@}; +@item Applies to: @tab all elements +@item Inherited: @tab no +@item Percentage values: @tab speed +@end multitable + +The 'pause' property is a shorthand for setting 'pause-before' and +'pause-after'. The first value is pause-before and the second is +pause-after. If only one value is given, it applies to both properties. + +Examples: + +@example + H1 @{ pause: 20ms @} /* pause-before: 20ms; pause-after: 20ms */ + H2 @{ pause: 30ms 40ms @} /* pause-before: 30ms; pause-after: 40ms */ + H3 @{ pause-after: 10ms @} /* pause-before: ?; pause-after: 10ms */ +@end example + +@node cue-before, cue-after, pause, Speech Properties +@subsubsection cue-before + +@multitable @columnfractions .2 .8 +@item Value: @tab <url> | none +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab no +@end multitable +Auditory icons are another way to distinguish semantic elements. Sounds +may be played before, and/or after the element to delimit it. The same +sound can be used both before and after, using the cue property. + +Examples: + +@example + A @{ cue-before: url(bell.aiff); cue-after: url(dong.wav) @} + H1 @{ cue-before: url(pop.au); cue-after: url(pop.au) @} + H1 @{ cue: url(pop.au) @} /* same as previous */ +@end example + +@node cue-after, cue, cue-before, Speech Properties +@subsubsection cue-after + +@xref{cue-before} + +@node cue, play-during, cue-after, Speech Properties +@subsubsection cue + +@xref{cue-before} + +@node play-during, speed, cue, Speech Properties +@subsubsection cue-during + +@multitable @columnfractions .2 .8 +@item Value: @tab <url> | mix | none +@item Initial: @tab mix +@item Applies to: @tab all elements +@item Inherited: @tab no +@end multitable +Similar to the cue-before and cue-after properties, this indicates sound +to be played during an element as a background (ie the sound is mixed in +with the speech). + +Examples: + +@example + BLOCKQUOTE.sad @{ cue-during: url(violins.aiff) @} +@end example + +@node speed, voice-family, play-during, Speech Properties +@subsubsection speed + +@multitable @columnfractions .2 .8 +@item Value: @tab <words-per-minute> | x-slow | slow | medium | fast | x-fast | faster | slower +@item Initial: @tab medium +@item Applies to: @tab all elements +@item Inherited: @tab yes +@end multitable + +Specifies the speaking rate. Note that both absolute and relative +keyword values are allowed (compare with @ref{font-weight}). + +@node voice-family, pitch, speed, Speech Properties +@subsubsection voice-family + +@multitable @columnfractions .2 .8 +@item Value: @tab [[<specific-voice> | <generic-voice>],]* [<specific-voice> | <generic-voice>] +@item Initial: @tab device-specific +@item Applies to: @tab all elements +@item Inherited: @tab yes +@end multitable + +The value is a prioritized list of voice family names. Generic families +are male, female, and child. + +Examples of specific voice families are: comedian, paul, lisa + +Examples + +@example + H1 @{ voice-family: announcer, male @} + P.part.romeo @{ voice-family: romeo, male @} + P.part.juliet @{ voice-family: juliet, female @} +@end example + +@node pitch, pitch-range, voice-family, Speech Properties +@subsubsection pitch + +@multitable @columnfractions .2 .8 +@end multitable + +@node pitch-range, stress, pitch, Speech Properties +@subsubsection pitch-range + +@multitable @columnfractions .2 .8 +@end multitable + +@node stress, richness, pitch-range, Speech Properties +@subsubsection stress + +@multitable @columnfractions .2 .8 +@item Value: @tab <percentage> +@item Initial: @tab medium +@item Applies to: @tab all elements +@item Inherited: @tab yes +@end multitable + +Specifies the level of stress (assertiveness or emphasis) of the +speaking voice. English is a stressed language, and different parts of a +sentence are assigned primary, secondary or tertiary stress. The value +of property 'stress' controls the amount of inflection that results from +these stress markers. + +Increasing the value of this property results in the speech being more +strongly inflected. It is in a sense dual to property 'pitch-range' and +is provided to allow developers to exploit higher-end auditory displays. + +@node richness, speak-punctuation, stress, Speech Properties +@subsubsection richness + +@multitable @columnfractions .2 .8 +@item Value: @tab <percentage> +@item Initial: @tab medium (50%) +@item Applies to: @tab all elements +@item Inherited: @tab yes +@end multitable + +Specifies the richness (brightness) of the speaking voice. Different +speech devices may require the setting of one or more device-specific +parameters to achieve this effect. + +The effect of increasing richness is to produce a voice that carries -- +reducing richness produces a soft, mellifluous voice. + +@node speak-punctuation, speak-date, richness, Speech Properties +@subsubsection speak-punctuation + +@multitable @columnfractions .2 .8 +@item Value: @tab code | none +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab yes +@end multitable + +'code' indicates that punctuation such as semicolons, braces, and so on +are to be spoken literally. The default value of 'none' means that +punctuation is not spoken but instead is rendered naturally as various +pauses. + +@node speak-date, speak-numeral, speak-punctuation, Speech Properties +@subsubsection speak-date + +@multitable @columnfractions .2 .8 +@item Value: @tab myd | dmy | ymd | none +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab no +@end multitable + +This is a hint that the element contains a date and also how that date +should be spoken. month-day-year is common in the USA, while +day-month-year is common in Europe and year-month-day is also used. + +This should really be an HTML tag not a stylesheet property, since it +gives semantic information about the content. + +@node speak-numeral, speak-time, speak-date, Speech Properties +@subsubsection speak-numeral + +@multitable @columnfractions .2 .8 +@item Value: @tab digits | continous +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab yes +@end multitable + +@node speak-time, , speak-numeral, Speech Properties +@subsubsection speak-time + +@multitable @columnfractions .2 .8 +@item Value: @tab 24 | 12 | none +@item Initial: @tab none +@item Applies to: @tab all elements +@item Inherited: @tab yes +@end multitable + +@node Units, , Properties, Stylesheets +@section Units + +@menu +* Length Units:: +* Percentage Units:: +* Color Units:: +* URLs:: +* Angle Units:: +* Time Units:: +@end menu + +@node Length Units, Percentage Units, Units, Units +@subsection Length Units + +@node Percentage Units, Color Units, Length Units, Units +@subsection Percentage Units + +@node Color Units, URLs, Percentage Units, Units +@subsection color Units + +@node URLs, Angle Units, Color Units, Units +@subsection URLs + +@node Angle Units, Time Units, URLs, Units +@subsection Angle Units + +These are the legal angle units: +@itemize @bullet +@item +deg: degrees +@item +grad +@item +rad: radians +@end itemize + +@node Time Units, , Angle Units, Units +@subsection Time Units + +These are the legal time units: + +@itemize @bullet +@item +ms: milliseconds +@item +s: seconds +@end itemize + +@node Supported URLs, MIME Support, Stylesheets, Top +@chapter Supported URLs + +::WORK:: List supported URL types, specific RFCs, etc. + +@menu +* file:: Local file access. +* ftp:: Remote file access via ftp. +* nfs:: Remote file access via NFS. +* info:: Access to the Emacs Info system. +* http/https:: @sc{http/1.0} support. +* mailto:: Sending simple electronic mail. +* news/nntp/snews:: Reading and sending Usenet news. +* rlogin/telnet/tn3270:: Legacy host connections. +* irc:: Internet Relay Chat. +* data:: Embedding the data within the URL itself. +* mailserver:: Slightly more complicated electronic mail. +* gopher:: Gopher and Gopher+. +* finger:: The old favorite. +@end menu + +@node file, ftp, Supported URLs, Supported URLs +@section file + +@node ftp, nfs, file, Supported URLs +@section ftp + +@node nfs, info, ftp, Supported URLs +@section nfs + +@node info, http/https, nfs, Supported URLs +@section info + +@node http/https, mailto, info, Supported URLs +@section http/https + +@node mailto, news/nntp/snews, http/https, Supported URLs +@section mailto + +@node news/nntp/snews, rlogin/telnet/tn3270, mailto, Supported URLs +@section news/nntp/snews + +@node rlogin/telnet/tn3270, irc, news/nntp/snews, Supported URLs +@section rlogin/telnet/tn3270 + +@node irc, data, rlogin/telnet/tn3270, Supported URLs +@section irc + +@node data, mailserver, irc, Supported URLs +@section data + +@node mailserver, gopher, data, Supported URLs +@section mailserver + +@node gopher, finger, mailserver, Supported URLs +@section gopher + +@node finger, , gopher, Supported URLs +@section finger + +@node MIME Support, Security, Supported URLs, Top +@chapter MIME Support +@sc{mime} is an emerging standard for multimedia mail. It offers a very +flexible typing mechanism. The type of a file or message is specified +in two parts, separated by a '/'. The first part is the general +category of the data (text, application, image, etc.). The second part +is the specific type of data (postscript, png, jpeg, etc.). So +@samp{text/html} specifies an @sc{html} document, whereas +@samp{image/x-xwindowdump} specifies an image of an Xwindow taken with +the @file{xwd} program. + + +This typing allows much more flexibility in naming files. @sc{http}/1.0 +servers can now send back content-type headers in response to a request, +and not have the client second-guess it based on file extensions. @sc{html} +files can now be named @file{something.png} (not a great idea, but +possible). + +@menu +* Adding MIME types based on file extensions:: How to map file + extensions onto MIME + types (e.g., @samp{.png -> + image/png)}. +* Specifying Viewers:: How to specify external and internal viewers + for files that Emacs/W3 cannot handle natively. +@end menu + +@node Adding MIME types based on file extensions, Specifying Viewers, MIME Support, MIME Support +@section Adding MIME types based on file extensions + +@vindex mm-mime-extensions +For some protocols however, it is still necessary to guess the content +of a file based on the file extension. This type of guess-work should +only be needed when accessing files via @sc{ftp}, local file access, or old +@sc{http}/0.9 servers. + +Instead of specifying how to view things twice, once based on +content-type and once based on the file extension, it is easier to map +file extensions to MIME content-types. The variable that controls this +is @code{mm-mime-extensions}. + +This variable is an assoc list of file extensions and the corresponding +MIME content-type. A sample entry looks like: @samp{(".movie" +. "video/x-sgi-movie")} This makes all files that end in @file{.movie} +(@file{foo.movie} and @file{bar.movie}) be interpreted as SGI animation +files. If a content-type is defined for the document, then this is +over-ridden. Regular expressions can @b{NOT} be used. + +@cindex mime-types file +@findex mm-parse-mimetypes +Both Mosaic and the NCSA @sc{http} daemon rely on a separate file for mapping +file extensions to MIME types. Instead of having the users of Emacs/W3 +duplicate this in lisp, this file can be parsed using the +@code{url-parse-mimetypes} function. This function is called each time +w3 is loaded. It tries to locate mimetype files in several places. If +the environment variable @code{MIMETYPES} is nonempty, then this is +assumed to specify a UNIX-like path of mimetype files (this is a colon +separated string of pathnames). If the @code{MIMETYPES} environment +variable is empty, then Emacs/W3 looks for these files: + +@enumerate +@item +@file{~/.mime-types} +@item +@file{/etc/mime-types} +@item +@file{/usr/etc/mime-types} +@item +@file{/usr/local/etc/mime-types} +@item +@file{/usr/local/www/conf/mime-types} +@end enumerate + +Each line contains information for one @sc{http} type. These types resemble +MIME types. To add new ones, use subtypes beginning with x-, such as +application/x-myprogram. Lines beginning with # are comment lines, and +suitably ignored. Each line consists of: + +type/subtype ext1 ext2 ... ext@var{n} + +type/subtype is the MIME-like type of the document. ext* is any number +of space-separated filename extensions which correspond to the MIME +type. + +@node Specifying Viewers, , Adding MIME types based on file extensions, MIME Support +@section Specifying Viewers + +Not all files look as they should when parsed as an @sc{html} document +(whitespace is stripped, paragraphs are reformatted, and lots of little +changes that make the document look unrecognizable). Files may be +passed to external programs or Emacs Lisp functions to be viewed. + +Not all files can be viewed accurately from within an Emacs session (PNG +files for example, or audio files). For this reason, the user can +specify file "viewers" based on MIME content-types. This is done with +a standard mailcap file. @xref{Mailcap Files} + +@findex mm-add-mailcap-entry +As an alternative, the function @code{mm-add-mailcap-entry} can also be +used from an appropriate hook.@xref{Hooks} This functions takes three +arguments, the major type ("@i{image}"), the minor type ("@i{png}"), and +an assoc list of information about the viewer. Please see the @sc{url} +documentation for more specific information on what this assoc list +should look like. + +@node Security, Non-Unix Operating Systems, MIME Support, Top +@chapter Security +@cindex Security +@cindex Paranoia +There are an increasing number of ways to authenticate a user to a web +service. Emacs/W3 tries to support as many as possible. Emacs/W3 +currently supports: + +@table @b +@item Basic Authentication +@cindex Security, Basic +@cindex HTTP/1.0 Authentication +@cindex Authentication, Basic +The weakest authentication available, not recommended if serious +security is necessary. This is simply a string that looks like +@samp{user:password} that has been Base64 encoded, as defined in RFC +1421. +@item Digest Authentication +@cindex Security, Digest +@cindex HTTP/1.0 Authentication +@cindex Authentication, Digest +Jeffery L. Hostetler, John Franks, Philip Hallam-Baker, Ari Luotonen, +Eric W. Sink, and Lawrence C. Stewart have an internet draft for a new +authentication mechanism. For the complete specification, please see +draft-ietf-http-digest-aa-01.txt in the nearest internet drafts +archive@footnote{One is ftp://ds.internic.net/internet-drafts}. +@item SSL Encryption +@cindex HTTP/1.0 Authentication +@cindex Secure Sockets Layer +@cindex SSL +@cindex Gag Puke Retch +@cindex Exportability +@cindex Export Restrictions +SSL is the @code{Secure Sockets Layer} interface developed by Netscape +Communications @footnote{http://www.netscape.com/}. Emacs/W3 supports +@sc{http} transfers over an SSL encrypted channel, if the appropriate files +have been installed.@xref{Installing SSL} +@end table + +@node Non-Unix Operating Systems, Speech Integration, Security, Top +@chapter Non-Unix Operating Systems +@cindex Non-Unix Operating Systems + +@menu +* VMS:: The wonderful world of VAX|AXP-VMS! +* OS/2:: The next-best thing to Unix. +* MS-DOS:: The wonderful world of MS-DOG! +* Windows:: Windows NT, Chicago/Windows 95. +@end menu + +@node VMS, OS/2, Non-Unix Operating Systems, Non-Unix Operating Systems +@section VMS +@cindex VAX-VMS +@cindex AXP-VMS +@cindex Digital VMS +@cindex VMS + +:: WORK :: VMS Specific instriuctions + +@node OS/2, MS-DOS, VMS, Non-Unix Operating Systems +@section OS/2 +@cindex OS/2 +@cindex Warp + +:: WORK :: OS/2 Specific instructions + +@node MS-DOS, Windows, OS/2, Non-Unix Operating Systems +@section MS-DOS +@cindex MS-DOS +@cindex Microsloth +@cindex DOS +@cindex MS-DOG + +:: WORK :: DOS Specific instructions + +@node Windows, , MS-DOS, Non-Unix Operating Systems +@section Windows +@cindex Windows (32-Bit) +@cindex 32-Bit Windows +@cindex Microsloth +@cindex Windows '95 + +:: WORK :: 32bit Windows Specific instructions + +@node Speech Integration, Advanced Features, Non-Unix Operating Systems, Top +@chapter Speech Integration + +:: WORK :: Emacspeak integration + +@node Advanced Features, More Help, Speech Integration, Top +@chapter Advanced Features + +@menu +* Disk Caching:: Improving performance by using a local disk cache +* Interfacing to Mail/News:: How to make VM understand hypertext links +* Debugging HTML:: How to make Emacs/W3 display warnings about invalid + @sc{html}/@sc{html}+ constructs. +* Hooks:: Various hooks to use throughout Emacs/W3 +* Other Variables:: Miscellaneous variables that control the real + guts of Emacs/W3. +@end menu + +@node Disk Caching, Interfacing to Mail/News, Advanced Features, Advanced Features +@section Disk Caching +@cindex Caching +@cindex Persistent Cache +@cindex Disk Cache + +A cache stores the information on a page on the local machine. When +requesting a page that is in the cache, Emacs/W3 can retrieve the page +from the cache more quickly than retrieving the page again from its +location out on the network. With a well-populated cache, browsing the +web is dramatically faster. + +The first time a page is requested, Emacs/W3 retrieves the page from the +network. When requesting a page that is in the cache, Emacs/W3 checks +to see if the page has changed since it was last retrieved from the +remote machine. If it has not changed, the local copy is used, saving +the transmission of the file over the network. + +@vindex url-automatic-caching +@cindex Turning on caching +@cindex Cleaning the cache +@cindex Clearing the cache +@cindex Cache cleaning +@cindex Limiting the size of the cache +To turn on disk caching, set the variable @code{url-automatic-caching} +to non-@code{nil}, or choose the 'Caching' menu item (under `Options'). +That is all there is to it. Running the @code{clean-cache} shell script +fist is recommended, to allow for future cleaning of the cache. This +shell script will remove all files that have not been accessed since it +was last run. To keep the cache pared down, it is recommended that this +script be run from @i{at} or @i{cron} (see the manual pages for +crontab(5) or at(1) for more information) + + +@cindex Relying on cache +@cindex Cache only mode +@cindex Standalone mode +@cindex Browsing with no network connection +@cindex Netless browsing +@vindex url-standalone-mode +With a large cache of documents on the local disk, it can be very handy +when traveling, or any other time the network connection is not active +(a laptop with a dial-on-demand PPP connection, etc). Emacs/W3 can rely +solely on its cache, and avoid checking to see if the page has changed +on the remote server. In the case of a dial-on-demand PPP connection, +this will keep the phone line free as long as possible, only bringing up +the PPP connection when asking for a page that is not located in the +cache. This is very useful for demonstrations as well. To turn this +feature on, set the variable @code{url-standalone-mode} to +non-@code{nil}, or choose the `Use Cache Only' menu item (under +`Options') + +@node Interfacing to Mail/News, Debugging HTML, Disk Caching, Advanced Features +@section Interfacing to Mail/News +@cindex Interfacing to Mail/News +@cindex VM +@cindex Using Emacs/W3 with VM +@cindex GNUS +@cindex Using Emacs/W3 with Gnus +@cindex RMAIL +@cindex Using Emacs/W3 with RMAIL + +More and more people are including @sc{url}s in their signatures, and within +the body of mail messages. It can get quite tedious to type these into +the minibuffer to follow one. + +@vindex browse-url-browser-function +With the latest versions of VM (the 5.9x series of betas) and Gnus +(5.x), @sc{url}s are automatically highlighted, and can be followed with the +mouse or the return key. How the @sc{url}s are viewed is determined by the +variable @code{browse-url-browser-function}, and it should be set to the +symbol @code{browse-url-w3}. + +To access @sc{url}s from within RMAIL, the following hook should do the +trick. +@example +(add-hook 'rmail-mode-hook + (function + (lambda () + (define-key rmail-mode-map [mouse-2] 'w3-maybe-follow-link-mouse) + (define-key rmail-mode-map "\r" 'w3-maybe-follow-link)))) +@end example + +@node Debugging HTML, Hooks, Interfacing to Mail/News, Advanced Features +@section Debugging HTML +@cindex Debugging +@cindex Invalid HTML +@cindex Bad HTML +@vindex w3-debug-buffer +@vindex w3-debug-html + +For those people that are adventurous, or are just as anal as I am about +people writing valid @sc{html}, set the variable @code{w3-debug-html} to +@code{t} and see what happens. + + +If a Emacs/W3 thinks it has encountered invalid @sc{html}, then a debugging +message is displayed. + +:: WORK :: Need to list the different values w3-debug-html can have, and@* +:: WORK :: what they do :: + +@node Hooks, Other Variables, Debugging HTML, Advanced Features +@section Hooks +@cindex Hooks + +These are the various hooks that can be used to customize some of +Emacs/W3's behavior. They are arranged in the order in which they would +happen when retrieving a document. These are all 'normal hooks' in +standard Emacs-terminology, meaning they are functions (or lists of +functions) that are called consecutively. + +@table @code +@vindex w3-load-hook +@item w3-load-hook +These hooks are run the first time a @sc{url} is fetched. All the +Emacs/W3 variables are initialized before this hook is run. +@item w3-mode-hook +These hooks are run after a buffer has been parsed and displayed, but +before any inlined images are downloaded and converted. +@item w3-source-file-hook +These hooks are run after displaying a document's source. +@end table + +@node Other Variables, , Hooks, Advanced Features +@section Miscellaneous variables + +There are lots of variables that control the real nitty-gritty of Emacs/W3 +that the beginning user probably shouldn't mess with. Here they are. + +@table @code +@item url-bad-port-list +@vindex url-bad-port-list +List of ports to warn the user about connecting to. Defaults to just +the mail and @sc{nntp} ports so a malicious @sc{html} author cannot spoof mail or +news to other people. +@item url-confirmation-func +@vindex url-confirmation-func +What function to use for asking yes or no functions. Possible values +are @code{'yes-or-no-p} or @code{'y-or-n-p}, or any function that takes +a single argument (the prompt), and returns @code{t} only if a positive +answer is gotten. Defaults to @code{'yes-or-no-p}. +@item w3-default-action +@vindex w3-default-action +A lisp symbol specifying what action to take for files with extensions +that are not in the @code{mm-mime-extensions} assoc list. This is +useful in case Emacs/W3 ever run across files with weird extensions +(.foo, .README, .READMEFIRST, etc.). In most circumstances, this should +not be required anymore. + +Possible values: any lisp symbol. Should be a function that takes no +arguments. The return value does not matter, it is ignored. Some examples +are @code{'w3-prepare-buffer} or @code{'indented-text-mode}. +@ignore +@item w3-icon-directory-list +@vindex w3-icon-directory-list +A list of directorys to look in for the w3 standard icons... must end +in a /! If the directory @code{data-directory}/w3 exists, then this is +automatically added to the default value of +http://cs.indiana.edu/elisp/w3/icons/. +@end ignore +@item w3-keep-old-buffers +@vindex w3-keep-old-buffers +Whether to keep old buffers around when following links. To avoid lots +of buffers in one Emacs session, set this variable to @code{nil}. I +recommend setting it to @code{t}, so that backtracking from one link to +another is faster. + +@item url-passwd-entry-func +@vindex url-passwd-entry-func +This is a symbol indicating which function to call to read in a +password. If this variable is @code{nil} at startup, it is initialized +depending on whether @dfn{EFS} or @dfn{ange-ftp} is being used. This +function should accept the prompt string as its first argument, and the +default value as its second argument. + +@item w3-reuse-buffers +@vindex w3-reuse-buffers +Determines what happens when @code{w3-fetch} is called on a document +that has already been loaded into another buffer. Possible values are: +@code{nil}, @code{yes}, and @code{no}. @code{nil} will ask the user if +Emacs/W3 should reuse the buffer (this is the default value). A value of +@code{yes} means assume the user wants to always reuse the buffer. A +value of @code{no} means assume the user always wants to re-fetch the +document. +@item w3-show-headers +@vindex w3-show-headers +This is a list of @sc{http}/1.0 headers to show at the end of a buffer. All +the headers should be in lowercase. They are inserted at the end of the +buffer in a <UL> list. Alternatively, if this is simply @code{t}, then +all the @sc{http}/1.0 headers are shown. The default value is +@code{nil}. +@item w3-show-status, url-show-status +@vindex url-show-status +@vindex w3-show-status +Whether to show progress messages in the minibuffer. +@code{w3-show-status} controls if messages about the parsing are +displayed, and @code{url-show-status} controls if a running total of the +number of bytes transferred is displayed. These Can cause a large +performance hit if using a remote X display over a slow link, or a +terminal with a slow modem. +@item mm-content-transfer-encodings +@vindex mm-content-transfer-encodings +An assoc list of @var{Content-Transfer-Encodings} or +@var{Content-Encodings} and the appropriate decoding algorithms for each. +If the @code{cdr} of a node is a list, then this specifies the decoder is +an external program, with the program as the first item in the list, and +the rest of the list specifying arguments to be passed on the command line. +If using an external decoder, it must accept its input from @code{stdin} +and send its output to @code{stdout}. + +If the @code{cdr} of a node is a symbol whose function definition is +non-@code{nil}, then that encoding can be handled internally. The function +is called with 2 arguments, buffer positions bounding the region to be +decoded. The function should completely replace that region with the +unencoded information. + +Currently supported transfer encodings are: base64, x-gzip, 7bit, 8bit, +binary, x-compress, x-hqx, and quoted-printable. +@item url-uncompressor-alist +@vindex url-uncompressor-alist +An assoc list of file extensions and the appropriate uncompression +programs for each. This is used to build the Accept-encoding header for +@sc{http}/1.0 requests. +@end table + +@node More Help, Future Directions, Advanced Features, Top +@chapter More Help +@cindex Relevant Newsgroups +@cindex Newsgroups +@cindex Support +For more help on Emacs/W3, please send me mail +(@i{wmperry@@cs.indiana.edu}). Several discussion lists have also been +created for Emacs/W3. To subscribe, send mail to +@i{majordomo@@indiana.edu}, with the body of the message 'subscribe +@var{listname} @var{<email addres>}'. All other mail should go to +@i{<listname>@@indiana.edu}. + + +@itemize @bullet +@item +w3-announce -- this list is for anyone interested in Emacs/W3, and +should in general only be used by me. The gnu.emacs.sources newsgroup +and a few other mailing lists are included on this. Please only use +this list for major package releases related to Emacs/W3. +(@i{www-announce@@w3.org} is included on this list). +@item +w3-beta -- this list is for beta testers of Emacs/W3. These brave souls test +out not-quite stable code. +@item +w3-dev -- a list consisting of myself and a few other people who are +interested in the internals of Emacs/W3, and doing active development work. +Pretty dead right now, but I hope it will grow. +@end itemize + +For more help on the World Wide Web in general, please refer to the +comp.infosystems.www.* newsgroups. There are also several discussion +lists concerning the Web. Send mail to @i{<listname>-request@@w3.org} +with a subject line of 'subscribe <listname>'. All mail should go to +@i{<listname>@@w3.org}. Administrative mail should go to +@i{www-admin@@w3.org}. The lists are: + + +@itemize @bullet +@item +www-talk -- for general discussion of the World Wide Web, where its +going, new features, etc. All the major developers are subscribed to +this list. +@item +www-announce -- for announcements concerning the World Wide Web. Server +changes, new servers, new software, etc. +@end itemize + +As a last resort, mail me. I'll try to answer as quickly as I can. + +@node Future Directions, Reporting Bugs, More Help, Top +@chapter Future Directions +Changes are constantly being made to the Emacs browser (hopefully all +for the better). This is a list of the things that are being worked on +right now. + +:: WORK :: Revamp the todo list + +@node Reporting Bugs, Dealing with Firewalls, Future Directions, Top +@appendix Reporting Bugs +@cindex Reporting Bugs +@cindex Bugs +@cindex Contacting the author + +If any bugs are discovered in Emacs/W3, please report them to the +mailing list @t{w3-beta@@indiana.edu} - this is where the brave souls +who beta test the latest versions of Emacs/W3 reside, and are generally +very responsive to bug reports. + +@kindex w +Please make sure to use the bug submission feature of Emacs/W3, so that +all relevant information will be sent along with your bug report. By +default this is bound to the `@key{w}' key when in an Emacs/W3 buffer, +or you can use @key{M-x w3-submit-bug} from anywhere within Emacs. + +For problems that are causing emacs to signal and error, please send a +backtrace. You can get a backtrace by @kbd{M-x setvariable RET +debug-on-error RET t RET}, and then reproduce the error. + +If the problem is visual, please capture a copy of the output and mail +it along with the bug report (preferably as a MIME attachment, but +anything will do). You can use the @code{xwd} program under X-windows +for this, or @key{Alt-PrintScreen} under Windows 95/NT. Sorry, but I +don't remember what the magic incarnation is for doing a screen dump +under NeXTstep or OS/2. + +If the problem is actually causing Emacs to crash, then you will need to +also mail the maintainers of the various Emacs distributions with the +bug. Please use the @t{gnu.emacs.bug} newgroup for reporting bugs with +GNU Emacs 19, and @t{comp.emacs.xemacs} for reporting bugs with XEmacs +19 or XEmacs 20. I am actively involved with the beta testing of the +latest versions of both branches of Emacs, and if I can reproduce the +problem, I will do my best to see it gets fixed in the next release. + +It is also important to always maintain as much context as possible in +your responses. I get so much email from my various Emacs-activities +and work, that I cannot remember everything. If you send a bug report, +and I send you a reply, and you reply with 'no that didn't work', then +odds are I will have no clue what didn't work, much less what that was +trying to fix in the first place. It will be much quicker and less +painful if I don't have to waste a round-trip email exchange saying +'what are you talking about'. + +@node Dealing with Firewalls, Proxy Gateways, Reporting Bugs, Top +@appendix Dealing with Firewalls +By default, Emacs can support standard @sc{tcp}/@sc{ip} network +connections on almost all the platforms it runs on (Unix, @sc{vms}, +Windows, etc). However, there are several situations where it is not +sufficient. + +@table @b +@cindex Firewalls +@item Firewalls +It is becoming more and more common to be behind a firewall or some +other system that restricts your outbound network activity, especially +if you are like me and away from the wonderful world of academia. +Emacs/W3 has several different methods to get around firewalls (not to +worry though - none of them should get you in trouble with the local +@sc{mis} department.) + +@item Emacs cannot resolve hostnames. +@cindex Faulty hostname resolvers +@cindex Broken SunOS libc +@cindex Hostname resolution +This happens quite often on SunOS workstations and some ULTRIX machines. +Some C libraries do not include the hostname resolver routines in their +static libraries. If Emacs was linked statically, and was not linked +with the resolver libraries, it wil not be able to get to any machines +off the local network. This is characterized by being able to reach +someplace with a raw ip number, but not its hostname +(@url{http://129.79.254.191/} works, but +@url{http://www.cs.indiana.edu/} doesn't). + +The best solution for this problem is to recompile Emacs, making sure to +either link dynamically (if available on your operating system), or +include the @file{-lresolv}. + +@cindex url-gateway-broken-resolution +If you do not have the disk space or the appropriate permissions to +recompile Emacs, another alternative is using the @file{nslookup} +program to do hostname resolution. To turn this on, set the variable +@code{url-gateway-broken-resolution} in your @file{~/.emacs} file. This +runs the program specified by @code{url-gateway-nslookup-program} (by +default "@code{nslookup}" to do hostname resolution. This program should +expect a single argument on the command line - the hostname to resolve, +and should produce output similar to the standard Unix @file{nslookup} +program: + +@example +Name: www.cs.indiana.ed +Address: 129.79.254.191 +@end example + +@cindex @sc{term} +@item Using @sc{term} (or @sc{term}-like) Networking Software +@sc{term} @footnote{@sc{term} is a user-level protocol for emulating +@sc{ip} over a serial line. More information is available at +@url{ftp://sunsite.unc.edu/pub/Linux/apps/comm/term}} for slip-like +access to the internet. + +@sc{note}: XEmacs and Emacs 19.22 or later have patches to enable native +@sc{term} networking. To enable it, @code{#define TERM} in the +appropriate s/*.h file for the operating system, then change the +@code{SYSTEM_LIBS} definition to include the @file{termnet} library that +comes with the latest versions of @sc{term}. + +If you run into any problems with the native @sc{term} networking +support in Emacs or XEmacs, please let @t{wmperry@@cs.indiana.edu} know, +as he is responsible for the original support. +@end table + +@vindex url-gateway-local-host-regexp +Emacs/W3 has support for using the gateway mechanism for certain +domains, and directly connecting to others. The variable +@code{url-gateway-local-host-regexp} controls this behaviour. This is a +regular expression @footnote{Please see the full Emacs distribution for +a description of regular expressions} that matches local hosts that do +not require the use of a gateway. If @code{nil}, then all connections +are made through the gateway. + +@vindex url-gateway-method +Emacs/W3 supports several methods of getting around gateways. The +variable @code{url-gateway-method} controls which of these methods is +used. This variable can have several values (use these as symbol names, +not strings), ie: @samp{(setq url-gateway-method 'telnet)}. Possible +values are: + +@table @dfn +@item telnet +Use this method if you must first telnet and log into a gateway host, +and then run telnet from that host to connect to outside machines. + +:: WORK :: document telnet gw variables@* +This section needs more information, specifically documenting the +following variables. For now, please do @key{C-h v} on the variable for +more information. + +@table @code +@item url-gateway-telnet-host +@item url-gateway-telnet-parameters +@item url-gateway-telnet-password-prompt +@item url-gateway-telnet-puser-name +@item url-gateway-prompt-pattern +@end table + +@item rlogin +This method is identical to the @code{telnet} method, but uses +@file{rlogin} to log into the remote machine without having to send the +username and password over the wire every time. + +:: WORK :: document rlogin gw variables@* +This section needs more information, specifically documenting the +following variables. For now, please do @key{C-h v} on the variable for +more information. + +@table @code +@item url-gateway-rlogin-host +@item url-gateway-rlogin-parameters +@item url-gateway-rlogin-user-name +@item url-gateway-prompt-pattern +@end table + +@item tcp +Masanobu UMEDA (@i{umerin@@mse.kyutech.ac.jp}) has written a very small +application that you can run in a subprocess to do the network +connections. + +@item @sc{socks} +Use if the firewall has a @sc{socks} gateway running on it. + +:: WORK :: document socks variables@* +This section needs more information, specifically documenting the +following variables. For now, please do @key{C-h v} on the variable for +more information. + +@table @code +@item socks-host +@item socks-password +@item socks-username +@item socks-port +@item socks-timeout +@end table + +@c @item ssl +@c This probably shouldn't be documented + +@item native +This means that Emacs/W3 should use the builtin networking code of +Emacs. This should be used only if there is no firewall, or the Emacs +source has already been hacked to get around the firewall. +@end table + +Emacs/W3 should now be able to get outside the local network. If none +of this makes sense, its probably my fault. Please check with the +network administrators to see if they have a program that does most of +this already, since somebody somewhere at the company has probably been +through something similar to this before, and would be much more +helpful/knowledgeable about the local setup than I would be. But feel +free to mail me as a last resort. + +@node Proxy Gateways, Installing SSL, Dealing with Firewalls, Top +@appendix Proxy Gateways +@vindex url-proxy-services +@cindex Proxy Servers +@cindex Proxies +@cindex Proxies, environment variables +@cindex HTTP Proxy + +In late January 1993, Kevin Altis and Lou Montulli proposed and +implemented a new proxy service. This service requires the use of +environment variables to specify a gateway server/port # to send +protocol requests to. Each protocol (@sc{http}, @sc{wais}, gopher, +@sc{ftp}, etc.) can have a different gateway server. The environment +variables are @code{PROTOCOL}_proxy, where @code{PROTOCOL} is one of the +supported network protocols (gopher, file, @sc{http}, @sc{ftp}, etc.) + +@cindex No Proxy +@cindex Proxies, exclusion lists +@vindex NO_PROXY +For companies with internal intranets, it will usually be helpful to +define a list of hosts that should be contacted directly, @b{not} sent +through the proxy. The @code{NO_PROXY} environment variable controls +what hosts are able to be contacted directly. This should be a comma +separated list of hostnames, domain names, or a mixture of both. +Asterisks can be used as a wildcard. For example: + +@example +NO_PROXY=*.aventail.com,home.com,*.seanet.com +@end example + +tells Emacs/W3 to contact all machines in the @b{aventail.com} and +@b{seanet.com} domains directly, as well as the machine named +@b{home.com}. + +@vindex url-proxy-services +@cindex Proxies, setting from lisp +For those adventurous souls who enjoy writing regular expressions, all +the proxy settings can be manipulated from Emacs-Lisp. The variable +@code{url-proxy-services} controls this. This is an assoc list, keyed +on the protocol type (@sc{http}, gopher, etc) in all lowercase. The +@code{cdr} of each entry should be the fully-specified @sc{url} of the proxy +server to contact, or, in the case of the special "no_proxy" entry, a +regular expression that matches any hostnames that should be contacted +directly. + +@example +(setq url-proxy-services '(("http" . "http://proxy.aventail.com/") + ("no_proxy" . "^.*\\(aventail\\|seanet\\)\.com"))) +@end example + +@node Installing SSL, Mailcap Files, Proxy Gateways, Top +@appendix Installing SSL +@cindex HTTP/1.0 Authentication +@cindex Secure Sockets Layer +@cindex SSL +@cindex Gag Puke Retch +@cindex Exportability +@cindex Export Restrictions +In order to use SSL in Emacs/W3, an implementation of SSL is necessary. +Emacs/W3 is configued to work out of the box with SSLeay 0.6.6 or later. +For best results, you should apply a patch that makes the SSLeay client +much quieter about what it reports. + +You can download SSLeay from +@url{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL/} + +The following variables control how the external program is invoked. + +@table @code +@item ssl-program-name +@vindex ssl-program-name +The name of the program to run, as a string. + +@example +(setq ssl-program-name "s_client") +@end example + +@item ssl-program-arguments +@vindex ssl-program-arguments +This should be used if your SSL program needs command line switches to +specify any behaviour (certificate file locations, etc). This is a list +of strings and symbols. + +The special symbols 'host and 'port may be used in the list of arguments +and will be replaced with the hostname and service/port that will be +connected to. + +@example +(setq ssl-program-arguments '("-host" host "-port" service "-verify" "4" + "-CApath /usr/local/ssl/certs")) +@end example +@end table + +@node Mailcap Files, Down with DoubleClick, Installing SSL, Top +@appendix Mailcap Files +NCSA Mosaic and almost all other WWW browsers rely on a separate file +for mapping MIME types to external viewing programs. This takes some of +the burden off of browser developers, so each browser does not have to +support all image formats, or postscript, etc. Instead of having the +users of Emacs/W3 duplicate this in lisp, this file can be parsed using +the @code{mm-parse-mailcaps} function. This function is called each +time Emacs/W3 is loaded. It tries to locate mimetype files in several +places. If the environment variable @code{MAILCAPS} is nonempty, then +this is assumed to specify a UNIX-like path of mimetype files (this is a +colon separated string of pathnames). If the @code{MAILCAPS} +environment variable is empty, then Emacs/W3 looks for these +files: + +@enumerate +@item +@file{~/.mailcap} +@item +@file{/etc/mailcap} +@item +@file{/usr/etc/mailcap} +@item +@file{/usr/local/etc/mailcap} +@end enumerate + +This format of this file is specified in RFC 1343, but a brief synopsis +follows (this is taken verbatim from sections of RFC 1343). + +Each mailcap file consists of a set of entries that describe the proper +handling of one media type at the local site. For example, one line +might tell how to display a message in Group III fax format. A mailcap +file consists of a sequence of such individual entries, separated by +newlines (according to the operating system's newline +conventions). Blank lines and lines that start with the "#" character +(ASCII 35) are considered comments, and are ignored. Long entries may +be continued on multiple lines if each non-terminal line ends with a +backslash character ('\', ASCII 92), in which case the multiple lines +are to be treated as a single mailcap entry. Note that for such +"continued" lines, the backslash must be the last character on the line +to be continued. + +Each mailcap entry consists of a number of fields, separated by +semi-colons. The first two fields are required, and must occur in the +specified order. The remaining fields are optional, and may appear in +any order. + +The first field is the content-type, which indicates the type of data +this mailcap entry describes how to handle. It is to be matched against +the type/subtype specification in the "Content-Type" header field of an +Internet mail message. If the subtype is specified as "*", it is +intended to match all subtypes of the named content-type. + +The second field, view-command, is a specification of how the message or +body part can be viewed at the local site. Although the syntax of this +field is fully specified, the semantics of program execution are +necessarily somewhat operating system dependent. + +The optional fields, which may be given in any order, are as follows: +@itemize @bullet +@item +The "compose" field may be used to specify a program that can be used to +compose a new body or body part in the given format. Its intended use +is to support mail composing agents that support the composition of +multiple types of mail using external composing agents. As with the +view- command, the semantics of program execution are operating system +dependent. The result of the composing program may be data that is not +yet suitable for mail transport---that is, a Content-Transfer-Encoding +may need to be applied to the data. +@item +The "composetyped" field is similar to the "compose" field, but is to be +used when the composing program needs to specify the Content-type header +field to be applied to the composed data. The "compose" field is +simpler, and is preferred for use with existing (non-mail-oriented) +programs for composing data in a given format. The "composetyped" field +is necessary when the Content-type information must include auxilliary +parameters, and the composition program must then know enough about mail +formats to produce output that includes the mail type +information. +@item +The "edit" field may be used to specify a program that can be used to +edit a body or body part in the given format. In many cases, it may be +identical in content to the "compose" field, and shares the +operating-system dependent semantics for program execution. +@item +The "print" field may be used to specify a program that can be used to +print a message or body part in the given format. As with the +view-command, the semantics of program execution are operating system +dependent. +@item +The "test" field may be used to test some external condition (e.g. the +machine architecture, or the window system in use) to determine whether +or not the mailcap line applies. It specifies a program to be run to +test some condition. The semantics of execution and of the value +returned by the test program are operating system dependent. If the +test fails, a subsequent mailcap entry should be sought. Multiple test +fields are not permitted---since a test can call a program, it can +already be arbitrarily complex. +@item +The "needsterminal" field indicates that the view-command must be run on +an interactive terminal. This is needed to inform window-oriented user +agents that an interactive terminal is needed. (The decision is not +left exclusively to the view-command because in some circumstances it +may not be possible for such programs to tell whether or not they are on +interactive terminals.) The needsterminal command should be assumed to +apply to the compose and edit commands, too, if they exist. Note that +this is NOT a test---it is a requirement for the environment in which +the program will be executed, and should typically cause the creation of +a terminal window when not executed on either a real terminal or a +terminal window. +@item +The "copiousoutput" field indicates that the output from the +view-command will be an extended stream of output, and is to be +interpreted as advice to the UA (User Agent mail- reading program) that +the output should be either paged or made scrollable. Note that it is +probably a mistake if needsterminal and copiousoutput are both +specified. +@item +The "description" field simply provides a textual description, +optionally quoted, that describes the type of data, to be used +optionally by mail readers that wish to describe the data before +offering to display it. +@item +The "x11-bitmap" field names a file, in X11 bitmap (xbm) format, which +points to an appropriate icon to be used to visually denote the presence +of this kind of data. +@item +Any other fields beginning with "x-" may be included for local or +mailer-specific extensions of this format. Implementations should +simply ignore all such unrecognized fields to permit such extensions, +some of which might be standardized in a future version of this +document. +@end itemize + +@node Down with DoubleClick, General Index, Mailcap Files, Top +@appendix Down with DoubleClick +:: WORK :: Document why doubleclick is evil@* +:: WORK :: Document how you can never see another ad from them again + +@node General Index, Key Index, Down with DoubleClick, Top +@appendix General Index +@printindex fn +@node Key Index, , General Index, Top +@appendix Key Index +@printindex ky +@contents +@bye