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.
27 lines
708 B
27 lines
708 B
"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 = this; |
|
value(context); |
|
pattern = String(pattern); |
|
return pattern.replace(/%([a-zA-Z]+)|\\([\u0000-\uffff])/g, function ( |
|
match, |
|
token, |
|
escapeChar |
|
) { |
|
var t, result; |
|
if (escapeChar) return escapeChar; |
|
t = token; |
|
while (t && !(result = fmap[t])) t = t.slice(0, -1); |
|
if (!result) return match; |
|
if (isCallable(result)) result = call.call(result, context); |
|
return result + token.slice(t.length); |
|
}); |
|
}; |
|
};
|
|
|