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

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

?? textutilities.java

?? 用java 編寫的源碼開放的文本編輯器。有很多有用的特性
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * TextUtilities.java - Various text functions * Copyright (C) 1998, 1999, 2000, 2001 Slava Pestov * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */package org.gjt.sp.jedit;//{{{ Importsimport java.util.*;import javax.swing.text.Segment;import org.gjt.sp.jedit.syntax.*;//}}}/** * Contains several text manipulation methods. * * <ul> * <li>Bracket matching * <li>Word start and end offset calculation * <li>String comparison * <li>Converting tabs to spaces and vice versa * <li>Wrapping text * <li>String case conversion * </ul> * * @author Slava Pestov * @version $Id: TextUtilities.java,v 1.40 2003/01/30 02:58:40 spestov Exp $ */public class TextUtilities{	//{{{ getTokenAtOffset() method	/**	 * Returns the token that contains the specified offset.	 * @param tokens The token list	 * @param offset The offset	 * @since jEdit 4.0pre3	 */	public static Token getTokenAtOffset(Token tokens, int offset)	{		if(offset == 0 && tokens.id == Token.END)			return tokens;		for(;;)		{			if(tokens.id == Token.END)				throw new ArrayIndexOutOfBoundsException("offset > line length");			if(tokens.offset + tokens.length > offset)				return tokens;			else				tokens = tokens.next;		}	} //}}}	//{{{ findMatchingBracket() method	/**	 * Returns the offset of the bracket matching the one at the	 * specified offset of the buffer, or -1 if the bracket is	 * unmatched (or if the character is not a bracket).	 * @param buffer The buffer	 * @param line The line	 * @param offset The offset within that line	 * @since jEdit 2.6pre1	 */	public static int findMatchingBracket(Buffer buffer, int line, int offset)	{		if(offset < 0 || offset >= buffer.getLineLength(line))		{			throw new ArrayIndexOutOfBoundsException(offset + ":"				+ buffer.getLineLength(line));		}		Segment lineText = new Segment();		buffer.getLineText(line,lineText);		char c = lineText.array[lineText.offset + offset];		char cprime; // corresponding character		boolean direction; // false - backwards, true - forwards		switch(c)		{		case '(': cprime = ')'; direction = true;  break;		case ')': cprime = '('; direction = false; break;		case '[': cprime = ']'; direction = true;  break;		case ']': cprime = '['; direction = false; break;		case '{': cprime = '}'; direction = true;  break;		case '}': cprime = '{'; direction = false; break;		default: return -1;		}		// 1 because we've already 'seen' the first bracket		int count = 1;		DefaultTokenHandler tokenHandler = new DefaultTokenHandler();		buffer.markTokens(line,tokenHandler);		// Get the syntax token at 'offset'		// only tokens with the same type will be checked for		// the corresponding bracket		byte idOfBracket = getTokenAtOffset(tokenHandler.getTokens(),offset).id;		boolean haveTokens = true;		//{{{ Forward search		if(direction)		{			offset++;			for(;;)			{				for(int i = offset; i < lineText.count; i++)				{					char ch = lineText.array[lineText.offset + i];					if(ch == c)					{						if(!haveTokens)						{							tokenHandler.init();							buffer.markTokens(line,tokenHandler);							haveTokens = true;						}						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)							count++;					}					else if(ch == cprime)					{						if(!haveTokens)						{							tokenHandler.init();							buffer.markTokens(line,tokenHandler);							haveTokens = true;						}						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)						{							count--;							if(count == 0)								return buffer.getLineStartOffset(line) + i;						}					}				}				//{{{ Go on to next line				line++;				if(line >= buffer.getLineCount())					break;				buffer.getLineText(line,lineText);				offset = 0;				haveTokens = false;				//}}}			}		} //}}}		//{{{ Backward search		else		{			offset--;			for(;;)			{				for(int i = offset; i >= 0; i--)				{					char ch = lineText.array[lineText.offset + i];					if(ch == c)					{						if(!haveTokens)						{							tokenHandler.init();							buffer.markTokens(line,tokenHandler);							haveTokens = true;						}						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)							count++;					}					else if(ch == cprime)					{						if(!haveTokens)						{							tokenHandler.init();							buffer.markTokens(line,tokenHandler);							haveTokens = true;						}						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)						{							count--;							if(count == 0)								return buffer.getLineStartOffset(line) + i;						}					}				}				//{{{ Go on to next line				line--;				if(line < 0)					break;				buffer.getLineText(line,lineText);				offset = lineText.count - 1;				haveTokens = false;				//}}}			}		} //}}}		// Nothing found		return -1;	} //}}}	//{{{ findMatchingBracketFuzzy() method	/**	 * Works exactly like the findMatchingBracket(Bufferm int, int) method,	 * but if there is no (matching) bracket at the specified offset, it	 * looks at the next character too. The caller only needs to make sure	 * that the given offset is valid.	 * @param buffer The buffer	 * @param line The line	 * @param offset The offset within that line	 * @since 4.1pre1	 */	public static int findMatchingBracketFuzzy(Buffer buffer, int line, int offset)	{		int result = findMatchingBracket(buffer,line,offset);		if((result == -1)&&(offset + 1 < buffer.getLineLength(line)))		{			return findMatchingBracket(buffer,line,offset + 1);		}		else{			return result;			}	} //}}}	//{{{ findWordStart() method	/**	 * Locates the start of the word at the specified position.	 * @param line The text	 * @param pos The position	 * @param noWordSep Characters that are non-alphanumeric, but	 * should be treated as word characters anyway	 */	public static int findWordStart(String line, int pos, String noWordSep)	{		return findWordStart(line, pos, noWordSep, true);	} //}}}	//{{{ findWordStart() method	/**	 * Locates the start of the word at the specified position.	 * @param line The text	 * @param pos The position	 * @param noWordSep Characters that are non-alphanumeric, but	 * should be treated as word characters anyway	 * @param joinNonWordChars Treat consecutive non-alphanumeric	 * characters as one word	 * @since jEdit 4.1pre2	 */	public static int findWordStart(String line, int pos, String noWordSep,					boolean joinNonWordChars)	{		char ch = line.charAt(pos);		if(noWordSep == null)			noWordSep = "";		//{{{ the character under the cursor changes how we behave.		int type;		if(Character.isWhitespace(ch))			type = WHITESPACE;		else if(Character.isLetterOrDigit(ch)			|| noWordSep.indexOf(ch) != -1)			type = WORD_CHAR;		else			type = SYMBOL;		//}}}		int whiteSpaceEnd = 0;loop:		for(int i = pos; i >= 0; i--)		{			ch = line.charAt(i);			switch(type)			{			//{{{ Whitespace...			case WHITESPACE:				// only select other whitespace in this case				if(Character.isWhitespace(ch))					break;				else					return i + 1; //}}}			//{{{ Word character...			case WORD_CHAR:				if(Character.isLetterOrDigit(ch) ||					noWordSep.indexOf(ch) != -1)				{					break;				}				else					return i + 1; //}}}			//{{{ Symbol...			case SYMBOL:				if(!joinNonWordChars && pos!=i) return i + 1;				// if we see whitespace, set flag.				if(Character.isWhitespace(ch))				{					return i + 1;				}				else if(Character.isLetterOrDigit(ch) ||					noWordSep.indexOf(ch) != -1)				{					return i + 1;				}				else				{					break;				} //}}}			}		}		return whiteSpaceEnd;	} //}}}	//{{{ findWordEnd() method	/**	 * Locates the end of the word at the specified position.	 * @param line The text	 * @param pos The position	 * @param noWordSep Characters that are non-alphanumeric, but	 * should be treated as word characters anyway	 */	public static int findWordEnd(String line, int pos, String noWordSep)	{		return findWordEnd(line, pos, noWordSep, true);	} //}}}	//{{{ findWordEnd() method	/**

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青娱乐精品视频| 精品粉嫩超白一线天av| 波多野结衣一区二区三区| 91.com在线观看| 91超碰这里只有精品国产| 91福利视频在线| 欧美综合一区二区三区| 日韩一区二区免费高清| 欧美久久久久中文字幕| 日本二三区不卡| 欧美一区欧美二区| 精品久久久久久久一区二区蜜臀| 久久午夜老司机| 综合久久一区二区三区| 三级不卡在线观看| 激情综合网av| 色嗨嗨av一区二区三区| 日韩一区二区三区观看| 久久久精品国产99久久精品芒果| 欧美国产精品v| 全部av―极品视觉盛宴亚洲| 国产在线视频不卡二| 欧美精品久久久久久久多人混战| 欧美成人欧美edvon| 中文字幕二三区不卡| 欧美日韩精品三区| 国产精品99久久久久久久vr | 欧美视频在线不卡| 欧美激情在线观看视频免费| 91电影在线观看| 欧美日韩不卡视频| 日韩精品一区二区三区视频在线观看| 精品一区二区三区的国产在线播放 | 久久嫩草精品久久久久| 91色综合久久久久婷婷| 九九**精品视频免费播放| 日韩一区欧美一区| 欧美va亚洲va香蕉在线| 色婷婷综合视频在线观看| 韩国在线一区二区| 五月婷婷激情综合网| 国产精品国产三级国产普通话99| 91精品国产乱码久久蜜臀| 不卡视频免费播放| 久久99国产精品麻豆| 亚洲主播在线观看| 国产精品毛片a∨一区二区三区| 91精品久久久久久蜜臀| 在线亚洲高清视频| www.综合网.com| 久久成人18免费观看| 婷婷综合五月天| 亚洲在线观看免费视频| 国产精品久99| 欧美国产禁国产网站cc| 久久只精品国产| 日韩一级二级三级| 欧美精品一级二级| 欧美亚洲禁片免费| 91色.com| 成人av在线网| 成人免费视频视频| 国产精品自在欧美一区| 免费黄网站欧美| 日本伊人色综合网| 五月天久久比比资源色| 亚洲成av人片一区二区梦乃| 亚洲激情图片一区| 一区二区三区电影在线播| 中文字幕一区二区三| 国产精品久99| 中文字幕一区二区在线播放| 国产日韩亚洲欧美综合| 国产三区在线成人av| 久久天堂av综合合色蜜桃网| 日韩欧美一区二区视频| 日韩欧美国产一区在线观看| 欧美一区二区在线免费播放| 日韩欧美国产午夜精品| 精品捆绑美女sm三区| 久久久亚洲午夜电影| 中文字幕精品一区二区三区精品 | 亚洲视频你懂的| 18涩涩午夜精品.www| 亚洲久本草在线中文字幕| 一级中文字幕一区二区| 亚洲一二三四区| 日韩高清欧美激情| 激情亚洲综合在线| 成人黄色在线看| 91浏览器打开| 91精品黄色片免费大全| 日韩你懂的在线播放| 久久婷婷国产综合精品青草| 国产精品久久久久永久免费观看| 亚洲免费av在线| 午夜视频一区二区| 国内精品免费**视频| 成人av动漫在线| 欧美吞精做爰啪啪高潮| 日韩欧美国产一区在线观看| 亚洲国产精品二十页| 亚洲综合免费观看高清完整版在线| 午夜国产不卡在线观看视频| 精品在线亚洲视频| av欧美精品.com| 555www色欧美视频| 欧美激情自拍偷拍| 亚洲123区在线观看| 黑人巨大精品欧美黑白配亚洲| 成人免费视频视频在线观看免费| 欧美日韩一区国产| 国产亚洲人成网站| 午夜亚洲福利老司机| 国产一区二区精品久久99| 在线视频欧美区| 久久人人超碰精品| 亚洲国产日韩在线一区模特| 国产精品一品二品| 欧美肥妇bbw| 国产精品福利影院| 麻豆国产欧美一区二区三区| 色综合中文综合网| 99视频精品免费视频| 制服丝袜亚洲播放| 亚洲天堂成人在线观看| 久久er99热精品一区二区| 日本道色综合久久| 中文一区一区三区高中清不卡| 午夜精品久久久久久久99水蜜桃| 成人激情免费电影网址| 日韩精品一区二区三区四区| 亚洲一级片在线观看| 成人h版在线观看| 精品久久一区二区| 亚洲123区在线观看| 91色婷婷久久久久合中文| 国产亚洲精品bt天堂精选| 日韩国产精品久久久| 欧美自拍偷拍午夜视频| 中文字幕一区二区5566日韩| 国产毛片精品视频| 日韩女优制服丝袜电影| 午夜成人免费视频| 欧美自拍丝袜亚洲| 伊人一区二区三区| 91在线观看免费视频| 国产日韩精品一区二区三区在线| 麻豆视频一区二区| 欧美理论电影在线| 亚洲成人手机在线| 欧美日韩中文另类| 一区二区三区精品在线观看| 91亚洲精品久久久蜜桃| 欧美激情一区二区三区全黄| 韩国精品免费视频| 欧美精品一区二区三区蜜臀| 麻豆精品一区二区| 91精品国产综合久久久久| 亚洲va在线va天堂| 欧美日韩电影一区| 日韩av电影免费观看高清完整版 | 免费在线一区观看| 欧美精品一级二级| 日韩成人一级片| 777精品伊人久久久久大香线蕉| 亚洲成人激情社区| 在线成人av影院| 日本午夜一区二区| 日韩欧美成人激情| 激情综合一区二区三区| 久久久亚洲高清| 国产精品18久久久久| 国产精品色呦呦| 91色.com| 午夜精品福利一区二区蜜股av| 欧美另类变人与禽xxxxx| 日产国产高清一区二区三区| 欧美va亚洲va| 风间由美一区二区三区在线观看| 国产精品萝li| 色香蕉久久蜜桃| 免费人成精品欧美精品| 久久这里只有精品首页| 福利视频网站一区二区三区| 中文字幕一区二区在线播放 | 在线播放国产精品二区一二区四区| 亚洲成人av在线电影| 日韩欧美国产一区二区在线播放| 国产一区二区免费视频| 亚洲人成网站影音先锋播放| 欧美亚洲免费在线一区| 美女免费视频一区二区| 久久亚区不卡日本| 一本在线高清不卡dvd| 性感美女久久精品| 精品国产伦一区二区三区观看体验 | 色综合久久中文综合久久97| 亚洲成人激情av| 国产日产精品一区|