| 1234567891011121314151617181920212223242526272829303132333435 |
- export default class HeaderLineNumberConfigurer {
- constructor(crowi) {
- this.crowi = crowi;
- this.firstLine = 0;
- }
- configure(md) {
- for (const renderName of ['paragraph_open', 'heading_open', 'image', 'code_block', 'blockquote_open', 'list_item_open']) {
- this.addLineNumberRenderer(md, renderName);
- }
- }
- /**
- * Add line numbers for sync scroll
- * @see https://github.com/Microsoft/vscode/blob/6e8d4d057bd1152d49a1e9780ec6db6363593855/extensions/markdown/src/markdownEngine.ts#L118
- */
- addLineNumberRenderer(md, ruleName) {
- const original = md.renderer.rules[ruleName];
- md.renderer.rules[ruleName] = (tokens, idx, options, env, self) => {
- const token = tokens[idx];
- if (token.map && token.map.length) {
- token.attrSet('data-line', this.firstLine + token.map[0]);
- token.attrJoin('class', 'code-line');
- }
- if (original) {
- return original(tokens, idx, options, env, self);
- }
- else {
- return self.renderToken(tokens, idx, options, env, self);
- }
- };
- }
- }
|