@diplodoc/transform 4.48.4 → 4.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/_yfm-only.css.map +1 -1
- package/dist/css/_yfm-only.min.css.map +1 -1
- package/dist/css/base.css +71 -11
- package/dist/css/base.css.map +3 -3
- package/dist/css/base.min.css +1 -1
- package/dist/css/base.min.css.map +3 -3
- package/dist/css/print.css.map +1 -1
- package/dist/css/yfm.css +71 -11
- package/dist/css/yfm.css.map +3 -3
- package/dist/css/yfm.min.css +1 -1
- package/dist/css/yfm.min.css.map +3 -3
- package/lib/index.d.ts +6 -5
- package/lib/index.js +7 -23
- package/lib/index.js.map +1 -1
- package/lib/md.js +2 -0
- package/lib/md.js.map +1 -1
- package/lib/plugins/ol-attr-conversion.d.ts +2 -0
- package/lib/plugins/ol-attr-conversion.js +21 -0
- package/lib/plugins/ol-attr-conversion.js.map +1 -0
- package/lib/typings.d.ts +1 -5
- package/package.json +1 -1
- package/src/scss/_common.scss +1 -18
- package/src/scss/_lists.scss +71 -0
- package/src/transform/index.ts +13 -39
- package/src/transform/md.ts +2 -0
- package/src/transform/plugins/ol-attr-conversion.ts +21 -0
- package/src/transform/typings.ts +1 -7
package/lib/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type Token from 'markdown-it/lib/token';
|
|
2
|
+
import type { OptionsType, OutputType } from './typings';
|
|
3
|
+
declare type TokensOptionsType = OptionsType & {
|
|
4
|
+
tokens: true;
|
|
5
5
|
};
|
|
6
|
-
declare
|
|
6
|
+
declare function transform(originInput: string, options: TokensOptionsType): Token[];
|
|
7
|
+
declare function transform(originInput: string, options?: OptionsType): OutputType;
|
|
7
8
|
export = transform;
|
|
8
9
|
declare namespace transform {
|
|
9
10
|
type Options = OptionsType;
|
package/lib/index.js
CHANGED
|
@@ -22,35 +22,19 @@ function emitResult(html, env) {
|
|
|
22
22
|
logs: log_1.log.get(),
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
const transform = (originInput, options = {}) => {
|
|
25
|
+
function transform(originInput, options = {}) {
|
|
27
26
|
const input = applyLiquid(originInput, options);
|
|
28
27
|
const { parse, compile, env } = (0, md_1.default)(options);
|
|
29
28
|
try {
|
|
30
|
-
|
|
29
|
+
const tokens = parse(input);
|
|
30
|
+
if (options.tokens === true) {
|
|
31
|
+
return tokens;
|
|
32
|
+
}
|
|
33
|
+
return emitResult(compile(tokens), env);
|
|
31
34
|
}
|
|
32
35
|
catch (error) {
|
|
33
36
|
handleError(error, options.path);
|
|
34
37
|
}
|
|
35
|
-
}
|
|
36
|
-
transform.collect = (input,
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
-
{ mdItInitOptions, pluginCollectOptions, parserPluginsOverride }) => {
|
|
39
|
-
var _a;
|
|
40
|
-
const maybeLiquidedInput = applyLiquid(input, mdItInitOptions);
|
|
41
|
-
const { parse } = (0, md_1.default)(Object.assign(Object.assign({}, mdItInitOptions), { plugins: parserPluginsOverride !== null && parserPluginsOverride !== void 0 ? parserPluginsOverride : mdItInitOptions.plugins }));
|
|
42
|
-
const plugins = (_a = mdItInitOptions.plugins) !== null && _a !== void 0 ? _a : [];
|
|
43
|
-
try {
|
|
44
|
-
const tokenStream = parse(maybeLiquidedInput);
|
|
45
|
-
return plugins.reduce((collected, plugin) => {
|
|
46
|
-
var _a;
|
|
47
|
-
const collectOutput = (_a = plugin.collect) === null || _a === void 0 ? void 0 : _a.call(plugin, collected, Object.assign(Object.assign({}, pluginCollectOptions), { tokenStream }));
|
|
48
|
-
return collectOutput !== null && collectOutput !== void 0 ? collectOutput : collected;
|
|
49
|
-
}, maybeLiquidedInput);
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
handleError(error, mdItInitOptions.path);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
38
|
+
}
|
|
55
39
|
module.exports = transform;
|
|
56
40
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/transform/index.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/transform/index.ts"],"names":[],"mappings":";;;;AAGA,iCAA2B;AAE3B,+BAA0B;AAC1B,sDAAsC;AACtC,8CAAkC;AAElC,SAAS,WAAW,CAAC,KAAa,EAAE,OAAoB;IACpD,MAAM,EACF,IAAI,GAAG,EAAE,EACT,IAAI,EACJ,gBAAgB,GAAG,KAAK,EACxB,aAAa,GAAG,KAAK,EACrB,UAAU,GAAG,KAAK,GACrB,GAAG,OAAO,CAAC;IAEZ,OAAO,aAAa,IAAI,UAAU;QAC9B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAA,gBAAc,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAC,gBAAgB,EAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAa;IAC9C,SAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,OAAO,IAAA,YAAI,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9D,MAAM,KAAK,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,GAAY;IAC1C,OAAO;QACH,MAAM,kCAAM,GAAG,KAAE,IAAI,GAAC;QACtB,IAAI,EAAE,SAAG,CAAC,GAAG,EAAE;KAClB,CAAC;AACN,CAAC;AAMD,SAAS,SAAS,CAAC,WAAmB,EAAE,UAAuB,EAAE;IAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,EAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAC,GAAG,IAAA,YAAc,EAAC,OAAO,CAAC,CAAC;IAEtD,IAAI;QACA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;YACzB,OAAO,MAAM,CAAC;SACjB;QAED,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;KAC3C;IAAC,OAAO,KAAK,EAAE;QACZ,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACpC;AACL,CAAC;AAED,iBAAS,SAAS,CAAC"}
|
package/lib/md.js
CHANGED
|
@@ -22,6 +22,7 @@ const highlight_1 = __importDefault(require("./highlight"));
|
|
|
22
22
|
const title_1 = __importDefault(require("./title"));
|
|
23
23
|
const headings_1 = __importDefault(require("./headings"));
|
|
24
24
|
const sanitize_1 = __importDefault(require("./sanitize"));
|
|
25
|
+
const ol_attr_conversion_1 = require("./plugins/ol-attr-conversion");
|
|
25
26
|
function initMarkdownIt(options) {
|
|
26
27
|
const { allowHTML = false, linkify = false, breaks = true, highlightLangs = {}, disableRules = [], } = options;
|
|
27
28
|
const highlight = (0, highlight_1.default)(highlightLangs);
|
|
@@ -70,6 +71,7 @@ function initPlugins(md, options, pluginOptions) {
|
|
|
70
71
|
const { linkify = false, linkifyTlds, leftDelimiter = '{', rightDelimiter = '}', plugins = plugins_1.default, } = options;
|
|
71
72
|
// Need for ids of headers
|
|
72
73
|
md.use(markdown_it_attrs_1.default, { leftDelimiter, rightDelimiter });
|
|
74
|
+
md.use(ol_attr_conversion_1.olAttrConversion);
|
|
73
75
|
plugins.forEach((plugin) => md.use(plugin, pluginOptions));
|
|
74
76
|
if (linkify && linkifyTlds) {
|
|
75
77
|
md.linkify.tlds(linkifyTlds, true);
|
package/lib/md.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"md.js","sourceRoot":"","sources":["../src/transform/md.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,8DAA4C;AAC5C,0EAAsC;AAEtC,wDAAuC;AACvC,mDAA2C;AAC3C,+BAA0B;AAC1B,4DAAwC;AACxC,oDAAmC;AACnC,0DAAqC;AACrC,0DAAsC;
|
|
1
|
+
{"version":3,"file":"md.js","sourceRoot":"","sources":["../src/transform/md.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.olAttrConversion = void 0;
|
|
4
|
+
const cssWhitelist = {
|
|
5
|
+
'--hier-list-start': true,
|
|
6
|
+
};
|
|
7
|
+
const olAttrConversion = (md) => {
|
|
8
|
+
md.core.ruler.after('block', 'olAttrs', (state) => {
|
|
9
|
+
var _a;
|
|
10
|
+
state.tokens.forEach((token) => {
|
|
11
|
+
const maybeStart = token.attrGet('start');
|
|
12
|
+
if (token.type === 'ordered_list_open' && maybeStart) {
|
|
13
|
+
token.attrSet('style', `--hier-list-start: ${Number(maybeStart) - 1};`);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
(_a = state.env).additionalOptionsCssWhiteList || (_a.additionalOptionsCssWhiteList = {});
|
|
17
|
+
Object.assign(state.env.additionalOptionsCssWhiteList, cssWhitelist);
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
exports.olAttrConversion = olAttrConversion;
|
|
21
|
+
//# sourceMappingURL=ol-attr-conversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ol-attr-conversion.js","sourceRoot":"","sources":["../../src/transform/plugins/ol-attr-conversion.ts"],"names":[],"mappings":";;;AAEA,MAAM,YAAY,GAAG;IACjB,mBAAmB,EAAE,IAAI;CAC5B,CAAC;AAEK,MAAM,gBAAgB,GAAuB,CAAC,EAAE,EAAE,EAAE;IACvD,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;;QAC9C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,UAAU,EAAE;gBAClD,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC3E;QACL,CAAC,CAAC,CAAC;QAEH,MAAA,KAAK,CAAC,GAAG,EAAC,6BAA6B,QAA7B,6BAA6B,GAAK,EAAE,EAAC;QAE/C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAdW,QAAA,gBAAgB,oBAc3B"}
|
package/lib/typings.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare type Heading = {
|
|
|
23
23
|
items?: Heading[];
|
|
24
24
|
};
|
|
25
25
|
export interface OptionsType {
|
|
26
|
+
tokens?: boolean;
|
|
26
27
|
vars?: Record<string, string>;
|
|
27
28
|
path?: string;
|
|
28
29
|
extractTitle?: boolean;
|
|
@@ -89,11 +90,6 @@ export declare type IntrinsicCollectOptions = {
|
|
|
89
90
|
export declare type ExtendedPluginWithCollect<PluginRegularOptions extends {} = {}, PluginCollectOptions = {}> = MarkdownItPluginCb<PluginRegularOptions> & {
|
|
90
91
|
collect?: (input: string, options: PluginCollectOptions & IntrinsicCollectOptions) => string | void;
|
|
91
92
|
};
|
|
92
|
-
export declare type RootCollectorOptions<PluginCollectOptions> = {
|
|
93
|
-
mdItInitOptions: OptionsType;
|
|
94
|
-
pluginCollectOptions: PluginCollectOptions;
|
|
95
|
-
parserPluginsOverride?: ExtendedPluginWithCollect<any, any>[];
|
|
96
|
-
};
|
|
97
93
|
export declare type MarkdownItPreprocessorCb<T extends unknown = {}> = {
|
|
98
94
|
(input: string, opts: T & Partial<MarkdownItPluginOpts>, md?: MarkdownIt): string;
|
|
99
95
|
};
|
package/package.json
CHANGED
package/src/scss/_common.scss
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
@import 'private';
|
|
4
4
|
@import 'brand';
|
|
5
|
+
@import 'lists';
|
|
5
6
|
|
|
6
7
|
@mixin removeMarginForEdgeChildren {
|
|
7
8
|
& > *:first-child {
|
|
@@ -303,24 +304,6 @@
|
|
|
303
304
|
margin-bottom: 0;
|
|
304
305
|
}
|
|
305
306
|
|
|
306
|
-
ol > li {
|
|
307
|
-
&::marker {
|
|
308
|
-
content: counter(list-item) '. ';
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
& > ol > li::marker {
|
|
312
|
-
content: counters(list-item, '.') '. ';
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
&.yfm_no-list-reset ol,
|
|
317
|
-
ol.yfm_no-list-reset {
|
|
318
|
-
// No direct ancestor (>) combinator to preserve legacy behavior
|
|
319
|
-
& > li::marker {
|
|
320
|
-
content: unset;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
307
|
li {
|
|
325
308
|
word-wrap: break-word;
|
|
326
309
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
@use 'sass:list';
|
|
2
|
+
@use 'sass:string';
|
|
3
|
+
|
|
4
|
+
@function get-counter-ident($depth) {
|
|
5
|
+
$ident: hier-list-item;
|
|
6
|
+
|
|
7
|
+
@for $i from 0 to $depth {
|
|
8
|
+
$ident: sub-#{$ident};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@return $ident;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@function get-selector($depth) {
|
|
15
|
+
$selector: ol;
|
|
16
|
+
|
|
17
|
+
@for $i from 0 to $depth {
|
|
18
|
+
$selector: '#{$selector} > li > ol';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@return $selector;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@function get-marker-content($idents) {
|
|
25
|
+
$length: list.length($idents);
|
|
26
|
+
$content: '';
|
|
27
|
+
|
|
28
|
+
@for $i from 1 through $length {
|
|
29
|
+
@if $i > 1 {
|
|
30
|
+
$content: '#{$content} "."';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
$content: '#{$content} counter(#{list.nth($idents, $i)})';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@return #{$content} '. ';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@mixin hier-list($max-depth) {
|
|
40
|
+
$ident-path: ();
|
|
41
|
+
|
|
42
|
+
@for $i from 0 through $max-depth {
|
|
43
|
+
$ident: get-counter-ident($i);
|
|
44
|
+
$ident-path: list.append($ident-path, $ident);
|
|
45
|
+
|
|
46
|
+
& #{get-selector($i)} {
|
|
47
|
+
--hier-list-start: 0;
|
|
48
|
+
counter-reset: #{$ident} var(--hier-list-start);
|
|
49
|
+
|
|
50
|
+
& > li {
|
|
51
|
+
counter-increment: $ident;
|
|
52
|
+
|
|
53
|
+
&::marker {
|
|
54
|
+
content: get-marker-content($ident-path);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.yfm {
|
|
62
|
+
@include hier-list(5);
|
|
63
|
+
|
|
64
|
+
&.yfm_no-list-reset ol,
|
|
65
|
+
ol.yfm_no-list-reset {
|
|
66
|
+
// No direct ancestor (>) combinator to preserve legacy behavior
|
|
67
|
+
& > li::marker {
|
|
68
|
+
content: unset;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
package/src/transform/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type Token from 'markdown-it/lib/token';
|
|
2
|
+
import type {EnvType, OptionsType, OutputType} from './typings';
|
|
2
3
|
|
|
3
4
|
import {bold} from 'chalk';
|
|
4
5
|
|
|
@@ -33,52 +34,25 @@ function emitResult(html: string, env: EnvType): OutputType {
|
|
|
33
34
|
};
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
type
|
|
37
|
-
(originInput: string, options?: OptionsType): OutputType;
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
-
collect: (input: string, options: RootCollectorOptions<any>) => string;
|
|
40
|
-
};
|
|
37
|
+
type TokensOptionsType = OptionsType & {tokens: true};
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
function transform(originInput: string, options: TokensOptionsType): Token[];
|
|
40
|
+
function transform(originInput: string, options?: OptionsType): OutputType;
|
|
41
|
+
function transform(originInput: string, options: OptionsType = {}): OutputType | Token[] {
|
|
44
42
|
const input = applyLiquid(originInput, options);
|
|
45
43
|
const {parse, compile, env} = initMarkdownIt(options);
|
|
46
44
|
|
|
47
45
|
try {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
transform.collect = (
|
|
55
|
-
input: string,
|
|
56
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
-
{mdItInitOptions, pluginCollectOptions, parserPluginsOverride}: RootCollectorOptions<any>,
|
|
58
|
-
) => {
|
|
59
|
-
const maybeLiquidedInput = applyLiquid(input, mdItInitOptions);
|
|
60
|
-
const {parse} = initMarkdownIt({
|
|
61
|
-
...mdItInitOptions,
|
|
62
|
-
plugins: parserPluginsOverride ?? mdItInitOptions.plugins,
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
const plugins = mdItInitOptions.plugins ?? [];
|
|
46
|
+
const tokens = parse(input);
|
|
47
|
+
if (options.tokens === true) {
|
|
48
|
+
return tokens;
|
|
49
|
+
}
|
|
66
50
|
|
|
67
|
-
|
|
68
|
-
const tokenStream = parse(maybeLiquidedInput);
|
|
69
|
-
|
|
70
|
-
return plugins.reduce((collected, plugin) => {
|
|
71
|
-
const collectOutput = plugin.collect?.(collected, {
|
|
72
|
-
...pluginCollectOptions,
|
|
73
|
-
tokenStream,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return collectOutput ?? collected;
|
|
77
|
-
}, maybeLiquidedInput);
|
|
51
|
+
return emitResult(compile(tokens), env);
|
|
78
52
|
} catch (error) {
|
|
79
|
-
handleError(error,
|
|
53
|
+
handleError(error, options.path);
|
|
80
54
|
}
|
|
81
|
-
}
|
|
55
|
+
}
|
|
82
56
|
|
|
83
57
|
export = transform;
|
|
84
58
|
|
package/src/transform/md.ts
CHANGED
|
@@ -11,6 +11,7 @@ import makeHighlight from './highlight';
|
|
|
11
11
|
import extractTitle from './title';
|
|
12
12
|
import getHeadings from './headings';
|
|
13
13
|
import sanitizeHtml from './sanitize';
|
|
14
|
+
import {olAttrConversion} from './plugins/ol-attr-conversion';
|
|
14
15
|
|
|
15
16
|
function initMarkdownIt(options: OptionsType) {
|
|
16
17
|
const {
|
|
@@ -98,6 +99,7 @@ function initPlugins(md: MarkdownIt, options: OptionsType, pluginOptions: Markdo
|
|
|
98
99
|
|
|
99
100
|
// Need for ids of headers
|
|
100
101
|
md.use(attrs, {leftDelimiter, rightDelimiter});
|
|
102
|
+
md.use(olAttrConversion);
|
|
101
103
|
|
|
102
104
|
plugins.forEach((plugin) => md.use(plugin, pluginOptions));
|
|
103
105
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {MarkdownItPluginCb} from '../typings';
|
|
2
|
+
|
|
3
|
+
const cssWhitelist = {
|
|
4
|
+
'--hier-list-start': true,
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export const olAttrConversion: MarkdownItPluginCb = (md) => {
|
|
8
|
+
md.core.ruler.after('block', 'olAttrs', (state) => {
|
|
9
|
+
state.tokens.forEach((token) => {
|
|
10
|
+
const maybeStart = token.attrGet('start');
|
|
11
|
+
|
|
12
|
+
if (token.type === 'ordered_list_open' && maybeStart) {
|
|
13
|
+
token.attrSet('style', `--hier-list-start: ${Number(maybeStart) - 1};`);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
state.env.additionalOptionsCssWhiteList ||= {};
|
|
18
|
+
|
|
19
|
+
Object.assign(state.env.additionalOptionsCssWhiteList, cssWhitelist);
|
|
20
|
+
});
|
|
21
|
+
};
|
package/src/transform/typings.ts
CHANGED
|
@@ -30,6 +30,7 @@ export type Heading = {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export interface OptionsType {
|
|
33
|
+
tokens?: boolean;
|
|
33
34
|
vars?: Record<string, string>;
|
|
34
35
|
path?: string;
|
|
35
36
|
extractTitle?: boolean;
|
|
@@ -111,13 +112,6 @@ export type ExtendedPluginWithCollect<
|
|
|
111
112
|
) => string | void;
|
|
112
113
|
};
|
|
113
114
|
|
|
114
|
-
export type RootCollectorOptions<PluginCollectOptions> = {
|
|
115
|
-
mdItInitOptions: OptionsType;
|
|
116
|
-
pluginCollectOptions: PluginCollectOptions;
|
|
117
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
|
-
parserPluginsOverride?: ExtendedPluginWithCollect<any, any>[];
|
|
119
|
-
};
|
|
120
|
-
|
|
121
115
|
export type MarkdownItPreprocessorCb<T extends unknown = {}> = {
|
|
122
116
|
(input: string, opts: T & Partial<MarkdownItPluginOpts>, md?: MarkdownIt): string;
|
|
123
117
|
};
|