summaryrefslogtreecommitdiff
path: root/scripting/java/org/openoffice/netbeans/editor/JavaKit.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/org/openoffice/netbeans/editor/JavaKit.java')
-rw-r--r--scripting/java/org/openoffice/netbeans/editor/JavaKit.java248
1 files changed, 248 insertions, 0 deletions
diff --git a/scripting/java/org/openoffice/netbeans/editor/JavaKit.java b/scripting/java/org/openoffice/netbeans/editor/JavaKit.java
new file mode 100644
index 000000000000..ec09935de661
--- /dev/null
+++ b/scripting/java/org/openoffice/netbeans/editor/JavaKit.java
@@ -0,0 +1,248 @@
+/*************************************************************************
+*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+************************************************************************/
+package org.openoffice.netbeans.editor;
+
+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
+*/
+
+/* This class is based on the JavaKit class in the demosrc directory of
+ * the editor module of the NetBeans project: http://www.netbeans.org
+ *
+ * The class sets up an EditorKit for syntax highlighting and code completion
+ * of Java syntax
+ */
+
+public class JavaKit extends ExtKit {
+
+ public static final String JAVA_MIME_TYPE = "text/x-java"; // NOI18N
+
+ static final long serialVersionUID =-5445829962533684922L;
+
+ static {
+ Settings.addInitializer( new JavaSettingsInitializer( JavaKit.class ) );
+ Settings.reset();
+
+ URL skeleton = null, body = null;
+ skeleton = JavaKit.class.getResource("OOo.jcs");
+ body = JavaKit.class.getResource("OOo.jcb");
+
+ if (skeleton != null && body != null) {
+ 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());
+ }
+
+ /**
+ * 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!");
+ }
+
+ /**
+ * Reads exactly <code>len</code> bytes from this file resource
+ * into the byte array, starting at the current file pointer.
+ * This method reads repeatedly from the file until the requested
+ * number of bytes are read. This method blocks until the requested
+ * number of bytes are read, the end of the inputStream is detected,
+ * or an exception is thrown.
+ *
+ * @param buffer the buffer into which the data is read.
+ * @param off the start offset of the data.
+ * @param len the number of bytes to read.
+ */
+ public void read(byte[] buffer, int off, int len) throws IOException {
+ InputStream str = getStream(actOff);
+ while (len > 0) {
+ int count = str.read(buffer, off, len);
+ streamOff += count;
+ off += count;
+ len -= count;
+ }
+ }
+
+ /** Opens DataAccessor file resource
+ * @param requestWrite if true, file is opened for read/write
+ */
+ public void open(boolean requestWrite) throws IOException {
+ if(requestWrite)
+ throw new IllegalArgumentException("read only!");
+ }
+
+ /** Closes DataAccessor file resource */
+ public void close() throws IOException {
+ if (stream != null) {
+ stream.close();
+ stream = null;
+ }
+ }
+
+ /**
+ * Returns the current offset in this file.
+ *
+ * @return the offset from the beginning of the file, in bytes,
+ * at which the next read or write occurs.
+ */
+ public long getFilePointer() throws IOException {
+ return actOff;
+ }
+
+ /** Clears the file and sets the offset to 0 */
+ public void resetFile() throws IOException {
+ throw new IllegalArgumentException("read only!");
+ }
+
+ /**
+ * Sets the file-pointer offset, measured from the beginning of this
+ * file, at which the next read or write occurs.
+ */
+ public void seek(long pos) throws IOException {
+ actOff = (int)pos;
+ }
+
+ /** Gets InputStream prepared for reading from <code>off</code>
+ * offset position
+ */
+ private InputStream getStream(int off) throws IOException {
+ if (streamOff > off && stream != null) {
+ stream.close();
+ stream = null;
+ }
+
+ if(stream == null) {
+ stream = url.openStream();
+ streamOff = 0;
+ }
+
+ while (streamOff < off) {
+ long len = stream.skip(off - streamOff);
+ streamOff += (int)len;
+ if (len == 0) throw new IOException("EOF");
+ }
+
+ return stream;
+ }
+
+ public int getFileLength() {
+ try {
+ int l = url.openConnection().getContentLength();
+ return l;
+ } catch (IOException e) {
+ return 0;
+ }
+ }
+
+ public String toString() {
+ return url.toString();
+ }
+ }
+}