Use third party software such as tidy5 to parse html and turn it into a tree
of objects. First pass we do this in parallel with what we are doing now,
not disturbing what is running.
Once we are confident in the resulting tree, we understand it and it
faithfully represents the html, we can take the next step.

Traverse the resulting html tree to build the corresponding js objects.
This replaces our current mechanism to create these objects,
which happens as each html tag is encountered.
Acting on the new tree, all js objects will be created,
including text and comment objects, and all html attributes
foo=bar will appear as members of the corresponging js object.

Build a complete set of js methods for the various objects and the framework overall.
We might need to emulate one of the browsers,
since they have their own particular quirks.
Don't know if we can have every method in every browser.

Render the text buffer from the js objects instead of from the html tags.
If js code restructures the objects, or adds new objects,
we can just render the buffer again.
Right now we have no such capability, except when js rebuilds
a dropdown list for a fill out form,
because that happens a lot and I just couldn't live without that dynamic capability.

What is the best way to handle frames?
They probably have to come inline, which means one text buffer
is partitioned into sections, each section from a different url.
We already support <base> tags within the html stream,
so that might do what we need.
But how does this work with the js compartments?
Much thought and research is needed here.

Is mozjs still the best js engine to use?

<form ... onclick= ... > what is that?

why is there an extra blank line after preformatted sections?

Iimproper html uses &nbsp: instead of &nbsp;  should we watch for this?
Of course if we pass html off to tidy5 we will have less control over such things.

document.myFlash  what is this.

makeIt('1','IE')

Don't recognize any of these yet:
window.screenLeft window.screenTop window.screenX window.screenY window.outerWidth window.outerHeight

onload and onunload in body seem to run under document, not the body subobject

what does all.tags("object") mean?

This is not implemented, but might be the same as readonly?
<input disabled>

Let the re command put in an account: directive
when it sets up the headers for your reply.
So you are sending it from the same email account it was sent to.

Build a structure of messages and folders when you connect to an imap server.

Read emails from the imap server and dispatch them using the same pop3 routine,
or delete them or move them among folders.

If edbrowse is started via an ebpager symlink, it should run in
"pager" mode.  Think of all the Unix commands which use a pager.
For instance, wouldn't it be nice to read manpages with edbrowse, instead
of the default "less"?
Grep commandline archives for ebpager to get the implementation ideas.

edbrowse should be able to automatically uncompress .gz and .bz2 files.
For that matter, it would be nice to be able to browse tar and zip archives,
as though they were directories.  You can do that in emacs, and it's useful.
Can this be done via plugins or do we need dedicated code?

It should be possible to apply Unix filters to edbrowse buffers.
Let's call this the !| command.
!| foo does the following:
* write the current buffer to tempfile1,
* Call foo < tempfile1 > tempfile2,
* Read tempfile2, clobbering the buffer.

Allow username and password to be included in an edbrowse script
as if they were typed in, for authorization websites.

There is currently no way to select multiple files in directory mode,
like you can in most graphical file managers.
Perhaps km is special, marking multiple lines.
0km would clear the marks.
'mp would print the lines selected.
'm!mv '. /somewhere/else
might move all the chosen files to another directory.
So you could do things with all the lines, or if in directory mode,
with all the files.
Or in imap mode, with all those emails.
Not sure about this one.

Spreadsheet mode - this is much like database mode.
Read in a spreadsheet as a table.
Modify a cell with a simple substitute command.
Unlike odbc, the change is local, until you write the file back out.
Could also have table directives in .ebrc to look at only certain columns in the spreadsheet,
because some of these, like tables, have hundreds of columns
and are just unmanageable unless you slice them.

Lots of html tags are multimedia and we just don't recognize them as such.
http://birdweb.org/birdweb/audiosource
Click on the screech owl and the raw html contains this,
which if it were rendered properly I could just click and hear the owl.
<object id='sound_button' type='application/x-shockwave-flash' data='http://birdweb.org/birdweb/sounds/musicplayer.swf?&song_url=http://birdweb.org/BIRDWEB/sounds/WESO01.mp3&b_bgcolor=ede9da&b_fgcolor=43683a&' width='19' height='17'>
<param name='movie' value='http://birdweb.org/birdweb/sounds/musicplayer.swf?&song_url=http://birdweb.org/BIRDWEB/sounds/WESO01.mp3&b_bgcolor=ede9da&b_fgcolor=43683a&' />
<param name='wmode' value='transparent' />
<img src='http://birdweb.org/BIRDWEB/web_images/noflash.gif' width='19' height='17' alt='' />
</object>

