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

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

?? rtfparser.java

?? JAVA的一些源碼 JAVA2 STANDARD EDITION DEVELOPMENT KIT 5.0
?? JAVA
字號:
/* * @(#)RTFParser.java	1.11 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.text.rtf;import java.io.*;import java.lang.*;/** * <b>RTFParser</b> is a subclass of <b>AbstractFilter</b> which understands basic RTF syntax * and passes a stream of control words, text, and begin/end group * indications to its subclass. * * Normally programmers will only use <b>RTFFilter</b>, a subclass of this class that knows what to * do with the tokens this class parses. * * @see AbstractFilter * @see RTFFilter */abstract class RTFParser extends AbstractFilter{  /** The current RTF group nesting level. */  public int level;  private int state;  private StringBuffer currentCharacters;  private String pendingKeyword;                // where keywords go while we                                                // read their parameters  private int pendingCharacter;                 // for the \'xx construct  private long binaryBytesLeft;                  // in a \bin blob?  ByteArrayOutputStream binaryBuf;  private boolean[] savedSpecials;  /** A stream to which to write warnings and debugging information    *  while parsing. This is set to <code>System.out</code> to log   *  any anomalous information to stdout. */  protected PrintStream warnings;  // value for the 'state' variable  private final int S_text = 0;          // reading random text  private final int S_backslashed = 1;   // read a backslash, waiting for next  private final int S_token = 2;         // reading a multicharacter token  private final int S_parameter = 3;     // reading a token's parameter  private final int S_aftertick = 4;     // after reading \'  private final int S_aftertickc = 5;    // after reading \'x  private final int S_inblob = 6;        // in a \bin blob  /** Implemented by subclasses to interpret a parameter-less RTF keyword.   *  The keyword is passed without the leading '/' or any delimiting    *  whitespace. */  public abstract boolean handleKeyword(String keyword);  /** Implemented by subclasses to interpret a keyword with a parameter.   *  @param keyword   The keyword, as with <code>handleKeyword(String)</code>.   *  @param parameter The parameter following the keyword. */  public abstract boolean handleKeyword(String keyword, int parameter);  /** Implemented by subclasses to interpret text from the RTF stream. */  public abstract void handleText(String text);  public void handleText(char ch)   { handleText(String.valueOf(ch)); }  /** Implemented by subclasses to handle the contents of the \bin keyword. */  public abstract void handleBinaryBlob(byte[] data);  /** Implemented by subclasses to react to an increase   *  in the nesting level. */  public abstract void begingroup();  /** Implemented by subclasses to react to the end of a group. */  public abstract void endgroup();  // table of non-text characters in rtf  static final boolean rtfSpecialsTable[];  static {    rtfSpecialsTable = (boolean[])noSpecialsTable.clone();    rtfSpecialsTable['\n'] = true;    rtfSpecialsTable['\r'] = true;    rtfSpecialsTable['{'] = true;    rtfSpecialsTable['}'] = true;    rtfSpecialsTable['\\'] = true;  }  public RTFParser()  {    currentCharacters = new StringBuffer();    state = S_text;    pendingKeyword = null;    level = 0;    //warnings = System.out;    specialsTable = rtfSpecialsTable;  }  // TODO: Handle wrapup at end of file correctly.  public void writeSpecial(int b)    throws IOException  {    write((char)b);  }    protected void warning(String s) {	if (warnings != null) {	    warnings.println(s);	}    }  public void write(String s)    throws IOException  {    if (state != S_text) {      int index = 0;      int length = s.length();      while(index < length && state != S_text) {	write(s.charAt(index));	index ++;      }            if(index >= length)	return;      s = s.substring(index);    }    if (currentCharacters.length() > 0)      currentCharacters.append(s);    else      handleText(s);  }  public void write(char ch)     throws IOException  {    boolean ok;    switch (state)    {      case S_text:        if (ch == '\n' || ch == '\r') {	  break;  // unadorned newlines are ignored	} else if (ch == '{') {	  if (currentCharacters.length() > 0) {	    handleText(currentCharacters.toString());	    currentCharacters = new StringBuffer();	  }	  level ++;	  begingroup();	} else if(ch == '}') {	  if (currentCharacters.length() > 0) {	    handleText(currentCharacters.toString());	    currentCharacters = new StringBuffer();	  }	  if (level == 0)	    throw new IOException("Too many close-groups in RTF text");          endgroup();	  level --;	} else if(ch == '\\') {	  if (currentCharacters.length() > 0) {	    handleText(currentCharacters.toString());	    currentCharacters = new StringBuffer();	  }	  state = S_backslashed;	} else {	  currentCharacters.append(ch);	}	break;      case S_backslashed:	if (ch == '\'') {	  state = S_aftertick;	  break;	}	if (!Character.isLetter(ch)) {	  char newstring[] = new char[1];	  newstring[0] = ch;	  if (!handleKeyword(new String(newstring))) {	    warning("Unknown keyword: " + newstring + " (" + (byte)ch + ")");	  }	  state = S_text;	  pendingKeyword = null;	  /* currentCharacters is already an empty stringBuffer */	  break;	}		state = S_token;	/* FALL THROUGH */      case S_token:	if (Character.isLetter(ch)) {	  currentCharacters.append(ch);	} else {	  pendingKeyword = currentCharacters.toString();	  currentCharacters = new StringBuffer();	  	  // Parameter following?	  if (Character.isDigit(ch) || (ch == '-')) {	    state = S_parameter;	    currentCharacters.append(ch);	  } else {	    ok = handleKeyword(pendingKeyword);	    if (!ok)	      warning("Unknown keyword: " + pendingKeyword);	    pendingKeyword = null;	    state = S_text;	    // Non-space delimiters get included in the text	    if (!Character.isWhitespace(ch))	      write(ch);	  }	}	break;      case S_parameter:	if (Character.isDigit(ch)) {	  currentCharacters.append(ch);	} else {	  /* TODO: Test correct behavior of \bin keyword */	  if (pendingKeyword.equals("bin")) {  /* magic layer-breaking kwd */	    long parameter = Long.parseLong(currentCharacters.toString());	    pendingKeyword = null;	    state = S_inblob;	    binaryBytesLeft = parameter;	    if (binaryBytesLeft > Integer.MAX_VALUE)		binaryBuf = new ByteArrayOutputStream(Integer.MAX_VALUE);	    else		binaryBuf = new ByteArrayOutputStream((int)binaryBytesLeft);	    savedSpecials = specialsTable;	    specialsTable = allSpecialsTable;	    break;	  }	      	  int parameter = Integer.parseInt(currentCharacters.toString());	  ok = handleKeyword(pendingKeyword, parameter);	  if (!ok)	    warning("Unknown keyword: " + pendingKeyword +		    " (param " + currentCharacters + ")");	  pendingKeyword = null;	  currentCharacters = new StringBuffer();	  state = S_text;	  // Delimiters here are interpreted as text too	  if (!Character.isWhitespace(ch))	    write(ch);	}	break;      case S_aftertick:	if (Character.digit(ch, 16) == -1)	  state = S_text;	else {	  pendingCharacter = Character.digit(ch, 16);	  state = S_aftertickc;	}	break;      case S_aftertickc:	state = S_text;	if (Character.digit(ch, 16) != -1)	{	  pendingCharacter = pendingCharacter * 16 + Character.digit(ch, 16);	  ch = translationTable[pendingCharacter];	  if (ch != 0)	      handleText(ch);	}	break;      case S_inblob:	binaryBuf.write(ch);	binaryBytesLeft --;	if (binaryBytesLeft == 0) {	    state = S_text;	    specialsTable = savedSpecials;	    savedSpecials = null;	    handleBinaryBlob(binaryBuf.toByteArray());	    binaryBuf = null;	}      }  }  /** Flushes any buffered but not yet written characters.    *  Subclasses which override this method should call this   *  method <em>before</em> flushing   *  any of their own buffers. */  public void flush()    throws IOException  {    super.flush();    if (state == S_text && currentCharacters.length() > 0) {      handleText(currentCharacters.toString());      currentCharacters = new StringBuffer();    }  }  /** Closes the parser. Currently, this simply does a <code>flush()</code>,   *  followed by some minimal consistency checks. */  public void close()    throws IOException  {    flush();    if (state != S_text || level > 0) {      warning("Truncated RTF file.");            /* TODO: any sane way to handle termination in a non-S_text state? */      /* probably not */      /* this will cause subclasses to behave more reasonably	 some of the time */      while (level > 0) {	  endgroup();	  level --;      }    }    super.close();  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
悠悠色在线精品| 欧美国产禁国产网站cc| 亚洲国产精品一区二区www在线 | 777xxx欧美| 日日噜噜夜夜狠狠视频欧美人| 欧美日本在线播放| 日韩电影在线一区二区三区| 日韩欧美中文一区二区| 国产麻豆日韩欧美久久| 国产精品人妖ts系列视频| 97成人超碰视| 亚洲自拍偷拍网站| 日韩美一区二区三区| 国产高清视频一区| 玉米视频成人免费看| 9191久久久久久久久久久| 另类综合日韩欧美亚洲| 久久久99精品久久| 91国模大尺度私拍在线视频| 五月天精品一区二区三区| 久久久天堂av| 色综合天天狠狠| 裸体一区二区三区| 国产精品日韩成人| 欧美精品三级日韩久久| 精品亚洲成a人| 亚洲色图欧洲色图| 91精品国产一区二区三区| 国产成人av资源| 亚洲第一在线综合网站| 久久精品一区二区三区不卡牛牛| 日本高清免费不卡视频| 激情图区综合网| 亚洲小少妇裸体bbw| 欧美精品一区二区高清在线观看| 色综合天天综合在线视频| 免费成人性网站| 亚洲精品免费在线播放| 欧美mv和日韩mv国产网站| 色婷婷av一区二区三区gif| 麻豆成人在线观看| 亚洲一区二区偷拍精品| 国产欧美一二三区| 欧美一级黄色片| 在线亚洲精品福利网址导航| 国产九色sp调教91| 日韩av在线发布| 一区二区三区日韩精品| 国产精品女人毛片| 日韩精品影音先锋| 欧美视频在线一区| www.亚洲激情.com| 国产在线麻豆精品观看| 日韩在线卡一卡二| 亚洲激情五月婷婷| 最新久久zyz资源站| xfplay精品久久| 欧美精品v日韩精品v韩国精品v| 成人黄色777网| 国产99久久久国产精品潘金 | 久久超碰97人人做人人爱| 亚洲精品中文字幕乱码三区| 久久精品男人的天堂| 日韩欧美国产综合在线一区二区三区| 日本乱码高清不卡字幕| 99精品国产视频| eeuss鲁片一区二区三区在线看| 国产中文字幕一区| 国内久久婷婷综合| 国产伦精一区二区三区| 免费看黄色91| 久久国产麻豆精品| 毛片av一区二区三区| 日韩av成人高清| 秋霞成人午夜伦在线观看| 午夜精品视频在线观看| 午夜精品一区二区三区三上悠亚| 亚洲激情一二三区| 亚洲韩国一区二区三区| 性做久久久久久| 日韩和欧美一区二区三区| 亚洲成人你懂的| 日韩 欧美一区二区三区| 麻豆精品在线视频| 国内国产精品久久| 国产成人午夜电影网| 波多野结衣亚洲| 色激情天天射综合网| 欧美亚洲禁片免费| 欧美一级片在线| 久久久激情视频| 亚洲视频免费看| 亚洲第一福利一区| 久久国产剧场电影| 成人免费视频caoporn| 97久久久精品综合88久久| 欧美影院精品一区| 欧美不卡激情三级在线观看| 国产日韩av一区| 亚洲美女少妇撒尿| 蜜臀久久99精品久久久久宅男| 精品一区二区三区在线观看| 国产成人一区二区精品非洲| 成人福利电影精品一区二区在线观看| 色猫猫国产区一区二在线视频| 欧美性一二三区| 精品欧美一区二区久久| 国产精品激情偷乱一区二区∴| 亚洲午夜一区二区三区| 精品一区二区在线视频| caoporn国产精品| 欧美精品黑人性xxxx| 国产日产精品1区| 一区二区不卡在线播放| 激情综合网激情| 色婷婷久久综合| 欧美精品一区二区三区很污很色的 | 国产精品三级电影| 亚洲高清免费观看高清完整版在线观看 | 欧美一级理论性理论a| 国产精品久久久久久久久晋中 | 老司机精品视频在线| 成人午夜大片免费观看| 欧美日韩一二区| 亚洲国产精品精华液2区45| 亚洲一二三四区| 高清不卡在线观看av| 欧美综合在线视频| 国产人伦精品一区二区| 亚洲不卡一区二区三区| 波多野结衣视频一区| 51午夜精品国产| 亚洲免费观看视频| 国产99久久久国产精品免费看| 制服丝袜国产精品| 怡红院av一区二区三区| 国产精品一区在线观看乱码| 欧美日韩亚洲综合一区| 中文字幕一区三区| 国模冰冰炮一区二区| 在线播放亚洲一区| 亚洲欧美福利一区二区| 国产成人日日夜夜| 欧美不卡一区二区三区四区| 无码av中文一区二区三区桃花岛| 一本色道久久综合狠狠躁的推荐| 久久久国产精品午夜一区ai换脸| 奇米一区二区三区av| 欧美日韩成人一区二区| 一区二区三区在线观看动漫| 成人国产亚洲欧美成人综合网 | 另类成人小视频在线| 欧美一区日本一区韩国一区| 一区二区三区不卡视频| 91麻豆高清视频| 国产精品乱人伦中文| 国产高清在线观看免费不卡| 久久久午夜电影| 国产成人在线视频免费播放| 欧美va亚洲va国产综合| 久久精品国产色蜜蜜麻豆| 欧美精品一卡二卡| 亚洲国产欧美日韩另类综合| 色999日韩国产欧美一区二区| 国产精品久久久久婷婷| 国产99久久久精品| 国产精品久久久久精k8| 成人黄色大片在线观看| 国产精品美女久久久久久| 成人黄色777网| 亚洲日本在线看| 91麻豆产精品久久久久久| 一区二区国产视频| 在线免费观看日韩欧美| 亚洲成人午夜影院| 欧美一区二区三区的| 日本不卡一区二区三区高清视频| 欧美系列一区二区| 亚洲欧美经典视频| 欧美亚洲综合一区| 亚洲大尺度视频在线观看| 欧美高清精品3d| 日本不卡在线视频| 日韩一级精品视频在线观看| 久久99精品视频| 2019国产精品| 91在线国产观看| 亚洲一区二区欧美日韩| 欧美日韩精品一区二区天天拍小说| 日韩精品免费专区| 欧美男生操女生| 极品少妇一区二区三区精品视频 | 精品国产一区二区在线观看| 国产成人久久精品77777最新版本| 欧美国产视频在线| 99r国产精品| 日本在线观看不卡视频| 欧美r级在线观看| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩一本到|