|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.editor.example; import java.io.*; import java.awt.event.KeyEvent; import java.awt.event.InputEvent; import java.awt.event.ActionEvent; import java.net.URL; import java.text.MessageFormat; import java.util.Map; import java.util.List; import java.util.ResourceBundle; import java.util.MissingResourceException; import javax.swing.KeyStroke; import javax.swing.JEditorPane; import javax.swing.JMenuItem; import javax.swing.Action; import javax.swing.text.Document; import javax.swing.text.JTextComponent; import javax.swing.text.TextAction; import javax.swing.text.BadLocationException; import org.netbeans.editor.*; import org.netbeans.editor.ext.*; import org.netbeans.editor.ext.java.*; /** * Java editor kit with appropriate document * * @author Miloslav Metelka * @version 1.00 */ public class JavaKit extends ExtKit { public static final String JAVA_MIME_TYPE = "text/x-java"; // NOI18N private static final String[] getSetIsPrefixes = new String[] { "get", "set", "is" // NOI18N }; /** Switch first letter of word to capital and insert 'get' * at word begining. */ public static final String makeGetterAction = "make-getter"; // NOI18N /** Switch first letter of word to capital and insert 'set' * at word begining. */ public static final String makeSetterAction = "make-setter"; // NOI18N /** Switch first letter of word to capital and insert 'is' * at word begining. */ public static final String makeIsAction = "make-is"; // NOI18N /** Debug source and line number */ public static final String abbrevDebugLineAction = "abbrev-debug-line"; // NOI18N static final long serialVersionUID =-5445829962533684922L; static { Settings.addInitializer( new JavaSettingsInitializer( JavaKit.class ) ); Settings.addInitializer( new SaJavaSettingsInitializer() ); Settings.reset(); ResourceBundle settings = ResourceBundle.getBundle( "settings" ); // NOI18N String jcPath = null; try { jcPath = settings.getString( "Java_Completion" ); } catch( MissingResourceException exc ) {} if( jcPath != null ) { URL skeleton = JavaKit.class.getResource("/" + jcPath + ".jcs"); URL body = JavaKit.class.getResource("/" + jcPath + ".jcb"); if (skeleton == null || body == null) { System.err.println("Warning: Java parser databases not found. Ignoring."); } else { DAFileProvider provider = new DAFileProvider( new URLAccessor(skeleton), new URLAccessor(body) ); JCBaseFinder finder = new JCBaseFinder(); finder.append( provider ); JavaCompletion.setFinder( finder ); } } } public String getContentType() { return JAVA_MIME_TYPE; } /** Create new instance of syntax coloring scanner * @param doc document to operate on. It can be null in the cases the syntax * creation is not related to the particular document */ public Syntax createSyntax(Document doc) { return new JavaSyntax(); } /** Create syntax support */ public SyntaxSupport createSyntaxSupport(BaseDocument doc) { return new JavaSyntaxSupport(doc); } public Completion createCompletion(ExtEditorUI extEditorUI) { return new JavaCompletion(extEditorUI); } /** Create the formatter appropriate for this kit */ public Formatter createFormatter() { return new JavaFormatter(this.getClass()); } protected EditorUI createEditorUI() { return new ExtEditorUI(); } protected void initDocument(BaseDocument doc) { doc.addLayer(new JavaDrawLayerFactory.JavaLayer(), JavaDrawLayerFactory.JAVA_LAYER_VISIBILITY); doc.addDocumentListener(new JavaDrawLayerFactory.LParenWatcher()); } protected Action[] createActions() { Action[] javaActions = new Action[] { new JavaDefaultKeyTypedAction(), new PrefixMakerAction(makeGetterAction, "get", getSetIsPrefixes), // NOI18N new PrefixMakerAction(makeSetterAction, "set", getSetIsPrefixes), // NOI18N new PrefixMakerAction(makeIsAction, "is", getSetIsPrefixes), // NOI18N new AbbrevDebugLineAction(), }; return TextAction.augmentList(super.createActions(), javaActions); } public static class JavaDefaultKeyTypedAction extends ExtDefaultKeyTypedAction { protected void checkIndentHotChars(JTextComponent target, String typedText) { boolean reindent = false; BaseDocument doc = Utilities.getDocument(target); int dotPos = target.getCaret().getDot(); if (doc != null) { /* Check whether the user has written the ending 'e' * of the first 'else' on the line. */ if ("e".equals(typedText)) { // NOI18N try { int fnw = Utilities.getRowFirstNonWhite(doc, dotPos); if (fnw >= 0 && fnw + 4 == dotPos && "else".equals(doc.getText(fnw, 4)) // NOI18N ) { reindent = true; } } catch (BadLocationException e) { } } else if (":".equals(typedText)) { // NOI18N try { int fnw = Utilities.getRowFirstNonWhite(doc, dotPos); if (fnw >= 0 && fnw + 4 <= doc.getLength() && "case".equals(doc.getText(fnw, 4)) // NOI18N ) { reindent = true; } } catch (BadLocationException e) { } } // Reindent the line if necessary if (reindent) { try { Utilities.reformatLine(doc, dotPos); } catch (BadLocationException e) { } } } super.checkIndentHotChars(target, typedText); } } public static class AbbrevDebugLineAction extends BaseAction { public AbbrevDebugLineAction() { super(abbrevDebugLineAction); } public void actionPerformed(ActionEvent evt, JTextComponent target) { if (target != null) { if (!target.isEditable() || !target.isEnabled()) { target.getToolkit().beep(); return; } BaseDocument doc = (BaseDocument)target.getDocument(); StringBuffer sb = new StringBuffer("System.err.println(\""); // NOI18N File file = (File)doc.getProperty( "file" ); if (file != null) { sb.append( file.getAbsolutePath() ); sb.append(':'); } try { sb.append(Utilities.getLineOffset(doc, target.getCaret().getDot()) + 1); } catch (BadLocationException e) { } sb.append(' '); BaseKit kit = Utilities.getKit(target); Action a = kit.getActionByName(BaseKit.insertContentAction); if (a != null) { Utilities.performAction( a, new ActionEvent(target, ActionEvent.ACTION_PERFORMED, sb.toString()), target ); } } } } private static class SaJavaSettingsInitializer extends Settings.AbstractInitializer { public SaJavaSettingsInitializer() { super( "sa-java-settings-initializer" ); // NOI18N } public void updateSettingsMap(Class kitClass, Map settingsMap) { if (kitClass == JavaKit.class) { SettingsUtil.updateListSetting(settingsMap, SettingsNames.KEY_BINDING_LIST, getJavaKeyBindings()); } } public MultiKeyBinding[] getJavaKeyBindings() { return new MultiKeyBinding[] { new MultiKeyBinding( new KeyStroke[] { KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.ALT_MASK), KeyStroke.getKeyStroke(KeyEvent.VK_G, 0) }, JavaKit.makeGetterAction ), new MultiKeyBinding( new KeyStroke[] { KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.ALT_MASK), KeyStroke.getKeyStroke(KeyEvent.VK_S, 0) }, JavaKit.makeSetterAction ), new MultiKeyBinding( new KeyStroke[] { KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.ALT_MASK), KeyStroke.getKeyStroke(KeyEvent.VK_I, 0) }, JavaKit.makeIsAction ), new MultiKeyBinding( KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.ALT_MASK), JavaKit.abbrevDebugLineAction ) }; } } /** * DataAccessor for parser DB files via URL streams * * @author Petr Nejedly */ public static class URLAccessor implements DataAccessor { URL url; InputStream stream; int streamOff; int actOff; public URLAccessor(URL url) { this.url = url; } /** Not implemented */ public void append(byte[] buffer, int off, int len) throws IOException { throw new IllegalArgumentException("read only!"); // NOI18N } /** * Reads exactly |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.