docusaurus-plugin-gitbook 0.1.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/README.md +210 -0
- package/lib/index.d.ts +51 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +39 -0
- package/lib/index.js.map +1 -0
- package/lib/parser/index.d.ts +6 -0
- package/lib/parser/index.d.ts.map +1 -0
- package/lib/parser/index.js +6 -0
- package/lib/parser/index.js.map +1 -0
- package/lib/parser/parser.d.ts +43 -0
- package/lib/parser/parser.d.ts.map +1 -0
- package/lib/parser/parser.js +192 -0
- package/lib/parser/parser.js.map +1 -0
- package/lib/parser/tokenizer.d.ts +37 -0
- package/lib/parser/tokenizer.d.ts.map +1 -0
- package/lib/parser/tokenizer.js +172 -0
- package/lib/parser/tokenizer.js.map +1 -0
- package/lib/rehype/index.d.ts +7 -0
- package/lib/rehype/index.d.ts.map +1 -0
- package/lib/rehype/index.js +6 -0
- package/lib/rehype/index.js.map +1 -0
- package/lib/rehype/plugin.d.ts +18 -0
- package/lib/rehype/plugin.d.ts.map +1 -0
- package/lib/rehype/plugin.js +31 -0
- package/lib/rehype/plugin.js.map +1 -0
- package/lib/rehype/transformers/all.d.ts +8 -0
- package/lib/rehype/transformers/all.d.ts.map +1 -0
- package/lib/rehype/transformers/all.js +10 -0
- package/lib/rehype/transformers/all.js.map +1 -0
- package/lib/rehype/transformers/button.d.ts +17 -0
- package/lib/rehype/transformers/button.d.ts.map +1 -0
- package/lib/rehype/transformers/button.js +46 -0
- package/lib/rehype/transformers/button.js.map +1 -0
- package/lib/rehype/transformers/cards.d.ts +17 -0
- package/lib/rehype/transformers/cards.d.ts.map +1 -0
- package/lib/rehype/transformers/cards.js +111 -0
- package/lib/rehype/transformers/cards.js.map +1 -0
- package/lib/rehype/transformers/expression.d.ts +17 -0
- package/lib/rehype/transformers/expression.d.ts.map +1 -0
- package/lib/rehype/transformers/expression.js +50 -0
- package/lib/rehype/transformers/expression.js.map +1 -0
- package/lib/rehype/transformers/icon.d.ts +18 -0
- package/lib/rehype/transformers/icon.d.ts.map +1 -0
- package/lib/rehype/transformers/icon.js +48 -0
- package/lib/rehype/transformers/icon.js.map +1 -0
- package/lib/rehype/transformers/index.d.ts +26 -0
- package/lib/rehype/transformers/index.d.ts.map +1 -0
- package/lib/rehype/transformers/index.js +31 -0
- package/lib/rehype/transformers/index.js.map +1 -0
- package/lib/remark/index.d.ts +8 -0
- package/lib/remark/index.d.ts.map +1 -0
- package/lib/remark/index.js +7 -0
- package/lib/remark/index.js.map +1 -0
- package/lib/remark/plugin.d.ts +22 -0
- package/lib/remark/plugin.d.ts.map +1 -0
- package/lib/remark/plugin.js +231 -0
- package/lib/remark/plugin.js.map +1 -0
- package/lib/remark/transformers/all.d.ts +14 -0
- package/lib/remark/transformers/all.d.ts.map +1 -0
- package/lib/remark/transformers/all.js +16 -0
- package/lib/remark/transformers/all.js.map +1 -0
- package/lib/remark/transformers/code.d.ts +13 -0
- package/lib/remark/transformers/code.d.ts.map +1 -0
- package/lib/remark/transformers/code.js +35 -0
- package/lib/remark/transformers/code.js.map +1 -0
- package/lib/remark/transformers/columns.d.ts +17 -0
- package/lib/remark/transformers/columns.d.ts.map +1 -0
- package/lib/remark/transformers/columns.js +41 -0
- package/lib/remark/transformers/columns.js.map +1 -0
- package/lib/remark/transformers/embed.d.ts +12 -0
- package/lib/remark/transformers/embed.d.ts.map +1 -0
- package/lib/remark/transformers/embed.js +23 -0
- package/lib/remark/transformers/embed.js.map +1 -0
- package/lib/remark/transformers/file.d.ts +13 -0
- package/lib/remark/transformers/file.d.ts.map +1 -0
- package/lib/remark/transformers/file.js +26 -0
- package/lib/remark/transformers/file.js.map +1 -0
- package/lib/remark/transformers/hint.d.ts +19 -0
- package/lib/remark/transformers/hint.d.ts.map +1 -0
- package/lib/remark/transformers/hint.js +37 -0
- package/lib/remark/transformers/hint.js.map +1 -0
- package/lib/remark/transformers/include.d.ts +16 -0
- package/lib/remark/transformers/include.d.ts.map +1 -0
- package/lib/remark/transformers/include.js +28 -0
- package/lib/remark/transformers/include.js.map +1 -0
- package/lib/remark/transformers/index.d.ts +27 -0
- package/lib/remark/transformers/index.d.ts.map +1 -0
- package/lib/remark/transformers/index.js +32 -0
- package/lib/remark/transformers/index.js.map +1 -0
- package/lib/remark/transformers/openapi.d.ts +17 -0
- package/lib/remark/transformers/openapi.d.ts.map +1 -0
- package/lib/remark/transformers/openapi.js +30 -0
- package/lib/remark/transformers/openapi.js.map +1 -0
- package/lib/remark/transformers/stepper.d.ts +17 -0
- package/lib/remark/transformers/stepper.d.ts.map +1 -0
- package/lib/remark/transformers/stepper.js +44 -0
- package/lib/remark/transformers/stepper.js.map +1 -0
- package/lib/remark/transformers/tabs.d.ts +18 -0
- package/lib/remark/transformers/tabs.d.ts.map +1 -0
- package/lib/remark/transformers/tabs.js +45 -0
- package/lib/remark/transformers/tabs.js.map +1 -0
- package/lib/remark/transformers/updates.d.ts +17 -0
- package/lib/remark/transformers/updates.d.ts.map +1 -0
- package/lib/remark/transformers/updates.js +44 -0
- package/lib/remark/transformers/updates.js.map +1 -0
- package/lib/remark/utils.d.ts +39 -0
- package/lib/remark/utils.d.ts.map +1 -0
- package/lib/remark/utils.js +139 -0
- package/lib/remark/utils.js.map +1 -0
- package/lib/theme/FAIcon/index.d.ts +10 -0
- package/lib/theme/FAIcon/index.d.ts.map +1 -0
- package/lib/theme/FAIcon/index.js +5 -0
- package/lib/theme/FAIcon/index.js.map +1 -0
- package/lib/theme/GitBookButton/index.d.ts +9 -0
- package/lib/theme/GitBookButton/index.d.ts.map +1 -0
- package/lib/theme/GitBookButton/index.js +6 -0
- package/lib/theme/GitBookButton/index.js.map +1 -0
- package/lib/theme/GitBookButton/styles.module.css +66 -0
- package/lib/theme/GitBookCard/index.d.ts +9 -0
- package/lib/theme/GitBookCard/index.d.ts.map +1 -0
- package/lib/theme/GitBookCard/index.js +6 -0
- package/lib/theme/GitBookCard/index.js.map +1 -0
- package/lib/theme/GitBookCard/styles.module.css +51 -0
- package/lib/theme/GitBookCards/index.d.ts +9 -0
- package/lib/theme/GitBookCards/index.d.ts.map +1 -0
- package/lib/theme/GitBookCards/index.js +6 -0
- package/lib/theme/GitBookCards/index.js.map +1 -0
- package/lib/theme/GitBookCards/styles.module.css +16 -0
- package/lib/theme/GitBookCodeBlock/index.d.ts +9 -0
- package/lib/theme/GitBookCodeBlock/index.d.ts.map +1 -0
- package/lib/theme/GitBookCodeBlock/index.js +6 -0
- package/lib/theme/GitBookCodeBlock/index.js.map +1 -0
- package/lib/theme/GitBookCodeBlock/styles.module.css +59 -0
- package/lib/theme/GitBookColumn/index.d.ts +9 -0
- package/lib/theme/GitBookColumn/index.d.ts.map +1 -0
- package/lib/theme/GitBookColumn/index.js +6 -0
- package/lib/theme/GitBookColumn/index.js.map +1 -0
- package/lib/theme/GitBookColumn/styles.module.css +16 -0
- package/lib/theme/GitBookColumns/index.d.ts +9 -0
- package/lib/theme/GitBookColumns/index.d.ts.map +1 -0
- package/lib/theme/GitBookColumns/index.js +6 -0
- package/lib/theme/GitBookColumns/index.js.map +1 -0
- package/lib/theme/GitBookColumns/styles.module.css +17 -0
- package/lib/theme/GitBookEmbed/index.d.ts +9 -0
- package/lib/theme/GitBookEmbed/index.d.ts.map +1 -0
- package/lib/theme/GitBookEmbed/index.js +71 -0
- package/lib/theme/GitBookEmbed/index.js.map +1 -0
- package/lib/theme/GitBookEmbed/styles.module.css +37 -0
- package/lib/theme/GitBookExpression/index.d.ts +13 -0
- package/lib/theme/GitBookExpression/index.d.ts.map +1 -0
- package/lib/theme/GitBookExpression/index.js +12 -0
- package/lib/theme/GitBookExpression/index.js.map +1 -0
- package/lib/theme/GitBookExpression/styles.module.css +16 -0
- package/lib/theme/GitBookFile/index.d.ts +9 -0
- package/lib/theme/GitBookFile/index.d.ts.map +1 -0
- package/lib/theme/GitBookFile/index.js +42 -0
- package/lib/theme/GitBookFile/index.js.map +1 -0
- package/lib/theme/GitBookFile/styles.module.css +61 -0
- package/lib/theme/GitBookInclude/index.d.ts +19 -0
- package/lib/theme/GitBookInclude/index.d.ts.map +1 -0
- package/lib/theme/GitBookInclude/index.js +8 -0
- package/lib/theme/GitBookInclude/index.js.map +1 -0
- package/lib/theme/GitBookInclude/styles.module.css +77 -0
- package/lib/theme/GitBookOpenAPI/index.d.ts +14 -0
- package/lib/theme/GitBookOpenAPI/index.d.ts.map +1 -0
- package/lib/theme/GitBookOpenAPI/index.js +73 -0
- package/lib/theme/GitBookOpenAPI/index.js.map +1 -0
- package/lib/theme/GitBookOpenAPI/styles.module.css +214 -0
- package/lib/theme/GitBookStep/index.d.ts +13 -0
- package/lib/theme/GitBookStep/index.d.ts.map +1 -0
- package/lib/theme/GitBookStep/index.js +6 -0
- package/lib/theme/GitBookStep/index.js.map +1 -0
- package/lib/theme/GitBookStep/styles.module.css +62 -0
- package/lib/theme/GitBookStepper/index.d.ts +9 -0
- package/lib/theme/GitBookStepper/index.d.ts.map +1 -0
- package/lib/theme/GitBookStepper/index.js +6 -0
- package/lib/theme/GitBookStepper/index.js.map +1 -0
- package/lib/theme/GitBookStepper/styles.module.css +7 -0
- package/lib/theme/GitBookTab/index.d.ts +12 -0
- package/lib/theme/GitBookTab/index.d.ts.map +1 -0
- package/lib/theme/GitBookTab/index.js +9 -0
- package/lib/theme/GitBookTab/index.js.map +1 -0
- package/lib/theme/GitBookTab/styles.module.css +15 -0
- package/lib/theme/GitBookTabs/index.d.ts +9 -0
- package/lib/theme/GitBookTabs/index.d.ts.map +1 -0
- package/lib/theme/GitBookTabs/index.js +32 -0
- package/lib/theme/GitBookTabs/index.js.map +1 -0
- package/lib/theme/GitBookTabs/styles.module.css +57 -0
- package/lib/theme/GitBookUpdate/index.d.ts +9 -0
- package/lib/theme/GitBookUpdate/index.d.ts.map +1 -0
- package/lib/theme/GitBookUpdate/index.js +21 -0
- package/lib/theme/GitBookUpdate/index.js.map +1 -0
- package/lib/theme/GitBookUpdate/styles.module.css +68 -0
- package/lib/theme/GitBookUpdates/index.d.ts +9 -0
- package/lib/theme/GitBookUpdates/index.d.ts.map +1 -0
- package/lib/theme/GitBookUpdates/index.js +6 -0
- package/lib/theme/GitBookUpdates/index.js.map +1 -0
- package/lib/theme/GitBookUpdates/styles.module.css +15 -0
- package/lib/theme/gitbook.css +205 -0
- package/lib/theme-types.d.ts +129 -0
- package/lib/theme-types.d.ts.map +1 -0
- package/lib/theme-types.js +5 -0
- package/lib/theme-types.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitBook tag tokenizer
|
|
3
|
+
* Tokenizes {% tag %} syntax into structured tokens
|
|
4
|
+
*/
|
|
5
|
+
// Regex to match {% ... %} tags
|
|
6
|
+
const TAG_PATTERN = /\{%\s*([^%]+?)\s*%\}/g;
|
|
7
|
+
// Regex to parse tag content: tagname followed by optional attributes
|
|
8
|
+
const TAG_CONTENT_PATTERN = /^(end)?(\w+)(?:\s+(.*))?$/;
|
|
9
|
+
// Regex to parse attributes: key="value" or key='value' or key=value or just key
|
|
10
|
+
const ATTR_PATTERN = /(\w+)(?:=(?:"([^"]*)"|'([^']*)'|(\S+)))?/g;
|
|
11
|
+
// Regex to match standalone quoted strings (positional arguments)
|
|
12
|
+
const POSITIONAL_QUOTED_PATTERN = /^"([^"]*)"|^'([^']*)'/;
|
|
13
|
+
/**
|
|
14
|
+
* Parse attributes string into key-value pairs
|
|
15
|
+
*/
|
|
16
|
+
export function parseAttributes(attrString) {
|
|
17
|
+
const attributes = {};
|
|
18
|
+
if (!attrString) {
|
|
19
|
+
return attributes;
|
|
20
|
+
}
|
|
21
|
+
// Check for positional quoted string first (e.g., include "path/to/file.md")
|
|
22
|
+
const positionalMatch = POSITIONAL_QUOTED_PATTERN.exec(attrString.trim());
|
|
23
|
+
if (positionalMatch) {
|
|
24
|
+
// Store positional value with special key
|
|
25
|
+
attributes._positional = positionalMatch[1] ?? positionalMatch[2];
|
|
26
|
+
// Continue parsing remaining attributes after the positional value
|
|
27
|
+
const remaining = attrString.trim().slice(positionalMatch[0].length).trim();
|
|
28
|
+
if (remaining) {
|
|
29
|
+
let match;
|
|
30
|
+
ATTR_PATTERN.lastIndex = 0;
|
|
31
|
+
while ((match = ATTR_PATTERN.exec(remaining)) !== null) {
|
|
32
|
+
const key = match[1];
|
|
33
|
+
const value = match[2] ?? match[3] ?? match[4] ?? 'true';
|
|
34
|
+
attributes[key] = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return attributes;
|
|
38
|
+
}
|
|
39
|
+
let match;
|
|
40
|
+
ATTR_PATTERN.lastIndex = 0;
|
|
41
|
+
while ((match = ATTR_PATTERN.exec(attrString)) !== null) {
|
|
42
|
+
const key = match[1];
|
|
43
|
+
// Value can be in double quotes, single quotes, unquoted, or boolean (no value)
|
|
44
|
+
const value = match[2] ?? match[3] ?? match[4] ?? 'true';
|
|
45
|
+
attributes[key] = value;
|
|
46
|
+
}
|
|
47
|
+
return attributes;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Tokenize a single tag match
|
|
51
|
+
*/
|
|
52
|
+
function tokenizeTag(match) {
|
|
53
|
+
const raw = match[0];
|
|
54
|
+
const content = match[1].trim();
|
|
55
|
+
const start = match.index;
|
|
56
|
+
const end = start + raw.length;
|
|
57
|
+
const contentMatch = TAG_CONTENT_PATTERN.exec(content);
|
|
58
|
+
if (!contentMatch) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const isEnd = contentMatch[1] === 'end';
|
|
62
|
+
const name = contentMatch[2];
|
|
63
|
+
const attrString = contentMatch[3] || '';
|
|
64
|
+
// Self-closing tags are tags that don't have content (like embed, include)
|
|
65
|
+
// We'll determine this based on known self-closing tags or context
|
|
66
|
+
const selfClosingTags = ['embed', 'include'];
|
|
67
|
+
const isSelfClosing = !isEnd && selfClosingTags.includes(name);
|
|
68
|
+
return {
|
|
69
|
+
type: isEnd ? 'close' : isSelfClosing ? 'self-closing' : 'open',
|
|
70
|
+
name,
|
|
71
|
+
attributes: isEnd ? {} : parseAttributes(attrString),
|
|
72
|
+
raw,
|
|
73
|
+
start,
|
|
74
|
+
end,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Find fenced code block regions in text.
|
|
79
|
+
* Returns an array of {start, end} character offsets for each code block.
|
|
80
|
+
*/
|
|
81
|
+
function findCodeBlockRegions(text) {
|
|
82
|
+
const regions = [];
|
|
83
|
+
const lines = text.split('\n');
|
|
84
|
+
let pos = 0;
|
|
85
|
+
let inCodeBlock = false;
|
|
86
|
+
let codeBlockStart = 0;
|
|
87
|
+
let fenceChar = '';
|
|
88
|
+
let fenceLen = 0;
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
const trimmed = line.trimStart();
|
|
91
|
+
if (!inCodeBlock) {
|
|
92
|
+
const openMatch = trimmed.match(/^(`{3,}|~{3,})/);
|
|
93
|
+
if (openMatch) {
|
|
94
|
+
inCodeBlock = true;
|
|
95
|
+
codeBlockStart = pos;
|
|
96
|
+
fenceChar = openMatch[1][0];
|
|
97
|
+
fenceLen = openMatch[1].length;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Closing fence must use same char and be at least as long
|
|
102
|
+
const closeMatch = trimmed.match(/^(`{3,}|~{3,})\s*$/);
|
|
103
|
+
if (closeMatch && closeMatch[1][0] === fenceChar && closeMatch[1].length >= fenceLen) {
|
|
104
|
+
inCodeBlock = false;
|
|
105
|
+
regions.push({ start: codeBlockStart, end: pos + line.length });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
pos += line.length + 1; // +1 for \n
|
|
109
|
+
}
|
|
110
|
+
return regions;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if a character offset falls inside any code block region.
|
|
114
|
+
*/
|
|
115
|
+
function isInsideCodeBlock(index, regions) {
|
|
116
|
+
return regions.some((r) => index >= r.start && index <= r.end);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Tokenize text into segments (tokens and text)
|
|
120
|
+
*/
|
|
121
|
+
export function tokenize(text) {
|
|
122
|
+
const segments = [];
|
|
123
|
+
let lastIndex = 0;
|
|
124
|
+
// Pre-compute fenced code block regions to skip tags inside them
|
|
125
|
+
const codeBlockRegions = findCodeBlockRegions(text);
|
|
126
|
+
TAG_PATTERN.lastIndex = 0;
|
|
127
|
+
let match;
|
|
128
|
+
while ((match = TAG_PATTERN.exec(text)) !== null) {
|
|
129
|
+
// Skip tags inside fenced code blocks — treat them as plain text
|
|
130
|
+
if (isInsideCodeBlock(match.index, codeBlockRegions)) {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// Add text before this tag
|
|
134
|
+
if (match.index > lastIndex) {
|
|
135
|
+
segments.push({
|
|
136
|
+
type: 'text',
|
|
137
|
+
content: text.slice(lastIndex, match.index),
|
|
138
|
+
start: lastIndex,
|
|
139
|
+
end: match.index,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Tokenize the tag
|
|
143
|
+
const token = tokenizeTag(match);
|
|
144
|
+
if (token) {
|
|
145
|
+
segments.push(token);
|
|
146
|
+
}
|
|
147
|
+
lastIndex = match.index + match[0].length;
|
|
148
|
+
}
|
|
149
|
+
// Add remaining text
|
|
150
|
+
if (lastIndex < text.length) {
|
|
151
|
+
segments.push({
|
|
152
|
+
type: 'text',
|
|
153
|
+
content: text.slice(lastIndex),
|
|
154
|
+
start: lastIndex,
|
|
155
|
+
end: text.length,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return segments;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if a segment is a token (not text)
|
|
162
|
+
*/
|
|
163
|
+
export function isToken(segment) {
|
|
164
|
+
return segment.type !== 'text';
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if a segment is a text segment
|
|
168
|
+
*/
|
|
169
|
+
export function isTextSegment(segment) {
|
|
170
|
+
return segment.type === 'text';
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rehype plugin exports
|
|
3
|
+
*/
|
|
4
|
+
export { default as rehypeGitBook } from './plugin.js';
|
|
5
|
+
export type { RehypeGitBookOptions } from './plugin.js';
|
|
6
|
+
export { registerRehypeTransformer, getTransformerForElement, hasTransformerForElement, type RehypeTransformer, type ElementMatcher, } from './transformers/index.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rehype/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rehype/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GAGzB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rehype plugin for GitBook HTML-based syntax
|
|
3
|
+
*/
|
|
4
|
+
import type { Root } from 'hast';
|
|
5
|
+
import type { Plugin } from 'unified';
|
|
6
|
+
import './transformers/all.js';
|
|
7
|
+
export interface RehypeGitBookOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Enable/disable specific transformations
|
|
10
|
+
*/
|
|
11
|
+
transforms?: Record<string, boolean>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The rehype plugin
|
|
15
|
+
*/
|
|
16
|
+
declare const rehypeGitBook: Plugin<[RehypeGitBookOptions?], Root>;
|
|
17
|
+
export default rehypeGitBook;
|
|
18
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/rehype/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAkB,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAQtC,OAAO,uBAAuB,CAAC;AAE/B,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAoBxD,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rehype plugin for GitBook HTML-based syntax
|
|
3
|
+
*/
|
|
4
|
+
import { visit } from 'unist-util-visit';
|
|
5
|
+
import { getTransformerForElement, hasTransformerForElement, } from './transformers/index.js';
|
|
6
|
+
// Import all transformers to register them
|
|
7
|
+
import './transformers/all.js';
|
|
8
|
+
/**
|
|
9
|
+
* The rehype plugin
|
|
10
|
+
*/
|
|
11
|
+
const rehypeGitBook = (_options = {}) => {
|
|
12
|
+
return (tree) => {
|
|
13
|
+
visit(tree, 'element', (node, index, parent) => {
|
|
14
|
+
if (index === undefined || !parent)
|
|
15
|
+
return;
|
|
16
|
+
// Check if we have a transformer for this element
|
|
17
|
+
if (!hasTransformerForElement(node))
|
|
18
|
+
return;
|
|
19
|
+
const transformer = getTransformerForElement(node);
|
|
20
|
+
if (!transformer)
|
|
21
|
+
return;
|
|
22
|
+
const transformed = transformer(node);
|
|
23
|
+
if (transformed) {
|
|
24
|
+
// Replace the node
|
|
25
|
+
parent.children[index] = transformed;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export default rehypeGitBook;
|
|
31
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/rehype/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,2CAA2C;AAC3C,OAAO,uBAAuB,CAAC;AAS/B;;GAEG;AACH,MAAM,aAAa,GAA0C,CAC3D,QAAQ,GAAG,EAAE,EACb,EAAE;IACF,OAAO,CAAC,IAAU,EAAE,EAAE;QACpB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM;gBAAE,OAAO;YAE3C,kDAAkD;YAClD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;gBAAE,OAAO;YAE5C,MAAM,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,mBAAmB;gBAClB,MAAM,CAAC,QAA6B,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/all.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,aAAa,CAAC;AACrB,OAAO,WAAW,CAAC;AACnB,OAAO,YAAY,CAAC;AACpB,OAAO,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import all rehype transformers to register them
|
|
3
|
+
*/
|
|
4
|
+
// This file imports all transformers to ensure they get registered
|
|
5
|
+
// when the rehype plugin is loaded
|
|
6
|
+
import './button.js';
|
|
7
|
+
import './icon.js';
|
|
8
|
+
import './cards.js';
|
|
9
|
+
import './expression.js';
|
|
10
|
+
//# sourceMappingURL=all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all.js","sourceRoot":"","sources":["../../../src/rehype/transformers/all.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mEAAmE;AACnE,mCAAmC;AAEnC,OAAO,aAAa,CAAC;AACrB,OAAO,WAAW,CAAC;AACnB,OAAO,YAAY,CAAC;AACpB,OAAO,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Button transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms <a class="button primary/secondary"> into GitBookButton component
|
|
5
|
+
*/
|
|
6
|
+
import type { Element } from 'hast';
|
|
7
|
+
import { type RehypeTransformer } from './index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Check if element is a button link
|
|
10
|
+
*/
|
|
11
|
+
declare function isButtonLink(element: Element): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Transform button link to GitBookButton
|
|
14
|
+
*/
|
|
15
|
+
declare const buttonTransformer: RehypeTransformer;
|
|
16
|
+
export { buttonTransformer, isButtonLink };
|
|
17
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/button.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ/C;AAED;;GAEG;AACH,QAAA,MAAM,iBAAiB,EAAE,iBAwBxB,CAAC;AAKF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Button transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms <a class="button primary/secondary"> into GitBookButton component
|
|
5
|
+
*/
|
|
6
|
+
import { registerRehypeTransformer } from './index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if element is a button link
|
|
9
|
+
*/
|
|
10
|
+
function isButtonLink(element) {
|
|
11
|
+
if (element.tagName !== 'a')
|
|
12
|
+
return false;
|
|
13
|
+
const className = element.properties?.className;
|
|
14
|
+
if (!className)
|
|
15
|
+
return false;
|
|
16
|
+
const classes = Array.isArray(className) ? className : [className];
|
|
17
|
+
return classes.some((c) => String(c).includes('button'));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Transform button link to GitBookButton
|
|
21
|
+
*/
|
|
22
|
+
const buttonTransformer = (element) => {
|
|
23
|
+
const className = element.properties?.className;
|
|
24
|
+
const classes = Array.isArray(className) ? className.map(String) : [String(className)];
|
|
25
|
+
const isPrimary = classes.some((c) => c.includes('primary'));
|
|
26
|
+
const isSecondary = classes.some((c) => c.includes('secondary'));
|
|
27
|
+
const variant = isPrimary ? 'primary' : isSecondary ? 'secondary' : 'primary';
|
|
28
|
+
const href = String(element.properties?.href || '');
|
|
29
|
+
const icon = element.properties?.dataIcon ? String(element.properties.dataIcon) : undefined;
|
|
30
|
+
// Create MDX JSX element
|
|
31
|
+
const mdxElement = {
|
|
32
|
+
type: 'element',
|
|
33
|
+
tagName: 'GitBookButton',
|
|
34
|
+
properties: {
|
|
35
|
+
href,
|
|
36
|
+
variant,
|
|
37
|
+
...(icon && { icon }),
|
|
38
|
+
},
|
|
39
|
+
children: element.children,
|
|
40
|
+
};
|
|
41
|
+
return mdxElement;
|
|
42
|
+
};
|
|
43
|
+
// Register transformer
|
|
44
|
+
registerRehypeTransformer(isButtonLink, buttonTransformer);
|
|
45
|
+
export { buttonTransformer, isButtonLink };
|
|
46
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/rehype/transformers/button.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,yBAAyB,EAA0B,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,SAAS,YAAY,CAAC,OAAgB;IACpC,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAsB,CAAC,OAAgB,EAAkB,EAAE;IAChF,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,yBAAyB;IACzB,MAAM,UAAU,GAAY;QAC1B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE;YACV,IAAI;YACJ,OAAO;YACP,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;SACtB;QACD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,uBAAuB;AACvB,yBAAyB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cards transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms <table data-view="cards"> into GitBookCards component
|
|
5
|
+
*/
|
|
6
|
+
import type { Element } from 'hast';
|
|
7
|
+
import { type RehypeTransformer } from './index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Check if element is a cards table
|
|
10
|
+
*/
|
|
11
|
+
declare function isCardsTable(element: Element): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Transform cards table to GitBookCards
|
|
14
|
+
*/
|
|
15
|
+
declare const cardsTransformer: RehypeTransformer;
|
|
16
|
+
export { cardsTransformer, isCardsTable };
|
|
17
|
+
//# sourceMappingURL=cards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/cards.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,MAAM,CAAC;AAC1D,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAG/C;AAoFD;;GAEG;AACH,QAAA,MAAM,gBAAgB,EAAE,iBA2BvB,CAAC;AAKF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cards transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms <table data-view="cards"> into GitBookCards component
|
|
5
|
+
*/
|
|
6
|
+
import { registerRehypeTransformer } from './index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if element is a cards table
|
|
9
|
+
*/
|
|
10
|
+
function isCardsTable(element) {
|
|
11
|
+
if (element.tagName !== 'table')
|
|
12
|
+
return false;
|
|
13
|
+
return element.properties?.dataView === 'cards';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Extract text content from element
|
|
17
|
+
*/
|
|
18
|
+
function getTextContent(node) {
|
|
19
|
+
if (node.type === 'text') {
|
|
20
|
+
return node.value;
|
|
21
|
+
}
|
|
22
|
+
if (node.type === 'element' && 'children' in node) {
|
|
23
|
+
return node.children.map(getTextContent).join('');
|
|
24
|
+
}
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Find element by tag name
|
|
29
|
+
*/
|
|
30
|
+
function findElement(element, tagName) {
|
|
31
|
+
if (element.tagName === tagName)
|
|
32
|
+
return element;
|
|
33
|
+
for (const child of element.children) {
|
|
34
|
+
if (child.type === 'element') {
|
|
35
|
+
const found = findElement(child, tagName);
|
|
36
|
+
if (found)
|
|
37
|
+
return found;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Find all elements by tag name
|
|
44
|
+
*/
|
|
45
|
+
function findAllElements(element, tagName) {
|
|
46
|
+
const results = [];
|
|
47
|
+
if (element.tagName === tagName) {
|
|
48
|
+
results.push(element);
|
|
49
|
+
}
|
|
50
|
+
for (const child of element.children) {
|
|
51
|
+
if (child.type === 'element') {
|
|
52
|
+
results.push(...findAllElements(child, tagName));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return results;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Extract card data from table rows
|
|
59
|
+
*/
|
|
60
|
+
function extractCards(table) {
|
|
61
|
+
const cards = [];
|
|
62
|
+
const tbody = findElement(table, 'tbody');
|
|
63
|
+
if (!tbody)
|
|
64
|
+
return cards;
|
|
65
|
+
const rows = findAllElements(tbody, 'tr');
|
|
66
|
+
for (const row of rows) {
|
|
67
|
+
const cells = findAllElements(row, 'td');
|
|
68
|
+
if (cells.length >= 2) {
|
|
69
|
+
const titleCell = cells[0];
|
|
70
|
+
const linkCell = cells[1];
|
|
71
|
+
const title = getTextContent(titleCell);
|
|
72
|
+
const link = findElement(linkCell, 'a');
|
|
73
|
+
const href = link?.properties?.href ? String(link.properties.href) : '';
|
|
74
|
+
if (title && href) {
|
|
75
|
+
cards.push({ title, href });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return cards;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Transform cards table to GitBookCards
|
|
83
|
+
*/
|
|
84
|
+
const cardsTransformer = (element) => {
|
|
85
|
+
const cards = extractCards(element);
|
|
86
|
+
if (cards.length === 0) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
// Create card elements
|
|
90
|
+
const cardElements = cards.map((card) => ({
|
|
91
|
+
type: 'element',
|
|
92
|
+
tagName: 'GitBookCard',
|
|
93
|
+
properties: {
|
|
94
|
+
title: card.title,
|
|
95
|
+
href: card.href,
|
|
96
|
+
},
|
|
97
|
+
children: [],
|
|
98
|
+
}));
|
|
99
|
+
// Create MDX JSX element
|
|
100
|
+
const mdxElement = {
|
|
101
|
+
type: 'element',
|
|
102
|
+
tagName: 'GitBookCards',
|
|
103
|
+
properties: {},
|
|
104
|
+
children: cardElements,
|
|
105
|
+
};
|
|
106
|
+
return mdxElement;
|
|
107
|
+
};
|
|
108
|
+
// Register transformer
|
|
109
|
+
registerRehypeTransformer(isCardsTable, cardsTransformer);
|
|
110
|
+
export { cardsTransformer, isCardsTable };
|
|
111
|
+
//# sourceMappingURL=cards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.js","sourceRoot":"","sources":["../../../src/rehype/transformers/cards.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expression transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms <code class="expression"> into GitBookExpression component
|
|
5
|
+
*/
|
|
6
|
+
import type { Element } from 'hast';
|
|
7
|
+
import { type RehypeTransformer } from './index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Check if element is an expression code element
|
|
10
|
+
*/
|
|
11
|
+
declare function isExpressionElement(element: Element): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Transform expression element to GitBookExpression
|
|
14
|
+
*/
|
|
15
|
+
declare const expressionTransformer: RehypeTransformer;
|
|
16
|
+
export { expressionTransformer, isExpressionElement };
|
|
17
|
+
//# sourceMappingURL=expression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/expression.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,MAAM,CAAC;AAC1C,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQtD;AAeD;;GAEG;AACH,QAAA,MAAM,qBAAqB,EAAE,iBAc5B,CAAC;AAKF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expression transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms <code class="expression"> into GitBookExpression component
|
|
5
|
+
*/
|
|
6
|
+
import { registerRehypeTransformer } from './index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if element is an expression code element
|
|
9
|
+
*/
|
|
10
|
+
function isExpressionElement(element) {
|
|
11
|
+
if (element.tagName !== 'code')
|
|
12
|
+
return false;
|
|
13
|
+
const className = element.properties?.className;
|
|
14
|
+
if (!className)
|
|
15
|
+
return false;
|
|
16
|
+
const classes = Array.isArray(className) ? className : [className];
|
|
17
|
+
return classes.some((c) => String(c) === 'expression');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get text content from element
|
|
21
|
+
*/
|
|
22
|
+
function getTextContent(element) {
|
|
23
|
+
let text = '';
|
|
24
|
+
for (const child of element.children) {
|
|
25
|
+
if (child.type === 'text') {
|
|
26
|
+
text += child.value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return text;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Transform expression element to GitBookExpression
|
|
33
|
+
*/
|
|
34
|
+
const expressionTransformer = (element) => {
|
|
35
|
+
const expression = getTextContent(element);
|
|
36
|
+
// Create MDX JSX element
|
|
37
|
+
const mdxElement = {
|
|
38
|
+
type: 'element',
|
|
39
|
+
tagName: 'GitBookExpression',
|
|
40
|
+
properties: {
|
|
41
|
+
expression,
|
|
42
|
+
},
|
|
43
|
+
children: [],
|
|
44
|
+
};
|
|
45
|
+
return mdxElement;
|
|
46
|
+
};
|
|
47
|
+
// Register transformer
|
|
48
|
+
registerRehypeTransformer(isExpressionElement, expressionTransformer);
|
|
49
|
+
export { expressionTransformer, isExpressionElement };
|
|
50
|
+
//# sourceMappingURL=expression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/rehype/transformers/expression.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,yBAAyB,EAA0B,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAgB;IACtC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,IAAK,KAAc,CAAC,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAsB,CAAC,OAAgB,EAAkB,EAAE;IACpF,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE3C,yBAAyB;IACzB,MAAM,UAAU,GAAY;QAC1B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mBAAmB;QAC5B,UAAU,EAAE;YACV,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,uBAAuB;AACvB,yBAAyB,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;AAEtE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon transformer
|
|
3
|
+
*
|
|
4
|
+
* Transforms <i class="fa-xxx"> into FAIcon component
|
|
5
|
+
* which renders Font Awesome icons via CSS classes.
|
|
6
|
+
*/
|
|
7
|
+
import type { Element } from 'hast';
|
|
8
|
+
import { type RehypeTransformer } from './index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Check if element is a font awesome icon
|
|
11
|
+
*/
|
|
12
|
+
declare function isIconElement(element: Element): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Transform icon element to FAIcon
|
|
15
|
+
*/
|
|
16
|
+
declare const iconTransformer: RehypeTransformer;
|
|
17
|
+
export { iconTransformer, isIconElement };
|
|
18
|
+
//# sourceMappingURL=icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/rehype/transformers/icon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQhD;AAUD;;GAEG;AACH,QAAA,MAAM,eAAe,EAAE,iBAiBtB,CAAC;AAKF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC"}
|