diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/colors.js | 110 | ||||
-rw-r--r-- | tools/gencode.js | 106 | ||||
-rw-r--r-- | tools/gencolors.js | 78 | ||||
-rw-r--r-- | tools/genlayout.js | 37 | ||||
-rw-r--r-- | tools/layout.svg | 920 |
5 files changed, 1251 insertions, 0 deletions
diff --git a/tools/colors.js b/tools/colors.js new file mode 100644 index 0000000..f8f7ace --- /dev/null +++ b/tools/colors.js @@ -0,0 +1,110 @@ +"use strict" + +function rgb_from_any(color) { + switch (color.mode) { + case "rgb": return color + case "lrgb": return rgb_from_lrgb(color) + case "oklab": return rgb_from_oklab(color) + } +} + +function lrgb_from_any(color) { + switch (color.mode) { + case "rgb": return lrgb_from_rgb(color) + case "lrgb": return color + case "oklab": return lrgb_from_oklab(color) + } +} + +function oklab_from_any(color) { + switch (color.mode) { + case "rgb": return oklab_from_rgb(color) + case "lrgb": return oklab_from_lrgb(color) + case "oklab": return color + } +} + +function format_hex(color) { + let {r, g, b} = rgb_from_any(color) + let adj = 1 + r = Math.round(Math.max(0, Math.min(1, r)) * 255) + g = Math.round(Math.max(0, Math.min(1, g)) * 255) + b = Math.round(Math.max(0, Math.min(1, b)) * 255) + let x = (r << 16) | (g << 8) | b + return "#" + x.toString(16).padStart(6, "0") +} + +function parse_hex(str) { + let x = parseInt(str.substring(1), 16) + return { + mode: "rgb", + r: ((x >> 16) & 255) / 255.0, + g: ((x >> 8) & 255) / 255.0, + b: ((x) & 255) / 255.0 + } +} + +function lrgb_from_rgb({ r, g, b }) { + function to_linear(c) { + let ac = Math.abs(c) + if (ac < 0.04045) + return c / 12.92 + return (Math.sign(c) || 1) * Math.pow((ac + 0.055) / 1.055, 2.4) + } + return { + mode: "lrgb", + r: to_linear(r), + g: to_linear(g), + b: to_linear(b) + } +} + +function rgb_from_lrgb({ r, g, b }) { + function from_linear(c) { + let ac = Math.abs(c) + if (ac > 0.0031308) + return (Math.sign(c) || 1) * (1.055 * Math.pow(ac, 1 / 2.4) - 0.055) + return c * 12.92 + } + return { + mode: "rgb", + r: from_linear(r), + g: from_linear(g), + b: from_linear(b) + } +} + +function oklab_from_lrgb({ r, g, b }) { + let L = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b) + let M = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b) + let S = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b) + return { + mode: "oklab", + l: 0.2104542553 * L + 0.793617785 * M - 0.0040720468 * S, + a: 1.9779984951 * L - 2.428592205 * M + 0.4505937099 * S, + b: 0.0259040371 * L + 0.7827717662 * M - 0.808675766 * S + } +} + +function lrgb_from_oklab({ l, a, b }) { + let L = Math.pow(l + 0.3963377774 * a + 0.2158037573 * b, 3) + let M = Math.pow(l - 0.1055613458 * a - 0.0638541728 * b, 3) + let S = Math.pow(l - 0.0894841775 * a - 1.291485548 * b, 3) + return { + mode: "lrgb", + r: +4.0767416621 * L - 3.3077115913 * M + 0.2309699292 * S, + g: -1.2684380046 * L + 2.6097574011 * M - 0.3413193965 * S, + b: -0.0041960863 * L - 0.7034186147 * M + 1.707614701 * S + } +} + +function oklab_from_rgb(rgb) { + return oklab_from_lrgb(lrgb_from_rgb(rgb)) +} + +function rgb_from_oklab(oklab) { + return rgb_from_lrgb(lrgb_from_oklab(oklab)) +} + +if (typeof module === "object") + module.exports = { format_hex, parse_hex, rgb_from_any, lrgb_from_any, oklab_from_any } diff --git a/tools/gencode.js b/tools/gencode.js new file mode 100644 index 0000000..f2e3a26 --- /dev/null +++ b/tools/gencode.js @@ -0,0 +1,106 @@ +"use strict" + +let fs = require("fs") + +let pc = 0 + +function tokenize(s) { + let list = [] + let p = 0, + n = s.length + while (p < n) { + while (p < n && s[p] === " ") + ++p + if (p < n) { + let m = p + while (p < n && s[p] !== " ") { + let q = s[p++] + switch (q) { + case "(": + case "[": + case "{": + for (let x = 1; p < n && x > 0; ++p) { + switch (s[p]) { + case "(": + case "[": + case "{": + ++x + break + case ")": + case "]": + case "}": + --x + break + } + } + break + case '"': + case "'": + case "`": + while (p < n && s[p] !== q) + ++p + break + } + } + list.push(s.substring(m, p)) + } + } + return list +} + +function emit(line) { + ++pc + line[0] = "vm_" + line[0] + for (let i = 1; i < line.length; ++i) { + if (typeof line[i] === "string") { + if (line[i] === "all") + line[i] = 999 + if (line[i][0] === "(" && !line[i].match(/\)=>/)) + line[i] = "()=>" + line[i] + if (line[i][0] === "`") + line[i] = "()=>" + line[i] + } + } + console.log("\t[ " + line.join(", ") + " ],") +} + +console.log("const CODE = []") +let first = false + +for (let line of fs.readFileSync("events.txt", "utf-8").split("\n")) { + line = line.trim() + if (line.length === 0 || line[0] === "#") + continue + if (line === "EOF") + break + line = tokenize(line) + switch (line[0]) { + case "CARD": + if (first++) { + emit(["return"]) + console.log("]") + } + console.log("") + console.log("CODE[" + line[1] + "] = [ // " + line.slice(3).join(" ")) + break + + case "log": + case "prompt": + emit([ line[0], line.slice(1).join(" ") ]) + break + + case "asm": + case "if": + case "while": + emit([ line[0], "()=>" + line.slice(1).join(" ") ]) + break + + default: + emit(line) + break + } +} + +emit(["return"]) +console.log("]") +console.log("// #endregion") diff --git a/tools/gencolors.js b/tools/gencolors.js new file mode 100644 index 0000000..5904741 --- /dev/null +++ b/tools/gencolors.js @@ -0,0 +1,78 @@ +const { parse_hex, format_hex, lrgb_from_any, rgb_from_any, oklab_from_any } = require("./colors.js") + +const white = "#ffffff" +const black = "#000000" + +function lerp(a, b, n) { + return a + (b - a) * n +} + +function blend(a, b, n) { + a = lrgb_from_any(parse_hex(a)) + b = lrgb_from_any(parse_hex(b)) + return format_hex({ + mode: "lrgb", + r: lerp(a.r, b.r, n), + g: lerp(a.g, b.g, n), + b: lerp(a.b, b.b, n) + }) +} + +function multiply_luminance(hex, m) { + let oklab = oklab_from_any(parse_hex(hex)) + oklab.l = Math.max(0, Math.min(1, oklab.l * m)) + return format_hex(oklab) +} + +function add_luminance(hex, m) { + let oklab = oklab_from_any(parse_hex(hex)) + oklab.l = Math.max(0, Math.min(1, oklab.l + m)) + return format_hex(oklab) +} + +function make_3d_colors(base) { + return [ + base, + multiply_luminance(base, 0.9), + multiply_luminance(base, 0.8), + multiply_luminance(base, 0.7), + multiply_luminance(base, 0.4) + ] +} + +function make_2d_colors(base) { + return [ + base, + multiply_luminance(base, 1.2), + multiply_luminance(base, 0.8), + multiply_luminance(base, 0.4) + ] +} + +function make_2d_colors_add(base) { + return [ + base, + add_luminance(base, 0.2), + add_luminance(base, -0.2), + add_luminance(base, -0.5), + ] +} + +function print(x) { + console.log(x) +} + +function gencss(color, sel) { + let [ bg, hi, lo, sh ] = make_2d_colors(color) + print(`${sel} { background-color: ${color}; border-color: ${hi} ${lo} ${lo} ${hi}; box-shadow: 0 0 0 1px ${sh}, 1px 2px 4px #0008; }`) +} + +gencss("#bbbbbb", ".marker") +gencss("#c4e2f6", ".demInfl.ctl") +gencss("#c1272d", ".comInfl.ctl") +gencss("#147fc0", "#marker_action_round.com") +gencss("#c1272d", "#marker_action_round.dem") +gencss("#fadb04", "#marker_vp, #marker_turn") +gencss("#f26649", "#marker_com_tst") +gencss("#c4e2f4", "#marker_dem_tst") + diff --git a/tools/genlayout.js b/tools/genlayout.js new file mode 100644 index 0000000..37f419d --- /dev/null +++ b/tools/genlayout.js @@ -0,0 +1,37 @@ +const fs = require("fs") + +let boxes = [] +let mode, name, x, y, w, h + +function flush() { + if (mode === 'rect') { + boxes[name] = [ x |0, y |0, w |0, h |0 ] + } + x = y = w = h = 0 + name = null +} + +for (let line of fs.readFileSync("tools/layout.svg", "utf-8").split("\n")) { + line = line.trim() + if (line.startsWith("<rect")) { + flush() + mode = "rect" + x = y = w = h = 0 + } else if (line.startsWith('x="')) + x = Math.round(Number(line.split('"')[1])) + else if (line.startsWith('y="')) + y = Math.round(Number(line.split('"')[1])) + else if (line.startsWith('width="')) + w = Math.round(Number(line.split('"')[1])) + else if (line.startsWith('height="')) + h = Math.round(Number(line.split('"')[1])) + else if (line.startsWith('inkscape:label="')) + name = line.split('"')[1] +} + +flush() + +console.log("var LAYOUT = {") +for (let key of Object.keys(boxes).sort()) + console.log("\t\"" + key + "\": " + JSON.stringify(boxes[key]) + ",") +console.log("}") diff --git a/tools/layout.svg b/tools/layout.svg new file mode 100644 index 0000000..36c6045 --- /dev/null +++ b/tools/layout.svg @@ -0,0 +1,920 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1650" + height="2550" + version="1.1" + id="svg6" + sodipodi:docname="layout.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <metadata + id="metadata12"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs10" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="640" + inkscape:window-height="480" + id="namedview8" + showgrid="false" + inkscape:zoom="1" + inkscape:cx="1183.328" + inkscape:cy="683.50131" + inkscape:current-layer="svg6" + inkscape:snap-grids="true" + inkscape:document-rotation="0"> + <inkscape:grid + type="xygrid" + id="grid14" /> + </sodipodi:namedview> + <image + sodipodi:absref="/home/tor/src/rally/public/1989-dawn-of-freedom/map75.png" + xlink:href="../map75.png" + style="display:inline;opacity:1" + id="image2" + sodipodi:insensitive="true" + image-rendering="pixelated" + height="2550" + width="1650" + y="0" + x="0" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect16" + width="127" + height="76" + x="148" + y="86" + inkscape:label="Schwerin" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect18" + width="127" + height="76" + x="299" + y="53" + inkscape:label="Rostock" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect22" + width="127" + height="75" + x="329" + y="148" + inkscape:label="Berlin" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect26" + width="127" + height="76" + x="81" + y="239" + inkscape:label="German Writers" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect28" + width="127" + height="76" + x="234" + y="240" + inkscape:label="Walter Ulbricht Academy" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect30" + width="127" + height="76" + x="391" + y="271" + inkscape:label="Lutheran Church" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect32" + width="127" + height="75" + x="574" + y="263" + inkscape:label="Szczecin" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect36" + width="127" + height="76" + x="896" + y="277" + inkscape:label="Gdansk" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect38" + width="127" + height="75" + x="79" + y="352" + inkscape:label="Magdeburg" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect40" + width="127" + height="75" + x="231" + y="357" + inkscape:label="Halle" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect42" + width="127" + height="76" + x="38" + y="455" + inkscape:label="Erfurt" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect44" + width="127" + height="75" + x="184" + y="492" + inkscape:label="Karl-Marx-Stadt" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect46" + width="127" + height="76" + x="343" + y="479" + inkscape:label="Dresden" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect48" + width="127" + height="76" + x="211" + y="615" + inkscape:label="Plzen" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect50" + width="128" + height="76" + x="491" + y="677" + inkscape:label="Charles University" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect54" + width="127" + height="75" + x="595" + y="565" + inkscape:label="Wroclaw" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect56" + width="127" + height="75" + x="802" + y="558" + inkscape:label="Catholic Church, Poland" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect58" + width="127" + height="76" + x="959" + y="620" + inkscape:label="Lodz" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect60" + width="127" + height="75" + x="1032" + y="490" + inkscape:label="Warszawa" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect62" + width="127" + height="76" + x="671" + y="452" + inkscape:label="Poznan" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect67" + width="127" + height="76" + x="872" + y="388" + inkscape:label="Bydgoszcz" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect71" + width="127" + height="76" + x="1202" + y="436" + inkscape:label="Bialystok" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect75" + width="127" + height="77" + x="260" + y="765" + inkscape:label="Ceske Budejovice" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect77" + width="127" + height="75" + x="412" + y="782" + inkscape:label="Praha" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect79" + width="127" + height="76" + x="573" + y="773" + inkscape:label="Czech Writers" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect81" + width="127" + height="76" + x="733" + y="723" + inkscape:label="Katowice" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect83" + width="127" + height="76" + x="911" + y="761" + inkscape:label="Krakow" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect85" + width="127" + height="76" + x="1124" + y="754" + inkscape:label="Lublin" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect87" + width="127" + height="76" + x="870" + y="867" + inkscape:label="Jagiellonian University" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect89" + width="127" + height="75" + x="1051" + y="883" + inkscape:label="Polish Writers" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect91" + width="127" + height="75" + x="673" + y="868" + inkscape:label="Ostrava" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect97" + width="127" + height="76" + x="521" + y="904" + inkscape:label="Brno" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect99" + width="127" + height="76" + x="539" + y="1013" + inkscape:label="Bratislava" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect101" + width="127" + height="75" + x="692" + y="1010" + inkscape:label="Catholic Church, Czechoslovakia" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect103" + width="127" + height="75" + x="844" + y="1010" + inkscape:label="Presov" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect105" + width="127" + height="76" + x="995" + y="1037" + inkscape:label="Kosice" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect109" + width="127" + height="76" + x="409" + y="1126" + inkscape:label="Catholic Church, Hungary" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect111" + width="127" + height="76" + x="560" + y="1129" + inkscape:label="Gyor" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect113" + width="127" + height="75" + x="706" + y="1126" + inkscape:label="Tatabanya" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect115" + width="127" + height="76" + x="851" + y="1146" + inkscape:label="Miskolc" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect117" + width="127" + height="76" + x="1000" + y="1192" + inkscape:label="Debrecen" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect119" + width="127" + height="76" + x="410" + y="1224" + inkscape:label="Szombathely" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect121" + width="127" + height="75" + x="571" + y="1223" + inkscape:label="Szekesfehervar" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect123" + width="127" + height="76" + x="809" + y="1249" + inkscape:label="Budapest" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect129" + width="127" + height="76" + x="812" + y="1364" + inkscape:label="Szeged" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect131" + width="127" + height="76" + x="658" + y="1314" + inkscape:label="Eotvos Lorand University" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect133" + width="127" + height="76" + x="452" + y="1322" + inkscape:label="Hungarian Writers" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect135" + width="127" + height="75" + x="626" + y="1406" + inkscape:label="Pecs" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect137" + width="127" + height="76" + x="1369" + y="1395" + inkscape:label="Iasi" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect139" + width="127" + height="76" + x="1169" + y="1443" + inkscape:label="Targu Mures" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect141" + width="127" + height="76" + x="970" + y="1429" + inkscape:label="Cluj-Napoca" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect143" + width="127" + height="76" + x="767" + y="1531" + inkscape:label="Timisoara" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect145" + width="127" + height="75" + x="947" + y="1625" + inkscape:label="Romanian Writers" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect147" + width="127" + height="75" + x="958" + y="1529" + inkscape:label="Babes-Bolyai University" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect149" + width="127" + height="75" + x="1186" + y="1560" + inkscape:label="Harghita/Covasna" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect151" + width="127" + height="75" + x="1339" + y="1556" + inkscape:label="Brasov" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect153" + width="127" + height="76" + x="1356" + y="1671" + inkscape:label="Ploiesti" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect155" + width="127" + height="76" + x="1409" + y="1778" + inkscape:label="Galati" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect157" + width="127" + height="76" + x="1186" + y="1837" + inkscape:label="Bucuresti" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect159" + width="127" + height="76" + x="977" + y="1793" + inkscape:label="Craiova" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect161" + width="127" + height="76" + x="1094" + y="1700" + inkscape:label="Orthodox Church, Romania" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect163" + width="127" + height="76" + x="387" + y="379" + inkscape:label="Leipzig" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect165" + width="127" + height="76" + x="979" + y="1948" + inkscape:label="Pleven" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect167" + width="127" + height="76" + x="1130" + y="1956" + inkscape:label="Orthodox Church, Bulgaria" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect169" + width="127" + height="76" + x="1277" + y="1956" + inkscape:label="Ruse" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect171" + width="127" + height="76" + x="1443" + y="1925" + inkscape:label="Constanta" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect175" + width="127" + height="76" + x="828" + y="2095" + inkscape:label="Sofia University" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect177" + width="127" + height="76" + x="983" + y="2098" + inkscape:label="Sofia" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect179" + width="127" + height="75" + x="1133" + y="2153" + inkscape:label="Stara Zagora" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect181" + width="127" + height="76" + x="1289" + y="2152" + inkscape:label="Burgas" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect183" + width="127" + height="76" + x="1219" + y="2057" + inkscape:label="Razgrad" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect185" + width="127" + height="76" + x="1387" + y="2051" + inkscape:label="Varna" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect187" + width="127" + height="75" + x="1144" + y="2251" + inkscape:label="Sliven" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect189" + width="127" + height="75" + x="987" + y="2209" + inkscape:label="Plovdiv" /> + <rect + style="display:inline;fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect191" + width="127" + height="76" + x="838" + y="2192" + inkscape:label="Bulgarian Writers" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect207" + width="48" + height="48" + x="1381" + y="1080" + inkscape:label="ussr_1" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect209" + width="48" + height="48" + x="1381" + y="1134" + inkscape:label="ussr_2" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect211" + width="48" + height="48" + x="1381" + y="1188" + inkscape:label="ussr_3" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect213" + width="48" + height="48" + x="1381" + y="1243" + inkscape:label="ussr_4" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect215" + width="48" + height="48" + x="1381" + y="1297" + inkscape:label="ussr_5" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect217" + width="47" + height="47" + x="53" + y="2128" + inkscape:label="tst_dem_1" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect229" + width="47" + height="47" + x="469" + y="2128" + inkscape:label="tst_dem_7" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect231" + width="47" + height="47" + x="556" + y="2128" + inkscape:label="tst_dem_8" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect236" + width="47" + height="47" + x="53" + y="2257" + inkscape:label="tst_com_1" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect248" + width="47" + height="47" + x="469" + y="2257" + inkscape:label="tst_com_7" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect250" + width="47" + height="47" + x="556" + y="2257" + inkscape:label="tst_com_8" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect252" + width="55" + height="51" + x="215" + y="2395" + inkscape:label="vp_neg_20" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect254" + width="55" + height="50" + x="246" + y="2456" + inkscape:label="vp_neg_19" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect256" + width="55" + height="51" + x="843" + y="2425" + inkscape:label="vp_0" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect258" + width="55" + height="50" + x="883" + y="2395" + inkscape:label="vp_1" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect260" + width="55" + height="50" + x="1440" + y="2395" + inkscape:label="vp_19" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect262" + width="55" + height="51" + x="1471" + y="2455" + inkscape:label="vp_20" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect264" + width="56" + height="51" + x="913" + y="2455" + inkscape:label="vp_2" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect266" + width="56" + height="51" + x="803" + y="2455" + inkscape:label="vp_neg_1" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect268" + width="56" + height="51" + x="772" + y="2395" + inkscape:label="vp_neg_2" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect24" + width="40" + height="41" + x="222" + y="179" + inkscape:label="event_the_wall" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect34" + width="44" + height="43" + x="779" + y="270" + inkscape:label="event_solidarity_legalized" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect193" + width="47" + height="48" + x="655" + y="81" + inkscape:label="turn_1" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect195" + width="48" + height="44" + x="708" + y="143" + inkscape:label="action_1" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect203" + width="48" + height="48" + x="1133" + y="80" + inkscape:label="turn_10" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect205" + width="47" + height="43" + x="1080" + y="143" + inkscape:label="action_8" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect52" + width="44" + height="39" + x="463" + y="624" + inkscape:label="country_czechoslovakia" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect69" + width="44" + height="39" + x="1188" + y="292" + inkscape:label="country_poland" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect73" + width="43" + height="37" + x="560" + y="160" + inkscape:label="country_east_germany" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect125" + width="44" + height="39" + x="1034" + y="1319" + inkscape:label="country_hungary" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect127" + width="44" + height="39" + x="1287" + y="1349" + inkscape:label="country_romania" /> + <rect + style="fill:#00fff2;fill-opacity:0.566802;stroke-width:0.355276" + id="rect173" + width="46" + height="41" + x="915" + y="1999" + inkscape:label="country_bulgaria" /> +</svg> |