home *** CD-ROM | disk | FTP | other *** search
- package java.awt.font;
-
- import java.awt.Font;
- import java.awt.Graphics2D;
- import java.awt.Shape;
- import java.awt.Toolkit;
- import java.awt.geom.AffineTransform;
- import java.awt.geom.GeneralPath;
- import java.awt.geom.Rectangle2D;
- import java.awt.geom.RectangularShape;
- import java.awt.im.InputMethodHighlight;
- import java.text.Annotation;
- import java.text.AttributedCharacterIterator;
- import java.util.Hashtable;
- import java.util.Map;
- import sun.awt.font.Bidi;
- import sun.awt.font.ExtendedTextLabel;
- import sun.awt.font.ExtendedTextLabelComponent;
- import sun.awt.font.GraphicComponent;
- import sun.awt.font.TextLabelFactory;
- import sun.awt.font.TextLineComponent;
-
- final class TextLine {
- private TextLineComponent[] fComponents;
- private float[] fBaselineOffsets;
- private int[] fComponentVisualOrder;
- private char[] fChars;
- private int fCharsStart;
- private int fCharsLimit;
- private int[] fCharVisualOrder;
- private int[] fCharLogicalOrder;
- private byte[] fCharLevels;
- private boolean fIsDirectionLTR;
- private TextLineMetrics fMetrics = null;
- private static Function fgAdvanceF = new 1();
- private static Function fgXPositionF = new 2();
- private static Function fgYPositionF = new 3();
-
- public TextLine(TextLineComponent[] var1, float[] var2, char[] var3, int var4, int var5, int[] var6, byte[] var7, boolean var8) {
- int[] var9 = computeComponentOrder(var1, var6);
- this.fComponents = var1;
- this.fBaselineOffsets = var2;
- this.fComponentVisualOrder = var9;
- this.fChars = var3;
- this.fCharsStart = var4;
- this.fCharsLimit = var5;
- this.fCharLogicalOrder = var6;
- this.fCharLevels = var7;
- this.fIsDirectionLTR = var8;
- this.checkCtorArgs();
- }
-
- private void checkCtorArgs() {
- int var1 = 0;
-
- for(int var2 = 0; var2 < this.fComponents.length; ++var2) {
- var1 += this.fComponents[var2].getNumCharacters();
- }
-
- if (var1 != this.characterCount()) {
- throw new IllegalArgumentException("Invalid TextLine! char count is different from sum of char counts of components.");
- }
- }
-
- public int characterCount() {
- return this.fCharsLimit - this.fCharsStart;
- }
-
- public boolean isDirectionLTR() {
- return this.fIsDirectionLTR;
- }
-
- public TextLineMetrics getMetrics() {
- if (this.fMetrics == null) {
- float var1 = 0.0F;
- float var2 = 0.0F;
- float var3 = 0.0F;
- float var4 = 0.0F;
- float var5 = 0.0F;
- float var6 = 0.0F;
- boolean var8 = false;
-
- for(int var9 = 0; var9 < this.fComponents.length; ++var9) {
- TextLineComponent var7 = this.fComponents[var9];
- Rectangle2D var10 = var7.getLogicalBounds();
- var4 += (float)((RectangularShape)var10).getWidth();
- byte var11 = (byte)var7.getLineMetrics().getBaselineIndex();
- LineMetrics var12 = var7.getLineMetrics();
- if (var11 >= 0) {
- float var13 = this.fBaselineOffsets[var11];
- var1 = Math.max(var1, -var13 + var12.getAscent());
- float var14 = var13 + var12.getDescent();
- var2 = Math.max(var2, var14);
- var3 = Math.max(var3, var14 + var12.getLeading());
- } else {
- var8 = true;
- float var16 = var12.getAscent() + var12.getDescent();
- float var17 = var16 + var12.getLeading();
- var5 = Math.max(var5, var16);
- var6 = Math.max(var6, var17);
- }
- }
-
- if (var8) {
- if (var5 > var1 + var2) {
- var2 = var5 - var1;
- }
-
- if (var6 > var1 + var3) {
- var3 = var6 - var1;
- }
- }
-
- var3 -= var2;
- this.fMetrics = new TextLineMetrics(var1, var2, var3, var4);
- }
-
- return this.fMetrics;
- }
-
- public int visualToLogical(int var1) {
- if (this.fCharLogicalOrder == null) {
- return var1;
- } else {
- if (this.fCharVisualOrder == null) {
- this.fCharVisualOrder = Bidi.getInverseOrder(this.fCharLogicalOrder);
- }
-
- return this.fCharVisualOrder[var1];
- }
- }
-
- public int logicalToVisual(int var1) {
- return this.fCharLogicalOrder == null ? var1 : this.fCharLogicalOrder[var1];
- }
-
- public byte getCharLevel(int var1) {
- return this.fCharLevels == null ? 0 : this.fCharLevels[var1];
- }
-
- public boolean isCharLTR(int var1) {
- return (this.getCharLevel(var1) & 1) == 0;
- }
-
- public int getCharType(int var1) {
- return Character.getType(this.fChars[var1 + this.fCharsStart]);
- }
-
- public boolean isCharSpace(int var1) {
- return Character.isSpaceChar(this.fChars[var1 + this.fCharsStart]);
- }
-
- public boolean isCharWhitespace(int var1) {
- return Character.isWhitespace(this.fChars[var1 + this.fCharsStart]);
- }
-
- public float getCharAngle(int var1) {
- if (var1 < 0) {
- throw new IllegalArgumentException("Negative logicalIndex.");
- } else if (var1 > this.fCharsLimit - this.fCharsStart) {
- throw new IllegalArgumentException("logicalIndex too large.");
- } else {
- int var2 = 0;
- int var3 = 0;
-
- do {
- var3 += this.fComponents[var2].getNumCharacters();
- if (var3 > var1) {
- break;
- }
-
- ++var2;
- } while(var2 < this.fComponents.length);
-
- return this.fComponents[var2].getItalicAngle();
- }
- }
-
- private LineMetrics getLineMetricsAt(int var1) {
- if (var1 < 0) {
- throw new IllegalArgumentException("Negative logicalIndex.");
- } else if (var1 > this.fCharsLimit - this.fCharsStart) {
- throw new IllegalArgumentException("logicalIndex too large.");
- } else {
- int var2 = 0;
- boolean var3 = false;
- int var4 = 0;
-
- do {
- var4 += this.fComponents[var2].getNumCharacters();
- if (var4 > var1) {
- break;
- }
-
- ++var2;
- } while(var2 < this.fComponents.length);
-
- return this.fComponents[var2].getLineMetrics();
- }
- }
-
- public float getCharAscent(int var1) {
- return this.getLineMetricsAt(var1).getAscent();
- }
-
- public float getCharDescent(int var1) {
- return this.getLineMetricsAt(var1).getDescent();
- }
-
- private float applyFunctionAtIndex(int var1, Function var2) {
- if (var1 < 0) {
- throw new IllegalArgumentException("Negative logicalIndex.");
- } else {
- int var3 = 0;
-
- for(int var4 = 0; var4 < this.fComponents.length; ++var4) {
- int var5 = var3 + this.fComponents[var4].getNumCharacters();
- if (var5 > var1) {
- return var2.computeFunction(this, var4, var1 - var3);
- }
-
- var3 = var5;
- }
-
- throw new IllegalArgumentException("logicalIndex too large.");
- }
- }
-
- public float getCharAdvance(int var1) {
- return this.applyFunctionAtIndex(var1, fgAdvanceF);
- }
-
- public float getCharXPosition(int var1) {
- return this.applyFunctionAtIndex(var1, fgXPositionF);
- }
-
- public float getCharYPosition(int var1) {
- return this.applyFunctionAtIndex(var1, fgYPositionF);
- }
-
- public float getCharLinePosition(int var1) {
- return this.getCharXPosition(var1);
- }
-
- public boolean caretAtOffsetIsValid(int var1) {
- if (var1 < 0) {
- throw new IllegalArgumentException("Negative offset.");
- } else {
- int var2 = 0;
-
- for(int var3 = 0; var3 < this.fComponents.length; ++var3) {
- int var4 = var2 + this.fComponents[var3].getNumCharacters();
- if (var4 > var1) {
- return this.fComponents[var3].caretAtOffsetIsValid(var1 - var2);
- }
-
- var2 = var4;
- }
-
- throw new IllegalArgumentException("logicalIndex too large.");
- }
- }
-
- public Rectangle2D getCharBounds(int var1) {
- if (var1 < 0) {
- throw new IllegalArgumentException("Negative logicalIndex.");
- } else {
- int var2 = 0;
-
- for(int var3 = 0; var3 < this.fComponents.length; ++var3) {
- int var4 = var2 + this.fComponents[var3].getNumCharacters();
- if (var4 > var1) {
- TextLineComponent var5 = this.fComponents[var3];
- int var6 = var1 - var2;
- Rectangle2D var7 = var5.getCharVisualBounds(var6);
- float var8 = 0.0F;
- if (this.fComponentVisualOrder == null) {
- for(int var9 = 0; var9 < var3; ++var9) {
- Rectangle2D var10 = this.fComponents[var9].getLogicalBounds();
- var8 += (float)((RectangularShape)var10).getWidth();
- }
- } else {
- for(int var12 = 0; this.fComponentVisualOrder[var12] != var3; ++var12) {
- int var13 = this.fComponentVisualOrder[var12];
- Rectangle2D var11 = this.fComponents[var13].getLogicalBounds();
- var8 += (float)((RectangularShape)var11).getWidth();
- }
- }
-
- var7.setRect(((RectangularShape)var7).getX() + (double)var8, ((RectangularShape)var7).getY(), ((RectangularShape)var7).getWidth(), ((RectangularShape)var7).getHeight());
- return var7;
- }
-
- var2 = var4;
- }
-
- throw new IllegalArgumentException("logicalIndex too large.");
- }
- }
-
- private float getComponentShift(int var1) {
- byte var2 = (byte)this.fComponents[var1].getLineMetrics().getBaselineIndex();
- if (var2 >= 0) {
- return this.fBaselineOffsets[var2];
- } else {
- TextLineMetrics var3 = this.getMetrics();
- LineMetrics var4 = this.fComponents[var1].getLineMetrics();
- return var2 == -1 ? var4.getAscent() - var3.ascent : var3.descent - var4.getDescent();
- }
- }
-
- public void draw(Graphics2D var1, float var2, float var3) {
- float var4 = var2;
-
- for(int var5 = 0; var5 < this.fComponents.length; ++var5) {
- int var6 = this.fComponentVisualOrder == null ? var5 : this.fComponentVisualOrder[var5];
- TextLineComponent var7 = this.fComponents[var6];
- float var8 = this.getComponentShift(var6);
- var7.draw(var1, var4, var3 + var8);
- if (var5 != this.fComponents.length - 1) {
- Rectangle2D var9 = var7.getLogicalBounds();
- var4 += (float)((RectangularShape)var9).getWidth();
- }
- }
-
- }
-
- public Rectangle2D getBounds() {
- float var1 = 0.0F;
- float var2 = Float.MAX_VALUE;
- float var3 = Float.MIN_VALUE;
- float var4 = Float.MAX_VALUE;
- float var5 = Float.MIN_VALUE;
-
- for(int var6 = 0; var6 < this.fComponents.length; ++var6) {
- int var7 = this.fComponentVisualOrder == null ? var6 : this.fComponentVisualOrder[var6];
- TextLineComponent var8 = this.fComponents[var7];
- Rectangle2D var9 = var8.getVisualBounds();
- var2 = Math.min(var2, (float)((RectangularShape)var9).getX() + var1);
- var3 = Math.max(var3, (float)((RectangularShape)var9).getMaxX() + var1);
- float var10 = this.getComponentShift(var7);
- var4 = Math.min(var4, (float)((RectangularShape)var9).getY() + var10);
- var5 = Math.max(var5, (float)((RectangularShape)var9).getMaxY() + var10);
- Rectangle2D var11 = var8.getLogicalBounds();
- var1 += (float)((RectangularShape)var11).getWidth();
- }
-
- return new Rectangle2D.Float(var2, var4, var3 - var2, var5 - var4);
- }
-
- public Shape getOutline(AffineTransform var1) {
- GeneralPath var2 = new GeneralPath(1);
- float var3 = 0.0F;
-
- for(int var4 = 0; var4 < this.fComponents.length; ++var4) {
- int var5 = this.fComponentVisualOrder == null ? var4 : this.fComponentVisualOrder[var4];
- TextLineComponent var6 = this.fComponents[var5];
- float var7 = this.getComponentShift(var5);
- var2.append(var6.getOutline(var3, var7), false);
- Rectangle2D var8 = var6.getLogicalBounds();
- var3 += (float)((RectangularShape)var8).getWidth();
- }
-
- if (var1 != null) {
- var2.transform(var1);
- }
-
- return var2;
- }
-
- public int hashCode() {
- return this.fComponents.length << 16 ^ this.fComponents[0].hashCode() << 3 ^ this.fCharsLimit - this.fCharsStart;
- }
-
- public String toString() {
- StringBuffer var1 = new StringBuffer();
-
- for(int var2 = 0; var2 < this.fComponents.length; ++var2) {
- var1.append(this.fComponents[var2]);
- }
-
- return var1.toString();
- }
-
- public static TextLine fastCreateTextLine(FontRenderContext var0, char[] var1, int var2, int var3, Font var4, LineMetrics var5, Map var6) {
- boolean var7 = true;
- byte[] var8 = null;
- int[] var9 = null;
- Bidi var10 = null;
- int var12 = var3 - var2;
- char[] var11;
- if (var2 != 0) {
- var11 = new char[var12];
- System.arraycopy(var1, var2, var11, 0, var12);
- } else {
- var11 = var1;
- }
-
- boolean var13 = false;
- boolean var14 = false;
- byte[] var15 = null;
- if (var6 != null) {
- try {
- Boolean var16 = (Boolean)var6.get(TextAttribute.RUN_DIRECTION);
- if (var16 != null) {
- var14 = true;
- var7 = TextAttribute.RUN_DIRECTION_LTR.equals(var16);
- var13 = !var7;
- }
- } catch (ClassCastException var22) {
- }
-
- try {
- Integer var24 = (Integer)var6.get(TextAttribute.BIDI_EMBEDDING);
- if (var24 != null) {
- int var17 = var24;
- if (var17 >= -15 && var17 < 16) {
- byte var18 = (byte)var17;
- var13 = true;
- var15 = new byte[var12];
-
- for(int var19 = 0; var19 < var15.length; ++var19) {
- var15[var19] = var18;
- }
- }
- }
- } catch (ClassCastException var23) {
- }
- }
-
- if (!var13) {
- for(int var25 = 0; var25 < var11.length; ++var25) {
- if (Bidi.requiresBidi(var11[var25])) {
- var13 = true;
- break;
- }
- }
- }
-
- if (var13) {
- if (!var14) {
- var7 = Bidi.defaultIsLTR(var11, 0, var12);
- }
-
- if (var15 == null) {
- var15 = Bidi.getEmbeddingArray(var11, var7);
- }
-
- var10 = new Bidi(var11, var15, var7);
- var8 = var10.getLevels();
- var9 = var10.getLogicalToVisualMap();
- }
-
- if (var6 != null) {
- var6 = addInputMethodAttrs(var6);
- }
-
- TextLabelFactory var26 = new TextLabelFactory(var0, var11, var10);
- TextLineComponent[] var27;
- if (var10 != null && var10.getLevelLimit(0) != var12) {
- int var29 = 0;
-
- for(int var31 = 0; var31 < var12; ++var29) {
- var31 = var10.getLevelLimit(var31);
- }
-
- var27 = new TextLineComponent[var29];
- var29 = 0;
-
- int var20;
- for(int var32 = 0; var32 < var12; var32 = var20) {
- var20 = var10.getLevelLimit(var32);
- ExtendedTextLabel var21 = var26.createExtended(var4, var5, var32, var20);
- var27[var29] = new ExtendedTextLabelComponent(var21, var6);
- ++var29;
- }
- } else {
- var27 = new TextLineComponent[1];
- ExtendedTextLabel var28 = var26.createExtended(var4, var5, 0, var12);
- var27[0] = new ExtendedTextLabelComponent(var28, var6);
- }
-
- return new TextLine(var27, var5.getBaselineOffsets(), var1, var2, var3, var9, var8, var7);
- }
-
- private static TextLineComponent[] expandArrays(TextLineComponent[] var0) {
- TextLineComponent[] var1 = new TextLineComponent[var0.length + 8];
- System.arraycopy(var0, 0, var1, 0, var0.length);
- return var1;
- }
-
- private static Map addInputMethodAttrs(Map var0) {
- Object var1 = var0.get(TextAttribute.INPUT_METHOD_HIGHLIGHT);
-
- try {
- if (var1 != null) {
- if (var1 instanceof Annotation) {
- var1 = ((Annotation)var1).getValue();
- }
-
- InputMethodHighlight var2 = (InputMethodHighlight)var1;
- Map var3 = null;
-
- try {
- var3 = var2.getStyle();
- } catch (NoSuchMethodError var5) {
- }
-
- if (var3 == null) {
- Toolkit var4 = Toolkit.getDefaultToolkit();
- var3 = var4.mapInputMethodHighlight(var2);
- }
-
- if (var3 != null) {
- Hashtable var7 = new Hashtable(5, 0.9F);
- var7.putAll(var0);
- var7.putAll(var3);
- return var7;
- }
- }
- } catch (ClassCastException var6) {
- }
-
- return var0;
- }
-
- public static TextLineComponent[] getComponents(FontSource var0, char[] var1, int var2, int var3, int[] var4, byte[] var5, TextLabelFactory var6) {
- FontRenderContext var7 = var6.getFontRenderContext();
- int var8 = 0;
- TextLineComponent[] var9 = new TextLineComponent[8];
- int var10 = var2;
-
- do {
- int var11 = var0.getRunLimit(var10);
- if (var11 > var3) {
- var11 = var3;
- }
-
- GraphicAttribute var12 = var0.graphicAt(var10);
- int var22;
- if (var12 != null) {
- do {
- var22 = var2 + firstVisualChunk(var4, var5, var10 - var2, var11 - var2);
- Map var23 = var0.attributesAt(var10);
- GraphicComponent var24 = new GraphicComponent(var12, var23, var4, var5, var10 - var2, var22 - var2);
- var10 = var22;
- ++var8;
- if (var8 >= var9.length) {
- var9 = expandArrays(var9);
- }
-
- var9[var8 - 1] = var24;
- } while(var22 < var11);
- } else {
- do {
- var22 = var11;
- Font var14 = var0.fontAt(var10);
- if (var14 == null) {
- var14 = var0.getBestFontAt(var10);
- var22 = var14.canDisplayUpTo(var1, var10, var11);
- if (var22 == var10) {
- ++var22;
- }
- }
-
- do {
- int var15 = var2 + firstVisualChunk(var4, var5, var10 - var2, var22 - var2);
-
- do {
- Map var16 = var0.attributesAt(var10);
- int var17 = var10;
- LineMetrics var18 = var14.getLineMetrics(var1, var10, var15, var7);
- var10 += var18.getNumChars();
- ExtendedTextLabel var19 = var6.createExtended(var14, var18, var17, var10);
- var16 = addInputMethodAttrs(var16);
- ExtendedTextLabelComponent var20 = new ExtendedTextLabelComponent(var19, var16);
- ++var8;
- if (var8 >= var9.length) {
- var9 = expandArrays(var9);
- }
-
- var9[var8 - 1] = var20;
- } while(var10 < var15);
- } while(var10 < var22);
- } while(var10 < var11);
- }
- } while(var10 < var3);
-
- TextLineComponent[] var21;
- if (var9.length == var8) {
- var21 = var9;
- } else {
- var21 = new TextLineComponent[var8];
- System.arraycopy(var9, 0, var21, 0, var8);
- }
-
- return var21;
- }
-
- public static TextLine createLineFromText(char[] var0, int var1, int var2, FontSource var3, TextLabelFactory var4, boolean var5, float[] var6) {
- var4.setLineContext(var1, var2);
- Bidi var7 = var4.getLineBidi();
- int[] var8 = null;
- byte[] var9 = null;
- if (var7 != null) {
- var8 = var7.getLogicalToVisualMap();
- var9 = var7.getLevels();
- }
-
- TextLineComponent[] var10 = getComponents(var3, var0, var1, var2, var8, var9, var4);
- return new TextLine(var10, var6, var0, var1, var2, var8, var9, var5);
- }
-
- private static int[] computeComponentOrder(TextLineComponent[] var0, int[] var1) {
- int[] var2 = null;
- if (var1 != null && var0.length > 1) {
- var2 = new int[var0.length];
- int var3 = 0;
-
- for(int var4 = 0; var4 < var0.length; ++var4) {
- var2[var4] = var1[var3];
- var3 += var0[var4].getNumCharacters();
- }
-
- var2 = Bidi.getContiguousOrder(var2);
- var2 = Bidi.getInverseOrder(var2);
- }
-
- return var2;
- }
-
- static Bidi createBidiOnParagraph(AttributedCharacterIterator var0, char[] var1) {
- int var2 = var0.getBeginIndex();
- int var3 = var0.getEndIndex();
- int var4 = var3 - var2;
- if (var1 == null) {
- int var5 = 0;
- var1 = new char[var4];
-
- for(char var6 = var0.first(); var6 != '\uffff'; var6 = var0.next()) {
- var1[var5++] = var6;
- }
- } else if (var1.length != var4) {
- throw new IllegalArgumentException("chars length is not iter length");
- }
-
- boolean var19 = true;
- Bidi var20 = null;
- boolean var7 = false;
- boolean var8 = false;
- byte[] var9 = null;
- var0.first();
-
- try {
- Boolean var10 = (Boolean)var0.getAttribute(TextAttribute.RUN_DIRECTION);
- if (var10 != null) {
- var8 = true;
- var19 = TextAttribute.RUN_DIRECTION_LTR.equals(var10);
- var7 = !var19;
- }
- } catch (ClassCastException var17) {
- }
-
- int var21 = var2;
- int var11 = 0;
- int var12 = var8 && !var19 ? 1 : 0;
-
- int var14;
- do {
- var0.setIndex(var21);
- Object var13 = var0.getAttribute(TextAttribute.BIDI_EMBEDDING);
- var14 = var0.getRunLimit(TextAttribute.BIDI_EMBEDDING);
- if (var13 != null) {
- try {
- int var15 = (Integer)var13;
- if (var15 >= -15 && var15 < 16) {
- var11 = (byte)var15;
- if (var9 == null) {
- var9 = new byte[var4];
- var7 = true;
- if (!var8) {
- var8 = true;
- var19 = Bidi.defaultIsLTR(var1, 0, var4);
- var12 = var19 ? 0 : 1;
- }
-
- if (!var19) {
- for(int var16 = 0; var16 < var21 - var2; ++var16) {
- var9[var16] = (byte)var12;
- }
- }
- }
- }
- } catch (ClassCastException var18) {
- }
- } else if (var9 != null) {
- var11 = var12;
- }
-
- if (var9 != null && var11 != 0) {
- for(int var23 = var21 - var2; var23 < var14 - var2; ++var23) {
- var9[var23] = (byte)var11;
- }
- }
-
- var21 = var14;
- } while(var14 < var3);
-
- if (!var7) {
- for(int var22 = 0; var22 < var4; ++var22) {
- if (Bidi.requiresBidi(var1[var22])) {
- var7 = true;
- break;
- }
- }
- }
-
- if (var7) {
- if (!var8) {
- var19 = Bidi.defaultIsLTR(var1, 0, var4);
- }
-
- if (var9 == null) {
- var9 = Bidi.getEmbeddingArray(var1, var19);
- }
-
- var20 = new Bidi(var1, var9, var19);
- }
-
- return var20;
- }
-
- public static TextLine standardCreateTextLine(FontRenderContext var0, AttributedCharacterIterator var1, char[] var2, float[] var3) {
- ACIFontSource var4 = new ACIFontSource(var1);
- Bidi var5 = createBidiOnParagraph(var1, var2);
- TextLabelFactory var6 = new TextLabelFactory(var0, var2, var5);
- boolean var7 = true;
- if (var5 != null) {
- var7 = var5.isDirectionLTR();
- }
-
- return createLineFromText(var2, 0, var2.length, var4, var6, var7, var3);
- }
-
- private static int firstVisualChunk(int[] var0, byte[] var1, int var2, int var3) {
- if (var0 != null && var1 != null) {
- byte var4 = var1[var2];
-
- do {
- ++var2;
- } while(var2 < var3 && var1[var2] == var4);
-
- return var2;
- } else {
- return var3;
- }
- }
-
- public TextLine getJustifiedLine(float var1, float var2, int var3, int var4) {
- TextLineComponent[] var5 = new TextLineComponent[this.fComponents.length];
- System.arraycopy(this.fComponents, 0, var5, 0, this.fComponents.length);
- float var6 = 0.0F;
- float var7 = 0.0F;
- float var8 = 0.0F;
- boolean var9 = false;
-
- do {
- getAdvanceBetween(var5, 0, this.characterCount());
- float var10 = getAdvanceBetween(var5, var3, var4);
- var8 = (var1 - var10) * var2;
- int[] var11 = new int[var5.length];
- int var12 = 0;
-
- for(int var13 = 0; var13 < var5.length; ++var13) {
- int var14 = this.fComponentVisualOrder == null ? var13 : this.fComponentVisualOrder[var13];
- var11[var14] = var12;
- var12 += var5[var14].getNumJustificationInfos();
- }
-
- GlyphJustificationInfo[] var31 = new GlyphJustificationInfo[var12];
- byte var15 = 0;
-
- for(int var16 = 0; var16 < var5.length; ++var16) {
- TextLineComponent var17 = var5[var16];
- int var18 = var17.getNumCharacters();
- int var19 = var15 + var18;
- if (var19 > var3) {
- int var20 = Math.max(0, var3 - var15);
- int var21 = Math.min(var18, var4 - var15);
- var17.getJustificationInfos(var31, var11[var16], var20, var21);
- if (var19 >= var4) {
- break;
- }
- }
- }
-
- int var33 = 0;
-
- int var34;
- for(var34 = var12; var33 < var34 && var31[var33] == null; ++var33) {
- }
-
- while(var34 > var33 && var31[var34 - 1] == null) {
- --var34;
- }
-
- TextJustifier var35 = new TextJustifier(var31, var33, var34);
- float[] var36 = var35.justify(var8);
- boolean var37 = !var9;
- boolean var22 = false;
- boolean[] var23 = new boolean[1];
- var15 = 0;
-
- for(int var24 = 0; var24 < var5.length; ++var24) {
- TextLineComponent var25 = var5[var24];
- int var26 = var25.getNumCharacters();
- int var27 = var15 + var26;
- if (var27 > var3) {
- int var28 = Math.max(0, var3 - var15);
- Math.min(var26, var4 - var15);
- var5[var24] = var25.applyJustificationDeltas(var36, var11[var24] * 2, var23);
- var22 |= var23[0];
- if (var27 >= var4) {
- break;
- }
- }
- }
-
- var9 = var22 && !var9;
- } while(var9);
-
- return new TextLine(var5, this.fBaselineOffsets, this.fChars, this.fCharsStart, this.fCharsLimit, this.fCharLogicalOrder, this.fCharLevels, this.fIsDirectionLTR);
- }
-
- public static float getAdvanceBetween(TextLineComponent[] var0, int var1, int var2) {
- float var3 = 0.0F;
- int var4 = 0;
-
- for(int var5 = 0; var5 < var0.length; ++var5) {
- TextLineComponent var6 = var0[var5];
- int var7 = var6.getNumCharacters();
- int var8 = var4 + var7;
- if (var8 > var1) {
- int var9 = Math.max(0, var1 - var4);
- int var10 = Math.min(var7, var2 - var4);
- var3 += var6.getAdvanceBetween(var9, var10);
- if (var8 >= var2) {
- break;
- }
- }
-
- var4 = var8;
- }
-
- return var3;
- }
-
- // $FF: synthetic method
- static TextLineComponent[] access$100(TextLine var0) {
- return var0.fComponents;
- }
-
- // $FF: synthetic method
- static int[] access$200(TextLine var0) {
- return var0.fComponentVisualOrder;
- }
-
- // $FF: synthetic method
- static float access$300(TextLine var0, int var1) {
- return var0.getComponentShift(var1);
- }
- }
-