colormaps = {
const parser = new DOMParser();
const $document = parser.parseFromString(FILE, 'text/xml');
const $colormaps = $document.querySelectorAll('colormap');
const colormaps = [];
for (const $colormap of $colormaps) {
const $name = $colormap.querySelector('name');
const $points = $colormap.querySelector('points');
const $colors = $colormap.querySelector('rgb_points');
const $range = $colormap.querySelector('range');
const name = $name.textContent;
const points = GROUPER(NUMBERS($points.textContent), 4).map(([x, a, ..._]) => ({ x, a }));
const colors = GROUPER(NUMBERS($colors.textContent), 4).map(([x, r, g, b]) => ({ x, r, g, b }));
const [lo, hi] = NUMBERS($range.textContent);
const range = { lo, hi };
const colormap = { name, points, colors, range };
colormaps.push(colormap);
}
return colormaps;
function NUMBERS(text) {
const re = /[ \t\n,]+/g;
text = text.replaceAll(re, ',');
return text.split(',').filter((d) => d !== '').map((d) => Number.parseFloat(d));
}
function GROUPER(values, k) {
const groups = [];
for (let i=0, n=values.length; i<n; i+=k) {
const group = values.slice(i, i+k);
groups.push(group);
}
return groups;
}
}