marked
Version:
A markdown parser built for speed
31 lines (27 loc) • 632 B
JavaScript
/**
* Slugger generates header id
*/
module.exports = class Slugger {
constructor() {
this.seen = {};
}
/**
* Convert string to unique id
*/
slug(value) {
let slug = value
.toLowerCase()
.trim()
.replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
.replace(/\s/g, '-');
if (this.seen.hasOwnProperty(slug)) {
const originalSlug = slug;
do {
this.seen[originalSlug]++;
slug = originalSlug + '-' + this.seen[originalSlug];
} while (this.seen.hasOwnProperty(slug));
}
this.seen[slug] = 0;
return slug;
};
};