Alphabet Soup

MMMMMMMMMMMMMMMMMM

Comes with a handy hand drawn font tool

Log in to post a comment.

const turtle = new Turtle();
let scale = .15; // min = 0.075 max = 0.5 step = 0.01
const alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

for(let i = -100; i < 100+100*scale; i += 100*scale) {
    for(let j = -100; j < 100+60*scale; j += 60*scale) {
        drawLetter(alphabet[Math.floor(Math.random()*alphabet.length)], j+Math.random()*10*scale, i+Math.random()*10*scale, scale, Math.random()*6.28)
    }
}

function drawLetter(letter, x_pos, y_pos, scale, rot) {
    let char_paths = getCharPaths(letter);
    for(let i = 0; i < char_paths.length; i++) {
        drawPathScaled(Path(char_paths[i]), x_pos, y_pos, rot, scale, scale)
    }
}

function drawPathScaled(path, xc, yc, rot, x_scale, y_scale) {
    const steps = path.length();
    for(let i = 0; i < steps; i++) {
        let pos = path.p( i/steps );
        let x1 = pos[0] * x_scale;
        let y1 = pos[1] * y_scale;
        let x2 = (x1*Math.cos(rot) - y1*Math.sin(rot)) + xc;
        let y2 = (x1*Math.sin(rot) + y1*Math.cos(rot)) + yc;
        pos = [x2,y2]
        if(i == 0) {
            turtle.jmp(pos);
        }
        else {
            turtle.goto(pos);
        }
    }
}

////////////////////////////////////////////////////////////////
// Path utility code. Created by Reinder Nijhoff 2023
// Parses a single SVG path (only M, C and L statements are
// supported). The p-method will return
// [...position, ...derivative] for a normalized point t.
//
// https://turtletoy.net/turtle/46adb0ad70
////////////////////////////////////////////////////////////////
function Path(svg) {
    class MoveTo {
        constructor(p) { this.p0 = p; }
        p(t, s) { return [...this.p0, 1, 0]; }
        length() { return 0; }
    }
    class LineTo {
        constructor(p0, p1) { this.p0 = p0, this.p1 = p1; }
        p(t, s = 1) {
            const nt = 1 - t, p0 = this.p0, p1 = this.p1;
            return [ 
                nt*p0[0] + t*p1[0],
                nt*p0[1] + t*p1[1],
                (p1[0] - p0[0]) * s,
                (p1[1] - p0[1]) * s,
            ];
        }
        length() { 
            const p0 = this.p0, p1 = this.p1;
            return Math.hypot(p0[0]-p1[0], p0[1]-p1[1]);
        }
    }
    class BezierTo {
        constructor(p0, c0, c1, p1) { this.p0 = p0, this.c0 = c0, this.c1 = c1, this.p1 = p1; }
        p(t, s = 1) {
            const nt = 1 - t, p0 = this.p0, c0 = this.c0, c1 = this.c1, p1 = this.p1;
            return [ 
                nt*nt*nt*p0[0] + 3*t*nt*nt*c0[0] + 3*t*t*nt*c1[0] + t*t*t*p1[0],
                nt*nt*nt*p0[1] + 3*t*nt*nt*c0[1] + 3*t*t*nt*c1[1] + t*t*t*p1[1],
                (3*nt*nt*(c0[0]-p0[0]) + 6*t*nt*(c1[0]-c0[0]) + 3*t*t*(p1[0]-c1[0])) * s,
                (3*nt*nt*(c0[1]-p0[1]) + 6*t*nt*(c1[1]-c0[1]) + 3*t*t*(p1[1]-c1[1])) * s,
            ];
        }
        length() {
            return this._length || (
                this._length = Array.from({length:25}, (x, i) => this.p(i/25)).reduce( 
                    (a,c,i,v) => i > 0 ? a + Math.hypot(c[0]-v[i-1][0], c[1]-v[i-1][1]) : a, 0));
        }
    }
    class Path {
        constructor(svg) {
            this.segments = [];
            this.parsePath(svg);
        }
        parsePath(svg) {
            const t = svg.match(/([0-9.-]+|[MLC])/g);
            for (let s, i=0; i<t.length;) {
                switch (t[i++]) {
                    case 'M': this.add(new MoveTo(s=[t[i++],t[i++]]));
                              break;
                    case 'L': this.add(new LineTo(s, s=[t[i++],t[i++]]));
                              break;
                    case 'C': this.add(new BezierTo(s, [t[i++],t[i++]], [t[i++],t[i++]], s=[t[i++],t[i++]]));
                              break;
                    default:  i++;
                }
            }
        }
        add(segment) {
            this.segments.push(segment);
            this._length = 0;
        }
        length() {
            return this._length || (this._length = this.segments.reduce((a,c) => a + c.length(), 0));
        }
        p(t) {
            t = Math.max(Math.min(t, 1), 0) * this.length();
            for (let l=0, i=0, sl=0; i<this.segments.length; i++, l+=sl) {
                sl = this.segments[i].length();
                if (t > l && t <= l + sl) {
                    return this.segments[i].p((t-l)/sl, sl/this.length());
                }
            }
            return this.segments[Math.min(1, this.segments.length-1)].p(0);
        }
    }
    return new Path(svg);
}

function getCharPaths(char) {
    let output_paths;
    switch(char) {
        case 'A':
            output_paths = ["M-29,49C-29,38 -24,28 -19,18C-15,9 -18,-3 -11,-10C-10,-11 -10,-18 -10,-18C-6,-22 -7,-28 -3,-32C-1,-34 -5,-37 -3,-39C-0,-42 0,-46 0,-50",
            "M0,-49C0,-46 2,-43 4,-41C7,-38 5,-34 8,-31C9,-30 8,-29 8,-28C11,-22 9,-14 13,-10C14,-9 10,-9 13,-6C17,-2 16,6 19,11C20,13 18,16 19,17C23,21 23,28 23,33C23,35 21,38 23,40C26,43 27,46 27,50",
            "M-15,0C-5,0 6,0 16,0"];
            break;
        case 'B':
            output_paths =["M-30,-49C-30,-41 -28,-33 -31,-25C-33,-19 -34,-13 -32,-7C-26,11 -29,30 -29,49",
            "M-30,-49C-23,-49 -17,-49 -10,-49C-7,-49 -2,-51 0,-49C3,-46 8,-48 11,-45C15,-41 21,-37 25,-33C27,-31 26,-28 26,-25C26,-22 27,-19 25,-17C22,-14 20,-10 17,-7C15,-5 11,-6 9,-4C2,3 -10,0 -19,0C-24,0 -28,0 -33,0",
            "M-29,0C-13,0 8,-3 19,8C21,10 23,10 25,12C27,14 25,17 27,19C29,21 28,26 26,28C25,29 28,31 26,33C22,37 20,43 15,45C12,47 7,43 4,46C-4,54 -19,49 -30,49"];
            break;
        case 'C':
            output_paths = ["M30,-49C19,-49 5,-49 -3,-41C-4,-40 -7,-41 -8,-40C-13,-35 -18,-31 -23,-26C-26,-23 -28,-11 -29,-10C-31,-8 -29,-5 -29,-3C-29,0 -30,4 -28,6C-25,9 -26,14 -23,17C-19,21 -16,24 -12,28C-11,29 -11,31 -10,33C-8,37 -3,39 0,42C2,44 5,42 7,44C12,49 22,48 29,48"];
            break;
        case 'D':
            output_paths = ["M-29,-50C-29,-30 -30,-11 -30,9C-30,16 -34,23 -32,30C-31,34 -34,41 -31,44C-30,45 -29,47 -29,49",
            "M-29,-50C-29,-49 -27,-49 -26,-48C-22,-46 -17,-44 -13,-43C-11,-42 -9,-44 -8,-43C-5,-40 -1,-38 2,-35C5,-32 6,-28 9,-25C12,-22 17,-20 19,-16C24,-5 31,11 23,19C22,20 24,21 23,22C20,25 9,33 9,33C7,35 2,33 0,35C-8,43 -21,47 -32,47"];
            break;
        case 'E':
            output_paths = ["M-29,-50C-29,-30 -30,-11 -30,9C-30,16 -34,23 -32,30C-31,34 -34,41 -31,44C-30,45 -29,47 -29,49",
            "M-30,-49C-10,-49 9,-50 29,-50",
            "M-30,0C-20,0 -10,0 0,0",
            "M-30,47C-10,47 9,46 29,46"];
            break;
        case 'F':
            output_paths = ["M-30,-50C-30,-17 -30,16 -30,49",
            "M-32,-49C-12,-49 9,-49 29,-49",
            "M-30,0C-20,0 -10,-1 0,-1"];
            break;
        case 'G':
            output_paths = ["M29,-24C29,-30 25,-36 21,-40C19,-42 16,-43 13,-43C11,-43 9,-42 8,-43C5,-46 0,-47 -3,-45C-13,-40 -22,-34 -27,-24C-31,-17 -27,-7 -31,0C-32,2 -31,5 -31,8C-31,12 -32,16 -29,19C-25,23 -27,29 -23,33C-20,36 -18,40 -14,42C-13,43 -11,43 -10,44C-9,46 -4,45 -2,46C1,47 6,48 8,46C10,44 13,44 15,42C19,38 22,33 26,29C27,28 26,26 27,24C30,19 29,12 29,6",
            "M29,8C21,8 12,7 4,7"];
            break;
        case 'H':
            output_paths = ["M-30,-49C-30,-16 -30,18 -30,51", 
            "M29,-49C29,-40 27,-32 27,-23C27,1 29,26 29,50",
            "M-29,0C-10,0 8,0 27,0"];
            break;
        case 'I':
            output_paths = ["M-30,-49C-30,-51 -25,-50 -23,-50C-19,-50 -14,-50 -10,-50C3,-50 16,-49 29,-49",
            "M0,-49C0,-16 0,16 0,49",
            "M-30,48C-10,48 10,47 30,47"];
            break;
        case 'J':
            output_paths = ["M10,-51C13,-48 10,-43 13,-40C15,-38 14,-33 16,-30C20,-21 19,-10 19,0C19,16 18,33 11,48C7,56 -7,55 -15,51C-17,50 -20,51 -22,49C-24,47 -25,43 -27,40C-28,38 -30,38 -32,36C-35,33 -36,28 -36,24"];
            break;
        case 'K':
            output_paths = ["M-29,-49C-29,-16 -30,16 -30,49",
            "M-30,-2C-27,-9 -20,-14 -15,-19C-13,-21 -8,-22 -6,-24C-2,-28 0,-32 4,-36C9,-41 19,-42 19,-49",
            "M-29,-1C-29,2 -22,2 -21,5C-18,12 -9,15 -6,22C-4,26 -2,30 1,33C4,36 8,38 11,41C14,44 16,51 21,51"];
            break;
        case 'L':
            output_paths = ["M-30,-49C-30,-45 -30,-41 -32,-37C-34,-32 -31,-26 -33,-21C-34,-18 -33,-14 -32,-11C-30,-6 -33,0 -31,5C-29,10 -30,16 -30,21C-30,30 -30,40 -30,49",
            "M-30,50C-27,50 -22,49 -20,47C-19,46 -17,47 -15,47C-11,47 -6,47 -2,47C8,47 22,47 29,47"];
            break;
        case 'M':
            output_paths = ["M-29,-49C-29,-16 -29,16 -29,49",
            "M-29,-49C-29,-41 -20,-36 -17,-29C-12,-19 -8,-8 0,0",
            "M0,0C4,-4 4,-12 9,-17C14,-22 18,-30 23,-35C26,-38 25,-42 27,-45C28,-47 30,-48 30,-50",
            "M29,-50C29,-17 29,16 29,49"];
            break;
        case 'N':
            output_paths = ["M-29,-50C-33,-46 -31,-37 -30,-31C-27,-17 -28,-3 -28,11C-28,20 -28,30 -28,39C-28,42 -28,46 -29,49C-29,50 -30,52 -29,52",
            "M-29,-50C-29,-47 -25,-44 -24,-41C-22,-35 -19,-29 -15,-24C-6,-10 -2,7 10,19C16,25 20,32 25,39C27,42 28,53 31,50",
            "M30,-50C30,-37 30,-23 30,-10C30,-4 31,2 30,8C28,17 29,26 29,35C29,40 25,49 30,49"];
            break;
        case 'O':
            output_paths = ["M28,0C28,-7 31,-15 26,-20C24,-22 27,-27 25,-29C23,-31 22,-35 20,-38C19,-40 19,-42 17,-44C15,-46 12,-47 10,-49C8,-51 4,-49 1,-49C-5,-49 -11,-46 -15,-42C-20,-37 -24,-31 -27,-25C-29,-21 -25,-16 -28,-13C-33,-8 -32,1 -29,7C-27,11 -30,16 -27,19C-21,25 -22,36 -16,42C-14,44 -11,47 -9,49C-6,52 -1,51 3,51C7,51 13,52 16,49C21,44 21,35 26,30C29,27 26,22 29,19C32,16 30,10 30,6C30,3 32,-3 29,-3"];
            break;
        case 'P':
            output_paths = ["M-30,-51C-30,-48 -31,-45 -32,-43C-33,-40 -32,-36 -32,-33C-32,-25 -32,-18 -32,-10C-32,4 -32,18 -32,32C-32,38 -30,44 -30,50",
            "M-31,-50C-28,-50 -23,-50 -21,-48C-19,-46 -13,-49 -11,-47C-8,-44 -1,-50 3,-48C8,-45 15,-44 19,-40C22,-37 24,-33 27,-30C28,-29 26,-25 27,-24C32,-19 28,-7 22,-4C17,-2 11,0 6,0C-2,0 -11,0 -19,0C-22,0 -26,-1 -29,-1"];
            break;
        case 'Q':
            output_paths = ["M30,0C30,-4 29,-9 27,-13C26,-15 27,-18 25,-20C24,-21 26,-23 25,-24C23,-26 23,-33 21,-35C17,-39 15,-44 11,-48C9,-50 4,-49 1,-49C-4,-49 -11,-49 -15,-45C-19,-41 -23,-35 -27,-31C-31,-27 -26,-20 -28,-16C-32,-7 -31,4 -28,13C-27,16 -29,21 -27,23C-25,25 -24,29 -23,32C-22,35 -18,36 -18,39C-18,39 -17,40 -17,40C-17,40 -16,41 -16,41C-16,41 -15,42 -15,42C-15,42 -15,43 -15,43C-7,51 9,49 17,41C26,32 28,19 33,8C35,3 30,-2 30,-7",
            "M5,21C7,21 8,24 9,25C14,30 19,34 22,40C24,44 29,46 29,50"];
            break;
        case 'R':
            output_paths = ["M-30,-49C-30,-37 -27,-25 -27,-13C-27,-9 -25,-5 -27,-1C-30,6 -25,14 -28,21C-32,29 -31,40 -31,49",
            "M-30,-48C-23,-48 -16,-48 -9,-48C-5,-48 -1,-51 2,-48C4,-46 8,-47 10,-45C13,-42 17,-41 20,-39C25,-36 26,-29 26,-23C26,-19 28,-15 25,-12C20,-7 14,0 7,0C-4,0 -15,-1 -26,-1",
            "M-25,0C-21,0 -18,6 -15,9C-10,14 -3,18 0,25C1,27 3,27 5,29C8,32 10,38 13,41C16,44 23,46 23,50"];
            break;
        case 'S':
            output_paths = ["M29,-23C26,-23 28,-30 26,-32C23,-35 22,-41 19,-44C17,-46 14,-47 12,-49C8,-53 1,-49 -4,-47C-10,-44 -18,-42 -23,-37C-25,-35 -22,-31 -24,-29C-28,-25 -29,-15 -25,-11C-23,-9 -25,-6 -23,-4C-17,2 -6,1 0,7C2,9 5,6 7,8C9,10 13,10 15,12C19,16 22,19 26,23C27,24 26,26 26,28C26,31 27,34 26,36C24,40 20,44 16,46C13,48 9,48 5,48C3,48 1,47 0,48C-2,50 -5,50 -7,49C-13,46 -17,40 -22,35C-25,32 -30,29 -30,25"];
            break;
        case 'T':
            output_paths = ["M-30,-49C-25,-44 -16,-48 -9,-48C4,-48 16,-50 29,-50",
            "M0,-50C0,-42 0,-35 0,-27C0,-24 -1,-20 0,-17C2,-14 -1,-9 1,-6C3,-2 4,3 2,7C-2,15 0,26 0,35C0,40 0,46 0,51"];
            break;
        case 'U':
            output_paths = ["M-30,-49C-34,-49 -32,-42 -32,-38C-32,-31 -30,-24 -30,-17C-30,-0 -28,17 -21,32C-19,36 -19,40 -16,43C-11,48 -2,52 5,49C8,47 13,48 16,45C19,42 20,40 23,37C27,33 24,27 28,23C29,22 27,20 28,19C31,13 29,6 29,-1C29,-19 26,-31 26,-51"];
            break;
        case 'V':
            output_paths = ["M-31,-50C-31,-32 -19,-15 -11,1C-6,11 -11,24 -3,32C1,36 -5,48 0,48",
            "M0,49C0,41 3,33 7,26C12,16 13,5 16,-5C18,-11 19,-17 21,-23C22,-27 26,-29 27,-33C29,-39 27,-46 31,-50"];
            break;
        case 'W':
            output_paths = ["M-31,-50C-31,-47 -30,-42 -28,-40C-27,-39 -29,-37 -28,-36C-25,-33 -26,-28 -24,-24C-23,-22 -25,-18 -24,-16C-21,-10 -23,-1 -20,5C-17,11 -18,18 -15,24C-14,25 -16,28 -15,29C-13,31 -15,34 -14,36C-12,41 -11,46 -11,51",
            "M-12,48C-12,43 -10,38 -8,33C-5,27 -8,20 -5,14C-3,10 0,5 0,0",
            "M0,0C0,7 6,16 9,19C12,22 10,27 12,31C15,37 19,43 19,50",
            "M19,49C19,35 25,21 21,8C20,4 21,-1 21,-5C21,-10 20,-16 22,-21C23,-23 21,-26 22,-28C26,-35 23,-45 29,-51"];
            break;
        case 'X':
            output_paths = ["M-30,-49C-27,-49 -28,-43 -27,-40C-24,-35 -20,-30 -17,-25C-16,-23 -16,-20 -15,-19C-11,-15 -10,-9 -7,-4C-6,-1 -2,-1 -1,2C3,10 8,20 15,27C18,30 16,35 19,38C23,42 24,47 28,51",
            "M29,-51C29,-49 26,-48 25,-47C22,-44 21,-39 19,-35C16,-29 16,-22 11,-17C7,-13 3,-10 1,-5C-1,-1 -2,4 -5,7C-9,11 -9,16 -11,21C-14,28 -16,36 -21,41C-24,44 -25,51 -29,51"];
            break;
        case 'Y':
            output_paths = ["M-30,-50C-30,-48 -28,-46 -27,-45C-26,-44 -28,-43 -27,-42C-24,-39 -23,-35 -20,-32C-19,-31 -20,-28 -19,-27C-16,-24 -15,-20 -12,-17C-10,-15 -12,-11 -10,-9C-7,-6 -5,1 -1,1",
            "M29,-50C29,-46 25,-44 23,-41C21,-37 22,-32 19,-29C15,-25 12,-21 8,-17C6,-15 7,-12 5,-10C2,-7 -1,-2 -1,2",
            "M0,0C0,2 -4,21 -3,22C0,25 0,31 0,35C0,39 -2,42 -2,46C-2,47 -2,49 -1,49"];
            break;
        case 'Z':
            output_paths = ["M-30,-50C-30,-52 -25,-51 -23,-51C-19,-51 -14,-51 -10,-51C3,-51 17,-51 30,-51",
            "M29,-50C26,-50 26,-45 24,-43C22,-41 21,-41 19,-39C18,-38 20,-34 19,-33C16,-30 15,-23 12,-20C8,-16 7,-12 3,-8C2,-7 0,-7 0,-6C-1,-2 -4,2 -6,6C-6,7 -6,7 -7,8C-9,10 -12,13 -14,15C-16,17 -15,22 -18,23C-22,25 -21,32 -23,36C-25,40 -29,44 -29,49",
            "M-30,48C-23,48 -17,47 -10,47C-8,47 -5,45 -3,47C0,50 6,49 10,49C14,49 18,52 21,49C23,47 27,46 30,46"];
            break;
        case 'a':
            output_paths = ["M22,0C17,0 14,-7 10,-9C7,-10 2,-10 0,-8C-1,-7 -5,-9 -6,-8C-9,-5 -17,-0 -19,2C-22,5 -23,9 -26,12C-30,16 -27,22 -27,27C-27,34 -22,40 -17,45C-12,50 -5,50 2,50C5,50 8,52 10,51C17,48 20,39 22,32C24,27 22,21 22,16C22,13 22,9 22,6C22,3 20,0 20,-3C20,-4 19,-5 19,-5C19,-5 18,1 18,4C18,11 15,18 18,24C21,30 18,38 23,43C25,45 28,47 28,50"];
            break;
        case 'b':
            output_paths = ["M20,1C20,-5 10,-13 4,-10C-6,-5 -14,1 -22,9C-24,11 -23,14 -25,16C-30,21 -25,31 -22,37C-19,43 -13,49 -7,52C-3,54 3,52 7,50C11,48 16,49 19,46C27,38 26,23 26,11C26,5 22,0 18,-4C17,-5 14,-9 14,-7",
            "M-27,49C-27,46 -25,44 -25,41C-25,37 -27,33 -24,30C-23,29 -24,26 -24,24C-24,18 -25,11 -25,5C-25,-1 -26,-7 -26,-13C-26,-16 -26,-18 -26,-21C-26,-25 -26,-29 -26,-33C-26,-39 -27,-44 -27,-50"];
            break;
        case 'c':
            output_paths = ["M25,3C22,3 21,-2 18,-3C14,-5 9,-6 6,-9C5,-10 2,-9 0,-9C-5,-9 -10,-8 -13,-5C-14,-4 -14,-1 -16,0C-20,2 -19,9 -22,12C-26,16 -28,24 -25,29C-22,34 -20,40 -16,44C-15,45 -13,44 -12,45C-10,47 -5,46 -2,48C0,49 4,50 6,48C7,47 10,49 11,48C14,47 16,43 19,42C21,41 24,40 24,38"];
            break;
        case 'd':
            output_paths = ["M26,-3C26,-5 22,-5 20,-7C17,-10 11,-10 6,-10C-4,-10 -14,-7 -21,0C-32,11 -30,36 -19,47C-15,51 -8,52 -2,52C2,52 6,55 9,52C11,50 14,50 16,48C23,41 28,29 28,19C28,12 29,4 26,-3C25,-5 25,-8 23,-8",
            "M26,50C26,38 27,26 27,14C27,5 27,-5 27,-14C27,-18 24,-24 27,-27C30,-30 26,-35 28,-38C30,-42 30,-47 30,-51"];
            break;
        case 'e':
            output_paths = ["M-29,17C-22,17 -14,18 -7,18C-2,18 4,17 9,19C13,21 18,20 22,20C24,20 27,22 29,20C32,17 29,9 26,6C22,2 20,-1 16,-5C12,-9 6,-8 1,-10C-9,-15 -20,0 -25,10C-32,23 -17,40 -7,50C-6,51 -3,50 -1,50C3,50 7,51 10,48C11,47 15,49 16,48C19,45 24,42 24,38"];
            break;
        case 'f':
            output_paths = ["M0,48C0,28 0,7 0,-13C0,-18 0,-23 0,-28C0,-33 -0,-38 2,-42C2,-43 1,-44 2,-45C5,-48 11,-50 14,-47C17,-44 19,-41 22,-38C24,-36 20,-33 22,-31C23,-30 24,-27 24,-25C24,-24 24,-22 25,-22",
            "M-17,-10C-5,-10 7,-9 19,-9"];
            break;
        case 'g':
            output_paths = ["M24,0C21,-3 21,-6 18,-9C17,-10 14,-9 12,-9C8,-9 3,-8 -1,-7C-3,-6 -6,-8 -8,-6C-10,-4 -12,-2 -14,-1C-19,2 -25,5 -27,10C-28,14 -28,18 -28,22C-28,31 -29,43 -21,47C-14,50 -3,53 2,48C4,46 8,48 10,46C14,42 16,36 20,32C22,30 20,27 21,25C23,21 23,16 23,11C23,8 24,5 24,2C24,1 24,0 24,0C24,0 25,2 25,3C28,9 25,16 25,23C25,38 29,54 22,67C18,75 12,82 4,86C1,87 -2,86 -5,86C-8,86 -11,87 -14,86C-17,84 -16,79 -19,76C-21,74 -23,70 -23,67"];
            break;
        case 'h':
            output_paths = ["M-29,-51C-29,-33 -31,-16 -31,2C-31,11 -31,15 -31,27C-31,30 -29,34 -29,37C-29,41 -29,48 -29,48C-29,48 -29,41 -29,37C-29,32 -28,28 -28,23C-28,21 -30,18 -28,16C-26,14 -27,10 -25,8C-23,6 -21,4 -19,2C-16,-1 -11,2 -8,0C-4,-2 1,-1 5,-1C7,-1 10,-3 12,-1C13,-0 15,-1 16,0C18,2 17,5 18,8C19,10 21,12 22,14C24,18 22,24 25,27C26,28 25,30 25,32C25,35 26,39 26,42C26,44 26,49 28,49"];
            break;
        case 'i':
            output_paths = ["M0,49C0,33 1,16 1,0",
            "M-2,-13C-2,-12 1,-11 2,-11C3,-11 4,-14 3,-15C1,-17 -3,-8 0,-8"];
            break;
        case 'j':
            output_paths = ["M2,0C2,3 -0,36 -1,38C-2,41 -1,46 -3,48C-4,49 -3,51 -3,53C-3,57 -3,61 -6,64C-9,67 -13,66 -16,68C-18,69 -21,71 -23,69C-27,65 -29,60 -29,55",
            "M1,-13C-0,-13 -1,-10 0,-9C1,-8 5,-7 6,-8C7,-9 7,-10 6,-11C4,-13 2,-10 0,-8C-1,-7 1,-7 2,-7"];
            break;
        case 'k':
            output_paths = ["M-11,-10C-7,-6 -11,2 -10,8C-9,15 -7,23 -7,30C-7,36 -8,43 -8,49",
            "M-7,20C-4,20 -2,17 0,15C4,13 9,12 12,9C15,6 14,0 18,0",
            "M-7,19C-7,21 -4,21 -2,22C1,24 4,26 5,29C6,32 9,35 11,37C14,40 12,47 15,50"];
            break;
        case 'l':
            output_paths = ["M0,-49C0,-35 -2,-20 -2,-6C-2,-1 -4,4 -2,9C2,21 0,35 0,48"];
            break;
        case 'm':
            output_paths = ["M-31,-7C-31,3 -30,12 -30,22C-30,26 -30,31 -30,35C-30,39 -30,44 -30,48C-30,49 -30,51 -30,51C-30,51 -30,49 -30,48C-30,43 -30,37 -30,32C-30,23 -29,12 -22,5C-20,3 -15,4 -12,4C-8,4 -1,6 -1,10C-1,15 0,19 0,24C0,25 0,27 0,27C0,27 0,26 0,25C0,22 -1,18 1,16C2,15 2,12 3,11C6,8 10,6 14,6C17,6 21,4 23,6C25,8 26,13 28,15C30,17 27,21 28,23C32,31 30,40 30,49"];
            break;
        case 'n':
            output_paths = ["M-30,-8C-30,2 -30,12 -30,22C-30,26 -30,31 -30,35C-30,39 -29,44 -29,48C-29,49 -29,51 -29,51C-29,51 -29,49 -29,48C-29,44 -31,39 -31,35C-31,27 -32,19 -29,12C-28,10 -29,6 -27,4C-19,-4 -6,-4 5,-4C8,-4 12,-5 14,-3C16,-1 17,4 19,6C22,9 25,14 25,18C25,21 27,24 28,27C30,30 25,35 28,38C31,41 30,46 30,50"];
            break;
        case 'o':
            output_paths = ["M0,-10C-4,-10 -8,-7 -11,-4C-13,-2 -17,-2 -19,0C-21,2 -23,5 -25,7C-27,9 -26,14 -28,16C-29,17 -27,20 -28,21C-30,23 -29,27 -28,29C-27,32 -29,36 -27,38C-24,41 -24,44 -21,47C-19,49 -17,48 -15,50C-14,51 -11,49 -10,50C-7,53 -1,53 2,50C5,47 10,51 13,48C17,44 23,43 27,39C29,37 28,34 29,32C34,21 29,6 20,-3C18,-5 14,-7 12,-9C10,-11 7,-10 4,-10C2,-10 0,-11 -1,-10C-3,-8 -3,-4 -3,-1"];
            break;
        case 'p':
            output_paths = ["M0,-11C-5,-11 -11,-12 -15,-10C-20,-8 -23,-3 -27,1C-29,3 -27,7 -29,9C-32,12 -29,18 -29,22C-29,27 -29,33 -25,37C-24,38 -26,39 -25,40C-22,43 -18,44 -15,47C-14,48 -10,46 -9,47C-8,48 -6,47 -4,48C0,50 7,51 11,47C12,46 15,48 16,47C21,42 25,39 30,34C31,33 29,30 30,28C32,24 33,19 30,16C29,15 31,12 30,11C27,8 29,4 26,1C23,-2 19,-5 16,-8C14,-10 11,-8 9,-10C5,-14 -2,-7 -7,-7",
            "M-28,-11C-28,5 -30,21 -30,37C-30,43 -30,50 -30,56C-30,59 -29,63 -31,65C-33,67 -31,72 -31,75C-31,81 -31,88 -31,94"];
            break;
        case 'q':
            output_paths = ["M1,-10C1,-11 -1,-11 -2,-11C-6,-11 -10,-10 -14,-8C-19,-5 -24,-1 -28,3C-29,4 -28,6 -28,8C-28,11 -29,14 -29,17C-29,21 -32,26 -29,29C-25,33 -20,39 -17,42C-14,45 -8,44 -4,46C0,48 5,47 10,47C13,47 18,48 20,46C26,40 25,30 29,22C30,19 30,15 30,12C30,10 31,8 30,7C28,5 29,2 27,0C25,-2 22,-3 20,-5C14,-11 -6,-11 -6,-2",
            "M30,-6C30,0 31,7 28,13C24,20 30,30 27,38C25,44 29,52 26,58C22,65 23,74 26,82C27,85 24,88 26,90C28,92 30,85 32,83C35,80 35,77 38,74C40,72 43,72 43,70"];
            break;
        case 'r':
            output_paths = ["M-12,-9C-12,5 -11,18 -11,32C-11,36 -11,39 -11,43C-11,45 -10,47 -11,48C-12,49 -12,51 -12,51C-12,51 -12,49 -12,48C-12,43 -11,37 -11,32C-11,26 -12,20 -12,14C-12,12 -13,9 -12,8C-10,6 -11,3 -9,1C-6,-2 -1,-3 3,-1C5,-0 8,-1 9,0C13,4 16,9 16,14"];
            break;
        case 's':
            output_paths = ["M30,8C30,2 22,-2 17,-5C13,-7 6,-12 3,-9C-1,-5 -11,-8 -15,-4C-18,-1 -22,1 -25,4C-26,5 -24,7 -25,8C-28,11 -23,18 -19,20C-7,26 12,12 22,22C24,24 26,25 28,27C29,28 28,31 28,33C28,35 29,38 28,39C26,41 26,45 23,46C19,48 15,49 12,52C9,55 3,52 -2,52C-9,52 -15,46 -20,41C-21,40 -23,39 -23,38"];
            break;
        case 't':
            output_paths = ["M-9,-9C-9,2 -9,13 -9,24C-9,30 -11,38 -7,42C-3,46 3,53 7,49C12,44 12,37 12,30",
            "M-23,10C-11,10 2,11 14,11"];
            break;
        case 'u':
            output_paths = ["M-29,-9C-29,-12 -29,-3 -29,0C-29,6 -30,12 -30,18C-30,27 -29,37 -25,45C-22,51 -13,50 -7,53C-6,54 -4,52 -3,51C-2,50 0,51 2,51C5,51 7,50 9,48C10,47 11,49 12,48C16,44 19,39 23,35C27,31 25,25 27,20C30,13 28,5 28,-2C28,-5 28,-12 28,-12C28,-12 28,-10 28,-9C28,-5 28,-1 28,3C28,7 28,11 28,15C28,17 28,20 28,22C28,25 28,29 28,32C28,36 27,40 27,44C27,46 26,51 28,51"];
            break;
        case 'v':
            output_paths = ["M-29,-9C-29,-4 -26,1 -23,4C-22,5 -23,7 -22,9C-19,15 -17,22 -12,27C-9,30 -9,34 -6,37C-5,38 -6,42 -4,43C-2,44 -1,51 1,49C5,45 2,38 6,34C10,30 11,24 14,19C15,17 18,16 20,14C22,12 21,8 23,6C27,2 32,-2 32,-8"];
            break;
        case 'w':
            output_paths = ["M-30,-10C-30,4 -25,17 -19,29C-16,35 -20,44 -15,49C-13,51 -14,43 -12,41C-8,37 -7,29 -3,25C-2,24 -4,20 -2,20C-1,20 0,16 1,17C4,20 3,27 6,30C9,33 9,38 12,40C14,41 15,44 17,46C18,47 17,49 18,48C21,45 18,40 19,36C22,27 21,15 28,8C29,7 27,5 28,4C30,2 32,-0 32,-3C32,-5 34,-11 34,-9"];
            break;
        case 'x':
            output_paths = ["M-30,-10C-30,-8 -27,-8 -25,-6C-21,-2 -16,0 -12,4C-5,11 -1,22 8,26C14,29 16,35 21,40C24,43 26,45 28,48C29,50 32,50 32,52",
            "M29,-11C18,-0 8,10 -3,21C-9,27 -17,32 -23,38C-26,41 -31,44 -31,48"];
            break;
        case 'y':
            output_paths = ["M-30,-10C-29,-9 -30,-6 -29,-4C-27,1 -26,7 -25,12C-23,19 -18,25 -15,31C-12,37 -7,41 -2,46C1,49 6,48 9,45C14,40 19,35 22,29C26,22 23,13 27,6C30,0 32,-6 32,-13",
            "M30,-1C30,2 28,4 27,7C26,11 27,17 25,21C24,23 26,27 25,29C22,35 20,41 20,48C20,53 19,58 17,62C14,67 13,74 10,79C8,82 3,82 0,85C-4,89 -10,90 -15,88C-20,86 -23,81 -26,76C-27,75 -29,74 -29,73"];
            break;
        case 'z':
            output_paths = ["M-30,-10C-17,-10 -4,-9 9,-9C14,-9 19,-9 24,-9C26,-9 29,-10 30,-9C32,-7 26,-5 25,-3C23,2 17,4 13,8C10,11 8,15 5,18C3,20 0,21 0,23C0,24 -0,24 -1,25C-1,25 -2,26 -2,26C-3,27 -4,28 -5,29C-9,33 -13,34 -17,38C-20,41 -22,43 -25,46C-27,48 -33,49 -31,51C-30,52 -27,51 -25,51C-20,51 -15,51 -10,51C4,51 18,49 32,49"];
            break;
        default:
            output_paths = [];
            break;
    }
    return output_paths;
}