From: <kp...@us...> - 2006-10-08 21:08:24
|
Revision: 7367 http://svn.sourceforge.net/jedit/?rev=7367&view=rev Author: kpouer Date: 2006-10-08 14:08:04 -0700 (Sun, 08 Oct 2006) Log Message: ----------- removed dependencies Modified Paths: -------------- jEdit/trunk/org/gjt/sp/jedit/Registers.java jEdit/trunk/org/gjt/sp/jedit/jEdit.java Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/JEditRegisterSaver.java jEdit/trunk/org/gjt/sp/jedit/JEditRegistersListener.java jEdit/trunk/org/gjt/sp/jedit/RegisterSaver.java jEdit/trunk/org/gjt/sp/jedit/RegistersListener.java Added: jEdit/trunk/org/gjt/sp/jedit/JEditRegisterSaver.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/JEditRegisterSaver.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/JEditRegisterSaver.java 2006-10-08 21:08:04 UTC (rev 7367) @@ -0,0 +1,203 @@ +/* + * JEditRegisterSaver.java - Handles services.xml files in plugins + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2006 Matthieu Casanova + * + * 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; + +import org.gjt.sp.util.Log; +import org.gjt.sp.util.XMLUtilities; +import org.gjt.sp.util.IOUtilities; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.InputSource; +import org.xml.sax.Attributes; + +import java.io.*; + +/** + * @author Matthieu Casanova + * @version $Id: FoldHandler.java 5568 2006-07-10 20:52:23Z kpouer $ + */ +public class JEditRegisterSaver implements RegisterSaver +{ + //{{{ loadRegisters() method + public void loadRegisters() + { + String settingsDirectory = jEdit.getSettingsDirectory(); + if(settingsDirectory == null) + return; + + File registerFile = new File(MiscUtilities.constructPath( + jEdit.getSettingsDirectory(),"registers.xml")); + if(!registerFile.exists()) + return; + + registersModTime = registerFile.lastModified(); + + Log.log(Log.MESSAGE,jEdit.class,"Loading registers.xml"); + + RegistersHandler handler = new RegistersHandler(); + try + { + Registers.setLoading(true); + XMLUtilities.parseXML(new FileInputStream(registerFile), + handler); + } + catch (IOException ioe) + { + Log.log(Log.ERROR, Registers.class, ioe); + } + finally + { + Registers.setLoading(false); + } + } //}}} + + //{{{ saveRegisters() method + public void saveRegisters() + { + + Log.log(Log.MESSAGE,Registers.class,"Saving registers.xml"); + File file1 = new File(MiscUtilities.constructPath( + jEdit.getSettingsDirectory(), "#registers.xml#save#")); + File file2 = new File(MiscUtilities.constructPath( + jEdit.getSettingsDirectory(), "registers.xml")); + if(file2.exists() && file2.lastModified() != registersModTime) + { + Log.log(Log.WARNING,Registers.class,file2 + " changed" + + " on disk; will not save registers"); + return; + } + + jEdit.backupSettingsFile(file2); + + String lineSep = System.getProperty("line.separator"); + + BufferedWriter out = null; + + boolean ok = false; + + try + { + out = new BufferedWriter(new FileWriter(file1)); + + out.write("<?xml version=\"1.0\"?>"); + out.write(lineSep); + out.write("<!DOCTYPE REGISTERS SYSTEM \"registers.dtd\">"); + out.write(lineSep); + out.write("<REGISTERS>"); + out.write(lineSep); + + Registers.Register[] registers = Registers.getRegisters(); + for(int i = 0; i < registers.length; i++) + { + Registers.Register register = registers[i]; + if(register == null || + i == '$' || + i == '%' || + register.toString().length() == 0 + ) + continue; + + out.write("<REGISTER NAME=\""); + if(i == '"') + out.write("""); + else + out.write((char)i); + out.write("\">"); + + out.write(XMLUtilities.charsToEntities( + register.toString(), false)); + + out.write("</REGISTER>"); + out.write(lineSep); + } + + out.write("</REGISTERS>"); + out.write(lineSep); + + ok = true; + } + catch(Exception e) + { + Log.log(Log.ERROR,Registers.class,e); + } + finally + { + IOUtilities.closeQuietly(out); + } + + if(ok) + { + /* to avoid data loss, only do this if the above + * completed successfully */ + file2.delete(); + file1.renameTo(file2); + } + + registersModTime = file2.lastModified(); + } //}}} + + private static long registersModTime; + + //{{{ RegistersHandler class + static class RegistersHandler extends DefaultHandler + { + //{{{ resolveEntity() method + public InputSource resolveEntity(String publicId, String systemId) + { + return XMLUtilities.findEntity(systemId, "registers.dtd", getClass()); + } //}}} + + //{{{ startElement() method + public void startElement(String uri, String localName, + String qName, Attributes attrs) + { + registerName = attrs.getValue("NAME"); + inRegister = "REGISTER".equals(qName); + } //}}} + + //{{{ endElement() method + public void endElement(String uri, String localName, String name) + { + if(name.equals("REGISTER")) + { + if(registerName == null || registerName.length() != 1) + Log.log(Log.ERROR,this,"Malformed NAME: " + registerName); + else + Registers.setRegister(registerName.charAt(0),charData.toString()); + inRegister = false; + charData.setLength(0); + } + } //}}} + + //{{{ characters() method + public void characters(char[] ch, int start, int length) + { + if (inRegister) + charData.append(ch, start, length); + } //}}} + + //{{{ Private members + private String registerName; + private StringBuffer charData = new StringBuffer(); + private boolean inRegister; + //}}} + } //}}} +} Added: jEdit/trunk/org/gjt/sp/jedit/JEditRegistersListener.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/JEditRegistersListener.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/JEditRegistersListener.java 2006-10-08 21:08:04 UTC (rev 7367) @@ -0,0 +1,36 @@ +/* + * JEditRegistersListener.java - Handles services.xml files in plugins + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2006 Matthieu Casanova + * + * 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; + +import org.gjt.sp.jedit.msg.RegisterChanged; + +/** + * @author Matthieu Casanova + * @version $Id: FoldHandler.java 5568 2006-07-10 20:52:23Z kpouer $ + */ +public class JEditRegistersListener implements RegistersListener +{ + public void registerChanged(char name) + { + EditBus.send(new RegisterChanged(null, name)); + } +} Added: jEdit/trunk/org/gjt/sp/jedit/RegisterSaver.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/RegisterSaver.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/RegisterSaver.java 2006-10-08 21:08:04 UTC (rev 7367) @@ -0,0 +1,35 @@ +/* + * RegisterSaver.java - Handles services.xml files in plugins + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2006 Matthieu Casanova + * + * 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; + +import java.io.File; + +/** + * @author Matthieu Casanova + * @version $Id: FoldHandler.java 5568 2006-07-10 20:52:23Z kpouer $ + */ +public interface RegisterSaver +{ + void loadRegisters(); + + void saveRegisters(); +} Modified: jEdit/trunk/org/gjt/sp/jedit/Registers.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/Registers.java 2006-10-08 17:46:54 UTC (rev 7366) +++ jEdit/trunk/org/gjt/sp/jedit/Registers.java 2006-10-08 21:08:04 UTC (rev 7367) @@ -27,16 +27,11 @@ import java.awt.Toolkit; import java.io.*; -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.helpers.DefaultHandler; - import org.gjt.sp.jedit.buffer.JEditBuffer; -import org.gjt.sp.jedit.gui.*; -import org.gjt.sp.jedit.msg.RegisterChanged; -import org.gjt.sp.jedit.textarea.*; +import org.gjt.sp.jedit.gui.HistoryModel; +import org.gjt.sp.jedit.textarea.TextArea; +import org.gjt.sp.jedit.textarea.Selection; import org.gjt.sp.util.Log; -import org.gjt.sp.util.XMLUtilities; //}}} /** @@ -75,7 +70,7 @@ * @param register The register * @since jEdit 2.7pre2 */ - public static void copy(JEditTextArea textArea, char register) + public static void copy(TextArea textArea, char register) { String selection = textArea.getSelectedText(); if(selection == null) @@ -95,7 +90,7 @@ * @param register The register * @since jEdit 2.7pre2 */ - public static void cut(JEditTextArea textArea, char register) + public static void cut(TextArea textArea, char register) { if(textArea.isEditable()) { @@ -119,7 +114,7 @@ * @param textArea The text area * @param register The register */ - public static void append(JEditTextArea textArea, char register) + public static void append(TextArea textArea, char register) { append(textArea,register,"\n",false); } //}}} @@ -131,7 +126,7 @@ * @param register The register * @param separator The separator to insert between the old and new text */ - public static void append(JEditTextArea textArea, char register, + public static void append(TextArea textArea, char register, String separator) { append(textArea,register,separator,false); @@ -146,7 +141,7 @@ * @param cut Should the current selection be removed? * @since jEdit 3.2pre1 */ - public static void append(JEditTextArea textArea, char register, + public static void append(TextArea textArea, char register, String separator, boolean cut) { if(cut && !textArea.isEditable()) @@ -187,7 +182,7 @@ * @param register The register * @since jEdit 2.7pre2 */ - public static void paste(JEditTextArea textArea, char register) + public static void paste(TextArea textArea, char register) { paste(textArea,register,false); } //}}} @@ -200,7 +195,7 @@ * @param vertical Vertical (columnar) paste * @since jEdit 4.1pre1 */ - public static void paste(JEditTextArea textArea, char register, + public static void paste(TextArea textArea, char register, boolean vertical) { if(!textArea.isEditable()) @@ -216,61 +211,59 @@ textArea.getToolkit().beep(); return; } - else + + String selection = reg.toString(); + if(selection == null) { - String selection = reg.toString(); - if(selection == null) + textArea.getToolkit().beep(); + return; + } + JEditBuffer buffer = textArea.getBuffer(); + try + { + buffer.beginCompoundEdit(); + + /* vertical paste */ + if(vertical && textArea.getSelectionCount() == 0) { - textArea.getToolkit().beep(); - return; - } - JEditBuffer buffer = textArea.getBuffer(); - try - { - buffer.beginCompoundEdit(); + int caret = textArea.getCaretPosition(); + int caretLine = textArea.getCaretLine(); + Selection.Rect rect = new Selection.Rect( + caretLine,caret,caretLine,caret); + textArea.setSelectedText(rect,selection); + caretLine = textArea.getCaretLine(); - /* vertical paste */ - if(vertical && textArea.getSelectionCount() == 0) + if(caretLine != textArea.getLineCount() - 1) { - int caret = textArea.getCaretPosition(); - int caretLine = textArea.getCaretLine(); - Selection.Rect rect = new Selection.Rect( - caretLine,caret,caretLine,caret); - textArea.setSelectedText(rect,selection); - caretLine = textArea.getCaretLine(); - - if(caretLine != textArea.getLineCount() - 1) + int startColumn = rect.getStartColumn( + buffer); + int offset = buffer + .getOffsetOfVirtualColumn( + caretLine + 1,startColumn,null); + if(offset == -1) { - int startColumn = rect.getStartColumn( - buffer); - int offset = buffer - .getOffsetOfVirtualColumn( - caretLine + 1,startColumn,null); - if(offset == -1) - { - buffer.insertAtColumn(caretLine + 1,startColumn,""); - textArea.setCaretPosition( - buffer.getLineEndOffset( - caretLine + 1) - 1); - } - else - { - textArea.setCaretPosition( - buffer.getLineStartOffset( - caretLine + 1) + offset); - } + buffer.insertAtColumn(caretLine + 1,startColumn,""); + textArea.setCaretPosition( + buffer.getLineEndOffset( + caretLine + 1) - 1); } + else + { + textArea.setCaretPosition( + buffer.getLineStartOffset( + caretLine + 1) + offset); + } } - else /* Regular paste */ - { - textArea.replaceSelection(selection); - } } - finally { - buffer.endCompoundEdit(); + else /* Regular paste */ + { + textArea.replaceSelection(selection); } - HistoryModel.getModel("clipboard").addItem(selection); } + finally { + buffer.endCompoundEdit(); + } + HistoryModel.getModel("clipboard").addItem(selection); } //}}} //{{{ getRegister() method @@ -305,14 +298,15 @@ if(name >= registers.length) { Register[] newRegisters = new Register[ - Math.min(1<<16,name * 2)]; + Math.min(1<<16, name<<1)]; System.arraycopy(registers,0,newRegisters,0, registers.length); registers = newRegisters; } registers[name] = newRegister; - EditBus.send(new RegisterChanged(null,name)); + if (listener != null) + listener.registerChanged(name); } //}}} //{{{ setRegister() method @@ -328,7 +322,8 @@ if(register != null) { register.setValue(value); - EditBus.send(new RegisterChanged(null,name)); + if (listener != null) + listener.registerChanged(name); } else setRegister(name,new StringRegister(value)); @@ -374,8 +369,11 @@ */ public static String getRegisterStatusPrompt(String action) { + String registerNameString = getRegisterNameString(); return jEdit.getProperty("view.status." + action, - new String[] { getRegisterNameString() }); + new String[] {registerNameString == null ? + jEdit.getProperty("view.status.no-registers") : + registerNameString}); } //}}} //{{{ getRegisterNameString() method @@ -401,7 +399,7 @@ } if(buf.length() == 0) - return jEdit.getProperty("view.status.no-registers"); + return null; else return buf.toString(); } //}}} @@ -412,100 +410,42 @@ if(!loaded || !modified) return; - Log.log(Log.MESSAGE,Registers.class,"Saving registers.xml"); - File file1 = new File(MiscUtilities.constructPath( - jEdit.getSettingsDirectory(), "#registers.xml#save#")); - File file2 = new File(MiscUtilities.constructPath( - jEdit.getSettingsDirectory(), "registers.xml")); - if(file2.exists() && file2.lastModified() != registersModTime) + if (saver != null) { - Log.log(Log.WARNING,Registers.class,file2 + " changed" - + " on disk; will not save registers"); - return; + saver.saveRegisters(); + modified = false; } + } //}}} - jEdit.backupSettingsFile(file2); + //{{{ setListener() method + public static void setListener(RegistersListener listener) + { + Registers.listener = listener; + } //}}} - String lineSep = System.getProperty("line.separator"); + //{{{ setSaver() method + public static void setSaver(RegisterSaver saver) + { + Registers.saver = saver; + } //}}} - BufferedWriter out = null; + //{{{ isLoading() method + public static boolean isLoading() + { + return loading; + } //}}} - boolean ok = false; - - try - { - out = new BufferedWriter(new FileWriter(file1)); - - out.write("<?xml version=\"1.0\"?>"); - out.write(lineSep); - out.write("<!DOCTYPE REGISTERS SYSTEM \"registers.dtd\">"); - out.write(lineSep); - out.write("<REGISTERS>"); - out.write(lineSep); - - Register[] registers = getRegisters(); - for(int i = 0; i < registers.length; i++) - { - Register register = registers[i]; - if(register == null || - i == '$' || - i == '%' || - register.toString().length() == 0 - ) - continue; - - out.write("<REGISTER NAME=\""); - if(i == '"') - out.write("""); - else - out.write((char)i); - out.write("\">"); - - out.write(XMLUtilities.charsToEntities( - register.toString(), false)); - - out.write("</REGISTER>"); - out.write(lineSep); - } - - out.write("</REGISTERS>"); - out.write(lineSep); - - ok = true; - } - catch(Exception e) - { - Log.log(Log.ERROR,Registers.class,e); - } - finally - { - try - { - if(out != null) - out.close(); - } - catch(IOException e) - { - } - } - - if(ok) - { - /* to avoid data loss, only do this if the above - * completed successfully */ - file2.delete(); - file1.renameTo(file2); - } - - registersModTime = file2.lastModified(); - modified = false; + //{{{ setLoading() method + public static void setLoading(boolean loading) + { + Registers.loading = loading; } //}}} //{{{ Private members private static Register[] registers; - private static long registersModTime; private static boolean loaded, loading; - + private static RegisterSaver saver; + private static RegistersListener listener; /** * Flag that tell if a register has been modified (except for '%' and '$' registers that aren't * saved to the xml file). @@ -541,32 +481,11 @@ //{{{ loadRegisters() method private static void loadRegisters() { - loaded = true; - - String settingsDirectory = jEdit.getSettingsDirectory(); - if(settingsDirectory == null) - return; - - File registerFile = new File(MiscUtilities.constructPath( - jEdit.getSettingsDirectory(),"registers.xml")); - if(!registerFile.exists()) - return; - - registersModTime = registerFile.lastModified(); - - Log.log(Log.MESSAGE,jEdit.class,"Loading registers.xml"); - - RegistersHandler handler = new RegistersHandler(); - try { - loading = true; - XMLUtilities.parseXML(new FileInputStream(registerFile), - handler); + if (saver != null) + { + loaded = true; + saver.loadRegisters(); } - catch (IOException ioe) { - Log.log(Log.ERROR, Registers.class, ioe); - } finally { - loading = false; - } } //}}} //}}} @@ -731,50 +650,5 @@ public void dispose() {} } //}}} - //{{{ RegistersHandler class - static class RegistersHandler extends DefaultHandler - { - //{{{ resolveEntity() method - public InputSource resolveEntity(String publicId, String systemId) - { - return XMLUtilities.findEntity(systemId, "registers.dtd", getClass()); - } //}}} - - //{{{ startElement() method - public void startElement(String uri, String localName, - String qName, Attributes attrs) - { - registerName = attrs.getValue("NAME"); - inRegister = "REGISTER".equals(qName); - } //}}} - - //{{{ endElement() method - public void endElement(String uri, String localName, String name) - { - if(name.equals("REGISTER")) - { - if(registerName == null || registerName.length() != 1) - Log.log(Log.ERROR,this,"Malformed NAME: " + registerName); - else - setRegister(registerName.charAt(0),charData.toString()); - inRegister = false; - charData.setLength(0); - } - } //}}} - - //{{{ characters() method - public void characters(char[] ch, int start, int length) - { - if (inRegister) - charData.append(ch, start, length); - } //}}} - - //{{{ Private members - private String registerName; - private StringBuffer charData = new StringBuffer(); - private boolean inRegister; - //}}} - } //}}} - //}}} } Added: jEdit/trunk/org/gjt/sp/jedit/RegistersListener.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/RegistersListener.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/RegistersListener.java 2006-10-08 21:08:04 UTC (rev 7367) @@ -0,0 +1,31 @@ +/* + * RegistersListener.java - Handles services.xml files in plugins + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2006 Matthieu Casanova + * + * 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; + +/** + * @author Matthieu Casanova + * @version $Id: FoldHandler.java 5568 2006-07-10 20:52:23Z kpouer $ + */ +public interface RegistersListener +{ + void registerChanged(char name); +} Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2006-10-08 17:46:54 UTC (rev 7366) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2006-10-08 21:08:04 UTC (rev 7367) @@ -406,6 +406,8 @@ if(loadPlugins) initPlugins(); + Registers.setSaver(new JEditRegisterSaver()); + Registers.setListener(new JEditRegistersListener()); HistoryModel.setSaver(new JEditHistoryModelSaver()); HistoryModel.loadHistory(); BufferHistory.load(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |