@quarto/jupyterlab-quarto 0.1.45 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +1 -1
- package/README.md +45 -12
- 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 +103 -37
- 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.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
|