Hi all, I could not withold this...
Bioclipse [1] has a Jmol plugin... it was one of the first... Bioclipse is a chemo/bio-informatics workbench based on the RichClientPlatform used by Eclipse. Now, Ola has written a text editor for Jmol scripts... with syntax highlighting *and* code completion... Hope we get to see a screenshot soon! If you want to give it a go: it should be fairly easy to set up for those who already use Eclipse with the SVN plugin... Bioclipse uses the same environment. Since there is quite some overlap between Jmol/CDK/Bioclipse, developers who know about the Bioclipse SVN are often online at #cdk at irc.freenode.net. Egon 1.http://www.bioclipse.net/ ---------- Forwarded Message ---------- Subject: [Bioclipse-commit] SF.net SVN: bioclipse: [304] trunk/bc_jmol Date: Thursday 02 March 2006 16:18 From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Revision: 304 Author: ospjuth Date: 2006-03-02 07:17:55 -0800 (Thu, 02 Mar 2006) ViewCVS: http://svn.sourceforge.net/bioclipse/?rev=304&view=rev Log Message: ----------- Added a script editor for Jmol with basic syntax highlighing and code completion Modified Paths: -------------- trunk/bc_jmol/META-INF/MANIFEST.MF trunk/bc_jmol/plugin.xml Added Paths: ----------- trunk/bc_jmol/src/net/bioclipse/editors/ trunk/bc_jmol/src/net/bioclipse/editors/jmol/ trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolCompletionProcessor.java trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolEditor.java trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolRuleScanner.java trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolSourceViewerConfig.java Modified: trunk/bc_jmol/META-INF/MANIFEST.MF =================================================================== --- trunk/bc_jmol/META-INF/MANIFEST.MF 2006-03-02 14:59:40 UTC (rev 303) +++ trunk/bc_jmol/META-INF/MANIFEST.MF 2006-03-02 15:17:55 UTC (rev 304) @@ -10,7 +10,9 @@ net.bioclipse, net.bioclipse.plugins.bc_cdk, com.tools.logging, - org.eclipse.ui.views + org.eclipse.ui.views, + org.eclipse.jface.text, + org.eclipse.ui.workbench.texteditor Eclipse-AutoStart: true Bundle-ClassPath: bc_jmol.jar, jars/, Modified: trunk/bc_jmol/plugin.xml =================================================================== --- trunk/bc_jmol/plugin.xml 2006-03-02 14:59:40 UTC (rev 303) +++ trunk/bc_jmol/plugin.xml 2006-03-02 15:17:55 UTC (rev 304) @@ -30,7 +30,20 @@ </view> </extension> +<extension + point="org.eclipse.ui.editors"> + <editor + id="net.bioclipse.editors.jmol.JmolEditor" + name="JmolEditor" + icon="icons/sample.gif" + extensions="spt,scr" + contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor " + class="net.bioclipse.editors.jmol.JmolEditor"> + </editor> +</extension> + + <extension point="org.eclipse.ui.actionSets"> <actionSet Added: trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolCompletionProcessor.java =================================================================== --- trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolCompletionProcessor.java (rev 0) +++ trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolCompletionProcessor.java 20 06-03-02 15:17:55 UTC (rev 304) @@ -0,0 +1,101 @@ +package net.bioclipse.editors.jmol; + +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.contentassist.CompletionProposal; +import org.eclipse.jface.text.contentassist.ICompletionProposal; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.text.contentassist.IContextInformation; +import org.eclipse.jface.text.contentassist.IContextInformationValidator; + +public class JmolCompletionProcessor implements IContentAssistProcessor { + + /* (non-Javadoc) + * Method declared on IContentAssistProcessor + */ + public ICompletionProposal[] computeCompletionProposals( + ITextViewer viewer, + int documentOffset) { + + try { + + int myOffset; + if (documentOffset-10<0) + myOffset=0; + else + myOffset=documentOffset-10; + + String startStr = viewer.getDocument().get(myOffset,10); +// System.out.println("s: " + startStr); + + int myLastIndex; + if (startStr.lastIndexOf(" ") < startStr.lastIndexOf("\n")) + myLastIndex=startStr.lastIndexOf("\n"); + else + myLastIndex=startStr.lastIndexOf(" "); + + String searchStr=startStr.substring(myLastIndex+1); + + System.out.println("To validate against: " + searchStr); + + //Look up all that starts with this startStr + String[] lookedUp=JmolEditor.lookUpNames(searchStr); + + ICompletionProposal[] result = + new ICompletionProposal[lookedUp.length]; + for (int i = 0; i < lookedUp.length; i++) { + result[i] = new CompletionProposal(lookedUp[i], + documentOffset-searchStr.length(), searchStr.length(), lookedUp[i].length()); + } + + return result; + + + } catch (BadLocationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return null; + } + + /* (non-Javadoc) + * Method declared on IContentAssistProcessor + */ + public char[] getCompletionProposalAutoActivationCharacters() { + return new char[] { '\n', ' ' }; +// return null; + } + + /* (non-Javadoc) + * Method declared on IContentAssistProcessor + */ + public char[] getContextInformationAutoActivationCharacters() { + return null; + } + + // For Context information + /* (non-Javadoc) + * Method declared on IContentAssistProcessor + */ + public IContextInformationValidator getContextInformationValidator() { + return null; + } + + /* (non-Javadoc) + * Method declared on IContentAssistProcessor + */ + public IContextInformation[] computeContextInformation( + ITextViewer viewer, + int documentOffset) { + + return null; + } + + /* (non-Javadoc) + * Method declared on IContentAssistProcessor + */ + public String getErrorMessage() { + return null; + } +} Added: trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolEditor.java =================================================================== --- trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolEditor.java (rev 0) +++ trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolEditor.java 2006-03-02 15:17:55 UTC (rev 304) @@ -0,0 +1,199 @@ +package net.bioclipse.editors.jmol; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + + + +import net.bioclipse.editors.SimpleEditor; + + +/** + * Add jmol syntax completion and coloring + */ +public class JmolEditor extends SimpleEditor { + + protected final static String[] jmolProposals = { + "select", + "rotate", + "all", + "animation", + "anim", + "console", + "measure", + "monitor", + "select", + "ssbonds", + "atom", + "expressions", + "define", + "meshribbon", + "set", + "bond", + "styles", + "star", + "backbone", + "delay", + "model", + "set", + "stereo", + "background", + "depth", + "move", + "set", + "strands", + "bondorder", + "dots", + "moveto", + "set", + "lighting", + "perspective", + "trace", + "cartoon", + "cartoons", + "echo", + "pmesh", + "set", + "translate", + "center", + "centre", + "exit", + "polyhedra", + "set", + "chainCaseSensitive", + "vector", + "vectors", + "centerAt", + "font", + "quit", + "debugScript", + "vibration", + "color", + "colour", + "frame", + "refresh", + "measurement", + "wireframe", + "hbonds", + "reset", + "picking", + "zap", + "hover", + "restrict", + "spin", + "zoom", + "isosurface", + "ribbon", + "ribbons", + "show", + "label", + "labels", + "rocket ", + "rockets", + "slab", + "comment", + "load", + "rotate", + "spacefill", + "connect", + "loop", + "script ", + "source", + "spin" + }; + + + protected static String[] subStrings; + + protected static ArrayList startList; + protected static ArrayList fullList; + + + /** + * Constructor + * + */ + public JmolEditor() + { + super(); + computeSubStrings(); + setSourceViewerConfiguration(new JmolSourceViewerConfig()); + } + + + public static String[] getSubStrings() { + return subStrings; + } + public static String[] getJmolProposals() { + return jmolProposals; + } + + /** + * Compute all substrings of the proposals + */ + private void computeSubStrings() { + + startList=new ArrayList(); + fullList=new ArrayList(); + + //All words + for (int i=0;i<jmolProposals.length;i++){ + + String name=jmolProposals[i]; + + //This word + for (int j=1;j<name.length();j++){ + String startAdd=name.substring(0,j); + String endAdd=name.substring(j,name.length()); + startList.add(startAdd); + fullList.add(name); + + } + + } + + System.out.println("=============="); + subStrings=new String[startList.size()]; + for (int i=0; i< fullList.size();i++){ + System.out.println(startList.get(i) + " - " + fullList.get(i)); + subStrings[i]=(String)startList.get(i); + } + System.out.println("=============="); + + + } + + @SuppressWarnings("unchecked") + public static String[] lookUpNames(String start){ + + //Temp list + ArrayList lst=new ArrayList(); + + //Look through all in startlist and add matching names to ret + for (int i=0; i< startList.size();i++){ + String thisStart = (String)startList.get(i); + if (thisStart.startsWith(start)){ + if (!(lst.contains(fullList.get(i)))) + lst.add(fullList.get(i)); + } + } + + Collections.sort(lst); + + //Convert list to array of strings + String[] ret=new String[lst.size()]; + for (int i=0; i< lst.size();i++){ + ret[i]=(String)lst.get(i); + } + + return ret; + } + + + + + +} + Added: trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolRuleScanner.java =================================================================== --- trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolRuleScanner.java (rev 0) +++ trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolRuleScanner.java 2006-03-02 15:17:55 UTC (rev 304) @@ -0,0 +1,33 @@ +package net.bioclipse.editors.jmol; + +import org.eclipse.jface.text.TextAttribute; +import org.eclipse.jface.text.rules.EndOfLineRule; +import org.eclipse.jface.text.rules.IRule; +import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.MultiLineRule; +import org.eclipse.jface.text.rules.RuleBasedScanner; +import org.eclipse.jface.text.rules.SingleLineRule; +import org.eclipse.jface.text.rules.Token; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.widgets.Display; + +public class JmolRuleScanner extends RuleBasedScanner { + private static Color TAG_COLOR= new Color(Display.getCurrent(), new RGB(200, 0, 0)); + private static Color COMMENT_COLOR= new Color(Display.getCurrent(), new RGB(0, 200, 0)); + + public JmolRuleScanner() { + IToken tagToken = + new Token( + new TextAttribute(TAG_COLOR)); + + IToken commentToken= new Token(new TextAttribute(COMMENT_COLOR)); + + IRule[] rules = new IRule[2]; + //Add rule for processing instructions + + rules[0] = new SingleLineRule("selec", "elect", tagToken); + rules[1] = (new EndOfLineRule("#", commentToken)); //$NON-NLS-1$ + setRules(rules); + } +} Added: trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolSourceViewerConfig.java =================================================================== --- trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolSourceViewerConfig.java (rev 0) +++ trunk/bc_jmol/src/net/bioclipse/editors/jmol/JmolSourceViewerConfig.java 200 6-03-02 15:17:55 UTC (rev 304) @@ -0,0 +1,60 @@ +package net.bioclipse.editors.jmol; + +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.TextAttribute; +import org.eclipse.jface.text.contentassist.ContentAssistant; +import org.eclipse.jface.text.contentassist.IContentAssistant; +import org.eclipse.jface.text.presentation.IPresentationReconciler; +import org.eclipse.jface.text.presentation.PresentationReconciler; +import org.eclipse.jface.text.rules.DefaultDamagerRepairer; +import org.eclipse.jface.text.rules.Token; +import org.eclipse.jface.text.source.ISourceViewer; +import org.eclipse.jface.text.source.SourceViewerConfiguration; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.widgets.Display; + +public class JmolSourceViewerConfig extends SourceViewerConfiguration { + private JmolRuleScanner scanner; + private static Color DEFAULT_TAG_COLOR = + new Color(Display.getCurrent(), new RGB(0, 0, 200)); + + public JmolSourceViewerConfig() { + + } + + protected JmolRuleScanner getTagScanner() { + if (scanner == null) { + scanner = new JmolRuleScanner(); + scanner.setDefaultReturnToken( + new Token(new TextAttribute(DEFAULT_TAG_COLOR))); + } + return scanner; + } + + /** + * Define reconciler for MyEditor + */ + public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { + PresentationReconciler reconciler = new PresentationReconciler(); + DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getTagScanner()); + reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); + reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); + return reconciler; + } + + public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { + + ContentAssistant assistant = new ContentAssistant(); + assistant.setContentAssistProcessor( + new JmolCompletionProcessor(), + IDocument.DEFAULT_CONTENT_TYPE); + + assistant.enableAutoActivation(true); + assistant.enableAutoInsert(true); + assistant.setAutoActivationDelay(500); + assistant.setProposalPopupOrientation( + IContentAssistant.PROPOSAL_OVERLAY); + return assistant; + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ Bioclipse-commit mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/bioclipse-commit ------------------------------------------------------- -- [EMAIL PROTECTED] PhD student on Molecular Representation in Chemometrics Radboud University Nijmegen Blog: http://chem-bla-ics.blogspot.com/ http://www.cac.science.ru.nl/people/egonw/ GPG: 1024D/D6336BA6 ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ Jmol-developers mailing list Jmol-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-developers