Miller, Iain wrote:
Hi,Some thoughts on the problems with leader processing.
[..]
Here's some ideas:Thanks for your analysis!
If there's a leader in a line, then make the InlineSpaces non resizable, and make the WordArea that was generated by the leader resizable (or expand LeaderArea to cover all leaders, not just the rules).
I managed to workaround bug #15936 with making all InlineSpaces non resizable if a LineArea contains a leader. This renders leader.fo a bit different (but IMHO barely recognizable).
(ugly hack attached)
I hope someone else will have a look at this, if not I will commit it and do the release.
Christian
? lib/jimi-1.0.jar
Index: src/org/apache/fop/layout/LineArea.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/layout/Attic/LineArea.java,v
retrieving revision 1.53.2.12
diff -u -r1.53.2.12 LineArea.java
--- src/org/apache/fop/layout/LineArea.java 11 Jan 2003 18:43:04 -0000
1.53.2.12
+++ src/org/apache/fop/layout/LineArea.java 28 Jan 2003 20:37:29 -0000
@@ -100,11 +100,17 @@
protected boolean prevOlState = false;
protected boolean prevLTState = false;
+ // workaround for bug #15936
+ private boolean containsLeader = false;
+
public LineArea(FontState fontState, int lineHeight, int halfLeading,
int allocationWidth, int startIndent, int endIndent,
LineArea prevLineArea) {
super(fontState);
+ // workaround for bug #15936
+ containsLeader = false;
+
this.currentFontState = fontState;
this.lineHeight = lineHeight;
this.nominalFontSize = fontState.getFontSize();
@@ -574,6 +580,19 @@
int leaderLengthOptimum, int leaderLengthMaximum,
int ruleStyle, int ruleThickness,
int leaderPatternWidth, int leaderAlignment) {
+
+ // workaround for bug #15936
+ containsLeader = true;
+ // make InlineSpaces non-resizeable if Linearea contains a leader
+ for (int i = 0; i < children.size(); i++ ) {
+ Box b = (Box)children.get(i);
+ if (b instanceof InlineSpace) {
+ InlineSpace space = (InlineSpace)b;
+ space.setResizeable(false);
+ }
+ }
+
+
WordArea leaderPatternArea;
int leaderLength = 0;
char dot = '.';
@@ -1065,6 +1084,13 @@
}
public void addInlineSpace(InlineSpace is, int spaceWidth) {
+
+ // workaround for bug #15936
+ // make InlineSpaces non-resizeable if Linearea contains a leader
+ if (containsLeader) {
+ is.setResizeable(false);
+ }
+
addChild(is);
finalWidth += spaceWidth;
// spaceWidth = 0;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]
