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

📄 bufferiorequest.java

📁 用java 编写的源码开放的文本编辑器。有很多有用的特性
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
							i - lastLine);						endOffsets.add(seg.count);						seg.append('\n');						if(trackProgress && lineCount++ % PROGRESS_INTERVAL == 0)							setProgressValue(seg.count);						lastLine = i + 1;					}					break;				default:					// If we find some other					// character that follows					// a \r, so it is not a					// Windows file, and probably					// a Mac file					if(lastWasCR)					{						CROnly = true;						CRLF = false;						lastWasCR = false;					}					break;				}			}			if(trackProgress)				setProgressValue(seg.count);			// Add remaining stuff from buffer			seg.append(buf,lastLine,len - lastLine);		}		setAbortable(false);		String lineSeparator;		if(CRLF)			lineSeparator = "\r\n";		else if(CROnly)			lineSeparator = "\r";		else			lineSeparator = "\n";		in.close();		// Chop trailing newline and/or ^Z (if any)		int bufferLength = seg.count;		if(bufferLength != 0)		{			char ch = seg.array[bufferLength - 1];			if(ch == 0x1a /* DOS ^Z */)				seg.count--;		}		buffer.setBooleanProperty(Buffer.TRAILING_EOL,false);		if(bufferLength != 0 && jEdit.getBooleanProperty("stripTrailingEOL"))		{			char ch = seg.array[bufferLength - 1];			if(ch == '\n')			{				buffer.setBooleanProperty(Buffer.TRAILING_EOL,true);				seg.count--;				endOffsets.setSize(endOffsets.getSize() - 1);			}		}		// to avoid having to deal with read/write locks and such,		// we insert the loaded data into the buffer in the		// post-load cleanup runnable, which runs in the AWT thread.		buffer.setProperty(LOAD_DATA,seg);		buffer.setProperty(END_OFFSETS,endOffsets);		buffer.setProperty(NEW_PATH,path);		buffer.setProperty(Buffer.LINESEP,lineSeparator);	} //}}}	//{{{ readMarkers() method	private void readMarkers(Buffer buffer, InputStream _in)		throws IOException	{		// For `reload' command		buffer.removeAllMarkers();		BufferedReader in = new BufferedReader(new InputStreamReader(_in));		String line;		while((line = in.readLine()) != null)		{			// compatibility kludge for jEdit 3.1 and earlier			if(!line.startsWith("!"))				continue;			char shortcut = line.charAt(1);			int start = line.indexOf(';');			int end = line.indexOf(';',start + 1);			int position = Integer.parseInt(line.substring(start + 1,end));			buffer.addMarker(shortcut,position);		}		in.close();	} //}}}	//{{{ save() method	private void save()	{		OutputStream out = null;		try		{			String[] args = { vfs.getFileName(path) };			setStatus(jEdit.getProperty("vfs.status.save",args));			// the entire save operation can be aborted...			setAbortable(true);			try			{				path = vfs._canonPath(session,path,view);				buffer.readLock();				// Only backup once per session				if(buffer.getProperty(Buffer.BACKED_UP) == null					|| jEdit.getBooleanProperty("backupEverySave"))				{					vfs._backup(session,path,view);					buffer.setBooleanProperty(Buffer.BACKED_UP,true);				}				/* if the VFS supports renaming files, we first				 * save to #<filename>#save#, then rename that				 * to <filename>, so that if the save fails,				 * data will not be lost.				 *				 * as of 4.1pre7 we now call vfs.getTwoStageSaveName()				 * instead of constructing the path directly				 * since some VFS's might not allow # in filenames.				 */				String savePath;				boolean twoStageSave = (vfs.getCapabilities() & VFS.RENAME_CAP) != 0					&& jEdit.getBooleanProperty("twoStageSave");				if(twoStageSave)					savePath = vfs.getTwoStageSaveName(path);				else					savePath = path;				out = vfs._createOutputStream(session,savePath,view);				if(out != null)				{					// Can't use buffer.getName() here because					// it is not changed until the save is					// complete					if(savePath.endsWith(".gz"))						buffer.setBooleanProperty(Buffer.GZIPPED,true);					if(buffer.getBooleanProperty(Buffer.GZIPPED))						out = new GZIPOutputStream(out);					write(buffer,out);					if(twoStageSave)					{						if(!vfs._rename(session,savePath,path,view))							throw new IOException(savePath);					}					// We only save markers to VFS's that support deletion.					// Otherwise, we will accumilate stale marks files.					if((vfs.getCapabilities() & VFS.DELETE_CAP) != 0)					{						if(jEdit.getBooleanProperty("persistentMarkers")							&& buffer.getMarkers().size() != 0)						{							setStatus(jEdit.getProperty("vfs.status.save-markers",args));							setProgressValue(0);							out = vfs._createOutputStream(session,markersPath,view);							if(out != null)								writeMarkers(buffer,out);						}						else							vfs._delete(session,markersPath,view);					}				}				else					buffer.setBooleanProperty(ERROR_OCCURRED,true);				if(!twoStageSave)					VFSManager.sendVFSUpdate(vfs,path,true);			}			catch(IOException io)			{				Log.log(Log.ERROR,this,io);				String[] pp = { io.toString() };				VFSManager.error(view,path,"ioerror.write-error",pp);				buffer.setBooleanProperty(ERROR_OCCURRED,true);			}			finally			{				buffer.readUnlock();			}		}		catch(WorkThread.Abort a)		{			if(out != null)			{				try				{					out.close();				}				catch(IOException io)				{				}			}			buffer.setBooleanProperty(ERROR_OCCURRED,true);		}		finally		{			try			{				vfs._saveComplete(session,buffer,path,view);				vfs._endVFSSession(session,view);			}			catch(IOException io)			{				Log.log(Log.ERROR,this,io);				String[] pp = { io.toString() };				VFSManager.error(view,path,"ioerror.write-error",pp);				buffer.setBooleanProperty(ERROR_OCCURRED,true);			}			catch(WorkThread.Abort a)			{				buffer.setBooleanProperty(ERROR_OCCURRED,true);			}		}	} //}}}	//{{{ autosave() method	private void autosave()	{		OutputStream out = null;		try		{			String[] args = { vfs.getFileName(path) };			setStatus(jEdit.getProperty("vfs.status.autosave",args));			// the entire save operation can be aborted...			setAbortable(true);			try			{				//buffer.readLock();				if(!buffer.isDirty())				{					// buffer has been saved while we					// were waiting.					return;				}				out = vfs._createOutputStream(session,path,view);				if(out == null)					return;				write(buffer,out);			}			catch(Exception e)			{			}			finally			{				//buffer.readUnlock();			}		}		catch(WorkThread.Abort a)		{			if(out != null)			{				try				{					out.close();				}				catch(IOException io)				{				}			}		}	} //}}}	//{{{ write() method	private void write(Buffer buffer, OutputStream _out)		throws IOException	{		BufferedWriter out = new BufferedWriter(			new OutputStreamWriter(_out,				buffer.getStringProperty(Buffer.ENCODING)),				IOBUFSIZE);		Segment lineSegment = new Segment();		String newline = buffer.getStringProperty(Buffer.LINESEP);		if(newline == null)			newline = System.getProperty("line.separator");		setProgressMaximum(buffer.getLineCount() / PROGRESS_INTERVAL);		setProgressValue(0);		int i = 0;		while(i < buffer.getLineCount())		{			buffer.getLineText(i,lineSegment);			out.write(lineSegment.array,lineSegment.offset,				lineSegment.count);			if(i != buffer.getLineCount() - 1)			{				out.write(newline);			}			if(++i % PROGRESS_INTERVAL == 0)				setProgressValue(i / PROGRESS_INTERVAL);		}		if(jEdit.getBooleanProperty("stripTrailingEOL")			&& buffer.getBooleanProperty(Buffer.TRAILING_EOL))		{			out.write(newline);		}		out.close();	} //}}}	//{{{ writeMarkers() method	private void writeMarkers(Buffer buffer, OutputStream out)		throws IOException	{		Writer o = new BufferedWriter(new OutputStreamWriter(out));		Vector markers = buffer.getMarkers();		for(int i = 0; i < markers.size(); i++)		{			Marker marker = (Marker)markers.elementAt(i);			o.write('!');			o.write(marker.getShortcut());			o.write(';');			String pos = String.valueOf(marker.getPosition());			o.write(pos);			o.write(';');			o.write(pos);			o.write('\n');		}		o.close();	} //}}}	//{{{ insert() method	private void insert()	{		InputStream in = null;		try		{			try			{				String[] args = { vfs.getFileName(path) };				setStatus(jEdit.getProperty("vfs.status.load",args));				setAbortable(true);				path = vfs._canonPath(session,path,view);				VFS.DirectoryEntry entry = vfs._getDirectoryEntry(					session,path,view);				long length;				if(entry != null)					length = entry.length;				else					length = 0L;				in = vfs._createInputStream(session,path,false,view);				if(in == null)					return;				if(path.endsWith(".gz"))					in = new GZIPInputStream(in);				read(buffer,in,length);			}			catch(IOException io)			{				Log.log(Log.ERROR,this,io);				String[] pp = { io.toString() };				VFSManager.error(view,path,"ioerror.read-error",pp);				buffer.setBooleanProperty(ERROR_OCCURRED,true);			}		}		catch(WorkThread.Abort a)		{			if(in != null)			{				try				{					in.close();				}				catch(IOException io)				{				}			}			buffer.setBooleanProperty(ERROR_OCCURRED,true);		}		finally		{			try			{				vfs._endVFSSession(session,view);			}			catch(IOException io)			{				Log.log(Log.ERROR,this,io);				String[] pp = { io.toString() };				VFSManager.error(view,path,"ioerror.read-error",pp);				buffer.setBooleanProperty(ERROR_OCCURRED,true);			}			catch(WorkThread.Abort a)			{				buffer.setBooleanProperty(ERROR_OCCURRED,true);			}		}	} //}}}	//}}}}

⌨️ 快捷键说明

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