net.sf.saxon.number
Class AbstractNumberer

java.lang.Object
  extended by net.sf.saxon.number.AbstractNumberer
All Implemented Interfaces:
java.io.Serializable, Numberer
Direct Known Subclasses:
Numberer_da, Numberer_de, Numberer_en, Numberer_fr, Numberer_frBE, Numberer_it, Numberer_nl, Numberer_nlBE, Numberer_sv

public abstract class AbstractNumberer
extends java.lang.Object
implements Numberer, java.io.Serializable

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.

Author:
Michael H. Kay
See Also:
Serialized Form

Field Summary
protected static java.lang.String cyrillicLower
           
protected static java.lang.String cyrillicUpper
           
protected static java.lang.String greekLower
           
protected static java.lang.String greekUpper
           
protected static java.lang.String hebrew
           
protected static java.lang.String hiraganaA
           
protected static java.lang.String hiraganaI
           
protected static int[] kanjiDigits
           
protected static java.lang.String katakanaA
           
protected static java.lang.String katakanaI
           
protected static java.lang.String latinLower
           
protected static java.lang.String latinUpper
           
static int LOWER_CASE
           
static int TITLE_CASE
           
static int UPPER_CASE
           
protected static int[] westernDigits
           
 
Constructor Summary
AbstractNumberer()
           
 
Method Summary
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.
abstract  java.lang.String dayName(int day, int minWidth, int maxWidth)
          Get a day name or abbreviation
 java.lang.String format(long number, java.lang.String picture, int groupSize, java.lang.String groupSeparator, java.lang.String letterValue, java.lang.String ordinal)
          Format a number into a string
 java.lang.String getCalendarName(java.lang.String code)
          Get the name of a calendar
 java.lang.String getCountry()
          Get the country used by this numberer
 java.lang.String getEraName(int year)
          Get the name for an era (e.g.
 java.lang.String getOrdinalSuffixForDateTime(java.lang.String component)
          Get an ordinal suffix for a particular component of a date/time.
 java.lang.String halfDayName(int minutes, int minWidth, int maxWidth)
          Get an am/pm indicator.
abstract  java.lang.String monthName(int month, int minWidth, int maxWidth)
          Get a month name or abbreviation
protected  java.lang.String ordinalSuffix(java.lang.String ordinalParam, long number)
          Construct the ordinal suffix for a number, for example "st", "nd", "rd".
 void setCountry(java.lang.String country)
          Set the country used by this numberer (currenly used only for names of timezones)
protected  java.lang.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
protected  java.lang.String toAlphaSequence(long number, java.lang.String alphabet)
          Convert the number into an alphabetic label using a given alphabet.
abstract  java.lang.String toOrdinalWords(java.lang.String ordinalParam, long number, int wordCase)
          Show an ordinal number as English words in a requested case (for example, Twentyfirst)
static java.lang.String toRoman(long n)
          Generate a Roman numeral (in lower case)
abstract  java.lang.String toWords(long number)
          Show the number as words in title case.
 java.lang.String toWords(long number, int wordCase)
          Format a number as English words with specified case options
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

UPPER_CASE

public static final int UPPER_CASE
See Also:
Constant Field Values

LOWER_CASE

public static final int LOWER_CASE
See Also:
Constant Field Values

TITLE_CASE

public static final int TITLE_CASE
See Also:
Constant Field Values

westernDigits

protected static final int[] westernDigits

latinUpper

protected static final java.lang.String latinUpper
See Also:
Constant Field Values

latinLower

protected static final java.lang.String latinLower
See Also:
Constant Field Values

greekUpper

protected static final java.lang.String greekUpper
See Also:
Constant Field Values

greekLower

protected static final java.lang.String greekLower
See Also:
Constant Field Values

cyrillicUpper

protected static final java.lang.String cyrillicUpper
See Also:
Constant Field Values

cyrillicLower

protected static final java.lang.String cyrillicLower
See Also:
Constant Field Values

hebrew

protected static final java.lang.String hebrew
See Also:
Constant Field Values

hiraganaA

protected static final java.lang.String hiraganaA
See Also:
Constant Field Values

katakanaA

protected static final java.lang.String katakanaA
See Also:
Constant Field Values

hiraganaI

protected static final java.lang.String hiraganaI
See Also:
Constant Field Values

katakanaI

protected static final java.lang.String katakanaI
See Also:
Constant Field Values

kanjiDigits

protected static final int[] kanjiDigits
Constructor Detail

AbstractNumberer

public AbstractNumberer()
Method Detail

setCountry

public void setCountry(java.lang.String country)
Set the country used by this numberer (currenly used only for names of timezones)

Specified by:
setCountry in interface Numberer

getCountry

public java.lang.String getCountry()
Get the country used by this numberer

Specified by:
getCountry in interface Numberer

format

public java.lang.String format(long number,
                               java.lang.String picture,
                               int groupSize,
                               java.lang.String groupSeparator,
                               java.lang.String letterValue,
                               java.lang.String ordinal)
Format a number into a string

Specified by:
format in interface Numberer
Parameters:
number - The number to be formatted
picture - 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 digits
letterValue - 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
Returns:
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.

ordinalSuffix

protected java.lang.String ordinalSuffix(java.lang.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

Parameters:
ordinalParam - the value of the ordinal attribute (used in non-English language implementations)
number - the number being formatted
Returns:
the ordinal suffix to be appended to the formatted number

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.

Parameters:
number - the number to be formatted
formchar - the format character, for example 'A' for the numbering sequence A,B,C
sb - buffer to hold the result of the formatting

toAlpha

protected java.lang.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

Parameters:
number - the number to be formatted
min - the start of the Unicode codepoint range
max - the end of the Unicode codepoint range
Returns:
the formatted number

toAlphaSequence

protected java.lang.String toAlphaSequence(long number,
                                           java.lang.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, ....

Parameters:
number - the number to be formatted
alphabet - a string containing the characters to be used, for example "abc...xyz"
Returns:
the formatted number

toRoman

public static java.lang.String toRoman(long n)
Generate a Roman numeral (in lower case)

Parameters:
n - the number to be formatted
Returns:
the Roman numeral representation of the number in lower case

toWords

public abstract java.lang.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).

Parameters:
number - the number to be formatted
Returns:
the number formatted as English words

toWords

public java.lang.String toWords(long number,
                                int wordCase)
Format a number as English words with specified case options

Parameters:
number - the number to be formatted
wordCase - the required case for example UPPER_CASE, LOWER_CASE, TITLE_CASE
Returns:
the formatted number

toOrdinalWords

public abstract java.lang.String toOrdinalWords(java.lang.String ordinalParam,
                                                long number,
                                                int wordCase)
Show an ordinal number as English words in a requested case (for example, Twentyfirst)

Parameters:
ordinalParam - the value of the "ordinal" attribute as supplied by the user
number - the number to be formatted
wordCase - the required case for example UPPER_CASE, LOWER_CASE, TITLE_CASE
Returns:
the formatted number

monthName

public abstract java.lang.String monthName(int month,
                                           int minWidth,
                                           int maxWidth)
Get a month name or abbreviation

Specified by:
monthName in interface Numberer
Parameters:
month - The month number (1=January, 12=December)
minWidth - The minimum number of characters
maxWidth - The maximum number of characters

dayName

public abstract java.lang.String dayName(int day,
                                         int minWidth,
                                         int maxWidth)
Get a day name or abbreviation

Specified by:
dayName in interface Numberer
Parameters:
day - The day of the week (1=Monday, 7=Sunday)
minWidth - The minimum number of characters
maxWidth - The maximum number of characters

halfDayName

public java.lang.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).

Specified by:
halfDayName in interface Numberer
Parameters:
minutes - the minutes within the day
minWidth - minimum width of output
maxWidth - maximum width of output
Returns:
the AM or PM indicator

getOrdinalSuffixForDateTime

public java.lang.String getOrdinalSuffixForDateTime(java.lang.String component)
Get an ordinal suffix for a particular component of a date/time.

Specified by:
getOrdinalSuffixForDateTime in interface Numberer
Parameters:
component - the component specifier from a format-dateTime picture, for example "M" for the month or "D" for the day.
Returns:
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".

getEraName

public java.lang.String getEraName(int year)
Get the name for an era (e.g. "BC" or "AD")

Specified by:
getEraName in interface Numberer
Parameters:
year - the proleptic gregorian year, using "0" for the year before 1AD

getCalendarName

public java.lang.String getCalendarName(java.lang.String code)
Get the name of a calendar

Specified by:
getCalendarName in interface Numberer
Parameters:
code - The code representing the calendar as in the XSLT 2.0 spec, e.g. AD for the Gregorian calendar


Copyright (c) Saxonica Limited. All rights reserved.