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

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

?? syntaxscanner.java

?? ∥顯示數(shù)據(jù)文件未壓縮大小及壓縮大小單行文本顯示域存儲隨機(jī)生成的數(shù)據(jù)
?? 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;
  }

  /**
   * 設(shè)置作用區(qū)域
   * @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;
  }

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

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

  /**
   * 掃描設(shè)置
   */
  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;
  }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲国产成人av制服丝袜| 丁香天五香天堂综合| 成人手机在线视频| 欧美美女一区二区| 中文字幕第一区二区| 国产精品伊人色| 韩国av一区二区三区在线观看| 欧美日韩美少妇| 亚洲裸体xxx| 99久久99久久久精品齐齐| 精品久久久久久久人人人人传媒 | 一区二区三区av电影| 国产精品一二三| 亚洲精品一区二区三区四区高清| 一区二区三区电影在线播| 成人小视频在线| 久久久久国产精品麻豆ai换脸| 伊人色综合久久天天人手人婷| 99热这里都是精品| 一区二区三区久久| 91免费看`日韩一区二区| 亚洲国产激情av| 丰满亚洲少妇av| 最新中文字幕一区二区三区| 国产不卡在线视频| 亚洲免费伊人电影| 69久久夜色精品国产69蝌蚪网| 日韩精品欧美精品| 国产日韩综合av| 91浏览器入口在线观看| 精品福利一二区| 成人动漫av在线| 日韩电影免费一区| 久久众筹精品私拍模特| 成人性生交大片免费看中文| 亚洲欧美日本韩国| 欧美日韩mp4| 成人高清视频免费观看| 一区二区三区在线高清| 欧美日韩久久久一区| 激情综合网最新| 久久青草欧美一区二区三区| 99国产麻豆精品| 成年人午夜久久久| 国产成人综合亚洲网站| 久久99国产精品免费网站| 亚洲线精品一区二区三区八戒| 国产精品对白交换视频| 国产亚洲精品aa午夜观看| 精品国产123| 久久久久国产精品免费免费搜索| 欧美一级免费观看| 日韩一区二区三区在线视频| 欧美日韩一二区| 51精品国自产在线| 69精品人人人人| 国产福利不卡视频| 欧美日韩一区 二区 三区 久久精品 | 亚洲欧美中日韩| 国产精品久久久久国产精品日日| 久久亚洲一区二区三区明星换脸| 欧美一级高清片| 国产日韩欧美在线一区| 国产精品传媒入口麻豆| 一区二区高清在线| 久久国产人妖系列| 成人永久aaa| 日本高清成人免费播放| 欧美日韩一区二区三区视频| 日韩一区二区电影网| 欧美一卡二卡三卡| 中文字幕巨乱亚洲| 亚洲成av人片在线观看无码| 国产一区二区久久| 欧美在线制服丝袜| 国产亚洲欧美色| 亚洲福中文字幕伊人影院| 久久电影国产免费久久电影| 成人亚洲一区二区一| 日韩一区二区免费视频| 亚洲人123区| 成人一级片网址| 欧美大尺度电影在线| 一区二区三区精品视频| 国产一区视频网站| 这里只有精品视频在线观看| 亚洲素人一区二区| 成人成人成人在线视频| 欧美videofree性高清杂交| 亚洲国产一区二区三区青草影视 | 日韩专区在线视频| 欧美三级韩国三级日本一级| 国产亚洲一区二区在线观看| 免费欧美日韩国产三级电影| 欧美高清一级片在线| 亚洲美腿欧美偷拍| 色吊一区二区三区| 亚洲精品高清在线观看| 91黄色免费看| 欧美国产精品中文字幕| 美女看a上一区| 欧美精品 国产精品| 全国精品久久少妇| 91精品免费观看| 国产综合色视频| 中文字幕欧美区| 色嗨嗨av一区二区三区| 亚洲综合男人的天堂| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲欧美aⅴ...| 欧美三区在线视频| 日本女人一区二区三区| 久久色在线观看| 91麻豆swag| 日韩二区三区在线观看| 欧美精品一区二区不卡| 国产91精品在线观看| 一区二区在线电影| 欧美成人国产一区二区| 国产成人在线视频播放| 亚洲图片欧美一区| 久久久www成人免费无遮挡大片| 白白色 亚洲乱淫| 日本伊人精品一区二区三区观看方式| 久久色视频免费观看| 91天堂素人约啪| 国产米奇在线777精品观看| 亚洲精品videosex极品| 精品91自产拍在线观看一区| 91免费精品国自产拍在线不卡| 日韩专区一卡二卡| 亚洲欧美日韩国产另类专区| 欧美精品一区二区三区在线播放| 99在线热播精品免费| 精品一区二区综合| 日韩不卡在线观看日韩不卡视频| |精品福利一区二区三区| 精品成人一区二区三区| 91精品国产aⅴ一区二区| 日本精品一区二区三区高清 | 欧美优质美女网站| 成人黄色av电影| 国产成人av电影在线播放| 蜜桃av噜噜一区| 五月激情综合网| 五月天亚洲婷婷| 午夜精品影院在线观看| 五月天一区二区三区| 三级成人在线视频| 亚洲成人av一区二区三区| 亚洲一区二区在线免费看| 国产精品嫩草影院av蜜臀| 国产欧美日韩精品一区| 国产精品人妖ts系列视频| 国产欧美一区二区精品忘忧草| 久久久久免费观看| 中文字幕欧美一| 亚洲午夜av在线| 美女在线一区二区| 粉嫩一区二区三区性色av| 9人人澡人人爽人人精品| 欧美伊人久久大香线蕉综合69 | 99久久精品免费精品国产| 欧美国产日本韩| 337p粉嫩大胆噜噜噜噜噜91av| 久久久亚洲高清| 一区二区三区中文免费| av电影在线观看一区| 欧美亚洲一区二区在线| 91精品国产色综合久久久蜜香臀| 精品国产电影一区二区| 国产夜色精品一区二区av| 亚洲一区二区三区不卡国产欧美| 日韩电影在线观看网站| 国产成人精品免费在线| 欧美私人免费视频| 国产欧美日韩不卡| 日本vs亚洲vs韩国一区三区二区| 国产成人av资源| 欧美变态tickling挠脚心| 亚洲激情一二三区| 丰满亚洲少妇av| 精品1区2区在线观看| 喷水一区二区三区| 欧美日韩在线精品一区二区三区激情| 久久先锋影音av| 日本不卡一区二区| 欧美卡1卡2卡| 亚洲愉拍自拍另类高清精品| 波多野结衣欧美| 国产清纯美女被跳蛋高潮一区二区久久w| 无吗不卡中文字幕| 在线观看成人小视频| 亚洲欧美日韩精品久久久久| 99视频在线观看一区三区| 欧美激情在线免费观看| 国产.欧美.日韩| 国产精品久久福利| 91麻豆国产在线观看| 亚洲最大色网站|