Package net.sf.saxon.expr.number
Class AbstractNumberer
java.lang.Object
net.sf.saxon.expr.number.AbstractNumberer
- All Implemented Interfaces:
Serializable
,Numberer
- Direct Known Subclasses:
Numberer_da
,Numberer_de
,Numberer_en
,Numberer_fr
,Numberer_frBE
,Numberer_it
,Numberer_nl
,Numberer_nlBE
,Numberer_sv
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:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final String
protected static final String
protected static final String
protected static final String
protected static final String
protected static final String
protected static final String
protected static final String
protected static final String
protected static final String
protected static final String
static final int
static final int
static final int
protected static final int[]
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected 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 String
dayName
(int day, int minWidth, int maxWidth) Get a day name or abbreviationfinal String
format
(long number, String picture, int groupSize, String groupSeparator, String letterValue, String ordinal) Format a number into a string.format
(long number, String picture, NumericGroupFormatter numGroupFormatter, String letterValue, String ordinal) Format a number into a stringgetCalendarName
(String code) Get the name of a calendarGet the country used by this numberer.getEraName
(int year) Get the name for an era (e.g.getOrdinalSuffixForDateTime
(String component) Get an ordinal suffix for a particular component of a date/time.halfDayName
(int minutes, int minWidth, int maxWidth) Get an am/pm indicator.abstract String
monthName
(int month, int minWidth, int maxWidth) Get a month name or abbreviationprotected String
ordinalSuffix
(String ordinalParam, long number) Construct the ordinal suffix for a number, for example "st", "nd", "rd".void
setCountry
(String country) Set the country used by this numberer (currenly used only for names of timezones)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 maxprotected String
toAlphaSequence
(long number, String alphabet) Convert the number into an alphabetic label using a given alphabet.toJapanese
(long number) Format the number in Japanese.abstract String
toOrdinalWords
(String ordinalParam, long number, int wordCase) Show an ordinal number as English words in a requested case (for example, Twentyfirst)static String
toRoman
(long n) Generate a Roman numeral (in lower case)abstract String
toWords
(long number) Show the number as words in title case.toWords
(long number, int wordCase) Format a number as English words with specified case options
-
Field Details
-
UPPER_CASE
public static final int UPPER_CASE- See Also:
-
LOWER_CASE
public static final int LOWER_CASE- See Also:
-
TITLE_CASE
public static final int TITLE_CASE- See Also:
-
westernDigits
protected static final int[] westernDigits -
latinUpper
- See Also:
-
latinLower
- See Also:
-
greekUpper
- See Also:
-
greekLower
- See Also:
-
cyrillicUpper
- See Also:
-
cyrillicLower
- See Also:
-
hebrew
- See Also:
-
hiraganaA
- See Also:
-
katakanaA
- See Also:
-
hiraganaI
- See Also:
-
katakanaI
- See Also:
-
-
Constructor Details
-
AbstractNumberer
public AbstractNumberer()
-
-
Method Details
-
setCountry
Set the country used by this numberer (currenly used only for names of timezones)- Specified by:
setCountry
in interfaceNumberer
- Parameters:
country
- The ISO two-letter country code.
-
getCountry
Get the country used by this numberer.- Specified by:
getCountry
in interfaceNumberer
- Returns:
- the country used by this numberer, or null if no country has been set
-
format
public final String format(long number, String picture, int groupSize, String groupSeparator, String letterValue, String ordinal) Format a number into a string. This method is provided for backwards compatibility. It merely calls the other format method after constructing a RegularGroupFormatter. The method is final; localization subclasses should implement the methodformat(long, String, NumericGroupFormatter, String, String)
rather than this method.- Specified by:
format
in interfaceNumberer
- Parameters:
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- 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.
-
format
public String format(long number, String picture, NumericGroupFormatter numGroupFormatter, String letterValue, String ordinal) Format a number into a string- Specified by:
format
in interfaceNumberer
- Parameters:
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"numGroupFormatter
- object contains separators 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- 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
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
Default processing with an alphabetic format token: use the contiguous range of Unicode letters starting with that token.- Parameters:
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
-
toAlpha
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 formattedmin
- the start of the Unicode codepoint rangemax
- the end of the Unicode codepoint range- Returns:
- the formatted number
-
toAlphaSequence
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 formattedalphabet
- a string containing the characters to be used, for example "abc...xyz"- Returns:
- the formatted number
-
toRoman
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
-
toJapanese
Format the number in Japanese.- Parameters:
number
- the number to be formatted: formatted in Western decimal style unless in the range 1 to 9999- Returns:
- the Japanese Kanji representation of the number if in the range 1-9999
-
toWords
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
Format a number as English words with specified case options- Parameters:
number
- the number to be formattedwordCase
- the required case for exampleUPPER_CASE
,LOWER_CASE
,TITLE_CASE
- Returns:
- the formatted number
-
toOrdinalWords
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 usernumber
- the number to be formattedwordCase
- the required case for exampleUPPER_CASE
,LOWER_CASE
,TITLE_CASE
- Returns:
- the formatted number
-
monthName
Get a month name or abbreviation -
dayName
Get a day name or abbreviation -
halfDayName
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 interfaceNumberer
- Parameters:
minutes
- the minutes within the dayminWidth
- minimum width of outputmaxWidth
- maximum width of output- Returns:
- the AM or PM indicator
-
getOrdinalSuffixForDateTime
Get an ordinal suffix for a particular component of a date/time.- Specified by:
getOrdinalSuffixForDateTime
in interfaceNumberer
- 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
Get the name for an era (e.g. "BC" or "AD")- Specified by:
getEraName
in interfaceNumberer
- Parameters:
year
- the proleptic gregorian year, using "0" for the year before 1AD- Returns:
- the name of the era, for example "AD"
-
getCalendarName
Get the name of a calendar- Specified by:
getCalendarName
in interfaceNumberer
- Parameters:
code
- The code representing the calendar as in the XSLT 2.0 spec, e.g. AD for the Gregorian calendar- Returns:
- the name of the calendar, for example "AD"
-