indexing
description: "Formatter for integral numbers"
names: format_integer
class interface
FORMAT_INTEGER
create
make (w: INTEGER)
require
reasonable_field: w >= 1
ensure
blank_fill: fill_character = ' ';
show_sign_negative: show_sign_negative;
no_separator: no_separator;
width_set: width = w;
right_justified: right_justified;
leading_sign: leading_sign
feature -- Initialization
make (w: INTEGER)
require
reasonable_field: w >= 1
ensure
blank_fill: fill_character = ' ';
show_sign_negative: show_sign_negative;
no_separator: no_separator;
width_set: width = w;
right_justified: right_justified;
leading_sign: leading_sign
feature -- Access
bracketted_negative: BOOLEAN
-- Enclose negative numbers in brackets?
fill_character: CHARACTER
-- Padding character.
justification: INTEGER
-- Where in the field the format goes.
separator: CHARACTER
-- Separator between 1000's of numbers.
sign_format: INTEGER
-- How the sign is formatted.
sign_string: STRING
-- Formatting details for the sign.
trailing_sign: BOOLEAN
-- Is the sign at the end?
width: INTEGER
-- Width of the field.
feature -- Status report
centered: BOOLEAN
-- Are numbers to be formatted centered?
ensure
Result = (justification = center_justification)
ignore_sign: BOOLEAN
-- Ignore the sign of a number?
ensure
Result = (sign_format = ignore_sign_value)
leading_sign: BOOLEAN
-- Is the sign leading?
ensure
Result = not trailing_sign
left_justified: BOOLEAN
-- Are numbers to be formatted with spaces on the right?
ensure
Result = (justification = left_justification)
no_separator: BOOLEAN
-- Is there a separator?
ensure
Result = (separator = '%U')
not_justified: BOOLEAN
-- Are numbers to be formatted in smallest string possible
ensure
Result = (justification = no_justification)
right_justified: BOOLEAN
-- Are numbers to be formatted with spaces on the left?
ensure
Result = (justification = right_justification)
show_sign: BOOLEAN
-- Are numbers to show sign whether positive or negative?
ensure
Result = (sign_format = show_sign_value)
show_sign_negative: BOOLEAN
-- Are numbers to show sign only when negative?
ensure
Result = (sign_format = sign_negative_value)
show_sign_positive: BOOLEAN
-- Are numbers to show sign only when positive?
ensure
Result = (sign_format = sign_positive_value)
feature -- Status setting
asterisk_fill
-- Fill numbers with asterisks.
ensure
fill_character = '*'
blank_fill
-- Fill numbers with blanks.
ensure
fill_character = ' '
bracket_negative
-- Bracket negative numbers.
ensure
bracketted_negative
center_justify
-- Put padding on right and left
ensure
centered
comma_separate
-- Set separator to comma.
ensure
separator = ','
dollar_fill
-- Fill numbers with dollars.
ensure
fill_character = '$'
dot_separate
-- Set separator to period.
ensure
separator = '.'
left_justify
--Put padding on right
ensure
left_justified
no_justify
-- Always return the smallest string possible
ensure
not_justified
remove_separator
-- Remove the separator.
ensure
separator = '%U'
right_justify
-- Put padding on left
ensure
right_justified
set_fill (c: CHARACTER)
-- Fill numbers with c
ensure
fill_character = c
set_separator (c: CHARACTER)
-- Set the separator to c
ensure
separator = c
set_sign (s: STRING)
-- Set sign values for positive, zero, negative
-- All values must be the same length.
-- Stored as negative, zero, positive.
require
s /= void;
s.count >= 3;
s.count \\ 3 = 0
ensure
sign_string.is_equal (s)
set_width (w: INTEGER)
-- Set width to w
require
wide_enough: w >= 1
ensure
width = w
sign_cr_dr
-- Set sign for CR/DR
ensure
sign_string.is_equal ("CR DR")
sign_dr_cr
-- Set sign for DR/CR
ensure
sign_string.is_equal ("DR CR")
sign_floating_dollar
-- Set sign for floating dollar.
ensure
sign_string.is_equal ("$$$")
sign_floating_dollar_signed
-- Set sign for floating dollar include sign.
ensure
sign_string.is_equal ("-$ $+$")
sign_ignore
-- Do not show sign.
ensure
ignore_sign
sign_leading
-- Set the sign to lead
ensure
leading_sign
sign_negative_only
-- Show sign for negative numbers only.
ensure
show_sign_negative
sign_normal
-- Set sign for - and +.
ensure
sign_string.is_equal ("- +")
sign_positive_only
-- Show sign for positive numbers only.
ensure
show_sign_positive
sign_show
-- Show sign for all numbers.
ensure
show_sign
sign_trailing
-- Set the sign to trail
ensure
trailing_sign
unbracket_negative
-- Do not bracket negative numbers.
ensure
not bracketted_negative
underscore_separate
-- Set separator to underscore.
ensure
separator = '_'
zero_fill
-- Fill numbers with zeros.
ensure
fill_character = '0'
feature -- Conversion
formatted (i: INTEGER): STRING
-- Format the integer.
ensure
exists: Result /= void;
correct_length: not_justified or Result.count >= width
invariant
-- from GENERAL
reflexive_equality: standard_is_equal (Current);
reflexive_conformance: conforms_to (Current);
sign_string_constraint: sign_string /= void;
wide_enough: width >= 1;
no_justification <= justification and justification <= right_justification;
end -- class FORMAT_INTEGER