udf-cli 0.3.0 → 0.4.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 +130 -7
- package/dist/bin/udf-cli.d.ts +0 -1
- package/dist/bin/udf-cli.js +1 -121
- package/dist/chunk-6564CQ7U.js +1 -0
- package/dist/module-resolve-XD725NCC.js +1 -0
- package/dist/pin-prompt-FSXBDU36.js +1 -0
- package/dist/sign-BNEXYCMC.js +1 -0
- package/dist/src/index.d.ts +117 -6
- package/dist/src/index.js +1 -6
- package/package.json +19 -3
- package/dist/bin/udf-cli.js.map +0 -1
- package/dist/src/converters/html-to-udf.d.ts +0 -1
- package/dist/src/converters/html-to-udf.js +0 -7
- package/dist/src/converters/html-to-udf.js.map +0 -1
- package/dist/src/converters/markdown-to-udf.d.ts +0 -1
- package/dist/src/converters/markdown-to-udf.js +0 -7
- package/dist/src/converters/markdown-to-udf.js.map +0 -1
- package/dist/src/converters/udf-to-html.d.ts +0 -1
- package/dist/src/converters/udf-to-html.js +0 -7
- package/dist/src/converters/udf-to-html.js.map +0 -1
- package/dist/src/converters/udf-to-markdown.d.ts +0 -1
- package/dist/src/converters/udf-to-markdown.js +0 -7
- package/dist/src/converters/udf-to-markdown.js.map +0 -1
- package/dist/src/html/markdown-parser.d.ts +0 -2
- package/dist/src/html/markdown-parser.js +0 -172
- package/dist/src/html/markdown-parser.js.map +0 -1
- package/dist/src/html/markdown-serializer.d.ts +0 -2
- package/dist/src/html/markdown-serializer.js +0 -156
- package/dist/src/html/markdown-serializer.js.map +0 -1
- package/dist/src/html/parser.d.ts +0 -2
- package/dist/src/html/parser.js +0 -576
- package/dist/src/html/parser.js.map +0 -1
- package/dist/src/html/serializer.d.ts +0 -6
- package/dist/src/html/serializer.js +0 -285
- package/dist/src/html/serializer.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/model/document.d.ts +0 -107
- package/dist/src/model/document.js +0 -88
- package/dist/src/model/document.js.map +0 -1
- package/dist/src/udf/cdata-builder.d.ts +0 -14
- package/dist/src/udf/cdata-builder.js +0 -71
- package/dist/src/udf/cdata-builder.js.map +0 -1
- package/dist/src/udf/parser.d.ts +0 -2
- package/dist/src/udf/parser.js +0 -325
- package/dist/src/udf/parser.js.map +0 -1
- package/dist/src/udf/serializer.d.ts +0 -5
- package/dist/src/udf/serializer.js +0 -267
- package/dist/src/udf/serializer.js.map +0 -1
- package/dist/src/utils/color.d.ts +0 -9
- package/dist/src/utils/color.js +0 -87
- package/dist/src/utils/color.js.map +0 -1
- package/dist/src/utils/style.d.ts +0 -23
- package/dist/src/utils/style.js +0 -80
- package/dist/src/utils/style.js.map +0 -1
package/dist/src/utils/color.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
const NAMED_COLORS = {
|
|
2
|
-
black: [0, 0, 0],
|
|
3
|
-
white: [255, 255, 255],
|
|
4
|
-
red: [255, 0, 0],
|
|
5
|
-
green: [0, 128, 0],
|
|
6
|
-
blue: [0, 0, 255],
|
|
7
|
-
yellow: [255, 255, 0],
|
|
8
|
-
cyan: [0, 255, 255],
|
|
9
|
-
magenta: [255, 0, 255],
|
|
10
|
-
orange: [255, 165, 0],
|
|
11
|
-
purple: [128, 0, 128],
|
|
12
|
-
gray: [128, 128, 128],
|
|
13
|
-
grey: [128, 128, 128],
|
|
14
|
-
navy: [0, 0, 128],
|
|
15
|
-
teal: [0, 128, 128],
|
|
16
|
-
maroon: [128, 0, 0],
|
|
17
|
-
olive: [128, 128, 0],
|
|
18
|
-
silver: [192, 192, 192],
|
|
19
|
-
lime: [0, 255, 0],
|
|
20
|
-
aqua: [0, 255, 255],
|
|
21
|
-
fuchsia: [255, 0, 255],
|
|
22
|
-
transparent: [0, 0, 0], // alpha=0, but we use alpha=FF
|
|
23
|
-
};
|
|
24
|
-
function rgbToArgbInt(r, g, b) {
|
|
25
|
-
// ARGB with alpha=0xFF, stored as signed 32-bit int
|
|
26
|
-
const unsigned = ((0xFF << 24) | (r << 16) | (g << 8) | b) >>> 0;
|
|
27
|
-
// Convert to signed 32-bit
|
|
28
|
-
return unsigned | 0;
|
|
29
|
-
}
|
|
30
|
-
function parseHexColor(hex) {
|
|
31
|
-
hex = hex.replace('#', '');
|
|
32
|
-
if (hex.length === 3) {
|
|
33
|
-
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
|
|
34
|
-
}
|
|
35
|
-
if (hex.length !== 6)
|
|
36
|
-
return null;
|
|
37
|
-
const r = parseInt(hex.slice(0, 2), 16);
|
|
38
|
-
const g = parseInt(hex.slice(2, 4), 16);
|
|
39
|
-
const b = parseInt(hex.slice(4, 6), 16);
|
|
40
|
-
if (isNaN(r) || isNaN(g) || isNaN(b))
|
|
41
|
-
return null;
|
|
42
|
-
return [r, g, b];
|
|
43
|
-
}
|
|
44
|
-
function parseRgbColor(str) {
|
|
45
|
-
const match = str.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);
|
|
46
|
-
if (!match)
|
|
47
|
-
return null;
|
|
48
|
-
return [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])];
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Convert a CSS color string to a signed ARGB int32 value.
|
|
52
|
-
* Supports: hex (#RGB, #RRGGBB), rgb(r,g,b), named colors.
|
|
53
|
-
*/
|
|
54
|
-
export function cssToArgb(color) {
|
|
55
|
-
color = color.trim().toLowerCase();
|
|
56
|
-
// Hex
|
|
57
|
-
if (color.startsWith('#')) {
|
|
58
|
-
const rgb = parseHexColor(color);
|
|
59
|
-
if (rgb)
|
|
60
|
-
return rgbToArgbInt(...rgb);
|
|
61
|
-
}
|
|
62
|
-
// rgb() / rgba()
|
|
63
|
-
if (color.startsWith('rgb')) {
|
|
64
|
-
const rgb = parseRgbColor(color);
|
|
65
|
-
if (rgb)
|
|
66
|
-
return rgbToArgbInt(...rgb);
|
|
67
|
-
}
|
|
68
|
-
// Named color
|
|
69
|
-
const named = NAMED_COLORS[color];
|
|
70
|
-
if (named)
|
|
71
|
-
return rgbToArgbInt(...named);
|
|
72
|
-
// Default: black
|
|
73
|
-
return -16777216;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Convert a signed ARGB int32 value to a CSS hex color string.
|
|
77
|
-
*/
|
|
78
|
-
export function argbToCss(argb) {
|
|
79
|
-
const unsigned = argb >>> 0;
|
|
80
|
-
const r = (unsigned >> 16) & 0xFF;
|
|
81
|
-
const g = (unsigned >> 8) & 0xFF;
|
|
82
|
-
const b = unsigned & 0xFF;
|
|
83
|
-
return '#' + r.toString(16).padStart(2, '0') +
|
|
84
|
-
g.toString(16).padStart(2, '0') +
|
|
85
|
-
b.toString(16).padStart(2, '0');
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=color.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/utils/color.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface ParsedStyle {
|
|
2
|
-
[key: string]: string;
|
|
3
|
-
}
|
|
4
|
-
/**
|
|
5
|
-
* Parse a CSS inline style string into a key-value object.
|
|
6
|
-
* Keys are camelCase (e.g. "fontSize", "fontFamily").
|
|
7
|
-
*/
|
|
8
|
-
export declare function parseInlineStyle(style: string): ParsedStyle;
|
|
9
|
-
/**
|
|
10
|
-
* Parse a font-size CSS value to points.
|
|
11
|
-
* Supports: px (converts to pt), pt (as-is), bare numbers (assumed pt).
|
|
12
|
-
*/
|
|
13
|
-
export declare function parseFontSize(value: string): number;
|
|
14
|
-
/**
|
|
15
|
-
* Parse a CSS length value (px/pt/em/rem/cm/mm/in/unitless) to points.
|
|
16
|
-
* Whitespace tolerant. Returns 0 for unparseable input.
|
|
17
|
-
*/
|
|
18
|
-
export declare function parseLengthPt(value: string, defaultUnit?: 'pt' | 'px'): number;
|
|
19
|
-
/**
|
|
20
|
-
* Build a CSS inline style string from a record of properties.
|
|
21
|
-
* Keys should be camelCase, they'll be converted to kebab-case.
|
|
22
|
-
*/
|
|
23
|
-
export declare function buildInlineStyle(props: Record<string, string | number | undefined>): string;
|
package/dist/src/utils/style.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parse a CSS inline style string into a key-value object.
|
|
3
|
-
* Keys are camelCase (e.g. "fontSize", "fontFamily").
|
|
4
|
-
*/
|
|
5
|
-
export function parseInlineStyle(style) {
|
|
6
|
-
const result = {};
|
|
7
|
-
if (!style)
|
|
8
|
-
return result;
|
|
9
|
-
const declarations = style.split(';');
|
|
10
|
-
for (const decl of declarations) {
|
|
11
|
-
const colonIdx = decl.indexOf(':');
|
|
12
|
-
if (colonIdx === -1)
|
|
13
|
-
continue;
|
|
14
|
-
const prop = decl.slice(0, colonIdx).trim();
|
|
15
|
-
const value = decl.slice(colonIdx + 1).trim();
|
|
16
|
-
if (!prop || !value)
|
|
17
|
-
continue;
|
|
18
|
-
const camelProp = prop.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
19
|
-
result[camelProp] = value;
|
|
20
|
-
}
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Parse a font-size CSS value to points.
|
|
25
|
-
* Supports: px (converts to pt), pt (as-is), bare numbers (assumed pt).
|
|
26
|
-
*/
|
|
27
|
-
export function parseFontSize(value) {
|
|
28
|
-
const match = value.match(/^([\d.]+)\s*(px|pt|em|rem)?$/);
|
|
29
|
-
if (!match)
|
|
30
|
-
return 12; // default
|
|
31
|
-
const num = parseFloat(match[1]);
|
|
32
|
-
const unit = match[2] || 'pt';
|
|
33
|
-
switch (unit) {
|
|
34
|
-
case 'px': return num * 0.75;
|
|
35
|
-
case 'pt': return num;
|
|
36
|
-
case 'em':
|
|
37
|
-
case 'rem': return num * 12; // assume 12pt base
|
|
38
|
-
default: return num;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Parse a CSS length value (px/pt/em/rem/cm/mm/in/unitless) to points.
|
|
43
|
-
* Whitespace tolerant. Returns 0 for unparseable input.
|
|
44
|
-
*/
|
|
45
|
-
export function parseLengthPt(value, defaultUnit = 'pt') {
|
|
46
|
-
if (!value)
|
|
47
|
-
return 0;
|
|
48
|
-
const m = value.trim().match(/^(-?[\d.]+)\s*(px|pt|em|rem|cm|mm|in)?$/);
|
|
49
|
-
if (!m)
|
|
50
|
-
return 0;
|
|
51
|
-
const n = parseFloat(m[1]);
|
|
52
|
-
if (isNaN(n))
|
|
53
|
-
return 0;
|
|
54
|
-
const unit = m[2] ?? defaultUnit;
|
|
55
|
-
switch (unit) {
|
|
56
|
-
case 'px': return n * 0.75;
|
|
57
|
-
case 'pt': return n;
|
|
58
|
-
case 'em':
|
|
59
|
-
case 'rem': return n * 12;
|
|
60
|
-
case 'cm': return n * 28.3465;
|
|
61
|
-
case 'mm': return n * 2.83465;
|
|
62
|
-
case 'in': return n * 72;
|
|
63
|
-
default: return n;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Build a CSS inline style string from a record of properties.
|
|
68
|
-
* Keys should be camelCase, they'll be converted to kebab-case.
|
|
69
|
-
*/
|
|
70
|
-
export function buildInlineStyle(props) {
|
|
71
|
-
const parts = [];
|
|
72
|
-
for (const [key, value] of Object.entries(props)) {
|
|
73
|
-
if (value === undefined || value === '')
|
|
74
|
-
continue;
|
|
75
|
-
const kebab = key.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
76
|
-
parts.push(`${kebab}:${value}`);
|
|
77
|
-
}
|
|
78
|
-
return parts.join(';');
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=style.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/utils/style.ts"],"names":[],"mappings":"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"}
|