[SCM] Lisaac eclipse plugin branch, master, updated. 35c1aa11404b2bac880aa3434ddb3b194cd5adbc
Damien Bouvarel
dams.bouvarel at wanadoo.fr
Tue Apr 14 16:26:54 UTC 2009
The following commit has been merged in the master branch:
commit 91fe3d54f2d35a87c61db288829a1d9ecb20f6e9
Author: Damien Bouvarel <dams.bouvarel at wanadoo.fr>
Date: Tue Apr 7 21:36:05 2009 +0200
add templates in Lisaac editor & preferences
diff --git a/plugin.xml b/plugin.xml
index 856c0e6..6818baa 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -18,7 +18,7 @@
<editor
name="Lisaac Editor"
extensions="li"
- icon="icons/sample.gif"
+ icon="icons/prototype.gif"
contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
class="org.eclipse.lisaac.editors.LisaacEditor"
id="org.eclipse.lisaac.editors.LisaacEditor">
@@ -66,6 +66,12 @@
class="org.eclipse.lisaac.preferences.LisaacPreferencePage"
id="org.eclipse.lisaac.preferences.LisaacPreferencePage">
</page>
+ <page
+ category="org.eclipse.lisaac.preferences.LisaacPreferencePage"
+ class="org.eclipse.lisaac.preferences.LisaacTemplatePage"
+ id="org.eclipse.lisaac.templatepreferences"
+ name="Lisaac Templates">
+ </page>
</extension>
<extension
point="org.eclipse.core.runtime.preferences">
@@ -106,16 +112,19 @@
icon="icons/sample.gif"
id="org.eclipse.lisaac.wizard"
name="Lisaac Project"
+ preferredPerspectives="org.eclipse.lisaac.perspectives.LisaacPerspective"
project="true">
</wizard>
<wizard
canFinishEarly="false"
category="Lisaac"
class="org.eclipse.lisaac.wizards.NewPrototypeWizard"
+ finalPerspective="org.eclipse.lisaac.perspectives.LisaacPerspective"
hasPages="true"
- icon="icons/lisaac-file.png"
+ icon="icons/prototype.gif"
id="org.eclipse.lisaac.prototype"
name="Lisaac Prototype"
+ preferredPerspectives="org.eclipse.lisaac.perspectives.LisaacPerspective"
project="false">
</wizard>
</extension>
@@ -191,6 +200,27 @@
label="Correct Indentation"
menubarPath="org.eclipse.lisaac.sourcemenu/indent">
</action>
+ <action
+ class="org.eclipse.lisaac.actions.GenerateConstructor"
+ definitionId="org.eclipse.lisaac.cmd2"
+ id="org.eclipse.lisaac.generateconstructor"
+ label="Generate Constructor"
+ menubarPath="org.eclipse.lisaac.sourcemenu/indent">
+ </action>
+ <menu
+ id="org.eclipse.lisaac.toolbar"
+ label="New Prototype">
+ </menu>
+ <action
+ class="org.eclipse.lisaac.actions.CreatePrototype"
+ definitionId="org.eclipse.lisaac.cmd3"
+ icon="icons/prototype.gif"
+ id="org.eclipse.lisaac.toolbar_action1"
+ label="New Prototype"
+ style="push"
+ toolbarPath="org.eclipse.lisaac.toolbar"
+ tooltip="Create new prototype">
+ </action>
</actionSet>
</extension>
<extension
@@ -204,6 +234,16 @@
id="org.eclipse.lisaac.commands"
name="Lisaac Command">
</category>
+ <command
+ categoryId="org.eclipse.lisaac.commands"
+ id="org.eclipse.lisaac.cmd2"
+ name="Generate Constructor">
+ </command>
+ <command
+ categoryId="org.eclipse.lisaac.commands"
+ id="org.eclipse.lisaac.cmd3"
+ name="New Prototype">
+ </command>
</extension>
<extension
point="org.eclipse.ui.bindings">
@@ -231,5 +271,97 @@
</description>
</cheatsheet>
</extension>
+ <extension
+ point="org.eclipse.ui.editors.templates">
+ <contextType
+ class="org.eclipse.lisaac.templates.LisaacContextType"
+ id="org.eclipse.lisaac.contexttype"
+ name="Lisaac context type">
+ </contextType>
+ <resolver
+ class="org.eclipse.lisaac.templates.LisaacVariableResolver"
+ contextTypeId="org.eclipse.lisaac.contexttype"
+ name="Lisaac resolver"
+ type="lisaac">
+ </resolver>
+ <template
+ autoinsert="true"
+ contextTypeId="org.eclipse.lisaac.contexttype"
+ description="While loop"
+ icon="icons/template.gif"
+ id="org.eclipse.lisaac.template_whiledo"
+ name="while_do">
+ <pattern>
+ while_do {
+ ${cursor}
+};
+ </pattern>
+ </template>
+ <template
+ autoinsert="true"
+ contextTypeId="org.eclipse.lisaac.contexttype"
+ description="Until Loop"
+ icon="icons/template.gif"
+ id="org.eclipse.lisaac.template_untildo"
+ name="until_do">
+ <pattern>
+ until_do {
+ ${cursor}
+};
+ </pattern>
+ </template>
+ <template
+ autoinsert="true"
+ contextTypeId="org.eclipse.lisaac.contexttype"
+ description="If statement"
+ icon="icons/template.gif"
+ id="org.eclipse.lisaac.template_if"
+ name="if">
+ <pattern>
+ if {
+ ${cursor}
+};
+ </pattern>
+ </template>
+ <template
+ autoinsert="true"
+ contextTypeId="org.eclipse.lisaac.contexttype"
+ description="If Else statement"
+ icon="icons/template.gif"
+ id="org.eclipse.lisaac.template_ifelse"
+ name="if__else">
+ <pattern>
+ if {
+ ${cursor}
+} else {
+};
+ </pattern>
+ </template>
+ <template
+ autoinsert="true"
+ contextTypeId="org.eclipse.lisaac.contexttype"
+ description="If false statement"
+ icon="icons/template.gif"
+ id="org.eclipse.lisaac.template_iffalse"
+ name="if_false">
+ <pattern>
+ if_false {
+ ${cursor}
+};
+ </pattern>
+ </template>
+ <template
+ autoinsert="true"
+ contextTypeId="org.eclipse.lisaac.contexttype"
+ description="For loop"
+ icon="icons/template.gif"
+ id="org.eclipse.lisaac.template_for"
+ name="to__do">
+ <pattern>
+ to ${cursor} do { i:INTEGER;
+};
+ </pattern>
+ </template>
+ </extension>
</plugin>
diff --git a/src/org/eclipse/lisaac/LisaacPlugin.java b/src/org/eclipse/lisaac/LisaacPlugin.java
index 94e1fa6..8f292c2 100644
--- a/src/org/eclipse/lisaac/LisaacPlugin.java
+++ b/src/org/eclipse/lisaac/LisaacPlugin.java
@@ -1,10 +1,18 @@
package org.eclipse.lisaac;
+import java.io.IOException;
+
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.templates.ContextTypeRegistry;
+import org.eclipse.jface.text.templates.persistence.TemplateStore;
import org.eclipse.lisaac.model.LisaacModel;
+import org.eclipse.lisaac.templates.LisaacContextType;
+import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry;
+import org.eclipse.ui.editors.text.templates.ContributionTemplateStore;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -18,7 +26,49 @@ public class LisaacPlugin extends AbstractUIPlugin {
// The shared instance
private static LisaacPlugin plugin;
-
+
+
+ /** The template store. */
+ private TemplateStore fStore;
+ /** The context type registry. */
+ private ContextTypeRegistry fRegistry;
+
+
+ private static final String TEMPLATES_KEY = "org.eclipse.lisaac.templatepreferences"; //$NON-NLS-1$
+
+
+ public TemplateStore getTemplateStore() {
+ if (fStore == null) {
+ fStore = new ContributionTemplateStore (
+ getContextTypeRegistry(), LisaacPlugin
+ .getDefault().getPreferenceStore(),
+ TEMPLATES_KEY);
+ try {
+ fStore.load();
+ } catch (IOException e) {
+ LisaacPlugin
+ .getDefault()
+ .getLog()
+ .log(
+ new Status(
+ IStatus.ERROR,
+ "org.eclipse.lisaac", IStatus.OK, "", e)); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ return fStore;
+ }
+
+ public ContextTypeRegistry getContextTypeRegistry() {
+ if (fRegistry == null) {
+ // create an configure the contexts available in the template editor
+ ContributionContextTypeRegistry registry= new ContributionContextTypeRegistry();
+ registry.addContextType(LisaacContextType.ID_CONTEXT_TYPE);
+
+ fRegistry= registry;
+ }
+ return fRegistry;
+ }
+
/**
* The constructor
*/
@@ -32,7 +82,7 @@ public class LisaacPlugin extends AbstractUIPlugin {
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
-
+
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for (int i=0; i<projects.length; i++) {
// create lisaac model
@@ -69,7 +119,7 @@ public class LisaacPlugin extends AbstractUIPlugin {
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
-
+
/**
* Logs the specified status with this plug-in's log.
*
diff --git a/src/org/eclipse/lisaac/actions/CreatePrototype.java b/src/org/eclipse/lisaac/actions/CreatePrototype.java
new file mode 100644
index 0000000..2fa973b
--- /dev/null
+++ b/src/org/eclipse/lisaac/actions/CreatePrototype.java
@@ -0,0 +1,51 @@
+package org.eclipse.lisaac.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.lisaac.LisaacPlugin;
+import org.eclipse.lisaac.editors.LisaacEditor;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+
+public class CreatePrototype implements IWorkbenchWindowActionDelegate {
+
+
+ /**
+ * The action has been activated. The argument of the
+ * method represents the 'real' action sitting
+ * in the workbench UI.
+ * @see IWorkbenchWindowActionDelegate#run
+ */
+ public void run(IAction action) {
+ // TODO start prototype wizard
+ }
+
+ /**
+ * Selection in the workbench has been changed. We
+ * can change the state of the 'real' action here
+ * if we want, but this can only happen after
+ * the delegate has been created.
+ * @see IWorkbenchWindowActionDelegate#selectionChanged
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ }
+
+ /**
+ * We will cache window object in order to
+ * be able to provide parent shell for the message dialog.
+ * @see IWorkbenchWindowActionDelegate#init
+ */
+ public void init(IWorkbenchWindow window) {
+ }
+
+ /**
+ * We can use this method to dispose of any system
+ * resources we previously allocated.
+ * @see IWorkbenchWindowActionDelegate#dispose
+ */
+ public void dispose() {
+ }
+}
diff --git a/src/org/eclipse/lisaac/actions/IndentAction.java b/src/org/eclipse/lisaac/actions/GenerateConstructor.java
similarity index 63%
copy from src/org/eclipse/lisaac/actions/IndentAction.java
copy to src/org/eclipse/lisaac/actions/GenerateConstructor.java
index 73298a8..b19a24b 100644
--- a/src/org/eclipse/lisaac/actions/IndentAction.java
+++ b/src/org/eclipse/lisaac/actions/GenerateConstructor.java
@@ -1,79 +1,80 @@
-package org.eclipse.lisaac.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.lisaac.LisaacPlugin;
-import org.eclipse.lisaac.editors.LisaacAutoEditStrategy;
-import org.eclipse.lisaac.editors.LisaacEditor;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-
-/**
- * Our sample action implements workbench action delegate.
- * The action proxy will be created by the workbench and
- * shown in the UI. When the user tries to use the action,
- * this delegate will be created and execution will be
- * delegated to it.
- * @see IWorkbenchWindowActionDelegate
- */
-public class IndentAction implements IWorkbenchWindowActionDelegate {
- /**
- * The constructor.
- */
- public IndentAction() {
- }
-
- /**
- * The action has been activated. The argument of the
- * method represents the 'real' action sitting
- * in the workbench UI.
- * @see IWorkbenchWindowActionDelegate#run
- */
- public void run(IAction action) {
- IWorkbenchWindow w = LisaacPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
-
- IWorkbenchPart part = w.getPartService().getActivePart();
- if (part instanceof LisaacEditor) {
- IDocument document = ((LisaacEditor)part).getDocument();
- //
- LisaacAutoEditStrategy.fullIndentDocument(document);
- //
- }
- }
-
- /**
- * Selection in the workbench has been changed. We
- * can change the state of the 'real' action here
- * if we want, but this can only happen after
- * the delegate has been created.
- * @see IWorkbenchWindowActionDelegate#selectionChanged
- */
- public void selectionChanged(IAction action, ISelection selection) {
- IWorkbenchWindow w = LisaacPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
-
- IWorkbenchPart part = w.getPartService().getActivePart();
- if (part instanceof LisaacEditor) {
- action.setEnabled(true);
- } else {
- action.setEnabled(false);
- }
- }
-
- /**
- * We can use this method to dispose of any system
- * resources we previously allocated.
- * @see IWorkbenchWindowActionDelegate#dispose
- */
- public void dispose() {
- }
-
- /**
- * We will cache window object in order to
- * be able to provide parent shell for the message dialog.
- * @see IWorkbenchWindowActionDelegate#init
- */
- public void init(IWorkbenchWindow window) {
- }
-}
\ No newline at end of file
+package org.eclipse.lisaac.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.lisaac.LisaacPlugin;
+import org.eclipse.lisaac.editors.LisaacEditor;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+
+public class GenerateConstructor implements IWorkbenchWindowActionDelegate {
+
+
+ /**
+ * The action has been activated. The argument of the
+ * method represents the 'real' action sitting
+ * in the workbench UI.
+ * @see IWorkbenchWindowActionDelegate#run
+ */
+ public void run(IAction action) {
+ IWorkbenchWindow w = LisaacPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
+
+ IWorkbenchPart part = w.getPartService().getActivePart();
+ if (part instanceof LisaacEditor) {
+ IDocument document = ((LisaacEditor)part).getDocument();
+ //
+ int caret = ((LisaacEditor)part).getViewer().getTextWidget().getCaretOffset();
+ String constructor = getConstructor();
+ try {
+ document.replace(caret, 0, constructor);
+ } catch (BadLocationException e) {
+ }
+ //
+ }
+ }
+
+ private String getConstructor() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("\n //\n // Creation.\n //\n");
+ buffer.append("\n - create:SELF <-");
+ buffer.append("\n ( + result:SELF;");
+ buffer.append("\n result := clone;");
+ buffer.append("\n result.make;");
+ buffer.append("\n result");
+ buffer.append("\n );");
+ buffer.append("\n");
+ buffer.append("\n - make <-");
+ buffer.append("\n (");
+ buffer.append("\n );");
+ return buffer.toString();
+ }
+
+ /**
+ * Selection in the workbench has been changed. We
+ * can change the state of the 'real' action here
+ * if we want, but this can only happen after
+ * the delegate has been created.
+ * @see IWorkbenchWindowActionDelegate#selectionChanged
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ }
+
+ /**
+ * We will cache window object in order to
+ * be able to provide parent shell for the message dialog.
+ * @see IWorkbenchWindowActionDelegate#init
+ */
+ public void init(IWorkbenchWindow window) {
+ }
+
+ /**
+ * We can use this method to dispose of any system
+ * resources we previously allocated.
+ * @see IWorkbenchWindowActionDelegate#dispose
+ */
+ public void dispose() {
+ }
+}
diff --git a/src/org/eclipse/lisaac/editors/AbstractLisaacEditor.java b/src/org/eclipse/lisaac/editors/AbstractLisaacEditor.java
index 282b32a..7ca9e73 100644
--- a/src/org/eclipse/lisaac/editors/AbstractLisaacEditor.java
+++ b/src/org/eclipse/lisaac/editors/AbstractLisaacEditor.java
@@ -6,6 +6,7 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewerExtension2;
import org.eclipse.jface.text.source.ISourceViewer;
@@ -15,6 +16,7 @@ import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ContentAssistAction;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
diff --git a/src/org/eclipse/lisaac/editors/LisaacCompletionProcessor.java b/src/org/eclipse/lisaac/editors/LisaacCompletionProcessor.java
index 1c30641..54791da 100644
--- a/src/org/eclipse/lisaac/editors/LisaacCompletionProcessor.java
+++ b/src/org/eclipse/lisaac/editors/LisaacCompletionProcessor.java
@@ -12,6 +12,7 @@ import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.lisaac.model.LisaacCompletionParser;
+import org.eclipse.lisaac.templates.LisaacTemplateProcessor;
public class LisaacCompletionProcessor implements IContentAssistProcessor {
@@ -20,15 +21,24 @@ public class LisaacCompletionProcessor implements IContentAssistProcessor {
private final char[] PROPOSAL_ACTIVATION_CHARS = new char[] { '.', '('};
private ICompletionProposal[] NO_COMPLETIONS = new ICompletionProposal[0];
-
+ private LisaacTemplateProcessor templates;
+
+
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
try {
IDocument document = viewer.getDocument();
- ArrayList<CompletionProposal> result = new ArrayList<CompletionProposal>();
+ ArrayList<ICompletionProposal> result = new ArrayList<ICompletionProposal>();
//
computeLisaacCompletion(document, offset, result);
//
+
+ templates = new LisaacTemplateProcessor();
+ ICompletionProposal[] props = templates.computeCompletionProposals(viewer, offset);
+ for (int t=0; t<props.length; t++) {
+ result.add(props[t]);
+ }
+
String prefix = lastWord(document, offset);
if (prefix.startsWith("Sec")) {
@@ -44,7 +54,7 @@ public class LisaacCompletionProcessor implements IContentAssistProcessor {
}
private void computeLisaacCompletion(IDocument document, int baseOffset,
- ArrayList<CompletionProposal> proposals) {
+ ArrayList<ICompletionProposal> proposals) {
int bracketLevel=0;
//
// Rewind to '(' ';' '['
diff --git a/src/org/eclipse/lisaac/editors/LisaacConfiguration.java b/src/org/eclipse/lisaac/editors/LisaacConfiguration.java
index 8dced78..61372eb 100644
--- a/src/org/eclipse/lisaac/editors/LisaacConfiguration.java
+++ b/src/org/eclipse/lisaac/editors/LisaacConfiguration.java
@@ -18,6 +18,7 @@ import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.lisaac.model.LisaacModel;
+import org.eclipse.lisaac.templates.LisaacTemplateProcessor;
/**
* Manage the configuration of syntax coloration for lisaac documents.
diff --git a/src/org/eclipse/lisaac/editors/LisaacPartitionScanner.java b/src/org/eclipse/lisaac/editors/LisaacPartitionScanner.java
index 8cbca3a..5f541c3 100644
--- a/src/org/eclipse/lisaac/editors/LisaacPartitionScanner.java
+++ b/src/org/eclipse/lisaac/editors/LisaacPartitionScanner.java
@@ -22,7 +22,7 @@ public class LisaacPartitionScanner extends RuleBasedPartitionScanner {
rules[1] = new EndOfLineRule("//", comment);
// avoid processing comment inside lisaac strings
- rules[2] = new SingleLineRule("\"", "\"", Token.UNDEFINED, '\0', true);
+ rules[2] = new MultiLineRule("\"", "\"", Token.UNDEFINED, '\0', true);
rules[3] = new SingleLineRule("`", "`", Token.UNDEFINED, '\0', true);
setPredicateRules(rules);
diff --git a/src/org/eclipse/lisaac/editors/LisaacScanner.java b/src/org/eclipse/lisaac/editors/LisaacScanner.java
index 70127a6..bbc622b 100644
--- a/src/org/eclipse/lisaac/editors/LisaacScanner.java
+++ b/src/org/eclipse/lisaac/editors/LisaacScanner.java
@@ -119,7 +119,7 @@ public class LisaacScanner extends RuleBasedScanner {
IRule[] rules = new IRule[8];
// Add rule for processing strings
- rules[0] = new SingleLineRule("\"", "\"", stringToken, '\0', true);// double
+ rules[0] = new MultiLineRule("\"", "\"", stringToken, '\0', true);// double
// quotes
rules[1] = new SingleLineRule("'", "'", characterToken, '\0', true);// simple
// quotes
diff --git a/src/org/eclipse/lisaac/model/LisaacCompletionParser.java b/src/org/eclipse/lisaac/model/LisaacCompletionParser.java
index be5343f..a603e63 100644
--- a/src/org/eclipse/lisaac/model/LisaacCompletionParser.java
+++ b/src/org/eclipse/lisaac/model/LisaacCompletionParser.java
@@ -10,6 +10,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.text.contentassist.CompletionProposal;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.lisaac.LisaacPlugin;
import org.eclipse.lisaac.builder.ILisaacErrorHandler;
import org.eclipse.lisaac.editors.LisaacEditor;
@@ -38,7 +39,7 @@ public class LisaacCompletionParser extends LisaacParser {
* @param proposals list of proposals to be filled
* @throws CoreException
*/
- public void parseCompletions(int startOffset, int baseOffset, ArrayList<CompletionProposal> proposals)
+ public void parseCompletions(int startOffset, int baseOffset, ArrayList<ICompletionProposal> proposals)
throws CoreException {
IType type;
diff --git a/src/org/eclipse/lisaac/model/items/Prototype.java b/src/org/eclipse/lisaac/model/items/Prototype.java
index eb35a8d..0f42adf 100644
--- a/src/org/eclipse/lisaac/model/items/Prototype.java
+++ b/src/org/eclipse/lisaac/model/items/Prototype.java
@@ -8,6 +8,7 @@ import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.contentassist.CompletionProposal;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.lisaac.model.ILisaacModel;
import org.eclipse.lisaac.model.LisaacCompletionParser;
import org.eclipse.lisaac.model.LisaacParser;
@@ -70,9 +71,9 @@ public class Prototype {
public void addHeaderData(String slotName, String data) {
if (headerData == null) {
- headerData = data;
+ headerData = "<br>- "+slotName+" := "+data;
} else {
- this.headerData += "- "+slotName+" := "+data;
+ this.headerData += "<br>- "+slotName+" := "+data;
}
}
@@ -192,7 +193,7 @@ public class Prototype {
return null;
}
- public void lookupSlotMatch(String n, ArrayList<CompletionProposal> matchList, int offset, int length) {
+ public void lookupSlotMatch(String n, ArrayList<ICompletionProposal> matchList, int offset, int length) {
//
// Search in 'Self'.
//
@@ -217,7 +218,7 @@ public class Prototype {
}
}
- public void getSlotMatch(String n, ArrayList<CompletionProposal> matchList, int offset, int length) {
+ public void getSlotMatch(String n, ArrayList<ICompletionProposal> matchList, int offset, int length) {
//
// Search in 'Self' only.
//
@@ -231,7 +232,7 @@ public class Prototype {
}
}
- public void getParentSlotMatch(String n, ArrayList<CompletionProposal> matchList, int offset, int length) {
+ public void getParentSlotMatch(String n, ArrayList<ICompletionProposal> matchList, int offset, int length) {
// Search in 'Self' parent.
Collection<Slot> values = parentList.values();
Iterator<Slot> it = values.iterator() ;
@@ -279,7 +280,7 @@ public class Prototype {
return result;
}
- public void getSlotProposals(ArrayList<CompletionProposal> proposals,
+ public void getSlotProposals(ArrayList<ICompletionProposal> proposals,
int offset, int length) {
Collection<Slot> values = slotList.values() ;
Iterator<Slot> it = values.iterator() ;
diff --git a/src/org/eclipse/lisaac/model/items/Slot.java b/src/org/eclipse/lisaac/model/items/Slot.java
index 7afcef6..2cec93f 100644
--- a/src/org/eclipse/lisaac/model/items/Slot.java
+++ b/src/org/eclipse/lisaac/model/items/Slot.java
@@ -5,6 +5,7 @@ import java.util.Collection;
import java.util.Iterator;
import org.eclipse.jface.text.contentassist.CompletionProposal;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.lisaac.model.ILisaacModel;
import org.eclipse.lisaac.model.Position;
import org.eclipse.lisaac.model.types.IType;
@@ -178,18 +179,18 @@ public class Slot {
return buffer.toString();
}
- public void getSlotProposals(ArrayList<CompletionProposal> proposals,
+ public void getSlotProposals(ArrayList<ICompletionProposal> proposals,
int offset, int length) {
Image image = new OutlineSlot(this).getImage();
String displayString = getSignature(true);
proposals.add(new CompletionProposal(displayString,
- offset, length, displayString.length(), image,
+ offset, length, displayString.length()-1, image,
getSignature(false), null, null));
}
- public void getSlotMatchProposals(ArrayList<CompletionProposal> proposals,
+ public void getSlotMatchProposals(ArrayList<ICompletionProposal> proposals,
int offset, int length, int matchLength) {
Image image = new OutlineSlot(this).getImage();
diff --git a/src/org/eclipse/lisaac/preferences/LisaacPreferencePage.java b/src/org/eclipse/lisaac/preferences/LisaacPreferencePage.java
index b017432..c12f236 100644
--- a/src/org/eclipse/lisaac/preferences/LisaacPreferencePage.java
+++ b/src/org/eclipse/lisaac/preferences/LisaacPreferencePage.java
@@ -36,6 +36,9 @@ public class LisaacPreferencePage
* restore itself.
*/
public void createFieldEditors() {
+ addField(new StringFieldEditor(PreferenceConstants.P_LISAAC_USER,
+ "&Your name :", getFieldEditorParent()));
+
//addField(new DirectoryFieldEditor(PreferenceConstants.P_LISAAC_PATH,
// "&Lisaac Environment Directory:", getFieldEditorParent()));
/*addField(
diff --git a/src/org/eclipse/lisaac/preferences/LisaacTemplatePage.java b/src/org/eclipse/lisaac/preferences/LisaacTemplatePage.java
new file mode 100644
index 0000000..a1b032e
--- /dev/null
+++ b/src/org/eclipse/lisaac/preferences/LisaacTemplatePage.java
@@ -0,0 +1,25 @@
+package org.eclipse.lisaac.preferences;
+
+
+import org.eclipse.lisaac.LisaacPlugin;
+import org.eclipse.ui.texteditor.templates.TemplatePreferencePage;
+
+
+public class LisaacTemplatePage extends TemplatePreferencePage {
+ public LisaacTemplatePage() {
+ setPreferenceStore(LisaacPlugin.getDefault().getPreferenceStore());
+ setTemplateStore(LisaacPlugin.getDefault().getTemplateStore());
+ setContextTypeRegistry(LisaacPlugin.getDefault().getContextTypeRegistry());
+ }
+
+ protected boolean isShowFormatterSetting() {
+ return true;
+ }
+
+ public boolean performOk() {
+ boolean ok = super.performOk();
+
+ LisaacPlugin.getDefault().savePluginPreferences();
+ return ok;
+ }
+}
diff --git a/src/org/eclipse/lisaac/preferences/PreferenceConstants.java b/src/org/eclipse/lisaac/preferences/PreferenceConstants.java
index 46013e6..86f0eeb 100644
--- a/src/org/eclipse/lisaac/preferences/PreferenceConstants.java
+++ b/src/org/eclipse/lisaac/preferences/PreferenceConstants.java
@@ -6,5 +6,5 @@ package org.eclipse.lisaac.preferences;
public class PreferenceConstants {
public static final String P_LISAAC_PATH = "";
-
+ public static final String P_LISAAC_USER = "";
}
diff --git a/src/org/eclipse/lisaac/templates/LisaacContextType.java b/src/org/eclipse/lisaac/templates/LisaacContextType.java
new file mode 100644
index 0000000..4bd76f0
--- /dev/null
+++ b/src/org/eclipse/lisaac/templates/LisaacContextType.java
@@ -0,0 +1,28 @@
+package org.eclipse.lisaac.templates;
+
+import org.eclipse.jface.text.templates.GlobalTemplateVariables;
+import org.eclipse.jface.text.templates.TemplateContextType;
+
+public class LisaacContextType extends TemplateContextType {
+ /** This context's id */
+ public static final String ID_CONTEXT_TYPE= "org.eclipse.lisaac.contexttype"; //$NON-NLS-1$
+
+ /**
+ * Creates a new Lisaac context type.
+ */
+ public LisaacContextType() {
+ addGlobalResolvers();
+ }
+
+ private void addGlobalResolvers() {
+ addResolver(new GlobalTemplateVariables.Cursor());
+ addResolver(new GlobalTemplateVariables.WordSelection());
+ addResolver(new GlobalTemplateVariables.LineSelection());
+ addResolver(new GlobalTemplateVariables.Dollar());
+ addResolver(new GlobalTemplateVariables.Date());
+ addResolver(new GlobalTemplateVariables.Year());
+ addResolver(new GlobalTemplateVariables.Time());
+ addResolver(new GlobalTemplateVariables.User());
+ }
+
+}
diff --git a/src/org/eclipse/lisaac/templates/LisaacTemplateProcessor.java b/src/org/eclipse/lisaac/templates/LisaacTemplateProcessor.java
new file mode 100644
index 0000000..5bbed9d
--- /dev/null
+++ b/src/org/eclipse/lisaac/templates/LisaacTemplateProcessor.java
@@ -0,0 +1,51 @@
+package org.eclipse.lisaac.templates;
+
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.templates.Template;
+import org.eclipse.jface.text.templates.TemplateCompletionProcessor;
+import org.eclipse.jface.text.templates.TemplateContextType;
+import org.eclipse.lisaac.LisaacPlugin;
+import org.eclipse.swt.graphics.Image;
+
+public class LisaacTemplateProcessor extends TemplateCompletionProcessor {
+
+
+ /**
+ * Simply return all templates.
+ *
+ * @param contextTypeId the context type, ignored in this implementation
+ * @return all templates
+ */
+ protected Template[] getTemplates(String contextTypeId) {
+ return LisaacPlugin.getDefault().getTemplateStore().getTemplates();
+ }
+
+ /**
+ * Return the XML context type that is supported by this plug-in.
+ *
+ * @param viewer the viewer, ignored in this implementation
+ * @param region the region, ignored in this implementation
+ * @return the supported XML context type
+ */
+ protected TemplateContextType getContextType(ITextViewer viewer, IRegion region) {
+ return LisaacPlugin.getDefault().getContextTypeRegistry().getContextType(LisaacContextType.ID_CONTEXT_TYPE);
+ }
+
+ /**
+ * Always return the default image.
+ *
+ * @param template the template, ignored in this implementation
+ * @return the default template image
+ */
+ protected Image getImage(Template template) {
+ ImageDescriptor descr = LisaacPlugin.getImageDescriptor("icons/template.gif");
+ return descr.createImage();
+ }
+
+}
diff --git a/src/org/eclipse/lisaac/templates/LisaacVariableResolver.java b/src/org/eclipse/lisaac/templates/LisaacVariableResolver.java
new file mode 100644
index 0000000..764edd0
--- /dev/null
+++ b/src/org/eclipse/lisaac/templates/LisaacVariableResolver.java
@@ -0,0 +1,13 @@
+package org.eclipse.lisaac.templates;
+
+import org.eclipse.jface.text.templates.TemplateContext;
+import org.eclipse.jface.text.templates.TemplateVariableResolver;
+
+public class LisaacVariableResolver extends TemplateVariableResolver {
+
+ //
+ // add Lisaac variable here
+ //
+
+ // TODO override resolve() & resolveAll() method
+}
diff --git a/src/org/eclipse/lisaac/wizards/NewPrototypeWizard.java b/src/org/eclipse/lisaac/wizards/NewPrototypeWizard.java
index 34e4191..5e8ebc3 100644
--- a/src/org/eclipse/lisaac/wizards/NewPrototypeWizard.java
+++ b/src/org/eclipse/lisaac/wizards/NewPrototypeWizard.java
@@ -2,7 +2,9 @@ package org.eclipse.lisaac.wizards;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.lisaac.LisaacPlugin;
import org.eclipse.lisaac.model.ILisaacModel;
+import org.eclipse.lisaac.preferences.PreferenceConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
@@ -95,6 +97,12 @@ class NewPrototypeWizardPage extends AbstractNewFileWizardPage {
if (descr != null && descr.length() > 0) {
contents += " - comment := \""+descr+"\";\n";
}
+
+ String username = LisaacPlugin.getDefault().getPreferenceStore().getString(PreferenceConstants.P_LISAAC_USER);
+ if (username != null && username.length() > 0) {
+ contents += "\n - author := \""+username+"\";\n";
+ }
+
if (! isExpanded) {
contents += "\nSection Inherit\n\n";
} else {
--
Lisaac eclipse plugin
More information about the Lisaac-commits
mailing list