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.