API Docs for:

File: /home/lindsay/xeolabs/xeogl-next/xeogl/examples/js/geometry/vectorTextGeometry.js

/**
 A **VectorTextGeometry** extends {{#crossLink "Geometry"}}{{/crossLink}} to define vector text geometry for attached {{#crossLink "Mesh"}}Meshes{{/crossLink}}.

 <a href="../../examples/#geometry_primitives_vectorText"><img src="../../assets/images/screenshots/VectorTextGeometry.png"></img></a>

 ## Overview

 * A VectorTextGeometry is a mesh of line segments in the X-Y plane  that is generated from the value of
 its {{#crossLink "VectorTextGeometry/text:property"}}{{/crossLink}} property.
 * Text is monospaced and each character occupies a square cell.
 * Set its {{#crossLink "VectorTextGeometry/origin:property"}}{{/crossLink}}, {{#crossLink "VectorTextGeometry/size:property"}}{{/crossLink}} or {{#crossLink "VectorTextGeometry/text:property"}}{{/crossLink}} properties to new values at any time to dynamically regenerate it.

 ## Example

 ````javascript
 new xeogl.Mesh({
     geometry: new xeogl.VectorTextGeometry({
         text: "Attack ships on fire off the Shoulder of Orion",
         origin: [0,0,0],
         size: 2 // Size of each square character cell
     }),
     material: new xeogl.PhongMaterial({
         emissive: [0.5, 1.0, 1.0],
         lineWidth: 2
     }),
     transform: new xeogl.Translate({
         xyz: [0, 40, 0]
     })
 });
 ````

 @class VectorTextGeometry
 @module xeogl
 @submodule geometry
 @constructor
 @param [scene] {Scene} Parent {{#crossLink "Scene"}}Scene{{/crossLink}} - creates this VectorTextGeometry in the default
 {{#crossLink "Scene"}}Scene{{/crossLink}} when omitted.
 @param [cfg] {*} Configs
 @param [cfg.id] {String} Optional ID, unique among all components in the parent {{#crossLink "Scene"}}Scene{{/crossLink}},
 generated automatically when omitted.
 @param [cfg.meta] {String:Object} Optional map of user-defined metadata to attach to this VectorTextGeometry.
 @param [cfg.origin] {Float32Array} 3D point indicating the top left corner of the VectorTextGeometry.
 @param [cfg.size=1] {Number} Size of each character.
 @param [cfg.text=""] {String} The text.
 @extends Geometry
 */
{

    var letters;

    xeogl.VectorTextGeometry = class xeoVertexGeometry extends xeogl.Geometry {

        init(cfg) {

            if (!letters) {
                letters = buildStrokeData();
            }

            var origin = cfg.origin || [0, 0, 0];
            var xOrigin = origin[0];
            var yOrigin = origin[1];
            var zOrigin = origin[2];
            var size = cfg.size || 1;

            var positions = [];
            var indices = [];
            var text = cfg.text;
            if (xeogl._isNumeric(text)) {
                text = "" + text;
            }
            var lines = (text || "").split("\n");
            var countVerts = 0;
            var y = 0;
            var x;
            var str;
            var len;
            var c;
            var mag = 1.0 / 25.0;
            var penUp;
            var p1;
            var p2;
            var needLine;
            var pointsLen;
            var a;

            for (var iLine = 0; iLine < lines.length; iLine++) {

                x = 0;
                str = lines[iLine];
                len = str.length;

                for (var i = 0; i < len; i++) {

                    c = letters[str.charAt(i)];

                    if (c == '\n') {
                        //alert("newline");
                    }

                    if (!c) {
                        continue;
                    }

                    penUp = 1;
                    p1 = -1;
                    p2 = -1;
                    needLine = false;

                    pointsLen = c.points.length;

                    for (var j = 0; j < pointsLen; j++) {
                        a = c.points[j];

                        if (a[0] == -1 && a[1] == -1) {
                            penUp = 1;
                            needLine = false;
                            continue;
                        }

                        positions.push((x + (a[0] * size) * mag) + xOrigin);
                        positions.push((y + (a[1] * size) * mag) + yOrigin);
                        positions.push(0 + zOrigin);

                        if (p1 == -1) {
                            p1 = countVerts;
                        } else if (p2 == -1) {
                            p2 = countVerts;
                        } else {
                            p1 = p2;
                            p2 = countVerts;
                        }
                        countVerts++;

                        if (penUp) {
                            penUp = false;

                        } else {
                            indices.push(p1);
                            indices.push(p2);
                        }

                        needLine = true;
                    }
                    x += c.width * mag * size;

                }
                y -= 35 * mag * size;
            }

            super.init(xeogl._apply(cfg, {
                primitive: "lines",
                positions: positions,
                indices: indices
            }));
        }
    };

    function buildStrokeData() {
        return {
            ' ': {width: 16, points: []},
            '!': {
                width: 10, points: [
                    [5, 21],
                    [5, 7],
                    [-1, -1],
                    [5, 2],
                    [4, 1],
                    [5, 0],
                    [6, 1],
                    [5, 2]
                ]
            },
            '"': {
                width: 16, points: [
                    [4, 21],
                    [4, 14],
                    [-1, -1],
                    [12, 21],
                    [12, 14]
                ]
            },
            '#': {
                width: 21, points: [
                    [11, 25],
                    [4, -7],
                    [-1, -1],
                    [17, 25],
                    [10, -7],
                    [-1, -1],
                    [4, 12],
                    [18, 12],
                    [-1, -1],
                    [3, 6],
                    [17, 6]
                ]
            },
            '$': {
                width: 20, points: [
                    [8, 25],
                    [8, -4],
                    [-1, -1],
                    [12, 25],
                    [12, -4],
                    [-1, -1],
                    [17, 18],
                    [15, 20],
                    [12, 21],
                    [8, 21],
                    [5, 20],
                    [3, 18],
                    [3, 16],
                    [4, 14],
                    [5, 13],
                    [7, 12],
                    [13, 10],
                    [15, 9],
                    [16, 8],
                    [17, 6],
                    [17, 3],
                    [15, 1],
                    [12, 0],
                    [8, 0],
                    [5, 1],
                    [3, 3]
                ]
            },
            '%': {
                width: 24, points: [
                    [21, 21],
                    [3, 0],
                    [-1, -1],
                    [8, 21],
                    [10, 19],
                    [10, 17],
                    [9, 15],
                    [7, 14],
                    [5, 14],
                    [3, 16],
                    [3, 18],
                    [4, 20],
                    [6, 21],
                    [8, 21],
                    [10, 20],
                    [13, 19],
                    [16, 19],
                    [19, 20],
                    [21, 21],
                    [-1, -1],
                    [17, 7],
                    [15, 6],
                    [14, 4],
                    [14, 2],
                    [16, 0],
                    [18, 0],
                    [20, 1],
                    [21, 3],
                    [21, 5],
                    [19, 7],
                    [17, 7]
                ]
            },
            '&': {
                width: 26, points: [
                    [23, 12],
                    [23, 13],
                    [22, 14],
                    [21, 14],
                    [20, 13],
                    [19, 11],
                    [17, 6],
                    [15, 3],
                    [13, 1],
                    [11, 0],
                    [7, 0],
                    [5, 1],
                    [4, 2],
                    [3, 4],
                    [3, 6],
                    [4, 8],
                    [5, 9],
                    [12, 13],
                    [13, 14],
                    [14, 16],
                    [14, 18],
                    [13, 20],
                    [11, 21],
                    [9, 20],
                    [8, 18],
                    [8, 16],
                    [9, 13],
                    [11, 10],
                    [16, 3],
                    [18, 1],
                    [20, 0],
                    [22, 0],
                    [23, 1],
                    [23, 2]
                ]
            },
            '\'': {
                width: 10, points: [
                    [5, 19],
                    [4, 20],
                    [5, 21],
                    [6, 20],
                    [6, 18],
                    [5, 16],
                    [4, 15]
                ]
            },
            '(': {
                width: 14, points: [
                    [11, 25],
                    [9, 23],
                    [7, 20],
                    [5, 16],
                    [4, 11],
                    [4, 7],
                    [5, 2],
                    [7, -2],
                    [9, -5],
                    [11, -7]
                ]
            },
            ')': {
                width: 14, points: [
                    [3, 25],
                    [5, 23],
                    [7, 20],
                    [9, 16],
                    [10, 11],
                    [10, 7],
                    [9, 2],
                    [7, -2],
                    [5, -5],
                    [3, -7]
                ]
            },
            '*': {
                width: 16, points: [
                    [8, 21],
                    [8, 9],
                    [-1, -1],
                    [3, 18],
                    [13, 12],
                    [-1, -1],
                    [13, 18],
                    [3, 12]
                ]
            },
            '+': {
                width: 26, points: [
                    [13, 18],
                    [13, 0],
                    [-1, -1],
                    [4, 9],
                    [22, 9]
                ]
            },
            ',': {
                width: 10, points: [
                    [6, 1],
                    [5, 0],
                    [4, 1],
                    [5, 2],
                    [6, 1],
                    [6, -1],
                    [5, -3],
                    [4, -4]
                ]
            },
            '-': {
                width: 26, points: [
                    [4, 9],
                    [22, 9]
                ]
            },
            '.': {
                width: 10, points: [
                    [5, 2],
                    [4, 1],
                    [5, 0],
                    [6, 1],
                    [5, 2]
                ]
            },
            '/': {
                width: 22, points: [
                    [20, 25],
                    [2, -7]
                ]
            },
            '0': {
                width: 20, points: [
                    [9, 21],
                    [6, 20],
                    [4, 17],
                    [3, 12],
                    [3, 9],
                    [4, 4],
                    [6, 1],
                    [9, 0],
                    [11, 0],
                    [14, 1],
                    [16, 4],
                    [17, 9],
                    [17, 12],
                    [16, 17],
                    [14, 20],
                    [11, 21],
                    [9, 21]
                ]
            },
            '1': {
                width: 20, points: [
                    [6, 17],
                    [8, 18],
                    [11, 21],
                    [11, 0]
                ]
            },
            '2': {
                width: 20, points: [
                    [4, 16],
                    [4, 17],
                    [5, 19],
                    [6, 20],
                    [8, 21],
                    [12, 21],
                    [14, 20],
                    [15, 19],
                    [16, 17],
                    [16, 15],
                    [15, 13],
                    [13, 10],
                    [3, 0],
                    [17, 0]
                ]
            },
            '3': {
                width: 20, points: [
                    [5, 21],
                    [16, 21],
                    [10, 13],
                    [13, 13],
                    [15, 12],
                    [16, 11],
                    [17, 8],
                    [17, 6],
                    [16, 3],
                    [14, 1],
                    [11, 0],
                    [8, 0],
                    [5, 1],
                    [4, 2],
                    [3, 4]
                ]
            },
            '4': {
                width: 20, points: [
                    [13, 21],
                    [3, 7],
                    [18, 7],
                    [-1, -1],
                    [13, 21],
                    [13, 0]
                ]
            },
            '5': {
                width: 20, points: [
                    [15, 21],
                    [5, 21],
                    [4, 12],
                    [5, 13],
                    [8, 14],
                    [11, 14],
                    [14, 13],
                    [16, 11],
                    [17, 8],
                    [17, 6],
                    [16, 3],
                    [14, 1],
                    [11, 0],
                    [8, 0],
                    [5, 1],
                    [4, 2],
                    [3, 4]
                ]
            },
            '6': {
                width: 20, points: [
                    [16, 18],
                    [15, 20],
                    [12, 21],
                    [10, 21],
                    [7, 20],
                    [5, 17],
                    [4, 12],
                    [4, 7],
                    [5, 3],
                    [7, 1],
                    [10, 0],
                    [11, 0],
                    [14, 1],
                    [16, 3],
                    [17, 6],
                    [17, 7],
                    [16, 10],
                    [14, 12],
                    [11, 13],
                    [10, 13],
                    [7, 12],
                    [5, 10],
                    [4, 7]
                ]
            },
            '7': {
                width: 20, points: [
                    [17, 21],
                    [7, 0],
                    [-1, -1],
                    [3, 21],
                    [17, 21]
                ]
            },
            '8': {
                width: 20, points: [
                    [8, 21],
                    [5, 20],
                    [4, 18],
                    [4, 16],
                    [5, 14],
                    [7, 13],
                    [11, 12],
                    [14, 11],
                    [16, 9],
                    [17, 7],
                    [17, 4],
                    [16, 2],
                    [15, 1],
                    [12, 0],
                    [8, 0],
                    [5, 1],
                    [4, 2],
                    [3, 4],
                    [3, 7],
                    [4, 9],
                    [6, 11],
                    [9, 12],
                    [13, 13],
                    [15, 14],
                    [16, 16],
                    [16, 18],
                    [15, 20],
                    [12, 21],
                    [8, 21]
                ]
            },
            '9': {
                width: 20, points: [
                    [16, 14],
                    [15, 11],
                    [13, 9],
                    [10, 8],
                    [9, 8],
                    [6, 9],
                    [4, 11],
                    [3, 14],
                    [3, 15],
                    [4, 18],
                    [6, 20],
                    [9, 21],
                    [10, 21],
                    [13, 20],
                    [15, 18],
                    [16, 14],
                    [16, 9],
                    [15, 4],
                    [13, 1],
                    [10, 0],
                    [8, 0],
                    [5, 1],
                    [4, 3]
                ]
            },
            ':': {
                width: 10, points: [
                    [5, 14],
                    [4, 13],
                    [5, 12],
                    [6, 13],
                    [5, 14],
                    [-1, -1],
                    [5, 2],
                    [4, 1],
                    [5, 0],
                    [6, 1],
                    [5, 2]
                ]
            },
            ';': {
                width: 10, points: [
                    [5, 14],
                    [4, 13],
                    [5, 12],
                    [6, 13],
                    [5, 14],
                    [-1, -1],
                    [6, 1],
                    [5, 0],
                    [4, 1],
                    [5, 2],
                    [6, 1],
                    [6, -1],
                    [5, -3],
                    [4, -4]
                ]
            },
            '<': {
                width: 24, points: [
                    [20, 18],
                    [4, 9],
                    [20, 0]
                ]
            },
            '=': {
                width: 26, points: [
                    [4, 12],
                    [22, 12],
                    [-1, -1],
                    [4, 6],
                    [22, 6]
                ]
            },
            '>': {
                width: 24, points: [
                    [4, 18],
                    [20, 9],
                    [4, 0]
                ]
            },
            '?': {
                width: 18, points: [
                    [3, 16],
                    [3, 17],
                    [4, 19],
                    [5, 20],
                    [7, 21],
                    [11, 21],
                    [13, 20],
                    [14, 19],
                    [15, 17],
                    [15, 15],
                    [14, 13],
                    [13, 12],
                    [9, 10],
                    [9, 7],
                    [-1, -1],
                    [9, 2],
                    [8, 1],
                    [9, 0],
                    [10, 1],
                    [9, 2]
                ]
            },
            '@': {
                width: 27, points: [
                    [18, 13],
                    [17, 15],
                    [15, 16],
                    [12, 16],
                    [10, 15],
                    [9, 14],
                    [8, 11],
                    [8, 8],
                    [9, 6],
                    [11, 5],
                    [14, 5],
                    [16, 6],
                    [17, 8],
                    [-1, -1],
                    [12, 16],
                    [10, 14],
                    [9, 11],
                    [9, 8],
                    [10, 6],
                    [11, 5],
                    [-1, -1],
                    [18, 16],
                    [17, 8],
                    [17, 6],
                    [19, 5],
                    [21, 5],
                    [23, 7],
                    [24, 10],
                    [24, 12],
                    [23, 15],
                    [22, 17],
                    [20, 19],
                    [18, 20],
                    [15, 21],
                    [12, 21],
                    [9, 20],
                    [7, 19],
                    [5, 17],
                    [4, 15],
                    [3, 12],
                    [3, 9],
                    [4, 6],
                    [5, 4],
                    [7, 2],
                    [9, 1],
                    [12, 0],
                    [15, 0],
                    [18, 1],
                    [20, 2],
                    [21, 3],
                    [-1, -1],
                    [19, 16],
                    [18, 8],
                    [18, 6],
                    [19, 5]
                ]
            },
            'A': {
                width: 18, points: [
                    [9, 21],
                    [1, 0],
                    [-1, -1],
                    [9, 21],
                    [17, 0],
                    [-1, -1],
                    [4, 7],
                    [14, 7]
                ]
            },
            'B': {
                width: 21, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [13, 21],
                    [16, 20],
                    [17, 19],
                    [18, 17],
                    [18, 15],
                    [17, 13],
                    [16, 12],
                    [13, 11],
                    [-1, -1],
                    [4, 11],
                    [13, 11],
                    [16, 10],
                    [17, 9],
                    [18, 7],
                    [18, 4],
                    [17, 2],
                    [16, 1],
                    [13, 0],
                    [4, 0]
                ]
            },
            'C': {
                width: 21, points: [
                    [18, 16],
                    [17, 18],
                    [15, 20],
                    [13, 21],
                    [9, 21],
                    [7, 20],
                    [5, 18],
                    [4, 16],
                    [3, 13],
                    [3, 8],
                    [4, 5],
                    [5, 3],
                    [7, 1],
                    [9, 0],
                    [13, 0],
                    [15, 1],
                    [17, 3],
                    [18, 5]
                ]
            },
            'D': {
                width: 21, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [11, 21],
                    [14, 20],
                    [16, 18],
                    [17, 16],
                    [18, 13],
                    [18, 8],
                    [17, 5],
                    [16, 3],
                    [14, 1],
                    [11, 0],
                    [4, 0]
                ]
            },
            'E': {
                width: 19, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [17, 21],
                    [-1, -1],
                    [4, 11],
                    [12, 11],
                    [-1, -1],
                    [4, 0],
                    [17, 0]
                ]
            },
            'F': {
                width: 18, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [17, 21],
                    [-1, -1],
                    [4, 11],
                    [12, 11]
                ]
            },
            'G': {
                width: 21, points: [
                    [18, 16],
                    [17, 18],
                    [15, 20],
                    [13, 21],
                    [9, 21],
                    [7, 20],
                    [5, 18],
                    [4, 16],
                    [3, 13],
                    [3, 8],
                    [4, 5],
                    [5, 3],
                    [7, 1],
                    [9, 0],
                    [13, 0],
                    [15, 1],
                    [17, 3],
                    [18, 5],
                    [18, 8],
                    [-1, -1],
                    [13, 8],
                    [18, 8]
                ]
            },
            'H': {
                width: 22, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [18, 21],
                    [18, 0],
                    [-1, -1],
                    [4, 11],
                    [18, 11]
                ]
            },
            'I': {
                width: 8, points: [
                    [4, 21],
                    [4, 0]
                ]
            },
            'J': {
                width: 16, points: [
                    [12, 21],
                    [12, 5],
                    [11, 2],
                    [10, 1],
                    [8, 0],
                    [6, 0],
                    [4, 1],
                    [3, 2],
                    [2, 5],
                    [2, 7]
                ]
            },
            'K': {
                width: 21, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [18, 21],
                    [4, 7],
                    [-1, -1],
                    [9, 12],
                    [18, 0]
                ]
            },
            'L': {
                width: 17, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 0],
                    [16, 0]
                ]
            },
            'M': {
                width: 24, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [12, 0],
                    [-1, -1],
                    [20, 21],
                    [12, 0],
                    [-1, -1],
                    [20, 21],
                    [20, 0]
                ]
            },
            'N': {
                width: 22, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [18, 0],
                    [-1, -1],
                    [18, 21],
                    [18, 0]
                ]
            },
            'O': {
                width: 22, points: [
                    [9, 21],
                    [7, 20],
                    [5, 18],
                    [4, 16],
                    [3, 13],
                    [3, 8],
                    [4, 5],
                    [5, 3],
                    [7, 1],
                    [9, 0],
                    [13, 0],
                    [15, 1],
                    [17, 3],
                    [18, 5],
                    [19, 8],
                    [19, 13],
                    [18, 16],
                    [17, 18],
                    [15, 20],
                    [13, 21],
                    [9, 21]
                ]
            },
            'P': {
                width: 21, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [13, 21],
                    [16, 20],
                    [17, 19],
                    [18, 17],
                    [18, 14],
                    [17, 12],
                    [16, 11],
                    [13, 10],
                    [4, 10]
                ]
            },
            'Q': {
                width: 22, points: [
                    [9, 21],
                    [7, 20],
                    [5, 18],
                    [4, 16],
                    [3, 13],
                    [3, 8],
                    [4, 5],
                    [5, 3],
                    [7, 1],
                    [9, 0],
                    [13, 0],
                    [15, 1],
                    [17, 3],
                    [18, 5],
                    [19, 8],
                    [19, 13],
                    [18, 16],
                    [17, 18],
                    [15, 20],
                    [13, 21],
                    [9, 21],
                    [-1, -1],
                    [12, 4],
                    [18, -2]
                ]
            },
            'R': {
                width: 21, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 21],
                    [13, 21],
                    [16, 20],
                    [17, 19],
                    [18, 17],
                    [18, 15],
                    [17, 13],
                    [16, 12],
                    [13, 11],
                    [4, 11],
                    [-1, -1],
                    [11, 11],
                    [18, 0]
                ]
            },
            'S': {
                width: 20, points: [
                    [17, 18],
                    [15, 20],
                    [12, 21],
                    [8, 21],
                    [5, 20],
                    [3, 18],
                    [3, 16],
                    [4, 14],
                    [5, 13],
                    [7, 12],
                    [13, 10],
                    [15, 9],
                    [16, 8],
                    [17, 6],
                    [17, 3],
                    [15, 1],
                    [12, 0],
                    [8, 0],
                    [5, 1],
                    [3, 3]
                ]
            },
            'T': {
                width: 16, points: [
                    [8, 21],
                    [8, 0],
                    [-1, -1],
                    [1, 21],
                    [15, 21]
                ]
            },
            'U': {
                width: 22, points: [
                    [4, 21],
                    [4, 6],
                    [5, 3],
                    [7, 1],
                    [10, 0],
                    [12, 0],
                    [15, 1],
                    [17, 3],
                    [18, 6],
                    [18, 21]
                ]
            },
            'V': {
                width: 18, points: [
                    [1, 21],
                    [9, 0],
                    [-1, -1],
                    [17, 21],
                    [9, 0]
                ]
            },
            'W': {
                width: 24, points: [
                    [2, 21],
                    [7, 0],
                    [-1, -1],
                    [12, 21],
                    [7, 0],
                    [-1, -1],
                    [12, 21],
                    [17, 0],
                    [-1, -1],
                    [22, 21],
                    [17, 0]
                ]
            },
            'X': {
                width: 20, points: [
                    [3, 21],
                    [17, 0],
                    [-1, -1],
                    [17, 21],
                    [3, 0]
                ]
            },
            'Y': {
                width: 18, points: [
                    [1, 21],
                    [9, 11],
                    [9, 0],
                    [-1, -1],
                    [17, 21],
                    [9, 11]
                ]
            },
            'Z': {
                width: 20, points: [
                    [17, 21],
                    [3, 0],
                    [-1, -1],
                    [3, 21],
                    [17, 21],
                    [-1, -1],
                    [3, 0],
                    [17, 0]
                ]
            },
            '[': {
                width: 14, points: [
                    [4, 25],
                    [4, -7],
                    [-1, -1],
                    [5, 25],
                    [5, -7],
                    [-1, -1],
                    [4, 25],
                    [11, 25],
                    [-1, -1],
                    [4, -7],
                    [11, -7]
                ]
            },
            '\\': {
                width: 14, points: [
                    [0, 21],
                    [14, -3]
                ]
            },
            ']': {
                width: 14, points: [
                    [9, 25],
                    [9, -7],
                    [-1, -1],
                    [10, 25],
                    [10, -7],
                    [-1, -1],
                    [3, 25],
                    [10, 25],
                    [-1, -1],
                    [3, -7],
                    [10, -7]
                ]
            },
            '^': {
                width: 16, points: [
                    [6, 15],
                    [8, 18],
                    [10, 15],
                    [-1, -1],
                    [3, 12],
                    [8, 17],
                    [13, 12],
                    [-1, -1],
                    [8, 17],
                    [8, 0]
                ]
            },
            '_': {
                width: 16, points: [
                    [0, -2],
                    [16, -2]
                ]
            },
            '`': {
                width: 10, points: [
                    [6, 21],
                    [5, 20],
                    [4, 18],
                    [4, 16],
                    [5, 15],
                    [6, 16],
                    [5, 17]
                ]
            },
            'a': {
                width: 19, points: [
                    [15, 14],
                    [15, 0],
                    [-1, -1],
                    [15, 11],
                    [13, 13],
                    [11, 14],
                    [8, 14],
                    [6, 13],
                    [4, 11],
                    [3, 8],
                    [3, 6],
                    [4, 3],
                    [6, 1],
                    [8, 0],
                    [11, 0],
                    [13, 1],
                    [15, 3]
                ]
            },
            'b': {
                width: 19, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 11],
                    [6, 13],
                    [8, 14],
                    [11, 14],
                    [13, 13],
                    [15, 11],
                    [16, 8],
                    [16, 6],
                    [15, 3],
                    [13, 1],
                    [11, 0],
                    [8, 0],
                    [6, 1],
                    [4, 3]
                ]
            },
            'c': {
                width: 18, points: [
                    [15, 11],
                    [13, 13],
                    [11, 14],
                    [8, 14],
                    [6, 13],
                    [4, 11],
                    [3, 8],
                    [3, 6],
                    [4, 3],
                    [6, 1],
                    [8, 0],
                    [11, 0],
                    [13, 1],
                    [15, 3]
                ]
            },
            'd': {
                width: 19, points: [
                    [15, 21],
                    [15, 0],
                    [-1, -1],
                    [15, 11],
                    [13, 13],
                    [11, 14],
                    [8, 14],
                    [6, 13],
                    [4, 11],
                    [3, 8],
                    [3, 6],
                    [4, 3],
                    [6, 1],
                    [8, 0],
                    [11, 0],
                    [13, 1],
                    [15, 3]
                ]
            },
            'e': {
                width: 18, points: [
                    [3, 8],
                    [15, 8],
                    [15, 10],
                    [14, 12],
                    [13, 13],
                    [11, 14],
                    [8, 14],
                    [6, 13],
                    [4, 11],
                    [3, 8],
                    [3, 6],
                    [4, 3],
                    [6, 1],
                    [8, 0],
                    [11, 0],
                    [13, 1],
                    [15, 3]
                ]
            },
            'f': {
                width: 12, points: [
                    [10, 21],
                    [8, 21],
                    [6, 20],
                    [5, 17],
                    [5, 0],
                    [-1, -1],
                    [2, 14],
                    [9, 14]
                ]
            },
            'g': {
                width: 19, points: [
                    [15, 14],
                    [15, -2],
                    [14, -5],
                    [13, -6],
                    [11, -7],
                    [8, -7],
                    [6, -6],
                    [-1, -1],
                    [15, 11],
                    [13, 13],
                    [11, 14],
                    [8, 14],
                    [6, 13],
                    [4, 11],
                    [3, 8],
                    [3, 6],
                    [4, 3],
                    [6, 1],
                    [8, 0],
                    [11, 0],
                    [13, 1],
                    [15, 3]
                ]
            },
            'h': {
                width: 19, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [4, 10],
                    [7, 13],
                    [9, 14],
                    [12, 14],
                    [14, 13],
                    [15, 10],
                    [15, 0]
                ]
            },
            'i': {
                width: 8, points: [
                    [3, 21],
                    [4, 20],
                    [5, 21],
                    [4, 22],
                    [3, 21],
                    [-1, -1],
                    [4, 14],
                    [4, 0]
                ]
            },
            'j': {
                width: 10, points: [
                    [5, 21],
                    [6, 20],
                    [7, 21],
                    [6, 22],
                    [5, 21],
                    [-1, -1],
                    [6, 14],
                    [6, -3],
                    [5, -6],
                    [3, -7],
                    [1, -7]
                ]
            },
            'k': {
                width: 17, points: [
                    [4, 21],
                    [4, 0],
                    [-1, -1],
                    [14, 14],
                    [4, 4],
                    [-1, -1],
                    [8, 8],
                    [15, 0]
                ]
            },
            'l': {
                width: 8, points: [
                    [4, 21],
                    [4, 0]
                ]
            },
            'm': {
                width: 30, points: [
                    [4, 14],
                    [4, 0],
                    [-1, -1],
                    [4, 10],
                    [7, 13],
                    [9, 14],
                    [12, 14],
                    [14, 13],
                    [15, 10],
                    [15, 0],
                    [-1, -1],
                    [15, 10],
                    [18, 13],
                    [20, 14],
                    [23, 14],
                    [25, 13],
                    [26, 10],
                    [26, 0]
                ]
            },
            'n': {
                width: 19, points: [
                    [4, 14],
                    [4, 0],
                    [-1, -1],
                    [4, 10],
                    [7, 13],
                    [9, 14],
                    [12, 14],
                    [14, 13],
                    [15, 10],
                    [15, 0]
                ]
            },
            'o': {
                width: 19, points: [
                    [8, 14],
                    [6, 13],
                    [4, 11],
                    [3, 8],
                    [3, 6],
                    [4, 3],
                    [6, 1],
                    [8, 0],
                    [11, 0],
                    [13, 1],
                    [15, 3],
                    [16, 6],
                    [16, 8],
                    [15, 11],
                    [13, 13],
                    [11, 14],
                    [8, 14]
                ]
            },
            'p': {
                width: 19, points: [
                    [4, 14],
                    [4, -7],
                    [-1, -1],
                    [4, 11],
                    [6, 13],
                    [8, 14],
                    [11, 14],
                    [13, 13],
                    [15, 11],
                    [16, 8],
                    [16, 6],
                    [15, 3],
                    [13, 1],
                    [11, 0],
                    [8, 0],
                    [6, 1],
                    [4, 3]
                ]
            },
            'q': {
                width: 19, points: [
                    [15, 14],
                    [15, -7],
                    [-1, -1],
                    [15, 11],
                    [13, 13],
                    [11, 14],
                    [8, 14],
                    [6, 13],
                    [4, 11],
                    [3, 8],
                    [3, 6],
                    [4, 3],
                    [6, 1],
                    [8, 0],
                    [11, 0],
                    [13, 1],
                    [15, 3]
                ]
            },
            'r': {
                width: 13, points: [
                    [4, 14],
                    [4, 0],
                    [-1, -1],
                    [4, 8],
                    [5, 11],
                    [7, 13],
                    [9, 14],
                    [12, 14]
                ]
            },
            's': {
                width: 17, points: [
                    [14, 11],
                    [13, 13],
                    [10, 14],
                    [7, 14],
                    [4, 13],
                    [3, 11],
                    [4, 9],
                    [6, 8],
                    [11, 7],
                    [13, 6],
                    [14, 4],
                    [14, 3],
                    [13, 1],
                    [10, 0],
                    [7, 0],
                    [4, 1],
                    [3, 3]
                ]
            },
            't': {
                width: 12, points: [
                    [5, 21],
                    [5, 4],
                    [6, 1],
                    [8, 0],
                    [10, 0],
                    [-1, -1],
                    [2, 14],
                    [9, 14]
                ]
            },
            'u': {
                width: 19, points: [
                    [4, 14],
                    [4, 4],
                    [5, 1],
                    [7, 0],
                    [10, 0],
                    [12, 1],
                    [15, 4],
                    [-1, -1],
                    [15, 14],
                    [15, 0]
                ]
            },
            'v': {
                width: 16, points: [
                    [2, 14],
                    [8, 0],
                    [-1, -1],
                    [14, 14],
                    [8, 0]
                ]
            },
            'w': {
                width: 22, points: [
                    [3, 14],
                    [7, 0],
                    [-1, -1],
                    [11, 14],
                    [7, 0],
                    [-1, -1],
                    [11, 14],
                    [15, 0],
                    [-1, -1],
                    [19, 14],
                    [15, 0]
                ]
            },
            'x': {
                width: 17, points: [
                    [3, 14],
                    [14, 0],
                    [-1, -1],
                    [14, 14],
                    [3, 0]
                ]
            },
            'y': {
                width: 16, points: [
                    [2, 14],
                    [8, 0],
                    [-1, -1],
                    [14, 14],
                    [8, 0],
                    [6, -4],
                    [4, -6],
                    [2, -7],
                    [1, -7]
                ]
            },
            'z': {
                width: 17, points: [
                    [14, 14],
                    [3, 0],
                    [-1, -1],
                    [3, 14],
                    [14, 14],
                    [-1, -1],
                    [3, 0],
                    [14, 0]
                ]
            },
            '{': {
                width: 14, points: [
                    [9, 25],
                    [7, 24],
                    [6, 23],
                    [5, 21],
                    [5, 19],
                    [6, 17],
                    [7, 16],
                    [8, 14],
                    [8, 12],
                    [6, 10],
                    [-1, -1],
                    [7, 24],
                    [6, 22],
                    [6, 20],
                    [7, 18],
                    [8, 17],
                    [9, 15],
                    [9, 13],
                    [8, 11],
                    [4, 9],
                    [8, 7],
                    [9, 5],
                    [9, 3],
                    [8, 1],
                    [7, 0],
                    [6, -2],
                    [6, -4],
                    [7, -6],
                    [-1, -1],
                    [6, 8],
                    [8, 6],
                    [8, 4],
                    [7, 2],
                    [6, 1],
                    [5, -1],
                    [5, -3],
                    [6, -5],
                    [7, -6],
                    [9, -7]
                ]
            },
            '|': {
                width: 8, points: [
                    [4, 25],
                    [4, -7]
                ]
            },
            '}': {
                width: 14, points: [
                    [5, 25],
                    [7, 24],
                    [8, 23],
                    [9, 21],
                    [9, 19],
                    [8, 17],
                    [7, 16],
                    [6, 14],
                    [6, 12],
                    [8, 10],
                    [-1, -1],
                    [7, 24],
                    [8, 22],
                    [8, 20],
                    [7, 18],
                    [6, 17],
                    [5, 15],
                    [5, 13],
                    [6, 11],
                    [10, 9],
                    [6, 7],
                    [5, 5],
                    [5, 3],
                    [6, 1],
                    [7, 0],
                    [8, -2],
                    [8, -4],
                    [7, -6],
                    [-1, -1],
                    [8, 8],
                    [6, 6],
                    [6, 4],
                    [7, 2],
                    [8, 1],
                    [9, -1],
                    [9, -3],
                    [8, -5],
                    [7, -6],
                    [5, -7]
                ]
            },
            '~': {
                width: 24, points: [
                    [3, 6],
                    [3, 8],
                    [4, 11],
                    [6, 12],
                    [8, 12],
                    [10, 11],
                    [14, 8],
                    [16, 7],
                    [18, 7],
                    [20, 8],
                    [21, 10],
                    [-1, -1],
                    [3, 8],
                    [4, 10],
                    [6, 11],
                    [8, 11],
                    [10, 10],
                    [14, 7],
                    [16, 6],
                    [18, 6],
                    [20, 7],
                    [21, 10],
                    [21, 12]
                ]
            }
        };
    }
}