home *** CD-ROM | disk | FTP | other *** search
- package netscape.application;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.MalformedURLException;
- import java.net.URL;
- import netscape.util.ClassInfo;
- import netscape.util.Codable;
- import netscape.util.CodingException;
- import netscape.util.Decoder;
- import netscape.util.Encoder;
- import netscape.util.Enumeration;
- import netscape.util.Hashtable;
- import netscape.util.InconsistencyException;
- import netscape.util.Vector;
-
- public class TextView extends View implements ExtendedTarget, EventFilter, DragDestination, FormElement {
- public static final String TEXT_ATTACHMENT_STRING = "@";
- public static final String PARAGRAPH_FORMAT_KEY = "ParagraphFormatKey";
- public static final String FONT_KEY = "FontKey";
- public static final String TEXT_COLOR_KEY = "TextColorKey";
- public static final String TEXT_ATTACHMENT_KEY = "TextAttachmentKey";
- public static final String TEXT_ATTACHMENT_BASELINE_OFFSET_KEY = "TextAttachmentBaselineOffsetKey";
- public static final String CARET_COLOR_KEY = "CaretColorKey";
- public static final String LINK_KEY = "LinkKey";
- public static final String LINK_DESTINATION_KEY = "LinkDestinationKey";
- public static final String LINK_COLOR_KEY = "LinkColorKey";
- public static final String PRESSED_LINK_COLOR_KEY = "PressedLinkColorKey";
- static final String LINK_IS_PRESSED_KEY = "_IFCLinkPressedKey";
- static Vector attributesChangingFormatting = new Vector();
- Vector _paragraphVector;
- Color _backgroundColor;
- Color _selectionColor;
- TextParagraph _updateParagraph;
- TextPositionInfo _anchorInfo;
- TextPositionInfo _upInfo;
- TextSelection _selection;
- TextFilter _filter;
- TextViewOwner _owner;
- Hashtable _defaultAttributes;
- Hashtable _typingAttributes;
- Timer _updateTimer;
- Vector _eventVector;
- int _charCount;
- int _paragraphSpacing;
- int _updateLine;
- int _downY;
- int _clickCount;
- int _resizeDisabled;
- int _formattingDisabled;
- boolean _drawText;
- boolean _editing;
- boolean _useSingleFont;
- boolean _editable;
- boolean _selectable;
- boolean _drawNextParagraph;
- boolean _resizing;
- boolean insertionPointVisible;
- boolean transparent;
- boolean selectLineBreak;
- private Range _selectedRange;
- private Range _wasSelectedRange;
- private TextAttachment _mouseDownTextAttachment;
- private Point _mouseDownTextAttachmentOrigin;
- private FontMetrics _defaultFontMetricsCache;
- private URL _baseURL;
- private Range _clickedRange;
- private Range _firstRange;
- private HTMLParsingRules _htmlParsingRules;
- private int notifyAttachmentDisabled;
- private Range invalidAttachmentRange;
- private static Vector _rectCache;
- private static Vector _vectorCache;
- private static boolean _shouldCache;
- private static boolean _cacheVectors;
- static ObjectPool hashtablePool;
- static ObjectPool rangePool;
- static final String PARAGRAPHVECTOR_KEY = "paragraphVector";
- static final String BACKGROUNDCOLOR_KEY = "backgroundColor";
- static final String SELECTIONCOLOR_KEY = "selectionColor";
- static final String FILTER_KEY = "filter";
- static final String DEFAULTATTRIBUTES_KEY = "defaultAttributes";
- static final String PARASPACING_KEY = "paragraphSpacing";
- static final String USESINGLEFONT_KEY = "useSingleFont";
- static final String EDITABLE_KEY = "editable";
- static final String SELECTABLE_KEY = "selectable";
- static final String TRANSPARENT_KEY = "transparent";
- static final String HTML_PARSING_RULES_KEY = "htmlParsingRules";
- static final String OWNER_KEY = "owner";
-
- public TextView() {
- this(0, 0, 0, 0);
- }
-
- public TextView(Rect var1) {
- this(var1.x, var1.y, var1.width, var1.height);
- }
-
- public TextView(int var1, int var2, int var3, int var4) {
- super(var1, var2, var3, var4);
- this._drawText = true;
- this._useSingleFont = false;
- this._editable = true;
- this._selectable = true;
- this._resizing = false;
- this.insertionPointVisible = false;
- this.transparent = false;
- this._eventVector = new Vector();
- this._selection = new TextSelection(this);
- this._paragraphVector = new Vector();
- this._paragraphSpacing = 0;
- this._backgroundColor = Color.white;
- this._selectionColor = Color.lightGray;
- this._defaultAttributes = new Hashtable();
- this._defaultAttributes.put("FontKey", Font.defaultFont());
- this._defaultAttributes.put("TextColorKey", Color.black);
- this._defaultAttributes.put("LinkColorKey", Color.blue);
- this._defaultAttributes.put("CaretColorKey", Color.black);
- this._defaultAttributes.put("PressedLinkColorKey", Color.red);
- TextParagraphFormat var6 = new TextParagraphFormat();
- var6.setLeftMargin(3);
- var6.setRightMargin(3);
- var6.setJustification(0);
- int var8 = 30;
-
- for(int var7 = 0; var7 < 20; ++var7) {
- var6.addTabPosition(var8);
- var8 += 30;
- }
-
- this._defaultAttributes.put("ParagraphFormatKey", var6);
- this._wasSelectedRange = new Range(this.selectedRange());
- TextParagraph var5 = new TextParagraph(this);
- var5.addRun(new TextStyleRun(var5, "", (Hashtable)null));
- this.addParagraph(var5);
- this.reformatAll();
- this._typingAttributes = new Hashtable();
- }
-
- public void didMoveBy(int var1, int var2) {
- if (var1 == 0 && var2 == 0 && this._updateTimer != null) {
- this._updateTimer.stop();
- this._updateTimer = null;
- this._updateParagraph = null;
- }
-
- super.didMoveBy(var1, var2);
- }
-
- public void sizeBy(int var1, int var2) {
- if (this.isResizingEnabled()) {
- int var3 = super.bounds.width;
- this._resizing = true;
- super.sizeBy(var1, var2);
- this._resizing = false;
- if (super.bounds.width != var3 + var1) {
- this.disableResizing();
- this.reformatAll();
- this.enableResizing();
- ((View)this).setDirty(true);
- } else {
- if (var1 != 0 || var2 != 0) {
- ((View)this).setDirty(true);
- }
-
- }
- }
- }
-
- public void didSizeBy(int var1, int var2) {
- if (!this._resizing) {
- this.reformatAll();
- }
-
- super.didSizeBy(var1, var2);
- }
-
- public void setTransparent(boolean var1) {
- this.transparent = var1;
- }
-
- public boolean isTransparent() {
- return this.transparent;
- }
-
- public boolean wantsAutoscrollEvents() {
- return true;
- }
-
- public void drawView(Graphics var1) {
- if (!this._drawText) {
- if (this._updateParagraph != null) {
- this._updateParagraph.drawLine(var1, this._updateLine);
- }
- } else {
- int var6 = this._paragraphVector.count();
- int var4 = var1.clipRect().y;
- int var5 = var1.clipRect().maxY();
- Rect var3 = Rect.newRect(0, 0, ((View)this).width(), ((View)this).height());
-
- for(int var7 = 0; var7 < var6; ++var7) {
- TextParagraph var2 = (TextParagraph)this._paragraphVector.elementAt(var7);
- if (var2._y <= var5 && var2._y + var2._height >= var4) {
- var2.drawView(var1, var3);
- }
- }
-
- Rect.returnRect(var3);
- }
-
- if (this._selection._insertionPointShowing) {
- Rect var11 = this._selection.insertionPointRect();
- Color var12 = null;
- if (var1.clipRect().intersects(var11)) {
- TextPositionInfo var10 = this._selection.insertionPointInfo();
- TextStyleRun var9 = this._runForIndex(var10._absPosition);
- Hashtable var8;
- if ((var8 = var9.attributes()) != null) {
- var12 = (Color)var8.get("CaretColorKey");
- }
-
- if (var12 == null) {
- var12 = (Color)this._defaultAttributes.get("CaretColorKey");
- }
-
- if (var12 == null) {
- var12 = Color.black;
- }
-
- var1.setColor(var12);
- var1.fillRect(var11);
- }
- }
-
- }
-
- public Object filterEvents(Vector var1) {
- for(int var2 = 0; var2 < var1.count(); ++var2) {
- Event var3 = (Event)var1.elementAt(var2);
- if (var3 instanceof KeyEvent && var3.type() == -11) {
- if (this._filter != null) {
- if (this._filter.acceptsEvent(this, (KeyEvent)var3, this._eventVector)) {
- this._eventVector.addElement(var3);
- }
- } else {
- this._eventVector.addElement(var3);
- }
-
- var1.removeElementAt(var2);
- --var2;
- }
- }
-
- return null;
- }
-
- public boolean mouseDown(MouseEvent var1) {
- this._mouseDownTextAttachment = null;
- this._clickedRange = null;
- if (this.isEditable() || this.isSelectable()) {
- ((View)this).setFocusedView();
- }
-
- if (!((View)this).rootView().mouseStillDown()) {
- return true;
- } else {
- this._selection.hideInsertionPoint();
- this._clickCount = var1.clickCount();
- this._anchorInfo = this.positionForPoint(var1.x, var1.y, false);
- TextPositionInfo var2 = this.positionForPoint(var1.x, var1.y, true);
- if (this._anchorInfo != null && this._anchorInfo._endOfLine) {
- Rect var3 = new Rect(this._anchorInfo._x, this._anchorInfo._y, super.bounds.width, this._anchorInfo._lineHeight);
- if (!var3.contains(var1.x, var1.y)) {
- this.selectLineBreak = false;
- } else {
- this.selectLineBreak = true;
- }
- } else {
- this.selectLineBreak = false;
- }
-
- if (var2 != null) {
- TextStyleRun var8 = this._runForIndex(var2._absPosition);
- if (var8 != null) {
- Hashtable var4 = var8.attributes();
- if (var4 != null) {
- TextAttachment var5;
- if ((var5 = (TextAttachment)var4.get("TextAttachmentKey")) != null && var8.rangeIndex() == var2._absPosition) {
- Rect var7 = var8.textAttachmentBoundsForOrigin(var2._x, var2._y, var8._paragraph._baselines[var2._lineNumber]);
- if (var7 != null && var7.contains(var1.x, var1.y)) {
- boolean var6 = var5.mouseDown(new MouseEvent(var1.timeStamp, var1.type, var1.x - var7.x, var1.y - var7.y, var1.modifiers));
- if (var6) {
- this._mouseDownTextAttachment = var5;
- this._mouseDownTextAttachmentOrigin = new Point(var7.x, var7.y);
- return true;
- }
- }
- }
-
- if (!this.isEditable() && var4.get("LinkKey") != null && this.runUnderMouse(var8, var1.x, var1.y) && this._clickCount == 1) {
- this._clickedRange = this.linkRangeForPosition(var2._absPosition);
- this.highlightLinkWithRange(this._clickedRange, true);
- }
- }
- }
- }
-
- if (!this.isSelectable() && this._clickedRange == null) {
- return false;
- } else {
- this._firstRange = null;
- if (this._clickCount > 1) {
- if (!this.selectLineBreak) {
- switch (this._clickCount) {
- case 2:
- this._firstRange = this.groupForIndex(this._anchorInfo._absPosition);
- break;
- default:
- this._firstRange = this.paragraphForIndex(this._anchorInfo._absPosition);
- }
-
- if (this._firstRange != null && !this._firstRange.isNullRange()) {
- if (var1.isShiftKeyDown()) {
- Range var9 = new Range(this.selectedRange());
- var9.unionWith(this._firstRange.index, this._firstRange.length);
- this._selection.setRange(var9.index, var9.index + var9.length, (TextPositionInfo)null, false);
- } else {
- this._selection.setRange(this._firstRange.index, this._firstRange.lastIndex() + 1, (TextPositionInfo)null, false);
- }
-
- this._selectionChanged();
- }
-
- return true;
- }
-
- this._firstRange = new Range(this._anchorInfo._absPosition, 0);
- }
-
- if (var1.isShiftKeyDown()) {
- this._selection.setRange(this._selection.orderedSelectionStart(), this._anchorInfo._absPosition, (TextPositionInfo)null, false);
- } else {
- this._selection.setInsertionPoint(this._anchorInfo);
- }
-
- this._selectionChanged();
- this._upInfo = null;
- this._downY = this._anchorInfo._y + this._anchorInfo._lineHeight;
- return true;
- }
- }
- }
-
- public void mouseDragged(MouseEvent var1) {
- if (this._mouseDownTextAttachment != null) {
- this._mouseDownTextAttachment.mouseDragged(new MouseEvent(var1.timeStamp, var1.type, var1.x - this._mouseDownTextAttachmentOrigin.x, var1.y - this._mouseDownTextAttachmentOrigin.y, var1.modifiers));
- } else {
- Point var5 = new Point(var1.x, var1.y);
- if (var5.x >= super.bounds.width) {
- var5.x = super.bounds.width - 1;
- } else if (var5.x < 0) {
- var5.x = 0;
- }
-
- if (var5.y >= super.bounds.height) {
- var5.y = super.bounds.height - 1;
- } else if (var5.y < 0) {
- var5.y = 0;
- }
-
- TextPositionInfo var2 = this.positionForPoint(var5.x, var5.y, false);
- if (this._clickedRange != null) {
- TextStyleRun var7 = this._runForIndex(var2._absPosition);
- Hashtable var8;
- if ((var8 = var7.attributes()) != null && var8.get("LinkKey") != null && this.runUnderMouse(var7, var1.x, var1.y)) {
- Range var9 = this.linkRangeForPosition(var2._absPosition);
- if (!var9.equals(this._clickedRange)) {
- this.highlightLinkWithRange(this._clickedRange, false);
- this._clickedRange = var9;
- this.highlightLinkWithRange(this._clickedRange, true);
- }
-
- return;
- }
-
- this.highlightLinkWithRange(this._clickedRange, false);
- this._clickedRange = null;
- }
-
- if (this.isSelectable()) {
- if (var2 != null) {
- if (!((View)this).containsPointInVisibleRect(var1.x, var1.y)) {
- Rect var3 = newRect(var2._x, var2._y, 1, var2._lineHeight);
- ((View)this).scrollRectToVisible(var3);
- returnRect(var3);
- }
-
- int var4 = this._anchorInfo._absPosition;
- boolean var6;
- if (this._upInfo != null && var2._absPosition != this._upInfo._absPosition) {
- var6 = true;
- } else {
- var6 = false;
- }
-
- this._upInfo = var2;
- if (var6) {
- Range var10;
- switch (this._clickCount) {
- case 0:
- case 1:
- this._selection.setRange(var4, this._upInfo._absPosition, this._upInfo, this.selectLineBreak);
- this._selectionChanged();
- return;
- case 2:
- var10 = this.groupForIndex(this._upInfo._absPosition);
- break;
- default:
- var10 = this.paragraphForIndex(this._upInfo._absPosition);
- }
-
- if (this._firstRange != null && !this._firstRange.isNullRange() && !var10.isNullRange()) {
- var10.unionWith(this._firstRange);
- if (!var10.equals(this.selectedRange())) {
- this._selection.setRange(var10.index, var10.lastIndex() + 1, (TextPositionInfo)null, this.selectLineBreak);
- this._selectionChanged();
- }
- }
- }
-
- }
- }
- }
- }
-
- public void mouseUp(MouseEvent var1) {
- if (this._mouseDownTextAttachment != null) {
- this._mouseDownTextAttachment.mouseUp(new MouseEvent(var1.timeStamp, var1.type, var1.x - this._mouseDownTextAttachmentOrigin.x, var1.y - this._mouseDownTextAttachmentOrigin.y, var1.modifiers));
- this._mouseDownTextAttachment = null;
- this._mouseDownTextAttachmentOrigin = null;
- } else {
- if (this._clickedRange != null) {
- TextPositionInfo var2 = this.positionForPoint(var1.x, var1.y, true);
- Range var3 = this.linkRangeForPosition(var2._absPosition);
- this.highlightLinkWithRange(this._clickedRange, false);
- if (var3 != null && var3.equals(this._clickedRange) && this._owner != null) {
- TextStyleRun var4 = this._runForIndex(this._clickedRange.index);
- Hashtable var5 = var4.attributes();
- Object var6 = null;
- String var7;
- if (var5 != null && (var7 = (String)var5.get("LinkKey")) != null && this.runsUnderMouse(this.runsForRange(this._clickedRange), var1.x, var1.y)) {
- this._owner.linkWasSelected(this, this._clickedRange, var7);
- }
- }
-
- this._clickedRange = null;
- }
-
- if (this.isSelectable()) {
- if (this._upInfo == null || this._upInfo._absPosition == this._anchorInfo._absPosition) {
- this._selection.showInsertionPoint();
- }
-
- this._firstRange = null;
- }
- }
- }
-
- public int cursorForPoint(int var1, int var2) {
- if (this.isEditable()) {
- return 2;
- } else {
- TextPositionInfo var3 = this.positionForPoint(var1, var2, true);
- if (var3 != null) {
- TextStyleRun var4 = this._runForIndex(var3._absPosition);
- if (var4 != null) {
- Hashtable var5 = var4.attributes();
- if (var5 != null && var5.get("LinkKey") != null && this.runUnderMouse(var4, var1, var2)) {
- return 12;
- }
- }
- }
-
- return this.isSelectable() ? 2 : 0;
- }
- }
-
- public void performCommand(String var1, Object var2) {
- if (var1.equals("refreshBitmap")) {
- this.refreshBitmap(var2);
- } else {
- if (var1 != null && var1.equals("setFont")) {
- this.processSetFont((Font)var2);
- return;
- }
-
- if (var1.equals("cut")) {
- this.cut();
- } else if (var1.equals("copy")) {
- this.copy();
- } else if (var1.equals("paste")) {
- this.paste();
- } else if (!(var2 instanceof Timer)) {
- return;
- }
- }
-
- if (this._updateParagraph == null) {
- if (this._updateTimer != null) {
- this._updateTimer.stop();
- this._updateTimer = null;
- }
-
- } else {
- this._drawText = false;
- Rect var3 = this._updateParagraph.rectForLine(this._updateLine);
- ((View)this).draw(var3);
- returnRect(var3);
- this._drawText = true;
- ++this._updateLine;
- if (this._updateLine >= this._updateParagraph._breakCount) {
- if (!this._drawNextParagraph) {
- this._updateParagraph = null;
- } else {
- int var4 = this._paragraphVector.indexOfIdentical(this._updateParagraph) + 1;
- if (var4 != 0 && var4 < this._paragraphVector.count()) {
- this._updateParagraph = (TextParagraph)this._paragraphVector.elementAt(var4);
- this._updateLine = 0;
- } else {
- this._updateParagraph = null;
- }
- }
- }
-
- if (this._updateParagraph == null && this._updateTimer != null) {
- this._updateTimer.stop();
- this._updateTimer = null;
- }
-
- }
- }
-
- public boolean canPerformCommand(String var1) {
- if (var1.equals("setFont")) {
- return !this.usesSingleFont() && this.isEditable();
- } else {
- return var1.equals("refreshBitmap") || var1.equals("copy") || this.isEditable() && var1.equals("cut") || this.isEditable() && var1.equals("paste");
- }
- }
-
- public void keyDown(KeyEvent var1) {
- if (var1.isPageUpKey()) {
- Rect var5 = new Rect();
- ((View)this).computeVisibleRect(var5);
- var5.y -= var5.height - 1;
- if (var5.y < 0) {
- var5.y = 0;
- }
-
- TextPositionInfo var6 = this.positionForPoint(var5.x, var5.y, true);
- if (var6 != null) {
- var5.y = var6._y;
- }
-
- ((View)this).scrollRectToVisible(var5);
- } else if (var1.isPageDownKey()) {
- Rect var2 = new Rect();
- ((View)this).computeVisibleRect(var2);
- TextPositionInfo var3 = this.positionForPoint(var2.x, var2.y, true);
- var2.y += var2.height - 1;
- if (var2.y > super.bounds.height - var2.height) {
- var2.y = super.bounds.height - var2.height;
- }
-
- TextPositionInfo var4 = this.positionForPoint(var2.x, var2.y, true);
- if (var4 != null) {
- var2.y = var4._y;
- if (var3 != null && var3._absPosition == var4._absPosition) {
- var2.y += var4._lineHeight;
- }
- }
-
- ((View)this).scrollRectToVisible(var2);
- } else if (this.isEditable()) {
- if (this.hasSelection()) {
- if (this._filter != null) {
- if (this._filter.acceptsEvent(this, var1, this._eventVector)) {
- this._eventVector.addElement(var1);
- }
- } else {
- this._eventVector.addElement(var1);
- }
-
- ((View)this).application().eventLoop().filterEvents(this);
-
- while(!this._eventVector.isEmpty()) {
- this._keyDown();
- }
-
- }
- }
- }
-
- public DragDestination acceptsDrag(DragSession var1, int var2, int var3) {
- String var4 = var1.dataType();
- return !this.isEditable() || !this.hasSelection() || !"netscape.application.Color".equals(var4) && !"netscape.application.Image".equals(var4) ? null : this;
- }
-
- public boolean dragEntered(DragSession var1) {
- return true;
- }
-
- public boolean dragMoved(DragSession var1) {
- return true;
- }
-
- public void dragExited(DragSession var1) {
- }
-
- public boolean dragDropped(DragSession var1) {
- if (this.isEditable() && this.hasSelection()) {
- Object var2 = var1.data();
- if (var2 == null) {
- return false;
- } else if (var2 instanceof Color) {
- Range var3 = this.selectedRange();
- if (var3.length > 0) {
- this.addAttributeForRange("TextColorKey", var2, var3);
- } else {
- this.addTypingAttribute("TextColorKey", var2);
- }
-
- return true;
- } else if (var2 instanceof Image) {
- this.replaceRangeWithTextAttachment(this.selectedRange(), new ImageAttachment((Image)var2));
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
-
- public void startFocus() {
- this._setEditing(true);
- this.showInsertionPoint();
- this._selection._startFlashing();
- if (this.isEditable() && this._owner != null) {
- this._owner.textEditingDidBegin(this);
- }
-
- if (this.hasSelection()) {
- Range var1 = this.selectedRange();
- if (var1.length > 0) {
- this.dirtyRange(var1);
- return;
- }
- } else {
- this.selectRange(new Range(0, 0));
- }
-
- }
-
- public void stopFocus() {
- this._selection._stopFlashing();
- this.hideInsertionPoint();
- this._setEditing(false);
- if (this.isEditable() && this._owner != null) {
- this._owner.textEditingDidEnd(this);
- }
-
- if (this.hasSelection()) {
- Range var1 = this.selectedRange();
- if (var1.length > 0) {
- this.dirtyRange(var1);
- }
- }
-
- }
-
- public void pauseFocus() {
- this._selection._stopFlashing();
- this.hideInsertionPoint();
- }
-
- public void resumeFocus() {
- this.showInsertionPoint();
- this._selection._startFlashing();
- }
-
- public String toString() {
- StringBuffer var3 = new StringBuffer();
- int var1 = 0;
-
- for(int var2 = this._paragraphVector.count(); var1 < var2; ++var1) {
- var3.append(this._paragraphVector.elementAt(var1).toString());
- }
-
- return var3.toString();
- }
-
- public void setFilter(TextFilter var1) {
- this._filter = var1;
- }
-
- public TextFilter filter() {
- return this._filter;
- }
-
- public void setOwner(TextViewOwner var1) {
- this._owner = var1;
- }
-
- public TextViewOwner owner() {
- return this._owner;
- }
-
- public void disableResizing() {
- ++this._resizeDisabled;
- }
-
- public void enableResizing() {
- --this._resizeDisabled;
- if (this._resizeDisabled < 0) {
- this._resizeDisabled = 0;
- }
-
- }
-
- public boolean isResizingEnabled() {
- return this._resizeDisabled == 0;
- }
-
- public void sizeToMinSize() {
- this.sizeBy(0, this.adjustCharCountsAndSpacing() - super.bounds.height);
- }
-
- public void scrollRangeToVisible(Range var1) {
- if (var1.index == 0 && var1.length == 0) {
- ((View)this).scrollRectToVisible(new Rect(0, 0, 1, 1));
- } else if (var1.index >= this.length()) {
- ((View)this).scrollRectToVisible(new Rect(((View)this).width() - 1, ((View)this).height() - 1, 1, 1));
- } else if (var1.length == 0) {
- TextPositionInfo var6 = this.positionInfoForIndex(var1.index);
- ((View)this).scrollRectToVisible(new Rect(var6._x, var6._y + var6._lineHeight, 1, var6._lineHeight));
- } else {
- TextPositionInfo var2 = this.positionInfoForIndex(var1.index);
- TextPositionInfo var3 = this.positionInfoForIndex(var1.index + var1.length);
- int var4 = var2._y;
- int var5 = var3._y + var3._lineHeight;
- if (var2._y == var3._y) {
- ((View)this).scrollRectToVisible(new Rect(var2._x, var4, var3._x - var2._x, var5 - var4));
- } else {
- ((View)this).scrollRectToVisible(new Rect(0, var4, ((View)this).width(), var5 - var4));
- }
- }
- }
-
- public void setUseSingleFont(boolean var1) {
- this._useSingleFont = var1;
- }
-
- public boolean usesSingleFont() {
- return this._useSingleFont;
- }
-
- public void setDefaultAttributes(Hashtable var1) {
- this._defaultAttributes = var1;
- if (var1.get("FontKey") != null) {
- this._defaultFontMetricsCache = null;
- }
-
- if (var1.get("ParagraphFormatKey") == null) {
- TextParagraphFormat var3 = new TextParagraphFormat();
- var3.setLeftMargin(3);
- var3.setRightMargin(3);
- var3.setJustification(0);
- this._defaultAttributes.put("ParagraphFormatKey", var3);
- }
-
- this.reformatAll();
- Range var2 = allocateRange(0, this.length());
- this.dirtyRange(var2);
- recycleRange(var2);
- }
-
- public Hashtable defaultAttributes() {
- return this._defaultAttributes;
- }
-
- public void addTypingAttribute(String var1, Object var2) {
- Hashtable var3 = new Hashtable();
- var3.put(var1, var2);
- var3 = attributesByRemovingStaticAttributes(var3);
- Enumeration var4 = var3.keys();
-
- while(var4.hasMoreElements()) {
- String var5 = (String)var4.nextElement();
- this._typingAttributes.put(var5, var3.get(var5));
- }
-
- }
-
- public Hashtable typingAttributes() {
- return this._typingAttributes;
- }
-
- public void setTypingAttributes(Hashtable var1) {
- if (var1 == null) {
- this._typingAttributes = new Hashtable();
- } else {
- this._typingAttributes = attributesByRemovingStaticAttributes(var1);
- }
- }
-
- public void setBackgroundColor(Color var1) {
- if (var1 != null) {
- this._backgroundColor = var1;
- }
-
- }
-
- public Color backgroundColor() {
- return this._backgroundColor;
- }
-
- public void setSelectionColor(Color var1) {
- if (var1 != null) {
- this._selectionColor = var1;
- }
-
- }
-
- public Color selectionColor() {
- return this._selectionColor;
- }
-
- public void setEditable(boolean var1) {
- if (this._editable != var1) {
- this._editable = var1;
- this.setSelectable(true);
- }
-
- }
-
- public boolean isEditable() {
- return this._editable;
- }
-
- public void setSelectable(boolean var1) {
- if (this._selectable != var1) {
- this._selectable = var1;
- RootView var2 = ((View)this).rootView();
- if (var2 != null) {
- var2.updateCursor();
- }
- }
-
- }
-
- public boolean isSelectable() {
- return this._selectable;
- }
-
- public void setFont(Font var1) {
- if (var1 != null) {
- this.addDefaultAttribute("FontKey", var1);
- }
- }
-
- public Font font() {
- return (Font)this._defaultAttributes.get("FontKey");
- }
-
- public void setTextColor(Color var1) {
- if (var1 != null) {
- this.addDefaultAttribute("TextColorKey", var1);
- }
-
- }
-
- public Color textColor() {
- Color var1 = (Color)this._defaultAttributes.get("TextColorKey");
- return var1 == null ? Color.black : var1;
- }
-
- public void setCaretColor(Color var1) {
- if (var1 != null) {
- this.addDefaultAttribute("CaretColorKey", var1);
- }
-
- }
-
- public Color caretColor() {
- Color var1 = (Color)this._defaultAttributes.get("CaretColorKey");
- return var1 == null ? Color.black : var1;
- }
-
- public void replaceRangeWithString(Range var1, String var2) {
- boolean var8 = true;
- if (this._owner != null) {
- this._owner.textWillChange(this, var1);
- }
-
- if (var1.equals(new Range(0, this.length()))) {
- this.replaceContentWithString(var2);
- if (this._owner != null) {
- this._owner.textDidChange(this, new Range(0, this.length()));
- }
-
- } else {
- this.disableResizing();
- int var9 = this._paragraphIndexForIndex(var1.index);
- this.deleteRange(var1, (Vector)null);
- if (var2 != null && !var2.equals("")) {
- this.disableAttachmentNotification();
- int var4 = var1.index;
- int var5 = 0;
- int var6 = var2.indexOf(10);
- if (var6 == -1) {
- this.insertString(var2, var4);
- this.enableResizing();
- if (var9 > 0) {
- this.sizeBy(0, this.adjustCharCountsAndSpacing(var9 - 1) - super.bounds.height);
- } else {
- this.sizeToMinSize();
- }
-
- this.enableAttachmentNotification();
- if (this._owner != null) {
- this._owner.textDidChange(this, new Range(var1.index, var2.length()));
- }
-
- } else {
- this.insertString(var2.substring(var5, var6), var4);
- this.insertReturn(var4 + (var6 - var5));
- var4 += var6 - var5 + 1;
- int var7 = var2.length() - 1;
-
- while(var6 < var7) {
- var5 = var6 + 1;
- var6 = var2.indexOf(10, var5);
- if (var6 == -1) {
- var6 = var7 + 1;
- var8 = false;
- }
-
- if (var6 > var5) {
- String var3 = var2.substring(var5, var6);
- this.insertString(var3, var4);
- if (var8) {
- this.insertReturn(var4 + (var6 - var5));
- }
-
- var4 += var6 - var5 + 1;
- } else {
- this.insertReturn(var4);
- ++var4;
- }
- }
-
- this.enableResizing();
- if (var9 > 0) {
- this.sizeBy(0, this.adjustCharCountsAndSpacing(var9 - 1) - super.bounds.height);
- } else {
- this.sizeToMinSize();
- }
-
- this.enableAttachmentNotification();
- if (this._owner != null) {
- this._owner.textDidChange(this, new Range(var1.index, var2.length()));
- }
-
- }
- } else {
- this.enableResizing();
- if (var9 > 0) {
- this.sizeBy(0, this.adjustCharCountsAndSpacing(var9 - 1) - super.bounds.height);
- } else {
- this.sizeToMinSize();
- }
-
- if (this._owner != null) {
- this._owner.textDidChange(this, new Range(var1.index, 0));
- }
-
- }
- }
- }
-
- public String stringForRange(Range var1) {
- TextParagraph var2 = this._paragraphForIndex(var1.index);
- TextParagraph var3 = this._paragraphForIndex(var1.index + var1.length);
- if (var2 == null) {
- return null;
- } else {
- if (var3 == null) {
- var3 = this.lastParagraph();
- }
-
- if (var2 == var3) {
- return var2.stringForRange(var1);
- } else {
- StringBuffer var5 = new StringBuffer();
- Range var6 = allocateRange();
- int var7 = this._paragraphVector.indexOfIdentical(var2);
-
- for(int var8 = this._paragraphVector.indexOfIdentical(var3); var7 <= var8; ++var7) {
- var6.index = var1.index;
- var6.length = var1.length;
- TextParagraph var4 = (TextParagraph)this._paragraphVector.elementAt(var7);
- var6.intersectWith(var4.range());
- var5.append(var4.stringForRange(var6));
- }
-
- recycleRange(var6);
- return var5.toString();
- }
- }
- }
-
- public void setAttributesForRange(Hashtable var1, Range var2) {
- Range var3 = this.paragraphsRangeForRange(var2);
- int var6 = var3.index;
-
- for(int var7 = var3.index + var3.length; var6 < var7; ++var6) {
- ((TextParagraph)this._paragraphVector.elementAt(var6)).setFormat((TextParagraphFormat)null);
- }
-
- Vector var4 = this.createAndReturnRunsForRange(var2);
- var6 = 0;
-
- for(int var9 = var4.count(); var6 < var9; ++var6) {
- TextStyleRun var5 = (TextStyleRun)var4.elementAt(var6);
- var5.setAttributes((Hashtable)null);
- }
-
- this.addAttributesForRange(var1, var2);
- }
-
- public Hashtable attributesAtIndex(int var1) {
- TextStyleRun var2 = this._runForIndex(var1);
- TextParagraph var3 = this._paragraphForIndex(var1);
- if (var2 != null && var3 != null) {
- Hashtable var4 = var2.attributes();
- if (var4 == null) {
- TextParagraphFormat var7 = var3.format();
- if (var7 == null) {
- return this._defaultAttributes;
- } else {
- Hashtable var8 = (Hashtable)this._defaultAttributes.clone();
- var8.put("ParagraphFormatKey", var7);
- return var8;
- }
- } else {
- TextParagraphFormat var5 = var3.format();
- Hashtable var6 = (Hashtable)var4.clone();
- if (var5 != null) {
- var6.put("ParagraphFormatKey", var5);
- } else {
- var6.put("ParagraphFormatKey", this._defaultAttributes.get("ParagraphFormatKey"));
- }
-
- return var6;
- }
- } else {
- return this._defaultAttributes;
- }
- }
-
- public int length() {
- return this._charCount - 1;
- }
-
- public String string() {
- Range var2 = allocateRange(0, this.length());
- String var1 = this.stringForRange(var2);
- recycleRange(var2);
- return var1;
- }
-
- public void setString(String var1) {
- Range var2 = allocateRange(0, this.length());
- this.replaceRangeWithString(var2, var1);
- recycleRange(var2);
- }
-
- public Range appendString(String var1) {
- Range var2 = allocateRange(this.length(), 0);
- this.replaceRangeWithString(var2, var1);
- var2.length = var1.length();
- return var2;
- }
-
- public void replaceRangeWithTextAttachment(Range var1, TextAttachment var2) {
- this.replaceRangeWithString(var1, "@");
- Hashtable var3 = new Hashtable();
- var3.put("TextAttachmentKey", var2);
- Range var4 = allocateRange(var1.index, 1);
- this.addAttributesForRange(var3, var4);
- recycleRange(var4);
- }
-
- public void addAttributesForRange(Hashtable var1, Range var2) {
- if (this._owner != null) {
- this._owner.attributesWillChange(this, var2);
- }
-
- this.addAttributesForRangeWithoutNotification(var1, var2);
- if (this._owner != null) {
- this._owner.attributesDidChange(this, var2);
- }
-
- }
-
- public void addAttributeForRange(String var1, Object var2, Range var3) {
- Hashtable var4 = new Hashtable();
- var4.put(var1, var2);
- this.addAttributesForRange(var4, var3);
- }
-
- public void removeAttributeForRange(String var1, Range var2) {
- Vector var3 = this.runsForRange(var2);
- Range var7 = allocateRange();
- int var4 = 0;
-
- for(int var5 = var3.count(); var4 < var5; ++var4) {
- Range var6 = (Range)var3.elementAt(var4);
- TextStyleRun var8 = this._runForIndex(var6.index);
- Hashtable var9 = var8.attributes();
- if (var9 != null && var9.get(var1) != null) {
- Hashtable var10 = (Hashtable)var9.clone();
- var10.remove(var1);
- var7.index = var2.index;
- var7.length = var2.length;
- var7.intersectWith(var6);
- this.setAttributesForRange(var10, var7);
- }
- }
-
- }
-
- public void addDefaultAttribute(String var1, Object var2) {
- Hashtable var3 = this.defaultAttributes();
- var3.put(var1, var2);
- this.setDefaultAttributes(var3);
- }
-
- public Vector runsForRange(Range var1) {
- Vector var4 = new Vector();
- boolean var10 = false;
- if (var1.length == 0) {
- Range var11 = this.runForIndex(var1.index);
- if (!var11.isNullRange()) {
- var4.addElement(var11);
- }
-
- return var4;
- } else {
- TextStyleRun var2 = this._runForIndex(var1.index);
- if (var2 == null) {
- var2 = this._runForIndex(0);
- }
-
- TextStyleRun var3 = this._runForIndex(var1.index + var1.length() - 1);
- if (var3 == null) {
- var3 = this._runForIndex(this.length() - 1);
- }
-
- Vector var5 = var2.paragraph().runVector();
- int var7;
- if (var2.paragraph() == var3.paragraph()) {
- var7 = var5.indexOfIdentical(var3) + 1;
- var10 = true;
- } else {
- var7 = var5.count();
- var10 = false;
- }
-
- for(int var6 = var5.indexOfIdentical(var2); var6 < var7; ++var6) {
- var4.addElement(((TextStyleRun)var5.elementAt(var6)).range());
- }
-
- if (!var10) {
- int var14 = this._paragraphVector.indexOfIdentical(var2.paragraph()) + 1;
-
- for(int var16 = this._paragraphVector.indexOfIdentical(var3.paragraph()); var14 < var16; ++var14) {
- var5 = ((TextParagraph)this._paragraphVector.elementAt(var14)).runVector();
- int var8 = 0;
-
- for(int var9 = var5.count(); var8 < var9; ++var8) {
- var4.addElement(((TextStyleRun)var5.elementAt(var8)).range());
- }
- }
-
- var5 = var3.paragraph().runVector();
- var14 = 0;
-
- for(int var17 = var5.indexOfIdentical(var3); var14 <= var17; ++var14) {
- var4.addElement(((TextStyleRun)var5.elementAt(var14)).range());
- }
- }
-
- return var4;
- }
- }
-
- public Vector paragraphsForRange(Range var1) {
- Range var2 = this.paragraphsRangeForRange(var1);
- Vector var5 = new Vector();
- int var3 = var2.index;
-
- for(int var4 = var2.index + var2.length; var3 < var4; ++var3) {
- Range var6 = ((TextParagraph)this._paragraphVector.elementAt(var3)).range();
- if (var3 == var4 - 1) {
- --var6.length;
- }
-
- var5.addElement(var6);
- }
-
- return var5;
- }
-
- public Range runForIndex(int var1) {
- TextStyleRun var2 = this._runForIndex(var1);
- return var2 == null ? allocateRange() : var2.range();
- }
-
- public Range paragraphForIndex(int var1) {
- Range var3 = allocateRange(var1, 0);
- Vector var2 = this.paragraphsForRange(var3);
- recycleRange(var3);
- return var2.count() > 0 ? (Range)var2.elementAt(0) : allocateRange();
- }
-
- public Range paragraphForPoint(int var1, int var2) {
- TextParagraph var3 = this._paragraphForPoint(var1, var2);
- return var3 != null ? var3.range() : allocateRange();
- }
-
- public Range runForPoint(int var1, int var2) {
- TextPositionInfo var3 = this.positionForPoint(var1, var2, true);
- if (var3 != null) {
- TextStyleRun var4 = this._runForIndex(var3._absPosition);
- if (var4 != null) {
- return var4.range();
- }
- }
-
- return allocateRange();
- }
-
- public int indexForPoint(int var1, int var2) {
- TextPositionInfo var3 = this.positionForPoint(var1, var2, true);
- return var3 != null ? var3._absPosition : -1;
- }
-
- public Vector rectsForRange(Range var1) {
- return this.rectsForRange(var1, (Rect)null);
- }
-
- public Range selectedRange() {
- if (this._selectedRange == null) {
- this._selectedRange = allocateRange();
- }
-
- this._selectedRange.index = this._selection.selectionStart();
- if (this._selectedRange.index < 0) {
- return allocateRange();
- } else {
- this._selectedRange.length = this._selection.selectionEnd() - this._selection.selectionStart();
- return this._selectedRange;
- }
- }
-
- public void selectRange(Range var1) {
- if (var1.isNullRange()) {
- this._selection.clearRange();
- } else {
- this._selection.setRange(var1.index(), var1.lastIndex() + 1);
- }
-
- this._selectionChanged();
- }
-
- public boolean hasSelection() {
- Range var1 = this.selectedRange();
- return !var1.isNullRange();
- }
-
- public void insertHTMLElementsInRange(Vector var1, Range var2, Hashtable var3) {
- int[] var6 = new int[var1.count()];
- int var7 = 0;
- int var8 = 0;
- Hashtable var9 = new Hashtable();
- FastStringBuffer var10 = new FastStringBuffer();
- if (var3 == null) {
- var3 = this.defaultAttributes();
- }
-
- Hashtable var11 = attributesByRemovingStaticAttributes(var3);
- ((View)this).setDirty(true);
- this.disableResizing();
- var10.setDoublesCapacityWhenGrowing(true);
- int var4 = 0;
-
- for(int var5 = var1.count(); var4 < var5; ++var4) {
- ((TextViewHTMLElement)var1.elementAt(var4)).appendString(var9, var10);
- if (var4 == 0) {
- var8 = var6[0] = var10.length();
- } else {
- var6[var4] = var10.length() - var8;
- var8 += var6[var4];
- }
- }
-
- this.replaceRangeWithString(var2, var10.toString());
- this.disableFormatting();
- var4 = 0;
-
- for(int var13 = var1.count(); var4 < var13; ++var4) {
- ((TextViewHTMLElement)var1.elementAt(var4)).setAttributesStartingAt(var2.index + var7, var11, this, var9);
- var7 += var6[var4];
- }
-
- this.enableFormatting();
- this.reformatAll();
- this.enableResizing();
- this.sizeToMinSize();
- }
-
- public void importHTMLInRange(InputStream var1, Range var2, URL var3) throws IOException, HTMLParsingException {
- this.importHTMLInRange(var1, var2, var3, this.defaultAttributes());
- }
-
- public void importHTMLInRange(InputStream var1, Range var2, URL var3, Hashtable var4) throws IOException, HTMLParsingException {
- Vector var5 = new Vector();
- this.validateHTMLParsingRules();
- HTMLParser var6 = new HTMLParser(var1, this._htmlParsingRules);
-
- HTMLElement var7;
- try {
- while((var7 = var6.nextHTMLElement()) != null) {
- var5.addElement(var7);
- }
- } catch (InstantiationException var8) {
- throw new InconsistencyException("Cannot intantiate HTML storage");
- } catch (IllegalAccessException var9) {
- throw new InconsistencyException("Cannot access HTML storage classes");
- }
-
- this.setBaseURL(var3);
- this.insertHTMLElementsInRange(var5, var2, var4);
- }
-
- public void importHTMLFromURLString(String var1) {
- Range var2 = allocateRange(0, this.length());
-
- try {
- URL var3 = new URL(var1);
- InputStream var4 = var3.openStream();
- this.importHTMLInRange(var4, var2, var3, this.defaultAttributes());
- var2.index = 0;
- var2.length = 0;
- this.selectRange(var2);
- this.scrollRangeToVisible(var2);
- } catch (MalformedURLException var6) {
- System.err.println("Bad URL " + var1);
- } catch (IOException var7) {
- System.err.println("IOException while reading " + var1);
- } catch (HTMLParsingException var8) {
- System.err.println("At line " + var8.lineNumber() + ":" + var8);
- }
-
- recycleRange(var2);
- }
-
- public void setHTMLParsingRules(HTMLParsingRules var1) {
- this._htmlParsingRules = var1;
- }
-
- public HTMLParsingRules htmlParsingRules() {
- this.validateHTMLParsingRules();
- return this._htmlParsingRules;
- }
-
- public Range runWithLinkDestinationNamed(String var1) {
- TextStyleRun var7 = null;
- Range var9 = null;
- int var2 = 0;
-
- for(int var3 = this._paragraphVector.count(); var2 < var3; ++var2) {
- TextParagraph var6 = (TextParagraph)this._paragraphVector.elementAt(var2);
- int var4 = 0;
-
- for(int var5 = var6._runVector.count(); var4 < var5; ++var4) {
- var7 = (TextStyleRun)var6._runVector.elementAt(var4);
- String var8;
- if (var7._attributes != null && (var8 = (String)var7._attributes.get("LinkDestinationKey")) != null && var8.equals(var1)) {
- var9 = var7.range();
- break;
- }
- }
-
- if (var9 != null) {
- break;
- }
- }
-
- if (var9 == null) {
- return new Range();
- } else {
- if (var7 != null) {
- for(Range var10 = var9; var9.length == 0; var9 = var7.range()) {
- var7 = this.runAfter(var7);
- if (var7 == null) {
- var9 = var10;
- break;
- }
- }
- }
-
- return var9;
- }
- }
-
- public void describeClassInfo(ClassInfo var1) {
- super.describeClassInfo(var1);
- var1.addClass("netscape.application.TextView", 2);
- var1.addField("paragraphVector", (byte)18);
- var1.addField("backgroundColor", (byte)18);
- var1.addField("selectionColor", (byte)18);
- var1.addField("filter", (byte)18);
- var1.addField("defaultAttributes", (byte)18);
- var1.addField("paragraphSpacing", (byte)8);
- var1.addField("useSingleFont", (byte)0);
- var1.addField("editable", (byte)0);
- var1.addField("selectable", (byte)0);
- var1.addField("transparent", (byte)0);
- var1.addField("htmlParsingRules", (byte)18);
- var1.addField("owner", (byte)18);
- }
-
- public void encode(Encoder var1) throws CodingException {
- super.encode(var1);
- var1.encodeObject("paragraphVector", this._paragraphVector);
- var1.encodeObject("backgroundColor", this._backgroundColor);
- var1.encodeObject("selectionColor", this._selectionColor);
- var1.encodeObject("filter", (Codable)this._filter);
- var1.encodeObject("defaultAttributes", this._defaultAttributes);
- var1.encodeInt("paragraphSpacing", this._paragraphSpacing);
- var1.encodeBoolean("useSingleFont", this._useSingleFont);
- var1.encodeBoolean("editable", this._editable);
- var1.encodeBoolean("selectable", this._selectable);
- var1.encodeBoolean("transparent", this.transparent);
- var1.encodeObject("htmlParsingRules", this._htmlParsingRules);
- var1.encodeObject("owner", this._owner);
- }
-
- public void decode(Decoder var1) throws CodingException {
- int var2 = var1.versionForClassName("netscape.application.TextView");
- super.decode(var1);
- this._paragraphVector = (Vector)var1.decodeObject("paragraphVector");
- this._backgroundColor = (Color)var1.decodeObject("backgroundColor");
- this._selectionColor = (Color)var1.decodeObject("selectionColor");
- this._filter = (TextFilter)var1.decodeObject("filter");
- this._defaultAttributes = (Hashtable)var1.decodeObject("defaultAttributes");
- this._paragraphSpacing = var1.decodeInt("paragraphSpacing");
- this._useSingleFont = var1.decodeBoolean("useSingleFont");
- this._editable = var1.decodeBoolean("editable");
- this._selectable = var1.decodeBoolean("selectable");
- this.transparent = var1.decodeBoolean("transparent");
- if (var2 >= 2) {
- this._htmlParsingRules = (HTMLParsingRules)var1.decodeObject("htmlParsingRules");
- this._owner = (TextViewOwner)var1.decodeObject("owner");
- }
-
- }
-
- public void finishDecoding() throws CodingException {
- super.finishDecoding();
- this._defaultFontMetricsCache = null;
- int var2 = this._paragraphVector.count();
-
- while(var2-- > 0) {
- TextParagraph var1 = (TextParagraph)this._paragraphVector.elementAt(var2);
- var1.setOwner(this);
- }
-
- this.reformatAll();
- }
-
- public int lineCount() {
- int var3 = 0;
- int var1 = 0;
-
- for(int var2 = this._paragraphVector.count(); var1 < var2; ++var1) {
- TextParagraph var4 = (TextParagraph)this._paragraphVector.elementAt(var1);
- var3 += var4.lineCount();
- }
-
- return var3;
- }
-
- public URL baseURL() {
- return this._baseURL;
- }
-
- public boolean canBecomeSelectedView() {
- return this.isEditable() || this.isSelectable();
- }
-
- public void willBecomeSelected() {
- ((View)this).setFocusedView();
- }
-
- public static String stringWithoutCarriageReturns(String var0) {
- FastStringBuffer var1 = new FastStringBuffer();
- int var2 = 0;
-
- for(int var3 = var0.length(); var2 < var3; ++var2) {
- char var4 = var0.charAt(var2);
- if (var4 != '\r' || var2 + 1 >= var3 || var0.charAt(var2 + 1) != '\n') {
- var1.append(var4);
- }
- }
-
- return var1.toString();
- }
-
- FontMetrics defaultFontMetrics() {
- if (this._defaultFontMetricsCache == null) {
- this._defaultFontMetricsCache = this.font().fontMetrics();
- }
-
- return this._defaultFontMetricsCache;
- }
-
- static Hashtable attributesByRemovingStaticAttributes(Hashtable var0) {
- if (var0 == null) {
- return null;
- } else {
- Hashtable var1 = (Hashtable)var0.clone();
- var1.remove("TextAttachmentKey");
- var1.remove("TextAttachmentBaselineOffsetKey");
- return var1;
- }
- }
-
- private void addParagraph(TextParagraph var1) {
- if (var1 != null) {
- var1.setOwner(this);
- this._paragraphVector.addElement(var1);
- }
- }
-
- synchronized void _setEditing(boolean var1) {
- this._editing = var1;
- }
-
- synchronized boolean isEditing() {
- return this._editing;
- }
-
- private void reformatAll() {
- Range var5 = this.selectedRange();
- int var2 = 0;
- this._charCount = 0;
- int var4 = this._paragraphVector.count();
- if (this.formattingEnabled()) {
- for(int var3 = 0; var3 < var4; ++var3) {
- TextParagraph var1 = (TextParagraph)this._paragraphVector.elementAt(var3);
- var1._y = var2;
- var1._startChar = this._charCount;
- var1.computeLineBreaksAndHeights(super.bounds.width);
- var2 += var1._height + this._paragraphSpacing;
- this._charCount += var1._charCount;
- }
-
- this.sizeBy(0, var2 - super.bounds.height);
- this.notifyAttachmentsForRange(new Range(0, this.length()), true);
- this.selectRange(var5);
- }
- }
-
- void disableFormatting() {
- ++this._formattingDisabled;
- }
-
- void enableFormatting() {
- --this._formattingDisabled;
- if (this._formattingDisabled < 0) {
- this._formattingDisabled = 0;
- }
-
- }
-
- boolean formattingEnabled() {
- return this._formattingDisabled == 0;
- }
-
- private void formatParagraphAtIndex(int var1) {
- Range var8 = new Range();
- if (this.formattingEnabled()) {
- if (var1 != -1) {
- TextParagraph var3 = (TextParagraph)this._paragraphVector.elementAt(var1);
- int var4 = var1 - 1;
- if (var4 >= -1) {
- int var7;
- if (var4 == -1) {
- this._charCount = 0;
- var7 = 0;
- } else {
- TextParagraph var2 = (TextParagraph)this._paragraphVector.elementAt(var4);
- this._charCount = var2._startChar + var2._charCount;
- var7 = var2._y + var2._height + this._paragraphSpacing;
- }
-
- var3.setY(var7);
- var3.setStartChar(this._charCount);
- var3.computeLineBreaksAndHeights(super.bounds.width);
- this._charCount += var3._charCount;
- var7 += var3._height + this._paragraphSpacing;
- int var5 = this._paragraphVector.count();
-
- for(int var6 = var1 + 1; var6 < var5; ++var6) {
- TextParagraph var9 = (TextParagraph)this._paragraphVector.elementAt(var6);
- var9.setY(var7);
- var9.setStartChar(this._charCount);
- var7 += var9._height + this._paragraphSpacing;
- this._charCount += var9._charCount;
- }
-
- var8.index = var3._startChar;
- var8.unionWith(this.lastParagraph().range());
- this.sizeBy(0, var7 - super.bounds.height);
- this.notifyAttachmentsForRange(var8, true);
- }
- }
- }
- }
-
- private void formatParagraph(TextParagraph var1) {
- this.formatParagraphAtIndex(this._paragraphVector.indexOfIdentical(var1));
- }
-
- private int adjustCharCountsAndSpacing(int var1) {
- int var3 = this._charCount = 0;
- if (var1 > 0) {
- TextParagraph var2 = (TextParagraph)this._paragraphVector.elementAt(var1 - 1);
- var3 = var2._y + var2._height + this._paragraphSpacing;
- this._charCount = var2._startChar + var2._charCount;
- }
-
- int var5 = this._paragraphVector.count();
-
- for(int var4 = var1; var4 < var5; ++var4) {
- TextParagraph var6 = (TextParagraph)this._paragraphVector.elementAt(var4);
- var6._y = var3;
- var6._startChar = this._charCount;
- var3 += var6._height + this._paragraphSpacing;
- this._charCount += var6._charCount;
- }
-
- return var3;
- }
-
- private int adjustCharCountsAndSpacing() {
- return this.adjustCharCountsAndSpacing(0);
- }
-
- int _paragraphIndexForIndex(int var1) {
- int var3 = this._paragraphVector.count();
- if (var1 > this.length() / 2) {
- for(int var4 = var3 - 1; var4 >= 0; --var4) {
- TextParagraph var2 = (TextParagraph)this._paragraphVector.elementAt(var4);
- if (var1 >= var2._startChar && var1 < var2._startChar + var2._charCount) {
- return var4;
- }
- }
- } else {
- for(int var6 = 0; var6 < var3; ++var6) {
- TextParagraph var5 = (TextParagraph)this._paragraphVector.elementAt(var6);
- if (var1 >= var5._startChar && var1 < var5._startChar + var5._charCount) {
- return var6;
- }
- }
- }
-
- return -1;
- }
-
- TextParagraph _paragraphForIndex(int var1) {
- int var2 = this._paragraphIndexForIndex(var1);
- return var2 != -1 ? (TextParagraph)this._paragraphVector.elementAt(var2) : null;
- }
-
- private TextParagraph _paragraphForPoint(int var1, int var2) {
- if (var2 < 0) {
- var2 = 0;
- var1 = 0;
- }
-
- int var4 = this._paragraphVector.count();
- int var6 = 0;
-
- for(int var5 = 0; var5 < var4; ++var5) {
- TextParagraph var3 = (TextParagraph)this._paragraphVector.elementAt(var5);
- int var7 = var6 + var3._height;
- if (var2 >= var6 && var2 < var7) {
- return var3;
- }
-
- var6 = var7;
- }
-
- return null;
- }
-
- TextPositionInfo positionInfoForIndex(int var1) {
- TextParagraph var2 = this._paragraphForIndex(var1);
- if (var2 == null) {
- var2 = this.lastParagraph();
- }
-
- return var2._infoForPosition(var1);
- }
-
- private TextPositionInfo positionForPoint(int var1, int var2, boolean var3) {
- if (var2 < 0) {
- var2 = 0;
- var1 = 0;
- }
-
- TextParagraph var4 = this._paragraphForPoint(var1, var2);
- if (var4 == null) {
- return this._charCount == 0 ? this.lastParagraph().infoForPosition(this._charCount, var2) : this.lastParagraph().infoForPosition(this._charCount - 1, var2);
- } else {
- return var4.positionForPoint(var1, var2, var3);
- }
- }
-
- void drawInsertionPoint() {
- Rect var1 = this._selection.insertionPointRect();
- ((View)this).addDirtyRect(var1);
- returnRect(var1);
- }
-
- private void insertString(String var1, int var2) {
- int var11 = 0;
- if (var1 != null) {
- int var14 = this._paragraphIndexForIndex(var2);
- if (var14 != -1) {
- TextParagraph var3 = (TextParagraph)this._paragraphVector.elementAt(var14);
- if (var3 != null) {
- TextParagraph var4 = this.lastParagraph();
- if (var4 != null) {
- int var10000 = var4._y + var4._height;
- } else {
- boolean var9 = false;
- }
-
- TextPositionInfo var7 = this.positionInfoForIndex(var2);
- if (var7 == null) {
- var7 = var3.infoForPosition(var2, -1);
- }
-
- TextPositionInfo var6 = var3.insertCharOrStringAt('\u0000', var1, var2);
- var11 = var1.length();
- this._charCount += var11;
- if (var6 == null) {
- this._selection.showInsertionPoint();
- } else if (((View)this).isDirty() && super.dirtyRect == null) {
- Range var17 = new Range(var3._startChar, this.length() - var3._startChar);
- this.notifyAttachmentsForRange(var17, true);
- } else {
- var6.setAbsPosition(var2 + var11);
- TextParagraphFormat var13 = var3.currentParagraphFormat();
- if (var6._redrawCurrentLineOnly && var13._justification == 0) {
- TextParagraph var5 = this._updateParagraph;
- int var10 = this._updateLine;
- this._updateParagraph = var3;
- this._updateLine = var6._updateLine;
- this._drawText = false;
- Rect var8 = var3.rectForLine(var6._lineNumber);
- var8.setBounds(var7._x, var8.y, var8.width - (var7._x - var8.x), var8.height);
- ((View)this).addDirtyRect(var8);
- returnRect(var8);
- this._drawText = true;
- this._updateParagraph = var5;
- this._updateLine = var10;
- this.notifyAttachmentsForRange(var6.lineRange(), true);
- } else if (!var6._redrawCurrentParagraphOnly && !var6._redrawCurrentLineOnly) {
- Range var16 = new Range(var3._startChar, this.length() - var3._startChar);
- this.notifyAttachmentsForRange(var16, true);
- this.dirtyRange(var16);
- } else {
- Range var12 = var3.range();
- this.notifyAttachmentsForRange(var12, true);
- this.dirtyRange(var12);
- }
- }
- }
- }
- }
- }
-
- private void fastDeleteChar(boolean var1) {
- if (this.isEditing()) {
- int var12 = this._selection.insertionPoint();
- if (var1 || var12 != 0) {
- if (!var1 || var12 != this.length()) {
- if (var1) {
- ++var12;
- }
-
- TextParagraph var2 = this._paragraphForIndex(var12);
- if (var2 != null) {
- this.notifyAttachmentsForRange(new Range(var12, 1), false);
- TextParagraph var3 = this.lastParagraph();
- if (var3 != null) {
- int var10000 = var3._y + var3._height;
- } else {
- boolean var9 = false;
- }
-
- TextPositionInfo var6;
- if (var2._startChar == var12 && !this.isOnlyParagraph(var2)) {
- int var11 = this._paragraphVector.indexOfIdentical(var2);
- TextParagraph var4 = (TextParagraph)this._paragraphVector.elementAt(var11 - 1);
- if (var4 != null) {
- var4.subsumeParagraph(var2);
- this._paragraphVector.removeElement(var2);
- var2 = var4;
- this.formatParagraph(var4);
- }
-
- if (var12 == 0) {
- var6 = var2.infoForPosition(0, -1);
- } else {
- var6 = var2.infoForPosition(var12 - 1, -1);
- }
- } else {
- var6 = var2.removeCharAt(var12);
- --this._charCount;
- }
-
- int var10 = this.adjustCharCountsAndSpacing();
- this.sizeBy(0, var10 - super.bounds.height);
- if (var6 == null) {
- this._selection.showInsertionPoint();
- } else {
- this.notifyAttachmentsForRange(var6._textRun._paragraph.range(), true);
- if (!var1) {
- if (var12 == 0) {
- var6.setAbsPosition(0);
- } else {
- var6.setAbsPosition(var12 - 1);
- }
-
- this._selection.setInsertionPoint(var6);
- this._selectionChanged();
- } else {
- this._selection.setInsertionPoint(var6);
- }
-
- TextParagraphFormat var14 = var2.currentParagraphFormat();
- if (var6._redrawCurrentLineOnly && var14._justification == 0) {
- TextParagraph var5 = this._updateParagraph;
- int var13 = this._updateLine;
- this._updateParagraph = var2;
- this._updateLine = var6._updateLine;
- this._drawText = false;
- Rect var8 = var2.rectForLine(var6._lineNumber);
- var8.setBounds(var6._x, var8.y, var8.width - (var6._x - var8.x), var8.height);
- ((View)this).addDirtyRect(var8);
- returnRect(var8);
- this._drawText = true;
- this._updateParagraph = var5;
- this._updateLine = var13;
- } else if (!var6._redrawCurrentParagraphOnly && !var6._redrawCurrentLineOnly) {
- Range var15 = allocateRange(var2._startChar, this.length() - var2._startChar);
- this.dirtyRange(var15);
- recycleRange(var15);
- } else {
- this.dirtyRange(var2.range());
- }
- }
- }
- }
- }
- }
- }
-
- private Rect insertReturn() {
- if (this._selection.isARange()) {
- this.deleteSelection();
- }
-
- int var2 = this._selection.insertionPoint();
- Rect var1 = this.insertReturn(var2);
- this._selection.setRange(var2 + 1, var2 + 1);
- this._selectionChanged();
- return var1;
- }
-
- private Rect insertReturn(int var1) {
- int var4 = this._paragraphIndexForIndex(var1);
- if (var4 == -1) {
- var4 = this._paragraphVector.count() - 1;
- }
-
- TextParagraph var2 = (TextParagraph)this._paragraphVector.elementAt(var4);
- TextParagraph var3 = var2;
- var2 = var2.createNewParagraphAt(var1);
- this.formatParagraphAtIndex(var4);
- ++this._charCount;
- this._paragraphVector.insertElementAt(var2, var4 + 1);
- this.formatParagraphAtIndex(var4 + 1);
- return newRect(0, var3._y, super.bounds.width, super.bounds.height - var3._y);
- }
-
- private TextStyleRun _runForIndex(int var1) {
- int var2 = this.length();
- if (var2 > 0 && var1 >= var2) {
- return this._runForIndex(var2 - 1);
- } else if (var1 >= 0) {
- TextParagraph var3 = this._paragraphForIndex(var1);
- return var3 != null ? var3.runForCharPosition(var1) : null;
- } else {
- return null;
- }
- }
-
- private boolean equalsAttributesHint(Hashtable var1, Hashtable var2) {
- if (var1 == var2) {
- return true;
- } else {
- return var1 != null && var2 != null ? false : false;
- }
- }
-
- private void _keyDown() {
- Event var6 = (Event)this._eventVector.removeFirstElement();
- if (var6 instanceof KeyEvent) {
- KeyEvent var5 = (KeyEvent)var6;
- this._selection.disableInsertionPoint();
- int var7 = this._selection.insertionPoint();
- this._paragraphForIndex(var7);
- boolean var9 = true;
- if (var5.isReturnKey()) {
- Range var10 = new Range(this.selectedRange());
- if (this._owner != null) {
- this._owner.textWillChange(this, var10);
- }
-
- Rect var4 = this.insertReturn();
- if (this._owner != null) {
- var10.length = 1;
- this._owner.textDidChange(this, var10);
- }
-
- ((View)this).draw(var4);
- returnRect(var4);
- } else if (var5.isLeftArrowKey()) {
- if (var5.isShiftKeyDown()) {
- int var8 = this._selection.orderedSelectionEnd() - 1;
- if (var8 < 0) {
- var8 = 0;
- }
-
- this._selection.setRange(this._selection.orderedSelectionStart(), var8, true);
- } else if (var7 == -1) {
- this._selection.setRange(this._selection.selectionStart(), this._selection.selectionStart(), true);
- } else {
- int var15 = var7 - 1;
- if (var15 < 0) {
- var15 = 0;
- }
-
- this._selection.setRange(var15, var15, true);
- }
-
- this._selectionChanged();
- } else if (var5.isRightArrowKey()) {
- if (var5.isShiftKeyDown()) {
- this._selection.setRange(this._selection.orderedSelectionStart(), this._selection.orderedSelectionEnd() + 1, false);
- } else if (var7 == -1) {
- this._selection.setRange(this._selection.selectionEnd(), this._selection.selectionEnd());
- } else {
- this._selection.setRange(var7 + 1, var7 + 1, false);
- }
-
- this._selectionChanged();
- } else if (var5.isUpArrowKey()) {
- TextPositionInfo var3 = this._selection.orderedSelectionEndInfo();
- TextPositionInfo var2 = this.positionForPoint(var3._x, var3._y - 1, false);
- if (var2 != null) {
- var2.representCharacterBeforeEndOfLine();
- if (var5.isShiftKeyDown()) {
- if (var2._absPosition == var3._absPosition && var2._absPosition > 0) {
- this._selection.setRange(this._selection.orderedSelectionStart(), var2._absPosition - 1, (TextPositionInfo)null, false, true);
- } else {
- this._selection.setRange(this._selection.orderedSelectionStart(), var2._absPosition, var2, false, true);
- }
- } else if (var3._lineNumber != 0 || var3._textRun._paragraph != this._paragraphVector.elementAt(0)) {
- this._selection.setInsertionPoint(var2);
- }
-
- this._selectionChanged();
- }
- } else if (var5.isDownArrowKey()) {
- TextPositionInfo var14 = this._selection.orderedSelectionEndInfo();
- var14.representCharacterBeforeEndOfLine();
- TextPositionInfo var13 = this.positionForPoint(var14._x, var14._y + var14._lineHeight + 1, false);
- if (var13 != null) {
- if (var5.isShiftKeyDown()) {
- this._selection.setRange(this._selection.orderedSelectionStart(), var13._absPosition, var13, false, false);
- } else if (var13._textRun._paragraph != var14._textRun._paragraph || var13._y != var14._y) {
- this._selection.setInsertionPoint(var13);
- }
-
- this._selectionChanged();
- }
- } else if (var5.isHomeKey()) {
- this.selectedRange();
- TextPositionInfo var16 = this._selection.orderedSelectionEndInfo();
- Range var11 = this.lineForPosition(var16);
- TextPositionInfo var12 = this.positionInfoForIndex(var11.index);
- if (var12 != null) {
- if (var12._y != var16._y) {
- var12.representCharacterAfterEndOfLine();
- }
-
- if (var5.isShiftKeyDown()) {
- if (var12._absPosition != var16._absPosition) {
- this._selection.setRange(this._selection.orderedSelectionStart(), var12._absPosition, var12, false, false);
- }
- } else {
- this._selection.setInsertionPoint(var12);
- }
- }
-
- this._selectionChanged();
- } else if (var5.isEndKey()) {
- this.selectedRange();
- TextPositionInfo var17 = this._selection.orderedSelectionEndInfo();
- Range var23 = this.lineForPosition(var17);
- TextPositionInfo var26 = this.positionInfoForIndex(var23.index + var23.length);
- if (var26 != null) {
- if (var26._y != var17._y) {
- var26.representCharacterAfterEndOfLine();
- }
-
- if (var5.isShiftKeyDown()) {
- if (var26._absPosition != var17._absPosition) {
- this._selection.setRange(this._selection.orderedSelectionStart(), var26._absPosition, var26, false, false);
- }
- } else {
- this._selection.setInsertionPoint(var26);
- }
- }
-
- this._selectionChanged();
- } else if (var5.isBackspaceKey()) {
- Range var18 = new Range(this.selectedRange());
- if (this._selection.isARange()) {
- if (this._owner != null) {
- this._owner.textWillChange(this, var18);
- }
-
- this.deleteSelection();
- if (this._owner != null) {
- var18.length = 0;
- this._owner.textDidChange(this, var18);
- }
- } else {
- if (this._owner != null) {
- --var18.index;
- var18.length = 1;
- this._owner.textWillChange(this, var18);
- }
-
- this.fastDeleteChar(false);
- if (this._owner != null) {
- var18.length = 0;
- this._owner.textDidChange(this, var18);
- }
- }
- } else if (var5.isDeleteKey()) {
- Range var19 = this.selectedRange();
- if (this._selection.isARange()) {
- if (this._owner != null) {
- this._owner.textWillChange(this, var19);
- }
-
- this.deleteSelection();
- if (this._owner != null) {
- var19.length = 0;
- this._owner.textDidChange(this, var19);
- }
- } else if (var19.index < this.length()) {
- var19.length = 1;
- if (this._owner != null) {
- this._owner.textWillChange(this, var19);
- }
-
- this.fastDeleteChar(true);
- var19.length = 0;
- if (this._owner != null) {
- this._owner.textDidChange(this, var19);
- }
- }
- } else if (var5.isPrintableKey()) {
- Range var20 = this.selectedRange();
- Range var24 = allocateRange();
- this.replaceRangeWithString(var20, "" + (char)var5.key);
- if (this._typingAttributes.count() > 0) {
- var24.index = var20.index;
- var24.length = 1;
- this.addAttributesForRangeWithoutNotification(this._typingAttributes, var24);
- this.clearTypingAttributes();
- }
-
- var24.index = var20.index + 1;
- var24.length = 0;
- this.selectRange(var24);
- recycleRange(var24);
- } else if (var5.isTabKey()) {
- Range var21 = this.selectedRange();
- Range var25 = allocateRange();
- this.replaceRangeWithString(var21, "\t");
- var25.index = var21.index + 1;
- var25.length = 0;
- this.selectRange(var25);
- recycleRange(var25);
- } else {
- var9 = false;
- }
-
- if (var9) {
- Range var22 = new Range(this._selection.orderedSelectionEnd(), 0);
- if (var22.index > 0) {
- --var22.index;
- ++var22.length;
- }
-
- this.scrollRangeToVisible(var22);
- }
-
- this._selection.enableInsertionPoint();
- }
- }
-
- private Range paragraphsRangeForRange(Range var1) {
- Range var6 = allocateRange();
- boolean var7 = false;
- int var3 = this._paragraphVector.count();
- int var5 = var1.index + var1.length;
-
- for(int var4 = 0; var4 < var3; ++var4) {
- TextParagraph var2 = (TextParagraph)this._paragraphVector.elementAt(var4);
- if (!var7 && var1.index >= var2._startChar && var1.index < var2._startChar + var2._charCount) {
- var6.index = var4;
- var7 = true;
- }
-
- if (var7 && var5 >= var2._startChar && var5 < var2._startChar + var2._charCount) {
- var6.length = var4 - var6.index + 1;
- break;
- }
- }
-
- return var6;
- }
-
- private Vector createAndReturnRunsForRange(Range var1) {
- int var13 = var1.index;
- int var14 = var1.index + var1.length;
- TextParagraph var2 = this._paragraphForIndex(var13);
- TextParagraph var3 = this._paragraphForIndex(var14);
- boolean var12 = var2 == var3;
- if (var1.length == 0) {
- TextStyleRun var16 = var2.createNewRunAt(var13);
- if (var16.charCount() > 0) {
- var16 = var2.createNewRunAt(var13);
- }
-
- Vector var18 = newVector();
- var18.addElement(var16);
- return var18;
- } else {
- TextStyleRun var5 = var2.runForCharPosition(var13);
- if (var5.rangeIndex() != var13) {
- var5 = var2.createNewRunAt(var13);
- }
-
- TextStyleRun var6 = var3.runForCharPosition(var14);
- if (var14 <= var6.rangeIndex() + var6.charCount() - 1) {
- var6 = var3.createNewRunAt(var14);
- var6 = var3.runBefore(var6);
- }
-
- if (var12) {
- if (var5 == var6) {
- Vector var20 = new Vector();
- var20.addElement(var5);
- return var20;
- } else {
- Vector var15 = var2.runsFromTo(var5, var6);
- return var15;
- }
- } else {
- Vector var7 = newVector();
- var7.addElement(var5);
- Vector var8 = var2.runsAfter(var5);
- var7.addElementsIfAbsent(var8);
- returnVector(var8);
- int var11 = this._paragraphVector.indexOfIdentical(var2) + 1;
-
- for(int var10 = this._paragraphVector.indexOfIdentical(var3); var11 < var10; ++var11) {
- TextParagraph var4 = (TextParagraph)this._paragraphVector.elementAt(var11);
- var7.addElementsIfAbsent(var4.runVector());
- }
-
- var8 = var3.runsBefore(var6);
- var8.addElement(var6);
- var7.addElementsIfAbsent(var8);
- returnVector(var8);
- return var7;
- }
- }
- }
-
- private void processSetFont(Font var1) {
- Range var2 = this.selectedRange();
- if (var2.length > 0) {
- Hashtable var3 = new Hashtable();
- var3.put("FontKey", var1);
- this.addAttributesForRange(var3, var2);
- } else {
- this.addTypingAttribute("FontKey", var1);
- }
- }
-
- private void deleteSelection(Vector var1) {
- Range var2 = this.selectedRange();
- this.deleteRange(var2, var1);
- this._selection.setRange(var2.index, var2.index);
- this._selectionChanged();
- }
-
- private void deleteRange(Range var1, Vector var2) {
- Object var3 = null;
- if (var1.length != 0) {
- Range var18 = allocateRange(var1.index, this.length() - var1.index);
- this.dirtyRange(var18);
- recycleRange(var18);
- this.notifyAttachmentsForRange(var1, false);
- TextPositionInfo var7 = this.positionInfoForIndex(var1.index);
- TextPositionInfo var8 = this.positionInfoForIndex(var1.index + var1.length);
- TextParagraph var5 = var7._textRun._paragraph;
- TextParagraph var6 = var8._textRun._paragraph;
- boolean var17 = var5 == var6;
- TextStyleRun var9 = var7._textRun;
- if (var9.rangeIndex() != var7._absPosition) {
- var9 = var5.createNewRunAt(var7._absPosition);
- }
-
- if (!var17) {
- Vector var11 = var5.runsAfter(var9);
- var5.removeRun(var9);
- var5.removeRuns(var11);
- if (var2 != null) {
- TextParagraph var19 = new TextParagraph(this);
- var19.setFormat(var5._format);
- var19.addRun(var9);
- var19.addRuns(var11);
- var2.addElement(var19);
- }
-
- var11.removeAllElements();
- returnVector(var11);
- }
-
- TextStyleRun var10 = var8._textRun;
- if (var10.rangeIndex() != var8._absPosition) {
- var10 = var6.createNewRunAt(var8._absPosition);
- }
-
- if (var17) {
- Vector var22 = var5.runsFromTo(var9, var10);
- var22.removeElement(var10);
- var5.removeRuns(var22);
- if (var2 != null) {
- TextParagraph var20 = new TextParagraph(this);
- var20.setFormat(var5._format);
- var20.addRuns(var22);
- var2.addElement(var20);
- }
-
- var22.removeAllElements();
- returnVector(var22);
- } else {
- int var12;
- int var13 = var12 = this._paragraphVector.indexOfIdentical(var5) + 1;
-
- for(int var14 = this._paragraphVector.indexOfIdentical(var6); var12 < var14; ++var12) {
- TextParagraph var4 = (TextParagraph)this._paragraphVector.removeElementAt(var13);
- if (var2 != null) {
- var2.addElement(var4);
- }
- }
-
- Vector var23 = var6.runsBefore(var10);
- var6.removeRuns(var23);
- if (var2 != null) {
- TextParagraph var21 = new TextParagraph(this);
- var21.setFormat(var5._format);
- var21.addRuns(var23);
- var2.addElement(var21);
- }
-
- var23.removeAllElements();
- returnVector(var23);
- var5.subsumeParagraph(var6);
- this._paragraphVector.removeElement(var6);
- }
-
- if (var5.isEmpty() && !this.isOnlyParagraph(var5)) {
- this._paragraphVector.indexOfIdentical(var5);
- this._paragraphVector.removeElement(var5);
- int var15 = this.adjustCharCountsAndSpacing();
- this.sizeBy(0, var15 - super.bounds.height);
- } else {
- this.formatParagraph(var5);
- }
- }
- }
-
- private void deleteSelection() {
- this.deleteSelection((Vector)null);
- }
-
- boolean isOnlyParagraph(TextParagraph var1) {
- return this._paragraphVector.count() == 1 && this._paragraphVector.contains(var1);
- }
-
- int selectionStart() {
- return this._selection.selectionStart();
- }
-
- TextPositionInfo selectionStartInfo() {
- return this._selection.selectionStartInfo();
- }
-
- int selectionEnd() {
- return this._selection.selectionEnd();
- }
-
- TextPositionInfo selectionEndInfo() {
- return this._selection.selectionEndInfo();
- }
-
- boolean hasSelectionRange() {
- return this._selection.isARange();
- }
-
- TextParagraph lastParagraph() {
- return (TextParagraph)this._paragraphVector.lastElement();
- }
-
- char characterAt(int var1) {
- if (var1 >= 0 && var1 <= this._charCount) {
- TextParagraph var2 = this._paragraphForIndex(var1);
- if (var2 == null) {
- var2 = this.lastParagraph();
- }
-
- return var2.characterAt(var1);
- } else {
- return '\u0000';
- }
- }
-
- int _positionOfPreviousWord(int var1) {
- boolean var3 = false;
- if (var1 == 0) {
- return 0;
- } else {
- char var2 = this.characterAt(var1--);
- if (var2 == '\n') {
- return var1 + 1;
- } else {
- if (var2 != ' ' && var2 != '\t') {
- do {
- var2 = this.characterAt(var1--);
- var3 = var2 == ' ' || var2 == '\t' || var2 >= '!' && var2 <= '/' || var2 >= ':' && var2 <= '@' || var2 >= '[' && var2 <= '\'' || var2 >= '{' && var2 <= '~' || var2 == '\n';
- } while(var1 > -1 && !var3);
- } else {
- do {
- var2 = this.characterAt(var1--);
- var3 = var2 != ' ' && var2 != '\t' || var2 == '\n';
- } while(var1 > -1 && !var3);
- }
-
- return var3 ? var1 + 2 : 0;
- }
- }
- }
-
- int _positionOfNextWord(int var1) {
- boolean var4 = false;
- if (var1 >= this._charCount) {
- return this._charCount;
- } else {
- if (var1 > 0) {
- char var2 = this.characterAt(var1 - 1);
- if (var2 == '\n') {
- return var1 - 1;
- }
- }
-
- char var3 = this.characterAt(var1++);
- if (var3 != ' ' && var3 != '\t') {
- do {
- var3 = this.characterAt(var1++);
- var4 = var3 == ' ' || var3 == '\t' || var3 >= '!' && var3 <= '/' || var3 >= ':' && var3 <= '@' || var3 >= '[' && var3 <= '\'' || var3 >= '{' && var3 <= '~' || var3 == '\n';
- } while(var1 < this._charCount && !var4);
- } else {
- do {
- var3 = this.characterAt(var1++);
- var4 = var3 != ' ' && var3 != '\t' || var3 == '\n';
- } while(var1 < this._charCount && !var4);
- }
-
- return var4 ? var1 - 1 : this._charCount;
- }
- }
-
- private void hideInsertionPoint() {
- if (this.insertionPointVisible) {
- this.insertionPointVisible = false;
- }
-
- }
-
- private void showInsertionPoint() {
- if (!this.insertionPointVisible) {
- this.insertionPointVisible = true;
- }
-
- }
-
- static Rect newRect(int var0, int var1, int var2, int var3) {
- Vector var5 = _rectCache;
- synchronized(var5){}
-
- Rect var4;
- label47: {
- Rect var7;
- try {
- if (_shouldCache && !_rectCache.isEmpty()) {
- var4 = (Rect)_rectCache.removeLastElement();
- break label47;
- }
-
- var7 = new Rect(var0, var1, var2, var3);
- } catch (Throwable var9) {
- throw var9;
- }
-
- return var7;
- }
-
- var4.setBounds(var0, var1, var2, var3);
- return var4;
- }
-
- static Rect newRect(Rect var0) {
- Vector var2 = _rectCache;
- synchronized(var2){}
-
- Rect var1;
- label47: {
- Rect var4;
- try {
- if (_shouldCache && !_rectCache.isEmpty()) {
- var1 = (Rect)_rectCache.removeLastElement();
- break label47;
- }
-
- var4 = new Rect(var0);
- } catch (Throwable var6) {
- throw var6;
- }
-
- return var4;
- }
-
- var1.setBounds(var0);
- return var1;
- }
-
- static Rect newRect() {
- return newRect(0, 0, 0, 0);
- }
-
- static void returnRect(Rect var0) {
- if (var0 != null) {
- if (_shouldCache) {
- Vector var1 = _rectCache;
- synchronized(var1){}
-
- try {
- if (_rectCache.count() < 50) {
- _rectCache.addElement(var0);
- }
- } catch (Throwable var3) {
- throw var3;
- }
-
- }
- }
- }
-
- static void returnRects(Vector var0) {
- if (var0 != null && _shouldCache) {
- int var1 = var0.count();
-
- while(var1-- > 0) {
- returnRect((Rect)var0.elementAt(var1));
- }
-
- var0.removeAllElements();
- }
- }
-
- static void setShouldCacheRects(boolean var0) {
- Vector var1 = _rectCache;
- synchronized(var1){}
-
- try {
- _shouldCache = var0;
- if (!_shouldCache) {
- _rectCache.removeAllElements();
- }
- } catch (Throwable var3) {
- throw var3;
- }
-
- }
-
- static Vector newVector() {
- Vector var1 = _vectorCache;
- synchronized(var1){}
-
- Vector var3;
- try {
- if (_shouldCache && !_vectorCache.isEmpty()) {
- Vector var0 = (Vector)_vectorCache.removeLastElement();
- return var0;
- }
-
- var3 = new Vector();
- } catch (Throwable var5) {
- throw var5;
- }
-
- return var3;
- }
-
- static void returnVector(Vector var0) {
- if (_shouldCache) {
- Vector var1 = _vectorCache;
- synchronized(var1){}
-
- try {
- if (var0 != null && _vectorCache.count() < 15) {
- var0.removeAllElements();
- _vectorCache.addElement(var0);
- }
- } catch (Throwable var3) {
- throw var3;
- }
-
- }
- }
-
- static void setShouldCacheVectors(boolean var0) {
- Vector var1 = _vectorCache;
- synchronized(var1){}
-
- try {
- _shouldCache = var0;
- if (!_cacheVectors) {
- _vectorCache.removeAllElements();
- }
- } catch (Throwable var3) {
- throw var3;
- }
-
- }
-
- private void _selectionChanged() {
- int var1 = this._selection.selectionStart();
- int var2 = this._selection.selectionEnd();
- if (var1 != this._wasSelectedRange.index || var2 - var1 != this._wasSelectedRange.length) {
- this._wasSelectedRange.index = var1;
- this._wasSelectedRange.length = var2 - var1;
- this.clearTypingAttributes();
- if (this._owner != null) {
- this._owner.selectionDidChange(this);
- }
-
- }
- }
-
- void dirtyRange(Range var1) {
- if (!((View)this).isDirty() || super.dirtyRect != null) {
- Range var2 = allocateRange(var1);
- Rect var3 = new Rect();
- ((View)this).computeVisibleRect(var3);
- var2.intersectWith(0, this.length());
- if (super._superview != null && var2 != null && !var2.isNullRange() && var2.length > 0) {
- Vector var5 = this.rectsForRange(var2, var3);
- int var6 = 0;
-
- for(int var7 = var5.count(); var6 < var7; ++var6) {
- Rect var4 = (Rect)var5.elementAt(var6);
- var4.x = 0;
- var4.width = super.bounds.width;
- if (var4.width > 0 && var4.height > 0) {
- ((View)this).addDirtyRect(var4);
- }
- }
- }
-
- recycleRange(var2);
- }
- }
-
- private TextParagraphFormat _formatForTextPositionInfo(TextPositionInfo var1) {
- TextParagraphFormat var2 = var1._textRun.paragraph().format();
- if (var2 == null) {
- var2 = (TextParagraphFormat)this._defaultAttributes.get("ParagraphFormatKey");
- }
-
- return var2;
- }
-
- private TextPositionInfo positionInfoForNextLine(TextPositionInfo var1) {
- int var3 = var1._textRun.paragraph().characterStartingLine(var1._lineNumber + 1);
- if (var3 == -1) {
- int var4 = this._paragraphVector.indexOfIdentical(var1._textRun.paragraph()) + 1;
- if (var4 < this._paragraphVector.count()) {
- TextParagraph var5 = (TextParagraph)this._paragraphVector.elementAt(var4);
- return this.positionInfoForIndex(var5._startChar);
- } else {
- return null;
- }
- } else {
- TextPositionInfo var2 = this.positionInfoForIndex(var3);
- return var2;
- }
- }
-
- void setBaseURL(URL var1) {
- this._baseURL = var1;
- }
-
- private TextStyleRun runBefore(TextStyleRun var1) {
- TextStyleRun var2 = var1.paragraph().runBefore(var1);
- if (var2 == null) {
- int var3 = this._paragraphVector.indexOfIdentical(var1.paragraph());
- if (var3 > 0) {
- return ((TextParagraph)this._paragraphVector.elementAt(var3 - 1)).lastRun();
- }
- }
-
- return var2;
- }
-
- private TextStyleRun runAfter(TextStyleRun var1) {
- TextStyleRun var2 = var1.paragraph().runAfter(var1);
- if (var2 == null) {
- int var3 = this._paragraphVector.indexOfIdentical(var1.paragraph());
- if (var3 < this._paragraphVector.count() - 1) {
- return ((TextParagraph)this._paragraphVector.elementAt(var3 + 1)).firstRun();
- }
- }
-
- return var2;
- }
-
- private Range linkRangeForPosition(int var1) {
- TextStyleRun var3 = this._runForIndex(var1);
- Hashtable var6;
- String var7;
- if ((var6 = var3.attributes()) != null && (var7 = (String)var6.get("LinkKey")) != null) {
- TextStyleRun var4 = var3;
- TextStyleRun var2 = var3;
-
- while(true) {
- var2 = this.runBefore(var2);
- if (var2 == null || (var6 = var2.attributes()) == null || !var7.equals((String)var6.get("LinkKey"))) {
- TextStyleRun var5 = var3;
- var2 = var3;
-
- while(true) {
- var2 = this.runAfter(var2);
- if (var2 == null || (var6 = var2.attributes()) == null || !var7.equals((String)var6.get("LinkKey"))) {
- Range var8 = var4.range();
- var8.unionWith(var5.range());
- return var8;
- }
-
- var5 = var2;
- }
- }
-
- var4 = var2;
- }
- } else {
- return null;
- }
- }
-
- private void highlightLinkWithRange(Range var1, boolean var2) {
- if (var2) {
- this.addAttributeForRange("_IFCLinkPressedKey", "", var1);
- } else {
- this.removeAttributeForRange("_IFCLinkPressedKey", var1);
- }
-
- Range var3 = this.paragraphsRangeForRange(var1);
- int var4 = var3.index;
-
- for(int var5 = var3.index + var3.length; var4 < var5; ++var4) {
- ((TextParagraph)this._paragraphVector.elementAt(var4)).collectEmptyRuns();
- }
-
- }
-
- private boolean runUnderMouse(TextStyleRun var1, int var2, int var3) {
- Vector var6 = this.rectsForRange(var1.range());
- int var4 = 0;
-
- for(int var5 = var6.count(); var4 < var5; ++var4) {
- if (((Rect)var6.elementAt(var4)).contains(var2, var3)) {
- return true;
- }
- }
-
- return false;
- }
-
- private boolean runsUnderMouse(Vector var1, int var2, int var3) {
- int var4 = 0;
-
- for(int var5 = var1.count(); var4 < var5; ++var4) {
- Range var6 = (Range)var1.elementAt(var4);
- TextStyleRun var7 = this._runForIndex(var6.index);
- if (this.runUnderMouse(var7, var2, var3)) {
- return true;
- }
- }
-
- return false;
- }
-
- boolean lastParagraphIsEmpty() {
- return this.lastParagraph()._charCount == 0;
- }
-
- char charAt(int var1) {
- String var2 = this.stringForRange(new Range(var1, 1));
- return var2 != null && var2.length() > 0 ? var2.charAt(0) : '\u0000';
- }
-
- boolean isWordCharacter(char var1) {
- return var1 >= '0' && var1 <= '9' || var1 >= 'A' && var1 <= 'Z' || var1 >= 'a' && var1 <= 'z';
- }
-
- Range groupForIndex(int var1) {
- int var2 = this.length();
- int var5 = var1;
- char var6 = this.charAt(var1);
- if (var6 == '\n') {
- return new Range(var1, 1);
- } else if (var6 != ' ' && var6 != '\t') {
- if (!this.isWordCharacter(var6)) {
- return new Range(var1, 1);
- } else {
- int var7;
- for(var7 = var1; var7 > 0; --var7) {
- var6 = this.charAt(var7 - 1);
- if (!this.isWordCharacter(var6)) {
- break;
- }
- }
-
- int var8;
- for(var8 = var1; var8 < var2 - 1; ++var8) {
- var6 = this.charAt(var8 + 1);
- if (!this.isWordCharacter(var6)) {
- break;
- }
- }
-
- return new Range(var7, var8 - var7 + 1);
- }
- } else {
- while(var5 > 0) {
- var6 = this.charAt(var5);
- if (var6 != ' ' && var6 != '\t') {
- break;
- }
-
- --var5;
- }
-
- int var3 = var5 + 1;
-
- for(var5 = var1; var5 < this.length(); ++var5) {
- var6 = this.charAt(var5);
- if (var6 != ' ' && var6 != '\t') {
- break;
- }
- }
-
- int var4 = var5 - 1;
- return new Range(var3, var4 - var3 + 1);
- }
- }
-
- Range lineForPosition(TextPositionInfo var1) {
- TextParagraph var2 = var1._textRun._paragraph;
- if (var2 != null) {
- int var3;
- if (var1._lineNumber == 0) {
- var3 = var2._startChar;
- } else {
- var3 = var2._startChar + var2._lineBreaks[var1._lineNumber - 1];
- }
-
- int var4 = var2._startChar + var2._lineBreaks[var1._lineNumber] - 1;
- return new Range(var3, var4 - var3 + 1);
- } else {
- return new Range();
- }
- }
-
- void replaceContentWithString(String var1) {
- this.notifyAttachmentsForRange(new Range(0, this.length()), false);
- this._paragraphVector.removeAllElements();
- int var4 = 0;
- int var5 = var1.length();
-
- while(var4 < var5) {
- int var6 = var1.indexOf(10, var4);
- int var7;
- int var8;
- if (var6 == -1) {
- var7 = var4;
- var8 = var5;
- var4 = var5;
- } else {
- var7 = var4;
- var8 = var6;
- var4 = var6 + 1;
- }
-
- TextParagraph var2 = new TextParagraph(this);
- TextStyleRun var3 = new TextStyleRun(var2, var1, var7, var8, (Hashtable)null);
- var2.addRun(var3);
- this._paragraphVector.addElement(var2);
- }
-
- if (this._paragraphVector.count() == 0 || var1.charAt(var5 - 1) == '\n') {
- TextParagraph var9 = new TextParagraph(this);
- TextStyleRun var10 = new TextStyleRun(var9, "", (Hashtable)null);
- var9.addRun(var10);
- this._paragraphVector.addElement(var9);
- }
-
- ((View)this).setDirty(true);
- this.reformatAll();
- }
-
- Vector rectsForRange(Range var1, Rect var2) {
- Range var3 = allocateRange(var1.index, var1.length);
- Vector var4 = new Vector();
- var3.intersectWith(0, this.length());
- if (var3.length != 0 && !var3.isNullRange()) {
- TextPositionInfo var5 = this.positionInfoForIndex(var3.index);
- if (var5._endOfLine && !var5._endOfParagraph) {
- var5.representCharacterAfterEndOfLine();
- }
-
- TextPositionInfo var6 = this.positionInfoForIndex(var3.index + var3.length());
- if (var5 != null && var6 != null) {
- if (var5._textRun.paragraph() == var6._textRun.paragraph() && var5._lineNumber == var6._lineNumber) {
- TextParagraphFormat var16 = this._formatForTextPositionInfo(var5);
- if (var6._endOfLine) {
- TextParagraph var20 = var5._textRun.paragraph();
- int var22 = var20._lineRemainders[var5._lineNumber];
- switch (var16._justification) {
- case 0:
- default:
- var4.addElement(new Rect(var5._x, var5._y, super.bounds.width - var16._rightMargin - var5._x - var22, var5._lineHeight));
- break;
- case 1:
- var4.addElement(new Rect(var5._x, var5._y, super.bounds.width - var16._rightMargin - var5._x - var22 / 2, var5._lineHeight));
- break;
- case 2:
- var4.addElement(new Rect(var5._x, var5._y, super.bounds.width - var16._rightMargin - var5._x, var5._lineHeight));
- }
- } else {
- var4.addElement(new Rect(var5._x, var5._y, var6._x - var5._x, var5._lineHeight));
- }
-
- recycleRange(var3);
- return var4;
- } else {
- TextParagraphFormat var8 = this._formatForTextPositionInfo(var5);
- TextParagraph var13 = var5._textRun.paragraph();
- int var14 = var13._lineRemainders[var5._lineNumber];
- Rect var9;
- switch (var8._justification) {
- case 0:
- default:
- var9 = new Rect(var5._x, var5._y, super.bounds.width - var8._rightMargin - var5._x - var14, var5._lineHeight);
- break;
- case 1:
- var9 = new Rect(var5._x, var5._y, super.bounds.width - var8._rightMargin - var5._x - var14 / 2, var5._lineHeight);
- break;
- case 2:
- var9 = new Rect(var5._x, var5._y, super.bounds.width - var8._rightMargin - var5._x, var5._lineHeight);
- }
-
- if (var9.height > 0) {
- var4.addElement(var9);
- }
-
- var9 = new Rect(0, 0, 0, 0);
- TextPositionInfo var7 = var5;
- boolean var12 = false;
- int var11 = -1;
-
- while(!var12) {
- var7 = this.positionInfoForNextLine(var7);
- if (var7 == null) {
- break;
- }
-
- if (var7._endOfLine && !var7._endOfParagraph) {
- var7.representCharacterAfterEndOfLine();
- }
-
- if (var7._y <= var11) {
- break;
- }
-
- var11 = var7._y;
- if (var2 != null) {
- if (var7._y < var2.y) {
- continue;
- }
-
- if (var7._y > var2.y + var2.height) {
- var12 = true;
- break;
- }
- }
-
- var8 = this._formatForTextPositionInfo(var7);
- if (var7._textRun.paragraph() == var6._textRun.paragraph() && var7._lineNumber >= var6._lineNumber) {
- var9.x = var7._x;
- var9.y = var7._y;
- var9.width = var6._x - var9.x;
- var9.height = var7._lineHeight;
- var12 = true;
- } else {
- var9.x = var7._x;
- var9.y = var7._y;
- var13 = var7._textRun.paragraph();
- var14 = var13._lineRemainders[var7._lineNumber];
- switch (var8._justification) {
- case 0:
- default:
- var9.width = super.bounds.width - var8._rightMargin - var9.x - var14;
- break;
- case 1:
- var9.width = super.bounds.width - var8._rightMargin - var9.x - var14 / 2;
- break;
- case 2:
- var9.width = super.bounds.width - var8._rightMargin - var9.x;
- }
-
- var9.height = var7._lineHeight;
- }
-
- if (var9.height > 0) {
- Rect var10 = (Rect)var4.lastElement();
- if (var10 != null && var10.x == var9.x && var10.width == var9.width) {
- var10.height = var9.y + var9.height - var10.y;
- } else {
- var4.addElement(new Rect(var9));
- }
- }
- }
-
- recycleRange(var3);
- return var4;
- }
- } else {
- recycleRange(var3);
- return var4;
- }
- } else {
- recycleRange(var3);
- return var4;
- }
- }
-
- Vector rangesOfVisibleAttachmentsWithBitmap(Bitmap var1) {
- Vector var2 = new Vector();
- Rect var7 = new Rect();
- ((View)this).computeVisibleRect(var7);
- TextPositionInfo var3 = this.positionForPoint(var7.x, var7.y, true);
- int var5;
- if (var3 == null) {
- var5 = 0;
- } else if (var3._absPosition > 0) {
- var5 = var3._absPosition - 1;
- } else {
- var5 = 0;
- }
-
- var3 = this.positionForPoint(var7.x + var7.width, var7.y + var7.height, true);
- int var6;
- if (var3 == null) {
- var6 = this.length() - 1;
- } else if (var3._absPosition < this.length() - 1) {
- var6 = var3._absPosition + 1;
- } else {
- var6 = this.length() - 1;
- }
-
- TextStyleRun var4 = this._runForIndex(var5);
-
- while(var4 != null) {
- Hashtable var8 = var4.attributes();
- TextAttachment var9;
- if (var8 != null && (var9 = (TextAttachment)var8.get("TextAttachmentKey")) != null && var9 instanceof ImageAttachment && ((ImageAttachment)var9).image() == var1) {
- var2.addElement(var4.range());
- }
-
- var4 = this.runAfter(var4);
- if (var4.rangeIndex() > var6) {
- break;
- }
- }
-
- return var2;
- }
-
- void refreshBitmap(Object var1) {
- Bitmap var3 = (Bitmap)var1;
- Vector var2 = this.rangesOfVisibleAttachmentsWithBitmap(var3);
- int var9 = 0;
-
- for(int var10 = var2.count(); var9 < var10; ++var9) {
- Range var4 = (Range)var2.elementAt(var9);
- if (!var4.isNullRange()) {
- Vector var11 = this.rectsForRange(var4);
- Rect var5 = var3.updateRect();
- if (var11.count() > 0) {
- Rect var6 = (Rect)var11.elementAt(0);
- int var7 = 1;
-
- for(int var8 = var11.count(); var7 < var8; ++var7) {
- var6.unionWith((Rect)var11.elementAt(var7));
- }
-
- var6.x = 0;
- var6.width = super.bounds.width;
- var6.y += var5.y;
- var6.height = var5.height;
- ((View)this).addDirtyRect(var6);
- }
- }
- }
-
- }
-
- boolean attributesChangingFormatting(Hashtable var1) {
- if (var1 != null) {
- Vector var4 = var1.keysVector();
- int var2 = 0;
-
- for(int var3 = var4.count(); var2 < var3; ++var2) {
- if (attributesChangingFormatting.indexOf(var4.elementAt(var2)) != -1) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- void clearTypingAttributes() {
- if (this._typingAttributes != null) {
- this._typingAttributes.clear();
- }
-
- }
-
- void addAttributesForRangeWithoutNotification(Hashtable var1, Range var2) {
- Range var11 = this.selectedRange();
- Range var12 = allocateRange();
- Vector var13 = new Vector();
- if (var1 == null) {
- recycleRange(var12);
- } else {
- TextAttachment var14;
- if ((var14 = (TextAttachment)var1.get("TextAttachmentKey")) != null) {
- var14.setOwner(this);
- }
-
- TextParagraphFormat var6;
- if ((var6 = (TextParagraphFormat)var1.get("ParagraphFormatKey")) != null) {
- Range var3 = this.paragraphsRangeForRange(var2);
- int var8 = var3.index;
-
- for(int var9 = var3.index + var3.length; var8 < var9; ++var8) {
- TextParagraph var7 = (TextParagraph)this._paragraphVector.elementAt(var8);
- var7.setFormat(var6);
- var13.addElementIfAbsent(var7);
- var12.unionWith(var7.range());
- }
-
- if (var1.count() == 1) {
- var8 = 0;
-
- for(int var29 = var13.count(); var8 < var29; ++var8) {
- this.formatParagraph((TextParagraph)var13.elementAt(var8));
- }
-
- this.dirtyRange(var12);
- if (this.formattingEnabled()) {
- this._selection.setRange(var11.index, var11.index + var11.length);
- }
-
- recycleRange(var12);
- recycleRange(var3);
- return;
- }
-
- recycleRange(var3);
- }
-
- TextStyleRun var5 = this._runForIndex(var2.index);
- if (var5 != null) {
- Range var10 = var5.range();
- if (var2.equals(var10)) {
- var5.appendAttributes(var1);
- var12.unionWith(var5.range());
- if (this.attributesChangingFormatting(var1)) {
- var13.addElementIfAbsent(this._paragraphForIndex(var2.index));
- }
-
- int var23 = 0;
-
- for(int var28 = var13.count(); var23 < var28; ++var23) {
- TextParagraph var19 = (TextParagraph)var13.elementAt(var23);
- this.formatParagraph(var19);
- var12.unionWith(var19.range());
- }
-
- this.dirtyRange(var12);
- if (this.formattingEnabled()) {
- this._selection.setRange(var11.index, var11.index + var11.length);
- }
-
- recycleRange(var12);
- recycleRange(var10);
- return;
- }
-
- if (var2.index >= var10.index && var2.index + var2.length <= var10.index + var10.length && this.equalsAttributesHint(var1, var5.attributes())) {
- recycleRange(var12);
- recycleRange(var10);
- return;
- }
- }
-
- Vector var4 = this.createAndReturnRunsForRange(var2);
- int var20 = 0;
-
- for(int var25 = var4.count(); var20 < var25; ++var20) {
- var5 = (TextStyleRun)var4.elementAt(var20);
- var5.appendAttributes(var1);
- Range var30 = var5.range();
- var12.unionWith(var30);
- recycleRange(var30);
- }
-
- if (this.attributesChangingFormatting(var1)) {
- Range var16 = this.paragraphsRangeForRange(var2);
- var20 = var16.index;
-
- for(int var26 = var16.index + var16.length; var20 < var26; ++var20) {
- var13.addElementIfAbsent(this._paragraphVector.elementAt(var20));
- }
-
- recycleRange(var16);
- }
-
- var20 = 0;
-
- for(int var27 = var13.count(); var20 < var27; ++var20) {
- TextParagraph var18 = (TextParagraph)var13.elementAt(var20);
- this.formatParagraph(var18);
- Range var15 = var18.range();
- var12.unionWith(var15);
- recycleRange(var15);
- }
-
- this.dirtyRange(var12);
- if (this.formattingEnabled()) {
- this._selection.setRange(var11.index, var11.index + var11.length);
- }
-
- recycleRange(var12);
- }
- }
-
- void validateHTMLParsingRules() {
- if (this._htmlParsingRules == null) {
- String[] var3 = new String[]{"BODY", "H1", "H2", "H3", "H4", "H5", "H6", "B", "STRONG", "CENTER", "EM", "I", "PRE", "A", "OL", "UL", "LI", "ADDRESS", "BLOCKQUOTE", "DIR", "MENU", "TT", "SAMP", "CODE", "KBD", "VAR", "CITE", "DL", "DT", "DD", "TITLE", "P"};
- String[] var4 = new String[]{"BR", "HR", "IMG"};
- this._htmlParsingRules = new HTMLParsingRules();
- int var1 = 0;
-
- for(int var2 = var3.length; var1 < var2; ++var1) {
- this._htmlParsingRules.setClassNameForMarker("netscape.application.TextViewHTMLContainerImp", var3[var1]);
- }
-
- var1 = 0;
-
- for(int var6 = var4.length; var1 < var6; ++var1) {
- this._htmlParsingRules.setClassNameForMarker("netscape.application.TextViewHTMLMarkerImp", var4[var1]);
- }
-
- this._htmlParsingRules.setStringClassName("netscape.application.TextViewHTMLString");
- }
-
- }
-
- void disableAttachmentNotification() {
- ++this.notifyAttachmentDisabled;
- }
-
- void enableAttachmentNotification() {
- --this.notifyAttachmentDisabled;
- if (this.notifyAttachmentDisabled < 0) {
- this.notifyAttachmentDisabled = 0;
- }
-
- if (this.notifyAttachmentDisabled == 0 && this.invalidAttachmentRange != null) {
- this.notifyAttachmentsForRange(this.invalidAttachmentRange, true);
- this.invalidAttachmentRange = null;
- }
-
- }
-
- void _notifyAttachmentsForRange(Range var1, boolean var2) {
- int var3 = this._paragraphIndexForIndex(var1.index);
- int var7 = var1.index;
- int var8 = var1.index + var1.length;
- if (var3 != -1) {
- TextParagraph var5 = (TextParagraph)this._paragraphVector.elementAt(var3);
- int var4 = var5.runIndexForCharPosition(var7);
- if (var4 != -1) {
- TextStyleRun var6 = (TextStyleRun)var5._runVector.elementAt(var4);
- var7 = var6.rangeIndex();
-
- while(var7 < var8) {
- Hashtable var9 = var6.attributes();
- TextAttachment var10;
- if (var9 != null && (var10 = (TextAttachment)var9.get("TextAttachmentKey")) != null) {
- if (var2) {
- TextPositionInfo var11 = var6._paragraph._infoForPosition(var6.rangeIndex());
- if (var11 != null) {
- var11.representCharacterAfterEndOfLine();
- Rect var12 = var6.textAttachmentBoundsForOrigin(var11._x, var11._y, var6._paragraph._baselines[var11._lineNumber]);
- var10._willShowWithBounds(var12);
- }
- } else {
- var10._willHide();
- }
- }
-
- var7 += var6.charCount();
- ++var4;
- if (var4 < var5._runVector.count()) {
- var6 = (TextStyleRun)var5._runVector.elementAt(var4);
- } else {
- ++var3;
- ++var7;
- if (var3 >= this._paragraphVector.count()) {
- break;
- }
-
- var5 = (TextParagraph)this._paragraphVector.elementAt(var3);
- var4 = 0;
- if (var5._runVector.count() <= 0) {
- break;
- }
-
- var6 = (TextStyleRun)var5._runVector.elementAt(var4);
- }
- }
-
- }
- }
- }
-
- void notifyAttachmentsForRange(Range var1, boolean var2) {
- if (!var2) {
- this._notifyAttachmentsForRange(var1, false);
- } else if (this.notifyAttachmentDisabled > 0) {
- if (this.invalidAttachmentRange != null) {
- this.invalidAttachmentRange.unionWith(var1);
- } else {
- this.invalidAttachmentRange = new Range(var1);
- }
- } else {
- this._notifyAttachmentsForRange(var1, true);
- }
- }
-
- boolean isLeftHalfOfCharacter(int var1, int var2) {
- TextPositionInfo var3 = this.positionForPoint(var1, var2, false);
- TextPositionInfo var4 = this.positionForPoint(var1, var2, true);
- if (var3 != null && var4 != null) {
- return var3._absPosition == var4._absPosition;
- } else {
- return true;
- }
- }
-
- static Range allocateRange() {
- return allocateRange(Range.nullRange().index, Range.nullRange().length);
- }
-
- static Range allocateRange(Range var0) {
- return allocateRange(var0.index, var0.length);
- }
-
- static Range allocateRange(int var0, int var1) {
- Range var2 = (Range)rangePool.allocateObject();
- var2.index = var0;
- var2.length = var1;
- return var2;
- }
-
- static void recycleRange(Range var0) {
- rangePool.recycleObject(var0);
- }
-
- public void copy() {
- Application.setClipboardText(this.stringForRange(this.selectedRange()));
- }
-
- public void cut() {
- if (this.isEditable()) {
- Range var1 = this.selectedRange();
- Application.setClipboardText(this.stringForRange(var1));
- this.replaceRangeWithString(var1, "");
- this.selectRange(new Range(var1.index(), 0));
- }
-
- }
-
- public void paste() {
- if (this.isEditable()) {
- Range var1 = this.selectedRange();
- String var2 = Application.clipboardText();
- this._selection.disableInsertionPoint();
- this.replaceRangeWithString(var1, var2);
- var1 = new Range(var1.index() + var2.length(), 0);
- this.selectRange(var1);
- this.scrollRangeToVisible(var1);
- this._selection.enableInsertionPoint();
- }
-
- }
-
- public String formElementText() {
- return this.string();
- }
-
- static {
- attributesChangingFormatting.addElement("TextAttachmentKey");
- attributesChangingFormatting.addElement("TextAttachmentBaselineOffsetKey");
- attributesChangingFormatting.addElement("FontKey");
- attributesChangingFormatting.addElement("ParagraphFormatKey");
- _rectCache = new Vector();
- _vectorCache = new Vector();
- hashtablePool = new ObjectPool("netscape.util.Hashtable", 32);
- rangePool = new ObjectPool("netscape.application.Range", 32);
- }
- }
-