@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,370 @@
1
+ /**
2
+ * DOCX 文档样式提取器 — v2.0
3
+ *
4
+ * 增强功能:
5
+ * 1. 提取各级标题(H1-H6)的完整字体样式定义
6
+ * 2. 提取正文字体、字号、颜色、行间距
7
+ * 3. 提取表格样式(表头/单元格字体、背景色、边框)
8
+ * 4. 对无法提取的样式应用 DocxStyleParadigm 标准参考值
9
+ * 5. 自动验证 WCAG 对比度合规性
10
+ */
11
+ import { readFileSync } from "node:fs";
12
+ import { basename } from "node:path";
13
+ import mammoth from "mammoth";
14
+ import { makeThemeStyle, } from "../models.js";
15
+ import { normalizeThemeStyle } from "../color-utils.js";
16
+ import { getRecommendedPreset, validateDocumentStyle, } from "../docx-style-paradigm.js";
17
+ export class DocxExtractor {
18
+ canHandle(source) {
19
+ return /\.docx$/i.test(source);
20
+ }
21
+ async extract(source) {
22
+ const buffer = readFileSync(source);
23
+ const name = basename(source).replace(/\.docx$/i, "");
24
+ const theme = makeThemeStyle(name, "docx", source);
25
+ const result = await mammoth.convertToHtml({ buffer }, {
26
+ styleMap: [
27
+ "p[style-name='Heading 1'] => h1:fresh",
28
+ "p[style-name='Heading 2'] => h2:fresh",
29
+ "p[style-name='Heading 3'] => h3:fresh",
30
+ "p[style-name='Heading 4'] => h4:fresh",
31
+ "p[style-name='Heading 5'] => h5:fresh",
32
+ "p[style-name='Heading 6'] => h6:fresh",
33
+ "r[style-name='Strong'] => strong",
34
+ ],
35
+ });
36
+ if (result.value) {
37
+ this.extractDetailedStyles(theme, result.value);
38
+ }
39
+ this.applyParadigmDefaults(theme);
40
+ normalizeThemeStyle(theme);
41
+ return theme;
42
+ }
43
+ /**
44
+ * 从 HTML 输出中提取详细的文档元素样式
45
+ */
46
+ extractDetailedStyles(theme, html) {
47
+ const p = theme.palette;
48
+ const t = theme.typography;
49
+ this.extractBodyStyles(t, html);
50
+ this.extractHeadingStyles(theme, html);
51
+ this.extractTableStyles(p, html);
52
+ this.extractColorPalette(p, html);
53
+ this.extractBlockStyles(p, html);
54
+ }
55
+ /**
56
+ * 提取正文基础样式(字体、字号、行高)
57
+ */
58
+ extractBodyStyles(typography, html) {
59
+ const fontMatch = html.match(/font-family:\s*['"]?([^;'"]+)['"]?/i);
60
+ if (fontMatch) {
61
+ typography.bodyFontFamily = fontMatch[1].trim();
62
+ }
63
+ const fontSizeMatch = html.match(/font-size:\s*([\d.]+)(pt|px)/i);
64
+ if (fontSizeMatch) {
65
+ const size = parseFloat(fontSizeMatch[1]);
66
+ const unit = fontSizeMatch[2];
67
+ typography.baseFontSize = unit === "pt" ? `${size * 1.333}px` : `${size}px`;
68
+ }
69
+ }
70
+ /**
71
+ * 提取各级标题的详细样式
72
+ */
73
+ extractHeadingStyles(theme, html) {
74
+ const headingLevels = ["h1", "h2", "h3", "h4", "h5", "h6"];
75
+ for (const level of headingLevels) {
76
+ const regex = new RegExp(`<${level}[^>]*style="[^"]*"`, "gi");
77
+ let match = regex.exec(html);
78
+ if (match) {
79
+ const styleStr = match[0];
80
+ const extracted = this.parseInlineStyle(styleStr);
81
+ if (extracted.fontSize) {
82
+ const size = parseFloat(extracted.fontSize);
83
+ const unit = extracted.fontSize.replace(/[\d.]/g, "") || "px";
84
+ const pxSize = unit === "pt" ? size * 1.333 : size;
85
+ switch (level) {
86
+ case "h1":
87
+ theme.seedTypography.fontScaleH1 = pxSize / 16;
88
+ break;
89
+ case "h2":
90
+ theme.seedTypography.fontScaleH2 = pxSize / 16;
91
+ break;
92
+ case "h3":
93
+ theme.seedTypography.fontScaleH3 = pxSize / 16;
94
+ break;
95
+ case "h4":
96
+ theme.seedTypography.fontScaleH4 = pxSize / 16;
97
+ break;
98
+ case "h5":
99
+ theme.seedTypography.fontScaleH5 = pxSize / 16;
100
+ break;
101
+ case "h6":
102
+ theme.seedTypography.fontScaleH6 = pxSize / 16;
103
+ break;
104
+ }
105
+ }
106
+ if (extracted.fontWeight) {
107
+ const weight = parseInt(extracted.fontWeight) || 700;
108
+ if (weight > theme.typography.headingWeight) {
109
+ theme.typography.headingWeight = weight;
110
+ }
111
+ }
112
+ if (extracted.color && level === "h1") {
113
+ theme.palette.headingColor = extracted.color;
114
+ }
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * 提取表格详细样式(表头、单元格、边框)
120
+ */
121
+ extractTableStyles(palette, html) {
122
+ const thRegex = /<th[^>]*style="([^"]*)"/gi;
123
+ let thMatch = thRegex.exec(html);
124
+ if (thMatch) {
125
+ const thStyle = this.parseInlineStyle(thMatch[0]);
126
+ if (thStyle.backgroundColor) {
127
+ palette.tableHeaderBg = thStyle.backgroundColor;
128
+ }
129
+ if (thStyle.color) {
130
+ palette.headingColor = palette.headingColor || thStyle.color;
131
+ }
132
+ if (thStyle.fontSize) {
133
+ const size = parseFloat(thStyle.fontSize);
134
+ palette.tableHeaderBg = palette.tableHeaderBg || "#f0f0f0";
135
+ }
136
+ }
137
+ const tdRegex = /<td[^>]*style="([^"]*)"/gi;
138
+ let tdMatch = tdRegex.exec(html);
139
+ if (tdMatch) {
140
+ const tdStyle = this.parseInlineStyle(tdMatch[0]);
141
+ if (tdStyle.backgroundColor) {
142
+ palette.codeBg = tdStyle.backgroundColor;
143
+ }
144
+ }
145
+ const tableBorderMatch = html.match(/<table[^>]*style="[^"]*border[^;]*:[^;]*([^;"'\s]+)/i);
146
+ if (tableBorderMatch) {
147
+ palette.borderColor = palette.borderColor || "#cccccc";
148
+ }
149
+ if (!palette.tableHeaderBg) {
150
+ palette.tableHeaderBg = "#f0f0f0";
151
+ }
152
+ }
153
+ /**
154
+ * 提取全局色彩方案
155
+ */
156
+ extractColorPalette(palette, html) {
157
+ const colorMatch = html.match(/color:\s*(#[0-9a-fA-F]{3,6})/i);
158
+ if (colorMatch) {
159
+ palette.textColor = colorMatch[1];
160
+ }
161
+ const bgMatch = html.match(/background(?:-color)?:\s*(#[0-9a-fA-F]{3,6})/i);
162
+ if (bgMatch && bgMatch[1].toLowerCase() !== "#ffffff") {
163
+ palette.bgColor = bgMatch[1];
164
+ }
165
+ const strongMatch = html.match(/<strong[^>]*style="[^"]*color:\s*(#[0-9a-fA-F]{3,6})/i);
166
+ if (strongMatch) {
167
+ palette.accentColor = strongMatch[1];
168
+ }
169
+ const linkMatch = html.match(/<a[^>]*style="[^"]*color:\s*(#[0-9a-fA-F]{3,6})/i);
170
+ if (linkMatch) {
171
+ palette.accentColor = linkMatch[1];
172
+ }
173
+ }
174
+ /**
175
+ * 提取引用块和代码块样式
176
+ */
177
+ extractBlockStyles(palette, html) {
178
+ const preMatch = html.match(/<pre[^>]*style="[^"]*background(?:-color)?:\s*(#[0-9a-fA-F]{3,6})/i);
179
+ if (preMatch) {
180
+ palette.codeBlockBg = preMatch[1];
181
+ }
182
+ const preColorMatch = html.match(/<pre[^>]*style="[^"]*color:\s*(#[0-9a-fA-F]{3,6})/i);
183
+ if (preColorMatch) {
184
+ palette.codeBlockText = preColorMatch[1];
185
+ }
186
+ if (!palette.blockquoteBorder) {
187
+ palette.blockquoteBorder = palette.accentColor;
188
+ }
189
+ }
190
+ /**
191
+ * 解析内联 style 字符串为键值对对象
192
+ */
193
+ parseInlineStyle(styleTag) {
194
+ const styleMatch = styleTag.match(/style="([^"]*)"/i);
195
+ if (!styleMatch)
196
+ return {};
197
+ const styles = {};
198
+ const declarations = styleMatch[1].split(";");
199
+ for (const decl of declarations) {
200
+ const [prop, ...valueParts] = decl.split(":").map((s) => s.trim());
201
+ if (prop && valueParts.length > 0) {
202
+ const camelProp = prop.replace(/-([a-z])/g, (_m, c) => c.toUpperCase());
203
+ styles[camelProp] = valueParts.join(":").trim();
204
+ }
205
+ }
206
+ return styles;
207
+ }
208
+ /**
209
+ * 应用 DocxStyleParadigm 标准参考值填充缺失字段
210
+ */
211
+ applyParadigmDefaults(theme) {
212
+ const preset = getRecommendedPreset();
213
+ const p = theme.palette;
214
+ const t = theme.typography;
215
+ const st = theme.seedTypography;
216
+ if (!p.textColor || p.textColor === "#000000") {
217
+ p.textColor = preset.body.color;
218
+ }
219
+ if (!p.headingColor) {
220
+ p.headingColor = preset.headings.h1.color;
221
+ }
222
+ if (!p.bgColor || p.bgColor === "#ffffff") {
223
+ p.bgColor = preset.pageBackground;
224
+ }
225
+ if (!p.textMuted) {
226
+ p.textMuted = preset.mutedTextColor;
227
+ }
228
+ if (!p.accentColor || p.accentColor === "#0000ff") {
229
+ p.accentColor = preset.accentColor;
230
+ }
231
+ if (!p.tableHeaderBg) {
232
+ p.tableHeaderBg = preset.table.headerBgColor;
233
+ }
234
+ if (!p.codeBg) {
235
+ p.codeBg = preset.inlineCode.bgColor;
236
+ }
237
+ if (!p.codeBlockBg) {
238
+ p.codeBlockBg = preset.codeBlock.bgColor;
239
+ }
240
+ if (!p.blockquoteBg) {
241
+ p.blockquoteBg = preset.blockquote.bgColor;
242
+ }
243
+ if (!p.selectionBg) {
244
+ p.selectionBg = preset.selectionBg;
245
+ }
246
+ if (!t.bodyFontFamily || t.bodyFontFamily === "Georgia, serif") {
247
+ t.bodyFontFamily = preset.body.fontFamily;
248
+ }
249
+ if (!t.headingFontFamily) {
250
+ t.headingFontFamily = preset.headings.h1.fontFamily;
251
+ }
252
+ if (!t.baseFontSize) {
253
+ t.baseFontSize = `${preset.body.fontSize}px`;
254
+ }
255
+ if (t.baseLineHeight < 1.5) {
256
+ t.baseLineHeight = preset.body.lineHeight;
257
+ }
258
+ st.fontBody = preset.body.fontFamily;
259
+ st.fontHeading = preset.headings.h1.fontFamily;
260
+ st.lineHeightBody = preset.body.lineHeight;
261
+ st.lineHeightHeading = preset.headings.h1.lineHeight;
262
+ const issues = validateDocumentStyle(this.themeToParadigm(theme));
263
+ for (const issue of issues) {
264
+ if (issue.level === "error") {
265
+ console.warn(`[DocxExtractor] ${issue.element}: ${issue.message}`);
266
+ }
267
+ }
268
+ }
269
+ /**
270
+ * 将 ThemeStyle 转换为 DocumentStyleParadigm 用于验证
271
+ */
272
+ themeToParadigm(theme) {
273
+ return {
274
+ pageBackground: theme.palette.bgColor,
275
+ headings: {
276
+ h1: {
277
+ fontFamily: theme.seedTypography.fontHeading,
278
+ fontSize: 16 * theme.seedTypography.fontScaleH1,
279
+ fontWeight: theme.typography.headingWeight,
280
+ color: theme.palette.headingColor,
281
+ lineHeight: theme.seedTypography.lineHeightHeading,
282
+ },
283
+ h2: {
284
+ fontFamily: theme.seedTypography.fontHeading,
285
+ fontSize: 16 * theme.seedTypography.fontScaleH2,
286
+ fontWeight: theme.typography.headingWeight - 100 || 600,
287
+ color: theme.palette.headingColor,
288
+ lineHeight: theme.seedTypography.lineHeightHeading,
289
+ },
290
+ h3: {
291
+ fontFamily: theme.seedTypography.fontHeading,
292
+ fontSize: 16 * theme.seedTypography.fontScaleH3,
293
+ fontWeight: 600,
294
+ color: theme.palette.headingColor,
295
+ lineHeight: theme.seedTypography.lineHeightHeading + 0.05,
296
+ },
297
+ h4: {
298
+ fontFamily: theme.seedTypography.fontHeading,
299
+ fontSize: 16 * theme.seedTypography.fontScaleH4,
300
+ fontWeight: 600,
301
+ color: theme.palette.textMuted,
302
+ lineHeight: theme.seedTypography.lineHeightHeading + 0.05,
303
+ },
304
+ h5: {
305
+ fontFamily: theme.seedTypography.fontHeading,
306
+ fontSize: 16 * theme.seedTypography.fontScaleH5,
307
+ fontWeight: 500,
308
+ color: theme.palette.textMuted,
309
+ lineHeight: theme.seedTypography.lineHeightBody - 0.25,
310
+ },
311
+ h6: {
312
+ fontFamily: theme.seedTypography.fontHeading,
313
+ fontSize: 16 * theme.seedTypography.fontScaleH6,
314
+ fontWeight: 500,
315
+ color: theme.palette.textMuted,
316
+ lineHeight: theme.seedTypography.lineHeightBody - 0.2,
317
+ },
318
+ },
319
+ body: {
320
+ fontFamily: theme.seedTypography.fontBody,
321
+ fontSize: parseInt(theme.typography.baseFontSize) || 16,
322
+ fontWeight: 400,
323
+ color: theme.palette.textColor,
324
+ lineHeight: theme.typography.baseLineHeight,
325
+ },
326
+ blockquote: {
327
+ fontFamily: theme.seedTypography.fontBody,
328
+ fontSize: Math.max(13, (parseInt(theme.typography.baseFontSize) || 16) - 2),
329
+ fontWeight: 400,
330
+ color: theme.palette.textMuted,
331
+ lineHeight: theme.typography.baseLineHeight - 0.15,
332
+ borderLeftColor: theme.palette.blockquoteBorder,
333
+ bgColor: theme.palette.blockquoteBg,
334
+ },
335
+ codeBlock: {
336
+ fontFamily: theme.typography.codeFontFamily,
337
+ fontSize: Math.max(12, (parseInt(theme.typography.baseFontSize) || 16) - 3),
338
+ fontWeight: 400,
339
+ color: theme.palette.codeBlockText || theme.palette.textColor,
340
+ lineHeight: theme.seedTypography.lineHeightCode,
341
+ bgColor: theme.palette.codeBlockBg,
342
+ },
343
+ inlineCode: {
344
+ fontSize: Math.max(12, (parseInt(theme.typography.baseFontSize) || 16) - 3),
345
+ color: theme.palette.accentColor,
346
+ bgColor: theme.palette.codeBg,
347
+ },
348
+ table: {
349
+ headerFontFamily: theme.seedTypography.fontHeading,
350
+ headerFontSize: Math.max(12, (parseInt(theme.typography.baseFontSize) || 16) - 3),
351
+ headerFontWeight: 700,
352
+ headerColor: "#ffffff",
353
+ headerBgColor: theme.palette.tableHeaderBg,
354
+ headerLineHeight: 1.4,
355
+ cellFontFamily: theme.seedTypography.fontBody,
356
+ cellFontSize: Math.max(11, (parseInt(theme.typography.baseFontSize) || 16) - 4),
357
+ cellColor: theme.palette.textColor,
358
+ cellBgColor: theme.palette.bgColor,
359
+ cellLineHeight: 1.5,
360
+ cellPadding: "8px 12px",
361
+ borderColor: theme.palette.borderColor,
362
+ borderWidth: "1px",
363
+ },
364
+ accentColor: theme.palette.accentColor,
365
+ mutedTextColor: theme.palette.textMuted,
366
+ selectionBg: theme.palette.selectionBg,
367
+ };
368
+ }
369
+ }
370
+ //# sourceMappingURL=docx-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx-extractor.js","sourceRoot":"","sources":["../../src/extractors/docx-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
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 type { Extractor } from "./base.js";
18
+ import { type ThemeStyle } from "../models.js";
19
+ export declare class PdfExtractor implements Extractor {
20
+ canHandle(source: string): boolean;
21
+ extract(source: string): Promise<ThemeStyle>;
22
+ /**
23
+ * 分析 PDF 文本结构,推断文档元素样式
24
+ */
25
+ private analyzeTextStructure;
26
+ /**
27
+ * 单行文本特征分析
28
+ */
29
+ private analyzeLine;
30
+ /**
31
+ * 基于启发式规则检测标题层级
32
+ */
33
+ private detectHeadings;
34
+ /**
35
+ * 推断正文样式特征
36
+ */
37
+ private detectBodyText;
38
+ /**
39
+ * 检测代码块区域(等宽文本特征)
40
+ */
41
+ private detectCodeBlocks;
42
+ /**
43
+ * 检测表格结构(多列对齐文本)
44
+ */
45
+ private detectTables;
46
+ /**
47
+ * 基于文档特征推断配色方案
48
+ */
49
+ private inferColorPalette;
50
+ /**
51
+ * 提取 PDF 元数据信息
52
+ */
53
+ private populateFromMetadata;
54
+ /**
55
+ * 基于内容特征判断文档类型并应用对应预设
56
+ */
57
+ private detectDocumentType;
58
+ /**
59
+ * 应用 DocxStyleParadigm 标准参考值填充所有缺失字段
60
+ */
61
+ private applyParadigmDefaults;
62
+ /**
63
+ * 将 ThemeStyle 转换为 DocumentStyleParadigm 用于 WCAG 验证
64
+ */
65
+ private themeToParadigm;
66
+ }