CodePane.java


Dosyayı İndir
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class CodePane extends JTextPane implements DocumentListener{
  private SimpleAttributeSet theDefaultAttributeSet=new SimpleAttributeSet();
  private SimpleAttributeSet theElementAttributeSet=new SimpleAttributeSet();
  private SimpleAttributeSet theAttributeAttributeSet=new SimpleAttributeSet();
  private DocumentEvent event;
  public CodePane(){
    getDocument().addDocumentListener(this);
    StyleConstants.setForeground(theElementAttributeSet,Color.blue);
    StyleConstants.setBold(theElementAttributeSet,true);
    StyleConstants.setForeground(theAttributeAttributeSet,new Color(0xaa,0x5a,0xcc));
    StyleConstants.setBold(theAttributeAttributeSet,true);
    StyleConstants.setForeground(theDefaultAttributeSet,Color.black);
    StyleConstants.setBold(theDefaultAttributeSet,false);
  }
  public void changedUpdate(DocumentEvent e){}
  public void insertUpdate(DocumentEvent e){
    event=e;
    Runnable runnable=new Runnable(){
      public void run(){
        stylize(event);
      }
    };
    SwingUtilities.invokeLater(runnable);
  }
  public void removeUpdate(DocumentEvent e){
    event=e;
    Runnable runnable=new Runnable(){
      public void run(){
        stylize(event);
      }
    };
    SwingUtilities.invokeLater(runnable);
  }
  private void stylize(DocumentEvent e){
    try{
      int start=getStartIndex(e);
      int finish=getFinishIndex(e);
      stylize((StyledDocument)e.getDocument(),start,finish);
    }catch(Exception ex){
      ex.printStackTrace();
    }
  }
  private void stylize(StyledDocument document,int start,int finish){
    try{
      boolean done=false;
      document.setCharacterAttributes(start,finish-start+1,theDefaultAttributeSet,false);
      String text=document.getText(start,finish-start+1);
      int last=0;
      while(!done){
        int lt=text.indexOf('<',last);
        if(lt!=-1){
          int gt=text.indexOf('>',lt+1);
          if(gt!=-1){
            try{
              document.setCharacterAttributes(start+lt,gt-lt+1,theElementAttributeSet,false);
              styleAttibuteValues(document,text,lt,gt,start);
              last=gt+1;
            }catch(Throwable e){
              e.printStackTrace();
            }
          }else{
            done=true;
          }
        }else{
          done=true;
        }
      }
    }catch(Throwable e){
      e.printStackTrace();
    }
  }
  private void styleAttibuteValues(StyledDocument document,String text,int lt,int gt,int start){
    try{
      boolean done=false;
      int last=lt;
      while(!done){
        int opener=text.indexOf('\"',last);
        if(opener!=-1){
          int closer=text.indexOf('\"',opener+1);
          if(closer!=-1 && closer<gt){
            document.setCharacterAttributes(start+opener,closer-opener+1,theAttributeAttributeSet,false);
            last=closer+1;
          }else{
            done=true;
          }
        }else{
          done=true;
        }
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  private int getStartIndex(DocumentEvent e)
      throws Exception
  {
    int offset=e.getOffset();
    int length=e.getLength();
    Document doc=e.getDocument();
    String text=doc.getText(0,offset+1);
    int index=text.lastIndexOf("<");
    if(index!=-1){
      return index;
    }else{
      return 0;
    }
  }
  private int getFinishIndex(DocumentEvent e)
      throws Exception
  {
    int offset=e.getOffset();
    int length=e.getLength();
    Document doc=e.getDocument();
    int docLength=doc.getLength();
    int start=offset+length;
    int finish=docLength-start;
    if(e.getType()==DocumentEvent.EventType.REMOVE){
      start=offset;
      finish=docLength-start;
    }
    String text=doc.getText(start,finish);
    int index=text.indexOf(">");
    if(index!=-1){
      return start+index;
    }else{
      return docLength;
    }
  }
}
				
Dosyayı İndir

Bu Sayfayı Paylaş:




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir