亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? syntaxhighlighter.java

?? MSP IM Source code 2008 update
?? JAVA
字號(hào):
package se.sics.mspsim.extutil.highlight;import java.awt.*;import javax.swing.*;import javax.swing.text.*;import javax.swing.event.*;import java.io.*;// Public domain, no restrictions, Ian Holyer, University of Bristol./** * Display text with syntax highlighting. Highlighting is done with full * accuracy, using a given language scanner. Large amounts of re-highlighting * are done in small bursts to make sure the user interface doesn't freeze. */public class SyntaxHighlighter extends JTextPane implements DocumentListener, TokenTypes {  private static final long serialVersionUID = -1801145479677890566L;  private StyledDocument doc;  private Scanner scanner;  private int rows, columns;  private int currentY, currentHeight = -1;  /**   * Create a graphics component which displays text with syntax highlighting.   * Provide a rows and columns, in characters, and a language scanner.   */  public SyntaxHighlighter(int rows, int columns, Scanner scanner) {    super(new DefaultStyledDocument());    doc = (StyledDocument) getDocument();    this.rows = rows;    this.columns = columns;    this.scanner = scanner;    doc.addDocumentListener(this);    Font font = new Font("Monospaced", Font.PLAIN, getFont().getSize());    changeFont(font);    initStyles();    // Quick fix to highlight selected line    addCaretListener(new CaretListener() {      public void caretUpdate(CaretEvent e) {        int caret = getCaretPosition();        if (caret >= 0) {          try {            Rectangle r = getUI().modelToView(SyntaxHighlighter.this, caret);            if (currentHeight > 0) {              repaint(0, currentY, getWidth(), currentHeight);            }            if (r != null && r.height > 0) {              currentY = r.y;              currentHeight = r.height;              repaint(0, r.y, getWidth(), r.height);            } else {              currentHeight = -1;            }          } catch (BadLocationException e1) {            // Ignore          }        }      }    });    setOpaque(false);  }  public int getColumns() {    return columns;  }  public int getRows() {    return rows;  }  /**   * Change the component's font, and change the size of the component to match.   */  public void changeFont(Font font) {    int borderOfJTextPane = 3;    setFont(font);    FontMetrics metrics = getFontMetrics(font);    int paneWidth = columns * metrics.charWidth('m') + 2 * borderOfJTextPane;    int paneHeight = rows * metrics.getHeight() + 2 * borderOfJTextPane;    Dimension size = new Dimension(paneWidth, paneHeight);    setMinimumSize(size);    setPreferredSize(size);    invalidate();  }  /**   * Read new text into the component from a <code>Reader</code>. Overrides   * <code>read</code> in <code>JTextComponent</code> in order to highlight   * the new text.   */  public void read(Reader in, Object desc) throws IOException {    int oldLength = getDocument().getLength();    doc.removeDocumentListener(this);    super.read(in, desc);    doc = (StyledDocument) getDocument();    doc.addDocumentListener(this);    int newLength = getDocument().getLength();    firstRehighlightToken = scanner.change(0, oldLength, newLength);    repaint();  }  // An array of styles, indexed by token type. Default styles are set up,  // which can be used for any languages.  private Style[] styles;  private void initStyles() {    styles = new Style[typeNames.length];    changeStyle(UNRECOGNIZED, Color.black);    changeStyle(WHITESPACE, Color.black);    changeStyle(WORD, Color.black);    changeStyle(NUMBER, Color.black);    changeStyle(PUNCTUATION, Color.blue);    changeStyle(COMMENT, new Color(178,34,34), Font.ITALIC);    changeStyle(START_COMMENT, new Color(178,34,34), Font.ITALIC);    changeStyle(MID_COMMENT, new Color(178,34,34), Font.ITALIC);    changeStyle(END_COMMENT, new Color(178,34,34), Font.ITALIC);    changeStyle(TAG, Color.blue, Font.BOLD);    changeStyle(END_TAG, Color.blue, Font.BOLD);    changeStyle(KEYWORD, new Color(160,32,240));    changeStyle(KEYWORD2, new Color(160,32,240));    changeStyle(IDENTIFIER, Color.black);    changeStyle(LITERAL, Color.green.darker());    changeStyle(STRING, new Color(188,143,143));    changeStyle(CHARACTER, new Color(188,143,143));    changeStyle(OPERATOR, Color.black, Font.BOLD);    changeStyle(BRACKET, Color.black);    changeStyle(SEPARATOR, Color.black);    changeStyle(URL, Color.blue.darker());    for (int i = 0; i < styles.length; i++) {      if (styles[i] == null) {        styles[i] = styles[WHITESPACE];      }    }  }  /**   * Change the style of a particular type of token.   */  public void changeStyle(int type, Color color) {    Style style = addStyle(typeNames[type], null);    StyleConstants.setForeground(style, color);    styles[type] = style;  }  /**   * Change the style of a particular type of token, including adding bold or   * italic using a third argument of <code>Font.BOLD</code> or   * <code>Font.ITALIC</code> or the bitwise union   * <code>Font.BOLD|Font.ITALIC</code>.   */  public void changeStyle(int type, Color color, int fontStyle) {    Style style = addStyle(typeNames[type], null);    StyleConstants.setForeground(style, color);    if ((fontStyle & Font.BOLD) != 0)      StyleConstants.setBold(style, true);    if ((fontStyle & Font.ITALIC) != 0)      StyleConstants.setItalic(style, true);    styles[type] = style;  }  public int getLineCount() {    return getDocument().getDefaultRootElement().getElementCount();  }  public int getLineStartOffset(int line) {    Element root = getDocument().getDefaultRootElement();    if (line < 0 || line >= root.getElementCount()) {      throw new IndexOutOfBoundsException("illegal line");    }    return root.getElement(line).getStartOffset();  }  public int getLineEndOffset(int line) {    Element root = getDocument().getDefaultRootElement();    if (line < 0 || line >= root.getElementCount()) {      throw new IndexOutOfBoundsException("illegal line");    }    return root.getElement(line).getEndOffset();  }  /**   * <font style='color:gray;'>Ignore this method. Responds to the underlying   * document changes by re-highlighting.</font>   */  public void insertUpdate(DocumentEvent e) {    int offset = e.getOffset();    int length = e.getLength();    firstRehighlightToken = scanner.change(offset, 0, length);    repaint();  }  /**   * <font style='color:gray;'>Ignore this method. Responds to the underlying   * document changes by re-highlighting.</font>   */  public void removeUpdate(DocumentEvent e) {    int offset = e.getOffset();    int length = e.getLength();    firstRehighlightToken = scanner.change(offset, length, 0);    repaint();  }  /**   * <font style='color:gray;'>Ignore this method. Responds to the underlying   * document changes by re-highlighting.</font>   */  public void changedUpdate(DocumentEvent e) {    // Do nothing.  }  // Scan a small portion of the document. If more is needed, call repaint()  // so the GUI gets a go and doesn't freeze, but calls this again later.  private Segment text = new Segment();  private int firstRehighlightToken;  private int smallAmount = 100;  private Color highlightColor = new Color(0, 240, 0, 255);  /**   * <font style='color:gray;'>Ignore this method. Carries out a small amount of   * re-highlighting for each call to <code>repaint</code>.</font>   */  protected void paintComponent(Graphics g) {    if (currentHeight > 0) {      g.setColor(highlightColor);      g.fillRect(0, currentY, getWidth(), currentHeight);    }    super.paintComponent(g);    int offset = scanner.position();    if (offset < 0)      return;    int tokensToRedo = 0;    int amount = smallAmount;    while (tokensToRedo == 0 && offset >= 0) {      int length = doc.getLength() - offset;      if (length > amount) {        length = amount;      }      try {        doc.getText(offset, length, text);      } catch (BadLocationException e) {        return;      }      tokensToRedo = scanner.scan(text.array, text.offset, text.count);      offset = scanner.position();      amount = 2 * amount;    }    for (int i = 0; i < tokensToRedo; i++) {      Token t = scanner.getToken(firstRehighlightToken + i);      int length = t.symbol.name.length();      int type = t.symbol.type;      if (type < 0) {        type = UNRECOGNIZED;      }      doc.setCharacterAttributes(t.position, length, styles[type], false);    }    firstRehighlightToken += tokensToRedo;    if (offset >= 0) {      repaint(2);    }  }  public void viewLine(int line) {    if (line >= 0 && line < getLineCount()) {      try {        int pos = getLineStartOffset(line);        // Quick fix to position the line somewhere in the center        Rectangle r = getUI().modelToView(this, pos);        if (r != null && r.height > 0) {          Rectangle vr = getVisibleRect();          vr.y = r.y - vr.height / 2;          if (vr.y < 0) {            vr.y = 0;          }          scrollRectToVisible(vr);        }        setCaretPosition(pos);      } catch (BadLocationException e1) {        // Ignore      }    }  }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉成人啪国产精品视频综合网| 午夜视频在线观看一区| 91论坛在线播放| 久久99热狠狠色一区二区| 中文字幕中文乱码欧美一区二区| 欧美日韩一二三区| 成人视屏免费看| 久久不见久久见免费视频1| 亚洲三级在线看| 久久蜜桃一区二区| 欧美浪妇xxxx高跟鞋交| bt7086福利一区国产| 秋霞电影一区二区| 亚洲国产欧美日韩另类综合 | 精品对白一区国产伦| 欧洲生活片亚洲生活在线观看| 国内成+人亚洲+欧美+综合在线| 亚洲国产综合色| 国产精品伦一区| 久久久久久久久99精品| 日韩精品中文字幕在线一区| 欧美四级电影网| 91福利在线播放| 91蜜桃婷婷狠狠久久综合9色| 国产一二精品视频| 九九九精品视频| 蜜臀av性久久久久蜜臀av麻豆 | 亚洲国产综合色| 一区二区三区四区蜜桃| 亚洲女同女同女同女同女同69| 久久蜜桃一区二区| 国产亚洲成年网址在线观看| 日韩女优毛片在线| 日韩精品一区二区三区蜜臀 | 中文字幕日韩av资源站| 国产亚洲1区2区3区| 欧美精品一区男女天堂| 精品国产乱码久久久久久图片| 欧美电影免费观看高清完整版在线| 欧美精品一级二级| 91精品久久久久久久久99蜜臂| 欧美日本国产一区| 欧美喷水一区二区| 日韩一级二级三级精品视频| 欧美一级艳片视频免费观看| 日韩天堂在线观看| 精品国产网站在线观看| 久久女同性恋中文字幕| 国产三级一区二区| 国产精品剧情在线亚洲| 亚洲欧洲综合另类| 亚洲va欧美va人人爽午夜| 水野朝阳av一区二区三区| 日本不卡视频一二三区| 久久99国产精品免费| 国产精品中文字幕欧美| 国产 日韩 欧美大片| 99国产精品99久久久久久| 91最新地址在线播放| 欧美性大战xxxxx久久久| 欧美日本一区二区三区四区| 91精品国产综合久久国产大片| 7777精品伊人久久久大香线蕉完整版 | 国产日韩精品一区二区三区| 国产精品久久久久久久久动漫| 亚洲男同性恋视频| 日本伊人色综合网| 国产成人在线观看| 91丝袜美腿高跟国产极品老师| 欧美日韩一区精品| 精品成人免费观看| 亚洲欧美偷拍另类a∨色屁股| 亚洲第一福利视频在线| 国内精品伊人久久久久影院对白| 成人97人人超碰人人99| 欧美日韩综合一区| 久久久国际精品| 一区二区国产盗摄色噜噜| 老司机一区二区| 99这里只有精品| 欧美精品tushy高清| 日本一区二区三区高清不卡 | 国产精品一区二区男女羞羞无遮挡 | 成人激情免费网站| 欧美日韩国产不卡| 国产亚洲精品aa| 亚洲第一福利视频在线| 国产精品1区2区3区在线观看| 色嗨嗨av一区二区三区| 欧美成人三级电影在线| 亚洲激情自拍视频| 国产一二精品视频| 欧美久久久久久蜜桃| 国产精品久久久一区麻豆最新章节| 五月天一区二区三区| 成人美女视频在线观看18| 欧美肥妇bbw| 综合久久给合久久狠狠狠97色| 久久精品国产一区二区三区免费看 | 国产精品综合视频| 欧美日韩国产一二三| 国产精品久久久久影院老司| 日韩av午夜在线观看| 色婷婷久久久综合中文字幕| www欧美成人18+| 天天做天天摸天天爽国产一区| jizzjizzjizz欧美| 久久久国产午夜精品| 麻豆精品视频在线| 欧美视频精品在线| 亚洲欧美日本韩国| 成人福利视频网站| 久久久国产精品午夜一区ai换脸| 青青草97国产精品免费观看无弹窗版 | 亚洲第一在线综合网站| 99精品视频一区二区三区| 久久精品日韩一区二区三区| 秋霞午夜av一区二区三区| 欧美日韩一区视频| 一区二区三区高清不卡| 成人av电影免费观看| 国产香蕉久久精品综合网| 黄色资源网久久资源365| 欧美一区二区三级| 亚洲成人自拍一区| 欧美午夜精品电影| 亚洲综合精品自拍| 欧洲激情一区二区| 一区二区三区在线视频免费观看 | 日韩午夜三级在线| 五月婷婷久久丁香| 3751色影院一区二区三区| 天天综合日日夜夜精品| 欧美日韩精品系列| 日韩国产精品91| 欧美成人r级一区二区三区| 奇米影视7777精品一区二区| 欧美一区二区视频免费观看| 丝袜国产日韩另类美女| 3d成人动漫网站| 日av在线不卡| 欧美白人最猛性xxxxx69交| 精品在线你懂的| 久久久久久久精| 成人精品在线视频观看| 中文字幕日韩av资源站| 日本精品免费观看高清观看| 夜夜精品视频一区二区| 欧美日韩综合在线免费观看| 青青国产91久久久久久| 26uuu精品一区二区三区四区在线| 精品在线亚洲视频| 亚洲国产成人在线| 色偷偷久久一区二区三区| 亚洲午夜久久久久久久久久久| 欧美精品第1页| 经典三级在线一区| 色综合天天在线| 欧美成人免费网站| 久久精品国产第一区二区三区| 日韩女优视频免费观看| 国产在线精品一区在线观看麻豆| 欧美电影免费观看高清完整版| 国产成人免费在线观看不卡| 国产精品护士白丝一区av| 91九色02白丝porn| 香蕉成人啪国产精品视频综合网| 精品福利一二区| 91蝌蚪porny| 日本欧美大码aⅴ在线播放| 久久蜜桃av一区精品变态类天堂 | 亚洲日本青草视频在线怡红院| 欧美日韩综合色| 黑人巨大精品欧美黑白配亚洲| 中文字幕在线视频一区| 欧美日韩精品欧美日韩精品一| 精东粉嫩av免费一区二区三区| 1区2区3区国产精品| 6080亚洲精品一区二区| 国产v综合v亚洲欧| 亚洲国产你懂的| 国产目拍亚洲精品99久久精品| 欧美日韩在线播放一区| 国产精品一区在线| 亚洲午夜精品17c| 久久免费的精品国产v∧| 欧美在线你懂得| 粉嫩久久99精品久久久久久夜| 亚洲www啪成人一区二区麻豆| 国产调教视频一区| 91精品国产黑色紧身裤美女| 成人开心网精品视频| 免费观看91视频大全| 亚洲人123区| 久久九九久久九九| 欧美一区二区二区| 91国偷自产一区二区三区观看| 国产麻豆视频精品| 免费看日韩a级影片| 伊人色综合久久天天人手人婷|