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

📄 bufferiorequest.java

📁 开源的java 编辑器源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					// trailing \n into account					lastLine = i + 1;					break;				case '\n':					// If lastWasCR is true,					// we just read a \r followed					// by a \n. We specify that					// this is a Windows file,					// but take no further					// action and just ignore					// the \r.					if(lastWasCR)					{						CROnly = false;						CRLF = true;						lastWasCR = false;						// Bump lastLine so						// that the next line						// doesn't erronously						// pick up the \r						lastLine = i + 1;					}					// Otherwise, we found a \n					// that follows some other					// character, hence we have					// a Unix file					else					{						CROnly = false;						CRLF = false;						seg.append(buf,lastLine,							i - lastLine);						seg.append('\n');						endOffsets.add(seg.count);						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(length == 0)		{			// fix for "[ 865589 ] 0-byte files should open using			// the default line seperator"			lineSeparator = null;		}		else 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);			}		}		// add a line marker at the end for proper offset manager		// operation		endOffsets.add(seg.count + 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.		if(!insert)		{			buffer.setProperty(LOAD_DATA,seg);			buffer.setProperty(END_OFFSETS,endOffsets);			buffer.setProperty(NEW_PATH,path);			if(lineSeparator != null)				buffer.setProperty(Buffer.LINESEP,lineSeparator);		}		// used in insert()		return seg;	} //}}}	//{{{ 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);			path = vfs._canonPath(session,path,view);			if(!MiscUtilities.isURL(path))				path = MiscUtilities.resolveSymlinks(path);			// 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);			try			{				// this must be after the stream is created or				// we deadlock with SSHTools.				buffer.readLock();				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("Rename failed: " + 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);			}			finally			{				buffer.readUnlock();			}		}		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)		{			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	{		String encoding = buffer.getStringProperty(Buffer.ENCODING);		if(encoding.equals(MiscUtilities.UTF_8_Y))		{			// not supported by Java...			_out.write(UTF8_MAGIC_1);			_out.write(UTF8_MAGIC_2);			_out.write(UTF8_MAGIC_3);			_out.flush();			encoding = "UTF-8";		}		BufferedWriter out = new BufferedWriter(			new OutputStreamWriter(_out,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;				final SegmentBuffer seg = read(					autodetect(in),length,true);				/* we don't do this in Buffer.insert() so that				   we can insert multiple files at once */				VFSManager.runInAWTThread(new Runnable()				{					public void run()					{						view.getTextArea().setSelectedText(							seg.toString());					}				});			}			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 + -