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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? syntaxscanner.java

?? ∥顯示數據文件未壓縮大小及壓縮大小單行文本顯示域存儲隨機生成的數據
?? JAVA
字號:
package org.jr.jzj.editor;
/**
 * <p>Copyright: Copyright (c) 2002-2003</p>
 * <p>Company: JavaResearch(http://www.javaresearch.org)</p>
 * <p>最后更新日期:2003年3月20日
 * @author Barney,Cherami,Brain
 * @version 0.8
 */

import java.util.*;


public class SyntaxScanner {
  /**
   * all token types
   */
  public static final int NO_TOKEN = -1;
  public static final int TEXT = 0;
  public static final int STRING = 1;
  public static final int COMMENT = 2;
  public static final int LINE_COMMENT = 3;
  public static final int MULTI_COMMENT = 4;
  public static final int KEY_WORD = 5;
  public static final int CLASS = 6;
  public static final int PLAIN_TEXT = 7;
  public static final int TAG = 8;
  public static final int CONTENT = 9;
  public static final int DOC_COMMENT = 10;
  public static final int SCRIPT = 11;
  //
  public static final int NUM_TOKEN_TYPES = 12;

  public static int BACKUP = 2048;
  protected int currentlyScanning = NO_TOKEN;
  protected int token = NO_TOKEN;
  protected int stop = 0;
  protected char[] source = {};
  protected int pos = 0;
  protected static TreeSet keywords;
  protected static TreeSet classes;
  protected int contentType = SyntaxDocument.SYNTAX_SOURCE;
  protected boolean prevTagScript = false;
  protected boolean isInTag = false;
  protected SyntaxParser parser;

  protected SyntaxScanner(SyntaxParser parser) {
    this.parser = parser;
    buildTrees();
  }

  /**
   * 返回一個句柄
   * @return
   */
  public static SyntaxScanner newInstance() {
    return (new DefaultScanner());
  }

  /**
   * 返回一個句柄
   * @return
   */
  public static SyntaxScanner newInstance(SyntaxParser parser) {
    SyntaxScanner scanner;
    if (parser == null) {
      scanner = new DefaultScanner();
    }
    else {
      try {
        scanner = new SyntaxScanner(parser);
      }
      catch (Exception ex) {
        ex.printStackTrace();
        scanner = new DefaultScanner();
      }
    }

    return scanner;
  }

  /**
   * Token type
   * @return
   */
  public int getToken() {
    return token;
  }

  /**
   * 設置作用區域
   * @param strt
   * @param end
   * @param str
   */
  public void setRange(int strt, int end, String str) {
    stop = end;
    source = str.toCharArray();
    if (stop > source.length) {
      stop = source.length;
    }
    pos = strt;
    pos -= BACKUP;
    if (pos < 0) {
      pos = 0;
    }
  }

  /**
   *
   * @param buff
   */
  protected void setTokenFrom(StringBuffer buff) {
    if (buff == null) {
      return;
    }
    token = TEXT;
    if (keywords.contains(buff.toString())) {
      token = KEY_WORD;
    }
    if (classes.contains(buff.toString())) {
      token = CLASS;
    }
  }

  /**
   *
   * @return
   */
  public int getEndOffset() {
    return pos;
  }

  /**
   * 返回內容類型
   * @return
   */
  public int getContentType() {
    return contentType;
  }

  /**
   * 設置內容類型
   * @param type
   */
  public void setContentType(int type) {
    contentType = type;
  }

  /**
   * 掃描設置
   */
  public void scan() {
    switch (contentType) {
      case SyntaxDocument.SYNTAX_SOURCE:
        scanSyntaxSource();
        break;
      case SyntaxDocument.MARKUP:
        scanMarkup();
        break;
      default:
        scanPlainText();
        break;
    }
  }

  /**
   * 無格式文本
   */
  protected void scanPlainText() {
    pos = stop;
    token = TEXT;
  }

  /** @todo  */
  /**
   * 建立語法樹
   */
  protected void buildTrees() {
    if (parser != null) {
      classes = parser.getClasses();
      keywords = parser.getKeywords();
    }
  }

  /**
   * 語法文本
   */
  protected void scanSyntaxSource() {
    StringBuffer buff = null;
    token = NO_TOKEN;
    currentlyScanning = NO_TOKEN;
    boolean firstPass = true;
    char curChar = 0;
    char prevChar = 0;
    char nextChar = 0;
    while (pos < stop) {
      prevChar = curChar;
      curChar = source[pos];
      nextChar = (pos + 1 < stop) ? source[pos + 1] : 0;
      if ( (curChar > 64 && curChar < 91) || (curChar > 96 && curChar < 123)) {
        // text
        if (currentlyScanning == NO_TOKEN) {
          if (firstPass) {
            buff = new StringBuffer();
            currentlyScanning = TEXT;
          }
          else {
            token = TEXT;
            return;
          }
        }
        if (currentlyScanning == TEXT) {
          buff.append(curChar);
        }
      }
      else {
        // other characters
        switch (curChar) {
          case '/':
            if (currentlyScanning == STRING ||
                currentlyScanning == LINE_COMMENT) {
              break;
            }
            if (currentlyScanning == MULTI_COMMENT) {
              if (prevChar == '*') {
                token = COMMENT; // MULTI_LINE
                pos++;
                return;
              }
            }
            if (currentlyScanning == TEXT) {
              if (nextChar == '/' || nextChar == '*') {
                setTokenFrom(buff);
                return;
              }
              else {
                buff.append('/');
              }
            }
            if (currentlyScanning == NO_TOKEN) {
              if (nextChar == '*' || nextChar == '/') {
                if (firstPass) {
                  if (nextChar == '*') {
                    currentlyScanning = MULTI_COMMENT;
                  }
                  else {
                    currentlyScanning = LINE_COMMENT;
                  }
                }
                else {
                  token = TEXT;
                  return;
                }
              }
            }
            break;
          case '\n':
            if (currentlyScanning == MULTI_COMMENT) {
              break;
            }
            if (currentlyScanning == LINE_COMMENT) {
              token = LINE_COMMENT;
              pos++;
              return;
            }
            if (currentlyScanning == STRING) {
              token = STRING;
              pos++;
              return;
            }
            if (currentlyScanning == NO_TOKEN) {
              break;
            }
            if (currentlyScanning == TEXT) {
              setTokenFrom(buff);
              pos++;
              return;
            }
            break;
          case '"':

//					case '\'':
            if (currentlyScanning == MULTI_COMMENT ||
                currentlyScanning == LINE_COMMENT) {
              break;
            }
            if (currentlyScanning == NO_TOKEN && prevChar != '\'') {
              if (firstPass) {
                currentlyScanning = STRING;
                break;
              }
              else {
                token = TEXT;
                return;
              }
            }
            if (currentlyScanning == STRING) {
              if (prevChar != '\\') {
                token = STRING;
                pos++;
                return;
              }
            }
            if (currentlyScanning == TEXT) {
              // we've run into the start of a string
              setTokenFrom(buff);
              return;
            }

            // all of these can end a key word
          case '.':
          case ' ':
          case ',':
          case ':':
          case ';':
          case '\t':
          case '\r':
          case '{':
          case '}':
          case '(':
          case ')':
          case '[':
          case ']':
            if (currentlyScanning == TEXT) {
              setTokenFrom(buff);
              return;
            }
          default:
            if (currentlyScanning == TEXT) {
              buff.append(curChar);
            }
        } // switch
      } // end if
      pos++;
      firstPass = false;
    } // while
    token = currentlyScanning;
    if (token == MULTI_COMMENT) {
      token = COMMENT;
    }
    if (token == TEXT) {
      setTokenFrom(buff);
    }
    if (token == NO_TOKEN) {
      token = TEXT;
    }
  }

  /**
   *
   */
  protected void scanMarkup() {
    StringBuffer buff = null;
    token = NO_TOKEN;
    currentlyScanning = NO_TOKEN;
    char curChar = 0;
    char prevChar = 0;
    char nextChar = 0;
    boolean firstPass = true;
    boolean isInQuote = false;
    if (prevTagScript) {
      currentlyScanning = SCRIPT;
    }
    if (isInTag) {
      currentlyScanning = TAG;
      buff = new StringBuffer();
    }
    while (pos < stop) {
      nextChar = source[pos];
      if ( (nextChar == ' ') || (nextChar == '\n') || (nextChar == '\t') ||
          (nextChar == '\r')) {
        pos++;
        continue;
      }
      prevChar = curChar;
      curChar = nextChar;
      nextChar = (pos + 1 < stop) ? source[pos + 1] : 0;
      switch (curChar) {
        case '<':
          if (currentlyScanning == SCRIPT) {
            break;
          }
          if (firstPass) {
            if (nextChar == '%') {
              currentlyScanning = SCRIPT;
            }
            else {
              isInTag = true;
              currentlyScanning = TAG;
              buff = new StringBuffer();
            }
          }
          else {
            token = currentlyScanning;
            prevTagScript = false;
            if (token == NO_TOKEN) {
              token = CONTENT;
            }
            return;
          }
          break;
        case '>':
          if (currentlyScanning == TAG) {
            String tagName = buff.toString();
            tagName = tagName.toLowerCase();
            prevTagScript = (tagName.startsWith("script"));
            token = TAG;
            isInTag = false;
            pos++;
            return;
          }
          if (currentlyScanning == DOC_COMMENT) {
            token = DOC_COMMENT;
            prevTagScript = false;
            isInTag = false;
            pos++;
            return;
          }
          if (currentlyScanning == SCRIPT && prevChar == '%') {
            token = SCRIPT;
            prevTagScript = false;
            pos++;
            return;
          }
          break;
        case '-':
          if (currentlyScanning == SCRIPT) {
            break;
          }
          if (currentlyScanning == TAG && prevChar == '!' && nextChar == '-') {
            currentlyScanning = DOC_COMMENT;
            break;
          }
          break;
        case '\"':
          if (currentlyScanning == SCRIPT && prevChar != '\\') {
            isInQuote = !isInQuote;
          }
          break;
        default:
          if (buff != null) {
            buff.append(curChar);
          }
      }
      firstPass = false;
      pos++;
    }
    token = currentlyScanning;
    if (token == NO_TOKEN) {
      token = CONTENT;
    }
    prevTagScript = false;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费看片在线观看| 69av一区二区三区| 欧美一级高清片| 午夜视频在线观看一区二区三区| 久久99国产精品麻豆| 91在线免费播放| 精品国产1区2区3区| 午夜在线电影亚洲一区| 色综合一个色综合| 国产午夜精品久久久久久免费视 | 亚洲精品一区二区三区香蕉| 一区二区三区在线观看视频| 国产精品69毛片高清亚洲| 欧美日韩一级片网站| 亚洲免费av网站| 成人影视亚洲图片在线| 欧美精品一区二区三区在线播放 | 亚洲一级片在线观看| 99久久免费视频.com| 国产日韩欧美综合在线| 久久av中文字幕片| 日韩一区二区三区电影| 青娱乐精品在线视频| 51久久夜色精品国产麻豆| 亚洲一线二线三线久久久| 色综合一个色综合| 亚洲精品成人a在线观看| 91色九色蝌蚪| 亚洲精品大片www| 色噜噜狠狠一区二区三区果冻| 国产精品麻豆一区二区| 成人福利电影精品一区二区在线观看| 久久久国产午夜精品| 国产精品亚洲一区二区三区妖精 | 精品久久久久久久久久久久久久久 | 日本中文字幕一区| 欧美一区二区私人影院日本| 午夜亚洲国产au精品一区二区| 欧美日韩精品专区| 免费精品视频在线| 久久亚洲精品国产精品紫薇| 久久9热精品视频| 久久亚洲综合色一区二区三区| 国产在线不卡一卡二卡三卡四卡| 久久久久国色av免费看影院| 北条麻妃国产九九精品视频| 亚洲另类色综合网站| 欧美日韩在线免费视频| 偷窥国产亚洲免费视频| 欧美成人性福生活免费看| 国产精品99久久不卡二区| 亚洲欧美自拍偷拍色图| 欧美三级视频在线观看| 免费av成人在线| 欧美激情在线观看视频免费| 日本韩国欧美三级| 久久69国产一区二区蜜臀| 国产午夜精品一区二区| 欧美网站一区二区| 国内精品自线一区二区三区视频| 亚洲婷婷综合色高清在线| 欧美午夜不卡在线观看免费| 精品一区二区三区免费观看| ...av二区三区久久精品| 欧美日韩黄视频| 国产精品2024| 亚洲一二三区在线观看| 久久久亚洲精品石原莉奈| 在线免费不卡电影| 激情av综合网| 亚洲成人av一区| 中文一区在线播放| 欧美欧美欧美欧美首页| 99麻豆久久久国产精品免费优播| 青青草一区二区三区| 亚洲人成网站影音先锋播放| 欧美zozozo| 欧美四级电影在线观看| 懂色av一区二区在线播放| 天堂va蜜桃一区二区三区| 中文字幕一区av| 欧美成人乱码一区二区三区| 欧美在线观看视频在线| 国产成人午夜99999| 日本欧美一区二区在线观看| 亚洲日穴在线视频| 精品国产露脸精彩对白| 欧美精品自拍偷拍| 91久久线看在观草草青青| 丁香亚洲综合激情啪啪综合| 毛片av一区二区| 性做久久久久久免费观看欧美| 成人欧美一区二区三区在线播放| 久久影院电视剧免费观看| 欧美一区二区三区啪啪| 欧美日韩国产123区| 国产精品69毛片高清亚洲| 中文字幕字幕中文在线中不卡视频| 久久精品国产在热久久| 亚洲一二三区不卡| 亚洲欧美偷拍三级| 国产精品久久久久久久久果冻传媒 | 欧美三级日韩三级国产三级| aaa国产一区| www.av亚洲| 成人美女视频在线看| 国产成人免费视频网站 | 国产视频亚洲色图| 久久久五月婷婷| 欧美精品一区二区三区蜜桃| 日韩一级黄色片| 日韩午夜在线播放| 欧美大肚乱孕交hd孕妇| 精品少妇一区二区三区在线播放 | 欧美午夜精品免费| 色94色欧美sute亚洲13| 99久久精品国产毛片| 不卡影院免费观看| 91在线无精精品入口| 在线视频你懂得一区| 色妞www精品视频| 欧美日韩一区 二区 三区 久久精品| 欧美日韩性生活| 欧美日韩国产综合一区二区| 欧美一区二区三区日韩| 精品久久国产老人久久综合| 久久香蕉国产线看观看99| 久久综合狠狠综合久久激情| 久久欧美一区二区| 亚洲三级视频在线观看| 亚洲v中文字幕| 免费黄网站欧美| 国产成人aaa| 91九色最新地址| 91精品国产色综合久久不卡蜜臀| 精品日韩一区二区三区免费视频| 久久综合久久综合亚洲| 亚洲欧美偷拍三级| 丝袜诱惑亚洲看片| 国产一二三精品| 色偷偷一区二区三区| 91精品国产全国免费观看| 国产亚洲短视频| 一区二区三区免费观看| 日本少妇一区二区| 成人性生交大片免费看在线播放 | 成人h精品动漫一区二区三区| 91女人视频在线观看| 欧美一区二区三区四区五区| 国产午夜精品一区二区三区嫩草| 亚洲综合图片区| 国产精品综合一区二区三区| 欧美性生活大片视频| 国产婷婷精品av在线| 天堂一区二区在线| 丁香婷婷深情五月亚洲| 欧美妇女性影城| 1024成人网| 国产一区二区精品久久99| 日本道在线观看一区二区| 精品国产区一区| 亚洲一区在线电影| 波多野结衣中文字幕一区| 91精品国产综合久久香蕉的特点| 中文字幕一区二区三区av| 激情图区综合网| 欧美日韩亚洲综合一区 | 国产欧美一区二区三区网站 | 正在播放一区二区| 亚洲美女在线国产| 风间由美一区二区三区在线观看| 欧美日韩高清一区二区不卡| 亚洲欧洲日产国码二区| 国产精品1区2区3区| 91精品国产入口| 亚洲成人激情av| 色欧美片视频在线观看在线视频| 久久精品视频一区二区| 久久精品久久综合| 678五月天丁香亚洲综合网| 亚洲一级二级在线| 色综合久久88色综合天天6| 国产精品久久久久久久久免费相片 | 免费看黄色91| 欧美精品久久99| 天天综合网 天天综合色| 色88888久久久久久影院野外| 国产精品色一区二区三区| 国产综合色产在线精品| 精品国产成人系列| 免费欧美高清视频| 欧美一区二区三区精品| 丝袜亚洲另类欧美综合| 欧美妇女性影城| 免费精品视频在线| 3d动漫精品啪啪| 蜜桃视频免费观看一区| 日韩欧美国产午夜精品| 国产中文字幕精品| 久久伊人中文字幕|