From: <kp...@us...> - 2007-06-29 22:03:40
|
Revision: 9883 http://svn.sourceforge.net/jedit/?rev=9883&view=rev Author: kpouer Date: 2007-06-29 15:03:35 -0700 (Fri, 29 Jun 2007) Log Message: ----------- independent textArea Modified Paths: -------------- jEdit/trunk/org/gjt/sp/jedit/Mode.java jEdit/trunk/org/gjt/sp/jedit/ModeCatalogHandler.java jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java jEdit/trunk/org/gjt/sp/jedit/jEdit.java jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/JEditMode.java jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java Added: jEdit/trunk/org/gjt/sp/jedit/JEditMode.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/JEditMode.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/JEditMode.java 2007-06-29 22:03:35 UTC (rev 9883) @@ -0,0 +1,103 @@ +/* + * JEditMode.java - jEdit editing mode + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2007 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; + +/** + * @author Matthieu Casanova + * @version $Id: Buffer.java 8190 2006-12-07 07:58:34Z kpouer $ + * @since jEdit 4.3pre10 + */ +public class JEditMode extends Mode +{ + //{{{ JEditMode constructor + public JEditMode(String name) + { + super(name); + } //}}} + + //{{{ getProperty() method + /** + * Returns a mode property. + * + * @param key The property name + * @since jEdit 4.3pre10 + */ + public Object getProperty(String key) + { + String prefix = "mode." + name + '.'; + + //if(jEdit.getBooleanProperty(prefix + "customSettings")) + //{ + String property = jEdit.getProperty(prefix + key); + if(property != null) + { + Object value; + try + { + value = new Integer(property); + } + catch(NumberFormatException nf) + { + value = property; + } + return value; + } + //} + + Object value = props.get(key); + if(value != null) + return value; + + String global = jEdit.getProperty("buffer." + key); + if(global != null) + { + try + { + return new Integer(global); + } + catch(NumberFormatException nf) + { + return global; + } + } + else + return null; + } //}}} + + //{{{ loadIfNecessary() method + /** + * Loads the mode from disk if it hasn't been loaded already. + * @since jEdit 4.3pre10 + */ + public void loadIfNecessary() + { + if(marker == null) + { + jEdit.loadMode(this); + if (marker == null) + Log.log(Log.ERROR, this, "Mode not correctly loaded, token marker is still null"); + } + } //}}} +} Modified: jEdit/trunk/org/gjt/sp/jedit/Mode.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/Mode.java 2007-06-29 14:41:12 UTC (rev 9882) +++ jEdit/trunk/org/gjt/sp/jedit/Mode.java 2007-06-29 22:03:35 UTC (rev 9883) @@ -37,6 +37,7 @@ import org.gjt.sp.jedit.indent.IndentRuleFactory; import org.gjt.sp.jedit.indent.WhitespaceRule; import org.gjt.sp.jedit.syntax.TokenMarker; +import org.gjt.sp.jedit.syntax.ModeProvider; import org.gjt.sp.util.Log; import org.gjt.sp.util.StandardUtilities; //}}} @@ -133,7 +134,7 @@ { if(marker == null) { - jEdit.loadMode(this); + ModeProvider.instance.loadMode(this); if (marker == null) Log.log(Log.ERROR, this, "Mode not correctly loaded, token marker is still null"); } @@ -148,44 +149,10 @@ */ public Object getProperty(String key) { - String prefix = "mode." + name + '.'; - - //if(jEdit.getBooleanProperty(prefix + "customSettings")) - //{ - String property = jEdit.getProperty(prefix + key); - if(property != null) - { - Object value; - try - { - value = new Integer(property); - } - catch(NumberFormatException nf) - { - value = property; - } - return value; - } - //} - Object value = props.get(key); if(value != null) return value; - - String global = jEdit.getProperty("buffer." + key); - if(global != null) - { - try - { - return new Integer(global); - } - catch(NumberFormatException nf) - { - return global; - } - } - else - return null; + return null; } //}}} //{{{ getBooleanProperty() method @@ -448,11 +415,11 @@ //}}} //{{{ Private members - private String name; - private Map<String, Object> props; + protected String name; + protected Map<String, Object> props; private Pattern firstlineRE; private Pattern filenameRE; - private TokenMarker marker; + protected TokenMarker marker; private List<IndentRule> indentRules; private String electricKeys; private boolean ignoreWhitespace; Modified: jEdit/trunk/org/gjt/sp/jedit/ModeCatalogHandler.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/ModeCatalogHandler.java 2007-06-29 14:41:12 UTC (rev 9882) +++ jEdit/trunk/org/gjt/sp/jedit/ModeCatalogHandler.java 2007-06-29 22:03:35 UTC (rev 9883) @@ -19,28 +19,34 @@ package org.gjt.sp.jedit; -import java.io.*; - +//{{{ Imports +import org.gjt.sp.jedit.syntax.ModeProvider; +import org.gjt.sp.util.Log; +import org.gjt.sp.util.XMLUtilities; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.helpers.DefaultHandler; +//}}} -import org.gjt.sp.util.Log; -import org.gjt.sp.util.XMLUtilities; - +/** + * @author Slava Pestov + */ class ModeCatalogHandler extends DefaultHandler { + //{{{ ModeCatalogHandler constructor ModeCatalogHandler(String directory, boolean resource) { this.directory = directory; this.resource = resource; - } + } //}}} + //{{{ resolveEntity() method public InputSource resolveEntity(String publicId, String systemId) { return XMLUtilities.findEntity(systemId, "catalog.dtd", getClass()); - } + } //}}} + //{{{ startElement() method public void startElement(String uri, String localName, String qName, Attributes attrs) { @@ -60,11 +66,11 @@ String firstlineGlob = attrs.getValue("FIRST_LINE_GLOB"); - Mode mode = jEdit.getMode(modeName); + Mode mode = ModeProvider.instance.getMode(modeName); if(mode == null) { - mode = new Mode(modeName); - jEdit.addMode(mode); + mode = instantiateMode(modeName); + ModeProvider.instance.addMode(mode); } Object path; @@ -86,6 +92,11 @@ mode.init(); } + } //}}} + + protected Mode instantiateMode(String modeName) + { + return new Mode(modeName); } private String directory; Modified: jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java 2007-06-29 14:41:12 UTC (rev 9882) +++ jEdit/trunk/org/gjt/sp/jedit/buffer/JEditBuffer.java 2007-06-29 22:03:35 UTC (rev 9883) @@ -24,38 +24,26 @@ package org.gjt.sp.jedit.buffer; //{{{ Imports -import java.awt.Toolkit; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.locks.ReentrantReadWriteLock; -import java.util.regex.Pattern; -import javax.swing.SwingUtilities; -import javax.swing.text.Position; -import javax.swing.text.Segment; - import org.gjt.sp.jedit.Debug; import org.gjt.sp.jedit.Mode; import org.gjt.sp.jedit.TextUtilities; -import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.indent.IndentAction; import org.gjt.sp.jedit.indent.IndentRule; -import org.gjt.sp.jedit.syntax.DefaultTokenHandler; -import org.gjt.sp.jedit.syntax.DummyTokenHandler; -import org.gjt.sp.jedit.syntax.KeywordMap; -import org.gjt.sp.jedit.syntax.ParserRuleSet; -import org.gjt.sp.jedit.syntax.Token; -import org.gjt.sp.jedit.syntax.TokenHandler; -import org.gjt.sp.jedit.syntax.TokenMarker; +import org.gjt.sp.jedit.syntax.*; import org.gjt.sp.jedit.textarea.JEditTextArea; import org.gjt.sp.util.IntegerArray; import org.gjt.sp.util.Log; import org.gjt.sp.util.StandardUtilities; + +import javax.swing.*; +import javax.swing.text.Position; +import javax.swing.text.Segment; +import java.awt.*; +import java.util.*; +import java.util.List; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.regex.Pattern; //}}} /** @@ -1195,7 +1183,7 @@ public boolean isElectricKey(char ch, int line) { TokenMarker.LineContext ctx = lineMgr.getLineContext(line); - Mode mode = jEdit.getMode(ctx.rules.getModeName()); + Mode mode = ModeProvider.instance.getMode(ctx.rules.getModeName()); // mode can be null, though that's probably an error "further up": if( mode == null ) @@ -2490,7 +2478,7 @@ modeName = ctx.rules.getModeName(); if (modeName == null) modeName = tokenMarker.getMainRuleSet().getModeName(); - return jEdit.getMode(modeName).getIndentRules(); + return ModeProvider.instance.getMode(modeName).getIndentRules(); } //}}} //}}} Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2007-06-29 14:41:12 UTC (rev 9882) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2007-06-29 22:03:35 UTC (rev 9883) @@ -1281,7 +1281,7 @@ { /* Try to guess the eventual size to avoid unnecessary * copying */ - modes = new Vector<Mode>(160); + ModeProvider.instance.removeAll(); //{{{ Load the global catalog if(jEditHome == null) @@ -1342,13 +1342,7 @@ */ public static Mode getMode(String name) { - for(int i = 0; i < modes.size(); i++) - { - Mode mode = modes.elementAt(i); - if(mode.getName().equals(name)) - return mode; - } - return null; + return ModeProvider.instance.getMode(name); } //}}} //{{{ getModes() method @@ -1357,9 +1351,7 @@ */ public static Mode[] getModes() { - Mode[] array = new Mode[modes.size()]; - modes.copyInto(array); - return array; + return ModeProvider.instance.getModes(); } //}}} //}}} @@ -2649,20 +2641,6 @@ } } //}}} - //{{{ addMode() method - /** - * Do not call this method. It is only public so that classes - * in the org.gjt.sp.jedit.syntax package can access it. - * @param mode The edit mode - */ - public static void addMode(Mode mode) - { - //Log.log(Log.DEBUG,jEdit.class,"Adding edit mode " - // + mode.getName()); - - modes.addElement(mode); - } //}}} - //{{{ loadMode() method /** * Loads an XML-defined edit mode from the specified reader. @@ -2671,16 +2649,6 @@ /* package-private */ static void loadMode(Mode mode) { final String fileName = (String)mode.getProperty("file"); - - Log.log(Log.NOTICE,jEdit.class,"Loading edit mode " + fileName); - - XMLReader parser = null; - try { - parser = XMLReaderFactory.createXMLReader(); - } catch (SAXException saxe) { - Log.log(Log.ERROR, jEdit.class, saxe); - return; - } XModeHandler xmh = new XModeHandler(mode.getName()) { public void error(String what, Object subst) @@ -2714,43 +2682,7 @@ return mode.getTokenMarker(); } }; - - mode.setTokenMarker(xmh.getTokenMarker()); - - Reader grammar = null; - - try - { - grammar = new BufferedReader(new FileReader(fileName)); - - InputSource isrc = new InputSource(grammar); - isrc.setSystemId("jedit.jar"); - parser.setContentHandler(xmh); - parser.setDTDHandler(xmh); - parser.setEntityResolver(xmh); - parser.setErrorHandler(xmh); - parser.parse(isrc); - - mode.setProperties(xmh.getModeProperties()); - } - catch (Throwable e) - { - Log.log(Log.ERROR, jEdit.class, e); - - if (e instanceof SAXParseException) - { - String message = e.getMessage(); - int line = ((SAXParseException)e).getLineNumber(); - int col = ((SAXParseException)e).getColumnNumber(); - - Object[] args = { fileName, line, col, message }; - GUIUtilities.error(null,"xmode-error",args); - } - } - finally - { - IOUtilities.closeQuietly(grammar); - } + ModeProvider.instance.loadMode(mode, xmh); } //}}} //{{{ addPluginProps() method @@ -2837,7 +2769,7 @@ private static Vector<ErrorListDialog.ErrorEntry> pluginErrors; private static final Object pluginErrorLock = new Object(); private static Vector<PluginJAR> jars; - private static Vector<Mode> modes; + private static boolean saveCaret; private static InputHandler inputHandler; @@ -3931,7 +3863,13 @@ Log.log(Log.MESSAGE,jEdit.class,"Loading mode catalog file " + path); ModeCatalogHandler handler = new ModeCatalogHandler( - MiscUtilities.getParentOfPath(path),resource); + MiscUtilities.getParentOfPath(path),resource) + { + protected Mode instantiateMode(String modeName) + { + return new JEditMode(modeName); + } + }; try { InputStream _in; Added: jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java 2007-06-29 22:03:35 UTC (rev 9883) @@ -0,0 +1,178 @@ +/* + * ModeProvider.java - An edit mode provider. + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2003 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.syntax; + +//{{{ Imports + +import org.gjt.sp.jedit.GUIUtilities; +import org.gjt.sp.jedit.Mode; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.util.IOUtilities; +import org.gjt.sp.util.Log; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.XMLReaderFactory; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; +//}}} + +/** + * @author Matthieu Casanova + * @version $Id: Buffer.java 8190 2006-12-07 07:58:34Z kpouer $ + * @since jEdit 4.3pre10 + */ +public class ModeProvider +{ + public static final ModeProvider instance = new ModeProvider(); + + private List<Mode> modes = new ArrayList<Mode>(160); + + //{{{ ModeProvider constructor + private ModeProvider() + { + } //}}} + + //{{{ removeAll() method + public void removeAll() + { + modes = new ArrayList<Mode>(160); + } //}}} + + //{{{ getMode() method + /** + * Returns the edit mode with the specified name. + * @param name The edit mode + * @since jEdit 4.3pre10 + */ + public Mode getMode(String name) + { + for(int i = 0; i < modes.size(); i++) + { + Mode mode = modes.get(i); + if(mode.getName().equals(name)) + return mode; + } + return null; + } //}}} + + //{{{ getModes() method + /** + * Returns an array of installed edit modes. + * @since jEdit 4.3pre10 + */ + public Mode[] getModes() + { + Mode[] array = new Mode[modes.size()]; + modes.toArray(array); + return array; + } //}}} + + //{{{ addMode() method + /** + * Do not call this method. It is only public so that classes + * in the org.gjt.sp.jedit.syntax package can access it. + * @since jEdit 4.3pre10 + * @param mode The edit mode + */ + public void addMode(Mode mode) + { + modes.add(mode); + } //}}} + + public void loadMode(Mode mode, XModeHandler xmh) + { + String fileName = (String)mode.getProperty("file"); + + Log.log(Log.NOTICE,jEdit.class,"Loading edit mode " + fileName); + + XMLReader parser = null; + try { + parser = XMLReaderFactory.createXMLReader(); + } catch (SAXException saxe) { + Log.log(Log.ERROR, jEdit.class, saxe); + return; + } + mode.setTokenMarker(xmh.getTokenMarker()); + + Reader grammar = null; + + try + { + grammar = new BufferedReader(new FileReader(fileName)); + + InputSource isrc = new InputSource(grammar); + isrc.setSystemId("jedit.jar"); + parser.setContentHandler(xmh); + parser.setDTDHandler(xmh); + parser.setEntityResolver(xmh); + parser.setErrorHandler(xmh); + parser.parse(isrc); + + mode.setProperties(xmh.getModeProperties()); + } + catch (Throwable e) + { + Log.log(Log.ERROR, jEdit.class, e); + + if (e instanceof SAXParseException) + { + String message = e.getMessage(); + int line = ((SAXParseException)e).getLineNumber(); + int col = ((SAXParseException)e).getColumnNumber(); + + Object[] args = { fileName, line, col, message }; + GUIUtilities.error(null,"xmode-error",args); + } + } + finally + { + IOUtilities.closeQuietly(grammar); + } + } + + public void loadMode(Mode mode) + { + XModeHandler xmh = new XModeHandler(mode.getName()) + { + public void error(String what, Object subst) + { + Log.log(Log.ERROR, this, subst); + } + + public TokenMarker getTokenMarker(String modeName) + { + Mode mode = getMode(modeName); + if(mode == null) + return null; + else + return mode.getTokenMarker(); + } + }; + loadMode(mode, xmh); + } +} Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2007-06-29 14:41:12 UTC (rev 9882) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2007-06-29 22:03:35 UTC (rev 9883) @@ -23,33 +23,35 @@ */ package org.gjt.sp.jedit.textarea; -import org.gjt.sp.jedit.input.InputHandlerProvider; +//{{{ Imports +import org.gjt.sp.jedit.Debug; +import org.gjt.sp.jedit.Mode; +import org.gjt.sp.jedit.TextUtilities; +import org.gjt.sp.jedit.buffer.DefaultFoldHandlerProvider; +import org.gjt.sp.jedit.buffer.FoldHandler; +import org.gjt.sp.jedit.buffer.JEditBuffer; import org.gjt.sp.jedit.input.AbstractInputHandler; import org.gjt.sp.jedit.input.DefaultInputHandlerProvider; +import org.gjt.sp.jedit.input.InputHandlerProvider; import org.gjt.sp.jedit.input.TextAreaInputHandler; -import org.gjt.sp.jedit.syntax.Chunk; -import org.gjt.sp.jedit.syntax.TokenMarker; -import org.gjt.sp.jedit.syntax.ParserRuleSet; -import org.gjt.sp.jedit.syntax.SyntaxStyle; -import org.gjt.sp.jedit.buffer.JEditBuffer; -import org.gjt.sp.jedit.Debug; -import org.gjt.sp.jedit.TextUtilities; +import org.gjt.sp.jedit.syntax.*; import org.gjt.sp.util.Log; import org.gjt.sp.util.StandardUtilities; +import javax.swing.*; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; import javax.swing.event.EventListenerList; import javax.swing.event.MouseInputAdapter; -import javax.swing.event.CaretListener; -import javax.swing.event.CaretEvent; +import javax.swing.plaf.metal.MetalLookAndFeel; import javax.swing.text.Segment; -import javax.swing.*; -import javax.swing.Timer; -import javax.swing.plaf.metal.MetalLookAndFeel; import java.awt.*; +import java.awt.event.*; import java.awt.im.InputMethodRequests; -import java.awt.event.*; -import java.util.*; - +import java.util.Iterator; +import java.util.LinkedList; +import java.util.TooManyListenersException; +//}}} /** * jEdit's text component.<p> * @@ -114,12 +116,16 @@ setCaretBlinkEnabled(true); setElectricScroll(3); + FoldHandler.foldHandlerProvider = new DefaultFoldHandlerProvider(); JEditBuffer buffer = new JEditBuffer(); TokenMarker tokenMarker = new TokenMarker(); tokenMarker.addRuleSet(new ParserRuleSet("text","MAIN")); buffer.setTokenMarker(tokenMarker); buffer.insert(0,"ahaha coucou\ncaca"); setBuffer(buffer); + Mode mode = new Mode("text"); + mode.setTokenMarker(tokenMarker); + ModeProvider.instance.addMode(mode); } //}}} //{{{ TextArea constructor This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |