summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/colors.js110
-rw-r--r--tools/gencode.js106
-rw-r--r--tools/gencolors.js78
-rw-r--r--tools/genlayout.js37
-rw-r--r--tools/layout.svg920
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>