home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / awt / font / LineBreakMeasurer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  2.2 KB  |  113 lines

  1. package java.awt.font;
  2.  
  3. import java.text.AttributedCharacterIterator;
  4. import java.text.BreakIterator;
  5. import java.text.CharacterIterator;
  6.  
  7. public final class LineBreakMeasurer {
  8.    private BreakIterator breakIter;
  9.    private int start;
  10.    private int pos;
  11.    private int limit;
  12.    private TextMeasurer measurer;
  13.  
  14.    public LineBreakMeasurer(AttributedCharacterIterator var1, FontRenderContext var2) {
  15.       this(var1, BreakIterator.getLineInstance(), var2);
  16.    }
  17.  
  18.    public LineBreakMeasurer(AttributedCharacterIterator var1, BreakIterator var2, FontRenderContext var3) {
  19.       this.breakIter = var2;
  20.       this.breakIter.setText((CharacterIterator)var1.clone());
  21.       this.measurer = new TextMeasurer(var1, var3);
  22.       this.limit = var1.getEndIndex();
  23.       this.pos = this.start = var1.getBeginIndex();
  24.    }
  25.  
  26.    public int nextOffset(float var1) {
  27.       return this.nextOffset(var1, this.limit, false);
  28.    }
  29.  
  30.    public int nextOffset(float var1, int var2, boolean var3) {
  31.       int var4 = this.pos;
  32.       if (this.pos < this.limit) {
  33.          if (var2 <= this.pos) {
  34.             throw new IllegalArgumentException("offsetLimit must be after current position");
  35.          }
  36.  
  37.          int var5 = this.measurer.getLineBreakIndex(this.pos, var1);
  38.          if (var5 == this.limit) {
  39.             var4 = this.limit;
  40.          } else if (Character.isWhitespace(this.measurer.getChars()[var5 - this.start])) {
  41.             var4 = this.breakIter.following(var5);
  42.          } else {
  43.             int var6 = var5 + 1;
  44.             if (var6 == this.limit) {
  45.                this.breakIter.last();
  46.                var4 = this.breakIter.previous();
  47.             } else {
  48.                var4 = this.breakIter.preceding(var6);
  49.             }
  50.  
  51.             if (var4 <= this.pos) {
  52.                if (var3) {
  53.                   var4 = this.pos;
  54.                } else {
  55.                   var4 = Math.max(this.pos + 1, var5);
  56.                }
  57.             }
  58.          }
  59.       }
  60.  
  61.       if (var4 > var2) {
  62.          var4 = var2;
  63.       }
  64.  
  65.       return var4;
  66.    }
  67.  
  68.    public TextLayout nextLayout(float var1) {
  69.       return this.nextLayout(var1, this.limit, false);
  70.    }
  71.  
  72.    public TextLayout nextLayout(float var1, int var2, boolean var3) {
  73.       if (this.pos < this.limit) {
  74.          int var4 = this.nextOffset(var1, var2, var3);
  75.          if (var4 == this.pos) {
  76.             return null;
  77.          } else {
  78.             TextLayout var5 = this.measurer.getLayout(this.pos, var4);
  79.             this.pos = var4;
  80.             return var5;
  81.          }
  82.       } else {
  83.          return null;
  84.       }
  85.    }
  86.  
  87.    public int getPosition() {
  88.       return this.pos;
  89.    }
  90.  
  91.    public void setPosition(int var1) {
  92.       if (var1 >= this.start && var1 <= this.limit) {
  93.          this.pos = var1;
  94.       } else {
  95.          throw new IllegalArgumentException("position is out of range");
  96.       }
  97.    }
  98.  
  99.    public void insertChar(AttributedCharacterIterator var1, int var2) {
  100.       this.measurer.insertChar(var1, var2);
  101.       this.breakIter.setText((CharacterIterator)var1.clone());
  102.       this.limit = var1.getEndIndex();
  103.       this.pos = this.start = var1.getBeginIndex();
  104.    }
  105.  
  106.    public void deleteChar(AttributedCharacterIterator var1, int var2) {
  107.       this.measurer.deleteChar(var1, var2);
  108.       this.breakIter.setText((CharacterIterator)var1.clone());
  109.       this.limit = var1.getEndIndex();
  110.       this.pos = this.start = var1.getBeginIndex();
  111.    }
  112. }
  113.