You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by Arved Sandstrom <Ar...@chebucto.ns.ca> on 2000/11/13 15:06:53 UTC

Assistance from WinCVS committers requested

Pursuant to my previous posts recounting my woes with CVS, I just tried an 
anonymous pserver update with WinCVS that worked, and rather well.

An experiment that I want to try is to set up WinCVS with SSH, and try that. 
Then worst comes to worst, I can zip that up, and transfer it over to Linux 
so I can commit from there. Some of you presumably use this setup, and I was 
wondering if you could do up a little Howto. That is, I anticipate some 
aggravation. Thanks.

Can't say I'm surprised; everything is optimized for Windows to make it look 
good...

Appreciate any help.

Arved

Senior Developer
e-plicity.com (www.e-plicity.com)
Halifax, Nova Scotia
"B2B Wireless in Canada's Ocean Playground"


Re: Where I am - where I can go. Re: I wanna contribute!

Posted by Arved Sandstrom <Ar...@chebucto.ns.ca>.
At 03:12 PM 11/13/00 -0600, Robert Schmid wrote:
>
>I think Steve has a better course of action for me to get started.  I still 
>need to
>
>A) Read chapters 1-4 of the specification
>B) Learn the Apache development & Contribution process
>C) Get the latest repository to compile (having problems there.)
>D) Get to know the current code.

This is good. Particularly C. :-) What's going on there?

>The stuff Steve has laid out fits well into these areas.  On the other 
>hand, in order to work on xsl:fo compliance I think I need to learn the PDF 
>specification first, don't I?

This spec is pretty secondary. You can do lots of useful FOP work and not 
know PDF at all. It is just the primary target display format, but FOP is 
not dependent on it in any way.

>But keep the ideas and recommendations coming, I'll dive into the 
>documentation soon and catch you in a few days (weeks?).

When I pry loose the time I'll be updating our architectural/high-level 
design docs. Keep an eye peeled...

Arved

Senior Developer
e-plicity.com (www.e-plicity.com)
Halifax, Nova Scotia
"B2B Wireless in Canada's Ocean Playground"


Where I am - where I can go. Re: I wanna contribute!

Posted by Robert Schmid <ro...@fourthgen.com>.
I think Steve has a better course of action for me to get started.  I still 
need to

A) Read chapters 1-4 of the specification
B) Learn the Apache development & Contribution process
C) Get the latest repository to compile (having problems there.)
D) Get to know the current code.

The stuff Steve has laid out fits well into these areas.  On the other 
hand, in order to work on xsl:fo compliance I think I need to learn the PDF 
specification first, don't I?

But keep the ideas and recommendations coming, I'll dive into the 
documentation soon and catch you in a few days (weeks?).

At 09:55 PM 11/13/2000 +0100, you wrote:
> > I have just gotten clearance to spend work time on contributing to
> > FOP.  I'm about to go start reading everything in sight but I was hoping
> > someone would contact me and give me a little direction as to where to 
> look
> > first and what to start working on first.
>
>This is really great!
>There are many problems you could start with, my special favourite
>is hyphenation, because this is quite necessary for many languages
>with long words. But I think the best would be, if you look at the file
>STATUS in the root of the Fop distribution. The next target is basic
>conformance with xsl:fo; there are some flow objects to implement to
>get there:
>
>   fo:character
>   fo:declarations
>   fo:leader [at the moment only partially]
>   fo:multi-case
>   fo:table-and-caption
>   fo:table-header
>   fo:wrapper
>
>And there you also find a list of the properties which have to be
>implemented. Maybe something like fo:leader (which is used to
>create lines between paragraphs but also for the dots between an
>title and the page number or to create entry fields in fill-in-the-blank
>forms) is a good starting point, because it must be implemented for
>basic conformance ;-), it is rather self-contained (can you say
>that?), and the existing code gives you some ideas but has to be
>rewritten. You could start with just one property. Or fix the
>momentary status: at the moment it is a block fo, but it should be an
>inline fo.
>
>Reading tips:
>Read the documentation (all wrapped up in one pdf file, if you run
>makedoc in docs/xml-docs/, especially Arved's overview over Fop
>architecture.
>
>Here is an overview which has been sent to this group a few days
>ago and which you might find helpful.
>
>Fotis
>
>Send reply to:          fop-dev@xml.apache.org
>From:                   "Richard Huxton" <de...@archonet.com>
>To:                     <fo...@xml.apache.org>
>Subject:                Notes on FOP code
>Date sent:              Thu, 2 Nov 2000 14:14:21 -0000
>
>[ Double-click this line for list subscription options ]
>
>A Brief Introduction to FOP's code
>==================================
>
>Before reading this document
>============================
>You should have a look at docs/design/xxx.gif for some UML
>diagrams and
>docs/html-docs/architecture.html
>
>This document is a tidied copy of my notes made while looking
>through the code
>and covers much the same ground as architecture.html but from a
>slightly
>different viewpoint. I recommend flicking between the two while
>looking at the
>source.
>
>Bear in mind that not only am I not a FOP expert, I don't even
>consider myself
>as a Java programmer.
>
>If you have any comments/corrections on this you can reach me at
>dev@archonet.com
>
>- Richard Huxton 2000-10-02.
>
>
>Miscellaneous notes
>===================
>This is based on v0.14 of FOP - it will probably date very quickly.
>
>The Ant build process copies files from src/ to build/ and generates
>some .java
>files from .xml
>
>To add tracing code make sure you
>     import org.apache.fop.messaging.MessageHandler;
>at the top of a file and then use
>     MessageHandler.logln("print to STDIO");
>or
>     MessageHandler.logln("print to STDERR");
>
>
>
>What happens when you execute CommandLine
>=========================================
>Driver()
>     Create an FOTreeBuilder treeBuilder
>
>Driver.buildFOTree
>     parses the XML of the .fo document (sending SAX events to
>treeBuilder)
>
>Driver.format()
>     areaTree = new AreaTree
>     treeBuilder.format(areaTree)
>
>Driver.render()
>     renderer.render(areaTree, writer-object)
>
>
>
>Building the FO Tree
>====================
>There are a number of XXXMapping classes in fo/ that map XML
>elements and
>properties to maker() methods in the various classes. For example,
>StandardElementMapping has many calls like:
>
>     builder.addMapping(uri, "block", Block.maker());
>
>The TreeBuilder has methods such as startElement() and
>endElement() to receive
>SAX events and uses the mappings to call the relevant FO maker()
>methods.
>
>The whole FO tree ends up in rootFObj.
>
>
>
>Building the area tree (fomatting)
>==================================
>FOTreeBuilder.format(AreaTree)
>     root.format(areaTree)
>
>Root.format(AreaTree)
>     for each PageSequence p {
>         p.format(areaTree)
>     }
>
>Class Root is in the fo/pagination subtree.
>
>
>Note that staticBefore and staticAfter are class StaticContent and
>are flow
>objects wheras AreaContainer is in the layout branch.
>
>PageSequence.format(AreaTree)
>     do {
>         currentPage = makePage(areaTree)
>         this.staticBefore.layout(beforeArea);
>
>         AreaContainer afterArea = currentPage.getAfter();
>         this.staticAfter.layout(afterArea);
>
>         AreaContainer bodyArea = currentPage.getBody();
>         status = this.flow.layout(bodyArea);
>
>         areaTree.addPage(currentPage);
>     } while ( status.isIncomplete() );
>
>
>We now start to encounter fo/flow objects...
>
>Flow.layout(Area)
>     for each child FObj fo {
>         fo.layout(area)
>     }
>
>
>Now the children of the root flow-object are also flow objects and are
>such
>things as Block, BlockContainer, Table, InlineGraphic etc.
>
>Here's an example from Block - note the use of instance variable
>"marker" to
>track the position within the block. This means we can come back
>and continue
>layout if we can't complete it at the present time (run out of space in
>this
>area). BlockArea is a subclass of Area.
>
>
>Block.layout(Area)
>     if (marker==START) {
>         set a load of properties (fonts, spacing etc)
>         marker = 0
>     }
>     this.blockArea = new BlockArea(properties...)
>     for (i=marker; i<numChildren; i++) {
>         fo = child[i]
>         status = fo.layout(blockArea)
>         if (status.isIncomplete()) {
>      marker = i
>             area.addChild(blockArea)
>             return status;
>  }
>     }
>     area.addChild(blockArea)
>     return new Status(Status.OK)
>
>The Status object is used to track the results of laying out the FO
>tree. It
>indicates when layout of an object is complete/unfinished and also
>page-breaks/keep-with info.
>
>
>
>The rendering process (producing PDF)
>=====================================
>Rendering is a matter of translating the page areas into the relevant
>output
>format (PDF) - we've already done the hard work of layout.
>
>
>Gets the root of the area-tree
>For each page {
>     renderAreaContainer(before)
>     renderAreaContainer(body)
>     renderAreaContainer(after)
>}
>
>
>renderAreaContainer() {
>     for each child Box b {
>         b.render(this)
>     }
>}
>
>
>Each of the XXXArea classes in layout call the relevant renderXXX
>fn in
>PDFRenderer e.g. InlineArea.render() calls
>renderer.renderInlineArea().
>
>[END]


Re: I wanna contribute!

Posted by Fotis Jannidis <fo...@lrz.uni-muenchen.de>.
> I have just gotten clearance to spend work time on contributing to 
> FOP.  I'm about to go start reading everything in sight but I was hoping 
> someone would contact me and give me a little direction as to where to look 
> first and what to start working on first.

This is really great! 
There are many problems you could start with, my special favourite 
is hyphenation, because this is quite necessary for many languages 
with long words. But I think the best would be, if you look at the file 
STATUS in the root of the Fop distribution. The next target is basic 
conformance with xsl:fo; there are some flow objects to implement to 
get there: 

  fo:character 
  fo:declarations
  fo:leader [at the moment only partially]
  fo:multi-case 
  fo:table-and-caption 
  fo:table-header 
  fo:wrapper 

And there you also find a list of the properties which have to be 
implemented. Maybe something like fo:leader (which is used to 
create lines between paragraphs but also for the dots between an 
title and the page number or to create entry fields in fill-in-the-blank 
forms) is a good starting point, because it must be implemented for 
basic conformance ;-), it is rather self-contained (can you say 
that?), and the existing code gives you some ideas but has to be 
rewritten. You could start with just one property. Or fix the 
momentary status: at the moment it is a block fo, but it should be an 
inline fo. 

Reading tips: 
Read the documentation (all wrapped up in one pdf file, if you run 
makedoc in docs/xml-docs/, especially Arved's overview over Fop 
architecture. 

Here is an overview which has been sent to this group a few days 
ago and which you might find helpful. 

Fotis

Send reply to:  	fop-dev@xml.apache.org
From:           	"Richard Huxton" <de...@archonet.com>
To:             	<fo...@xml.apache.org>
Subject:        	Notes on FOP code
Date sent:      	Thu, 2 Nov 2000 14:14:21 -0000

[ Double-click this line for list subscription options ] 

A Brief Introduction to FOP's code
==================================

Before reading this document
============================
You should have a look at docs/design/xxx.gif for some UML 
diagrams and
docs/html-docs/architecture.html

This document is a tidied copy of my notes made while looking 
through the code
and covers much the same ground as architecture.html but from a 
slightly
different viewpoint. I recommend flicking between the two while 
looking at the
source.

Bear in mind that not only am I not a FOP expert, I don't even 
consider myself
as a Java programmer.

If you have any comments/corrections on this you can reach me at
dev@archonet.com

- Richard Huxton 2000-10-02.


Miscellaneous notes
===================
This is based on v0.14 of FOP - it will probably date very quickly.

The Ant build process copies files from src/ to build/ and generates 
some .java
files from .xml

To add tracing code make sure you
    import org.apache.fop.messaging.MessageHandler;
at the top of a file and then use
    MessageHandler.logln("print to STDIO");
or
    MessageHandler.logln("print to STDERR");



What happens when you execute CommandLine
=========================================
Driver()
    Create an FOTreeBuilder treeBuilder

Driver.buildFOTree
    parses the XML of the .fo document (sending SAX events to 
treeBuilder)

Driver.format()
    areaTree = new AreaTree
    treeBuilder.format(areaTree)

Driver.render()
    renderer.render(areaTree, writer-object)



Building the FO Tree
====================
There are a number of XXXMapping classes in fo/ that map XML 
elements and
properties to maker() methods in the various classes. For example,
StandardElementMapping has many calls like:

    builder.addMapping(uri, "block", Block.maker()); 

The TreeBuilder has methods such as startElement() and 
endElement() to receive
SAX events and uses the mappings to call the relevant FO maker() 
methods.

The whole FO tree ends up in rootFObj.



Building the area tree (fomatting)
==================================
FOTreeBuilder.format(AreaTree)
    root.format(areaTree)

Root.format(AreaTree)
    for each PageSequence p {
        p.format(areaTree)
    }

Class Root is in the fo/pagination subtree.


Note that staticBefore and staticAfter are class StaticContent and 
are flow
objects wheras AreaContainer is in the layout branch.

PageSequence.format(AreaTree)
    do {
        currentPage = makePage(areaTree)
        this.staticBefore.layout(beforeArea);

        AreaContainer afterArea = currentPage.getAfter();
        this.staticAfter.layout(afterArea);

        AreaContainer bodyArea = currentPage.getBody();
        status = this.flow.layout(bodyArea);

        areaTree.addPage(currentPage);
    } while ( status.isIncomplete() );


We now start to encounter fo/flow objects...

Flow.layout(Area)
    for each child FObj fo {
        fo.layout(area)
    }


Now the children of the root flow-object are also flow objects and are 
such
things as Block, BlockContainer, Table, InlineGraphic etc.

Here's an example from Block - note the use of instance variable 
"marker" to
track the position within the block. This means we can come back 
and continue
layout if we can't complete it at the present time (run out of space in 
this
area). BlockArea is a subclass of Area.


Block.layout(Area)
    if (marker==START) {
        set a load of properties (fonts, spacing etc)
        marker = 0
    }
    this.blockArea = new BlockArea(properties...)
    for (i=marker; i<numChildren; i++) {
        fo = child[i]
        status = fo.layout(blockArea)
        if (status.isIncomplete()) {
     marker = i
            area.addChild(blockArea)
            return status;
 }
    }
    area.addChild(blockArea)
    return new Status(Status.OK)

The Status object is used to track the results of laying out the FO 
tree. It
indicates when layout of an object is complete/unfinished and also
page-breaks/keep-with info.



The rendering process (producing PDF)
=====================================
Rendering is a matter of translating the page areas into the relevant 
output
format (PDF) - we've already done the hard work of layout.


Gets the root of the area-tree
For each page {
    renderAreaContainer(before)
    renderAreaContainer(body)
    renderAreaContainer(after)
}


renderAreaContainer() {
    for each child Box b {
        b.render(this)
    }
}   


Each of the XXXArea classes in layout call the relevant renderXXX 
fn in
PDFRenderer e.g. InlineArea.render() calls 
renderer.renderInlineArea().

[END]


I wanna contribute!

Posted by Robert Schmid <ro...@fourthgen.com>.
I have just gotten clearance to spend work time on contributing to 
FOP.  I'm about to go start reading everything in sight but I was hoping 
someone would contact me and give me a little direction as to where to look 
first and what to start working on first.


Re: Assistance from WinCVS committers requested

Posted by Ar...@chebucto.ns.ca.
Quoting Kelly Campbell <ca...@camk.net>:

> Arved,
> 
> What version of cvs are you using? I just checked, and I have 1.10.8 on 
> linux, but I know there's a 1.11 out. Maybe an upgrade would help? Also, 
> if you're using ssh, what version of that do you have?

Well, whatever was current for both as of about 6-9 months ago. The combo has 
served adequately until this month, and it's not like it it's not working - 
it's very much a performance problem somewhere on the network.

An upgrade is in the cards JIC; I obtained ssh-2.3.0 and cvs-1.11.1 earlier 
today, and I'lll install them later. I'll reserve judgment until I see what 
that does. :-)

And I'm still going to try SSH with WinCVS, to cover all the bases.

Arved


---------------------------------------------------------------
 This mail was sent through the Nova Scotia Provincial Server, 
 with technical resources provided by Chebucto Community Net.
 http://nsaccess.ns.ca/mail/         http://www.chebucto.ns.ca/


Re: Assistance from WinCVS committers requested

Posted by Kelly Campbell <ca...@camk.net>.
Arved,

What version of cvs are you using? I just checked, and I have 1.10.8 on 
linux, but I know there's a 1.11 out. Maybe an upgrade would help? Also, 
if you're using ssh, what version of that do you have?

-Kelly

On Mon, Nov 13, 2000 at 10:06:53AM -0400, Arved Sandstrom wrote:
> Pursuant to my previous posts recounting my woes with CVS, I just tried an 
> anonymous pserver update with WinCVS that worked, and rather well.
> 
> An experiment that I want to try is to set up WinCVS with SSH, and try that. 
> Then worst comes to worst, I can zip that up, and transfer it over to Linux 
> so I can commit from there. Some of you presumably use this setup, and I was 
> wondering if you could do up a little Howto. That is, I anticipate some 
> aggravation. Thanks.
> 
> Can't say I'm surprised; everything is optimized for Windows to make it look 
> good...
> 
> Appreciate any help.
> 
> Arved
> 
> Senior Developer
> e-plicity.com (www.e-plicity.com)
> Halifax, Nova Scotia
> "B2B Wireless in Canada's Ocean Playground"

-- 
Kelly A. Campbell                        Software Engineer
camk@channelpoint.com                    Channelpoint, Inc.
camk@camk.net  camk@merlotxml.org        Colorado Springs, Co.

Re: Assistance from WinCVS committers requested

Posted by Fotis Jannidis <fo...@lrz.uni-muenchen.de>.
> Some of you presumably use this setup, and I was 
> wondering if you could do up a little Howto. 

I am using wincvs 1.1b7 which uses cvs 1.10.6 
With the exception of ssh every works as standard installation has 
set it up. 
A step by step description how to setup wincvs with ssh can be 
found here: http://www.wincvs.org/ssh.html
If I remember correctly I did all exectly as described here and it 
worked. 
If you need information on any special settings, please ask.

Good luck. 

Fotis




Re: Assistance from WinCVS committers requested

Posted by Arved Sandstrom <Ar...@chebucto.ns.ca>.
At 09:56 PM 11/13/00 +0100, you wrote:
>In article <Pi...@my.nada.kth.se>,
>=?ISO-8859-1?Q?Mikael_St=E5ldal?= <d9...@nada.kth.se> wrote:
>
>>However, you also need a command line SSH client (most SSH clients for Win32
>>are GUI and doesn't work with CVS). I found a working command line
>>SSH client for Win32 on some strange place which I currently don't
>>remember, but I can look it up later today.
>
>It's at ftp://ftp.cs.hut.fi/pub/ssh-old/contrib/

Thanks, Mikael. I grabbed everything under the sun (latest versions of CVS 
and SSH) for both Win32 and Linux yesterday, so next couple of days I'll see 
what's up.

I even went so far as to remedy some gaps in my knowledge by picking up a 
really good book: Linux System Security, Mann & Mitchell, Prentice-Hall, 
2000. 56 (yes, fifty-six) pages on just SSH, with copious examples... Drool. 
:-)

Arved

Senior Developer
e-plicity.com (www.e-plicity.com)
Halifax, Nova Scotia
"B2B Wireless in Canada's Ocean Playground"


Re: Assistance from WinCVS committers requested

Posted by Mikael St�ldal <mi...@ingen.reklam.staldal.nu>.
In article <Pi...@my.nada.kth.se>,
=?ISO-8859-1?Q?Mikael_St=E5ldal?= <d9...@nada.kth.se> wrote:

>However, you also need a command line SSH client (most SSH clients for Win32
>are GUI and doesn't work with CVS). I found a working command line
>SSH client for Win32 on some strange place which I currently don't
>remember, but I can look it up later today.

It's at ftp://ftp.cs.hut.fi/pub/ssh-old/contrib/

Re: Assistance from WinCVS committers requested

Posted by Mikael Ståldal <d9...@d.kth.se>.
On Mon, 13 Nov 2000, Arved Sandstrom wrote:

> An experiment that I want to try is to set up WinCVS with SSH, and try that.

I have never tried WinCVS with SSH. However, I have successfully used
the standard command line CVS client for Win32 (which you can
download from www.cvshome.org) with SSH.

However, you also need a command line SSH client (most SSH clients for Win32
are GUI and doesn't work with CVS). I found a working command line
SSH client for Win32 on some strange place which I currently don't
remember, but I can look it up later today.

When you have these programs you set the CVS_RSH environment variable
to point to the ssh.exe executable and use the SSH config file to
ensure that EscapeChar is disabled. Then just use the :ext: method in
CVSROOT.