[prev in list] [next in list] [prev in thread] [next in thread]
List: koffice-devel
Subject: Re: [RFC] filter redesign
From: Thomas Zander <zander () planescape ! com>
Date: 2001-09-10 19:08:56
[Download RAW message or body]
On Mon, Sep 10, 2001 at 02:16:12PM +0200, Eva Brucherseifer wrote:
>
> Hi,
Hi Eva!
> At work I had a similar problem and finally found a wonderful solution \
> from the design patterns, that might suit here too. It is the builder \
> patterns, which consists of 2 parts: the director and the builder.
>
> director:
> The director parses the input and extracts the tasks to do in order to \
> build a document in another format. It doesn't have any knowledge about \
> how to perform the tasks.
This fits perfectly for the HTML export of kspread and kword, yes. One \
director per application (maybe inhariting a basic implementation) looks \
very good to me!
> builder:
> The builder puts the output format together. It has an interface that
> provides methods for sub-tasks. These are called by the director. It \
> doesn't have any knowledge about the input format.
>
> So how does this look like for the html export filter? You have the \
> builder that can set together a html page. Here is a rough sketch of a \
> html builder class:
>
> class KHTMLBuilder : public KOfficeBuilder
> {
> public:
> virtual void buildDocument(...); // initialization
> virtual void buildHeader(...);
virtual void addHeader(QString name, QString value); // sets author stuff, \
known meta tags are converted.
> virtual buildFooter(...);
> virtual buildParagraph(...);
> virtual buildTable(...);
don't forget that this method needs a created paragraph as an argument. \
(actually an ID, see below)
> virtual buildTableRow(...);
> virtual HTMLDocument* getHTML();
> }
>
> The HTMLDocument can be another internal structure than easily can be \
> parsed afterwards or a string (or you add another function \
> "getString()").
<snip>
> But would imply, that there is some kind of "general
> document structure", that is implemented in the builder interface - don't \
> know, if this is possible...
The builder has as many methods as needed to provide all the functionality \
of the export filter, this is inharent to the pattern.
If you make a method like buildTable have an paragraphId as argument, and \
also use the paragraphId on creating the paragraph itself, then the \
elements dont have to be called in the same order as they are presented in \
the output file.
Consider the following;
int parag=1;
myBuilder.buildParagraph(parag++); // create parag 1
myBuilder.buildParagraph(parag++); // create parag 2
int table=1;
myBuilder.buildTable(1,table); // create table 1 in parag 1
int row=1;
myBuilder.buildTableRow(table,row++); // create tableRow 1 in table 1
myBuilder.buildTableRow(table,row); // create tableRow 2 in table 1
myBuilder.buildTableCell(table,row,1,3,4); // create tableCell 1 in \
table 1 in row 2, table cell has width=4 height=3
This simply builds the HTML in a internal structure inside the builder, \
calling this in another order does not make to much of a difference, as \
long as something is created before you use it. I don't think you will find \
to many problems with document structures if you do it like this.
> Well, any comments are welcome.
>
I think this is a very nice addition, and maybe you can check with Frank \
what he has allready then the solve will form itself.
ps. Frank has posted his source on:
http://www.student.kuleuven.ac.be/~m9823990/html2kwd.tbz2
--
Thomas Zander \
zander@earthling.net The only thing worse than failure is the fear of \
trying something new
[Attachment #3 (application/pgp-signature)]
_______________________________________________
Koffice-devel mailing list
Koffice-devel@mail.kde.org
http://mail.kde.org/mailman/listinfo/koffice-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic