App-Mxpress-PDF
view release on metacpan or search on metacpan
public/javascripts/ace/keybinding-vim.js view on Meta::CPAN
end.ch += 1;
} else {
start.ch += 1;
}
return { start: start, end: end };
}
function findBeginningAndEnd(cm, head, symb, inclusive) {
var cur = copyCursor(head);
var line = cm.getLine(cur.line);
var chars = line.split('');
var start, end, i, len;
var firstIndex = chars.indexOf(symb);
if (cur.ch < firstIndex) {
cur.ch = firstIndex;
}
else if (firstIndex < cur.ch && chars[cur.ch] == symb) {
end = cur.ch; // assign end to the current cursor
--cur.ch; // make sure to look backwards
}
if (chars[cur.ch] == symb && !end) {
start = cur.ch + 1; // assign start to ahead of the cursor
} else {
for (i = cur.ch; i > -1 && !start; i--) {
if (chars[i] == symb) {
start = i + 1;
}
}
}
if (start && !end) {
for (i = start, len = chars.length; i < len && !end; i++) {
if (chars[i] == symb) {
end = i;
}
}
}
if (!start || !end) {
return { start: cur, end: cur };
}
if (inclusive) {
--start; ++end;
}
return {
start: Pos(cur.line, start),
end: Pos(cur.line, end)
};
}
defineOption('pcre', true, 'boolean');
function SearchState() {}
SearchState.prototype = {
getQuery: function() {
return vimGlobalState.query;
},
setQuery: function(query) {
vimGlobalState.query = query;
},
getOverlay: function() {
return this.searchOverlay;
},
setOverlay: function(overlay) {
this.searchOverlay = overlay;
},
isReversed: function() {
return vimGlobalState.isReversed;
},
setReversed: function(reversed) {
vimGlobalState.isReversed = reversed;
},
getScrollbarAnnotate: function() {
return this.annotate;
},
setScrollbarAnnotate: function(annotate) {
this.annotate = annotate;
}
};
function getSearchState(cm) {
var vim = cm.state.vim;
return vim.searchState_ || (vim.searchState_ = new SearchState());
}
function dialog(cm, template, shortText, onClose, options) {
if (cm.openDialog) {
cm.openDialog(template, onClose, { bottom: true, value: options.value,
onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,
selectValueOnOpen: false, onClose: function() {
if (cm.state.vim) {
cm.state.vim.status = "";
cm.ace.renderer.$loop.schedule(cm.ace.renderer.CHANGE_CURSOR);
}
}});
}
else {
onClose(prompt(shortText, ''));
}
}
function splitBySlash(argString) {
return splitBySeparator(argString, '/');
}
function findUnescapedSlashes(argString) {
return findUnescapedSeparators(argString, '/');
}
function splitBySeparator(argString, separator) {
var slashes = findUnescapedSeparators(argString, separator) || [];
if (!slashes.length) return [];
var tokens = [];
if (slashes[0] !== 0) return;
for (var i = 0; i < slashes.length; i++) {
if (typeof slashes[i] == 'number')
tokens.push(argString.substring(slashes[i] + 1, slashes[i+1]));
}
return tokens;
}
function findUnescapedSeparators(str, separator) {
if (!separator)
separator = '/';
var escapeNextChar = false;
var slashes = [];
for (var i = 0; i < str.length; i++) {
public/javascripts/ace/keybinding-vim.js view on Meta::CPAN
if (r1[prop] !== r2[prop]) {
return false;
}
}
return true;
}
return false;
}
function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {
if (!rawQuery) {
return;
}
var state = getSearchState(cm);
var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);
if (!query) {
return;
}
highlightSearchMatches(cm, query);
if (regexEqual(query, state.getQuery())) {
return query;
}
state.setQuery(query);
return query;
}
function searchOverlay(query) {
if (query.source.charAt(0) == '^') {
var matchSol = true;
}
return {
token: function(stream) {
if (matchSol && !stream.sol()) {
stream.skipToEnd();
return;
}
var match = stream.match(query, false);
if (match) {
if (match[0].length == 0) {
stream.next();
return 'searching';
}
if (!stream.sol()) {
stream.backUp(1);
if (!query.exec(stream.next() + match[0])) {
stream.next();
return null;
}
}
stream.match(query);
return 'searching';
}
while (!stream.eol()) {
stream.next();
if (stream.match(query, false)) break;
}
},
query: query
};
}
function highlightSearchMatches(cm, query) {
var searchState = getSearchState(cm);
var overlay = searchState.getOverlay();
if (!overlay || query != overlay.query) {
if (overlay) {
cm.removeOverlay(overlay);
}
overlay = searchOverlay(query);
cm.addOverlay(overlay);
if (cm.showMatchesOnScrollbar) {
if (searchState.getScrollbarAnnotate()) {
searchState.getScrollbarAnnotate().clear();
}
searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query));
}
searchState.setOverlay(overlay);
}
}
function findNext(cm, prev, query, repeat) {
if (repeat === undefined) { repeat = 1; }
return cm.operation(function() {
var pos = cm.getCursor();
var cursor = cm.getSearchCursor(query, pos);
for (var i = 0; i < repeat; i++) {
var found = cursor.find(prev);
if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); }
if (!found) {
cursor = cm.getSearchCursor(query,
(prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );
if (!cursor.find(prev)) {
return;
}
}
}
return cursor.from();
});
}
function clearSearchHighlight(cm) {
var state = getSearchState(cm);
cm.removeOverlay(getSearchState(cm).getOverlay());
state.setOverlay(null);
if (state.getScrollbarAnnotate()) {
state.getScrollbarAnnotate().clear();
state.setScrollbarAnnotate(null);
}
}
function isInRange(pos, start, end) {
if (typeof pos != 'number') {
pos = pos.line;
}
if (start instanceof Array) {
return inArray(pos, start);
} else {
if (end) {
return (pos >= start && pos <= end);
} else {
return pos == start;
}
}
}
function getUserVisibleLines(cm) {
var renderer = cm.ace.renderer;
return {
top: renderer.getFirstFullyVisibleRow(),
bottom: renderer.getLastFullyVisibleRow()
}
}
function getMarkPos(cm, vim, markName) {
if (markName == '\'' || markName == '`') {
return vimGlobalState.jumpList.find(cm, -1) || Pos(0, 0);
} else if (markName == '.') {
return getLastEditPos(cm);
}
var mark = vim.marks[markName];
public/javascripts/ace/keybinding-vim.js view on Meta::CPAN
var h = config.lineHeight;
var top = pixelPos.top;
var left = pixelPos.left;
if (!vim.insertMode) {
var isbackwards = !sel.cursor
? session.selection.isBackwards() || session.selection.isEmpty()
: Range.comparePoints(sel.cursor, sel.start) <= 0;
if (!isbackwards && left > w)
left -= w;
}
if (!vim.insertMode && vim.status) {
h = h / 2;
top += h;
}
dom.translate(element, left, top);
dom.setStyle(element.style, "width", w + "px");
dom.setStyle(element.style, "height", h + "px");
},
handleKeyboard: function(data, hashId, key, keyCode, e) {
var editor = data.editor;
var cm = editor.state.cm;
var vim = getVim(cm);
if (keyCode == -1) return;
if (!vim.insertMode) {
if (hashId == -1) {
if (key.charCodeAt(0) > 0xFF) {
if (data.inputKey) {
key = data.inputKey;
if (key && data.inputHash == 4)
key = key.toUpperCase();
}
}
data.inputChar = key;
}
else if (hashId == 4 || hashId == 0) {
if (data.inputKey == key && data.inputHash == hashId && data.inputChar) {
key = data.inputChar;
hashId = -1
}
else {
data.inputChar = null;
data.inputKey = key;
data.inputHash = hashId;
}
}
else {
data.inputChar = data.inputKey = null;
}
}
if (key == "c" && hashId == 1) { // key == "ctrl-c"
if (!useragent.isMac && editor.getCopyText()) {
editor.once("copy", function() {
editor.selection.clearSelection();
});
return {command: "null", passEvent: true};
}
}
if (key == "esc" && !vim.insertMode && !vim.visualMode && !cm.ace.inMultiSelectMode) {
var searchState = getSearchState(cm);
var overlay = searchState.getOverlay();
if (overlay) cm.removeOverlay(overlay);
}
if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) {
var insertMode = vim.insertMode;
var name = lookupKey(hashId, key, e || {});
if (vim.status == null)
vim.status = "";
var isHandled = multiSelectHandleKey(cm, name, 'user');
vim = getVim(cm); // may be changed by multiSelectHandleKey
if (isHandled && vim.status != null)
vim.status += name;
else if (vim.status == null)
vim.status = "";
cm._signal("changeStatus");
if (!isHandled && (hashId != -1 || insertMode))
return;
return {command: "null", passEvent: !isHandled};
}
},
attach: function(editor) {
if (!editor.state) editor.state = {};
var cm = new CodeMirror(editor);
editor.state.cm = cm;
editor.$vimModeHandler = this;
CodeMirror.keyMap.vim.attach(cm);
getVim(cm).status = null;
cm.on('vim-command-done', function() {
if (cm.virtualSelectionMode()) return;
getVim(cm).status = null;
cm.ace._signal("changeStatus");
cm.ace.session.markUndoGroup();
});
cm.on("changeStatus", function() {
cm.ace.renderer.updateCursor();
cm.ace._signal("changeStatus");
});
cm.on("vim-mode-change", function() {
if (cm.virtualSelectionMode()) return;
updateInputMode();
cm._signal("changeStatus");
});
function updateInputMode() {
var isIntsert = getVim(cm).insertMode;
cm.ace.renderer.setStyle("normal-mode", !isIntsert);
editor.textInput.setCommandMode(!isIntsert);
editor.renderer.$keepTextAreaAtCursor = isIntsert;
editor.renderer.$blockCursor = !isIntsert;
}
updateInputMode();
editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm);
},
detach: function(editor) {
var cm = editor.state.cm;
CodeMirror.keyMap.vim.detach(cm);
cm.destroy();
editor.state.cm = null;
editor.$vimModeHandler = null;
editor.renderer.$cursorLayer.drawCursor = null;
editor.renderer.setStyle("normal-mode", false);
editor.textInput.setCommandMode(false);
( run in 0.384 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )