IntegraWorks - My (unrealistically big) idea for a program
Brief description
This program is a plug-in based word processor. You can embed equations
in your text, without having to switch to an equation editor. You can
include spreadsheet results, commutative diagrams (math), pictures, movies,
etc., etc. The possibilites are just about endless, because each feature
will be implemented in a separate plug-in. Plug-ins can be written by any
developer, not just the authors of IntegraWorks.
Another good reason for using plug-in technology is nesting. For example,
a math equation can be inside a commutative diagram, which in turn is
embedded in your document's text. Another example would be a math graph,
which can contain equations in its heading and axis labels.
OK, so I have a bias towards math!! But there are lots of other examples
of nesting too.
Just imagine it! A word-processing program that handles just about anything!
Similarities with other programs
As I envision this program, it will have similarities to a number of products
currently available, but this program will combine them into a
"conceptually integrated" program (to use Fred Brooks' terminology).
This program will combine the best features of three programs that are
known to me: TeX, Microsoft Word, and Claris Works 3.0.
TeX:
- It will have TeX's paragraph formatting algorithm. This looks ahead
to try to minimize any ugly paragraph formatting, rather than working
out the length of each line one at a time.
- This algorithm also includes a procedure for automatic hyphenation
on a more general level than just English (although probably not
general enough for all languages).
- It will allow you to insert mathematical formulae into the text
with the same ease as TeX. It should all be able to be done using
the keyboard, similar to how the $ symbol starts and stops the formula in TeX.
Microsoft Word
- Microsoft Word has "objects", such as formulae, graphs,
and drawings, which you can insert into the document.
Double-clicking on an object switches you to the appropriate editor
so you can edit it. I propose to have similar embedded objects, but
switching editors will be lightning quick, and automatic
(no double-clicking).
- As in Microsoft Word, you will see text laid out on the page
immediately as you type. However, in IntegraWorks you will see
ANY type of data appear on the page as you type. Microsoft Word
only does this with text.
ClarisWorks
- ClarisWorks 3 has the ability to include spreadsheets and paintings
inside your text document. Switching between text and spreadsheet/paint
modes is automatic, very similar to what I propose. In Claris Works 4,
this concept has been formalized to "Frames". Here you have to click
twice to switch editors and you can only create, not edit, paintings.
The extra click in version 4 does have its merits -
the first click selects the entire object so that it can be
deleted in its entirety.
Every imaginable plug-in
I propose many different types of object editors. Here is a list of
objects that I have thought of. This will give you an idea as to how
wide a range of objects is possible - my list is a mere beginning!
- Text. You might not at first think of ordinary plain text
as being an object, but it is!
- Mathematical formula. Very similar to the editor that
comes with Microsoft Word.
- Mathematical graph. Type in an equation, and it will
be graphed! You can label and number axes, specify domain and range,
and add asymptotes, points, and labels.
- Statistical graph. Give it some data, and it will produce a
histogram, pie-chart, or 3-dimensional plot.
- MacDraw-style drawing. You can draw lines, arrows,
Bezier curves, (circular) arcs, and rectangles, and if desired fill
them with patterns. You will also be able to add other objects
inside the picture, such as text or formulae.
- MacPaint-style painting. You can draw a picture with
an e-paintbrush using the mouse. Instead of being stored as lines
and curves as with a drawing, a painting is stored as pixels.
- Spreadsheet. Add a spreadsheet to your document! This
would be a handy way to add a table, but would also allow you to
do calculations.
- Sheet music editor. (This is a biggie!) Any sheet
music, whether a simple tune on a single staff, or a full-blown score.
For songs, you can add words underneath the notes,
or chord names or guitar fret diagrams above the notes.
- Chord name editor. This would be useful to insert inside a piece
of sheet music. You can create chords such as Ab-sus7 (where b=flat).
- Guitar fret editor. This would produce a little diagram showing
finger placement on a guitar, as well as showing open strings, stopped
strings, and capo or Barre chord position.
- Japanese text editor. Or any other non-Roman language.
- IPA editor. Phonetic pronunciation can be added to your
document using an International Phonetic Alphabet object.
- ... and many others.
But actually the list doesn't stop there. Lots of other features
can be implemented as objects - many you wouldn't think of as
objects at first.
- Text block. A text block object is what does the
line-wrapping. A normal document would consist of one large
text block, with other objects (eg. a text object) inside it.
- Multi-column block. Multiple columns would be implemented
as multi-column block, with a text object (or whatever) inside it.
- Vertical text block. This would be useful for writing
Japanese text in traditional vertical layout.
Implementation
I would implement this in parts as follows:
- the "driving engine" of the program which is the line-breaking
and page-breaking algorithm (taken from TeX, whose (ugly) source
is in the public domain),
- the "user-interface engine" which takes the user's input, and
displays the stuff in WYSIWYG form, and
- the plug-in modules, which would send/receive information to/from
the two "engines" when requested.
Each type of object the user can create (eg text, diagram etc) will
be implemented in a separate plug-in module.
Having the line-breaking "engine" separate from the text module
means that other objects such as formulae can also be broken across
lines if that is appropriate.
I would use C++ for this, since speed is essential, and the task is well
suited to object programming. I would start off doing it for the Mac,
but when it is working there, I would port it to Windows 2000
(yeah, I assume that the new century will be in before I'm anywhere near done!).
The code for each type of embedded object should ideally be in a separate
plug-in file, so that new types of objects can be created by other
software developers. The C++ interface for writing object editors should
be well documented, so that it is easy for developers to write these.
Click here to go to my Computing Web-Page
Last updated: Sept 22, 1998