@bytechain.cn/colamd-themes 0.3.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.
Files changed (108) hide show
  1. package/.claude/skills/colamd-themes-preview.skill.md +333 -0
  2. package/.claude/skills/colamd-themes.skill.md +155 -0
  3. package/.hermes/skills/tools/colamd-themes/SKILL.md +159 -0
  4. package/.openclaw/skills/colamd-themes/SKILL.md +166 -0
  5. package/.opencode/skills/colamd-themes/SKILL.md +162 -0
  6. package/.trae/rules/colamd-themes.md +150 -0
  7. package/CHANGELOG.md +102 -0
  8. package/README.md +373 -0
  9. package/README_CN.md +373 -0
  10. package/RELEASENOTE.md +177 -0
  11. package/dist/cli.d.ts +2 -0
  12. package/dist/cli.js +208 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/color-systems.d.ts +17 -0
  15. package/dist/color-systems.js +251 -0
  16. package/dist/color-systems.js.map +1 -0
  17. package/dist/color-utils.d.ts +9 -0
  18. package/dist/color-utils.js +112 -0
  19. package/dist/color-utils.js.map +1 -0
  20. package/dist/contrast.d.ts +15 -0
  21. package/dist/contrast.js +63 -0
  22. package/dist/contrast.js.map +1 -0
  23. package/dist/docx-style-paradigm.d.ts +153 -0
  24. package/dist/docx-style-paradigm.js +640 -0
  25. package/dist/docx-style-paradigm.js.map +1 -0
  26. package/dist/export-cli.d.ts +10 -0
  27. package/dist/export-cli.js +266 -0
  28. package/dist/export-cli.js.map +1 -0
  29. package/dist/extractors/base.d.ts +6 -0
  30. package/dist/extractors/base.js +3 -0
  31. package/dist/extractors/base.js.map +1 -0
  32. package/dist/extractors/docx-extractor.d.ts +52 -0
  33. package/dist/extractors/docx-extractor.js +370 -0
  34. package/dist/extractors/docx-extractor.js.map +1 -0
  35. package/dist/extractors/pdf-extractor.d.ts +66 -0
  36. package/dist/extractors/pdf-extractor.js +430 -0
  37. package/dist/extractors/pdf-extractor.js.map +1 -0
  38. package/dist/extractors/url-extractor.d.ts +104 -0
  39. package/dist/extractors/url-extractor.js +761 -0
  40. package/dist/extractors/url-extractor.js.map +1 -0
  41. package/dist/generator.d.ts +4 -0
  42. package/dist/generator.js +71 -0
  43. package/dist/generator.js.map +1 -0
  44. package/dist/index.d.ts +10 -0
  45. package/dist/index.js +9 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mermaid-presets.d.ts +14 -0
  48. package/dist/mermaid-presets.js +122 -0
  49. package/dist/mermaid-presets.js.map +1 -0
  50. package/dist/models.d.ts +106 -0
  51. package/dist/models.js +92 -0
  52. package/dist/models.js.map +1 -0
  53. package/dist/renderer.d.ts +70 -0
  54. package/dist/renderer.js +204 -0
  55. package/dist/renderer.js.map +1 -0
  56. package/dist/templates/template.css +498 -0
  57. package/dist/templates/theme-paradigm.md +658 -0
  58. package/dist/templates/theme-template.hbs +370 -0
  59. package/dist/theme-store.d.ts +37 -0
  60. package/dist/theme-store.js +90 -0
  61. package/dist/theme-store.js.map +1 -0
  62. package/dist/validators.d.ts +26 -0
  63. package/dist/validators.js +144 -0
  64. package/dist/validators.js.map +1 -0
  65. package/package.json +36 -0
  66. package/skills/build-skills.sh +166 -0
  67. package/skills/colamd-themes/SKILL.md +148 -0
  68. package/src/cli.ts +200 -0
  69. package/src/color-systems.ts +289 -0
  70. package/src/color-utils.ts +120 -0
  71. package/src/contrast.ts +66 -0
  72. package/src/docx-style-paradigm.ts +811 -0
  73. package/src/export-cli.ts +301 -0
  74. package/src/extractors/base.ts +8 -0
  75. package/src/extractors/docx-extractor.ts +417 -0
  76. package/src/extractors/pdf-extractor.ts +527 -0
  77. package/src/extractors/url-extractor.ts +927 -0
  78. package/src/generator.ts +88 -0
  79. package/src/index.ts +29 -0
  80. package/src/mermaid-presets.ts +142 -0
  81. package/src/models.ts +212 -0
  82. package/src/renderer.ts +277 -0
  83. package/src/templates/template.css +498 -0
  84. package/src/templates/theme-paradigm.md +658 -0
  85. package/src/templates/theme-template.hbs +370 -0
  86. package/src/theme-store.ts +112 -0
  87. package/src/types/pdf-parse.d.ts +12 -0
  88. package/src/validators.ts +176 -0
  89. package/themes/.gitkeep +0 -0
  90. package/themes/academic-paper-pt.css +1805 -0
  91. package/themes/academic-paper.css +1099 -0
  92. package/themes/academic-style.css +2430 -0
  93. package/themes/colly.css +370 -0
  94. package/themes/elegant.css +671 -0
  95. package/themes/forest-ink.css +664 -0
  96. package/themes/guizang.css +732 -0
  97. package/themes/meeting-minutes.css +370 -0
  98. package/themes/pixso-design.css +1261 -0
  99. package/themes/salvator-blog.css +370 -0
  100. package/themes/swiss-design copy.css +746 -0
  101. package/themes/swiss-design.css +746 -0
  102. package/themes/template.css +498 -0
  103. package/themes/trae-blue.css +737 -0
  104. package/themes-preview/colly-preview.html +623 -0
  105. package/themes-preview/demo-content.md +187 -0
  106. package/themes-preview/meeting-minutes-preview.html +625 -0
  107. package/themes-preview/salvator-blog-preview.html +623 -0
  108. package/tsconfig.json +18 -0
@@ -0,0 +1,430 @@
1
+ /**
2
+ * PDF 文档样式提取器 — v2.0
3
+ *
4
+ * 增强功能:
5
+ * 1. 基于文本结构启发式分析提取各级标题样式
6
+ * 2. 检测正文字体、字号、行间距特征
7
+ * 3. 识别表格、代码块等特殊元素
8
+ * 4. 集成 DocxStyleParadigm 标准参考值填充缺失字段
9
+ * 5. 自动验证 WCAG 对比度合规性
10
+ *
11
+ * 技术说明:
12
+ * pdf-parse 默认不提供字体元数据,因此采用多层启发式策略:
13
+ * - 层级1:文本结构分析(短行/大写/编号 = 标题候选)
14
+ * - 层级2:格式特征检测(等宽文本 = 代码块)
15
+ * - 层级3:DocxStyleParadigm 标准参考值 fallback
16
+ */
17
+ import { readFileSync } from "node:fs";
18
+ import { basename } from "node:path";
19
+ import { makeThemeStyle, } from "../models.js";
20
+ import { normalizeThemeStyle } from "../color-utils.js";
21
+ import { ACADEMIC_PAPER_DEFAULTS, BUSINESS_REPORT_DEFAULTS, getRecommendedPreset, validateDocumentStyle, } from "../docx-style-paradigm.js";
22
+ export class PdfExtractor {
23
+ canHandle(source) {
24
+ return /\.pdf$/i.test(source);
25
+ }
26
+ async extract(source) {
27
+ const name = basename(source).replace(/\.pdf$/i, "");
28
+ const theme = makeThemeStyle(name, "pdf", source);
29
+ try {
30
+ const pdfParse = (await import("pdf-parse")).default;
31
+ const buffer = readFileSync(source);
32
+ const data = await pdfParse(buffer);
33
+ if (data.text) {
34
+ this.analyzeTextStructure(theme, data.text);
35
+ }
36
+ if (data.metadata) {
37
+ this.populateFromMetadata(theme, data.metadata);
38
+ }
39
+ if (data.info) {
40
+ this.detectDocumentType(theme, data.text, data.numpages);
41
+ }
42
+ }
43
+ catch (err) {
44
+ if (err.code === "ERR_MODULE_NOT_FOUND") {
45
+ throw new Error("pdf-parse 未安装,请运行: npm install pdf-parse");
46
+ }
47
+ throw err;
48
+ }
49
+ this.applyParadigmDefaults(theme);
50
+ normalizeThemeStyle(theme);
51
+ return theme;
52
+ }
53
+ /**
54
+ * 分析 PDF 文本结构,推断文档元素样式
55
+ */
56
+ analyzeTextStructure(theme, text) {
57
+ const lines = text.split("\n").filter((l) => l.trim().length > 0);
58
+ const analyzedLines = lines.map((line) => this.analyzeLine(line));
59
+ this.detectHeadings(theme, analyzedLines);
60
+ this.detectBodyText(theme, analyzedLines);
61
+ this.detectCodeBlocks(theme, analyzedLines);
62
+ this.detectTables(theme, analyzedLines);
63
+ this.inferColorPalette(theme, analyzedLines);
64
+ }
65
+ /**
66
+ * 单行文本特征分析
67
+ */
68
+ analyzeLine(line) {
69
+ const trimmed = line.trim();
70
+ return {
71
+ text: trimmed,
72
+ length: trimmed.length,
73
+ isAllUppercase: trimmed.length > 3 &&
74
+ trimmed.length < 80 &&
75
+ /^[A-Z0-9\s\-:.,!?()]+$/.test(trimmed) &&
76
+ /[A-Z]/.test(trimmed) &&
77
+ trimmed.split("").filter((c) => /[a-z]/.test(c)).length === 0,
78
+ isShortLine: trimmed.length < 60,
79
+ hasNumbering: /^\s*(\d+[\.\)]\s*|[一二三四五六七八九十]+[\.\、]\s*|[IVX]+\.\s*)/.test(trimmed),
80
+ hasBullet: /^\s*[\-\•\*\·\◦\‣]\s*/.test(trimmed),
81
+ looksLikeHeading: false,
82
+ looksLikeCode: false,
83
+ indentLevel: line.search(/\S/),
84
+ };
85
+ }
86
+ /**
87
+ * 基于启发式规则检测标题层级
88
+ */
89
+ detectHeadings(theme, lines) {
90
+ const headingCandidates = [];
91
+ for (const line of lines) {
92
+ let confidence = 0;
93
+ if (line.isAllUppercase && line.isShortLine) {
94
+ confidence += 4;
95
+ }
96
+ if (line.hasNumbering && line.isShortLine) {
97
+ confidence += 3;
98
+ }
99
+ if (line.indentLevel === 0 && line.isShortLine && line.length > 5) {
100
+ confidence += 2;
101
+ }
102
+ if (/^(摘要|ABSTRACT|目录|TABLE OF CONTENTS|引言|INTRODUCTION|结论|CONCLUSION|参考文献|REFERENCES)$/i.test(line.text)) {
103
+ confidence += 5;
104
+ }
105
+ if (/^第[一二三四五六七八九十]+[章节部分]|^Chapter\s+\d+/i.test(line.text)) {
106
+ confidence += 4;
107
+ }
108
+ if (line.length < 30 && line.length > 3 && /^[^\s]{2,}$/.test(line.text)) {
109
+ confidence += 1;
110
+ }
111
+ if (confidence >= 4) {
112
+ line.looksLikeHeading = true;
113
+ let level = 2;
114
+ if (confidence >= 6 || /^(摘要|ABSTRACT|标题|TITLE)$/i.test(line.text)) {
115
+ level = 1;
116
+ }
117
+ else if (confidence >= 5 || line.hasNumbering) {
118
+ level = 2;
119
+ }
120
+ else if (line.indentLevel > 0) {
121
+ level = Math.min(4, 2 + Math.floor(line.indentLevel / 2));
122
+ }
123
+ headingCandidates.push({ level, confidence, line });
124
+ }
125
+ }
126
+ if (headingCandidates.length > 0) {
127
+ theme.palette.headingColor = theme.palette.headingColor || ACADEMIC_PAPER_DEFAULTS.headings.h1.color;
128
+ theme.typography.headingWeight = 700;
129
+ const h1Count = headingCandidates.filter((c) => c.level === 1).length;
130
+ const h2Count = headingCandidates.filter((c) => c.level === 2).length;
131
+ if (h1Count > 0) {
132
+ theme.seedTypography.fontScaleH1 = ACADEMIC_PAPER_DEFAULTS.headings.h1.fontSize / 16;
133
+ }
134
+ if (h2Count > 0) {
135
+ theme.seedTypography.fontScaleH2 = ACADEMIC_PAPER_DEFAULTS.headings.h2.fontSize / 16;
136
+ }
137
+ if (headingCandidates.some((c) => c.level >= 3)) {
138
+ theme.seedTypography.fontScaleH3 = ACADEMIC_PAPER_DEFAULTS.headings.h3.fontSize / 16;
139
+ }
140
+ }
141
+ }
142
+ /**
143
+ * 推断正文样式特征
144
+ */
145
+ detectBodyText(theme, lines) {
146
+ const bodyLines = lines.filter((l) => !l.looksLikeHeading && !l.looksLikeCode && l.length > 20);
147
+ if (bodyLines.length === 0)
148
+ return;
149
+ const avgLength = bodyLines.reduce((sum, l) => sum + l.length, 0) / bodyLines.length;
150
+ const avgIndent = bodyLines.reduce((sum, l) => sum + l.indentLevel, 0) / bodyLines.length;
151
+ if (avgLength > 60) {
152
+ theme.typography.baseFontSize = "16px";
153
+ theme.typography.baseLineHeight = 1.75;
154
+ }
155
+ else if (avgLength > 40) {
156
+ theme.typography.baseFontSize = "15px";
157
+ theme.typography.baseLineHeight = 1.7;
158
+ }
159
+ else {
160
+ theme.typography.baseFontSize = "14px";
161
+ theme.typography.baseLineHeight = 1.65;
162
+ }
163
+ if (avgIndent >= 2) {
164
+ theme.typography.bodyFontFamily = ACADEMIC_PAPER_DEFAULTS.body.fontFamily;
165
+ }
166
+ theme.seedTypography.lineHeightBody = theme.typography.baseLineHeight;
167
+ }
168
+ /**
169
+ * 检测代码块区域(等宽文本特征)
170
+ */
171
+ detectCodeBlocks(theme, lines) {
172
+ const codeIndicators = [
173
+ (l) => l.text.includes("function ") ||
174
+ l.text.includes("const ") ||
175
+ l.text.includes("let ") ||
176
+ l.text.includes("var "),
177
+ (l) => l.text.includes("{") && l.text.includes("}"),
178
+ (l) => /^(\s*(\/\/|#|\/\*|\*\/|\s*import\s+\s*export\s+))/.test(l.text),
179
+ (l) => l.text.match(/[;<>=\[\](){}]/g)?.length &&
180
+ l.text.match(/[;<>=\[\](){}]/g)?.length > 3,
181
+ ];
182
+ for (const line of lines) {
183
+ const isCode = codeIndicators.some((check) => check(line));
184
+ if (isCode) {
185
+ line.looksLikeCode = true;
186
+ }
187
+ }
188
+ const codeLineCount = lines.filter((l) => l.looksLikeCode).length;
189
+ if (codeLineCount > 3) {
190
+ theme.palette.codeBlockBg = "#f5f5f5";
191
+ theme.palette.codeBlockText = "#333333";
192
+ theme.palette.codeBg = "#f9f9f9";
193
+ }
194
+ }
195
+ /**
196
+ * 检测表格结构(多列对齐文本)
197
+ */
198
+ detectTables(theme, lines) {
199
+ const tablePatterns = [
200
+ /^\|.+\|.*\|$/,
201
+ /^\s*\|?\s*-{2,}\s*\|/,
202
+ /^\s+(\S+)\s{2,}(\S+)\s{2,}(\S+)/,
203
+ ];
204
+ let tableLineCount = 0;
205
+ for (const line of lines) {
206
+ if (tablePatterns.some((p) => p.test(line.text))) {
207
+ tableLineCount++;
208
+ }
209
+ }
210
+ if (tableLineCount >= 3) {
211
+ theme.palette.tableHeaderBg = ACADEMIC_PAPER_DEFAULTS.table.headerBgColor;
212
+ theme.palette.borderColor = ACADEMIC_PAPER_DEFAULTS.table.borderColor;
213
+ }
214
+ }
215
+ /**
216
+ * 基于文档特征推断配色方案
217
+ */
218
+ inferColorPalette(theme, lines) {
219
+ const p = theme.palette;
220
+ const hasChinese = lines.some((l) => /[\u4e00-\u9fa5]/.test(l.text));
221
+ const longEnglishBlocks = lines.filter((l) => l.length > 100 && /^[a-zA-Z0-9\s\.,;\:'"()\[\]{}]+$/.test(l.text)).length;
222
+ if (hasChinese) {
223
+ p.textColor = ACADEMIC_PAPER_DEFAULTS.body.color;
224
+ p.bgColor = ACADEMIC_PAPER_DEFAULTS.pageBackground;
225
+ theme.typography.bodyFontFamily = ACADEMIC_PAPER_DEFAULTS.body.fontFamily;
226
+ theme.typography.headingFontFamily = ACADEMIC_PAPER_DEFAULTS.headings.h1.fontFamily;
227
+ }
228
+ else if (longEnglishBlocks > 5) {
229
+ p.textColor = BUSINESS_REPORT_DEFAULTS.body.color;
230
+ p.bgColor = BUSINESS_REPORT_DEFAULTS.pageBackground;
231
+ theme.typography.bodyFontFamily = BUSINESS_REPORT_DEFAULTS.body.fontFamily;
232
+ theme.typography.headingFontFamily = BUSINESS_REPORT_DEFAULTS.headings.h1.fontFamily;
233
+ }
234
+ p.accentColor = hasChinese ? "#2b579a" : "#2563eb";
235
+ p.textMuted = hasChinese ? "#666666" : "#9ca3af";
236
+ }
237
+ /**
238
+ * 提取 PDF 元数据信息
239
+ */
240
+ populateFromMetadata(theme, metadata) {
241
+ if (metadata.Title && typeof metadata.Title === "string") {
242
+ theme.description = `主题提取自: ${metadata.Title}`;
243
+ }
244
+ if (metadata.Author && typeof metadata.Author === "string") {
245
+ theme.description = `${theme.description || ""} (作者: ${metadata.Author})`;
246
+ }
247
+ }
248
+ /**
249
+ * 基于内容特征判断文档类型并应用对应预设
250
+ */
251
+ detectDocumentType(theme, _text, pageCount) {
252
+ if (pageCount <= 2) {
253
+ theme.description = `${theme.description} [单页文档]`;
254
+ }
255
+ else if (pageCount > 20) {
256
+ theme.description = `${theme.description} [长篇文档 ${pageCount}页]`;
257
+ }
258
+ }
259
+ /**
260
+ * 应用 DocxStyleParadigm 标准参考值填充所有缺失字段
261
+ */
262
+ applyParadigmDefaults(theme) {
263
+ const preset = getRecommendedPreset();
264
+ const p = theme.palette;
265
+ const t = theme.typography;
266
+ const st = theme.seedTypography;
267
+ if (!p.textColor || p.textColor === "#000000") {
268
+ p.textColor = preset.body.color;
269
+ }
270
+ if (!p.headingColor) {
271
+ p.headingColor = preset.headings.h1.color;
272
+ }
273
+ if (!p.bgColor || p.bgColor === "#ffffff") {
274
+ p.bgColor = preset.pageBackground;
275
+ }
276
+ if (!p.textMuted) {
277
+ p.textMuted = preset.mutedTextColor;
278
+ }
279
+ if (!p.accentColor || p.accentColor === "#0000ff") {
280
+ p.accentColor = preset.accentColor;
281
+ }
282
+ if (!p.tableHeaderBg) {
283
+ p.tableHeaderBg = preset.table.headerBgColor;
284
+ }
285
+ if (!p.codeBg) {
286
+ p.codeBg = preset.inlineCode.bgColor;
287
+ }
288
+ if (!p.codeBlockBg) {
289
+ p.codeBlockBg = preset.codeBlock.bgColor;
290
+ }
291
+ if (!p.codeBlockText) {
292
+ p.codeBlockText = preset.codeBlock.color;
293
+ }
294
+ if (!p.blockquoteBg) {
295
+ p.blockquoteBg = preset.blockquote.bgColor;
296
+ }
297
+ if (!p.blockquoteBorder) {
298
+ p.blockquoteBorder = preset.blockquote.borderLeftColor;
299
+ }
300
+ if (!p.selectionBg) {
301
+ p.selectionBg = preset.selectionBg;
302
+ }
303
+ if (!p.borderColor) {
304
+ p.borderColor = preset.table.borderColor;
305
+ }
306
+ if (!t.bodyFontFamily || t.bodyFontFamily === "Georgia, serif") {
307
+ t.bodyFontFamily = preset.body.fontFamily;
308
+ }
309
+ if (!t.headingFontFamily) {
310
+ t.headingFontFamily = preset.headings.h1.fontFamily;
311
+ }
312
+ if (!t.baseFontSize) {
313
+ t.baseFontSize = `${preset.body.fontSize}px`;
314
+ }
315
+ if (t.baseLineHeight < 1.5) {
316
+ t.baseLineHeight = preset.body.lineHeight;
317
+ }
318
+ st.fontBody = preset.body.fontFamily;
319
+ st.fontHeading = preset.headings.h1.fontFamily;
320
+ st.lineHeightBody = preset.body.lineHeight;
321
+ st.lineHeightHeading = preset.headings.h1.lineHeight;
322
+ const issues = validateDocumentStyle(this.themeToParadigm(theme));
323
+ for (const issue of issues) {
324
+ if (issue.level === "error") {
325
+ console.warn(`[PdfExtractor] ${issue.element}: ${issue.message}`);
326
+ }
327
+ }
328
+ }
329
+ /**
330
+ * 将 ThemeStyle 转换为 DocumentStyleParadigm 用于 WCAG 验证
331
+ */
332
+ themeToParadigm(theme) {
333
+ return {
334
+ pageBackground: theme.palette.bgColor,
335
+ headings: {
336
+ h1: {
337
+ fontFamily: theme.seedTypography.fontHeading,
338
+ fontSize: 16 * theme.seedTypography.fontScaleH1,
339
+ fontWeight: theme.typography.headingWeight,
340
+ color: theme.palette.headingColor,
341
+ lineHeight: theme.seedTypography.lineHeightHeading,
342
+ },
343
+ h2: {
344
+ fontFamily: theme.seedTypography.fontHeading,
345
+ fontSize: 16 * theme.seedTypography.fontScaleH2,
346
+ fontWeight: Math.max(600, theme.typography.headingWeight - 100),
347
+ color: theme.palette.headingColor,
348
+ lineHeight: theme.seedTypography.lineHeightHeading,
349
+ },
350
+ h3: {
351
+ fontFamily: theme.seedTypography.fontHeading,
352
+ fontSize: 16 * theme.seedTypography.fontScaleH3,
353
+ fontWeight: 600,
354
+ color: theme.palette.headingColor,
355
+ lineHeight: theme.seedTypography.lineHeightHeading + 0.05,
356
+ },
357
+ h4: {
358
+ fontFamily: theme.seedTypography.fontHeading,
359
+ fontSize: 16 * theme.seedTypography.fontScaleH4,
360
+ fontWeight: 600,
361
+ color: theme.palette.textMuted,
362
+ lineHeight: theme.seedTypography.lineHeightHeading + 0.05,
363
+ },
364
+ h5: {
365
+ fontFamily: theme.seedTypography.fontHeading,
366
+ fontSize: 16 * theme.seedTypography.fontScaleH5,
367
+ fontWeight: 500,
368
+ color: theme.palette.textMuted,
369
+ lineHeight: theme.seedTypography.lineHeightBody - 0.25,
370
+ },
371
+ h6: {
372
+ fontFamily: theme.seedTypography.fontHeading,
373
+ fontSize: 16 * theme.seedTypography.fontScaleH6,
374
+ fontWeight: 500,
375
+ color: theme.palette.textMuted,
376
+ lineHeight: theme.seedTypography.lineHeightBody - 0.2,
377
+ },
378
+ },
379
+ body: {
380
+ fontFamily: theme.seedTypography.fontBody,
381
+ fontSize: parseInt(theme.typography.baseFontSize) || 16,
382
+ fontWeight: 400,
383
+ color: theme.palette.textColor,
384
+ lineHeight: theme.typography.baseLineHeight,
385
+ },
386
+ blockquote: {
387
+ fontFamily: theme.seedTypography.fontBody,
388
+ fontSize: Math.max(13, (parseInt(theme.typography.baseFontSize) || 16) - 2),
389
+ fontWeight: 400,
390
+ color: theme.palette.textMuted,
391
+ lineHeight: theme.typography.baseLineHeight - 0.15,
392
+ borderLeftColor: theme.palette.blockquoteBorder,
393
+ bgColor: theme.palette.blockquoteBg,
394
+ },
395
+ codeBlock: {
396
+ fontFamily: theme.typography.codeFontFamily,
397
+ fontSize: Math.max(12, (parseInt(theme.typography.baseFontSize) || 16) - 3),
398
+ fontWeight: 400,
399
+ color: theme.palette.codeBlockText || theme.palette.textColor,
400
+ lineHeight: theme.seedTypography.lineHeightCode,
401
+ bgColor: theme.palette.codeBlockBg,
402
+ },
403
+ inlineCode: {
404
+ fontSize: Math.max(12, (parseInt(theme.typography.baseFontSize) || 16) - 3),
405
+ color: theme.palette.accentColor,
406
+ bgColor: theme.palette.codeBg,
407
+ },
408
+ table: {
409
+ headerFontFamily: theme.seedTypography.fontHeading,
410
+ headerFontSize: Math.max(12, (parseInt(theme.typography.baseFontSize) || 16) - 3),
411
+ headerFontWeight: 700,
412
+ headerColor: "#ffffff",
413
+ headerBgColor: theme.palette.tableHeaderBg,
414
+ headerLineHeight: 1.4,
415
+ cellFontFamily: theme.seedTypography.fontBody,
416
+ cellFontSize: Math.max(11, (parseInt(theme.typography.baseFontSize) || 16) - 4),
417
+ cellColor: theme.palette.textColor,
418
+ cellBgColor: theme.palette.bgColor,
419
+ cellLineHeight: 1.5,
420
+ cellPadding: "8px 12px",
421
+ borderColor: theme.palette.borderColor,
422
+ borderWidth: "1px",
423
+ },
424
+ accentColor: theme.palette.accentColor,
425
+ mutedTextColor: theme.palette.textMuted,
426
+ selectionBg: theme.palette.selectionBg,
427
+ };
428
+ }
429
+ }
430
+ //# sourceMappingURL=pdf-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-extractor.js","sourceRoot":"","sources":["../../src/extractors/pdf-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Web 页面样式提取器 — v2.0
3
+ *
4
+ * 增强功能:
5
+ * 1. 从 CSS 规则和内联样式中提取完整的元素样式定义
6
+ * 2. 提取各级标题(H1-H6)的字体、字号、颜色、行高
7
+ * 3. 提取正文字体、字号、行间距、字间距
8
+ * 4. 提取表格(表头/单元格)的完整样式
9
+ * 5. 检测代码块、引用块等特殊元素样式
10
+ * 6. 集成 DocxStyleParadigm 标准参考值填充缺失字段
11
+ * 7. 自动验证 WCAG 对比度合规性
12
+ *
13
+ * 技术优势(相比 PDF):
14
+ * - 可直接从 <style> 标签和外部 CSS 中解析规则级样式
15
+ * - 可从 DOM 元素的 style 属性获取内联样式
16
+ * - 可通过 cheerio 获取元素的 computed-style 近似值
17
+ */
18
+ import type { Extractor } from "./base.js";
19
+ import { type ThemeStyle } from "../models.js";
20
+ export declare class UrlExtractor implements Extractor {
21
+ canHandle(source: string): boolean;
22
+ extract(source: string): Promise<ThemeStyle>;
23
+ /**
24
+ * 从页面标题或 URL 推断主题名称
25
+ */
26
+ private detectName;
27
+ /**
28
+ * 提取所有 <style> 标签内的 CSS 文本
29
+ */
30
+ private extractAllStyles;
31
+ /**
32
+ * 使用 css-tree 将 CSS 文本解析为结构化规则映射
33
+ */
34
+ private parseCssRules;
35
+ /**
36
+ * 提取正文(body/html)完整样式
37
+ */
38
+ private extractBodyStyles;
39
+ /**
40
+ * 提取 H1-H6 各级标题的完整样式定义
41
+ */
42
+ private extractHeadingStyles;
43
+ /**
44
+ * 提取表格(th/td)完整样式
45
+ */
46
+ private extractTableStyles;
47
+ /**
48
+ * 提取代码块和内联代码样式
49
+ */
50
+ private extractCodeStyles;
51
+ /**
52
+ * 提取引用块样式
53
+ */
54
+ private extractBlockquoteStyles;
55
+ /**
56
+ * 提取链接和强调色
57
+ */
58
+ private extractLinkAndAccent;
59
+ /**
60
+ * 综合推断文档特征(语言、类型、风格)
61
+ */
62
+ private inferDocumentCharacteristics;
63
+ /**
64
+ * 应用 DocxStyleParadigm 标准参考值填充缺失字段
65
+ */
66
+ private applyParadigmDefaults;
67
+ /**
68
+ * 将 ThemeStyle 转换为 DocumentStyleParadigm 用于 WCAG 验证
69
+ */
70
+ private themeToParadigm;
71
+ /**
72
+ * 为一组选择器查找匹配的 CSS 规则并合并结果
73
+ * 优先级:更具体的选择器 > 更通用的选择器 > 内联样式
74
+ */
75
+ private resolveElementStyles;
76
+ /**
77
+ * 在 CSS 规则中查找最佳匹配的选择器
78
+ */
79
+ private findBestMatchingRule;
80
+ /**
81
+ * 计算选择器特异性(简化版)
82
+ */
83
+ private calculateSpecificity;
84
+ /**
85
+ * 解析内联 style 字符串为键值对
86
+ */
87
+ private parseInlineStyle;
88
+ /**
89
+ * 规范化字体家族名称(去除引号、清理多余空格)
90
+ */
91
+ private normalizeFontFamily;
92
+ /**
93
+ * 规范化字号为 px 单位
94
+ */
95
+ private normalizeFontSize;
96
+ /**
97
+ * 将字号转换为 px 数值
98
+ */
99
+ private normalizeFontSizeToPx;
100
+ /**
101
+ * 规范化颜色值为标准 hex 格式
102
+ */
103
+ private normalizeColor;
104
+ }