|
锁定老贴子 主题:一步一步,跟我做插件!
该帖已经被评为精华帖
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-09-07
本贴是写一个Eclipse3.0下的一个插件开发,
其实都是些很容易的东东, 只不过别人都不爱写罢了, 偶也是随手乱画几笔, 请不要见笑, 首先,声明一下, 在Eclipse3.0下开发插件,如果是简单的插件, 写的代码很少,很少, 如果是功能很全的, 那么,要用到的知识会很多, 你也不要问我, 我JAVA水平很差的, :) 好!开始! 起飞了! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
建工程,
如图, 选中,编辑器类的插件, 这个插件主要是生成的代码多, 写的少! 如果还不知道这两个图是怎么出来的, 那么,显然你的水平,比你还稍有不足, 应该不学写插件, 而学学使用插件, |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
生成的工程如图所示,
偶起的工程名为,JSPedit 想编辑JSP文件, 只对JSP文件,加个语法加亮的功能, 至少,.就能弹出类的方法的这种插件,偶是一辈子都做不来的, 你可以,按偶的这个方法,写JS 的插件,CSS的插件,VM的插件, 。。。。。。 或者把这些个插件,都写成一个插件, 。。。HOHO 值的注意的是, JSPedit 下面,有一个文件, 这个可是个入口的东东, 不能没有, 在edit 下面,有12个文件, 数好了, 下面,我们就在这上面,进行改动了, 如果这一步还没完成的话, 请参考,网上的那个,helloWorld插件的例子, 如eclipse的帮助 ,或找个人问问, 但别问偶, :) |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
插件主文件,
看到了吧, 事件的东东,基本全在这里呢, 别以为偶比你看懂了多少东西, 偶也那么回事, 不过,这回这个文件,不用修改 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
打开这个文件,
如图: 嘿嘿,小加一些语法 [code:1] package jspedit.editors; import org.eclipse.jface.text.rules.*; public class XMLPartitionScanner extends RuleBasedPartitionScanner { public final static String XML_DEFAULT = "__xml_default"; public final static String XML_COMMENT = "__xml_comment"; public final static String XML_TAG = "__xml_tag"; public final static String JSP_HEADER_TAG = "__jsp_header_tag"; public final static String JSP_COMMENT_TAG = "__jsp_comment_tag"; public final static String JSP_TAG = "__jsp_tag"; public final static String JSP_OUT_TAG = "__jsp_out_tag"; public XMLPartitionScanner() { IToken xmlComment = new Token(XML_COMMENT); IToken tag = new Token(XML_TAG); IToken jspHeaderTag = new Token(JSP_HEADER_TAG); IToken jspCommentTag = new Token(JSP_COMMENT_TAG); IToken jspTag = new Token(JSP_TAG); IToken jspOutTag = new Token(JSP_OUT_TAG); IPredicateRule[] rules = new IPredicateRule[12]; rules[0] = new MultiLineRule("<!--", "-->", xmlComment); rules[1] = new MultiLineRule("<%--", "--%>", jspCommentTag); rules[2] = new MultiLineRule("<%@", "%>", jspHeaderTag); rules[3] = new MultiLineRule("<%=", "%>", jspOutTag); rules[4] = new MultiLineRule("<%", "%>", jspTag); rules[5] = new MultiLineRule("<html:", ">", jspTag); rules[6] = new MultiLineRule("<logic:", ">", jspTag); rules[7] = new MultiLineRule("<bean:", ">", jspTag); rules[8] = new MultiLineRule("</html:", ">", jspTag); rules[9] = new MultiLineRule("</logic:", ">", jspTag); rules[10] = new MultiLineRule("</bean:", ">", jspTag); rules[11] = new TagRule(tag); setPredicateRules(rules); } } [/code:1] |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
我最烦人的就是,那个双击事件,
一点子选中一行, 偶喜欢,JAVA的那种,在。号分开的, 那么,小改一下,这个文件, 当然,你也可以不改的, 没多大关系 [code:1] package jspedit.editors; import org.eclipse.jface.text.*; public class XMLDoubleClickStrategy implements ITextDoubleClickStrategy { protected ITextViewer fText; public void doubleClicked(ITextViewer part) { int pos = part.getSelectedRange().x; if (pos < 0) return; fText = part; if (!selectComment(pos)) { selectWord(pos); } } protected boolean selectComment(int caretPos) { IDocument doc = fText.getDocument(); int startPos, endPos; try { int pos = caretPos; char c = ' '; while (pos >= 0) { c = doc.getChar(pos); if (c == '\\') { pos -= 2; continue; } if (c == Character.LINE_SEPARATOR || c == '\"' || c=='.' || c==' ') break; --pos; } if (c != '\"') return false; startPos = pos; pos = caretPos; int length = doc.getLength(); c = ' '; while (pos < length) { c = doc.getChar(pos); if (c == Character.LINE_SEPARATOR || c == '\"'|| c=='.' || c==' ') break; ++pos; } if (c != '\"') return false; endPos = pos; int offset = startPos + 1; int len = endPos - offset; fText.setSelectedRange(offset, len); return true; } catch (BadLocationException x) { } return false; } protected boolean selectWord(int caretPos) { IDocument doc = fText.getDocument(); int startPos, endPos; try { int pos = caretPos; char c; while (pos >= 0) { c = doc.getChar(pos); if (!Character.isJavaIdentifierPart(c)) break; --pos; } startPos = pos; pos = caretPos; int length = doc.getLength(); while (pos < length) { c = doc.getChar(pos); if (!Character.isJavaIdentifierPart(c)) break; ++pos; } endPos = pos; selectRange(startPos, endPos); return true; } catch (BadLocationException x) { } return false; } private void selectRange(int startPos, int stopPos) { int offset = startPos + 1; int length = stopPos - offset; fText.setSelectedRange(offset, length); } } [/code:1] 看清楚了, 就是加了一个‘。’字符的东东, 让他也做为一个词的分割符, |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
好,到这里,这个插件,基本完成任务了,
找一个漂亮的图标文件, 改一下,plugin.xml [code:1] extensions="jsp" icon="icons/key.gif" [/code:1] 嘿嘿,可以发布了 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
[code:1]
<extension id="dearmite jsp editor" name="dearmite jsp editor" point="org.eclipse.ui.editors"> <editor name="dearmite jsp Editor" extensions="jsp" icon="icons/key.gif" contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor" class="jspedit.editors.XMLEditor" id="jspedit.editors.XMLEditor"> </editor> </extension> [/code:1] 这是偶的插件的文件里面的东东, 你可以通过这个图形化的东东来修改这个, 也可以把偶的COPY过去, |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
看到,这图的那个小手,
放在哪里没??? 这个功能就是发布插件的功能, 上面的那个BUILD configure当然是发布的选项了, 把工程的所有东东全选上, 其实不用改的,全选上,是把SRC目录也选上, 支持开源!!!! |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-07
午休了,吃饭了,
下午写语法加亮的东东, BYE |
|
| 返回顶楼 | |



