compiler = GUIUtilities.input(view,"compile",compiler); if(compiler == null) return;
	public void actionPerformed(ActionEvent evt)	{		View view = getView(evt);		Buffer buffer = view.getBuffer();		String compiler = (String)buffer.getProperty("compiler");		if(buffer.isDirty())		{			String[] args = { buffer.getName() };			int result = JOptionPane.showConfirmDialog(view,				jEdit.getProperty("notsaved.message",args),				jEdit.getProperty("notsaved.title"),				JOptionPane.YES_NO_CANCEL_OPTION,				JOptionPane.WARNING_MESSAGE);			if(result == JOptionPane.YES_OPTION)				buffer.save(view,null);			else if(result != JOptionPane.NO_OPTION)				return;		}		if(compiler != null && System.getProperty("os.name")			.indexOf("Windows") != -1)		{			// append .exe to command name on Windows			int dotIndex = compiler.indexOf('.');			int spaceIndex = compiler.indexOf(' ');			if(dotIndex == -1 || dotIndex > spaceIndex)			{				compiler = compiler.substring(0,spaceIndex)					+ ".exe" + compiler.substring(spaceIndex);			}		}		compiler = GUIUtilities.input(view,"compile",compiler);		if(compiler == null)			return;		buffer.putProperty("compiler",compiler);		StringBuffer buf = new StringBuffer();		for(int i = 0; i < compiler.length(); i++)		{			switch(compiler.charAt(i))			{			case '%':				if(i != compiler.length() - 1)				{					switch(compiler.charAt(++i))					{					case 'u':						buf.append(buffer.getPath());						break;					case 'p':						buf.append(buffer.getFile()							.getPath());						break;					default:						buf.append('%');						break;					}					break;				}			default:				buf.append(compiler.charAt(i));			}		}		compiler = buf.toString();		try		{			Process proc = Runtime.getRuntime().exec(compiler);			proc.getOutputStream().close();			new CommandOutput(view,compiler,proc);		}		catch(IOException io)		{			Object[] args = { io.getMessage() };			GUIUtilities.error(view,"ioerror",args);		}	}