151 lines
5.4 KiB
TypeScript
151 lines
5.4 KiB
TypeScript
|
|
import { strip_svg } from './svg';
|
|
|
|
export function post_process_pikchr_svg(svg: string, size?: string) {
|
|
svg = strip_svg(svg);
|
|
|
|
// text
|
|
for (const [ color, regex ] of Object.entries(text_regex)) {
|
|
svg = svg.replace(regex, `<text fill="${text_css_vars[color]}"`);
|
|
}
|
|
|
|
// shape fill
|
|
for (const [ color, regex ] of Object.entries(shape_fill_regex)) {
|
|
svg = svg.replace(regex, `<path style="fill:${fill_css_vars[color]}`);
|
|
}
|
|
|
|
// arrow heads
|
|
for (const [ color, regex ] of Object.entries(arrow_head_regex)) {
|
|
svg = svg.replace(regex, `fill:${line_css_vars[color]}`);
|
|
}
|
|
|
|
// lines / boxes
|
|
for (const [ color, regex ] of Object.entries(line_regex)) {
|
|
svg = svg.replace(regex, `stroke:${line_css_vars[color]}`);
|
|
}
|
|
|
|
return svg;
|
|
}
|
|
|
|
|
|
|
|
type CSSVarColor
|
|
= 'black'
|
|
| 'red'
|
|
| 'orange'
|
|
| 'yellow'
|
|
| 'green'
|
|
| 'teal'
|
|
| 'pink'
|
|
| 'purple'
|
|
| 'blue'
|
|
| 'indigo'
|
|
| 'magenta'
|
|
| 'brown'
|
|
;
|
|
|
|
const text_regex: Record<CSSVarColor, RegExp> = {
|
|
black: /<text fill="rgb\(0,0,0\)"/gi,
|
|
red: /<text fill="rgb\(255,0,0\)"/gi,
|
|
orange: /<text fill="rgb\(255,165,0\)"/gi,
|
|
yellow: /<text fill="rgb\(255,255,0\)"/gi,
|
|
green: /<text fill="rgb\(0,128,0\)"/gi,
|
|
teal: /<text fill="rgb\(0,128,128\)"/gi,
|
|
pink: /<text fill="rgb\(255,192,203\)"/gi,
|
|
purple: /<text fill="rgb\(128,0,128\)"/gi,
|
|
blue: /<text fill="rgb\(0,0,255\)"/gi,
|
|
indigo: /<text fill="rgb\(75,0,130\)"/gi,
|
|
magenta: /<text fill="rgb\(255,0,255\)"/gi,
|
|
brown: /<text fill="rgb\(165,42,42\)"/gi,
|
|
};
|
|
|
|
const line_regex: Record<CSSVarColor, RegExp> = {
|
|
black: /stroke:rgb\(0,0,0\)/gi,
|
|
red: /stroke:rgb\(255,0,0\)/gi,
|
|
orange: /stroke:rgb\(255,165,0\)/gi,
|
|
yellow: /stroke:rgb\(255,255,0\)/gi,
|
|
green: /stroke:rgb\(0,128,0\)/gi,
|
|
teal: /stroke:rgb\(0,128,128\)/gi,
|
|
pink: /stroke:rgb\(255,192,203\)/gi,
|
|
purple: /stroke:rgb\(128,0,128\)/gi,
|
|
blue: /stroke:rgb\(0,0,255\)/gi,
|
|
indigo: /stroke:rgb\(75,0,130\)/gi,
|
|
magenta: /stroke:rgb\(255,0,255\)/gi,
|
|
brown: /stroke:rgb\(165,42,42\)/gi,
|
|
};
|
|
|
|
const shape_fill_regex = {
|
|
black: /<path style="fill:rgb\(0,0,0\)/gi,
|
|
red: /<path style="fill:rgb\(255,0,0\)/gi,
|
|
orange: /<path style="fill:rgb\(255,165,0\)/gi,
|
|
yellow: /<path style="fill:rgb\(255,255,0\)/gi,
|
|
green: /<path style="fill:rgb\(0,128,0\)/gi,
|
|
teal: /<path style="fill:rgb\(0,128,128\)/gi,
|
|
pink: /<path style="fill:rgb\(255,192,203\)/gi,
|
|
purple: /<path style="fill:rgb\(128,0,128\)/gi,
|
|
blue: /<path style="fill:rgb\(0,0,255\)/gi,
|
|
indigo: /<path style="fill:rgb\(75,0,130\)/gi,
|
|
magenta: /<path style="fill:rgb\(255,0,255\)/gi,
|
|
brown: /<path style="fill:rgb\(165,42,42\)/gi,
|
|
}
|
|
|
|
const arrow_head_regex: Record<CSSVarColor, RegExp> = {
|
|
black: /fill:rgb\(0,0,0\)/gi,
|
|
red: /fill:rgb\(255,0,0\)/gi,
|
|
orange: /fill:rgb:\(255,165,0\)/gi,
|
|
yellow: /fill:rgb:\(255,255,0\)/gi,
|
|
green: /fill:rgb:\(0,128,0\)/gi,
|
|
teal: /fill:rgb:\(0,128,128\)/gi,
|
|
pink: /fill:rgb:\(255,192,203\)/gi,
|
|
purple: /fill:rgb:\(128,0,128\)/gi,
|
|
blue: /fill:rgb:\(0,0,255\)/gi,
|
|
indigo: /fill:rgb:\(75,0,130\)/gi,
|
|
magenta: /fill:rgb:\(255,0,255\)/gi,
|
|
brown: /fill:rgb:\(165,42,42\)/gi,
|
|
};
|
|
|
|
const line_css_vars: Record<CSSVarColor, string> = {
|
|
black: 'var(--theme-line, currentcolor)',
|
|
red: 'var(--theme-chart-shape-red-line, currentcolor)',
|
|
orange: 'var(--theme-chart-shape-orange-line, currentcolor)',
|
|
yellow: 'var(--theme-chart-shape-yellow-line, currentcolor)',
|
|
green: 'var(--theme-chart-shape-green-line, currentcolor)',
|
|
teal: 'var(--theme-chart-shape-teal-line, currentcolor)',
|
|
pink: 'var(--theme-chart-shape-pink-line, currentcolor)',
|
|
purple: 'var(--theme-chart-shape-purple-line, currentcolor)',
|
|
blue: 'var(--theme-chart-shape-blue-line, currentcolor)',
|
|
indigo: 'var(--theme-chart-shape-indigo-line, currentcolor)',
|
|
magenta: 'var(--theme-chart-shape-magenta-line, currentcolor)',
|
|
brown: 'var(--theme-chart-shape-brown-line, currentcolor)',
|
|
};
|
|
|
|
const text_css_vars: Record<CSSVarColor, string> = {
|
|
black: 'var(--theme-text-body, currentcolor)',
|
|
red: 'var(--theme-chart-shape-red-line, currentcolor)',
|
|
orange: 'var(--theme-chart-shape-orange-line, currentcolor)',
|
|
yellow: 'var(--theme-chart-shape-yellow-line, currentcolor)',
|
|
green: 'var(--theme-chart-shape-green-line, currentcolor)',
|
|
teal: 'var(--theme-chart-shape-teal-line, currentcolor)',
|
|
pink: 'var(--theme-chart-shape-pink-line, currentcolor)',
|
|
purple: 'var(--theme-chart-shape-purple-line, currentcolor)',
|
|
blue: 'var(--theme-chart-shape-blue-line, currentcolor)',
|
|
indigo: 'var(--theme-chart-shape-indigo-line, currentcolor)',
|
|
magenta: 'var(--theme-chart-shape-magenta-line, currentcolor)',
|
|
brown: 'var(--theme-chart-shape-brown-line, currentcolor)',
|
|
};
|
|
|
|
const fill_css_vars: Record<CSSVarColor, string> = {
|
|
black: 'var(--theme-bg-heavy, transparent)',
|
|
red: 'var(--theme-chart-shape-red-fill, transparent)',
|
|
orange: 'var(--theme-chart-shape-orange-fill, transparent)',
|
|
yellow: 'var(--theme-chart-shape-yellow-fill, transparent)',
|
|
green: 'var(--theme-chart-shape-green-fill, transparent)',
|
|
teal: 'var(--theme-chart-shape-teal-fill, transparent)',
|
|
pink: 'var(--theme-chart-shape-pink-fill, transparent)',
|
|
purple: 'var(--theme-chart-shape-purple-fill, transparent)',
|
|
blue: 'var(--theme-chart-shape-blue-fill, transparent)',
|
|
indigo: 'var(--theme-chart-shape-indigo-fill, transparent)',
|
|
magenta: 'var(--theme-chart-shape-magenta-fill, transparent)',
|
|
brown: 'var(--theme-chart-shape-brown-fill, transparent)',
|
|
};
|