public static class InternalFormat.Formatter
extends java.lang.Object
implements java.lang.Appendable
Constructor and Description |
---|
Formatter(InternalFormat.Spec spec,
int width)
Construct the formatter from a specification and initial buffer capacity.
|
Formatter(java.lang.StringBuilder result,
InternalFormat.Spec spec)
Construct the formatter from a client-supplied buffer and a specification.
|
Modifier and Type | Method and Description |
---|---|
static PyException |
alignmentNotAllowed(char align,
java.lang.String forType)
Convenience method returning a
Py.ValueError reporting that the given alignment
flag is not allowed in a format specifier for the named type. |
static PyException |
alternateFormNotAllowed(java.lang.String forType)
Convenience method returning a
Py.ValueError reporting that alternate form is not
allowed in a format specifier for the named type. |
static PyException |
alternateFormNotAllowed(java.lang.String forType,
char code)
Convenience method returning a
Py.ValueError reporting that alternate form is not
allowed in a format specifier for the named type and specified typoe code. |
InternalFormat.Formatter |
append(char c) |
InternalFormat.Formatter |
append(java.lang.CharSequence csq) |
InternalFormat.Formatter |
append(java.lang.CharSequence csq,
int start,
int end) |
PyString |
getPyResult()
|
java.lang.String |
getResult()
Current (possibly final) result of the formatting, as a
String . |
boolean |
isBytes()
Whether initialised for a byte-like interpretation.
|
static PyException |
notAllowed(java.lang.String outrage,
java.lang.String forType)
Convenience method returning a
Py.ValueError reporting that some format specifier
feature is not allowed for the named data type. |
static PyException |
notAllowed(java.lang.String outrage,
java.lang.String forType,
char code)
Convenience method returning a
Py.ValueError reporting that some format specifier
feature is not allowed for the named format code and data type. |
InternalFormat.Formatter |
pad()
|
static PyException |
precisionNotAllowed(java.lang.String forType)
Convenience method returning a
Py.ValueError reporting that specifying a
precision is not allowed in a format specifier for the named type. |
static PyException |
precisionTooLarge(java.lang.String type)
Convenience method returning a
Py.OverflowError reporting:
"formatted "+type+" is too long (precision too large?)" |
void |
setBytes(boolean bytes)
Signals the client's intention to make a PyString (or other byte-like) interpretation of
result , rather than a PyUnicode one. |
void |
setStart()
|
static PyException |
signNotAllowed(java.lang.String forType,
char code)
Convenience method returning a
Py.ValueError reporting that specifying a sign is
not allowed in a format specifier for the named type. |
java.lang.String |
toString()
Overridden to provide a debugging view in which the actual text is shown divided up by
the
len* member variables. |
static PyException |
unknownFormat(char code,
java.lang.String forType)
Convenience method returning a
Py.ValueError reporting:
"Unknown format code '"+code+"' for object of type '"+forType+"'" |
static PyException |
zeroPaddingNotAllowed(java.lang.String forType)
Convenience method returning a
Py.ValueError reporting that zero padding is not
allowed in a format specifier for the named type. |
public Formatter(java.lang.StringBuilder result, InternalFormat.Spec spec)
mark
and start
to the end of the buffer. The new formatted object will
therefore be appended there and, when the time comes, padding will be applied to (just)
the new text.result
- destination bufferspec
- parsed conversion specificationpublic Formatter(InternalFormat.Spec spec, int width)
mark
to the end of the buffer.spec
- parsed conversion specificationwidth
- of buffer initiallypublic void setBytes(boolean bytes)
result
, rather than a PyUnicode one. Only formatters that could produce
characters >255 are affected by this (e.g. c-format). Idiom:
MyFormatter f = new MyFormatter( InternalFormatter.fromText(formatSpec) ); f.setBytes(!(formatSpec instanceof PyUnicode)); // ... formatting work return f.getPyResult();
bytes
- true to signal the intention to make a byte-like interpretationpublic boolean isBytes()
public java.lang.String getResult()
String
.public PyString getPyResult()
PyObject
, either PyString
or PyUnicode
according to
bytes
.public InternalFormat.Formatter append(char c)
append
in interface java.lang.Appendable
public InternalFormat.Formatter append(java.lang.CharSequence csq)
append
in interface java.lang.Appendable
public InternalFormat.Formatter append(java.lang.CharSequence csq, int start, int end) throws java.lang.IndexOutOfBoundsException
append
in interface java.lang.Appendable
java.lang.IndexOutOfBoundsException
public void setStart()
result
, ready to
receive a new one: sets start
and calls reset()
. This is necessary when
a Formatter
is to be re-used. Note that this leaves mark
where it
is. In the core, we need this to support complex
: two floats in the same
format, but padded as a unit.public java.lang.String toString()
Overridden to provide a debugging view in which the actual text is shown divided up by
the len*
member variables. If the dividers don't look right, those variables
have not remained consistent with the text.
toString
in class java.lang.Object
public InternalFormat.Formatter pad()
result
from mark
to
the end) using the alignment, target width and fill character defined in spec
.
The action of padding will increase the length of this segment to the target width, if
that is greater than the current length.
When the padding method has decided that that it needs to add n padding characters, it
will affect start
or lenWhole
as follows.
align | meaning | start | lenWhole | result.length() |
---|---|---|---|---|
< |
left-aligned | +0 | +0 | +n |
> |
right-aligned | +n | +0 | +n |
^ |
centred | +(n/2) | +0 | +n |
= |
pad after sign | +0 | +n | +n |
result[mark:]
.) When this would not be
appropriate, it is up to the client to disallow this (which complex
does).public static PyException unknownFormat(char code, java.lang.String forType)
Py.ValueError
reporting:
"Unknown format code '"+code+"' for object of type '"+forType+"'"
code
- the presentation typeforType
- the type it was found applied topublic static PyException alternateFormNotAllowed(java.lang.String forType)
Py.ValueError
reporting that alternate form is not
allowed in a format specifier for the named type.forType
- the type it was found applied topublic static PyException alternateFormNotAllowed(java.lang.String forType, char code)
Py.ValueError
reporting that alternate form is not
allowed in a format specifier for the named type and specified typoe code.forType
- the type it was found applied tocode
- the formatting code (or '\0' not to mention one)public static PyException alignmentNotAllowed(char align, java.lang.String forType)
Py.ValueError
reporting that the given alignment
flag is not allowed in a format specifier for the named type.align
- type of alignmentforType
- the type it was found applied topublic static PyException signNotAllowed(java.lang.String forType, char code)
Py.ValueError
reporting that specifying a sign is
not allowed in a format specifier for the named type.forType
- the type it was found applied tocode
- the formatting code (or '\0' not to mention one)public static PyException precisionNotAllowed(java.lang.String forType)
Py.ValueError
reporting that specifying a
precision is not allowed in a format specifier for the named type.forType
- the type it was found applied topublic static PyException zeroPaddingNotAllowed(java.lang.String forType)
Py.ValueError
reporting that zero padding is not
allowed in a format specifier for the named type.forType
- the type it was found applied topublic static PyException notAllowed(java.lang.String outrage, java.lang.String forType)
Py.ValueError
reporting that some format specifier
feature is not allowed for the named data type.outrage
- committed in the present caseforType
- the data type (e.g. "integer") it where it is an outragepublic static PyException notAllowed(java.lang.String outrage, java.lang.String forType, char code)
Py.ValueError
reporting that some format specifier
feature is not allowed for the named format code and data type. Produces a message like:
outrage+" not allowed with "+forType+" format specifier '"+code+"'"
outrage+" not allowed in "+forType+" format specifier"
outrage
- committed in the present caseforType
- the data type (e.g. "integer") it where it is an outragecode
- the formatting code for which it is an outrage (or '\0' not to mention one)public static PyException precisionTooLarge(java.lang.String type)
Py.OverflowError
reporting:
"formatted "+type+" is too long (precision too large?)"
type
- of formatting ("integer", "float")