PlainDocument.java [plain text]
package javax.swing.text;
import java.util.ArrayList;
public class PlainDocument extends AbstractDocument
{
private static final long serialVersionUID = 4758290289196893664L;
public static final String lineLimitAttribute = "lineLimit";
public static final String tabSizeAttribute = "tabSize";
private Element rootElement;
private int tabSize;
public PlainDocument()
{
this(new GapContent());
}
public PlainDocument(AbstractDocument.Content content)
{
super(content);
tabSize = 8;
rootElement = createDefaultRoot();
}
private void reindex()
{
Element[] lines;
try
{
String str = content.getString(0, content.length());
ArrayList elts = new ArrayList();
int j = 0;
for (int i = str.indexOf('\n', 0); i != -1; i = str.indexOf('\n', i + 1))
{
elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, i + 1));
j = i + 1;
}
if (j < content.length())
elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, content.length()));
lines = new Element[elts.size()];
for (int i = 0; i < elts.size(); ++i)
lines[i] = (Element) elts.get(i);
}
catch (BadLocationException e)
{
lines = new Element[1];
lines[0] = createLeafElement(rootElement, SimpleAttributeSet.EMPTY, 0, 1);
}
((BranchElement) rootElement).replace(0, rootElement.getElementCount(), lines);
}
protected AbstractDocument.AbstractElement createDefaultRoot()
{
BranchElement root =
(BranchElement) createBranchElement(null, SimpleAttributeSet.EMPTY);
Element[] array = new Element[1];
array[0] = createLeafElement(root, SimpleAttributeSet.EMPTY, 0, 1);
root.replace(0, 0, array);
return root;
}
protected void insertUpdate(DefaultDocumentEvent event, AttributeSet attributes)
{
reindex();
super.insertUpdate(event, attributes);
}
protected void removeUpdate(DefaultDocumentEvent event)
{
reindex();
super.removeUpdate(event);
}
public Element getDefaultRootElement()
{
return rootElement;
}
public Element getParagraphElement(int pos)
{
Element root = getDefaultRootElement();
return root.getElement(root.getElementIndex(pos));
}
}