Skip to content

Commit dc1c9f3

Browse files
committed
fix(md-enhance): compatable attrs with highlight lines
1 parent 2b7c140 commit dc1c9f3

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

packages/md-enhance/__tests__/unit/attrs.spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi } from "vitest";
2+
import { createMarkdown } from "@vuepress/markdown";
23
import MarkdownIt from "markdown-it";
34
import { attrs, getAttrs } from "../../src/node/markdown-it/attrs";
45

@@ -748,3 +749,10 @@ describeTestsWithOptions(
748749
},
749750
" with [[ ]] delimiters"
750751
);
752+
753+
it("should not break code blocks line highlight", () => {
754+
const markdownIt = createMarkdown().use(attrs);
755+
const src = "```{1-3}\nfor i in range(10):\n```";
756+
757+
expect(markdownIt.render(src)).not.toContain("1-3");
758+
});

packages/md-enhance/src/node/markdown-it/attrs.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
/**
2+
* Forked and modified from https://github.com/arve0/markdown-it-attrs/
3+
* The MIT License (MIT)
4+
*
5+
* Copyright (c) Arve Seljebu <arve.seljebu@gmail.com> (arve0.github.io)
6+
*
7+
* Permission is hereby granted, free of charge, to any person obtaining a copy
8+
* of this software and associated documentation files (the "Software"), to deal
9+
* in the Software without restriction, including without limitation the rights
10+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
* copies of the Software, and to permit persons to whom the Software is
12+
* furnished to do so, subject to the following conditions:
13+
*
14+
* The above copyright notice and this permission notice shall be included in
15+
* all copies or substantial portions of the Software.
16+
*
17+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23+
* THE SOFTWARE.
24+
*/
25+
126
import type { PluginWithOptions } from "markdown-it";
227
import type Token from "markdown-it/lib/token";
328
import type { RuleCore } from "markdown-it/lib/parser_core";
@@ -269,11 +294,20 @@ const patternsConfig = (options: Required<AttrsOptions>): Rule[] => [
269294
],
270295
transform: (tokens, index): void => {
271296
const token = tokens[index];
297+
let lineNumber = "";
298+
299+
const results = token.info.match(/{(?:[\d,-]+)}/);
300+
301+
if (results) {
302+
token.info = token.info.replace(results[0], "");
303+
lineNumber = results[0];
304+
}
305+
272306
const start = token.info.lastIndexOf(options.left);
273307
const attrs = getAttrs(token.info, start, options);
274308

275309
addAttrs(attrs, token);
276-
token.info = removeDelimiter(token.info, options);
310+
token.info = `${lineNumber} ${removeDelimiter(token.info, options)}`;
277311
},
278312
},
279313

0 commit comments

Comments
 (0)