App-Mxpress-PDF
view release on metacpan or search on metacpan
public/javascripts/ace/ext-prompt.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-prompt.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;
( run in 1.597 second using v1.01-cache-2.11-cpan-39bf76dae61 )