Class AbstractNumberer is a base implementation of Numberer that provides language-independent
default numbering
This supports the xsl:number element.
Methods and data are declared as protected, and static is avoided, to allow easy subclassing.
LOWER_CASE
public static final int LOWER_CASE
TITLE_CASE
public static final int TITLE_CASE
UPPER_CASE
public static final int UPPER_CASE
cyrillicLower
protected static final String cyrillicLower
cyrillicUpper
protected static final String cyrillicUpper
greekLower
protected static final String greekLower
greekUpper
protected static final String greekUpper
hebrew
protected static final String hebrew
hiraganaA
protected static final String hiraganaA
hiraganaI
protected static final String hiraganaI
kanjiDigits
protected static final int[] kanjiDigits
katakanaA
protected static final String katakanaA
katakanaI
protected static final String katakanaI
latinLower
protected static final String latinLower
latinUpper
protected static final String latinUpper
westernDigits
protected static final int[] westernDigits
alphaDefault
protected void alphaDefault(long number,
char formchar,
FastStringBuffer sb)
Default processing with an alphabetic format token: use the contiguous
range of Unicode letters starting with that token.
number
- the number to be formattedformchar
- the format character, for example 'A' for the numbering sequence A,B,Csb
- buffer to hold the result of the formatting
dayName
public abstract String dayName(int day,
int minWidth,
int maxWidth)
Get a day name or abbreviation
- dayName in interface Numberer
day
- The day of the week (1=Monday, 7=Sunday)minWidth
- The minimum number of charactersmaxWidth
- The maximum number of characters
format
public String format(long number,
String picture,
int groupSize,
String groupSeparator,
String letterValue,
String ordinal)
Format a number into a string
- format in interface Numberer
number
- The number to be formattedpicture
- The format token. This is a single component of the format attribute
of xsl:number, e.g. "1", "01", "i", or "a"groupSize
- number of digits per group (0 implies no grouping)groupSeparator
- string to appear between groups of digitsletterValue
- The letter-value specified to xsl:number: "alphabetic" or
"traditional". Can also be an empty string or null.ordinal
- The value of the ordinal attribute specified to xsl:number
The value "yes" indicates that ordinal numbers should be used; "" or null indicates
that cardinal numbers
- the formatted number. Note that no errors are reported; if the request
is invalid, the number is formatted as if the string() function were used.
getCalendarName
public String getCalendarName(String code)
Get the name of a calendar
- getCalendarName in interface Numberer
code
- The code representing the calendar as in the XSLT 2.0 spec, e.g. AD for the Gregorian calendar
getCountry
public String getCountry()
Get the country used by this numberer
- getCountry in interface Numberer
getEraName
public String getEraName(int year)
Get the name for an era (e.g. "BC" or "AD")
- getEraName in interface Numberer
year
- the proleptic gregorian year, using "0" for the year before 1AD
getOrdinalSuffixForDateTime
public String getOrdinalSuffixForDateTime(String component)
Get an ordinal suffix for a particular component of a date/time.
- getOrdinalSuffixForDateTime in interface Numberer
component
- the component specifier from a format-dateTime picture, for
example "M" for the month or "D" for the day.
- a string that is acceptable in the ordinal attribute of xsl:number
to achieve the required ordinal representation. For example, "-e" for the day component
in German, to have the day represented as "dritte August".
halfDayName
public String halfDayName(int minutes,
int minWidth,
int maxWidth)
Get an am/pm indicator. Default implementation works for English, on the basis that some
other languages might like to copy this (most non-English countries don't actually use the
12-hour clock, so it's irrelevant).
- halfDayName in interface Numberer
minutes
- the minutes within the dayminWidth
- minimum width of outputmaxWidth
- maximum width of output
monthName
public abstract String monthName(int month,
int minWidth,
int maxWidth)
Get a month name or abbreviation
- monthName in interface Numberer
month
- The month number (1=January, 12=December)minWidth
- The minimum number of charactersmaxWidth
- The maximum number of characters
ordinalSuffix
protected String ordinalSuffix(String ordinalParam,
long number)
Construct the ordinal suffix for a number, for example "st", "nd", "rd". The default
(language-neutral) implementation returns a zero-length string
ordinalParam
- the value of the ordinal attribute (used in non-English
language implementations)number
- the number being formatted
- the ordinal suffix to be appended to the formatted number
setCountry
public void setCountry(String country)
Set the country used by this numberer (currenly used only for names of timezones)
- setCountry in interface Numberer
toAlpha
protected String toAlpha(long number,
int min,
int max)
Format the number as an alphabetic label using the alphabet consisting
of consecutive Unicode characters from min to max
number
- the number to be formattedmin
- the start of the Unicode codepoint rangemax
- the end of the Unicode codepoint range
toAlphaSequence
protected String toAlphaSequence(long number,
String alphabet)
Convert the number into an alphabetic label using a given alphabet.
For example, if the alphabet is "xyz" the sequence is x, y, z, xx, xy, xz, ....
number
- the number to be formattedalphabet
- a string containing the characters to be used, for example "abc...xyz"
toOrdinalWords
public abstract String toOrdinalWords(String ordinalParam,
long number,
int wordCase)
Show an ordinal number as English words in a requested case (for example, Twentyfirst)
ordinalParam
- the value of the "ordinal" attribute as supplied by the usernumber
- the number to be formattedwordCase
- the required case for example UPPER_CASE
,
LOWER_CASE
, TITLE_CASE
toRoman
public static String toRoman(long n)
Generate a Roman numeral (in lower case)
n
- the number to be formatted
- the Roman numeral representation of the number in lower case
toWords
public abstract String toWords(long number)
Show the number as words in title case. (We choose title case because
the result can then be converted algorithmically to lower case or upper case).
number
- the number to be formatted
- the number formatted as English words
toWords
public String toWords(long number,
int wordCase)
Format a number as English words with specified case options