blob: f1de1e301d42387f5c5d1e8f507d46b429f191ee (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
'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);
});
};
};
|