XMLDoubleClickStrategy.java
上传用户:fanxing
上传日期:2017-01-19
资源大小:36k
文件大小:2k
源码类别:

PlugIns编程

开发平台:

Java

  1. /*******************************************************************************
  2.  * Copyright (c) 2005 Prashant Deva.
  3.  
  4.  * All rights reserved. This program and the accompanying materials 
  5.  * are made available under the terms of the Eclipse Public License - v 1.0
  6.  * which is available at http://www.eclipse.org/legal/epl-v10.html
  7. *******************************************************************************/
  8. package projection_test.editors;
  9. import org.eclipse.jface.text.*;
  10. public class XMLDoubleClickStrategy implements ITextDoubleClickStrategy {
  11. protected ITextViewer fText;
  12. public void doubleClicked(ITextViewer part) {
  13. int pos = part.getSelectedRange().x;
  14. if (pos < 0)
  15. return;
  16. fText = part;
  17. if (!selectComment(pos)) {
  18. selectWord(pos);
  19. }
  20. }
  21. protected boolean selectComment(int caretPos) {
  22. IDocument doc = fText.getDocument();
  23. int startPos, endPos;
  24. try {
  25. int pos = caretPos;
  26. char c = ' ';
  27. while (pos >= 0) {
  28. c = doc.getChar(pos);
  29. if (c == '\') {
  30. pos -= 2;
  31. continue;
  32. }
  33. if (c == Character.LINE_SEPARATOR || c == '"')
  34. break;
  35. --pos;
  36. }
  37. if (c != '"')
  38. return false;
  39. startPos = pos;
  40. pos = caretPos;
  41. int length = doc.getLength();
  42. c = ' ';
  43. while (pos < length) {
  44. c = doc.getChar(pos);
  45. if (c == Character.LINE_SEPARATOR || c == '"')
  46. break;
  47. ++pos;
  48. }
  49. if (c != '"')
  50. return false;
  51. endPos = pos;
  52. int offset = startPos + 1;
  53. int len = endPos - offset;
  54. fText.setSelectedRange(offset, len);
  55. return true;
  56. } catch (BadLocationException x) {
  57. }
  58. return false;
  59. }
  60. protected boolean selectWord(int caretPos) {
  61. IDocument doc = fText.getDocument();
  62. int startPos, endPos;
  63. try {
  64. int pos = caretPos;
  65. char c;
  66. while (pos >= 0) {
  67. c = doc.getChar(pos);
  68. if (!Character.isJavaIdentifierPart(c))
  69. break;
  70. --pos;
  71. }
  72. startPos = pos;
  73. pos = caretPos;
  74. int length = doc.getLength();
  75. while (pos < length) {
  76. c = doc.getChar(pos);
  77. if (!Character.isJavaIdentifierPart(c))
  78. break;
  79. ++pos;
  80. }
  81. endPos = pos;
  82. selectRange(startPos, endPos);
  83. return true;
  84. } catch (BadLocationException x) {
  85. }
  86. return false;
  87. }
  88. private void selectRange(int startPos, int stopPos) {
  89. int offset = startPos + 1;
  90. int length = stopPos - offset;
  91. fText.setSelectedRange(offset, length);
  92. }
  93. }