[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