<td>open-line</td>\r
<td>C-o</td>\r
</tr>\r
+\r
+<tr>\r
+<td>upcase-word</td>\r
+<td>M-u</td>\r
+</tr>\r
+<tr>\r
+<td>downcase-word</td>\r
+<td>M-l</td>\r
+</tr>\r
+<tr>\r
+<td>capitalize-word</td>\r
+<td>M-c</td>\r
+</tr>\r
</table>\r
\r
<h2>Change Log</h2>\r
+<h3>2009.7.28</h3>\r
+<ul>\r
+<li>Fix rectangle action.</li>\r
+<li>Add the followings.\r
+<ul>\r
+<li>upcase-word</li>\r
+<li>downcase-word</li>\r
+<li>capitalize-word</li>\r
+</ul>\r
+</li>\r
+<li>Release 1.1.0</li>\r
+</ul>\r
<h3>2009.6.14</h3>\r
<ul>\r
<li>Release 1.0.0</li>\r
id="jp.sourceforge.moreemacs.OpenLine"\r
name="open-line">\r
</command>\r
+ <command\r
+ categoryId="jp.sourceforge.moreemacs.category"\r
+ id="jp.sourceforge.moreemacs.UpcaseWord"\r
+ name="upcase-word">\r
+ </command>\r
+ <command\r
+ categoryId="jp.sourceforge.moreemacs.category"\r
+ id="jp.sourceforge.moreemacs.DowncaseWord"\r
+ name="downcase-word">\r
+ </command>\r
+ <command\r
+ categoryId="jp.sourceforge.moreemacs.category"\r
+ id="jp.sourceforge.moreemacs.CapitalizeWord"\r
+ name="capitalize-word">\r
+ </command>\r
</extension>\r
\r
<extension\r
class="jp.sourceforge.moreemacs.handlers.CommandHandler">\r
</class>\r
</handler>\r
+ <handler\r
+ commandId="jp.sourceforge.moreemacs.UpcaseWord">\r
+ <class\r
+ class="jp.sourceforge.moreemacs.handlers.CommandHandler">\r
+ </class>\r
+ </handler>\r
+ <handler\r
+ commandId="jp.sourceforge.moreemacs.DowncaseWord">\r
+ <class\r
+ class="jp.sourceforge.moreemacs.handlers.CommandHandler">\r
+ </class>\r
+ </handler>\r
+ <handler\r
+ commandId="jp.sourceforge.moreemacs.CapitalizeWord">\r
+ <class\r
+ class="jp.sourceforge.moreemacs.handlers.CommandHandler">\r
+ </class>\r
+ </handler>\r
\r
</extension>\r
\r
schemeId="jp.sourceforge.moreemacs.moreEmacsAcceleratorConfiguration"\r
sequence="M1+X R Y">\r
</key>\r
+ <key\r
+ commandId="jp.sourceforge.moreemacs.UpcaseWord"\r
+ contextId="org.eclipse.ui.textEditorScope"\r
+ schemeId="jp.sourceforge.moreemacs.moreEmacsAcceleratorConfiguration"\r
+ sequence="M3+U">\r
+ </key>\r
+ <key\r
+ commandId="jp.sourceforge.moreemacs.DowncaseWord"\r
+ contextId="org.eclipse.ui.textEditorScope"\r
+ schemeId="jp.sourceforge.moreemacs.moreEmacsAcceleratorConfiguration"\r
+ sequence="M3+L">\r
+ </key>\r
+ <key\r
+ commandId="jp.sourceforge.moreemacs.CapitalizeWord"\r
+ contextId="org.eclipse.ui.textEditorScope"\r
+ schemeId="jp.sourceforge.moreemacs.moreEmacsAcceleratorConfiguration"\r
+ sequence="M3+C">\r
+ </key>\r
</extension>\r
\r
</plugin>\r
\r
public final class BackwardKillWordExecution extends TextEditorExecution {\r
\r
- @Override\r
- public void execute()throws BadLocationException {\r
+ @Override\r
+ public void execute()throws BadLocationException {\r
if(!textEditor.isEditable()) {\r
return;\r
}\r
-\r
- int current = cursor.offset();\r
- int previous = BackwardWordExecution.getPreviousWordPosition(doc, current);\r
- String word = doc.get(previous, current - previous);\r
- Clipboard c = new Clipboard(window.getShell().getDisplay());\r
- c.setContents(new String[] { word },\r
- new Transfer[] { TextTransfer.getInstance() });\r
- doc.replace(previous, current - previous, "");\r
-\r
- }\r
+ \r
+ int current = cursor.offset();\r
+ int previous = BackwardWordExecution.getPreviousWordPosition(doc, current);\r
+ String word = doc.get(previous, current - previous);\r
+ Clipboard c = new Clipboard(window.getShell().getDisplay());\r
+ c.setContents(new String[] { word },\r
+ new Transfer[] { TextTransfer.getInstance() });\r
+ doc.replace(previous, current - previous, "");\r
+ \r
+ }\r
}\r
--- /dev/null
+package jp.sourceforge.moreemacs.handlers;\r
+\r
+import jp.sourceforge.moreemacs.utils.CodePointIterator;\r
+\r
+\r
+public final class CapitalizeWordExecution extends ConvertWordExecution {\r
+ @Override\r
+ protected String convert(String word) {\r
+ StringBuilder builder = new StringBuilder();\r
+ for(CodePointIterator itr = new CodePointIterator(word); itr.hasNext(); ) {\r
+ int cp = itr.next();\r
+ \r
+ if(!Character.isLetter(cp)) {\r
+ builder.appendCodePoint(cp);\r
+ continue;\r
+ }\r
+\r
+ builder.appendCodePoint(Character.toUpperCase(cp));\r
+ if(itr.hasNext()) {\r
+ builder.append(word.substring(itr.index()).toLowerCase());\r
+ }\r
+ break;\r
+ }\r
+ return builder.toString();\r
+ }\r
+}\r
+\r
--- /dev/null
+package jp.sourceforge.moreemacs.handlers;\r
+\r
+import org.eclipse.jface.text.BadLocationException;\r
+\r
+public abstract class ConvertWordExecution extends TextEditorExecution {\r
+\r
+ @Override\r
+ public void execute() throws BadLocationException {\r
+ if(!textEditor.isEditable()) {\r
+ return;\r
+ }\r
+ \r
+ int current = cursor.offset();\r
+ int next = ForwardWordExecution.getNextWordPosition(doc, current);\r
+ String word = doc.get(current, next-current);\r
+ String convertedWord = convert(word);\r
+ doc.replace(current, next-current, convertedWord);\r
+ cursor.move(current + convertedWord.length());\r
+ }\r
+ \r
+ protected abstract String convert(String word);\r
+}\r
import org.eclipse.jface.text.IDocument;\r
\r
public final class ForwardWordExecution extends TextEditorExecution {\r
-\r
- @Override\r
- public void execute() throws BadLocationException {\r
- int current = cursor.offset();\r
- cursor.move(getNextWordPosition(doc, current));\r
- }\r
-\r
- public static int getNextWordPosition(IDocument doc, int offset) throws BadLocationException {\r
- CharSequence seq = new DocumentCharSequence(doc, offset, doc.getLength()-offset);\r
- CodePointIterator itr = new CodePointIterator(seq);\r
-\r
-\r
- for(; itr.hasNext(); ) {\r
- int codePoint = itr.next();\r
+ \r
+ @Override\r
+ public void execute() throws BadLocationException {\r
+ int current = cursor.offset();\r
+ cursor.move(getNextWordPosition(doc, current));\r
+ }\r
+ \r
+ public static int getNextWordPosition(IDocument doc, int offset) throws BadLocationException {\r
+ CharSequence seq = new DocumentCharSequence(doc, offset, doc.getLength()-offset);\r
+ CodePointIterator itr = new CodePointIterator(seq);\r
+ \r
+ \r
+ for(; itr.hasNext(); ) {\r
+ int codePoint = itr.next();\r
if (Character.isLetterOrDigit(codePoint)) {\r
itr.previous();\r
break;\r
}\r
- }\r
+ }\r
for(; itr.hasNext(); ) {\r
if (!Character.isLetterOrDigit(itr.next())) {\r
itr.previous();\r
}\r
\r
return offset + itr.index();\r
- }\r
- \r
+ }\r
}\r
\r
public final class KillWordExecution extends TextEditorExecution {\r
\r
- @Override\r
- public void execute() throws BadLocationException {\r
- if(!textEditor.isEditable()) {\r
+ @Override\r
+ public void execute() throws BadLocationException {\r
+ if (!textEditor.isEditable()) {\r
return;\r
}\r
\r
- int current = cursor.offset();\r
- int next = ForwardWordExecution.getNextWordPosition(doc, current);\r
- String word = doc.get(current, next-current);\r
- Clipboard c = new Clipboard(window.getShell().getDisplay());\r
- c.setContents(\r
- new String[] { word }, \r
- new Transfer[] { TextTransfer.getInstance() });\r
- doc.replace(current, next-current, "");\r
- }\r
+ int current = cursor.offset();\r
+ int next = ForwardWordExecution.getNextWordPosition(doc, current);\r
+ String word = doc.get(current, next - current);\r
+ Clipboard c = new Clipboard(window.getShell().getDisplay());\r
+ c.setContents(new String[] { word }, \r
+ new Transfer[] { TextTransfer.getInstance() });\r
+ doc.replace(current, next - current, "");\r
+ }\r
}\r
--- /dev/null
+package jp.sourceforge.moreemacs.handlers;\r
+\r
+\r
+public final class UpcaseWordExecution extends ConvertWordExecution {\r
+ @Override\r
+ protected String convert(String word) {\r
+ return word.toUpperCase();\r
+ }\r
+}\r
+\r