format-method.js 713 B

1234567891011121314151617181920212223242526
  1. "use strict";
  2. var isCallable = require("../object/is-callable")
  3. , value = require("../object/valid-value")
  4. , call = Function.prototype.call;
  5. module.exports = function (fmap) {
  6. fmap = Object(value(fmap));
  7. return function (pattern) {
  8. var context = this;
  9. value(context);
  10. pattern = String(pattern);
  11. return pattern.replace(
  12. /%([a-zA-Z]+)|\\([\u0000-\uffff])/g,
  13. function (match, token, escapeChar) {
  14. var t, result;
  15. if (escapeChar) return escapeChar;
  16. t = token;
  17. while (t && !(result = fmap[t])) t = t.slice(0, -1);
  18. if (!result) return match;
  19. if (isCallable(result)) result = call.call(result, context);
  20. return result + token.slice(t.length);
  21. }
  22. );
  23. };
  24. };