mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
643 B
25 lines
643 B
10 years ago
|
'use strict';
|
||
|
|
||
|
var isCallable = require('../object/is-callable')
|
||
|
, value = require('../object/valid-value')
|
||
|
|
||
|
, call = Function.prototype.call;
|
||
|
|
||
|
module.exports = function (fmap) {
|
||
|
fmap = Object(value(fmap));
|
||
|
return function (pattern) {
|
||
|
var context = value(this);
|
||
|
pattern = String(pattern);
|
||
|
return pattern.replace(/%([a-zA-Z]+)|\\([\u0000-\uffff])/g,
|
||
|
function (match, token, escape) {
|
||
|
var t, r;
|
||
|
if (escape) return escape;
|
||
|
t = token;
|
||
|
while (t && !(r = fmap[t])) t = t.slice(0, -1);
|
||
|
if (!r) return match;
|
||
|
if (isCallable(r)) r = call.call(r, context);
|
||
|
return r + token.slice(t.length);
|
||
|
});
|
||
|
};
|
||
|
};
|