App-Mxpress-PDF
view release on metacpan or search on metacpan
public/javascripts/ace/ext-language_tools.js view on Meta::CPAN
FILENAME_BASE: function(editor) {
return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, "");
},
DIRECTORY: function(editor) {
return this.FILEPATH(editor).replace(/[^/\\]*$/, "");
},
FILEPATH: function(editor) { return "/not implemented.txt"; },
WORKSPACE_NAME: function() { return "Unknown"; },
FULLNAME: function() { return "Unknown"; },
BLOCK_COMMENT_START: function(editor) {
var mode = editor.session.$mode || {};
return mode.blockComment && mode.blockComment.start || "";
},
BLOCK_COMMENT_END: function(editor) {
var mode = editor.session.$mode || {};
return mode.blockComment && mode.blockComment.end || "";
},
LINE_COMMENT: function(editor) {
var mode = editor.session.$mode || {};
return mode.lineCommentStart || "";
},
CURRENT_YEAR: date.bind(null, {year: "numeric"}),
CURRENT_YEAR_SHORT: date.bind(null, {year: "2-digit"}),
CURRENT_MONTH: date.bind(null, {month: "numeric"}),
CURRENT_MONTH_NAME: date.bind(null, {month: "long"}),
CURRENT_MONTH_NAME_SHORT: date.bind(null, {month: "short"}),
CURRENT_DATE: date.bind(null, {day: "2-digit"}),
CURRENT_DAY_NAME: date.bind(null, {weekday: "long"}),
CURRENT_DAY_NAME_SHORT: date.bind(null, {weekday: "short"}),
CURRENT_HOUR: date.bind(null, {hour: "2-digit", hour12: false}),
CURRENT_MINUTE: date.bind(null, {minute: "2-digit"}),
CURRENT_SECOND: date.bind(null, {second: "2-digit"})
};
VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;
function date(dateFormat) {
var str = new Date().toLocaleString("en-us", dateFormat);
return str.length == 1 ? "0" + str : str;
}
var SnippetManager = function() {
this.snippetMap = {};
this.snippetNameMap = {};
};
(function() {
oop.implement(this, EventEmitter);
this.getTokenizer = function() {
return SnippetManager.$tokenizer || this.createTokenizer();
};
this.createTokenizer = function() {
function TabstopToken(str) {
str = str.substr(1);
if (/^\d+$/.test(str))
return [{tabstopId: parseInt(str, 10)}];
return [{text: str}];
}
function escape(ch) {
return "(?:[^\\\\" + ch + "]|\\\\.)";
}
var formatMatcher = {
regex: "/(" + escape("/") + "+)/",
onMatch: function(val, state, stack) {
var ts = stack[0];
ts.fmtString = true;
ts.guard = val.slice(1, -1);
ts.flag = "";
return "";
},
next: "formatString"
};
SnippetManager.$tokenizer = new Tokenizer({
start: [
{regex: /\\./, onMatch: function(val, state, stack) {
var ch = val[1];
if (ch == "}" && stack.length) {
val = ch;
} else if ("`$\\".indexOf(ch) != -1) {
val = ch;
}
return [val];
}},
{regex: /}/, onMatch: function(val, state, stack) {
return [stack.length ? stack.shift() : val];
}},
{regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken},
{regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) {
var t = TabstopToken(str.substr(1));
stack.unshift(t[0]);
return t;
}, next: "snippetVar"},
{regex: /\n/, token: "newline", merge: false}
],
snippetVar: [
{regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) {
var choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function(operator) {
return operator.length == 2 ? operator[1] : "\x00";
}).split("\x00");
stack[0].choices = choices;
return [choices[0]];
}, next: "start"},
formatMatcher,
{regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"}
],
formatString: [
{regex: /:/, onMatch: function(val, state, stack) {
if (stack.length && stack[0].expectElse) {
stack[0].expectElse = false;
stack[0].ifEnd = {elseEnd: stack[0]};
return [stack[0].ifEnd];
}
return ":";
}},
{regex: /\\./, onMatch: function(val, state, stack) {
var ch = val[1];
if (ch == "}" && stack.length)
val = ch;
else if ("`$\\".indexOf(ch) != -1)
val = ch;
else if (ch == "n")
val = "\n";
else if (ch == "t")
val = "\t";
else if ("ulULE".indexOf(ch) != -1)
val = {changeCase: ch, local: ch > "a"};
return [val];
}},
{regex: "/\\w*}", onMatch: function(val, state, stack) {
var next = stack.shift();
if (next)
next.flag = val.slice(1, -1);
this.next = next && next.tabstopId ? "start" : "";
return [next || val];
}, next: "start"},
{regex: /\$(?:\d+|\w+)/, onMatch: function(val, state, stack) {
return [{text: val.slice(1)}];
}},
{regex: /\${\w+/, onMatch: function(val, state, stack) {
var token = {text: val.slice(2)};
stack.unshift(token);
return [token];
}, next: "formatStringVar"},
{regex: /\n/, token: "newline", merge: false},
{regex: /}/, onMatch: function(val, state, stack) {
var next = stack.shift();
this.next = next && next.tabstopId ? "start" : "";
return [next || val];
}, next: "start"}
],
formatStringVar: [
{regex: /:\/\w+}/, onMatch: function(val, state, stack) {
var ts = stack[0];
ts.formatFunction = val.slice(2, -1);
return [stack.shift()];
}, next: "formatString"},
public/javascripts/ace/ext-language_tools.js view on Meta::CPAN
};
this.snippetMap = {};
this.snippetNameMap = {};
this.register = function(snippets, scope) {
var snippetMap = this.snippetMap;
var snippetNameMap = this.snippetNameMap;
var self = this;
if (!snippets)
snippets = [];
function wrapRegexp(src) {
if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src))
src = "(?:" + src + ")";
return src || "";
}
function guardedRegexp(re, guard, opening) {
re = wrapRegexp(re);
guard = wrapRegexp(guard);
if (opening) {
re = guard + re;
if (re && re[re.length - 1] != "$")
re = re + "$";
} else {
re = re + guard;
if (re && re[0] != "^")
re = "^" + re;
}
return new RegExp(re);
}
function addSnippet(s) {
if (!s.scope)
s.scope = scope || "_";
scope = s.scope;
if (!snippetMap[scope]) {
snippetMap[scope] = [];
snippetNameMap[scope] = {};
}
var map = snippetNameMap[scope];
if (s.name) {
var old = map[s.name];
if (old)
self.unregister(old);
map[s.name] = s;
}
snippetMap[scope].push(s);
if (s.prefix)
s.tabTrigger = s.prefix;
if (!s.content && s.body)
s.content = Array.isArray(s.body) ? s.body.join("\n") : s.body;
if (s.tabTrigger && !s.trigger) {
if (!s.guard && /^\w/.test(s.tabTrigger))
s.guard = "\\b";
s.trigger = lang.escapeRegExp(s.tabTrigger);
}
if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)
return;
s.startRe = guardedRegexp(s.trigger, s.guard, true);
s.triggerRe = new RegExp(s.trigger);
s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);
s.endTriggerRe = new RegExp(s.endTrigger);
}
if (Array.isArray(snippets)) {
snippets.forEach(addSnippet);
} else {
Object.keys(snippets).forEach(function(key) {
addSnippet(snippets[key]);
});
}
this._signal("registerSnippets", {scope: scope});
};
this.unregister = function(snippets, scope) {
var snippetMap = this.snippetMap;
var snippetNameMap = this.snippetNameMap;
function removeSnippet(s) {
var nameMap = snippetNameMap[s.scope||scope];
if (nameMap && nameMap[s.name]) {
delete nameMap[s.name];
var map = snippetMap[s.scope||scope];
var i = map && map.indexOf(s);
if (i >= 0)
map.splice(i, 1);
}
}
if (snippets.content)
removeSnippet(snippets);
else if (Array.isArray(snippets))
snippets.forEach(removeSnippet);
};
this.parseSnippetFile = function(str) {
str = str.replace(/\r/g, "");
var list = [], snippet = {};
var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;
var m;
while (m = re.exec(str)) {
if (m[1]) {
try {
snippet = JSON.parse(m[1]);
list.push(snippet);
} catch (e) {}
} if (m[4]) {
snippet.content = m[4].replace(/^\t/gm, "");
list.push(snippet);
snippet = {};
} else {
var key = m[2], val = m[3];
if (key == "regex") {
var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g;
public/javascripts/ace/ext-language_tools.js view on Meta::CPAN
value: word,
score: wordScore[word],
meta: "local"
};
}));
};
});
define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module) {
"use strict";
var snippetManager = require("../snippets").snippetManager;
var Autocomplete = require("../autocomplete").Autocomplete;
var config = require("../config");
var lang = require("../lib/lang");
var util = require("../autocomplete/util");
var textCompleter = require("../autocomplete/text_completer");
var keyWordCompleter = {
getCompletions: function(editor, session, pos, prefix, callback) {
if (session.$mode.completer) {
return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);
}
var state = editor.session.getState(pos.row);
var completions = session.$mode.getCompletions(state, session, pos, prefix);
callback(null, completions);
}
};
var snippetCompleter = {
getCompletions: function(editor, session, pos, prefix, callback) {
var scopes = [];
var token = session.getTokenAt(pos.row, pos.column);
if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\.xml$/))
scopes.push('html-tag');
else
scopes = snippetManager.getActiveScopes(editor);
var snippetMap = snippetManager.snippetMap;
var completions = [];
scopes.forEach(function(scope) {
var snippets = snippetMap[scope] || [];
for (var i = snippets.length; i--;) {
var s = snippets[i];
var caption = s.name || s.tabTrigger;
if (!caption)
continue;
completions.push({
caption: caption,
snippet: s.content,
meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet",
type: "snippet"
});
}
}, this);
callback(null, completions);
},
getDocTooltip: function(item) {
if (item.type == "snippet" && !item.docHTML) {
item.docHTML = [
"<b>", lang.escapeHTML(item.caption), "</b>", "<hr></hr>",
lang.escapeHTML(item.snippet)
].join("");
}
}
};
var completers = [snippetCompleter, textCompleter, keyWordCompleter];
exports.setCompleters = function(val) {
completers.length = 0;
if (val) completers.push.apply(completers, val);
};
exports.addCompleter = function(completer) {
completers.push(completer);
};
exports.textCompleter = textCompleter;
exports.keyWordCompleter = keyWordCompleter;
exports.snippetCompleter = snippetCompleter;
var expandSnippet = {
name: "expandSnippet",
exec: function(editor) {
return snippetManager.expandWithTab(editor);
},
bindKey: "Tab"
};
var onChangeMode = function(e, editor) {
loadSnippetsForMode(editor.session.$mode);
};
var loadSnippetsForMode = function(mode) {
if (typeof mode == "string")
mode = config.$modes[mode];
if (!mode)
return;
if (!snippetManager.files)
snippetManager.files = {};
loadSnippetFile(mode.$id, mode.snippetFileId);
if (mode.modes)
mode.modes.forEach(loadSnippetsForMode);
};
var loadSnippetFile = function(id, snippetFilePath) {
if (!snippetFilePath || !id || snippetManager.files[id])
return;
snippetManager.files[id] = {};
config.loadModule(snippetFilePath, function(m) {
if (!m) return;
snippetManager.files[id] = m;
if (!m.snippets && m.snippetText)
m.snippets = snippetManager.parseSnippetFile(m.snippetText);
snippetManager.register(m.snippets || [], m.scope);
if (m.includeScopes) {
snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;
m.includeScopes.forEach(function(x) {
loadSnippetsForMode("ace/mode/" + x);
});
}
});
};
( run in 0.852 second using v1.01-cache-2.11-cpan-39bf76dae61 )