You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ar...@apache.org on 2001/07/08 07:03:49 UTC
cvs commit: xml-fop/src/org/apache/fop/fo/pagination PageNumberGenerator.java
arved 01/07/07 22:03:49
Added: src/org/apache/fop/fo/pagination PageNumberGenerator.java
Log:
Supports page-number formatting
Revision Changes Path
1.1 xml-fop/src/org/apache/fop/fo/pagination/PageNumberGenerator.java
Index: PageNumberGenerator.java
===================================================================
/*-- $Id: PageNumberGenerator.java,v 1.1 2001/07/08 05:03:48 arved Exp $ --
* Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
* For details on use and redistribution please refer to the
* LICENSE file included with these sources.
*/
package org.apache.fop.fo.pagination;
import org.apache.fop.fo.properties.*;
import org.apache.fop.messaging.MessageHandler;
// Java
import java.util.*;
/**
* This class uses the 'format', 'groupingSeparator', 'groupingSize',
* and 'letterValue' properties on fo:page-sequence to return a String
* corresponding to the supplied integer page number.
*/
public class PageNumberGenerator {
private String format;
private char groupingSeparator;
private int groupingSize;
private int letterValue;
//constants
private int DECIMAL = 1; // '0*1'
private int LOWERALPHA = 2; // 'a'
private int UPPERALPHA = 3; // 'A'
private int LOWERROMAN = 4; // 'i'
private int UPPERROMAN = 5; // 'I'
// flags
private int formatType = DECIMAL;
private int minPadding = 0; // for decimal formats
// preloaded strings of zeros
private String zeros[] = { "", "0", "00", "000", "0000", "00000" };
public PageNumberGenerator( String format,
char groupingSeparator, int groupingSize, int letterValue ) {
this.format = format;
this.groupingSeparator = groupingSeparator;
this.groupingSize = groupingSize;
this.letterValue = letterValue;
// the only accepted format strings are currently '0*1' 'a', 'A', 'i'
// and 'I'
int fmtLen = format.length();
if (fmtLen == 1) {
if (format.equals("1")) {
formatType = DECIMAL;
minPadding = 0;
} else if (format.equals("a")) {
formatType = LOWERALPHA;
} else if (format.equals("A")) {
formatType = UPPERALPHA;
} else if (format.equals("i")) {
formatType = LOWERROMAN;
} else if (format.equals("I")) {
formatType = UPPERROMAN;
} else {
// token not handled
MessageHandler.log("'format' token not recognized; using '1'");
formatType = DECIMAL;
minPadding = 0;
}
}
else {
// only accepted token is '0+1'at this stage. Because of the
// wonderful regular expression support in Java, we will resort to a
// loop
for (int i = 0; i < fmtLen-1; i++) {
if (format.charAt(i) != '0') {
MessageHandler.log("'format' token not recognized; using '1'");
formatType = DECIMAL;
minPadding = 0;
} else {
minPadding = fmtLen - 1;
}
}
}
}
public String makeFormattedPageNumber(int number) {
String pn = null;
if (formatType == DECIMAL) {
pn = Integer.toString(number);
if (minPadding >= pn.length()) {
int nz = minPadding - pn.length() + 1;
pn = zeros[nz] + pn;
}
} else if ((formatType == LOWERROMAN) || (formatType == UPPERROMAN)) {
pn = makeRoman(number);
if (formatType == UPPERROMAN)
pn = pn.toUpperCase();
} else {
// alphabetic
pn = makeAlpha(number);
if (formatType == UPPERALPHA)
pn = pn.toUpperCase();
}
return pn;
}
private String makeRoman( int num ) {
int arabic[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String roman[] = { "m", "cm", "d", "cd", "c", "xc", "l", "xl", "x",
"ix", "v", "iv", "i" };
int i = 0;
StringBuffer romanNumber = new StringBuffer();
while (num > 0) {
while (num >= arabic[i]) {
num = num - arabic[i];
romanNumber.append( roman[i] );
}
i = i + 1;
}
return romanNumber.toString();
}
private String makeAlpha( int num ) {
String letters = "abcdefghijklmnopqrstuvwxyz";
StringBuffer alphaNumber = new StringBuffer();
int base = 26;
int rem = 0;
num--;
if (num < base) {
alphaNumber.append(letters.charAt(num));
} else {
while (num >= base) {
rem = num % base;
alphaNumber.append(letters.charAt(rem));
num = num / base;
}
alphaNumber.append(letters.charAt(num-1));
}
return alphaNumber.reverse().toString();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org