Java 类org.eclipse.jface.text.IFindReplaceTargetExtension3 实例源码
项目:e4macs
文件:ParagraphHandler.java
/**
* Find the next occurrence of empty line(s)
* Will match all valid lines except single ^$
*
* @param editor
* @param forward true if moving forward
* @return -1 if not found, else offset of match in widget coords
*/
protected int findNext(ITextEditor editor, boolean forward) {
IFindReplaceTarget frt = getTarget(editor);
Point selection = frt.getSelection();
// don't move past eob
int offset = Math.min(MarkUtils.getCharCount(editor), Math.max(0,MarkUtils.getCaretOffset(editor) + (forward ? 1 : -2)));
int result = ((IFindReplaceTargetExtension3)frt).findAndSelect(offset, PARAGRAPH_START, forward, false, false, true);
if (result != -1) {
if ((forward && offset > result) || (!forward && offset < result)) {
// reset if we've wrapped around in the search
MarkUtils.setWidgetSelection(editor, selection.x, selection.x + selection.y);
result = -1;
}
}
return result;
}
项目:e4macs
文件:SearchReplaceMinibuffer.java
/**
* Case-based replacement - after the initial find has already happened
*
* @param replacer - the replacement string (may be regexp)
* @param index - offset of find
* @param all - all if true, else initial
* @return - the replacement region
*
* @throws BadLocationException
*/
private IRegion caseReplace(String replacer, int index, boolean all) throws BadLocationException {
IRegion result = null;
IDocumentUndoManager undoer = DocumentUndoManagerRegistry.getDocumentUndoManager(getDocument());
try {
if (!isReplaceAll() && undoer != null) {
undoer.beginCompoundChange();
}
IFindReplaceTarget target = getTarget();
// first replace with (possible regexp) string
((IFindReplaceTargetExtension3)target).replaceSelection(replacer, isRegexp());
// adjust case of actual replacement string
replacer = target.getSelectionText();
String caseReplacer = replacer;
if (all) {
caseReplacer = caseReplacer.toUpperCase();
} else {
caseReplacer = caseReplacer.trim();
caseReplacer = Character.toUpperCase(caseReplacer.charAt(0)) +
caseReplacer.substring(1,caseReplacer.length()).toString();
// now update the replacement string with the re-cased part
caseReplacer = replacer.replaceFirst(replacer.trim(), caseReplacer);
}
int ind = target.findAndSelect(index, replacer, true, false, false);
if (ind > -1) {
target.replaceSelection(caseReplacer);
}
} finally {
if (!isReplaceAll() && undoer != null) {
undoer.endCompoundChange();
}
}
return result;
}
项目:e4macs
文件:ParagraphHandler.java
/**
* Find the next occurrence of empty line consisting of ^$
* Since findNext will find multiple sequential ^$'s, we only need find one
*
* @param editor
* @param forward
* @return offset of match in widget coords
*/
protected int findNextEmpty(ITextEditor editor, boolean forward) {
IFindReplaceTarget frt = getTarget(editor);
Point selection = frt.getSelection();
int count = MarkUtils.getCharCount(editor);
int coffset = MarkUtils.getCaretOffset(editor);
// don't move past EOB
int offset = Math.min(count,coffset + (forward ? 1 : -1)); //(forward ? selection.x + selection.y+1 : selection.x-2);
int next = 0;
int prev = -1;
do {
next = ((IFindReplaceTargetExtension3)frt).findAndSelect(offset, REGEX_BOL_HACK, forward, false, false, true);
if (next == -1 || prev == next){
// we've run out of buffer
offset = (forward ? count : 0);
MarkUtils.setWidgetSelection(editor, offset, offset);
return offset;
} else if (forward && offset > next) {
// protect against overrun
MarkUtils.setWidgetSelection(editor, count, count);
return count;
} else if (!forward && offset < next) {
// protect against overrun
MarkUtils.setWidgetSelection(editor, 0, 0);
return 0;
} else {
selection = frt.getSelection();
// Eclipse internals (frda) return different regions depending on whether the file has a
// single or double line delimiter e.g. \r\n or \n. In the former it returns a 0 length
// region, and in the latter a length of 1
if (selection.y == 0 || (!forward && selection.x == 0)) {
// found it, or reached the top
return selection.x;
} if (selection.y == 1) {
// check for single line delimiter
char c = frt.getSelectionText().charAt(0);
if (c == '\n' || c == '\r'){
return selection.x;
}
}
// the widget count could change if a folded region expands automatically
count = MarkUtils.getCharCount(editor);
// don't move past EOB
offset = Math.min(count,(forward ? selection.x + selection.y+1 : selection.x-1));
prev = next;
}
} while (next != -1);
return next;
}
项目:e4macs
文件:SearchReplaceMinibuffer.java
/**
* Perform one replacement
*
* @return the replacement index
*/
private boolean replaceIt() {
boolean result = false;
boolean forward = true;
if (!checkPaused()) {
findCount++;
try {
result = true;
int index = getSearchOffset();
IFindReplaceTarget target = getTarget();
int fpos = findTarget(target,getSearchStr(), index, forward);
if (fpos > -1) {
boolean initial = false;
boolean all = false;
String replacer = replaceStr;
if (!isCaseSensitive() && replacer.length() > 0) {
// Preserve case using the emacs definition
// - Preserving case means that if the string matched is all caps, or capitalized,
// then its replacement is upper cased or capitalized.)
String replacee = target.getSelectionText().trim();
if (replacee != null && replacee.length() > 0) {
initial = Character.isUpperCase(replacee.charAt(0));
all = initial;
if (initial) {
for (int i = 1; i < replacee.length(); i++) {
if (!Character.isUpperCase(replacee.charAt(i))) {
all = false;
break;
}
}
}
}
}
int adjust = 0;
if (all || initial) {
caseReplace(replacer,index,all);
} else {
if (isRegexLD()) {
adjust = replacer.length(); // prevents repetitious find of same EOL
// now we need the offset in model coords
ITextSelection sel = (ITextSelection)getEditor().getSelectionProvider().getSelection();
// use document 'insert' instead of broken target replace
getDocument().replace(sel.getOffset(),0,replacer);
// search uses cursor position - s/r is always forward
MarkUtils.setCursorOffset(getEditor(), sel.getOffset()+adjust);
} else {
((IFindReplaceTargetExtension3)target).replaceSelection(replacer, isRegexp());
}
}
Point p = target.getSelection();
int rIndex = p.x + p.y + adjust;
setSearchOffset(rIndex);
}
} catch (Exception e) {
setResultString(e.getLocalizedMessage(), true);
finish();
beep();
}
}
return result;
}
项目:APICloud-Studio
文件:CopiedFromFindReplaceDialog.java
/**
* Replaces the selection with <code>replaceString</code>. If <code>regExReplace</code> is <code>true</code>,
* <code>replaceString</code> is a regex replace pattern which will get expanded if the underlying target supports
* it. Returns the region of the inserted text; note that the returned selection covers the expanded pattern in case
* of regex replace.
*
* @param replaceString
* the replace string (or a regex pattern)
* @param regExReplace
* <code>true</code> if <code>replaceString</code> is a pattern
* @return the selection after replacing, i.e. the inserted text
* @since 3.0
*/
/* default */Point replaceSelection(String replaceString, boolean regExReplace)
{
if (fTarget instanceof IFindReplaceTargetExtension3)
((IFindReplaceTargetExtension3) fTarget).replaceSelection(replaceString, regExReplace);
else
fTarget.replaceSelection(replaceString);
return fTarget.getSelection();
}
项目:APICloud-Studio
文件:CopiedFromFindReplaceDialog.java
/**
* Searches for a string starting at the given offset and using the specified search directives. If a string has
* been found it is selected and its start offset is returned.
*
* @param offset
* the offset at which searching starts
* @param findString
* the string which should be found
* @param forwardSearch
* the direction of the search
* @param caseSensitive
* <code>true</code> performs a case sensitive search, <code>false</code> an insensitive search
* @param wholeWord
* if <code>true</code> only occurrences are reported in which the findString stands as a word by itself
* @param regExSearch
* if <code>true</code> findString represents a regular expression
* @return the position of the specified string, or -1 if the string has not been found
* @since 3.0
*/
/* default */int findAndSelect(int offset, String findString, boolean forwardSearch, boolean caseSensitive,
boolean wholeWord, boolean regExSearch)
{
if (fTarget instanceof IFindReplaceTargetExtension3)
return ((IFindReplaceTargetExtension3) fTarget).findAndSelect(offset, findString, forwardSearch,
caseSensitive, wholeWord, regExSearch);
return fTarget.findAndSelect(offset, findString, forwardSearch, caseSensitive, wholeWord);
}