abbrev.js 865 B

12345678910111213141516171819202122232425262728
  1. var restArgs = require('./restArgs');
  2. var isSorted = require('./isSorted');
  3. exports = restArgs(function(names) {
  4. names = names.sort(isSorted.defComparator);
  5. var ret = {};
  6. var idleMap = {};
  7. for (var i = 0, len = names.length; i < len; i++) {
  8. var str = names[i];
  9. var nextStr = names[i + 1] || '';
  10. if (str === nextStr) continue;
  11. var start = false;
  12. var abbrev = '';
  13. for (var j = 0, strLen = str.length; j < strLen; j++) {
  14. abbrev += str[j];
  15. if (!start && (str[j] !== nextStr[j] || j === strLen - 1)) {
  16. start = true;
  17. }
  18. if (!start) {
  19. idleMap[abbrev] = str;
  20. } else if (!ret[abbrev] && !idleMap[abbrev]) {
  21. ret[abbrev] = str;
  22. }
  23. }
  24. }
  25. return ret;
  26. });
  27. module.exports = exports;