@quarto/jupyterlab-quarto 0.1.45 → 0.2.3
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/LICENSE +1 -1
- package/README.md +48 -15
- package/lib/__tests__/jupyterlab_quarto.spec.d.ts +3 -0
- package/lib/__tests__/jupyterlab_quarto.spec.js +9 -0
- package/lib/ast/ast.d.ts +1 -2
- package/lib/ast/ast.js +4 -3
- package/lib/const.d.ts +1 -2
- package/lib/const.js +5 -6
- package/lib/hooks/codemirror.d.ts +5 -4
- package/lib/hooks/codemirror.js +37 -12
- package/lib/index.d.ts +2 -3
- package/lib/index.js +6 -5
- package/lib/manager.d.ts +2 -2
- package/lib/manager.js +14 -16
- package/lib/plugins/callouts.d.ts +1 -2
- package/lib/plugins/callouts.js +59 -58
- package/lib/plugins/cites.d.ts +1 -2
- package/lib/plugins/cites.js +41 -23
- package/lib/plugins/decorator.d.ts +1 -2
- package/lib/plugins/decorator.js +11 -12
- package/lib/plugins/divs.d.ts +1 -2
- package/lib/plugins/divs.js +20 -9
- package/lib/plugins/figure-divs.d.ts +1 -2
- package/lib/plugins/figure-divs.js +18 -17
- package/lib/plugins/figures.d.ts +3 -4
- package/lib/plugins/figures.js +30 -31
- package/lib/plugins/gridtables/common/gridtables/GetCells.d.ts +5 -6
- package/lib/plugins/gridtables/common/gridtables/GetCells.js +6 -8
- package/lib/plugins/gridtables/common/gridtables/GetColumnWidths.d.ts +5 -6
- package/lib/plugins/gridtables/common/gridtables/GetColumnWidths.js +9 -14
- package/lib/plugins/gridtables/common/markdown-it/ColumnAlignments.d.ts +0 -1
- package/lib/plugins/gridtables/common/markdown-it/ColumnAlignments.js +0 -1
- package/lib/plugins/gridtables/common/markdown-it/EmitTable.d.ts +3 -4
- package/lib/plugins/gridtables/common/markdown-it/EmitTable.js +12 -15
- package/lib/plugins/gridtables/common/markdown-it/GetCharCodeAtStartOfLine.d.ts +1 -2
- package/lib/plugins/gridtables/common/markdown-it/GetCharCodeAtStartOfLine.js +1 -3
- package/lib/plugins/gridtables/common/markdown-it/GetLine.d.ts +1 -2
- package/lib/plugins/gridtables/common/markdown-it/GetLine.js +0 -1
- package/lib/plugins/gridtables/common/markdown-it/ParseTable.d.ts +2 -3
- package/lib/plugins/gridtables/common/markdown-it/ParseTable.js +18 -28
- package/lib/plugins/gridtables/common/markdown-it/ParseTableResult.d.ts +1 -2
- package/lib/plugins/gridtables/common/markdown-it/ParseTableResult.js +0 -1
- package/lib/plugins/gridtables/index.d.ts +0 -1
- package/lib/plugins/gridtables/index.js +2 -3
- package/lib/plugins/gridtables/interfaces/markdown-it/IState.d.ts +1 -2
- package/lib/plugins/gridtables/interfaces/markdown-it/IState.js +0 -1
- package/lib/plugins/gridtables/interfaces/markdown-it/IToken.d.ts +0 -1
- package/lib/plugins/gridtables/interfaces/markdown-it/IToken.js +0 -1
- package/lib/plugins/gridtables/interfaces/markdown-it/TRuleFunction.d.ts +1 -2
- package/lib/plugins/gridtables/interfaces/markdown-it/TRuleFunction.js +0 -1
- package/lib/plugins/gridtables/rules/gridtable.d.ts +2 -3
- package/lib/plugins/gridtables/rules/gridtable.js +5 -6
- package/lib/plugins/index.d.ts +15 -0
- package/lib/plugins/index.js +21 -0
- package/lib/plugins/math.d.ts +4 -3
- package/lib/plugins/math.js +33 -31
- package/lib/plugins/mermaid/index.d.ts +1 -2
- package/lib/plugins/mermaid/index.js +19 -14
- package/lib/plugins/shortcodes.d.ts +1 -2
- package/lib/plugins/shortcodes.js +6 -7
- package/lib/plugins/spans.d.ts +1 -2
- package/lib/plugins/spans.js +2 -4
- package/lib/plugins/table-captions.d.ts +1 -2
- package/lib/plugins/table-captions.js +19 -16
- package/lib/plugins/utils/html.d.ts +1 -2
- package/lib/plugins/utils/html.js +19 -15
- package/lib/plugins/utils/markdownit.d.ts +0 -1
- package/lib/plugins/utils/markdownit.js +14 -13
- package/lib/plugins/utils/tok.d.ts +0 -1
- package/lib/plugins/utils/tok.js +12 -13
- package/lib/plugins/yaml.d.ts +1 -2
- package/lib/plugins/yaml.js +59 -49
- package/lib/providers/attrs.d.ts +1 -2
- package/lib/providers/attrs.js +5 -6
- package/lib/providers/callouts.d.ts +1 -2
- package/lib/providers/callouts.js +7 -8
- package/lib/providers/cites.d.ts +1 -2
- package/lib/providers/cites.js +7 -8
- package/lib/providers/decorator.d.ts +1 -2
- package/lib/providers/decorator.js +7 -8
- package/lib/providers/deflist.d.ts +1 -2
- package/lib/providers/deflist.js +5 -6
- package/lib/providers/divs.d.ts +1 -2
- package/lib/providers/divs.js +9 -10
- package/lib/providers/figure-divs.d.ts +1 -2
- package/lib/providers/figure-divs.js +5 -6
- package/lib/providers/figures.d.ts +1 -2
- package/lib/providers/figures.js +5 -6
- package/lib/providers/footnotes.d.ts +1 -2
- package/lib/providers/footnotes.js +5 -6
- package/lib/providers/gridtables.d.ts +1 -2
- package/lib/providers/gridtables.js +5 -6
- package/lib/providers/math.d.ts +1 -2
- package/lib/providers/math.js +12 -13
- package/lib/providers/mermaid.d.ts +1 -2
- package/lib/providers/mermaid.js +10 -9
- package/lib/providers/provider.d.ts +1 -2
- package/lib/providers/provider.js +0 -1
- package/lib/providers/shortcodes.d.ts +1 -2
- package/lib/providers/shortcodes.js +5 -6
- package/lib/providers/spans.d.ts +1 -2
- package/lib/providers/spans.js +8 -9
- package/lib/providers/sub.d.ts +1 -2
- package/lib/providers/sub.js +5 -6
- package/lib/providers/sup.d.ts +1 -2
- package/lib/providers/sup.js +5 -6
- package/lib/providers/table-captions.d.ts +1 -2
- package/lib/providers/table-captions.js +5 -6
- package/lib/providers/tasklists.d.ts +1 -2
- package/lib/providers/tasklists.js +5 -6
- package/lib/providers/yaml.d.ts +1 -2
- package/lib/providers/yaml.js +7 -8
- package/lib/types.d.ts +0 -1
- package/lib/types.js +0 -1
- package/lib/widgets.d.ts +0 -1
- package/lib/widgets.js +5 -6
- package/package.json +105 -39
- package/style/base.css +34 -33
- package/style/index.css +1 -1
- package/lib/__tests__/index.spec.d.ts +0 -6
- package/lib/__tests__/index.spec.js +0 -61
- package/lib/__tests__/index.spec.js.map +0 -1
- package/lib/__tests__/myextension.spec.d.ts +0 -6
- package/lib/__tests__/myextension.spec.js +0 -11
- package/lib/__tests__/myextension.spec.js.map +0 -1
- package/lib/ast/ast.js.map +0 -1
- package/lib/const.js.map +0 -1
- package/lib/hooks/codemirror.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/manager.js.map +0 -1
- package/lib/plugins/callouts.js.map +0 -1
- package/lib/plugins/cites.js.map +0 -1
- package/lib/plugins/decorator.js.map +0 -1
- package/lib/plugins/divs.js.map +0 -1
- package/lib/plugins/figure-divs.js.map +0 -1
- package/lib/plugins/figures.js.map +0 -1
- package/lib/plugins/gridtables/common/gridtables/GetCells.js.map +0 -1
- package/lib/plugins/gridtables/common/gridtables/GetColumnWidths.js.map +0 -1
- package/lib/plugins/gridtables/common/markdown-it/ColumnAlignments.js.map +0 -1
- package/lib/plugins/gridtables/common/markdown-it/EmitTable.js.map +0 -1
- package/lib/plugins/gridtables/common/markdown-it/GetCharCodeAtStartOfLine.js.map +0 -1
- package/lib/plugins/gridtables/common/markdown-it/GetLine.js.map +0 -1
- package/lib/plugins/gridtables/common/markdown-it/ParseTable.js.map +0 -1
- package/lib/plugins/gridtables/common/markdown-it/ParseTableResult.js.map +0 -1
- package/lib/plugins/gridtables/index.js.map +0 -1
- package/lib/plugins/gridtables/interfaces/markdown-it/IState.js.map +0 -1
- package/lib/plugins/gridtables/interfaces/markdown-it/IToken.js.map +0 -1
- package/lib/plugins/gridtables/interfaces/markdown-it/TRuleFunction.js.map +0 -1
- package/lib/plugins/gridtables/rules/gridtable.js.map +0 -1
- package/lib/plugins/math.js.map +0 -1
- package/lib/plugins/mermaid/index.js.map +0 -1
- package/lib/plugins/shortcodes.js.map +0 -1
- package/lib/plugins/spans.js.map +0 -1
- package/lib/plugins/table-captions.js.map +0 -1
- package/lib/plugins/utils/html.js.map +0 -1
- package/lib/plugins/utils/markdownit.js.map +0 -1
- package/lib/plugins/utils/tok.js.map +0 -1
- package/lib/plugins/yaml.js.map +0 -1
- package/lib/providers/attrs.js.map +0 -1
- package/lib/providers/callouts.js.map +0 -1
- package/lib/providers/cites.js.map +0 -1
- package/lib/providers/decorator.js.map +0 -1
- package/lib/providers/deflist.js.map +0 -1
- package/lib/providers/divs.js.map +0 -1
- package/lib/providers/figure-divs.js.map +0 -1
- package/lib/providers/figures.js.map +0 -1
- package/lib/providers/footnotes.js.map +0 -1
- package/lib/providers/gridtables.js.map +0 -1
- package/lib/providers/math.js.map +0 -1
- package/lib/providers/mermaid.js.map +0 -1
- package/lib/providers/provider.js.map +0 -1
- package/lib/providers/shortcodes.js.map +0 -1
- package/lib/providers/spans.js.map +0 -1
- package/lib/providers/sub.js.map +0 -1
- package/lib/providers/sup.js.map +0 -1
- package/lib/providers/table-captions.js.map +0 -1
- package/lib/providers/tasklists.js.map +0 -1
- package/lib/providers/yaml.js.map +0 -1
- package/lib/types.js.map +0 -1
- package/lib/widgets.js.map +0 -1
- package/schema/plugin.json +0 -8
- package/src/@types/markdown-it-deflist.d.ts +0 -10
- package/src/@types/markdown-it-footnote.d.ts +0 -10
- package/src/@types/markdown-it-gridtables.d.ts +0 -10
- package/src/@types/markdown-it-implicit-figures.d.ts +0 -10
- package/src/@types/markdown-it-sub.d.ts +0 -10
- package/src/@types/markdown-it-sup.d.ts +0 -10
- package/src/@types/markdown-it-task-lists.d.ts +0 -10
package/lib/plugins/cites.d.ts
CHANGED
package/lib/plugins/cites.js
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
/*
|
2
|
-
* citation.ts
|
3
|
-
*
|
4
|
-
* Copyright (C) 2020-2023 Posit Software, PBC
|
5
|
-
*
|
6
|
-
*/
|
7
|
-
const kTokCite =
|
2
|
+
* citation.ts
|
3
|
+
*
|
4
|
+
* Copyright (C) 2020-2023 Posit Software, PBC
|
5
|
+
*
|
6
|
+
*/
|
7
|
+
const kTokCite = 'quarto_cite';
|
8
8
|
export const citationPlugin = (md) => {
|
9
9
|
// Very simple plugin example that surrounds @text with `code`
|
10
|
-
md.core.ruler.push('quarto-citation',
|
10
|
+
md.core.ruler.push('quarto-citation', state => {
|
11
11
|
const tokens = state.tokens;
|
12
12
|
for (const token of tokens) {
|
13
13
|
if (token.type === 'inline' && token.children) {
|
@@ -19,7 +19,7 @@ export const citationPlugin = (md) => {
|
|
19
19
|
const content = child.content;
|
20
20
|
const textToken = (text) => {
|
21
21
|
const newToken = new state.Token('text', '', 0);
|
22
|
-
newToken.content = text.join(
|
22
|
+
newToken.content = text.join('');
|
23
23
|
return newToken;
|
24
24
|
};
|
25
25
|
let text = [];
|
@@ -34,24 +34,39 @@ export const citationPlugin = (md) => {
|
|
34
34
|
var _a;
|
35
35
|
if (cite.length) {
|
36
36
|
// Determine the cite style
|
37
|
-
let style = cite[0] ===
|
37
|
+
let style = cite[0] === '-' ? 'suppress-author' : 'in-text';
|
38
38
|
if (bracketCount > 0) {
|
39
|
-
style =
|
39
|
+
style = 'normal';
|
40
40
|
}
|
41
41
|
// The classes
|
42
|
-
const clz = [
|
42
|
+
const clz = ['cite', style];
|
43
43
|
// If the cite ends in punctuation, trim that off and make that text
|
44
44
|
const puncText = [];
|
45
45
|
// Trim off ending punctuation
|
46
|
-
if ([
|
46
|
+
if ([
|
47
|
+
':',
|
48
|
+
'.',
|
49
|
+
'#',
|
50
|
+
'$',
|
51
|
+
'%',
|
52
|
+
'&',
|
53
|
+
'-',
|
54
|
+
'+',
|
55
|
+
'?',
|
56
|
+
'<',
|
57
|
+
'>',
|
58
|
+
'~',
|
59
|
+
'/',
|
60
|
+
'!'
|
61
|
+
].includes(cite[cite.length - 1])) {
|
47
62
|
puncText.push(cite[cite.length - 1]);
|
48
63
|
cite = cite.slice(0, -1);
|
49
64
|
}
|
50
65
|
// Make a cite token
|
51
66
|
const newToken = new state.Token(kTokCite, '', 0);
|
52
|
-
newToken.content = cite.join(
|
67
|
+
newToken.content = cite.join('');
|
53
68
|
newToken.attrs = newToken.attrs || [];
|
54
|
-
(_a = newToken.attrs) === null || _a === void 0 ? void 0 : _a.push([
|
69
|
+
(_a = newToken.attrs) === null || _a === void 0 ? void 0 : _a.push(['class', clz.join(' ')]);
|
55
70
|
children.push(newToken);
|
56
71
|
cite = [];
|
57
72
|
if (puncText.length > 0) {
|
@@ -59,13 +74,15 @@ export const citationPlugin = (md) => {
|
|
59
74
|
}
|
60
75
|
}
|
61
76
|
};
|
62
|
-
let capture =
|
77
|
+
let capture = 'text';
|
63
78
|
let bracketCount = 0;
|
64
79
|
for (let j = 0; j < content.length; j++) {
|
65
80
|
const char = content.charAt(j);
|
66
|
-
if (char ===
|
81
|
+
if (char === '@') {
|
67
82
|
if ((text.length === 1 && text[0] === '-') ||
|
68
|
-
text.length > 1 &&
|
83
|
+
(text.length > 1 &&
|
84
|
+
text[text.length - 1] === '-' &&
|
85
|
+
text[text.length - 2] === '[')) {
|
69
86
|
cite.push('-');
|
70
87
|
cite.push(char);
|
71
88
|
text.pop();
|
@@ -77,14 +94,16 @@ export const citationPlugin = (md) => {
|
|
77
94
|
cite.push(char);
|
78
95
|
capture = 'cite';
|
79
96
|
}
|
80
|
-
else if (text[text.length - 1] === '-' &&
|
97
|
+
else if (text[text.length - 1] === '-' &&
|
98
|
+
text[text.length - 2] === ' ') {
|
81
99
|
text = text.slice(0, -1);
|
82
100
|
flushText();
|
83
101
|
cite.push('-');
|
84
102
|
cite.push(char);
|
85
103
|
capture = 'cite';
|
86
104
|
}
|
87
|
-
else if (text[text.length - 1] === '[' &&
|
105
|
+
else if (text[text.length - 1] === '[' &&
|
106
|
+
text[text.length - 2] === ' ') {
|
88
107
|
flushText();
|
89
108
|
cite.push(char);
|
90
109
|
capture = 'cite';
|
@@ -102,16 +121,16 @@ export const citationPlugin = (md) => {
|
|
102
121
|
}
|
103
122
|
}
|
104
123
|
}
|
105
|
-
else if (char ===
|
124
|
+
else if (char === ' ') {
|
106
125
|
capture = 'text';
|
107
126
|
flushCite();
|
108
127
|
text.push(char);
|
109
128
|
}
|
110
|
-
else if (char ===
|
129
|
+
else if (char === '[') {
|
111
130
|
bracketCount++;
|
112
131
|
text.push(char);
|
113
132
|
}
|
114
|
-
else if (char ===
|
133
|
+
else if (char === ']') {
|
115
134
|
bracketCount--;
|
116
135
|
capture = 'text';
|
117
136
|
flushCite();
|
@@ -145,4 +164,3 @@ function renderCite(tokens, idx, _options, _env, self) {
|
|
145
164
|
const citeContent = `<code ${self.renderAttrs(token)}>${token.content}</code>`;
|
146
165
|
return citeContent;
|
147
166
|
}
|
148
|
-
//# sourceMappingURL=cites.js.map
|
package/lib/plugins/decorator.js
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
import Token from
|
2
|
-
import { attributeDecorator, decorator } from
|
3
|
-
import { kTokDivOpen } from
|
4
|
-
import { kTokFigureOpen } from
|
5
|
-
import { kTokHeadingOpen, kTokTableOpen } from
|
6
|
-
import { kTokMathBlock } from
|
7
|
-
const kTokDecorator =
|
8
|
-
const kQuartoDecoratorOptions =
|
1
|
+
import Token from 'markdown-it/lib/token';
|
2
|
+
import { attributeDecorator, decorator } from './utils/html';
|
3
|
+
import { kTokDivOpen } from './divs';
|
4
|
+
import { kTokFigureOpen } from './figures';
|
5
|
+
import { kTokHeadingOpen, kTokTableOpen } from './utils/tok';
|
6
|
+
import { kTokMathBlock } from './math';
|
7
|
+
const kTokDecorator = 'quarto_decorator';
|
8
|
+
const kQuartoDecoratorOptions = 'quarto-decorator-options';
|
9
9
|
export const decoratorPlugin = (md) => {
|
10
|
-
md.core.ruler.push('quarto-decorator',
|
10
|
+
md.core.ruler.push('quarto-decorator', state => {
|
11
11
|
const outTokens = [];
|
12
12
|
for (const token of state.tokens) {
|
13
|
-
if (token.type ===
|
13
|
+
if (token.type === 'fence' && !token.attrs && token.info) {
|
14
14
|
outTokens.push(decoratorTokForToken(token));
|
15
15
|
}
|
16
16
|
else if (token.type === kTokHeadingOpen && token.attrs) {
|
@@ -35,7 +35,7 @@ export const decoratorPlugin = (md) => {
|
|
35
35
|
md.renderer.rules[kTokDecorator] = renderDecorator;
|
36
36
|
};
|
37
37
|
function decoratorTokForToken(token, options) {
|
38
|
-
const decoratorTok = new Token(kTokDecorator,
|
38
|
+
const decoratorTok = new Token(kTokDecorator, 'div', 1);
|
39
39
|
decoratorTok.attrs = token.attrs;
|
40
40
|
decoratorTok.info = token.info;
|
41
41
|
if (options) {
|
@@ -56,4 +56,3 @@ function renderDecorator(tokens, idx) {
|
|
56
56
|
return attributeDecorator(token, decoratorOptions);
|
57
57
|
}
|
58
58
|
}
|
59
|
-
//# sourceMappingURL=decorator.js.map
|
package/lib/plugins/divs.d.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
import type MarkdownIt from
|
1
|
+
import type MarkdownIt from 'markdown-it/lib';
|
2
2
|
export declare const kDivRuleName = "pandocDiv";
|
3
3
|
export declare const kTokDivOpen = "pandoc_div_open";
|
4
4
|
export declare const kTokDivClose = "pandoc_div_close";
|
5
5
|
export declare const divPlugin: (md: MarkdownIt) => void;
|
6
|
-
//# sourceMappingURL=divs.d.ts.map
|
package/lib/plugins/divs.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import { addClass } from
|
2
|
-
export const kDivRuleName =
|
1
|
+
import { addClass } from './utils/markdownit';
|
2
|
+
export const kDivRuleName = 'pandocDiv';
|
3
3
|
export const kTokDivOpen = 'pandoc_div_open';
|
4
4
|
export const kTokDivClose = 'pandoc_div_close';
|
5
5
|
export const divPlugin = (md) => {
|
@@ -7,16 +7,16 @@ export const divPlugin = (md) => {
|
|
7
7
|
function renderStartDiv(tokens, idx, _options, _env, self) {
|
8
8
|
// Add a class to designate that this is a quarto dev
|
9
9
|
const token = tokens[idx];
|
10
|
-
token.attrs = addClass(
|
10
|
+
token.attrs = addClass('quarto-div', token.attrs);
|
11
11
|
return `<div ${self.renderAttrs(token)}>`;
|
12
12
|
}
|
13
13
|
// Render pandoc-style divs
|
14
14
|
function renderEndDiv() {
|
15
|
-
return
|
15
|
+
return '</div>';
|
16
16
|
}
|
17
17
|
// TODO Implement a better test during validation run
|
18
18
|
// Handle pandoc-style divs
|
19
|
-
md.block.ruler.before(
|
19
|
+
md.block.ruler.before('fence', kDivRuleName, (state, start, _end, silent) => {
|
20
20
|
// This is a validation run, can ignore
|
21
21
|
if (silent) {
|
22
22
|
return true;
|
@@ -29,11 +29,14 @@ export const divPlugin = (md) => {
|
|
29
29
|
// div. Data structure holds key that is the number of colons
|
30
30
|
const divState = state.env.quartoOpenDivs || {};
|
31
31
|
const incrementDivCount = (fence) => {
|
32
|
+
var _a;
|
33
|
+
state.env.quartoDivLevel = ((_a = state.env.quartoDivLevel) !== null && _a !== void 0 ? _a : 0) + 1;
|
32
34
|
state.env.quartoOpenDivs = state.env.quartoOpenDivs || {};
|
33
35
|
const current = state.env.quartoOpenDivs[fence] || 0;
|
34
36
|
state.env.quartoOpenDivs[fence] = Math.max(0, current + 1);
|
35
37
|
};
|
36
38
|
const decrementDivCount = (fence) => {
|
39
|
+
state.env.quartoDivLevel--;
|
37
40
|
state.env.quartoOpenDivs = state.env.quartoOpenDivs || {};
|
38
41
|
const current = state.env.quartoOpenDivs[fence] || 0;
|
39
42
|
state.env.quartoOpenDivs[fence] = Math.max(0, current - 1);
|
@@ -69,23 +72,32 @@ export const divPlugin = (md) => {
|
|
69
72
|
// Add to the open count (or set it to 1)
|
70
73
|
incrementDivCount(divFence);
|
71
74
|
// Make an open token
|
72
|
-
const token = state.push(kTokDivOpen,
|
75
|
+
const token = state.push(kTokDivOpen, 'div', 1);
|
73
76
|
token.markup = line;
|
74
77
|
// Allow this to be parsed for attributes by markdown-it-attr
|
75
|
-
if (attr && attr.startsWith(
|
78
|
+
if (attr && attr.startsWith('{')) {
|
76
79
|
token.info = attr;
|
77
80
|
}
|
78
81
|
else if (attr) {
|
79
82
|
token.info = `{.${attr}}`;
|
80
83
|
}
|
81
84
|
token.block = true;
|
85
|
+
token.meta = {
|
86
|
+
line: state.line,
|
87
|
+
level: state.env.quartoDivLevel
|
88
|
+
};
|
82
89
|
}
|
83
90
|
else {
|
84
91
|
// Subtract from the open count (min zero)
|
92
|
+
const level = state.env.quartoDivLevel;
|
85
93
|
decrementDivCount(divFence);
|
86
94
|
// Make a close token
|
87
|
-
const token = state.push(kTokDivClose,
|
95
|
+
const token = state.push(kTokDivClose, 'div', -1);
|
88
96
|
token.markup = line;
|
97
|
+
token.meta = {
|
98
|
+
line: state.line,
|
99
|
+
level
|
100
|
+
};
|
89
101
|
}
|
90
102
|
state.line = start + 1;
|
91
103
|
return true;
|
@@ -97,4 +109,3 @@ export const divPlugin = (md) => {
|
|
97
109
|
md.renderer.rules[kTokDivOpen] = renderStartDiv;
|
98
110
|
md.renderer.rules[kTokDivClose] = renderEndDiv;
|
99
111
|
};
|
100
|
-
//# sourceMappingURL=divs.js.map
|
@@ -4,23 +4,23 @@
|
|
4
4
|
* Copyright (C) 2020-2023 Posit Software, PBC
|
5
5
|
*
|
6
6
|
*/
|
7
|
-
import { readAttrValue } from
|
8
|
-
import { kTokInline, kTokParaClose, kTokParaOpen } from
|
9
|
-
import { kTokDivClose, kTokDivOpen } from
|
10
|
-
import { kTokFigCaptionClose, kTokFigCaptionOpen, mutateToFigureTok } from
|
11
|
-
const kFigureDivRuleName =
|
12
|
-
const kFigurePrefix =
|
7
|
+
import { readAttrValue } from './utils/markdownit';
|
8
|
+
import { kTokInline, kTokParaClose, kTokParaOpen } from './utils/tok';
|
9
|
+
import { kTokDivClose, kTokDivOpen } from './divs';
|
10
|
+
import { kTokFigCaptionClose, kTokFigCaptionOpen, mutateToFigureTok } from './figures';
|
11
|
+
const kFigureDivRuleName = 'quarto-figure-divs';
|
12
|
+
const kFigurePrefix = 'fig-';
|
13
13
|
export const figureDivsPlugin = (md) => {
|
14
14
|
// Handle pandoc-style divs
|
15
|
-
md.core.ruler.push(kFigureDivRuleName,
|
16
|
-
|
15
|
+
md.core.ruler.push(kFigureDivRuleName, state => {
|
16
|
+
const isFigureDiv = [];
|
17
17
|
for (let i = 0; i < state.tokens.length; i++) {
|
18
18
|
const token = state.tokens[i];
|
19
19
|
if (token.type === kTokDivOpen) {
|
20
|
-
const id = readAttrValue(
|
20
|
+
const id = readAttrValue('id', token.attrs);
|
21
21
|
if (id === null || id === void 0 ? void 0 : id.startsWith(kFigurePrefix)) {
|
22
22
|
isFigureDiv.push(true);
|
23
|
-
mutateToFigureTok(token,
|
23
|
+
mutateToFigureTok(token, 'open');
|
24
24
|
}
|
25
25
|
else {
|
26
26
|
// Note the div, but not a figure div
|
@@ -35,19 +35,20 @@ export const figureDivsPlugin = (md) => {
|
|
35
35
|
const maybeParaStart = state.tokens[i - 3];
|
36
36
|
const maybeInline = state.tokens[i - 2];
|
37
37
|
const maybeParaEnd = state.tokens[i - 1];
|
38
|
-
if (maybeParaStart.type === kTokParaOpen &&
|
39
|
-
|
40
|
-
|
38
|
+
if (maybeParaStart.type === kTokParaOpen &&
|
39
|
+
maybeParaEnd.type === kTokParaClose &&
|
40
|
+
maybeInline.type === kTokInline) {
|
41
|
+
mutateToFigCaption(state.tokens[i - 3], 'open');
|
42
|
+
mutateToFigCaption(state.tokens[i - 1], 'close');
|
41
43
|
}
|
42
44
|
}
|
43
|
-
mutateToFigureTok(token,
|
45
|
+
mutateToFigureTok(token, 'close');
|
44
46
|
}
|
45
47
|
}
|
46
48
|
}
|
47
49
|
});
|
48
50
|
};
|
49
51
|
const mutateToFigCaption = (token, type) => {
|
50
|
-
token.tag =
|
51
|
-
token.type = type ===
|
52
|
+
token.tag = 'figcaption';
|
53
|
+
token.type = type === 'open' ? kTokFigCaptionClose : kTokFigCaptionOpen;
|
52
54
|
};
|
53
|
-
//# sourceMappingURL=figure-divs.js.map
|
package/lib/plugins/figures.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import MarkdownIt from
|
2
|
-
import Token from
|
1
|
+
import MarkdownIt from 'markdown-it';
|
2
|
+
import Token from 'markdown-it/lib/token';
|
3
3
|
export interface FigureOptions {
|
4
4
|
dataType?: boolean;
|
5
5
|
link?: boolean;
|
@@ -12,6 +12,5 @@ export declare const kTokFigureOpen = "figure_open";
|
|
12
12
|
export declare const kTokFigureClose = "figure_close";
|
13
13
|
export declare const kTokFigCaptionOpen = "figcaption_open";
|
14
14
|
export declare const kTokFigCaptionClose = "figcaption_close";
|
15
|
-
export declare const mutateToFigureTok: (token: Token, type:
|
15
|
+
export declare const mutateToFigureTok: (token: Token, type: 'open' | 'close') => void;
|
16
16
|
export declare function figuresPlugin(md: MarkdownIt, options: FigureOptions): void;
|
17
|
-
//# sourceMappingURL=figures.d.ts.map
|
package/lib/plugins/figures.js
CHANGED
@@ -4,24 +4,24 @@
|
|
4
4
|
* Copyright (C) 2020-2023 Posit Software, PBC
|
5
5
|
*
|
6
6
|
*/
|
7
|
-
import { kTokParaClose, kTokParaOpen } from
|
8
|
-
export const kTokFigureOpen =
|
9
|
-
export const kTokFigureClose =
|
10
|
-
export const kTokFigCaptionOpen =
|
11
|
-
export const kTokFigCaptionClose =
|
7
|
+
import { kTokParaClose, kTokParaOpen } from './utils/tok';
|
8
|
+
export const kTokFigureOpen = 'figure_open';
|
9
|
+
export const kTokFigureClose = 'figure_close';
|
10
|
+
export const kTokFigCaptionOpen = 'figcaption_open';
|
11
|
+
export const kTokFigCaptionClose = 'figcaption_close';
|
12
12
|
export const mutateToFigureTok = (token, type) => {
|
13
|
-
token.type = type ===
|
14
|
-
token.tag =
|
13
|
+
token.type = type === 'open' ? kTokFigureOpen : kTokFigureClose;
|
14
|
+
token.tag = 'figure';
|
15
15
|
};
|
16
16
|
export function figuresPlugin(md, options) {
|
17
17
|
options = options || {};
|
18
|
-
md.core.ruler.before(
|
18
|
+
md.core.ruler.before('linkify', 'implicit_figures', state => {
|
19
19
|
// reset tabIndex on md.render()
|
20
20
|
let tabIndex = 1;
|
21
21
|
// do not process first and last token
|
22
22
|
for (let i = 1, l = state.tokens.length; i < l - 1; ++i) {
|
23
23
|
const token = state.tokens[i];
|
24
|
-
if (token.type !==
|
24
|
+
if (token.type !== 'inline') {
|
25
25
|
continue;
|
26
26
|
}
|
27
27
|
// children: image alone, or link_open -> image -> link_close
|
@@ -30,14 +30,14 @@ export function figuresPlugin(md, options) {
|
|
30
30
|
continue;
|
31
31
|
}
|
32
32
|
// one child, should be img
|
33
|
-
if (token.children.length === 1 && token.children[0].type !==
|
33
|
+
if (token.children.length === 1 && token.children[0].type !== 'image') {
|
34
34
|
continue;
|
35
35
|
}
|
36
36
|
// three children, should be image enclosed in link
|
37
37
|
if (token.children.length === 3 &&
|
38
|
-
(token.children[0].type !==
|
39
|
-
token.children[1].type !==
|
40
|
-
token.children[2].type !==
|
38
|
+
(token.children[0].type !== 'link_open' ||
|
39
|
+
token.children[1].type !== 'image' ||
|
40
|
+
token.children[2].type !== 'link_close')) {
|
41
41
|
continue;
|
42
42
|
}
|
43
43
|
// prev token is paragraph open
|
@@ -59,41 +59,40 @@ export function figuresPlugin(md, options) {
|
|
59
59
|
// Next token is paragraph close.
|
60
60
|
// Lets replace the paragraph tokens with figure tokens.
|
61
61
|
const figure = state.tokens[i - 1];
|
62
|
-
mutateToFigureTok(figure,
|
63
|
-
mutateToFigureTok(state.tokens[i + 1],
|
64
|
-
if (options.dataType
|
65
|
-
state.tokens[i - 1].attrPush([
|
62
|
+
mutateToFigureTok(figure, 'open');
|
63
|
+
mutateToFigureTok(state.tokens[i + 1], 'close');
|
64
|
+
if (options.dataType === true) {
|
65
|
+
state.tokens[i - 1].attrPush(['data-type', 'image']);
|
66
66
|
}
|
67
|
-
if (options.link
|
68
|
-
token.children.unshift(new state.Token(
|
69
|
-
const src = image.attrGet(
|
67
|
+
if (options.link === true && token.children.length === 1) {
|
68
|
+
token.children.unshift(new state.Token('link_open', 'a', 1));
|
69
|
+
const src = image.attrGet('src');
|
70
70
|
if (src !== null) {
|
71
|
-
token.children[0].attrPush([
|
71
|
+
token.children[0].attrPush(['href', src]);
|
72
72
|
}
|
73
|
-
token.children.push(new state.Token(
|
73
|
+
token.children.push(new state.Token('link_close', 'a', -1));
|
74
74
|
}
|
75
|
-
if (options.figcaption
|
75
|
+
if (options.figcaption === true) {
|
76
76
|
if (image.children && image.children.length) {
|
77
|
-
token.children.push(new state.Token(kTokFigCaptionOpen,
|
77
|
+
token.children.push(new state.Token(kTokFigCaptionOpen, 'figcaption', 1));
|
78
78
|
token.children.splice(token.children.length, 0, ...image.children);
|
79
|
-
token.children.push(new state.Token(kTokFigCaptionClose,
|
79
|
+
token.children.push(new state.Token(kTokFigCaptionClose, 'figcaption', -1));
|
80
80
|
image.children.length = 0;
|
81
81
|
}
|
82
82
|
}
|
83
83
|
if (options.copyAttrs && image.attrs) {
|
84
|
-
const f = options.copyAttrs === true ?
|
84
|
+
const f = options.copyAttrs === true ? '' : options.copyAttrs;
|
85
85
|
figure.attrs = image.attrs.filter(([k]) => k.match(f));
|
86
86
|
}
|
87
|
-
if (options.tabindex
|
87
|
+
if (options.tabindex === true) {
|
88
88
|
// add a tabindex property
|
89
89
|
// you could use this with css-tricks.com/expanding-images-html5
|
90
|
-
state.tokens[i - 1].attrPush([
|
90
|
+
state.tokens[i - 1].attrPush(['tabindex', String(tabIndex)]);
|
91
91
|
tabIndex++;
|
92
92
|
}
|
93
|
-
if (options.lazyLoading
|
94
|
-
image.attrPush([
|
93
|
+
if (options.lazyLoading === true) {
|
94
|
+
image.attrPush(['loading', 'lazy']);
|
95
95
|
}
|
96
96
|
}
|
97
97
|
});
|
98
98
|
}
|
99
|
-
//# sourceMappingURL=figures.js.map
|
@@ -1,8 +1,7 @@
|
|
1
1
|
/**
|
2
|
-
* getCells parses the lines found for a certain row, and transforms these to
|
3
|
-
* the separate cell lines.
|
4
|
-
*
|
5
|
-
* @param lines The lines for the row.
|
6
|
-
*/
|
2
|
+
* getCells parses the lines found for a certain row, and transforms these to
|
3
|
+
* the separate cell lines.
|
4
|
+
*
|
5
|
+
* @param lines The lines for the row.
|
6
|
+
*/
|
7
7
|
export default function getCells(lines: string[][]): string[][];
|
8
|
-
//# sourceMappingURL=GetCells.d.ts.map
|
@@ -3,19 +3,18 @@
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the project root for license information.
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
5
5
|
/**
|
6
|
-
* getCells parses the lines found for a certain row, and transforms these to
|
7
|
-
* the separate cell lines.
|
8
|
-
*
|
9
|
-
* @param lines The lines for the row.
|
10
|
-
*/
|
6
|
+
* getCells parses the lines found for a certain row, and transforms these to
|
7
|
+
* the separate cell lines.
|
8
|
+
*
|
9
|
+
* @param lines The lines for the row.
|
10
|
+
*/
|
11
11
|
export default function getCells(lines) {
|
12
12
|
const cells = [];
|
13
13
|
for (let i = 0; i < lines[0].length; i++) {
|
14
14
|
let cell = [];
|
15
15
|
for (let j = 0; j < lines.length; j++) {
|
16
16
|
const s = trimEnd(lines[j][i]);
|
17
|
-
if (
|
18
|
-
(cell.length === 0)) {
|
17
|
+
if (s.length === 0 && cell.length === 0) {
|
19
18
|
// skip leading empty lines
|
20
19
|
continue;
|
21
20
|
}
|
@@ -42,4 +41,3 @@ function trimEnd(s) {
|
|
42
41
|
}
|
43
42
|
return s.slice(0, s.indexOf(trimmed) + trimmed.length);
|
44
43
|
}
|
45
|
-
//# sourceMappingURL=GetCells.js.map
|
@@ -1,8 +1,7 @@
|
|
1
1
|
/**
|
2
|
-
* getColumnWidths parses the provided line and returns the associated column widths.
|
3
|
-
*
|
4
|
-
* @param line The separator line to parse for the column widths.
|
5
|
-
* @returns The column widths for the provided line, or an empty array if the line is invalid.
|
6
|
-
*/
|
2
|
+
* getColumnWidths parses the provided line and returns the associated column widths.
|
3
|
+
*
|
4
|
+
* @param line The separator line to parse for the column widths.
|
5
|
+
* @returns The column widths for the provided line, or an empty array if the line is invalid.
|
6
|
+
*/
|
7
7
|
export default function getColumnWidths(line: string): number[];
|
8
|
-
//# sourceMappingURL=GetColumnWidths.d.ts.map
|
@@ -3,25 +3,20 @@
|
|
3
3
|
* Licensed under the MIT License. See LICENSE in the project root for license information.
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
5
5
|
/**
|
6
|
-
* getColumnWidths parses the provided line and returns the associated column widths.
|
7
|
-
*
|
8
|
-
* @param line The separator line to parse for the column widths.
|
9
|
-
* @returns The column widths for the provided line, or an empty array if the line is invalid.
|
10
|
-
*/
|
6
|
+
* getColumnWidths parses the provided line and returns the associated column widths.
|
7
|
+
*
|
8
|
+
* @param line The separator line to parse for the column widths.
|
9
|
+
* @returns The column widths for the provided line, or an empty array if the line is invalid.
|
10
|
+
*/
|
11
11
|
export default function getColumnWidths(line) {
|
12
12
|
// try to parse as a row separator line
|
13
|
-
let columnMatch = line
|
14
|
-
|
15
|
-
.match(/[:-][-]+[:-]\+/g);
|
16
|
-
if (columnMatch == null) {
|
13
|
+
let columnMatch = line.substr(1).match(/[:-][-]+[:-]\+/g);
|
14
|
+
if (columnMatch === null) {
|
17
15
|
// try to parse as a header separator line
|
18
|
-
columnMatch = line
|
19
|
-
.substr(1)
|
20
|
-
.match(/[:=][=]+[:=]\+/g);
|
16
|
+
columnMatch = line.substr(1).match(/[:=][=]+[:=]\+/g);
|
21
17
|
}
|
22
|
-
if (columnMatch
|
18
|
+
if (columnMatch === null) {
|
23
19
|
return [];
|
24
20
|
}
|
25
21
|
return columnMatch.map(s => s.length);
|
26
22
|
}
|
27
|
-
//# sourceMappingURL=GetColumnWidths.js.map
|
@@ -1,5 +1,4 @@
|
|
1
|
-
import * as MarkdownIt from
|
2
|
-
import IState from
|
3
|
-
import ParseTableResult from
|
1
|
+
import * as MarkdownIt from 'markdown-it';
|
2
|
+
import IState from '../../interfaces/markdown-it/IState';
|
3
|
+
import ParseTableResult from './ParseTableResult';
|
4
4
|
export default function emitTable(md: MarkdownIt, state: IState, result: ParseTableResult): void;
|
5
|
-
//# sourceMappingURL=EmitTable.d.ts.map
|