FileDocCategorySizeDatePackage
CharacterIteratorFieldDelegate.javaAPI DocJava SE 5 API3978Fri Aug 26 14:57:20 BST 2005java.text

CharacterIteratorFieldDelegate

public class CharacterIteratorFieldDelegate extends Object implements Format$FieldDelegate
CharacterIteratorFieldDelegate combines the notifications from a Format into a resulting AttributedCharacterIterator. The resulting AttributedCharacterIterator can be retrieved by way of the getIterator method.
version
1.4 12/19/03

Fields Summary
private ArrayList
attributedStrings
Array of AttributeStrings. Whenever formatted is invoked for a region > size, a new instance of AttributedString is added to attributedStrings. Subsequent invocations of formatted for existing regions result in invoking addAttribute on the existing AttributedStrings.
private int
size
Running count of the number of characters that have been encountered.
Constructors Summary
CharacterIteratorFieldDelegate()

        attributedStrings = new ArrayList();
    
Methods Summary
public voidformatted(java.text.Format$Field attr, java.lang.Object value, int start, int end, java.lang.StringBuffer buffer)

        if (start != end) {
            if (start < size) {
                // Adjust attributes of existing runs
                int index = size;
                int asIndex = attributedStrings.size() - 1;

                while (start < index) {
                    AttributedString as = (AttributedString)attributedStrings.
                                           get(asIndex--);
                    int newIndex = index - as.length();
                    int aStart = Math.max(0, start - newIndex);

                    as.addAttribute(attr, value, aStart, Math.min(
                                    end - start, as.length() - aStart) +
                                    aStart);
                    index = newIndex;
                }
            }
            if (size < start) {
                // Pad attributes
                attributedStrings.add(new AttributedString(
                                          buffer.substring(size, start)));
                size = start;
            }
            if (size < end) {
                // Add new string
                int aStart = Math.max(start, size);
                AttributedString string = new AttributedString(
                                   buffer.substring(aStart, end));

                string.addAttribute(attr, value);
                attributedStrings.add(string);
                size = end;
            }
        }
    
public voidformatted(int fieldID, java.text.Format$Field attr, java.lang.Object value, int start, int end, java.lang.StringBuffer buffer)

        formatted(attr, value, start, end, buffer);
    
public java.text.AttributedCharacterIteratorgetIterator(java.lang.String string)
Returns an AttributedCharacterIterator that can be used to iterate over the resulting formatted String.

pararm
string Result of formatting.

        // Add the last AttributedCharacterIterator if necessary
        // assert(size <= string.length());
        if (string.length() > size) {
            attributedStrings.add(new AttributedString(
                                  string.substring(size)));
            size = string.length();
        }
        int iCount = attributedStrings.size();
        AttributedCharacterIterator iterators[] = new
                                    AttributedCharacterIterator[iCount];

        for (int counter = 0; counter < iCount; counter++) {
            iterators[counter] = ((AttributedString)attributedStrings.
                                  get(counter)).getIterator();
        }
        return new AttributedString(iterators).getIterator();