remove-duplicates.js 954 B

123456789101112131415161718192021222324252627282930313233343536
  1. var Token = require('../../tokenizer/token');
  2. var serializeBody = require('../../writer/one-time').body;
  3. var serializeRules = require('../../writer/one-time').rules;
  4. function removeDuplicates(tokens) {
  5. var matched = {};
  6. var moreThanOnce = [];
  7. var id, token;
  8. var body, bodies;
  9. for (var i = 0, l = tokens.length; i < l; i++) {
  10. token = tokens[i];
  11. if (token[0] != Token.RULE) { continue; }
  12. id = serializeRules(token[1]);
  13. if (matched[id] && matched[id].length == 1) { moreThanOnce.push(id); } else { matched[id] = matched[id] || []; }
  14. matched[id].push(i);
  15. }
  16. for (i = 0, l = moreThanOnce.length; i < l; i++) {
  17. id = moreThanOnce[i];
  18. bodies = [];
  19. for (var j = matched[id].length - 1; j >= 0; j--) {
  20. token = tokens[matched[id][j]];
  21. body = serializeBody(token[2]);
  22. if (bodies.indexOf(body) > -1) { token[2] = []; } else { bodies.push(body); }
  23. }
  24. }
  25. }
  26. module.exports = removeDuplicates;