File size: 1,870 Bytes
0ad74ed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import { colors } from "@gradio/theme";

export function name_to_rgba(
	name: string,
	a: number,
	ctx: CanvasRenderingContext2D | null
): string {
	if (!ctx) {
		var canvas = document.createElement("canvas");
		ctx = canvas.getContext("2d")!;
	}
	ctx.fillStyle = name;
	ctx.fillRect(0, 0, 1, 1);
	const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data;
	ctx.clearRect(0, 0, 1, 1);
	return `rgba(${r}, ${g}, ${b}, ${255 / a})`;
}

export function correct_color_map(
	color_map: Record<string, string>,
	_color_map: Record<string, { primary: string; secondary: string }>,
	browser: any,
	ctx: CanvasRenderingContext2D | null
): void {
	for (const col in color_map) {
		const _c = color_map[col].trim();

		if (_c in colors) {
			_color_map[col] = colors[_c as keyof typeof colors];
		} else {
			_color_map[col] = {
				primary: browser
					? name_to_rgba(color_map[col], 1, ctx)
					: color_map[col],
				secondary: browser
					? name_to_rgba(color_map[col], 0.5, ctx)
					: color_map[col]
			};
		}
	}
}

export function merge_elements(
	value: { token: string; class_or_confidence: string | number | null }[],
	mergeMode: "empty" | "equal"
): { token: string; class_or_confidence: string | number | null }[] {
	let result: typeof value = [];
	let tempStr: string | null = null;
	let tempVal: string | number | null = null;

	for (const val of value) {
		if (
			(mergeMode === "empty" && val.class_or_confidence === null) ||
			(mergeMode === "equal" && tempVal === val.class_or_confidence)
		) {
			tempStr = tempStr ? tempStr + val.token : val.token;
		} else {
			if (tempStr !== null) {
				result.push({
					token: tempStr,
					class_or_confidence: tempVal
				});
			}
			tempStr = val.token;
			tempVal = val.class_or_confidence;
		}
	}

	if (tempStr !== null) {
		result.push({
			token: tempStr,
			class_or_confidence: tempVal
		});
	}

	return result;
}