summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4c115a3)
raw | patch | inline | side by side (parent: 4c115a3)
author | joelholdsworth <joelholdsworth@users.sourceforge.net> | |
Tue, 18 Mar 2008 23:02:45 +0000 (23:02 +0000) | ||
committer | joelholdsworth <joelholdsworth@users.sourceforge.net> | |
Tue, 18 Mar 2008 23:02:45 +0000 (23:02 +0000) |
78 files changed:
diff --git a/configure.ac b/configure.ac
index fd924a8aacce158471ab16d366c0410f14c29d0f..13e608c76abf065f7f06d2c95e657a5fcacc5caf 100644 (file)
--- a/configure.ac
+++ b/configure.ac
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)
SUBDIRS = \
+ alphabet_soup \
Barcode \
xaml2svg
pturtle.py \
radiusrand.py \
render_barcode.py \
+ render_alphabetsoup.py \
+ render_alphabetsoup_config.py \
rtree.py \
rubberstretch.py\
simplepath.py \
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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
+