Code

Added new extension: Alphabet Soup
authorjoelholdsworth <joelholdsworth@users.sourceforge.net>
Tue, 18 Mar 2008 23:02:45 +0000 (23:02 +0000)
committerjoelholdsworth <joelholdsworth@users.sourceforge.net>
Tue, 18 Mar 2008 23:02:45 +0000 (23:02 +0000)
78 files changed:
configure.ac
share/extensions/Makefile.am
share/extensions/alphabet_soup/2.svg [new file with mode: 0755]
share/extensions/alphabet_soup/3.svg [new file with mode: 0755]
share/extensions/alphabet_soup/6.svg [new file with mode: 0755]
share/extensions/alphabet_soup/7.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Cblob.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Chook.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Ctail.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Delta.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Eb.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Eserif.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Et.svg [new file with mode: 0755]
share/extensions/alphabet_soup/G.svg [new file with mode: 0755]
share/extensions/alphabet_soup/IBSerif.svg [new file with mode: 0755]
share/extensions/alphabet_soup/ITSerif.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Lb.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Lt.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Makefile.am [new file with mode: 0644]
share/extensions/alphabet_soup/Ocross.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Oterm.svg [new file with mode: 0755]
share/extensions/alphabet_soup/P.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Q.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Rblock.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Tb.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Tt.svg [new file with mode: 0755]
share/extensions/alphabet_soup/U.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Vser.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Xh.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Xne.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Xnw.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Xvb.svg [new file with mode: 0755]
share/extensions/alphabet_soup/Xvt.svg [new file with mode: 0755]
share/extensions/alphabet_soup/a.svg [new file with mode: 0755]
share/extensions/alphabet_soup/abase.svg [new file with mode: 0755]
share/extensions/alphabet_soup/acap.svg [new file with mode: 0644]
share/extensions/alphabet_soup/b.svg [new file with mode: 0755]
share/extensions/alphabet_soup/bar.svg [new file with mode: 0755]
share/extensions/alphabet_soup/bar2.svg [new file with mode: 0755]
share/extensions/alphabet_soup/barcap.svg [new file with mode: 0644]
share/extensions/alphabet_soup/c.svg [new file with mode: 0755]
share/extensions/alphabet_soup/cross.svg [new file with mode: 0755]
share/extensions/alphabet_soup/cserif.svg [new file with mode: 0755]
share/extensions/alphabet_soup/e.svg [new file with mode: 0755]
share/extensions/alphabet_soup/epsilon.svg [new file with mode: 0755]
share/extensions/alphabet_soup/f.svg [new file with mode: 0755]
share/extensions/alphabet_soup/gamma.svg [new file with mode: 0755]
share/extensions/alphabet_soup/h.svg [new file with mode: 0755]
share/extensions/alphabet_soup/h2.svg [new file with mode: 0755]
share/extensions/alphabet_soup/hcap.svg [new file with mode: 0644]
share/extensions/alphabet_soup/idot.svg [new file with mode: 0755]
share/extensions/alphabet_soup/j.svg [new file with mode: 0755]
share/extensions/alphabet_soup/k.svg [new file with mode: 0755]
share/extensions/alphabet_soup/l.svg [new file with mode: 0755]
share/extensions/alphabet_soup/lserif.svg [new file with mode: 0755]
share/extensions/alphabet_soup/m.svg [new file with mode: 0755]
share/extensions/alphabet_soup/mcap.svg [new file with mode: 0644]
share/extensions/alphabet_soup/n.svg [new file with mode: 0755]
share/extensions/alphabet_soup/o.svg [new file with mode: 0755]
share/extensions/alphabet_soup/ocap.svg [new file with mode: 0644]
share/extensions/alphabet_soup/question.svg [new file with mode: 0644]
share/extensions/alphabet_soup/r.svg [new file with mode: 0755]
share/extensions/alphabet_soup/rcap.svg [new file with mode: 0644]
share/extensions/alphabet_soup/s.svg [new file with mode: 0755]
share/extensions/alphabet_soup/serif.svg [new file with mode: 0755]
share/extensions/alphabet_soup/t.svg [new file with mode: 0755]
share/extensions/alphabet_soup/tserif.svg [new file with mode: 0755]
share/extensions/alphabet_soup/v.svg [new file with mode: 0755]
share/extensions/alphabet_soup/vcap.svg [new file with mode: 0644]
share/extensions/alphabet_soup/vserl.svg [new file with mode: 0755]
share/extensions/alphabet_soup/vserr.svg [new file with mode: 0755]
share/extensions/alphabet_soup/x.svg [new file with mode: 0755]
share/extensions/alphabet_soup/y.svg [new file with mode: 0755]
share/extensions/alphabet_soup/yogh.svg [new file with mode: 0755]
share/extensions/alphabet_soup/z.svg [new file with mode: 0755]
share/extensions/render_alphabetsoup.inx [new file with mode: 0644]
share/extensions/render_alphabetsoup.py [new file with mode: 0644]
share/extensions/render_alphabetsoup_config.py [new file with mode: 0644]

index fd924a8aacce158471ab16d366c0410f14c29d0f..13e608c76abf065f7f06d2c95e657a5fcacc5caf 100644 (file)
@@ -909,6 +909,7 @@ share/Makefile
 share/clipart/Makefile
 share/examples/Makefile
 share/extensions/Makefile
+share/extensions/alphabet_soup/Makefile
 share/extensions/Barcode/Makefile
 share/extensions/xaml2svg/Makefile
 share/fonts/Makefile
index 026fe010c7251eb9ec115118a791534d8698de24..9d716fa8558c15d85ce7522f7dcd3b41d70e8238 100644 (file)
@@ -1,5 +1,6 @@
 
 SUBDIRS = \
+       alphabet_soup \
        Barcode \
        xaml2svg
 
@@ -79,6 +80,8 @@ extensions = \
        pturtle.py \
        radiusrand.py \
        render_barcode.py \
+       render_alphabetsoup.py \
+    render_alphabetsoup_config.py \
        rtree.py \
        rubberstretch.py\
        simplepath.py \
@@ -191,6 +194,7 @@ modules = \
        randompnt.inx \
        randompos.inx \
        render_barcode.inx \
+       render_alphabetsoup.inx \
        rubberstretch.inx \
        rtree.inx \
        sk_input.inx \
diff --git a/share/extensions/alphabet_soup/2.svg b/share/extensions/alphabet_soup/2.svg
new file mode 100755 (executable)
index 0000000..d198939
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 354.48922,275.5 C 328.85769,240.23214 347.25731,205.35861 385.1251,189.388 C 426.61805,172.91106 475.68507,179.24583 515.30616,198.41751 C 546.67876,214.6078 576,239.79094 576,278 L 558.40623,278 C 552.10387,234.59412 509.90256,216.75448 470,216.5712 C 447.74393,214.18055 400.44831,233.68796 416.17747,262.5 L 468.03189,324 L 396.02454,324 L 354.48922,275.5 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/3.svg b/share/extensions/alphabet_soup/3.svg
new file mode 100755 (executable)
index 0000000..3c6d97d
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 501.05404,466.85224 C 476.23121,464.26 450.75956,455.65261 431.87769,443.47613 C 411.95632,430.91317 396.56831,411.01358 396.56831,387 C 395.84362,362.80636 412.72694,342.89906 432.21417,330.29284 C 440.0046,325.25324 455.28275,317.82286 461.75,315.92839 C 463.24592,315.49019 464.58333,314.62784 466,313.97757 C 460.54092,310.85142 454.62917,308.18456 449.14094,304.90725 C 430.18578,293.04365 414.6003,275.02312 414.6003,252 C 413.48545,214.23492 454.91385,193.54639 486.5,184.14099 C 495.98819,181.95601 510.61229,180.02198 517.75,180.0082 L 522,180 L 522,198 L 518.7101,198 C 490.39366,199.42169 468,224.07106 468,252 C 467.62164,280.07697 490.67991,304.37293 518.7101,306 C 519.80673,306 520.90337,306 522,306 L 522,323.55734 L 514.90208,324.67499 C 493.1939,327.67962 477.89904,345.53362 471.28084,365.47892 C 467.15061,378.95077 466.81709,395.06873 471.28084,408.52108 C 474.68237,422.00803 482.98703,432.65142 493.36034,441.06884 C 501.39086,447.58519 511.75825,448.93827 522,450.44266 L 522,468 L 515.75,467.86712 C 512.3125,467.79404 505.69932,467.33734 501.05404,466.85224 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/6.svg b/share/extensions/alphabet_soup/6.svg
new file mode 100755 (executable)
index 0000000..d05c508
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396.5,342.5 L 396.5,162.5 C 396.5,93.306633 448.26539,42.674512 522,35.765025 L 522,53.526698 C 477.03387,63.188766 469.41841,134.18931 468.29791,173.27138 L 467.70239,194.04275 C 484.49529,185.35766 502.93862,180 522,180 L 522,197.5267 C 475.47262,207.87556 468.5,285.09855 468.5,324 C 468.4888,363.50529 475.41445,439.42379 522,450.4733 L 522,459.23665 L 522,468 C 448.80371,465.88421 396.5,413.20428 396.5,342.5 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/7.svg b/share/extensions/alphabet_soup/7.svg
new file mode 100755 (executable)
index 0000000..e921bb5
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 389.34645,312.75 C 348.64746,255.09556 327.02961,192.99032 323.47153,123.5 C 321.51456,95.318458 329.46832,77.247033 360,72.504642 C 388.88058,72.729583 395.35983,93.02294 395.61308,118 C 395.02551,188.7017 421.08456,252.40074 459.21132,311.25733 C 462.22246,315.46393 465.41066,319.55695 468.07037,324 L 397.28797,324 L 389.34645,312.75 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Cblob.svg b/share/extensions/alphabet_soup/Cblob.svg
new file mode 100755 (executable)
index 0000000..3c74730
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,432 C 483.35068,432.05187 514.50621,414.91209 547.74987,377.43357 C 553.86023,366.99152 553.90447,366.48196 549.10143,361.86677 C 542.63049,355.64891 540.54636,350.80909 540.54636,342 C 540.49227,326.31992 552.00549,316.34875 567,315.54636 C 590.16466,316.18468 595.48079,334.58161 593.06817,354.41343 C 585.62156,415.62493 522.34607,462.89212 443.42345,467.61056 C 439.61563,467.83821 435.80782,468.06586 432,468.29351 L 432,432 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Chook.svg b/share/extensions/alphabet_soup/Chook.svg
new file mode 100755 (executable)
index 0000000..aab0fa2
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,36 L 432,0.70648772 C 467.12642,1.1207235 500.19031,10.978322 531,27.408775 C 536.225,30.593268 542.17901,33.437152 544.23113,33.728519 C 551.95635,34.825369 558,29.837576 558,22.365141 L 558,18 L 576,18 L 576,126 L 558.27619,126 C 553.02167,64.41188 486.96487,36 432,36 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Ctail.svg b/share/extensions/alphabet_soup/Ctail.svg
new file mode 100755 (executable)
index 0000000..54d55de
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,432 C 488.00932,432.67049 552.04586,402.81177 558.27619,342 L 594,342 C 592.58099,426.9715 505.82574,463.87984 432,468.29351 L 432,432 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Delta.svg b/share/extensions/alphabet_soup/Delta.svg
new file mode 100755 (executable)
index 0000000..82e60c3
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 312,36 L 306,36 L 306,18 L 270,18 L 270,33 L 257.02684,33 C 254.86698,25.169754 250.63249,18.043924 242.5,18.043924 L 234,18 L 234,0 L 630,0 L 630,18 L 625.5651,18 C 615.63677,17.396793 609.71136,24.314484 606.8449,33 L 594,33 L 594,18 L 522,18 L 522,36 L 516,36 L 516,48 L 513,48 L 513,41.272727 L 507.72727,36 L 320.84615,36 L 315,41.846154 L 315,48 L 312,48 L 312,36 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Eb.svg b/share/extensions/alphabet_soup/Eb.svg
new file mode 100755 (executable)
index 0000000..c9c42a5
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 234,450.23743 C 244.37552,448.73762 249.81245,441.63048 252.23743,432 L 432,432 L 432,468 L 234,468 L 234,450.23743 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Eserif.svg b/share/extensions/alphabet_soup/Eserif.svg
new file mode 100755 (executable)
index 0000000..51e46b9
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648"
+   id="svg3291">
+  <defs
+     id="defs3294" />
+  <path
+     d="M 442.75,252.02196 L 432,252 L 432,216.15894 L 444.9307,215.82947 C 458.70874,216.8737 466.45417,211.48843 468.26334,198 L 486,198 L 486,270 L 468.41481,270 C 465.95779,255.6718 456.18131,252.74723 442.75,252.02196 z"
+     id="path3300"
+     style="fill:#000000" />
+</svg>
diff --git a/share/extensions/alphabet_soup/Et.svg b/share/extensions/alphabet_soup/Et.svg
new file mode 100755 (executable)
index 0000000..1c69936
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 251.17613,31.368729 C 249.56512,25.345319 244.65468,20.434883 238.63127,18.823867 L 234,17.58519 L 234,9.2925952 L 234,1 L 333,1 L 432,1 L 432,18.5 L 432,36 L 342.2074,36 L 252.41481,36 L 251.17613,31.368729 z "/>
+</svg>
diff --git a/share/extensions/alphabet_soup/G.svg b/share/extensions/alphabet_soup/G.svg
new file mode 100755 (executable)
index 0000000..d6fb0c3
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,432.25825 C 474.76518,430.45997 516.4134,399.01191 521.0448,354.62003 L 521.0448,299.42692 C 520.54691,291.3582 511.0076,289.45944 504,287.58519 L 504,270 L 612,270 L 612,287.58519 C 604.95991,288.94718 599.47776,292.02235 595.89633,298.4214 L 595.89633,397.21641 C 557.61928,448.03031 492.7847,465.36976 432,468.30395 L 432,432.25825 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/IBSerif.svg b/share/extensions/alphabet_soup/IBSerif.svg
new file mode 100755 (executable)
index 0000000..774f52d
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 234,450.41481 C 244.50437,448.78945 249.81733,441.71165 252.41481,432 L 341.58519,432 C 343.21055,442.50437 350.28835,447.81733 360,450.41481 L 360,468 L 234,468 L 234,450.41481 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/ITSerif.svg b/share/extensions/alphabet_soup/ITSerif.svg
new file mode 100755 (executable)
index 0000000..df4023d
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 216,17.58519 L 216,1 L 342,1 L 342,17.58519 C 331.49563,19.210548 326.18267,26.288348 323.58519,36 L 234.41481,36 C 232.78945,25.495637 225.71166,20.182664 216,17.58519 z" />
+</svg>
diff --git a/share/extensions/alphabet_soup/Lb.svg b/share/extensions/alphabet_soup/Lb.svg
new file mode 100755 (executable)
index 0000000..164c956
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,432 L 557.34775,432 C 572.03193,431.57641 575.48665,419.42011 576,406.53212 L 576,396 L 594,396 L 594,468 L 432,468 L 432,432 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Lt.svg b/share/extensions/alphabet_soup/Lt.svg
new file mode 100755 (executable)
index 0000000..60b288e
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 576,61.467881 C 577.08469,43.108337 568.04996,36.667214 551.79944,36 L 432,36 L 432,1 L 594,1 L 594,72 L 576,72 L 576,61.467881 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Makefile.am b/share/extensions/alphabet_soup/Makefile.am
new file mode 100644 (file)
index 0000000..004da4e
--- /dev/null
@@ -0,0 +1,78 @@
+
+alphabet_soupdir = $(datadir)/inkscape/extensions/alphabet_soup
+
+alphabet_soup_DATA = \
+       2.svg \
+       3.svg \
+       6.svg \
+       7.svg \
+       abase.svg \
+       a.svg \
+       acap.svg \
+       bar2.svg \
+       barcap.svg \
+       bar.svg \
+       b.svg \
+       Cblob.svg \
+       Chook.svg \
+       cross.svg \
+       cserif.svg \
+       c.svg \
+       Ctail.svg \
+       Delta.svg \
+       Eb.svg \
+       epsilon.svg \
+       Eserif.svg \
+       e.svg \
+       Et.svg \
+       f.svg \
+       gamma.svg \
+       G.svg \
+       h2.svg \
+       hcap.svg \
+       h.svg \
+       IBSerif.svg \
+       idot.svg \
+       ITSerif.svg \
+       j.svg \
+       k.svg \
+       Lb.svg \
+       lserif.svg \
+       l.svg \
+       Lt.svg \
+       mcap.svg \
+       m.svg \
+       n.svg \
+       ocap.svg \
+       Ocross.svg \
+       o.svg \
+       Oterm.svg \
+       P.svg \
+       Q.svg \
+       question.svg \
+       Rblock.svg \
+       rcap.svg \
+       r.svg \
+       serif.svg \
+       s.svg \
+       Tb.svg \
+       tserif.svg \
+       t.svg \
+       Tt.svg \
+       U.svg \
+       vcap.svg \
+       vserl.svg \
+       vserr.svg \
+       Vser.svg \
+       v.svg \
+       Xh.svg \
+       Xne.svg \
+       Xnw.svg \
+       x.svg \
+       Xvb.svg \
+       Xvt.svg \
+       yogh.svg \
+       y.svg \
+       z.svg
+
+EXTRA_DIST = $(alphabet_soup_DATA)     
diff --git a/share/extensions/alphabet_soup/Ocross.svg b/share/extensions/alphabet_soup/Ocross.svg
new file mode 100755 (executable)
index 0000000..63b1caa
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 324,216 L 432,216 L 432,252 L 324,252 L 324,216 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Oterm.svg b/share/extensions/alphabet_soup/Oterm.svg
new file mode 100755 (executable)
index 0000000..f010858
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,432.28491 C 519.05219,420.92031 539.41198,305.43476 539.90939,235.96367 C 540.39442,168.22112 519.19629,44.828918 432,35.715087 L 432,0 C 560.22504,1.9563018 630.31985,120.47734 629.90669,235.8117 C 629.50331,348.41772 555.79773,468 432,468 L 432,432.28491 z" />
+</svg>
diff --git a/share/extensions/alphabet_soup/P.svg b/share/extensions/alphabet_soup/P.svg
new file mode 100755 (executable)
index 0000000..5e61cf6
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,216 C 479.35472,215.49184 502.54401,167.21061 503.44374,126 C 504.34347,84.789388 477.64109,36 432,36 C 432,24.235496 432,12.470992 432,0.70648772 C 504.20013,1.905354 593.35821,43.100442 593.33321,126.5 C 593.30821,209.89956 505.7797,247.8826 432,252.29351 C 432,240.19567 432,228.09784 432,216 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Q.svg b/share/extensions/alphabet_soup/Q.svg
new file mode 100755 (executable)
index 0000000..2da900b
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 526.32135,439.9524 C 498.13523,459.02351 465.23453,465.28151 432,468.30558 C 432.02713,456.20377 431.96306,444.10178 432,432 C 523.6997,415.67832 539.38316,302.39981 539.38316,234 C 539.38316,165.47354 516.9063,43.985213 432,36 L 432,-0.30557714 C 556.71815,4.8200503 628.82893,118.48894 629.44733,234 C 630.4116,299.68807 606.28121,362.36397 561.98439,410.7975 C 578.58768,433.83295 602.18706,447.65055 630,451.44316 L 630,469 C 592.94051,470.08844 559.04645,455.55561 526.32135,439.9524 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Rblock.svg b/share/extensions/alphabet_soup/Rblock.svg
new file mode 100755 (executable)
index 0000000..a2f4e9d
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 504,252 L 432,252 L 432,216 L 612,216 L 612,233.58519 C 604.95991,234.94718 599.47776,238.02235 595.89633,244.4214 L 594,432 L 504,432 L 504,252 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Tb.svg b/share/extensions/alphabet_soup/Tb.svg
new file mode 100755 (executable)
index 0000000..2a75ac5
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648"
+   id="svg3065">
+  <defs
+     id="defs3068" />
+  <path
+     d="M 108,396 L 126,396 L 126.02196,406.75 C 125.07553,420.73151 130.7333,430.53865 144.52406,431.29389 L 445.96524,431.29389 C 463.34999,431.83879 467.23245,423.88343 467.97804,406.75 L 468,396 L 486,396 L 486,468 L 108,468 L 108,396 z"
+     id="path3074"
+     style="fill:#000000" />
+</svg>
diff --git a/share/extensions/alphabet_soup/Tt.svg b/share/extensions/alphabet_soup/Tt.svg
new file mode 100755 (executable)
index 0000000..04d2a18
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648"
+   id="svg3153">
+  <defs
+     id="defs3156" />
+  <path
+     d="M 108,0 L 486,0 L 486,72 L 468,72 L 467.97804,61.25 C 468.91706,47.366193 463.32904,37.374009 449.58384,36.611397 L 146.90384,36.611397 C 130.1191,36.264077 126.71932,45.224839 126.02196,61.25 L 126,72 L 108,72 L 108,0 z"
+     id="path3162"
+     style="fill:#000000" />
+</svg>
diff --git a/share/extensions/alphabet_soup/U.svg b/share/extensions/alphabet_soup/U.svg
new file mode 100755 (executable)
index 0000000..e8b8244
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 234.2538,221.55362 C 238.26909,109.31485 312.74266,6.5178358 432,-0.30557714 L 432,36 C 356.62772,39.243159 327.51759,150.96639 324.28264,213.63018 L 323.88378,432 L 233.91947,432 C 234.742,361.8557 233.64814,291.69659 234.2538,221.55362 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Vser.svg b/share/extensions/alphabet_soup/Vser.svg
new file mode 100755 (executable)
index 0000000..e146770
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 234,18 L 234,0 L 328,0 L 328,18 L 321.42308,18 C 315.4772,17.537933 309.60446,20.486336 309,26.923077 L 309,30 L 306,30 L 306,18 L 270,18 L 270,33 L 257.02684,33 C 253.75659,21.992194 245.07284,18.057219 234,18 z M 594,18 L 522,18 L 522,30 L 519.13647,30 C 519.04442,29.519594 519,27.355241 519,26.636364 C 518.70573,19.373435 512.35553,18.083131 506.36364,18 L 499,18 L 499,0 L 630,0 L 630,18 L 625.5651,18 C 616.691,17.782578 608.53626,24.060156 607.3906,33 L 594,33 L 594,18 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Xh.svg b/share/extensions/alphabet_soup/Xh.svg
new file mode 100755 (executable)
index 0000000..c60f304
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 432,0 L 594,0 L 594,36 L 432,36 L 432,0 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Xne.svg b/share/extensions/alphabet_soup/Xne.svg
new file mode 100755 (executable)
index 0000000..9dc54f1
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 395.39741,251.53432 L 575.49466,0 L 630,0 L 630,18 L 623.65728,18 C 619.03208,17.930759 614.47611,18.564007 611.50395,22.236834 L 415.8113,289.94104 L 395.39741,251.53432 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Xnw.svg b/share/extensions/alphabet_soup/Xnw.svg
new file mode 100755 (executable)
index 0000000..98cd8bc
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 258.12827,29.840962 C 253.41405,22.06427 248.80253,18 239.78811,18 L 234,18 L 234,-0.017224956 L 342.39639,0.5 L 469.79391,214.60701 L 415.80338,289.94584 L 258.12827,29.840962 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Xvb.svg b/share/extensions/alphabet_soup/Xvb.svg
new file mode 100755 (executable)
index 0000000..16e80b4
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 252,429.20461 L 252,234 L 342,234 L 342,360 L 324,360 L 324,414 L 288,414 L 288,450 L 237.5,449.95608 C 247.55043,446.50275 251.36734,439.32286 252,429.20461 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/Xvt.svg b/share/extensions/alphabet_soup/Xvt.svg
new file mode 100755 (executable)
index 0000000..9747d84
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 252,36.41384 C 252.29636,26.645119 244.96885,23.022186 238.47878,18.021962 L 342,18 L 342,234 L 252,234 L 252,36.41384 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/a.svg b/share/extensions/alphabet_soup/a.svg
new file mode 100755 (executable)
index 0000000..284de78
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 468,306 L 498.2899,306 C 538.44742,306 573.0077,295.57591 575.93995,251.64459 C 575.7071,228.53229 560.49601,206.14824 534.5399,199.52162 C 530.43899,198.30967 526.23826,198 522,198 L 522,180 C 528.87688,179.85504 535.7342,180.44311 542.57632,181.06622 C 581.12986,186.50294 646.26955,202.54828 647.49865,251.92825 C 645.69329,302.14545 581.63206,316.22267 542.57632,322.93378 C 536.5683,323.5202 517.3308,324 499.82632,324 L 468,324 L 468,306 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/abase.svg b/share/extensions/alphabet_soup/abase.svg
new file mode 100755 (executable)
index 0000000..0a95a62
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396.54555,271.5 C 403.73674,198.51344 458.75438,180.0647 522,179.73419 L 522,197.72815 C 488.98342,201.50437 470.83028,236.95708 470.83028,264.55678 L 467.86228,396 L 395.91491,396 L 396.54555,271.5 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/acap.svg b/share/extensions/alphabet_soup/acap.svg
new file mode 100644 (file)
index 0000000..dfc7ede
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 322,160 L 506,160 L 506,200 L 322,200 L 322,160 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/b.svg b/share/extensions/alphabet_soup/b.svg
new file mode 100755 (executable)
index 0000000..fd01a26
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396,180 L 468,180 L 468,191.90142 C 484.59512,182.33029 503.29608,180.63132 522,179.70572 L 522,197.64142 C 491.45484,201.06591 472.13382,222.38085 467.64142,252 L 396,252 L 396,180 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/bar.svg b/share/extensions/alphabet_soup/bar.svg
new file mode 100755 (executable)
index 0000000..8b477e3
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396,252 L 468,252 L 468,396 L 396,396 L 396,252 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/bar2.svg b/share/extensions/alphabet_soup/bar2.svg
new file mode 100755 (executable)
index 0000000..39ed825
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396,252 L 468,252 L 468,414 L 396,414 L 396,252 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/barcap.svg b/share/extensions/alphabet_soup/barcap.svg
new file mode 100644 (file)
index 0000000..0f7626d
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 252.24192,36.664455 L 341.6763,36.664455 L 341.6763,431.93248 L 252.24192,431.93248 L 252.24192,36.664455 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/c.svg b/share/extensions/alphabet_soup/c.svg
new file mode 100755 (executable)
index 0000000..c6261a0
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 522,450.28755 C 524.6521,450.06637 527.3042,449.8452 529.9563,449.62402 C 553.24409,447.68189 577.42489,434.76058 591.92978,416.50771 C 598.87621,407.76635 605.88482,394.3104 608.47094,384.75 L 610.29684,378 L 627.75096,377.95348 C 624.09745,394.97614 617.77483,410.68918 608.08707,425.0933 C 589.83064,449.11135 560.59369,465.14357 530.61383,467.57612 C 527.74255,467.80909 524.87128,468.04207 522,468.27504 L 522,450.28755 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/cross.svg b/share/extensions/alphabet_soup/cross.svg
new file mode 100755 (executable)
index 0000000..89b67fe
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396,198 L 378,198 L 378,180 L 504,180 L 504,198 L 468,198 L 468,252 L 396,252 L 396,198 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/cserif.svg b/share/extensions/alphabet_soup/cserif.svg
new file mode 100755 (executable)
index 0000000..14669a0
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 522,450.27586 C 577.04846,446.35647 605.97828,412.81324 612.30948,360 L 630,360 L 630,450 L 612.22709,450 C 611.45458,444.02962 610.39687,437.37255 604.52088,434.41588 C 601.84003,433.74303 601.94975,433.67255 589.52556,444.049 C 570.2855,460.25388 546.48114,466.37309 522,468.29505 L 522,450.27586 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/e.svg b/share/extensions/alphabet_soup/e.svg
new file mode 100755 (executable)
index 0000000..03106dd
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 468,306 L 575.5984,306 C 571.81773,269.10345 564.72169,207.65975 522,197.5267 L 522,180 C 602.29926,181.10794 643.28869,251.19261 648.28591,324 L 468,324 L 468,306 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/epsilon.svg b/share/extensions/alphabet_soup/epsilon.svg
new file mode 100755 (executable)
index 0000000..a2dd33e
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+</svg>
diff --git a/share/extensions/alphabet_soup/f.svg b/share/extensions/alphabet_soup/f.svg
new file mode 100755 (executable)
index 0000000..c0f94c3
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648"
+   id="svg3379">
+  <defs
+     id="defs3382" />
+  <path
+     d="M 396,108 L 468,108 L 468,180 L 396,180 L 396,108 z"
+     id="path3388"
+     style="fill:#000000" />
+</svg>
diff --git a/share/extensions/alphabet_soup/gamma.svg b/share/extensions/alphabet_soup/gamma.svg
new file mode 100755 (executable)
index 0000000..29cc11f
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 413.74236,645.64547 C 383.0319,635.17985 363.9313,598.29804 370.41198,561.97779 C 372.2609,551.61571 374.419,546.6985 395.41883,505 L 413.80063,468.5 L 450.19937,468.5 L 468.58117,505 C 489.581,546.6985 491.7391,551.61571 493.58802,561.97779 C 499.03048,592.47942 487.00637,623.14961 463.42158,638.92408 C 449.05594,648.48459 430.22428,650.72284 413.74236,645.64547 z M 441.26639,611.4249 C 453.76562,607.16598 466.11947,585.75784 461.95112,567 C 460.95667,562.52492 433.16738,505 432,505 C 430.83262,505 403.04333,562.52492 402.04888,567 C 398.82769,581.49556 403.43305,596.9298 413.66762,605.93863 C 421.31834,612.67306 428.76716,615.68381 441.26639,611.4249 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/h.svg b/share/extensions/alphabet_soup/h.svg
new file mode 100755 (executable)
index 0000000..ee0b783
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 575.2219,287.78922 C 574.2749,253.72932 561.8497,203.19019 522,197.72815 L 522,179.73419 C 590.28223,178.93273 647.45445,205.07873 647.45445,271.5 L 648.08509,396 L 576.13772,396 L 575.2219,287.78922 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/h2.svg b/share/extensions/alphabet_soup/h2.svg
new file mode 100755 (executable)
index 0000000..636b4df
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 522,197.72815 L 522,179.73419 C 590.28223,178.93273 647.45445,202.45781 647.45445,271.5 L 648.08509,396 L 576.13772,396 L 576.48224,300.74674 C 575.32181,264.18339 567.07556,203.90649 522,197.72815 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/hcap.svg b/share/extensions/alphabet_soup/hcap.svg
new file mode 100644 (file)
index 0000000..4ec6ad5
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 340,214 L 434,214 L 434,254 L 340,254 L 340,214 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/idot.svg b/share/extensions/alphabet_soup/idot.svg
new file mode 100755 (executable)
index 0000000..d3d0dad
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396.4094,107.43029 C 396.42229,88.427407 412.3363,72.550017 432.21078,72.501168 C 452.18507,72.452074 467.66287,88.422867 467.69183,107.97927 C 467.72094,127.63549 452.65182,143.43658 432.00005,143.53592 C 411.24846,143.63574 396.39651,126.4335 396.4094,107.43029 z" />
+</svg>
diff --git a/share/extensions/alphabet_soup/j.svg b/share/extensions/alphabet_soup/j.svg
new file mode 100755 (executable)
index 0000000..14350d4
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 522,1 L 522,17.742339 C 481.28616,23.49216 468.03999,72.416193 468,108 L 395.76701,108 C 400.36091,43.138368 460.53099,1.2823612 522,1 z" />
+</svg>
diff --git a/share/extensions/alphabet_soup/k.svg b/share/extensions/alphabet_soup/k.svg
new file mode 100755 (executable)
index 0000000..314f2b0
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 468,359.49318 L 468,342.53957 L 584,207.36758 C 583.19563,203.56902 580.27236,200.82404 577.79282,198 L 558,198 L 558,180 L 648,180 L 648,198 C 640.42767,197.67211 633.17994,198.29561 626.83386,202.78843 L 522.1552,323.78851 C 564.42919,364.26962 603.76044,407.93742 647.06955,447.34097 C 652.84594,450.23664 659.67138,449.89061 666,450.25697 L 666,468 L 576.49312,468 L 468,359.49318 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/l.svg b/share/extensions/alphabet_soup/l.svg
new file mode 100755 (executable)
index 0000000..00beccf
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396,108 L 468,108 L 468,252 L 396,252 L 396,108 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/lserif.svg b/share/extensions/alphabet_soup/lserif.svg
new file mode 100755 (executable)
index 0000000..0820931
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 377.93068,432.20912 L 377.93068,414.43335 C 388.46323,412.80461 393.80806,405.7463 396.41481,396 L 468,396 L 468,467.95278 L 377.93068,432.20912 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/m.svg b/share/extensions/alphabet_soup/m.svg
new file mode 100755 (executable)
index 0000000..abe974a
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 576.13772,280.98105 C 572.44938,248.84942 559.30603,202.84155 522,197.72815 L 522,179.73419 C 565.19741,177.92174 604.08134,192.77489 630.21232,227.91572 C 647.33056,203.82949 672.66121,186.57085 702,182.25038 L 702,197.74234 C 662.1276,207.18202 650.05284,246.25281 648,282.69287 L 648,396 L 576.13772,396 L 576.13772,280.98105 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/mcap.svg b/share/extensions/alphabet_soup/mcap.svg
new file mode 100644 (file)
index 0000000..373e133
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 195.07094,35.141836 C 192.93943,26.618646 186.69352,21 178,21 L 178,0 L 300,0 C 304.92852,4.0636792 307.05515,13.545636 308.01012,20 L 290,20 L 290,434 L 196,434 C 194.50054,301.07612 198.17114,168.04946 195.07094,35.141836 z M 574,56 L 556,56 L 556,20 L 520,20 C 520.33022,13.651854 521.21314,4.0134453 526.71404,1.1368684e-13 L 686,1.1368684e-13 L 686,21 C 676.96001,20.374092 671.60532,27.237265 668.92906,35.141836 L 668,434 L 574,434 L 574,56 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/n.svg b/share/extensions/alphabet_soup/n.svg
new file mode 100755 (executable)
index 0000000..420042a
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396,217.21055 C 395.97058,205.94989 388.09247,200.51206 378,197.58519 L 378,180 L 468,180 L 468,191.90142 C 484.59512,182.33029 503.29608,180.63132 522,179.70572 L 522,197.64142 C 491.44636,201.07259 472.13525,222.37147 467.64142,252 L 396,252 L 396,217.21055 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/o.svg b/share/extensions/alphabet_soup/o.svg
new file mode 100755 (executable)
index 0000000..967bad0
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 396.40448,322.99577 C 395.58905,253.10571 448.00479,180 522,180 L 522,197.5267 C 484.55576,207.67232 469.05389,282.8807 468.5,324 C 469.24734,364.1501 484.83088,440.79214 522,450.4733 L 522,468 C 445.49339,467.3577 397.16518,393.82612 396.40448,322.99577 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/ocap.svg b/share/extensions/alphabet_soup/ocap.svg
new file mode 100644 (file)
index 0000000..3eeb2aa
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 232,234 C 233.66926,111.97403 302.98118,0.35957946 434,0.35957946 L 434,39 C 349.8511,41.371236 327.49239,172.9012 327.43561,239.14817 C 326.36353,301.17293 356.5529,429 434,429 L 434,470 C 304.64047,469.72235 234.79031,354.23983 232,234 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/question.svg b/share/extensions/alphabet_soup/question.svg
new file mode 100644 (file)
index 0000000..90b012f
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 379.1115,243.87415 C 331.63948,221.02907 305.17158,177.44842 304,126 C 304.10942,71.362793 335.63742,26.535953 385.13135,5.8274636 C 400.59579,0.94927881 417.73322,-0.74582647 434,0.20129697 L 434,20.739895 C 389.42751,27.265011 381.35691,88.664883 381.52445,126 C 381.73345,172.57377 390.02396,229.93178 446.86385,231.99421 C 455.7306,232.31594 457.80064,232.32202 461.2119,234.23925 C 468.73163,238.58122 470,246.15478 470,254 L 393.04611,254 C 390.12737,248.74743 384.26569,246.43772 379.1115,243.87415 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/r.svg b/share/extensions/alphabet_soup/r.svg
new file mode 100755 (executable)
index 0000000..bb2273a
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 592.99353,251.12139 C 575.14192,244.35645 572.91506,227.77213 582.80984,213.1914 C 563.81023,203.88337 543.23105,198.02637 522,198 L 522,179.7048 C 555.52946,180.64247 588.14157,191.68258 613.84732,213.34814 C 622.68687,220.79837 622.73967,235.92625 614.63303,244.84732 C 609.95629,249.9939 599.04087,253.41305 592.99353,251.12139 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/rcap.svg b/share/extensions/alphabet_soup/rcap.svg
new file mode 100644 (file)
index 0000000..a887ab8
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 499.24145,321.47832 C 491.28205,288.08485 466.98548,255 430,255 L 430,213.71285 C 506.29217,215.25336 571.222,243.91309 595.45778,321.5 L 596.09296,434 L 502.21668,434 C 499.28967,396.82866 505.98901,358.30974 499.24145,321.47832 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/s.svg b/share/extensions/alphabet_soup/s.svg
new file mode 100755 (executable)
index 0000000..dc7c6fc
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 522,450 C 547.86042,450.23399 575.18402,432.48473 575.5,405 C 575.83952,374.49118 546.90062,362.54174 520.5,360.00916 C 467.65402,359.84026 420.037,334.76552 402.52136,297.88256 C 380.20717,218.58166 454.09823,180.1172 522,180 L 522,198 C 496.13958,197.76601 468.81598,215.51527 468.5,243 C 468.16048,273.50882 497.09938,285.45826 523.5,287.99084 C 576.34598,288.15974 623.963,313.23448 641.47864,350.11744 C 663.79283,429.41835 589.90178,467.88278 522,468 L 522,450 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/serif.svg b/share/extensions/alphabet_soup/serif.svg
new file mode 100755 (executable)
index 0000000..d2bf55e
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 378,450.41481 C 385.04009,449.05282 390.71188,446.07357 394.10367,439.5786 C 395.89343,436.15137 395.95907,432.81034 395.97804,415.75 L 396,396 L 468,396 L 468.02196,415.75 C 468.04093,432.81034 468.35354,436.03025 469.89633,439.5786 C 472.90125,446.4898 479.36545,448.64033 486,450.41481 L 486,468 L 378,468 L 378,450.41481 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/t.svg b/share/extensions/alphabet_soup/t.svg
new file mode 100755 (executable)
index 0000000..7940a68
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648"
+   id="svg3021">
+  <defs
+     id="defs3024" />
+  <path
+     d="M 396,144.00541 L 468,107.99459 L 468,180 L 396,180 L 396,144.00541 z"
+     id="path3030"
+     style="fill:#000000" />
+</svg>
diff --git a/share/extensions/alphabet_soup/tserif.svg b/share/extensions/alphabet_soup/tserif.svg
new file mode 100755 (executable)
index 0000000..df095c0
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648"
+   id="svg3109">
+  <defs
+     id="defs3112" />
+  <path
+     d="M 396,396 L 468.5424,396 C 471.23667,411.21933 478.03593,431.45141 496.28288,431.8016 C 507.19866,431.37331 510.32553,421.46179 516.756,415 L 532,427.78714 C 522.68412,452.69658 494.97645,467.13684 470.33388,468.03876 C 425.31789,469.68634 402.20226,438.60703 396,396 z"
+     id="path2615"
+     style="fill:#000000" />
+</svg>
diff --git a/share/extensions/alphabet_soup/v.svg b/share/extensions/alphabet_soup/v.svg
new file mode 100755 (executable)
index 0000000..9175807
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 324,288.0044 L 324.11177,216.5 L 413.99956,395 L 522.04609,179.90536 L 540,216.07787 L 540,288.0044 L 449.9978,468 L 414.0022,468 L 324,288.0044 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/vcap.svg b/share/extensions/alphabet_soup/vcap.svg
new file mode 100644 (file)
index 0000000..c36f5d4
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 250,16 L 308.5,16.013451 L 414,344 L 519.5,16.013451 L 614,16 L 470.5,469.98578 L 393.5,469.98578 L 250,16 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/vserl.svg b/share/extensions/alphabet_soup/vserl.svg
new file mode 100755 (executable)
index 0000000..90c9227
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 286.04853,213.28223 C 281.15258,203.54653 275.32901,198.99797 264.3185,198 L 261,198 L 261,180 L 342,180 L 342,198 L 334.42308,198 C 327.38192,198 326.63946,198.20669 323.92308,200.92308 C 318.67531,205.9855 322.92458,212.00136 323.5,217.98886 L 323.5,286.97955 L 286.04853,213.28223 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/vserr.svg b/share/extensions/alphabet_soup/vserr.svg
new file mode 100755 (executable)
index 0000000..964ae97
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 522,211 L 508,211 C 509.16261,197.0674 496.43802,198 486,198 L 486,180 L 603,180 L 603,197.72222 C 593.98444,198.08146 586.01933,199.57834 580.98041,207.54755 L 539.95908,288 L 522,288 L 522,211 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/x.svg b/share/extensions/alphabet_soup/x.svg
new file mode 100755 (executable)
index 0000000..f40b0a9
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 299.40862,211.63998 C 290.61894,201.41815 282.83995,198 270,198 L 270,180 L 378,180 L 378,198 C 369.69256,197.41657 364.67798,201.39745 370.12904,208.69118 L 443.32874,295.21127 L 528.37629,208.62443 C 533.96348,202.2222 528.37929,198 522,198 L 522,180 L 594,180 L 594,197.73699 C 587.7236,198.11755 580.04945,196.29498 575.5,200.77484 L 459.90086,314.60579 L 468.16997,324 L 396.02616,324 L 299.40862,211.63998 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/y.svg b/share/extensions/alphabet_soup/y.svg
new file mode 100755 (executable)
index 0000000..089cec9
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 477.09103,593.15836 L 413.99683,468 L 450.5,468.15564 L 504.72008,577.46901 C 509.65203,566.06508 518.51623,558.70062 531,558.54636 C 547.21611,558.34598 556.41762,570.43408 557.78184,585.5 C 559.88329,608.70762 538.91445,618.7373 518.64216,619.95485 C 498.86713,621.14254 485.44673,609.73335 477.09103,593.15836 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/yogh.svg b/share/extensions/alphabet_soup/yogh.svg
new file mode 100755 (executable)
index 0000000..6e6f19d
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 288.42793,465.05582 C 289.40321,397.00935 327.95172,357.80486 387.6958,331.06026 C 398.23942,327.59968 398.83579,325.57963 397.25615,324 L 431.73781,324 L 467.9042,324 L 483.02394,341.5 L 433.17281,342.5295 C 424.38848,342.88033 421.26737,343.37986 418.5,344.38769 C 372.71776,365.93027 362.26294,420.9786 360.21638,466.75049 C 360.12169,509.28116 377.39271,594 432,594 C 432,600 432,606 432,612 C 349.58791,610.79376 289.07182,545.91599 288.42793,465.05582 z"/>
+</svg>
diff --git a/share/extensions/alphabet_soup/z.svg b/share/extensions/alphabet_soup/z.svg
new file mode 100755 (executable)
index 0000000..7826d59
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="864"
+   height="648">
+  <path
+     d="M 288,199.19309 L 288,180 L 576,180 L 576,216 L 558.41481,216 C 555.77854,201.15181 545.97442,198.02196 532.61943,198.02196 L 378.91141,198.02196 C 369.66544,198.02196 363.51424,201.38267 370.14435,209.16095 L 468.03168,324 L 396.0296,324 L 288,199.19309 z"/>
+</svg>
diff --git a/share/extensions/render_alphabetsoup.inx b/share/extensions/render_alphabetsoup.inx
new file mode 100644 (file)
index 0000000..4eccecb
--- /dev/null
@@ -0,0 +1,19 @@
+<inkscape-extension>
+    <_name>Alphabet Soup</_name>
+    <id>org.ekips.filter.alphabetsoup</id>
+       <dependency type="executable" location="extensions">render_alphabetsoup.py</dependency>
+    <dependency type="executable" location="extensions">render_alphabetsoup_config.py</dependency>
+       <dependency type="executable" location="extensions">inkex.py</dependency>
+       <param name="text" type="string" _gui-text="Text">Inkscape</param>
+       <param name="zoom" type="float" min="0.0" max="1000.0" _gui-text="Zoom">8.0</param>
+       <param name="seed" type="int" min="0" max="65535" _gui-text="Random Seed">0</param>
+    <effect>
+        <object-type>all</object-type>
+        <effects-menu>
+            <submenu _name="Render"/>
+         </effects-menu>                                                               
+    </effect>
+    <script>
+        <command reldir="extensions" interpreter="python">render_alphabetsoup.py</command>
+    </script>
+</inkscape-extension>
diff --git a/share/extensions/render_alphabetsoup.py b/share/extensions/render_alphabetsoup.py
new file mode 100644 (file)
index 0000000..e3f64fc
--- /dev/null
@@ -0,0 +1,456 @@
+#!/usr/bin/env python 
+'''
+Copyright (C) 2001-2002 Matt Chisholm matt@theory.org
+Copyright (C) 2008 Joel Holdsworth joel@airwebreathe.org.uk
+    for AP
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+'''
+
+import copy
+import inkex
+import simplestyle
+import math
+import cmath
+import string
+import random
+import render_alphabetsoup_config
+import bezmisc
+import simplepath
+import os
+import sys
+
+syntax   = render_alphabetsoup_config.syntax
+alphabet = render_alphabetsoup_config.alphabet
+units  = render_alphabetsoup_config.units
+font    = render_alphabetsoup_config.font
+
+# Loads a super-path from a given SVG file
+def loadPath( svgPath ):
+       extensionDir = os.path.normpath(os.path.join(os.getcwd(),os.path.dirname(sys.argv[0])))
+       tree = inkex.etree.parse( extensionDir + "/" + svgPath )
+       root = tree.getroot()
+       pathElement = root.find('{http://www.w3.org/2000/svg}path')
+       if pathElement == None:
+               return None, 0, 0
+       d = pathElement.get("d")
+       width = float(root.get("width"))
+       height = float(root.get("height"))
+       return simplepath.parsePath(d), width, height # Currently we only support a single path
+
+def combinePaths( pathA, pathB ):
+       if pathA == None and pathB == None:
+               return None
+       elif pathA == None:
+               return pathB
+       elif pathB == None:
+               return pathA
+       else:
+               return pathA + pathB
+
+def flipLeftRight( sp, width ):
+       for cmd,params in sp:
+               defs = simplepath.pathdefs[cmd]
+               for i in range(defs[1]):
+                       if defs[3][i] == 'x':
+                               params[i] = width - params[i]
+
+def flipTopBottom( sp, height ):
+       for cmd,params in sp:
+               defs = simplepath.pathdefs[cmd]
+               for i in range(defs[1]):
+                       if defs[3][i] == 'y':
+                               params[i] = height - params[i]
+
+def solveQuadratic(a, b, c):
+       det = b*b - 4.0*a*c
+       if det >= 0: # real roots
+               sdet = math.sqrt(det)
+       else: # complex roots
+               sdet = cmath.sqrt(det)
+       return (-b + sdet) / (2*a), (-b - sdet) / (2*a)
+
+def cbrt(x): 
+       if x >= 0:
+               return x**(1.0/3.0)
+       else:
+               return -((-x)**(1.0/3.0))
+
+def findRealRoots(a,b,c,d):
+       if a != 0:
+               a, b, c, d = 1, b/float(a), c/float(a), d/float(a)      # Divide through by a
+               t = b / 3.0
+               p, q = c - 3 * t**2, d - c * t + 2 * t**3
+               u, v = solveQuadratic(1, q, -(p/3.0)**3)
+               if type(u) == type(0j):                 # Complex Cubic Root
+                       r = math.sqrt(u.real**2 + u.imag**2)
+                       w = math.atan2(u.imag, u.real)
+                       y1 = 2 * cbrt(r) * math.cos(w / 3.0)
+               else:           # Complex Real Root
+                       y1 = cbrt(u) + cbrt(v)
+               
+               y2, y3 = solveQuadratic(1, y1, p + y1**2)
+
+               if type(y2) == type(0j):        # Are y2 and y3 complex?
+                       return [y1 - t]
+               return [y1 - t, y2 - t, y3 - t]
+       elif b != 0:
+               det=c*c - 4.0*b*d
+               if det >= 0:
+                       return [(-c + math.sqrt(det))/(2.0*b),(-c - math.sqrt(det))/(2.0*b)]
+       elif c != 0:
+               return [-d/c]
+       return []
+
+def getPathBoundingBox( sp ):
+       
+       box = None
+       last = None
+       lostctrl = None
+
+       for cmd,params in sp:
+
+               segmentBox = None
+
+               if cmd == 'M':
+                       # A move cannot contribute to the bounding box
+                       last = params[:]
+                       lastctrl = params[:]
+               elif cmd == 'L':
+                       if last:
+                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))
+                       last = params[:]
+                       lastctrl = params[:]
+               elif cmd == 'C':
+                       if last:                
+                               segmentBox = (min(params[4], last[0]), max(params[4], last[0]), min(params[5], last[1]), max(params[5], last[1]))
+                               
+                               bx0, by0 = last[:]
+                               bx1, by1, bx2, by2, bx3, by3 = params[:]
+
+                               # Compute the x limits
+                               a = (-bx0 + 3*bx1 - 3*bx2 + bx3)*3
+                               b = (3*bx0 - 6*bx1  + 3*bx2)*2
+                               c = (-3*bx0 + 3*bx1)
+                               ts = findRealRoots(0, a, b, c)
+                               for t in ts:
+                                       if t >= 0 and t <= 1:           
+                                               x = (-bx0 + 3*bx1 - 3*bx2 + bx3)*(t**3) + \
+                                                       (3*bx0 - 6*bx1 + 3*bx2)*(t**2) + \
+                                                       (-3*bx0 + 3*bx1)*t + \
+                                                       bx0
+                                               segmentBox = (min(segmentBox[0], x), max(segmentBox[1], x), segmentBox[2], segmentBox[3])
+
+                               # Compute the y limits
+                               a = (-by0 + 3*by1 - 3*by2 + by3)*3
+                               b = (3*by0 - 6*by1  + 3*by2)*2
+                               c = (-3*by0 + 3*by1)
+                               ts = findRealRoots(0, a, b, c)
+                               for t in ts:
+                                       if t >= 0 and t <= 1:           
+                                               y = (-by0 + 3*by1 - 3*by2 + by3)*(t**3) + \
+                                                       (3*by0 - 6*by1 + 3*by2)*(t**2) + \
+                                                       (-3*by0 + 3*by1)*t + \
+                                                       by0
+                                               segmentBox = (segmentBox[0], segmentBox[1], min(segmentBox[2], y), max(segmentBox[3], y))
+
+                       last = params[-2:]
+                       lastctrl = params[2:4]
+
+               elif cmd == 'Q':
+                       # Provisional
+                       if last:
+                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))
+                       last = params[-2:]
+                       lastctrl = params[2:4]
+
+               elif cmd == 'A':
+                       # Provisional
+                       if last:
+                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))
+                       last = params[-2:]
+                       lastctrl = params[2:4]
+
+               if segmentBox:
+                       if box:
+                               box = (min(segmentBox[0],box[0]), max(segmentBox[1],box[1]), min(segmentBox[2],box[2]), max(segmentBox[3],box[3]))
+                       else:
+                               box = segmentBox                        
+       return box
+
+def mxfm( image, width, height, stack ):                                                               # returns possibly transformed image
+       tbimage = image 
+       if ( stack[0] == "-" ):                                                   # top-bottom flip
+               flipTopBottom(tbimage, height)
+               stack.pop( 0 )
+
+       lrimage = tbimage
+       if ( stack[0] == "|" ):                                                   # left-right flip
+               flipLeftRight(tbimage, width)
+               stack.pop( 0 )
+       return lrimage
+
+def comparerule( rule, nodes ):                                                  # compare node list to nodes in rule
+       for i in range( 0, len(nodes)):                                   # range( a, b ) = (a, a+1, a+2 ... b-2, b-1)
+               if (nodes[i] == rule[i][0]):
+                       pass
+               else: return 0
+       return 1
+
+def findrule( state, nodes ):                                                  # find the rule which generated this subtree
+       ruleset = syntax[state][1]
+       nodelen = len(nodes)
+       for rule in ruleset:
+               rulelen = len(rule)
+               if ((rulelen == nodelen) and (comparerule( rule, nodes ))):
+                       return rule
+       return 
+
+def generate( state ):                                                            # generate a random tree (in stack form)
+       stack  = [ state ]
+       if ( len(syntax[state]) == 1 ):                                         # if this is a stop symbol
+               return stack
+       else:
+               stack.append( "[" )
+               path = random.randint(0, (len(syntax[state][1])-1)) # choose randomly from next states
+               for symbol in syntax[state][1][path]:                   # recurse down each non-terminal
+                       if ( symbol != 0 ):                                               # 0 denotes end of list ###
+                               substack = generate( symbol[0] )                 # get subtree
+                               for elt in substack:       
+                                       stack.append( elt )
+                               if (symbol[3]):stack.append( "-" )         # top-bottom flip
+                               if (symbol[4]):stack.append( "|" )         # left-right flip
+                       #else:
+                               #inkex.debug("found end of list in generate( state =", state, ")") # this should be deprecated/never happen
+               stack.append("]")
+               return stack
+
+def draw( stack ):                                                                        # draw a character based on a tree stack
+       state = stack.pop(0)
+       #print state,
+
+       image, width, height = loadPath( font+syntax[state][0] )                  # load the image
+       if (stack[0] != "["):                                                           # terminal stack element
+               if (len(syntax[state]) == 1):                                     # this state is a terminal node
+                       return image, width, height
+               else:
+                       substack = generate( state )                             # generate random substack
+                       return draw( substack )                                   # draw random substack
+       else:
+               #inkex.debug("[")
+               stack.pop(0)
+               images = []                                                               # list of daughter images
+               nodes  = []                                                               # list of daughter names
+               while (stack[0] != "]"):                                         # for all nodes in stack
+                       newstate = stack[0]                                       # the new state
+                       newimage, width, height = draw( stack )                          # draw the daughter state
+                       if (newimage):
+                               tfimage = mxfm( newimage, width, height, stack )        # maybe transform daughter state
+                               images.append( [tfimage, width, height] )                        # list of daughter images
+                               nodes.append( newstate )                         # list of daughter nodes
+                       else:
+                               #inkex.debug(("recurse on",newstate,"failed")) # this should never happen
+                               return None, 0, 0
+               rule = findrule( state, nodes )                   # find the rule for this subtree
+
+               for i in range( 0, len(images)):
+                       currimg, width, height = images[i]
+
+                       if currimg:
+                               #box = getPathBoundingBox(currimg)
+                               dx = rule[i][1]*units
+                               dy = rule[i][2]*units
+                               #newbox = ((box[0]+dx),(box[1]+dy),(box[2]+dx),(box[3]+dy))
+                               simplepath.translatePath(currimg, dx, dy)
+                               image = combinePaths( image, currimg )
+
+               stack.pop( 0 )
+               return image, width, height
+
+def draw_crop_scale( stack, zoom ):                                                    # draw, crop and scale letter image
+       image, width, height = draw(stack)
+       bbox = getPathBoundingBox(image)                        
+       simplepath.translatePath(image, -bbox[0], 0)    
+       simplepath.scalePath(image, zoom/units, zoom/units)
+       return image, bbox[1] - bbox[0], bbox[3] - bbox[2]
+
+def randomize_input_string( str, zoom ):                                          # generate list of images based on input string
+       imagelist = []
+
+       for i in range(0,len(str)):
+               char = str[i]
+               #if ( re.match("[a-zA-Z0-9?]", char)):
+               if ( alphabet.has_key(char)):
+                       if ((i > 0) and (char == str[i-1])):             # if this letter matches previous letter
+                               imagelist.append(imagelist[len(stack)-1])# make them the same image
+                       else:                                                                           # generate image for letter
+                               stack = string.split( alphabet[char][random.randint(0,(len(alphabet[char])-1))] , "." )
+                               #stack = string.split( alphabet[char][random.randint(0,(len(alphabet[char])-2))] , "." ) 
+                               imagelist.append( draw_crop_scale( stack, zoom ))
+               elif( char == " "):                                                       # add a " " space to the image list
+                       imagelist.append( " " )
+               else:                                                                                   # this character is not in config.alphabet, skip it
+                       print "bad character", char 
+       return imagelist
+
+def optikern( image, width, zoom ):                                   # optical kerning algorithm
+       left  = []
+       right = []
+
+       for i in range( 0, 36 ):
+               y = 0.5 * (i + 0.5) * zoom
+               xmin = None
+               xmax = None
+
+               for cmd,params in image:
+
+                       segmentBox = None
+
+                       if cmd == 'M':
+                               # A move cannot contribute to the bounding box
+                               last = params[:]
+                               lastctrl = params[:]
+                       elif cmd == 'L':
+                               if (y >= last[1] and y <= params[1]) or (y >= params[1] and y <= last[1]):
+                                       if params[0] == last[0]:
+                                               x = params[0]
+                                       else:
+                                               a = (params[1] - last[1]) / (params[0] - last[0])
+                                               b = last[1] - a * last[0]
+                                               if a != 0:
+                                                       x = (y - b) / a
+                                               else: x = None
+                                       
+                                       if x:
+                                               if xmin == None or x < xmin: xmin = x
+                                               if xmax == None or x > xmax: xmax = x
+
+                               last = params[:]
+                               lastctrl = params[:]
+                       elif cmd == 'C':
+                               if last:                
+                                       bx0, by0 = last[:]
+                                       bx1, by1, bx2, by2, bx3, by3 = params[:]
+
+                                       d = by0 - y
+                                       c = -3*by0 + 3*by1
+                                       b = 3*by0 - 6*by1 + 3*by2
+                                       a = -by0 + 3*by1 - 3*by2 + by3
+                                       
+                                       ts = findRealRoots(a, b, c, d)
+
+                                       for t in ts:
+                                               if t >= 0 and t <= 1:           
+                                                       x = (-bx0 + 3*bx1 - 3*bx2 + bx3)*(t**3) + \
+                                                               (3*bx0 - 6*bx1 + 3*bx2)*(t**2) + \
+                                                               (-3*bx0 + 3*bx1)*t + \
+                                                               bx0
+                                                       if xmin == None or x < xmin: xmin = x
+                                                       if xmax == None or x > xmax: xmax = x
+
+                               last = params[-2:]
+                               lastctrl = params[2:4]
+
+                       elif cmd == 'Q':
+                               # Quadratic beziers are ignored
+                               last = params[-2:]
+                               lastctrl = params[2:4]
+
+                       elif cmd == 'A':
+                               # Arcs are ignored
+                               last = params[-2:]
+                               lastctrl = params[2:4]
+
+
+               if xmin != None and xmax != None:
+                       left.append( xmin )                        # distance from left edge of region to left edge of bbox
+                       right.append( width - xmax )               # distance from right edge of region to right edge of bbox
+               else:
+                       left.append(  width )
+                       right.append( width )
+
+       return (left, right)
+
+def layoutstring( imagelist, zoom ):                                    # layout string of letter-images using optical kerning
+       kernlist  = []
+       length = zoom
+       for entry in imagelist:
+               if (entry == " "):                                                         # leaving room for " " space characters
+                       length = length + (zoom * render_alphabetsoup_config.space)
+               else:
+                       image, width, height = entry
+                       length = length + width + zoom   # add letter length to overall length
+                       kernlist.append( optikern(image, width, zoom) )            # append kerning data for this image 
+
+       workspace = None
+
+       position = zoom
+       for i in range(0, len(kernlist)):
+               while(imagelist[i] == " "):
+                       position = position + (zoom * render_alphabetsoup_config.space )
+                       imagelist.pop(i)
+               image, width, height = imagelist[i]
+
+               # set the kerning
+               if i == 0: kern = 0                                               # for first image, kerning is zero
+               else:
+                       kerncompare = []                                                         # kerning comparison array
+                       for j in range( 0, len(kernlist[i][0])):
+                               kerncompare.append( kernlist[i][0][j]+kernlist[i-1][1][j] )
+                       kern = min( kerncompare )
+
+               position = position - kern                                         # move position back by kern amount
+               thisimage = copy.deepcopy(image)                
+               simplepath.translatePath(thisimage, position, 0)
+               workspace = combinePaths(workspace, thisimage)
+               position = position + width + zoom      # advance position by letter width
+
+       return workspace
+
+class AlphabetSoup(inkex.Effect):
+       def __init__(self):
+               inkex.Effect.__init__(self)
+               self.OptionParser.add_option("-t", "--text",
+                                               action="store", type="string", 
+                                               dest="text", default="Inkscape",
+                                               help="The text for alphabet soup")
+               self.OptionParser.add_option("-z", "--zoom",
+                                               action="store", type="float", 
+                                               dest="zoom", default="8.0",
+                                               help="The zoom on the output graphics")
+               self.OptionParser.add_option("-s", "--seed",
+                                               action="store", type="int", 
+                                               dest="seed", default="0",
+                                               help="The random seed for the soup")
+
+       def effect(self):
+               zoom = self.options.zoom
+               random.seed(self.options.seed)
+
+               imagelist = randomize_input_string(self.options.text, zoom)
+               image = layoutstring( imagelist, zoom )
+
+               if image:
+                       s = { 'stroke': 'none', 'fill': '#000000' }
+
+                       new = inkex.etree.Element(inkex.addNS('path','svg'))
+                       new.set('style', simplestyle.formatStyle(s))
+
+                       new.set('d', simplepath.formatPath(image))
+                       self.current_layer.append(new)
+
+e = AlphabetSoup()
+e.affect()
+
diff --git a/share/extensions/render_alphabetsoup_config.py b/share/extensions/render_alphabetsoup_config.py
new file mode 100644 (file)
index 0000000..7bd674d
--- /dev/null
@@ -0,0 +1,581 @@
+# Syntax format: (raise your hand if you know lisp :-)
+#
+# 'state0':  ("file.svg", ( ( ('state1', dx, dy, T-B, L|R),),
+#                           ( ('state2', ...), ('state3', ...),),
+#                           ( ('state4', ...),),
+#                           ) ),
+# )
+# 
+# Translation of the above in CNF:
+# state0 -> state1
+# state0 -> state2 state3
+# state0 -> state4
+#
+# Semantics at state0:
+# Paste subtree image from state1 onto "file.svg".
+# Subtree image is translated by (dx, dy) (measured in units, not pixels!). 
+# Subtree image is flipped top to bottom if v==1.
+# Subtree image is flipped left to right if h==1.
+#
+# Notes:
+# Origin (0,0) is at *upper* left corner.
+# For optional reflections, add both reflecting and non-reflecting rules
+# For 180 degree rotations, set v = 1, h = 1.
+# It helps to have an empty "epsilon" image.
+#
+# Jan. 16 2002
+#    Removed zeros from the end of rules, changed the code to reflect this.
+#    Remember to add trailing ',' at ends of lists, especially singletons.
+#
+# Jan. 20-26 2002
+#    Added uppercase.
+
+syntax = {
+    'start': ("epsilon.svg", ((('lc', 0,0,0,0),),# start state
+                              (('UC', 0,0,0,0),),
+                              )),
+    # lowercase
+    'lc':    ("epsilon.svg", ((('barsym', 0,0,0,0),), #(2096714) (26) 
+                              (('lc2', 0,0,0,0),),    #(830)    (19)
+                              )),
+    # uppercase
+    'UC':    ("epsilon.svg", ((('UCb',  0,0,0,0),),   #(2160) (30)
+                              (('UCu',  0,-5,0,0),),
+                              )), 
+    'UCb':   ("epsilon.svg", ((('Bar', 0,0,0,0),),    #(21)  Psi T I KK Phi
+                              (('Bar', 0,0,0,1),),    #
+                              (('D',   0,0,0,0),),    #(39)  D O Q C G
+                              (('D',   0,0,0,1),),    #
+                              (('E',   0,0,0,0),),    #(373) E B PL 3 3r 8 S Theta Eth/Dyet
+                              (('E',   0,0,0,1),),    #
+                              (('F',   0,0,0,0),),    #(84)  F P R
+                              (('F',   0,0,0,1),),    #
+                              (('H',   0,0,0,0),),    #(8)   H Hblock
+                              (('H',   0,0,0,1),),    #
+                              (('L',   0,0,0,0),),    #(12)  L J U
+                              (('L',   0,0,0,1),),    #
+                              (('V',   0,0,0,1),),    #(6)   A V M Delta Forall W
+                              (('X',   0,0,0,0),),    #(172) X N M W Sigma NN
+                              (('X',   0,0,0,0),),    #(172) X N M W Sigma NN
+                              )),
+    'UCu':   ("epsilon.svg", ((('UCb', 0,0,1,1),),)),
+    # for statistical balancing
+    'lc2':   ("epsilon.svg", ((('osym', 0,0,0,0),),   #(40)  o, c, e, ou 
+                              (('vsym', 0,0,0,0),),   #(40)  v, w, ^, y
+                              (('dsym', 0,0,0,1),),   #(96)  x, z, 7, 2, yogh
+                              (('lc3',  0,0,0,0),),   #(928) (5)
+                              )),
+    'lc3':   ("epsilon.svg", ((('3sym', 0,0,0,0),),   #(40)  epsilon
+                              (('ssym', 0,0,0,0),),   #(8)   s
+                              (('asym', 0,0,0,0),),   #(880) a 6 9
+                              )),
+    # symmetry rules
+    'barsym':("epsilon.svg", ((('bar', 0,0,0,0),),
+                              (('bar', 0,0,0,1),),
+                              (('bar', 0,0,1,0),),
+                              (('bar', 0,0,1,1),),
+                              )),
+    '6sym':  ("epsilon.svg", ((('6', 0,0,0,0),),
+                              (('6', 0,0,0,1),),
+                              (('6', 0,0,1,0),),
+                              (('6', 0,0,1,1),),
+                              )),
+    '3sym':  ("epsilon.svg", ((('3', 0,0,0,0),),
+                              (('3', 0,0,0,1),),
+                              (('3', 0,0,1,0),),
+                              (('3', 0,0,1,1),),
+                              )),
+    'vsym':  ("epsilon.svg", ((('v', 0,0,0,0),),
+                              (('v', 0,0,1,1),),
+                              )),
+    'osym':  ("epsilon.svg", ((('o', 0,0,0,0),),
+                              (('o', 0,0,0,1),),
+                              )),
+    'ssym':  ("epsilon.svg", ((('s', 0,0,0,0),),
+                              (('s', 0,0,0,1),),
+                              )),
+    'dsym':  ("epsilon.svg", ((('diag', 0,0,0,0), ('diag', 0,0,1,1),),
+                              (('diag', 0,0,0,1), ('diag', 0,0,1,0),),
+                              (('dstk', 0,0,0,0),),
+                              )),
+    'dstk':  ("epsilon.svg", ((('stik', 0,4,0,0), ('z',    0,0,1,1),),
+                              (('stik', 0,4,0,0), ('x',    0,0,1,1),),
+                              (('stik', 0,4,0,1), ('z',    0,0,1,0),),
+                              (('stik', 0,4,0,1), ('x',    0,0,1,0),),
+                              )),
+    'asym':  ("epsilon.svg", ((('abase', 0,0,0,0),),
+                              (('abase', 0,0,0,1),),
+                              (('abase', 0,0,1,0),),
+                              (('abase', 0,0,1,1),),
+                              )),
+    # epsilon rules
+    'diag':  ("epsilon.svg", ((('x',    0,0,0,0),),
+                              (('yogh', 0,0,1,1),),
+                              (('z',    0,0,0,0),),
+                              (('7',    0,0,0,0),),
+                              (('2',    0,0,0,0),),
+                              )),
+    'bar':   ("bar.svg", ((('vert', 0,0,0,0), ('vert', 0,0,1,0),),                 # f l i t j glot.
+                          (('k', 0,0,0,0), ('vert', 0,0,0,0), ('vert', 0,0,1,0),), # k
+                          (('b', 0,0,0,0), ('vert', 0,0,1,0),),                    # h heng
+                          (('n', 0,0,0,0), ('vert', 0,0,1,0),),                    # n m r eng u uu mu
+                          (('b1', 0,0,0,0), ('b0', 0,0,1,0),),                     # thorn eject.
+                          (('b1', 0,0,0,0), ('n0', 0,0,1,0),),                     # b p q d 
+                          (('n1', 0,0,0,0), ('n0', 0,0,1,0),),                     # open-a 
+                          )),
+    'vert':  ("epsilon.svg", ((('xtnd', 0,0,0,0),),
+                              (('srf',  0,0,1,0),),
+                              #(('xtnd', 0,0,0,1),),
+                              #(('srf',  0,0,1,1),),
+                              )),
+    'srf':   ("epsilon.svg", ((('lserif', 0,0,0,0),), 
+                              (('lserif', 0,0,0,1),),
+                              (('serif',  0,0,0,0),),
+                              (('tserif', 0,0,0,0),),
+                              (('tserif', 0,0,0,1),),
+                              )),
+    'xtnd':  ("epsilon.svg", ((('cross', 0,0,0,0),), # this needs to be L-R flippable
+                              (('cross', 0,0,0,1),),
+                              (('l',     0,0,0,0),),
+                              (('?',     0,0,0,0),),
+                              (('?',     0,0,0,1),),
+                              (('idot',  0,0,0,0),),
+                              )),
+    'loop':  ("epsilon.svg", ((('o0',  5,0,0,1),),  # loop-around elts
+                              (('30',  5,0,0,1),),
+                              )),
+    'elike': ("epsilon.svg", ((('e',   0,0,0,0), ('crv', 0,0,1,0),),
+                              (('a',   0,0,0,0), ('crv', 0,0,1,0),),
+                              (('crv', 0,0,0,0), ('crv', 0,0,1,0),),
+                              )),
+    'loop2': ("epsilon.svg", ((('elike', 0,0,0,0),),
+                              (('loop', 0,0,0,0),),
+                              )),
+    'hlike': ("epsilon.svg", ((('h', 0,0,0,0),),    # h-like extensions
+                              (('m', 0,0,0,0),),
+                              (('crv', 0,0,0,0),),
+                              )),
+    'crv':   ("epsilon.svg", ((('r', 0,0,0,0),),    # curvy things
+                              (('cserif', 0,0,1,0),),
+                              )),
+    # image rules
+    'abase': ("abase.svg",   ((('n0', 0,0,1,0), ('loop2', 0,0,0,0),),
+                              (('n0', 0,0,1,0), ('loop2', 0,0,1,0),),
+                              (('b0', 0,0,1,0), ('loop2', 0,0,0,0),),
+                              (('b0', 0,0,1,0), ('loop2', 0,0,1,0),),
+                              )),
+    'v':     ("v.svg", ((('vserl', 0,0,0,0), ('vserr', 0,0,0,0),),
+                        (('vserl', 0,0,0,0), ('vserr', 0,0,0,0), ('y0', 0,0,0,0),),
+                        (('vserl', 0,0,0,0), ('w', 6,0,0,0),),
+                        (('vserl', 0,0,0,0), ('w', 6,0,0,0), ('y0', 0,0,0,0),),
+                        )),
+    'w':     ("v.svg", ((('vserr', 0,0,0,0),),
+                        (('vserr', 0,0,0,0), ('y0', 0,0,0,0),),
+                        )),
+    'y0':    ("epsilon.svg", ((('y', 0,0,0,1),),
+                              (('y', 0,0,0,0),),
+                              (('gamma', 0,0,0,0),),
+                              )),
+    'l':     ("l.svg", ((('j',   0,0,0,0),),
+                        (('j',   0,0,0,1),),
+                        (('srf', 0,-4,1,0),),
+                        )),
+    'o':     ("o.svg", ((('loop2', 0,0,0,0),),
+                        (('loop2', 0,0,1,0),),
+                        )),
+    'cross': ("cross.svg", ((('t', 0,0,0,0),),
+                            (('f0', 0,0,0,0),),
+                            )),
+    'f':     ("f.svg", ((('j',   0, 0,0,0),),
+                        (('j',   0, 0,0,1),),
+                        (('srf', 0,-4,1,0),), 
+                        )),
+    'f0':    ("f.svg", ((('j',   0, 0,0,0),),
+                        (('srf', 0,-4,1,0),), 
+                        )),
+    'idot':  ("idot.svg", ((('serif',  0,0,1,0),),
+                           (('lserif', 0,0,1,0),),
+                           (('lserif', 0,0,1,1),),
+                           )),
+    'stik':  ("f.svg", ((('srf',  0,-4,1,0),),
+                        #(('srf',  0,-4,1,1),),
+                        )),
+    '3':     ("3.svg", ((('loop2',  0,0,0,0),),
+                        )),
+    # uppercase
+    # Bar rules
+    'X':       ("epsilon.svg", ((('Xtb', 0,0,0,0), ('Xtb', 0,-5,1,1),),
+                                (('Xlr', 0,0,0,0), ('Xlr', 0,-5,1,1),),
+                                (('Xtb', 0,0,0,0), ('Xtb2', 0,-5,1,1),),
+                                (('Xlr', 0,0,0,0), ('Xlr2', 0,-5,1,1),),
+                                (('Xtb2', 0,0,0,0), ('Xtb', 0,-5,1,1),),
+                                (('Xlr2', 0,0,0,0), ('Xlr', 0,-5,1,1),),
+                                )),
+
+    'Xtb':     ("epsilon.svg", ((('Xnw', 0,0,0,0), ('Xne', 0,0,0,0),),
+                                (('Xne', 0,0,0,0), ('Xh', 0,0,0,0), ('Lterm2', 0,0,0,0),),
+                                (('Xnw', 0,0,0,0), ('Xh', 0,0,0,1), ('Lterm2', 0,0,0,1),),
+                                (('Xne', 0,0,0,0), ('Xh', 0,0,0,0), ('Xnw', 0,0,0,0), ('Xh', 0,0,0,1),),
+                                )),
+    'Xlr':     ("epsilon.svg", ((('Xne', 0,-5,1,1), ('Xnw', 0,0,0,0),),
+                                (('Xne', 0,-5,1,1), ('Xvt', 0,0,0,0), ('Xvb', 0,0,0,0),  ('ITSerif', 0.5,0,0,0),),
+                                (('Xnw', 0, 0,0,0), ('Xvt', 0,0,0,0), ('Xvt', 0,-5,1,0), ('IBSerif', 0,0,0,0),),
+                                (('Xne', 0,-5,1,1), ('Xnw', 0,0,0,0), ('Xvt', 0,0,0,0),  ('Xvb', 0,0,0,0),),
+                                )),
+
+    'Xtb2':    ("epsilon.svg", ((('Xne', 0,0,0,0),),
+                                (('Xnw', 0,0,0,0),),
+                                )),
+    'Xlr2':    ("epsilon.svg", ((('Xnw', 0,0,0,0),),
+                                (('Xne', 0,-5,1,1),),
+                                )),
+
+    'Xne':     ("Xne.svg",),
+    'Xnw':     ("Xnw.svg",),
+    'Xh':      ("Xh.svg",),
+    'Xvt':     ("Xvt.svg",),
+    'Xvb':     ("Xvb.svg",),
+                
+
+    'Bar':     ("barcap.svg", ((('Bartop', 0,0,0,0), ('Barbot', 0,0,0,0), ('Barmid', 0,0,0,0),),
+                            (('Bartop2', 0,0,0,0), ('Barbot2', 0,0,0,0),),
+                            )),
+    'Bartop':  ("epsilon.svg", ((('ITSerif', 0.5,0,0,0),),
+                                (('Tt',      0,  0,0,0),),
+                                )),
+    'Barbot':  ("epsilon.svg", ((('IBSerif', 0,0,0,0),),
+                                (('Tb',      0,0,0,0),),
+                                )),
+    'Barbot2': ("epsilon.svg", ((('Barbot', 0,0,0,0),),
+                                (('Psi',    0,0,0,0),),
+                                )),
+    'Bartop2': ("epsilon.svg", ((('Bartop', 0, 0,0,0),),
+                                (('Psi',    0,-5,1,0),),
+                                )),    
+    'Barmid':  ("epsilon.svg", ((('Hm', 0,0,0,0), ('Eserif', 0,0,0,0), ('Hm', -7.5,0,0,1), ('Eserif', -7.5,0,0,1),),
+                                (('P',  -2.5,3,0,0), ('P', -5, 3,0,1),),
+                                (('P',    -5,3,0,1),), #points left
+                                )),
+    'Psi':     ("epsilon.svg", ((('IBSerif', 0,0,0,0), ('R', -2.5,0,0,0,), ('R', -5,0,0,1,),),
+                                )),
+    # D / E / F / H / L rules
+    'D':     ("epsilon.svg", ((('Dterm', 0,0,0,0), ('Dterm',  0,0,0,1),),
+                              (('Dterm', 0,0,0,0), ('Dterm2',  0,0,0,1),),
+                              )),
+    'E':     ("epsilon.svg", ((('Eterm', 0,0,0,0), ('Eterm',  0,0,0,1),),
+                              (('Eterm',  0,0,0,0), ('Eterm2',  0,0,0,1),),
+                              (('Eterm2', 0,0,0,1), ('Eterm2',  0,-5,1,0),), # for S
+                              )),
+    'F':     ("epsilon.svg", ((('Fterm', 0,0,0,0), ('Fterm',  0,0,0,1),),
+                              (('Fterm', 0,0,0,0), ('Fterm2',  0,0,0,1),),
+                              )),
+    'H':     ("epsilon.svg", ((('Hterm', 0,0,0,0), ('Hterm',  0,0,0,1),),
+                              (('Hterm', 0,0,0,0), ('Hterm2', 0,0,0,1),),
+                              )),
+    'L':     ("epsilon.svg", ((('Lterm', 0,0,0,0), ('Lterm',  0,0,0,1),),
+                              (('Lterm', 0,0,0,0), ('Lterm2', 0,0,0,1),),
+                              )),
+    'Dterm': ("epsilon.svg", ((('Barterm', 0,0,0,0), ('Et',      0,0,0,0), ('Eb', 0,0,0,0),),
+                              (('O',       0,0,0,0),),
+                              )),
+    'Dterm2':("epsilon.svg", ((('C',       0,0,0,1),),
+                              (('Ltserif', 0,0,0,1), ('Lbserif', 0,0,0,1),),
+                              )),
+    'Eterm': ("epsilon.svg", ((('Barterm', 0,0,0,0), ('Et', 0,0,0,0), ('Hm', 0,0,0,0), ('Eb', 0,0,0,0),),
+                              (('B', 0,0,0,1),),
+                              (('O',      0,0,0,0), ('Ocross',  0,0,0,0),),
+                              (('Dterm',  0,0,0,0), ('Eserif',  0,0,0,1),),
+                              (('Dterm2', 0,0,0,0), ('Eserif',  0,0,0,1),),
+                              )),
+    'Eterm2':("epsilon.svg", ((('P',     0,0,0,1), ('Lterm2', 0,-5,1,0),),
+                              )),
+    'Fterm': ("epsilon.svg", ((('Barterm', 0,0,0,0), ('Et', 0,0,0,0), ('Hm', 0,0,0,0), ('IBSerif', 0,0,0,0),),
+                              (('Lterm',   0,0,0,0), ('Eserif', 0,0,0,1),),
+                              (('P',       0,0,0,1), ('R', 0,0,0,1),), 
+                              (('Ltserif', 0,0,0,1), ('R', 0,0,0,1),), 
+                              (('Ltserif', 0,0,0,1), ('Rblock', 0,0,0,1),),
+                              (('Uterm',   0,0,0,0), ('Ocross', 0,0,0,0),),
+                              )),
+    'Fterm2':("epsilon.svg", ((('P', 0,0,0,1),),
+                              (('Lterm2',  0,0,0,0), ('Eserif', 0,0,0,1),),
+                              )),
+    'Hterm': ("epsilon.svg", ((('Barterm', 0,0,0,0), ('Hm', 0,0,0,0), ('ITSerif', 0.5,0,0,0), ('IBSerif', 0,0,0,0),),
+                              (('R',     0,0,0,1),  ('R',     0,-5,1,1),),
+                              )),
+    'Hterm2':("epsilon.svg", ((('R',     0,0,0,1),),
+                              (('Rblock',0,0,0,1),),
+                              )),
+    'Lterm': ("epsilon.svg", ((('Barterm', 0,0,0,0), ('Et', 0,0,0,0), ('IBSerif', 0,0,0,0),),
+                              (('Uterm',   0,0,0,0),),
+                              )),
+    'Lterm2':("epsilon.svg", ((('Ltserif', 0,0,0,1),),
+                              (('Cserif', 0,-5,1,1),),
+                              )),
+    'B':     ("epsilon.svg", ((('P', 0,0,0,0), ('P', 0,6,0,0),),)),
+    'C':     ("epsilon.svg", ((('Cserif', 0,0,0,0), ('Cserif', 0,-5,1,0),),)),
+    'Cserif':("epsilon.svg", (#(('Ctail', 0,0,0,0),), # I just hate the way these look...
+                              (('Cblob', 0,0,0,0),),
+                              (('Chook', 0,-5,1,0),),
+                              (('G',    0,0,0,0),),
+                              ),),
+    'O':     ("epsilon.svg", ((('Oterm', 0,0,0,0),),
+                              (('Q',     0,0,0,1),),
+                              (('Qu',    0,0,0,1),),
+                              )),
+    'Qu':    ("epsilon.svg", ((('Q', 0,-5,1,0),),)),
+    'Barterm':("barcap.svg",),
+    'Ctail': ("Ctail.svg",),
+    'Chook': ("Chook.svg",),
+    'Cblob': ("Cblob.svg",),
+    'G':     ("G.svg",),
+    'Ltserif':("Lt.svg",),
+    'Lbserif':("Lb.svg",),
+    'Et':    ("Et.svg",),
+    'Eb':    ("Eb.svg",),
+    'Hm':    ("hcap.svg",),
+    'P':     ("P.svg",),
+    'Tb':    ("Tb.svg",),
+    'Tt':    ("Tt.svg",),
+    'Ocross':("Ocross.svg",),
+    'Oterm': ("ocap.svg",),
+    'Q':     ("Q.svg",),
+    'R':     ("rcap.svg",      ((('IBSerif', -0.5,0,0,1),),)),
+    'Rblock':("Rblock.svg", ((('IBSerif', -0.5,0,0,1),),)),
+    'Uterm': ("U.svg",      ((('IBSerif', -0.5,0,0,0),),)),
+    'IBSerif':("IBSerif.svg",),
+    'ITSerif':("ITSerif.svg",),    
+    'Eserif':("Eserif.svg",),
+    # V rules
+    'V':     ("vcap.svg",       ((('V2', 0,0,0,0),),
+                              (('V2', 0,0,0,0), ('Across', 0,0,0,0)),
+                              )),
+    'V2':    ("epsilon.svg", ((('M', 0,0,0,0),),
+                              (('Delta', 0,0,0,0),),
+                              (('Vser',  0,0,0,0),),
+                              )),
+    'M':     ("mcap.svg", ((('IBSerif', -1.5,0,0,0), ('IBSerif', 1.5,0,0,1),),)),
+    'Delta': ("Delta.svg",),
+    'Vser':  ("Vser.svg",),
+    'Across':("acap.svg",),
+    # single daughter rules
+    'b':     ("b.svg", ((('hlike', 0,0,0,0), ('f', 0,0,0,0),),
+                        #(('hlike', 0,0,0,0), ('f', 0,0,0,1),),
+                        )),
+    'b1':    ("b.svg", ((('loop', 0,0,0,0), ('f', 0,0,0,0),),
+                        #(('loop', 0,0,0,0), ('f', 0,0,0,1),),
+                       )),
+    'b0':    ("b.svg", ((('f', 0,0,0,0),),
+                        #(('f', 0,0,0,1),),
+                        )),
+    'h':     ("h.svg", ((('vert', 5,0,1,0),),)),
+    'm':     ("m.svg", ((('h',   5,0,0,0), ('vert', 5,0,1,0),),)),# change later to allow 3 humped m
+    'n':     ("n.svg", ((('hlike', 0,0,0,0),),)),
+    'n1':    ("n.svg", ((('loop', 0,0,0,0),),)),
+    's':     ("s.svg", ((('crv',   0,0,0,0), ('crv',   5,0,1,1),),)),
+    'j':     ("j.svg", ((('crv',   0,-5,0,0),),)), 
+    '?':     ("question.svg", ((('crv', -2.5,-5,0,0),),)),
+    'yogh':  ("yogh.svg",((('crv', -2.5,4,1,0),),)),
+    #terminal rules
+    '2':     ("2.svg",),
+    '30':    ("3.svg",),
+    '7':     ("7.svg",),    
+    'a':     ("a.svg",),
+    'cserif':("cserif.svg",), 
+    'e':     ("e.svg",),
+    'k':     ("k.svg",),
+    'n0':    ("n.svg",),
+    'o0':    ("o.svg",),
+    'r':     ("r.svg",),
+    'serif': ("serif.svg",),
+    'tserif':("tserif.svg",),
+    'lserif':("lserif.svg",),
+    't':     ("t.svg",),
+    'x':     ("x.svg",),
+    'z':     ("z.svg",),
+    'vserl': ("vserl.svg",),
+    'vserr': ("vserr.svg",),
+    'y':     ("y.svg",),
+    'gamma': ("gamma.svg",)
+    }
+
+alphabet = {
+    # Uppercase fix Y make 2)
+    '1':     ("start.[.UC.[.UCb.[.Bar.[.Bartop2.[.Bartop.[.ITSerif.].].Barbot2.[.Barbot.[.IBSerif.].].].].].]",),
+    '33':    ("start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm2.[.C.|.].Eserif.|.].Eterm.[.O.Ocross.].|.].].].]",),
+    '3':     ("start.[.UC.[.UCb.[.E.[.Eterm.[.B.[.P.P.].|.].Eterm.[.Dterm2.[.C.|.].Eserif.|.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm2.[.C.|.].Eserif.|.].Eterm.[.O.Ocross.].|.].].].]",),
+    '4':     ("start.[.UC.[.UCu.[.UCb.[.H.[.Hterm.[.Barterm.Hm.ITSerif.IBSerif.].Hterm2.[.Rblock.[.IBSerif.|.].|.].|.].].-.|.].].]",),
+    '5':     ("start.[.UC.[.UCu.[.UCb.[.E.[.Eterm.[.Dterm2.[.Ltserif.|.Lbserif.|.].Eserif.|.].Eterm2.[.P.|.Lterm2.[.Ltserif.|.].-.].|.].|.].-.|.].].]",),
+    '6':     ("start.[.UC.[.UCu.[.UCb.[.E.[.Eterm.[.Dterm.[.O.].Eserif.|.].Eterm2.[.P.|.Lterm2.-.].|.].|.].-.|.].].]",
+              "start.[.UC.[.UCu.[.UCb.[.E.[.Eterm.[.O.Ocross.].Eterm2.[.P.|.Lterm2.-.].|.].|.].-.|.].].]",),
+    '7':     ("start.[.UC.[.UCb.[.X.[.Xtb.[.Xne.Xh.Lterm2.[.Ltserif.|.].].Xtb2.[.Xne.].-.|.].].].]",),
+    '8':     ("start.[.UC.[.UCb.[.E.[.Eterm.[.B.[.P.P.].|.].Eterm.[.B.[.P.P.].|.].|.].].].]",),
+    '9':     ("start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm.[.O.].Eserif.|.].Eterm2.[.P.|.Lterm2.-.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.O.Ocross.].Eterm2.[.P.|.Lterm2.-.].|.].|.].].]",),
+    '0':     ("start.[.UC.[.UCb.[.D.[.Dterm.[.O.].Dterm.[.O.].|.].].].]",),
+    'A':     ("start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm.[.Barterm.Et.Hm.IBSerif.].|.].].].]", # no flip needed 
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].|.].].].]", 
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].|.].|.].].]", 
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm.[.Uterm.[.IBSerif.].Ocross.].|.].].].]",       
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm.[.Uterm.[.IBSerif.].Ocross.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].Fterm.[.Uterm.[.IBSerif.].Ocross.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Uterm.[.IBSerif.].Ocross.].Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Uterm.[.IBSerif.].Ocross.].Fterm.[.Uterm.[.IBSerif.].Ocross.].|.].].].]",
+              "start.[.UC.[.UCu.[.UCb.[.V.[.V2.[.Vser.].Across.].|.].-.|.].].]",),
+    'B':     ("start.[.UC.[.UCb.[.E.[.Eterm.[.B.[.P.P.].|.].Eterm.|.].|.].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm.Eserif.|.].Eterm.[.B.[.P.P.].|.].|.].].].]",),
+    'Be':    ("start.[.UC.[.UCu.[.UCb.[.E.[.Eterm.[.Barterm.Et.Hm.Eb.].Eterm2.[.P.|.Lterm2.-.].|.].|.].-.|.].].]", #cyrillic
+              "start.[.UC.[.UCu.[.UCb.[.E.[.Eterm.[.Dterm.[.Barterm.Et.Eb.].Eserif.|.].Eterm2.[.P.|.Lterm2.-.].|.].|.].-.|.].].]",),
+    'C':     ("start.[.UC.[.UCb.[.D.[.Dterm.[.O.[.Oterm.].].Dterm2.[.C.|.].|.].].].]",),
+    'D':     ("start.[.UC.[.UCb.[.D.[.Dterm.Dterm.[.O.[.Oterm.].].|.].].].]",
+              "start.[.UC.[.UCb.[.D.[.Dterm.[.O.[.Oterm.].].Dterm2.[.Ltserif.|.Lbserif.|.].|.].|.].].].",
+              "start.[.UC.[.UCb.[.D.[.Dterm.[.Barterm.Et.Eb.].Dterm.[.Barterm.Et.Eb.].|.].].].]",),
+    'Delta': ("start.[.UC.[.UCu.[.UCb.[.V.[.V2.[.Delta.].].|.].-.|.].].]",), #Delta
+    'De':    ("start.[.UC.[.UCu.[.UCb.[.D.[.Dterm.[.Barterm.Et.Eb.].Dterm.[.Barterm.Et.Eb.].|.].].-.|.].].]",), #Cyrillic
+    'E':     ("start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm2.Eserif.|.].Eterm.[.Dterm.[.Barterm.Et.Eb.].Eserif.|.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm2.Eserif.|.].Eterm.[.Dterm.[.O.].Eserif.|.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm2.Eserif.|.].Eterm.[.B.[.P.P.].|.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm2.Eserif.|.].Eterm.[.Barterm.Et.Hm.Eb.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.O.Ocross.].Eterm.[.Dterm2.Eserif.|.].|.].].].]",),
+    'Eth':   ("start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm.[.O.].Eserif.|.].Eterm.[.Barterm.Et.Hm.Eb.].|.].|.].].]",),
+    'F':     ("start.[.UC.[.UCb.[.F.[.Fterm.Fterm2.[.Lterm2.Eserif.|.].|.].].].]",),
+    'G':     ("start.[.UC.[.UCb.[.D.[.Dterm.[.O.].Dterm2.[.C.[.Cserif.[.G.].Cserif.-.].|.].|.].].].]",),
+    'Gamma': ("start.[.UC.[.UCb.[.L.[.Lterm.[.Barterm.Et.IBSerif.].Lterm2.|.].].].]",), #Gamma
+    'H':     ("start.[.UC.[.UCb.[.H.[.Hterm.[.Barterm.Hm.ITSerif.IBSerif.].Hterm.[.Barterm.Hm.ITSerif.IBSerif.].|.].].].]",
+              "start.[.UC.[.UCb.[.H.[.Hterm.[.Barterm.Hm.ITSerif.IBSerif.].Hterm2.[.R.[.IBSerif.|.].|.].|.].].].]",
+              "start.[.UC.[.UCb.[.H.[.Hterm.[.Barterm.Hm.ITSerif.IBSerif.].Hterm2.[.Rblock.[.IBSerif.|.].|.].|.].].].]",),
+    'Che':   ("start.[.UC.[.UCu.[.UCb.[.H.[.Hterm.[.Barterm.Hm.ITSerif.IBSerif.].Hterm2.[.Rblock.[.IBSerif.|.].|.].|.].].-.|.].].]", #Cyrillic
+              "start.[.UC.[.UCu.[.UCb.[.H.[.Hterm.[.Barterm.Hm.ITSerif.IBSerif.].Hterm2.[.R.[.IBSerif.|.].|.].|.].].-.|.].].]",),
+    'Heng':  ("start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm.[.Ltserif.|.R.[.IBSerif.|.].|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm.[.Ltserif.|.Rblock.[.IBSerif.|.].|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Barterm.Et.IBSerif.].Eserif.|.].Fterm.[.Ltserif.|.R.[.IBSerif.|.].|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Barterm.Et.IBSerif.].Eserif.|.].Fterm.[.Ltserif.|.Rblock.[.IBSerif.|.].|.].|.].].].]",),
+    'I':     ("start.[.UC.[.UCb.[.Bar.[.Bartop2.[.Bartop.[.ITSerif.].].Barbot2.[.Barbot.[.IBSerif.].].].].].]",
+              "start.[.UC.[.UCb.[.Bar.[.Bartop2.[.Bartop.[.Tt.].].Barbot2.[.Barbot.[.Tb.].].].].].]",),
+    'J':     ("start.[.UC.[.UCu.[.UCb.[.L.[.Lterm.[.Uterm.[.IBSerif.].].Lterm2.|.].].-.|.].].]",),
+    'K':     ("start.[.UC.[.UCu.[.UCb.[.X.[.Xlr.[.Xne.-.|.Xnw.].Xlr.[.Xne.-.|.Xvt.Xvb.ITSerif.].-.|.].].-.|.].].]",
+              "start.[.UC.[.UCb.[.H.[.Hterm.[.Barterm.Hm.ITSerif.IBSerif.].Hterm.[.R.[.IBSerif.|.].|.R.[.IBSerif.|.].-.|.].|.].].].]",),
+    'Zhe':   ("start.[.UC.[.UCb.[.Bar.[.Bartop2.[.Psi.[.IBSerif.R.[.IBSerif.|.].R.[.IBSerif.|.].|.].-.].Barbot2.[.Psi.[.IBSerif.R.[.IBSerif.|.].R.[.IBSerif.|.].|.].].].].].]",), # Cyrillic
+    'L':     ("start.[.UC.[.UCu.[.UCb.[.L.[.Lterm.[.Barterm.Et.IBSerif.].Lterm2.|.].|.].-.|.].].]",),
+    'Lambda':("start.[.UC.[.UCu.[.UCb.[.V.[.V2.[.Vser.].].|.].-.|.].].]",),# Lambda
+    'M':     ("start.[.UC.[.UCu.[.UCb.[.X.[.Xlr.[.Xne.-.|.Xvt.Xvb.ITSerif.].Xlr.[.Xnw.Xvt.Xvt.-.IBSerif.].-.|.].].-.|.].].]",
+              "start.[.UC.[.UCb.[.V.[.V2.[.M.[.IBSerif.IBSerif.|.].].].|.].].]",),
+    'N':     ("start.[.UC.[.UCu.[.UCb.[.X.[.Xlr.[.Xnw.Xvt.Xvt.-.IBSerif.].Xlr.[.Xnw.Xvt.Xvt.-.IBSerif.].-.|.].].-.|.].].]",
+              "start.[.UC.[.UCb.[.L.[.Lterm.[.Uterm.[.IBSerif.].].Lterm.[.Barterm.Et.IBSerif.].|.].|.].].]",),
+    'NN':    ("start.[.UC.[.UCu.[.UCb.[.X.[.Xlr.[.Xne.-.|.Xvt.Xvb.ITSerif.].Xlr.[.Xne.-.|.Xvt.Xvb.ITSerif.].-.|.].].-.|.].].]",), # Cyrillic I
+    'O':     ("start.[.UC.[.UCb.[.D.[.Dterm.[.O.].Dterm.[.O.].|.].].].]",),
+    'P':     ("start.[.UC.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm2.[.P.|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Ltserif.|.R.[.IBSerif.|.].|.].Fterm2.[.P.|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Ltserif.|.Rblock.[.IBSerif.|.].|.].Fterm2.[.P.|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Barterm.Et.IBSerif.].Eserif.|.].Fterm2.[.P.|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].Fterm2.[.P.|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Uterm.[.IBSerif.].Ocross.].Fterm2.[.P.|.].|.].].].]",),
+    'PL':    ("start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm.[.Barterm.Et.Eb.].Eserif.|.].Eterm2.[.P.|.Lterm2.-.].|.].].].]",
+              "start.[.UC.[.UCb.[.E.[.Eterm.[.Barterm.Et.Hm.Eb.].Eterm2.[.P.|.Lterm2.[.Cserif.-.|.].-.].|.].].].]",),
+    'Phi':   ("start.[.UC.[.UCb.[.Bar.[.Bartop.[.ITSerif.].Barbot.[.IBSerif.].Barmid.[.P.P.|.].].].].]",),
+    'Pi':    ("start.[.UC.[.UCb.[.L.[.Lterm.[.Barterm.Et.IBSerif.].Lterm.[.Barterm.Et.IBSerif.].|.].].].]",),
+    'Psi':   ("start.[.UC.[.UCb.[.Bar.[.Bartop2.[.Psi.[.IBSerif.R.[.IBSerif.|.].R.[.IBSerif.|.].|.].-.].Barbot2.[.Barbot.[.IBSerif.].].].].].]",),
+    'Soft':  ("start.[.UC.[.UCu.[.UCb.[.F.[.Fterm.[.Barterm.Et.Hm.IBSerif.].Fterm2.[.P.|.].|.].|.].-.|.].].]",# Cyrillic Yeru/Soft/Hard
+              "start.[.UC.[.UCu.[.UCb.[.F.[.Fterm.[.Lterm.[.Barterm.Et.IBSerif.].Eserif.|.].Fterm2.[.P.|.].|.].|.].-.|.].].]",
+              "start.[.UC.[.UCu.[.UCb.[.F.[.Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].Fterm2.[.P.|.].|.].|.].-.|.].].]",
+              "start.[.UC.[.UCu.[.UCb.[.F.[.Fterm.[.Ltserif.|.Rblock.[.IBSerif.|.].|.].Fterm2.[.P.|.].|.].|.].-.|.].].]",
+              "start.[.UC.[.UCu.[.UCb.[.F.[.Fterm.[.Uterm.[.IBSerif.].Ocross.].Fterm2.[.P.|.].|.].|.].-.|.].].]",),
+    'Q':     ("start.[.UC.[.UCb.[.D.[.Dterm.[.O.[.Oterm.].].Dterm.[.O.[.Q.|.].].|.].].].]",),
+    'R':     ("start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Barterm.Et.IBSerif.].Eserif.|.].Fterm.[.P.|.R.[.IBSerif.|.].|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].Fterm.[.P.|.R.[.IBSerif.|.].|.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.P.|.R.[.IBSerif.|.].|.].Fterm.[.Barterm.Et.Hm.IBSerif.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Uterm.[.IBSerif.].Ocross.].Fterm.[.P.|.R.[.IBSerif.|.].|.].|.].].].]",),
+    'Ya':    ("start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Barterm.Et.IBSerif.].Eserif.|.].Fterm.[.P.|.R.[.IBSerif.|.].|.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Lterm.[.Uterm.[.IBSerif.].].Eserif.|.].Fterm.[.P.|.R.[.IBSerif.|.].|.].|.].|.].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.P.|.R.[.IBSerif.|.].|.].Fterm.[.Barterm.Et.Hm.IBSerif.].|.].].].]",
+              "start.[.UC.[.UCb.[.F.[.Fterm.[.Uterm.[.IBSerif.].Ocross.].Fterm.[.P.|.R.[.IBSerif.|.].|.].|.].|.].].]",),
+    'S':     ("start.[.UC.[.UCb.[.E.[.Eterm2.[.P.|.Lterm2.-.].|.Eterm2.[.P.|.Lterm2.-.].-.].|.].].]",),    
+    'Sigma': ("start.[.UC.[.UCb.[.X.[.Xtb.[.Xnw.Xh.|.Lterm2.|.].Xtb.[.Xne.Xh.Lterm2.].-.|.].].].]",),
+    'T':     ("start.[.UC.[.UCb.[.Bar.[.Bartop2.[.Bartop.[.Tt.].].Barbot2.[.Barbot.[.IBSerif.].].].].].]",
+              "start.[.UC.[.UCb.[.Bar.[.Bartop.[.ITSerif.].Barbot.[.IBSerif.].Barmid.[.Hm.Eserif.Hm.|.Eserif.|.].].].].]",),
+    'Theta': ("start.[.UC.[.UCb.[.E.[.Eterm.[.O.Ocross.].Eterm.[.O.Ocross.].|.].].].]",),
+    'Thorn': ("start.[.UC.[.UCu.[.UCb.[.Bar.[.Bartop.[.ITSerif.].Barbot.[.IBSerif.].Barmid.[.P.|.].].].-.|.].].]",),
+    'U':     ("start.[.UC.[.UCu.[.UCb.[.L.[.Lterm.[.Barterm.Et.IBSerif.].Lterm.[.Barterm.Et.IBSerif.].|.].|.].-.|.].].]",
+              "start.[.UC.[.UCu.[.UCb.[.L.[.Lterm.[.Barterm.Et.IBSerif.].Lterm.[.Uterm.[.IBSerif.].].|.].].-.|.].].]",
+              "start.[.UC.[.UCu.[.UCb.[.L.[.Lterm.[.Uterm.[.IBSerif.].].Lterm.[.Uterm.[.IBSerif.].].|.].].-.|.].].]",
+              "start.[.UC.[.UCu.[.UCb.[.L.[.Lterm.[.Barterm.Et.IBSerif.].Lterm.[.Barterm.Et.IBSerif.].|.].].-.|.].].]",),
+    'Tse':   ("start.[.UC.[.UCu.[.UCb.[.L.[.Lterm.[.Barterm.Et.IBSerif.].Lterm.[.Barterm.Et.IBSerif.].|.].].-.|.].].]",),# Cyrillic
+    'V':     ("start.[.UC.[.UCb.[.V.[.V2.[.Vser.].].|.].].]",),
+    'W':     ("start.[.UC.[.UCb.[.X.[.Xlr.[.Xne.-.|.Xvt.Xvb.ITSerif.].Xlr.[.Xnw.Xvt.Xvt.-.IBSerif.].-.|.].].].]",
+              "start.[.UC.[.UCu.[.UCb.[.V.[.V2.[.M.[.IBSerif.IBSerif.|.].].].|.].-.|.].].]",),
+    'X':     ("start.[.UC.[.UCu.[.UCb.[.X.[.Xlr.[.Xne.-.|.Xnw.].Xlr.[.Xne.-.|.Xnw.].-.|.].].-.|.].].]", 
+              "start.[.UC.[.UCb.[.H.[.Hterm.[.R.|.R.-.|.].Hterm.[.R.|.R.-.|.].|.].].].]",),
+    'Xi':    ("start.[.UC.[.UCb.[.E.[.Eterm.[.Dterm2.[.Ltserif.|.Lbserif.|.].Eserif.|.].Eterm.[.Dterm2.[.Ltserif.|.Lbserif.|.].Eserif.|.].|.].|.].].]",),
+    'Y':     ("start.[.UC.[.UCb.[.X.[.Xlr.[.Xne.-.|.Xnw.].Xlr2.[.Xne.-.|.].-.|.].].].]",),
+    'Z':     ("start.[.UC.[.UCb.[.X.[.Xtb.[.Xne.Xh.Lterm2.].Xtb.[.Xne.Xh.Lterm2.].-.|.].].].]",),
+    # Lowercase
+    'a':    ("start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.n0.-.loop2.[.elike.[.a.crv.-.].].-.].|.].].].].]",
+             "start.[.lc.[.barsym.[.bar.[.n1.[.loop.].n0.-.].-.|.].].]",
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.n0.-.loop2.[.loop.].].|.].].].].]",),
+    'carat':("start.[.lc.[.lc2.[.vsym.[.v.[.vserl.vserr.].-.|.].].].]",),
+    'b':    ("start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.].n0.-.].].].]", 
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.].-.loop2.[.loop.].].-.].].].].]",
+             "start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.|.].n0.-.].].].]", 
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.|.].-.loop2.[.loop.].].-.].].].].]",),
+    'c':    ("start.[.lc.[.lc2.[.osym.[.o.[.loop2.[.elike.[.crv.-.|.crv.|.].|.].].].].].]",),
+    'd':    ("start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.].n0.-.].].|.].]",
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.].-.loop2.[.loop.].].-.].|.].].].]",
+             "start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.|.].n0.-.].].|.].]",
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.|.].-.loop2.[.loop.].].-.].|.].].].]",),
+    'e':    ("start.[.lc.[.lc2.[.osym.[.o.[.loop2.[.elike.[.e.crv.-.].].].].].].]",
+             "start.[.lc.[.lc2.[.lc3.[.3sym.[.3.[.loop2.[.elike.[.crv.crv.-.].].].].].].].]",),
+    'epsi': ("start.[.lc.[.lc2.[.lc3.[.3sym.[.3.[.loop2.[.elike.[.crv.crv.-.].].].].].].].]",),
+    'f':    ("start.[.lc.[.barsym.[.bar.[.vert.[.xtnd.[.cross.[.f0.[.j.].].].].vert.-.].].].]",),
+    'g':    ("start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.[.j.[.crv.].].].n0.-.].-.|.].].]",
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.[.j.].].-.loop2.[.loop.].].-.].-.|.].].].]",),
+    'gamma':("start.[.lc.[.lc2.[.vsym.[.v.[.vserl.vserr.y0.[.gamma.].].].].].]",),
+    'h':    ("start.[.lc.[.barsym.[.bar.[.b.[.hlike.[.h.].f.].vert.-.].].].]",
+             "start.[.lc.[.barsym.[.bar.[.b.[.hlike.[.h.].f.|.].vert.-.].].].]",),
+    'heng': ("start.[.lc.[.barsym.[.bar.[.b.[.hlike.[.h.[.vert.[.xtnd.[.l.[.j.[.crv.].].].|.].-.].].f.[.j.[.crv.].].].vert.[.srf.-.|.].-.].].].]",),
+    'i':    ("start.[.lc.[.barsym.[.bar.[.vert.vert.[.xtnd.[.idot.].-.].].-.|.].].]",
+             "start.[.lc.[.barsym.[.bar.[.vert.vert.[.xtnd.[.idot.].-.].|.].-.|.].].]",),
+    'j':    ("start.[.lc.[.barsym.[.bar.[.vert.[.xtnd.[.idot.].-.].vert.[.xtnd.[.l.[.j.].].].|.].-.].].]",),
+    'k':    ("start.[.lc.[.barsym.[.bar.[.k.vert.vert.-.].].].]",),
+    'l':    ("start.[.lc.[.barsym.[.bar.[.vert.vert.[.xtnd.[.l.].-.].|.].-.|.].].]",
+             "start.[.lc.[.barsym.[.bar.[.vert.vert.[.xtnd.[.l.|.].-.].|.].-.|.].].]",),
+    'lambda':("start.[.lc.[.lc2.[.vsym.[.v.[.vserl.vserr.y0.].-.|.].].].]",),
+    'm':    ("start.[.lc.[.barsym.[.bar.[.n.[.hlike.[.m.[.h.[.vert.-.].vert.-.].].].vert.-.].].].]",),
+    'mu':   ("start.[.lc.[.barsym.[.bar.[.b.[.hlike.[.h.[.vert.-.].].f.].vert.-.].-.|.].].]",),
+    'muu':  ("start.[.lc.[.barsym.[.bar.[.b.[.hlike.[.m.[.h.[.vert.-.].vert.-.].].f.].vert.-.|.].-.|.].].]",),
+    'n':    ("start.[.lc.[.barsym.[.bar.[.n.[.hlike.[.h.[.vert.-.].].].vert.-.].].].]",),
+    'ng':   ("start.[.lc.[.barsym.[.bar.[.n.[.hlike.[.h.[.vert.[.xtnd.[.l.[.j.].].|.].-.].].].vert.-.].].].]",),
+    'o':    ("start.[.lc.[.lc2.[.osym.[.o.[.loop2.[.loop.[.o0.|.].].].].].].]",),
+    'p':    ("start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.].n0.-.].].-.].]",
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.].-.loop2.[.loop.].].-.].-.].].].]",
+             "start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.|.].n0.-.].].-.].]",
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.|.].-.loop2.[.loop.].].-.].-.].].].]",),
+    'q':    ("start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.].n0.-.].].-.|.].]", 
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.].-.loop2.[.loop.].].-.].-.|.].].].]",
+             "start.[.lc.[.barsym.[.bar.[.b1.[.loop.f.|.].n0.-.].].-.|.].]", 
+             "start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.|.].-.loop2.[.loop.].].-.].-.|.].].].]",),
+    'r':    ("start.[.lc.[.barsym.[.bar.[.n.[.hlike.[.crv.].].vert.-.].].].]",),
+    's':    ("start.[.lc.[.lc2.[.lc3.[.ssym.[.s.[.crv.crv.-.|.].].].].].]",),
+    't':    ("start.[.lc.[.barsym.[.bar.[.vert.[.xtnd.[.cross.[.f0.].].].vert.-.].].].]",),
+    'u':    ("start.[.lc.[.barsym.[.bar.[.n.[.hlike.[.h.[.vert.-.].].].vert.-.].-.|.].].]",),
+    'uu':   ("start.[.lc.[.barsym.[.bar.[.n.[.hlike.[.m.[.h.[.vert.-.].vert.-.].].].vert.-.].-.|.].].]",),
+    'v':    ("start.[.lc.[.lc2.[.vsym.[.v.[.vserl.vserr.].].].].]",),
+    'w':    ("start.[.lc.[.lc2.[.vsym.[.v.[.vserl.w.[.vserr.].].].].].]",),
+    'x':    ("start.[.lc.[.lc2.[.dsym.[.diag.[.x.].-.diag.[.x.].|.].-.].].]",),
+    'y':    ("start.[.lc.[.lc2.[.vsym.[.v.[.vserl.vserr.y0.].].].].]",),
+    'yogh': ("start.[.lc.[.lc2.[.dsym.[.diag.[.z.].|.diag.[.yogh.[.crv.-.].-.|.].-.].].].]",),
+    'z':    ("start.[.lc.[.lc2.[.dsym.[.diag.[.z.].diag.[.z.].-.|.].|.].].]",),
+    'glot': ("start.[.lc.[.barsym.[.bar.[.vert.[.xtnd.[.?.|.].].vert.-.].].].]",),
+    '1l':    ("start.[.lc.[.barsym.[.bar.[.vert.[.srf.[.lserif.].].vert.[.srf.[.serif.].-.].|.].].-.].]",),
+    '2l':    ("start.[.lc.[.lc2.[.dsym.[.diag.[.2.].diag.[.z.].-.|.].|.].].]",),
+    '3l':    ("start.[.lc.[.lc2.[.dsym.[.diag.[.z.].|.diag.[.yogh.[.crv.-.].-.|.].-.].].].]",),
+    '6l':    ("start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.[.j.].].-.loop2.[.loop.].-.].-.].].].].]",),
+    '7l':    ("start.[.lc.[.lc2.[.dsym.[.diag.[.z.].diag.[.7.].-.|.].|.].].]",),
+    '8l':    ("start.[.lc.[.lc2.[.lc3.[.3sym.[.3.[.loop2.[.loop.[.30.|.].].].].].].].]",),
+    '9l':    ("start.[.lc.[.lc2.[.lc3.[.asym.[.abase.[.b0.[.f.[.j.].].-.loop2.[.loop.].-.].|.].].].].]",),
+    '0l':    ("start.[.lc.[.lc2.[.osym.[.o.[.loop2.[.loop.[.o0.|.].].].].].].]",)
+    }
+
+space = 4                                         # number of unit boxes to make a " " space in string
+units = 36                                        # pixels per unit box in font
+font = "alphabet_soup/"                           # location of font images
+