⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hypersearchrequest.java

📁 用java 编写的源码开放的文本编辑器。有很多有用的特性
💻 JAVA
字号:
/* * HyperSearchRequest.java - HyperSearch request, run in I/O thread * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 1998, 1999, 2000, 2001, 2002 Slava Pestov * * 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.search;//{{{ Importsimport javax.swing.text.Segment;import javax.swing.tree.*;import javax.swing.SwingUtilities;import org.gjt.sp.jedit.textarea.Selection;import org.gjt.sp.jedit.io.VFSManager;import org.gjt.sp.jedit.Buffer;import org.gjt.sp.jedit.GUIUtilities;import org.gjt.sp.jedit.jEdit;import org.gjt.sp.jedit.View;import org.gjt.sp.util.*;//}}}class HyperSearchRequest extends WorkRequest{	//{{{ HyperSearchRequest constructor	public HyperSearchRequest(View view, SearchMatcher matcher,		HyperSearchResults results, Selection[] selection)	{		this.view = view;		this.matcher = matcher;		this.results = results;		this.searchString = SearchAndReplace.getSearchString();		this.rootSearchNode = new DefaultMutableTreeNode(searchString);		this.selection = selection;	} //}}}	//{{{ run() method	public void run()	{		setStatus(jEdit.getProperty("hypersearch-status"));		SearchFileSet fileset = SearchAndReplace.getSearchFileSet();		String[] files = fileset.getFiles(view);		if(files == null || files.length == 0)		{			SwingUtilities.invokeLater(new Runnable()			{				public void run()				{					GUIUtilities.error(view,"empty-fileset",null);				}			});			return;		}		setProgressMaximum(fileset.getFileCount(view));		// to minimise synchronization and stuff like that, we only		// show a status message at most twice a second		// initially zero, so that we always show the first message		long lastStatusTime = 0;		try		{			if(selection != null)			{				Buffer buffer = view.getBuffer();				searchInSelection(buffer);			}			else			{				int current = 0;loop:				for(int i = 0; i < files.length; i++)				{					String file = files[i];					current++;					long currentTime = System.currentTimeMillis();					if(currentTime - lastStatusTime > 500)					{						setStatus(jEdit.getProperty("hypersearch-status-file",							new String[] { file }));						setProgressValue(current);						lastStatusTime = currentTime;					}					Buffer buffer = jEdit.openTemporary(null,null,file,false);					if(buffer == null)						continue loop;					doHyperSearch(buffer);				};			}		}		catch(final Exception e)		{			Log.log(Log.ERROR,this,e);			SwingUtilities.invokeLater(new Runnable()			{				public void run()				{					GUIUtilities.error(view,"searcherror",						new String[] { e.toString() });				}			});		}		catch(WorkThread.Abort a)		{		}		finally		{			VFSManager.runInAWTThread(new Runnable()			{				public void run()				{					results.searchDone(rootSearchNode);				}			});		}	} //}}}	//{{{ Private members	//{{{ Instance variables	private View view;	private SearchMatcher matcher;	private HyperSearchResults results;	private DefaultMutableTreeNode rootSearchNode;	private Selection[] selection;	private String searchString;	//}}}	//{{{ searchInSelection() method	private int searchInSelection(Buffer buffer) throws Exception	{		setAbortable(false);		int resultCount = 0;		try		{			buffer.readLock();			for(int i = 0; i < selection.length; i++)			{				Selection s = selection[i];				if(s instanceof Selection.Rect)				{					for(int j = s.getStartLine();						j <= s.getEndLine(); j++)					{						resultCount += doHyperSearch(buffer,							s.getStart(buffer,j),							s.getEnd(buffer,j));					}				}				else				{					resultCount += doHyperSearch(buffer,						s.getStart(),s.getEnd());				}			}		}		finally		{			buffer.readUnlock();		}		setAbortable(true);		return resultCount;	} //}}}	//{{{ doHyperSearch() method	private int doHyperSearch(Buffer buffer)		throws Exception	{		return doHyperSearch(buffer, 0, buffer.getLength());	} //}}}	//{{{ doHyperSearch() method	private int doHyperSearch(Buffer buffer, int start, int end)		throws Exception	{		setAbortable(false);		final DefaultMutableTreeNode bufferNode = new DefaultMutableTreeNode(			buffer.getPath());		int resultCount = doHyperSearch(buffer,start,end,bufferNode);		if(resultCount != 0)		{			rootSearchNode.insert(bufferNode,rootSearchNode.getChildCount());		}		setAbortable(true);		return resultCount;	} //}}}	//{{{ doHyperSearch() method	private int doHyperSearch(Buffer buffer, int start, int end,		DefaultMutableTreeNode bufferNode)	{		int resultCount = 0;		try		{			buffer.readLock();			boolean endOfLine = (buffer.getLineEndOffset(				buffer.getLineOfOffset(end)) - 1 == end);			Segment text = new Segment();			int offset = start;			int line = -1;loop:			for(int counter = 0; ; counter++)			{				boolean startOfLine = (buffer.getLineStartOffset(					buffer.getLineOfOffset(offset)) == offset);				buffer.getText(offset,end - offset,text);				int[] match = matcher.nextMatch(					new CharIndexedSegment(text,false),					startOfLine,endOfLine,counter == 0,					false);				if(match == null)					break loop;				int matchStart = offset + match[0];				int matchEnd = offset + match[1];				offset += match[1];				int newLine = buffer.getLineOfOffset(offset);				if(line == newLine)				{					// already had a result on this					// line, skip					continue loop;				}				line = newLine;				resultCount++;				bufferNode.add(new DefaultMutableTreeNode(					new HyperSearchResult(buffer,line,					matchStart,matchEnd),false));			}		}		finally		{			buffer.readUnlock();		}		return resultCount;	} //}}}	//}}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -