Package org.eclipse.jface.text

Examples of org.eclipse.jface.text.TypedPosition


      String contentType= null;
      int newLength= e.getText() == null ? 0 : e.getText().length();

      int first= d.computeIndexInCategory(fPositionCategory, reparseStart);
      if (first > 0)  {
        TypedPosition partition= (TypedPosition) category[first - 1];
        if (partition.includes(reparseStart)) {
          partitionStart= partition.getOffset();
          contentType= partition.getType();
          if (e.getOffset() == partition.getOffset() + partition.getLength())
            reparseStart= partitionStart;
          -- first;
        } else if (reparseStart == e.getOffset() && reparseStart == partition.getOffset() + partition.getLength()) {
          partitionStart= partition.getOffset();
          contentType= partition.getType();
          reparseStart= partitionStart;
          -- first;
        } else {
          partitionStart= partition.getOffset() + partition.getLength();
          contentType= IDocument.DEFAULT_CONTENT_TYPE;
        }
      }

      fPositionUpdater.update(e);
      for (int i= first; i < category.length; i++) {
        Position p= category[i];
        if (p.isDeleted) {
          rememberDeletedOffset(e.getOffset());
          break;
        }
      }
      category= d.getPositions(fPositionCategory);

      fScanner.setPartialRange(d, reparseStart, d.getLength() - reparseStart, contentType, partitionStart);

      int lastScannedPosition= reparseStart;
      IToken token= fScanner.nextToken();

      while (!token.isEOF()) {

        contentType= getTokenContentType(token);

        if (!isSupportedContentType(contentType)) {
          token= fScanner.nextToken();
          continue;
        }

        int start= fScanner.getTokenOffset();
        int length= fScanner.getTokenLength();

        lastScannedPosition= start + length - 1;

        // remove all affected positions
        while (first < category.length) {
          TypedPosition p= (TypedPosition) category[first];
          if (lastScannedPosition >= p.offset + p.length ||
              (p.overlapsWith(start, length) &&
                 (!d.containsPosition(fPositionCategory, start, length) ||
                  !contentType.equals(p.getType())))) {

            rememberRegion(p.offset, p.length);
            d.removePosition(fPositionCategory, p);
            ++ first;

          } else
            break;
        }

        // if position already exists and we have scanned at least the
        // area covered by the event, we are done
        if (d.containsPosition(fPositionCategory, start, length)) {
          if (lastScannedPosition >= e.getOffset() + newLength)
            return createRegion();
          ++ first;
        } else {
          // insert the new type position
          try {
            d.addPosition(fPositionCategory, new TypedPosition(start, length, contentType));
            rememberRegion(start, length);
          } catch (BadPositionCategoryException x) {
          } catch (BadLocationException x) {
          }
        }

        token= fScanner.nextToken();
      }


      // remove all positions behind lastScannedPosition since there aren't any further types
      if (lastScannedPosition != reparseStart) {
        // if this condition is not met, nothing has been scanned because of a deletion
        ++ lastScannedPosition;
      }
      first= d.computeIndexInCategory(fPositionCategory, lastScannedPosition);
      category= d.getPositions(fPositionCategory);

      TypedPosition p;
      while (first < category.length) {
        p= (TypedPosition) category[first++];
        d.removePosition(fPositionCategory, p);
        rememberRegion(p.offset, p.length);
      }
View Full Code Here


   * @see IDocumentPartitioner#getContentType(int)
   */
  public String getContentType(int offset) {
    checkInitialization();

    TypedPosition p= findClosestPosition(offset);
    if (p != null && p.includes(offset))
      return p.getType();

    return IDocument.DEFAULT_CONTENT_TYPE;
  }
View Full Code Here

      int index= fDocument.computeIndexInCategory(fPositionCategory, offset);

      if (index < category.length) {

        TypedPosition next= (TypedPosition) category[index];

        if (offset == next.offset)
          return new TypedRegion(next.getOffset(), next.getLength(), next.getType());

        if (index == 0)
          return new TypedRegion(0, next.offset, IDocument.DEFAULT_CONTENT_TYPE);

        TypedPosition previous= (TypedPosition) category[index - 1];
        if (previous.includes(offset))
          return new TypedRegion(previous.getOffset(), previous.getLength(), previous.getType());

        int endOffset= previous.getOffset() + previous.getLength();
        return new TypedRegion(endOffset, next.getOffset() - endOffset, IDocument.DEFAULT_CONTENT_TYPE);
      }

      TypedPosition previous= (TypedPosition) category[category.length - 1];
      if (previous.includes(offset))
        return new TypedRegion(previous.getOffset(), previous.getLength(), previous.getType());

      int endOffset= previous.getOffset() + previous.getLength();
      return new TypedRegion(endOffset, fDocument.getLength() - endOffset, IDocument.DEFAULT_CONTENT_TYPE);

    } catch (BadPositionCategoryException x) {
    } catch (BadLocationException x) {
    }
View Full Code Here

      int endOffset= offset + length;

      Position[] category= fDocument.getPositions(fPositionCategory);

      TypedPosition previous= null, current= null;
      int start, end, gapOffset;
      Position gap= new Position(0);

      int startIndex= getFirstIndexEndingAfterOffset(category, offset);
      int endIndex= getFirstIndexStartingAfterOffset(category, endOffset);
      for (int i= startIndex; i < endIndex; i++) {

        current= (TypedPosition) category[i];

        gapOffset= (previous != null) ? previous.getOffset() + previous.getLength() : 0;
        gap.setOffset(gapOffset);
        gap.setLength(current.getOffset() - gapOffset);
        if ((includeZeroLengthPartitions && overlapsOrTouches(gap, offset, length)) ||
            (gap.getLength() > 0 && gap.overlapsWith(offset, length))) {
          start= Math.max(offset, gapOffset);
          end= Math.min(endOffset, gap.getOffset() + gap.getLength());
          list.add(new TypedRegion(start, end - start, IDocument.DEFAULT_CONTENT_TYPE));
        }

        if (current.overlapsWith(offset, length)) {
          start= Math.max(offset, current.getOffset());
          end= Math.min(endOffset, current.getOffset() + current.getLength());
          list.add(new TypedRegion(start, end - start, current.getType()));
        }

        previous= current;
      }

      if (previous != null) {
        gapOffset= previous.getOffset() + previous.getLength();
        gap.setOffset(gapOffset);
        gap.setLength(fDocument.getLength() - gapOffset);
        if ((includeZeroLengthPartitions && overlapsOrTouches(gap, offset, length)) ||
            (gap.getLength() > 0 && gap.overlapsWith(offset, length))) {
          start= Math.max(offset, gapOffset);
View Full Code Here

      fDocumentChanging= true;
      if (fCachedRedrawState) {
        try {
          int offset= e.getOffset() + e.getLength();
          ITypedRegion region= getPartition(e.getDocument(), offset);
          fRememberedPosition= new TypedPosition(region);
          e.getDocument().addPosition(fPositionCategory, fRememberedPosition);
        } catch (BadLocationException x) {
          // can not happen
        } catch (BadPositionCategoryException x) {
          // should not happen on input elements
View Full Code Here

TOP

Related Classes of org.eclipse.jface.text.TypedPosition

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.