scenejs_on_rails 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/app/controllers/scenejs_controller.rb +53 -0
  4. data/app/views/scenejs/get_scenejs_data.html.erb +3 -0
  5. data/lib/scenejs_on_rails.rb +1 -1
  6. data/lib/scenejs_on_rails/rails.rb +5 -0
  7. data/lib/scenejs_on_rails/version.rb +1 -1
  8. data/vendor/assets/javascripts/scenejs.js +17307 -0
  9. data/vendor/assets/javascripts/scenejs_extras/gui.js +478 -0
  10. data/vendor/assets/javascripts/scenejs_extras/gui/README.md +4 -0
  11. data/vendor/assets/javascripts/scenejs_extras/gui/dat.gui.min.js +94 -0
  12. data/vendor/assets/javascripts/scenejs_extras/gui/gui.js +385 -0
  13. data/vendor/assets/javascripts/scenejs_lib/cityBuilder.js +457 -0
  14. data/vendor/assets/javascripts/scenejs_lib/dat.gui.min.js +94 -0
  15. data/vendor/assets/javascripts/scenejs_lib/gl-matrix-min.js +28 -0
  16. data/vendor/assets/javascripts/scenejs_lib/gl-matrix.js +4078 -0
  17. data/vendor/assets/javascripts/scenejs_lib/require.js +36 -0
  18. data/vendor/assets/javascripts/scenejs_lib/requireConfig.js +18 -0
  19. data/vendor/assets/javascripts/scenejs_lib/requireWrapperEnd.js +1 -0
  20. data/vendor/assets/javascripts/scenejs_lib/requireWrapperStart.js +2 -0
  21. data/vendor/assets/javascripts/scenejs_lib/stats.min.js +6 -0
  22. data/vendor/assets/javascripts/scenejs_lib/sylvester.js +1 -0
  23. data/vendor/assets/javascripts/scenejs_lib/webgl-debug-utils.js +839 -0
  24. data/vendor/assets/javascripts/scenejs_plugins/geometry/boundary.js +59 -0
  25. data/vendor/assets/javascripts/scenejs_plugins/geometry/box.js +72 -0
  26. data/vendor/assets/javascripts/scenejs_plugins/geometry/plane.js +126 -0
  27. data/vendor/assets/javascripts/scenejs_plugins/geometry/quad.js +37 -0
  28. data/vendor/assets/javascripts/scenejs_plugins/geometry/skybox.js +86 -0
  29. data/vendor/assets/javascripts/scenejs_plugins/geometry/sphere.js +82 -0
  30. data/vendor/assets/javascripts/scenejs_plugins/geometry/teapot.js +5853 -0
  31. data/vendor/assets/javascripts/scenejs_plugins/geometry/torus.js +139 -0
  32. data/vendor/assets/javascripts/scenejs_plugins/geometry/vectorText.js +1499 -0
  33. data/vendor/assets/javascripts/scenejs_plugins/geometry/wobblyBox.js +44 -0
  34. data/vendor/assets/javascripts/scenejs_plugins/lib/canvas2image.js +198 -0
  35. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullEngine.js +810 -0
  36. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullSystem.js +185 -0
  37. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullSystemPool.js +174 -0
  38. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullWorker.js +142 -0
  39. data/vendor/assets/javascripts/scenejs_plugins/lib/gl-matrix-min.js +28 -0
  40. data/vendor/assets/javascripts/scenejs_plugins/lib/jquery-1.8.3.min.js +2 -0
  41. data/vendor/assets/javascripts/scenejs_plugins/lib/k3d.js +1029 -0
  42. data/vendor/assets/javascripts/scenejs_plugins/lib/physics/jiglib.all.min.js +3 -0
  43. data/vendor/assets/javascripts/scenejs_plugins/lib/physics/physics.js +223 -0
  44. data/vendor/assets/javascripts/scenejs_plugins/lib/physics/worker.js +330 -0
  45. data/vendor/assets/javascripts/scenejs_plugins/node/alpha/orbitTracking.js +295 -0
  46. data/vendor/assets/javascripts/scenejs_plugins/node/alpha/orbitTrackingTarget.js +43 -0
  47. data/vendor/assets/javascripts/scenejs_plugins/node/backgrounds/gradient.js +148 -0
  48. data/vendor/assets/javascripts/scenejs_plugins/node/cameras/orbit.js +172 -0
  49. data/vendor/assets/javascripts/scenejs_plugins/node/cameras/pickFlyOrbit.js +409 -0
  50. data/vendor/assets/javascripts/scenejs_plugins/node/canvas/capture.js +107 -0
  51. data/vendor/assets/javascripts/scenejs_plugins/node/demos/color.js +30 -0
  52. data/vendor/assets/javascripts/scenejs_plugins/node/demos/redTeapot.js +52 -0
  53. data/vendor/assets/javascripts/scenejs_plugins/node/demos/spinningTeapot.js +43 -0
  54. data/vendor/assets/javascripts/scenejs_plugins/node/effects/crt.js +36 -0
  55. data/vendor/assets/javascripts/scenejs_plugins/node/effects/fog.js +159 -0
  56. data/vendor/assets/javascripts/scenejs_plugins/node/effects/snowyPeaks.js +50 -0
  57. data/vendor/assets/javascripts/scenejs_plugins/node/effects/wobble.js +42 -0
  58. data/vendor/assets/javascripts/scenejs_plugins/node/effects/xray.js +126 -0
  59. data/vendor/assets/javascripts/scenejs_plugins/node/frustum/body.js +112 -0
  60. data/vendor/assets/javascripts/scenejs_plugins/node/frustum/cull.js +42 -0
  61. data/vendor/assets/javascripts/scenejs_plugins/node/frustum/lod.js +125 -0
  62. data/vendor/assets/javascripts/scenejs_plugins/node/heightmaps/custom.js +185 -0
  63. data/vendor/assets/javascripts/scenejs_plugins/node/import/3ds.js +91 -0
  64. data/vendor/assets/javascripts/scenejs_plugins/node/import/md2.js +139 -0
  65. data/vendor/assets/javascripts/scenejs_plugins/node/import/obj.js +100 -0
  66. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building.js +352 -0
  67. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/HighRiseGlass.jpg +0 -0
  68. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/HighRiseGlassSpecular.jpg +0 -0
  69. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/highrise-windows.jpg +0 -0
  70. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/pixelcity_windows7.jpg +0 -0
  71. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/city.js +26 -0
  72. data/vendor/assets/javascripts/scenejs_plugins/node/objects/plants/ghostTree.js +387 -0
  73. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth.js +168 -0
  74. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth-lights.gif +0 -0
  75. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth-specular.gif +0 -0
  76. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth-specular.jpg +0 -0
  77. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth.jpg +0 -0
  78. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earthbump.jpg +0 -0
  79. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earthclouds.jpg +0 -0
  80. data/vendor/assets/javascripts/scenejs_plugins/node/objects/toys/drinkingBird.js +632 -0
  81. data/vendor/assets/javascripts/scenejs_plugins/node/objects/vehicles/tank.js +77670 -0
  82. data/vendor/assets/javascripts/scenejs_plugins/node/objects/vehicles/tank.js~ +77636 -0
  83. data/vendor/assets/javascripts/scenejs_plugins/node/physics/body.js +85 -0
  84. data/vendor/assets/javascripts/scenejs_plugins/node/physics/box.js +30 -0
  85. data/vendor/assets/javascripts/scenejs_plugins/node/physics/material.js +35 -0
  86. data/vendor/assets/javascripts/scenejs_plugins/node/physics/plane.js +47 -0
  87. data/vendor/assets/javascripts/scenejs_plugins/node/physics/sphere.js +32 -0
  88. data/vendor/assets/javascripts/scenejs_plugins/node/physics/system.js +44 -0
  89. data/vendor/assets/javascripts/scenejs_plugins/node/physics/teapot.js +29 -0
  90. data/vendor/assets/javascripts/scenejs_plugins/node/prims/boundary.js +73 -0
  91. data/vendor/assets/javascripts/scenejs_plugins/node/prims/box.js +87 -0
  92. data/vendor/assets/javascripts/scenejs_plugins/node/prims/cylinder.js +186 -0
  93. data/vendor/assets/javascripts/scenejs_plugins/node/prims/grid.js +47 -0
  94. data/vendor/assets/javascripts/scenejs_plugins/node/prims/plane.js +137 -0
  95. data/vendor/assets/javascripts/scenejs_plugins/node/prims/quad.js +43 -0
  96. data/vendor/assets/javascripts/scenejs_plugins/node/prims/sphere.js +107 -0
  97. data/vendor/assets/javascripts/scenejs_plugins/node/prims/teapot.js +5846 -0
  98. data/vendor/assets/javascripts/scenejs_plugins/node/prims/torus.js +149 -0
  99. data/vendor/assets/javascripts/scenejs_plugins/node/prims/vectorText.js +1508 -0
  100. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/clouds.js +19 -0
  101. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/cloudySea.js +19 -0
  102. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/custom.js +150 -0
  103. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/grimmNight.js +19 -0
  104. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/interstellarClouds.js +19 -0
  105. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/miramarClouds.js +19 -0
  106. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/stormyDays.js +19 -0
  107. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/clouds.jpg +0 -0
  108. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/cloudySea.jpg +0 -0
  109. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/grimmNight.jpg +0 -0
  110. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/interstellarClouds.jpg +0 -0
  111. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/miramarClouds.jpg +0 -0
  112. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/stormyDays.jpg +0 -0
  113. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/violentDays.jpg +0 -0
  114. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/violentDays.js +19 -0
  115. data/vendor/assets/javascripts/scenejs_plugins/texture/image.js +67 -0
  116. data/vendor/assets/javascripts/scenejs_plugins/texture/video.js +105 -0
  117. metadata +113 -1
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Torus geometry node type
3
+ *
4
+ * Usage example:
5
+ *
6
+ * someNode.addNode({
7
+ * type: "prims/torus",
8
+ *
9
+ * wire: false // Default
10
+ * });
11
+ */
12
+ (function () {
13
+
14
+ SceneJS.Types.addType("prims/torus", {
15
+
16
+ construct:function (params) {
17
+ this.addNode(build.call(this, params));
18
+ }
19
+ });
20
+
21
+ function build(params) {
22
+
23
+ var radius = params.radius || 1;
24
+ var tube = params.tube || 0.3;
25
+ var segmentsR = params.segmentsR || 32;
26
+ var segmentsT = params.segmentsT || 24;
27
+ var arc = params.arc || Math.PI * 2;
28
+
29
+ var coreId = "prims/torus_" + (params.wire == true ? "wire_" : "") + radius + "_" + tube + "_" + segmentsR + "_" + segmentsT + "_" + arc;
30
+
31
+ // If a node core already exists for a prim with the given properties,
32
+ // then for efficiency we'll share that core rather than create another geometry
33
+ if (this.getScene().hasCore("geometry", coreId)) {
34
+ return {
35
+ type: "geometry",
36
+ coreId:coreId
37
+ };
38
+ }
39
+
40
+ // Otherwise, create a new geometry
41
+
42
+ var positions = [];
43
+ var normals = [];
44
+ var uvs = [];
45
+ var indices = [];
46
+
47
+ var u;
48
+ var v;
49
+ var centerX;
50
+ var centerY;
51
+ var centerZ = 0;
52
+ var x;
53
+ var y;
54
+ var z;
55
+ var vec;
56
+
57
+ for (var j = 0; j <= segmentsR; j++) {
58
+ for (var i = 0; i <= segmentsT; i++) {
59
+
60
+ u = i / segmentsT * arc;
61
+ v = j / segmentsR * Math.PI * 2;
62
+
63
+ centerX = radius * Math.cos(u);
64
+ centerY = radius * Math.sin(u);
65
+
66
+ x = (radius + tube * Math.cos(v) ) * Math.cos(u);
67
+ y = (radius + tube * Math.cos(v) ) * Math.sin(u);
68
+ z = tube * Math.sin(v);
69
+
70
+ positions.push(x);
71
+ positions.push(y);
72
+ positions.push(z);
73
+
74
+ uvs.push(i / segmentsT);
75
+ uvs.push(1 - j / segmentsR);
76
+
77
+ vec = normalize(sub([x, y, z], [centerX, centerY, centerZ], []), []);
78
+
79
+ normals.push(vec[0]);
80
+ normals.push(vec[1]);
81
+ normals.push(vec[2]);
82
+ }
83
+ }
84
+
85
+ var a;
86
+ var b;
87
+ var c;
88
+ var d;
89
+
90
+ for (var j = 1; j <= segmentsR; j++) {
91
+ for (var i = 1; i <= segmentsT; i++) {
92
+
93
+ a = ( segmentsT + 1 ) * j + i - 1;
94
+ b = ( segmentsT + 1 ) * ( j - 1 ) + i - 1;
95
+ c = ( segmentsT + 1 ) * ( j - 1 ) + i;
96
+ d = ( segmentsT + 1 ) * j + i;
97
+
98
+ indices.push(a);
99
+ indices.push(b);
100
+ indices.push(c);
101
+
102
+ indices.push(c);
103
+ indices.push(d);
104
+ indices.push(a);
105
+ }
106
+ }
107
+
108
+ return {
109
+ type: "geometry",
110
+ primitive:params.wire ? "lines" : "triangles",
111
+ coreId:coreId,
112
+ positions:new Float32Array(positions),
113
+ normals:new Float32Array(normals),
114
+ uv:new Float32Array(uvs),
115
+ indices:new Uint16Array(indices)
116
+ };
117
+ }
118
+
119
+ function normalize(v, dest) {
120
+ var f = 1.0 / len(v);
121
+ return mul(v, f, dest);
122
+ }
123
+
124
+ function len(v) {
125
+ return Math.sqrt(sqLen(v));
126
+ }
127
+
128
+ function sqLen(v) {
129
+ return dot(v, v);
130
+ }
131
+
132
+ function dot(u, v) {
133
+ return (u[0] * v[0] + u[1] * v[1] + u[2] * v[2]);
134
+ }
135
+
136
+ function mul(v, s, dest) {
137
+ dest[0] = v[0] * s;
138
+ dest[1] = v[1] * s;
139
+ dest[2] = v[2] * s;
140
+ return dest;
141
+ }
142
+
143
+ function sub(u, v, dest) {
144
+ dest[0] = u[0] - v[0];
145
+ dest[1] = u[1] - v[1];
146
+ dest[2] = u[2] - v[2];
147
+ return dest;
148
+ }
149
+ })();
@@ -0,0 +1,1508 @@
1
+ /**
2
+ * Vector text node type
3
+ *
4
+ * Usage example:
5
+ *
6
+ * someNode.addNode({
7
+ * type: "prims/vectorText",
8
+ * text: "Fiery the angels fell, deep thunder rolled around their shores, burning with the fires of Ork.",
9
+ * xPos: 10,
10
+ * yPos: -20,
11
+ * size: 1.5
12
+ * });
13
+ */
14
+ (function () {
15
+
16
+ SceneJS.Types.addType("prims/vectorText", {
17
+ construct:function (params) {
18
+ this.addNode(buildText.call(this, params));
19
+ }
20
+ });
21
+
22
+ // Letter stroke data, initialised below
23
+ var letters;
24
+
25
+ function buildText(params) {
26
+
27
+ if (!letters) {
28
+ letters = buildStrokeData();
29
+ }
30
+
31
+ var positions = [];
32
+ var indices = [];
33
+ var lines = params.text ? params.text.split("\n") : [];
34
+ var countVerts = 0;
35
+ var y = params.yPos || 0;
36
+ var x;
37
+ var str;
38
+ var len;
39
+ var c;
40
+ var mag = (params.size || 1) / 25.0;
41
+ var penUp;
42
+ var p1;
43
+ var p2;
44
+ var needLine;
45
+ var pointsLen;
46
+ var a;
47
+
48
+ for (var iLine = 0; iLine < lines.length; iLine++) {
49
+
50
+ x = params.xPos || 0;
51
+ str = lines[iLine];
52
+ len = str.length;
53
+
54
+ for (var i = 0; i < len; i++) {
55
+
56
+ c = letters[str.charAt(i)];
57
+
58
+ if (c == '\n') {
59
+ //alert("newline");
60
+ }
61
+
62
+ if (!c) {
63
+ continue;
64
+ }
65
+
66
+ penUp = 1;
67
+ p1 = -1;
68
+ p2 = -1;
69
+ needLine = false;
70
+
71
+ pointsLen = c.points.length;
72
+
73
+ for (var j = 0; j < pointsLen; j++) {
74
+ a = c.points[j];
75
+
76
+ if (a[0] == -1 && a[1] == -1) {
77
+ penUp = 1;
78
+ needLine = false;
79
+ continue;
80
+ }
81
+
82
+ positions.push(x + a[0] * mag);
83
+ positions.push(y + a[1] * mag);
84
+ positions.push(0);
85
+
86
+ if (p1 == -1) {
87
+ p1 = countVerts;
88
+ } else if (p2 == -1) {
89
+ p2 = countVerts;
90
+ } else {
91
+ p1 = p2;
92
+ p2 = countVerts;
93
+ }
94
+ countVerts++;
95
+
96
+ if (penUp) {
97
+ penUp = false;
98
+
99
+ } else {
100
+ indices.push(p1);
101
+ indices.push(p2);
102
+ }
103
+
104
+ needLine = true;
105
+ }
106
+ x += c.width * mag;
107
+
108
+ }
109
+ y += 25 * mag;
110
+ }
111
+
112
+ return {
113
+ type:"geometry",
114
+ primitive:"lines",
115
+ positions:new Float32Array(positions),
116
+ indices:new Uint16Array(indices)
117
+ };
118
+ }
119
+
120
+ function buildStrokeData() {
121
+ return {
122
+ ' ':{ width:16, points:[] },
123
+ '!':{ width:10, points:[
124
+ [5, 21],
125
+ [5, 7],
126
+ [-1, -1],
127
+ [5, 2],
128
+ [4, 1],
129
+ [5, 0],
130
+ [6, 1],
131
+ [5, 2]
132
+ ] },
133
+ '"':{ width:16, points:[
134
+ [4, 21],
135
+ [4, 14],
136
+ [-1, -1],
137
+ [12, 21],
138
+ [12, 14]
139
+ ] },
140
+ '#':{ width:21, points:[
141
+ [11, 25],
142
+ [4, -7],
143
+ [-1, -1],
144
+ [17, 25],
145
+ [10, -7],
146
+ [-1, -1],
147
+ [4, 12],
148
+ [18, 12],
149
+ [-1, -1],
150
+ [3, 6],
151
+ [17, 6]
152
+ ] },
153
+ '$':{ width:20, points:[
154
+ [8, 25],
155
+ [8, -4],
156
+ [-1, -1],
157
+ [12, 25],
158
+ [12, -4],
159
+ [-1, -1],
160
+ [17, 18],
161
+ [15, 20],
162
+ [12, 21],
163
+ [8, 21],
164
+ [5, 20],
165
+ [3, 18],
166
+ [3, 16],
167
+ [4, 14],
168
+ [5, 13],
169
+ [7, 12],
170
+ [13, 10],
171
+ [15, 9],
172
+ [16, 8],
173
+ [17, 6],
174
+ [17, 3],
175
+ [15, 1],
176
+ [12, 0],
177
+ [8, 0],
178
+ [5, 1],
179
+ [3, 3]
180
+ ] },
181
+ '%':{ width:24, points:[
182
+ [21, 21],
183
+ [3, 0],
184
+ [-1, -1],
185
+ [8, 21],
186
+ [10, 19],
187
+ [10, 17],
188
+ [9, 15],
189
+ [7, 14],
190
+ [5, 14],
191
+ [3, 16],
192
+ [3, 18],
193
+ [4, 20],
194
+ [6, 21],
195
+ [8, 21],
196
+ [10, 20],
197
+ [13, 19],
198
+ [16, 19],
199
+ [19, 20],
200
+ [21, 21],
201
+ [-1, -1],
202
+ [17, 7],
203
+ [15, 6],
204
+ [14, 4],
205
+ [14, 2],
206
+ [16, 0],
207
+ [18, 0],
208
+ [20, 1],
209
+ [21, 3],
210
+ [21, 5],
211
+ [19, 7],
212
+ [17, 7]
213
+ ] },
214
+ '&':{ width:26, points:[
215
+ [23, 12],
216
+ [23, 13],
217
+ [22, 14],
218
+ [21, 14],
219
+ [20, 13],
220
+ [19, 11],
221
+ [17, 6],
222
+ [15, 3],
223
+ [13, 1],
224
+ [11, 0],
225
+ [7, 0],
226
+ [5, 1],
227
+ [4, 2],
228
+ [3, 4],
229
+ [3, 6],
230
+ [4, 8],
231
+ [5, 9],
232
+ [12, 13],
233
+ [13, 14],
234
+ [14, 16],
235
+ [14, 18],
236
+ [13, 20],
237
+ [11, 21],
238
+ [9, 20],
239
+ [8, 18],
240
+ [8, 16],
241
+ [9, 13],
242
+ [11, 10],
243
+ [16, 3],
244
+ [18, 1],
245
+ [20, 0],
246
+ [22, 0],
247
+ [23, 1],
248
+ [23, 2]
249
+ ] },
250
+ '\'':{ width:10, points:[
251
+ [5, 19],
252
+ [4, 20],
253
+ [5, 21],
254
+ [6, 20],
255
+ [6, 18],
256
+ [5, 16],
257
+ [4, 15]
258
+ ] },
259
+ '(':{ width:14, points:[
260
+ [11, 25],
261
+ [9, 23],
262
+ [7, 20],
263
+ [5, 16],
264
+ [4, 11],
265
+ [4, 7],
266
+ [5, 2],
267
+ [7, -2],
268
+ [9, -5],
269
+ [11, -7]
270
+ ] },
271
+ ')':{ width:14, points:[
272
+ [3, 25],
273
+ [5, 23],
274
+ [7, 20],
275
+ [9, 16],
276
+ [10, 11],
277
+ [10, 7],
278
+ [9, 2],
279
+ [7, -2],
280
+ [5, -5],
281
+ [3, -7]
282
+ ] },
283
+ '*':{ width:16, points:[
284
+ [8, 21],
285
+ [8, 9],
286
+ [-1, -1],
287
+ [3, 18],
288
+ [13, 12],
289
+ [-1, -1],
290
+ [13, 18],
291
+ [3, 12]
292
+ ] },
293
+ '+':{ width:26, points:[
294
+ [13, 18],
295
+ [13, 0],
296
+ [-1, -1],
297
+ [4, 9],
298
+ [22, 9]
299
+ ] },
300
+ ',':{ width:10, points:[
301
+ [6, 1],
302
+ [5, 0],
303
+ [4, 1],
304
+ [5, 2],
305
+ [6, 1],
306
+ [6, -1],
307
+ [5, -3],
308
+ [4, -4]
309
+ ] },
310
+ '-':{ width:26, points:[
311
+ [4, 9],
312
+ [22, 9]
313
+ ] },
314
+ '.':{ width:10, points:[
315
+ [5, 2],
316
+ [4, 1],
317
+ [5, 0],
318
+ [6, 1],
319
+ [5, 2]
320
+ ] },
321
+ '/':{ width:22, points:[
322
+ [20, 25],
323
+ [2, -7]
324
+ ] },
325
+ '0':{ width:20, points:[
326
+ [9, 21],
327
+ [6, 20],
328
+ [4, 17],
329
+ [3, 12],
330
+ [3, 9],
331
+ [4, 4],
332
+ [6, 1],
333
+ [9, 0],
334
+ [11, 0],
335
+ [14, 1],
336
+ [16, 4],
337
+ [17, 9],
338
+ [17, 12],
339
+ [16, 17],
340
+ [14, 20],
341
+ [11, 21],
342
+ [9, 21]
343
+ ] },
344
+ '1':{ width:20, points:[
345
+ [6, 17],
346
+ [8, 18],
347
+ [11, 21],
348
+ [11, 0]
349
+ ] },
350
+ '2':{ width:20, points:[
351
+ [4, 16],
352
+ [4, 17],
353
+ [5, 19],
354
+ [6, 20],
355
+ [8, 21],
356
+ [12, 21],
357
+ [14, 20],
358
+ [15, 19],
359
+ [16, 17],
360
+ [16, 15],
361
+ [15, 13],
362
+ [13, 10],
363
+ [3, 0],
364
+ [17, 0]
365
+ ] },
366
+ '3':{ width:20, points:[
367
+ [5, 21],
368
+ [16, 21],
369
+ [10, 13],
370
+ [13, 13],
371
+ [15, 12],
372
+ [16, 11],
373
+ [17, 8],
374
+ [17, 6],
375
+ [16, 3],
376
+ [14, 1],
377
+ [11, 0],
378
+ [8, 0],
379
+ [5, 1],
380
+ [4, 2],
381
+ [3, 4]
382
+ ] },
383
+ '4':{ width:20, points:[
384
+ [13, 21],
385
+ [3, 7],
386
+ [18, 7],
387
+ [-1, -1],
388
+ [13, 21],
389
+ [13, 0]
390
+ ] },
391
+ '5':{ width:20, points:[
392
+ [15, 21],
393
+ [5, 21],
394
+ [4, 12],
395
+ [5, 13],
396
+ [8, 14],
397
+ [11, 14],
398
+ [14, 13],
399
+ [16, 11],
400
+ [17, 8],
401
+ [17, 6],
402
+ [16, 3],
403
+ [14, 1],
404
+ [11, 0],
405
+ [8, 0],
406
+ [5, 1],
407
+ [4, 2],
408
+ [3, 4]
409
+ ] },
410
+ '6':{ width:20, points:[
411
+ [16, 18],
412
+ [15, 20],
413
+ [12, 21],
414
+ [10, 21],
415
+ [7, 20],
416
+ [5, 17],
417
+ [4, 12],
418
+ [4, 7],
419
+ [5, 3],
420
+ [7, 1],
421
+ [10, 0],
422
+ [11, 0],
423
+ [14, 1],
424
+ [16, 3],
425
+ [17, 6],
426
+ [17, 7],
427
+ [16, 10],
428
+ [14, 12],
429
+ [11, 13],
430
+ [10, 13],
431
+ [7, 12],
432
+ [5, 10],
433
+ [4, 7]
434
+ ] },
435
+ '7':{ width:20, points:[
436
+ [17, 21],
437
+ [7, 0],
438
+ [-1, -1],
439
+ [3, 21],
440
+ [17, 21]
441
+ ] },
442
+ '8':{ width:20, points:[
443
+ [8, 21],
444
+ [5, 20],
445
+ [4, 18],
446
+ [4, 16],
447
+ [5, 14],
448
+ [7, 13],
449
+ [11, 12],
450
+ [14, 11],
451
+ [16, 9],
452
+ [17, 7],
453
+ [17, 4],
454
+ [16, 2],
455
+ [15, 1],
456
+ [12, 0],
457
+ [8, 0],
458
+ [5, 1],
459
+ [4, 2],
460
+ [3, 4],
461
+ [3, 7],
462
+ [4, 9],
463
+ [6, 11],
464
+ [9, 12],
465
+ [13, 13],
466
+ [15, 14],
467
+ [16, 16],
468
+ [16, 18],
469
+ [15, 20],
470
+ [12, 21],
471
+ [8, 21]
472
+ ] },
473
+ '9':{ width:20, points:[
474
+ [16, 14],
475
+ [15, 11],
476
+ [13, 9],
477
+ [10, 8],
478
+ [9, 8],
479
+ [6, 9],
480
+ [4, 11],
481
+ [3, 14],
482
+ [3, 15],
483
+ [4, 18],
484
+ [6, 20],
485
+ [9, 21],
486
+ [10, 21],
487
+ [13, 20],
488
+ [15, 18],
489
+ [16, 14],
490
+ [16, 9],
491
+ [15, 4],
492
+ [13, 1],
493
+ [10, 0],
494
+ [8, 0],
495
+ [5, 1],
496
+ [4, 3]
497
+ ] },
498
+ ':':{ width:10, points:[
499
+ [5, 14],
500
+ [4, 13],
501
+ [5, 12],
502
+ [6, 13],
503
+ [5, 14],
504
+ [-1, -1],
505
+ [5, 2],
506
+ [4, 1],
507
+ [5, 0],
508
+ [6, 1],
509
+ [5, 2]
510
+ ] },
511
+ ';':{ width:10, points:[
512
+ [5, 14],
513
+ [4, 13],
514
+ [5, 12],
515
+ [6, 13],
516
+ [5, 14],
517
+ [-1, -1],
518
+ [6, 1],
519
+ [5, 0],
520
+ [4, 1],
521
+ [5, 2],
522
+ [6, 1],
523
+ [6, -1],
524
+ [5, -3],
525
+ [4, -4]
526
+ ] },
527
+ '<':{ width:24, points:[
528
+ [20, 18],
529
+ [4, 9],
530
+ [20, 0]
531
+ ] },
532
+ '=':{ width:26, points:[
533
+ [4, 12],
534
+ [22, 12],
535
+ [-1, -1],
536
+ [4, 6],
537
+ [22, 6]
538
+ ] },
539
+ '>':{ width:24, points:[
540
+ [4, 18],
541
+ [20, 9],
542
+ [4, 0]
543
+ ] },
544
+ '?':{ width:18, points:[
545
+ [3, 16],
546
+ [3, 17],
547
+ [4, 19],
548
+ [5, 20],
549
+ [7, 21],
550
+ [11, 21],
551
+ [13, 20],
552
+ [14, 19],
553
+ [15, 17],
554
+ [15, 15],
555
+ [14, 13],
556
+ [13, 12],
557
+ [9, 10],
558
+ [9, 7],
559
+ [-1, -1],
560
+ [9, 2],
561
+ [8, 1],
562
+ [9, 0],
563
+ [10, 1],
564
+ [9, 2]
565
+ ] },
566
+ '@':{ width:27, points:[
567
+ [18, 13],
568
+ [17, 15],
569
+ [15, 16],
570
+ [12, 16],
571
+ [10, 15],
572
+ [9, 14],
573
+ [8, 11],
574
+ [8, 8],
575
+ [9, 6],
576
+ [11, 5],
577
+ [14, 5],
578
+ [16, 6],
579
+ [17, 8],
580
+ [-1, -1],
581
+ [12, 16],
582
+ [10, 14],
583
+ [9, 11],
584
+ [9, 8],
585
+ [10, 6],
586
+ [11, 5],
587
+ [-1, -1],
588
+ [18, 16],
589
+ [17, 8],
590
+ [17, 6],
591
+ [19, 5],
592
+ [21, 5],
593
+ [23, 7],
594
+ [24, 10],
595
+ [24, 12],
596
+ [23, 15],
597
+ [22, 17],
598
+ [20, 19],
599
+ [18, 20],
600
+ [15, 21],
601
+ [12, 21],
602
+ [9, 20],
603
+ [7, 19],
604
+ [5, 17],
605
+ [4, 15],
606
+ [3, 12],
607
+ [3, 9],
608
+ [4, 6],
609
+ [5, 4],
610
+ [7, 2],
611
+ [9, 1],
612
+ [12, 0],
613
+ [15, 0],
614
+ [18, 1],
615
+ [20, 2],
616
+ [21, 3],
617
+ [-1, -1],
618
+ [19, 16],
619
+ [18, 8],
620
+ [18, 6],
621
+ [19, 5]
622
+ ] },
623
+ 'A':{ width:18, points:[
624
+ [9, 21],
625
+ [1, 0],
626
+ [-1, -1],
627
+ [9, 21],
628
+ [17, 0],
629
+ [-1, -1],
630
+ [4, 7],
631
+ [14, 7]
632
+ ] },
633
+ 'B':{ width:21, points:[
634
+ [4, 21],
635
+ [4, 0],
636
+ [-1, -1],
637
+ [4, 21],
638
+ [13, 21],
639
+ [16, 20],
640
+ [17, 19],
641
+ [18, 17],
642
+ [18, 15],
643
+ [17, 13],
644
+ [16, 12],
645
+ [13, 11],
646
+ [-1, -1],
647
+ [4, 11],
648
+ [13, 11],
649
+ [16, 10],
650
+ [17, 9],
651
+ [18, 7],
652
+ [18, 4],
653
+ [17, 2],
654
+ [16, 1],
655
+ [13, 0],
656
+ [4, 0]
657
+ ] },
658
+ 'C':{ width:21, points:[
659
+ [18, 16],
660
+ [17, 18],
661
+ [15, 20],
662
+ [13, 21],
663
+ [9, 21],
664
+ [7, 20],
665
+ [5, 18],
666
+ [4, 16],
667
+ [3, 13],
668
+ [3, 8],
669
+ [4, 5],
670
+ [5, 3],
671
+ [7, 1],
672
+ [9, 0],
673
+ [13, 0],
674
+ [15, 1],
675
+ [17, 3],
676
+ [18, 5]
677
+ ] },
678
+ 'D':{ width:21, points:[
679
+ [4, 21],
680
+ [4, 0],
681
+ [-1, -1],
682
+ [4, 21],
683
+ [11, 21],
684
+ [14, 20],
685
+ [16, 18],
686
+ [17, 16],
687
+ [18, 13],
688
+ [18, 8],
689
+ [17, 5],
690
+ [16, 3],
691
+ [14, 1],
692
+ [11, 0],
693
+ [4, 0]
694
+ ] },
695
+ 'E':{ width:19, points:[
696
+ [4, 21],
697
+ [4, 0],
698
+ [-1, -1],
699
+ [4, 21],
700
+ [17, 21],
701
+ [-1, -1],
702
+ [4, 11],
703
+ [12, 11],
704
+ [-1, -1],
705
+ [4, 0],
706
+ [17, 0]
707
+ ] },
708
+ 'F':{ width:18, points:[
709
+ [4, 21],
710
+ [4, 0],
711
+ [-1, -1],
712
+ [4, 21],
713
+ [17, 21],
714
+ [-1, -1],
715
+ [4, 11],
716
+ [12, 11]
717
+ ] },
718
+ 'G':{ width:21, points:[
719
+ [18, 16],
720
+ [17, 18],
721
+ [15, 20],
722
+ [13, 21],
723
+ [9, 21],
724
+ [7, 20],
725
+ [5, 18],
726
+ [4, 16],
727
+ [3, 13],
728
+ [3, 8],
729
+ [4, 5],
730
+ [5, 3],
731
+ [7, 1],
732
+ [9, 0],
733
+ [13, 0],
734
+ [15, 1],
735
+ [17, 3],
736
+ [18, 5],
737
+ [18, 8],
738
+ [-1, -1],
739
+ [13, 8],
740
+ [18, 8]
741
+ ] },
742
+ 'H':{ width:22, points:[
743
+ [4, 21],
744
+ [4, 0],
745
+ [-1, -1],
746
+ [18, 21],
747
+ [18, 0],
748
+ [-1, -1],
749
+ [4, 11],
750
+ [18, 11]
751
+ ] },
752
+ 'I':{ width:8, points:[
753
+ [4, 21],
754
+ [4, 0]
755
+ ] },
756
+ 'J':{ width:16, points:[
757
+ [12, 21],
758
+ [12, 5],
759
+ [11, 2],
760
+ [10, 1],
761
+ [8, 0],
762
+ [6, 0],
763
+ [4, 1],
764
+ [3, 2],
765
+ [2, 5],
766
+ [2, 7]
767
+ ] },
768
+ 'K':{ width:21, points:[
769
+ [4, 21],
770
+ [4, 0],
771
+ [-1, -1],
772
+ [18, 21],
773
+ [4, 7],
774
+ [-1, -1],
775
+ [9, 12],
776
+ [18, 0]
777
+ ] },
778
+ 'L':{ width:17, points:[
779
+ [4, 21],
780
+ [4, 0],
781
+ [-1, -1],
782
+ [4, 0],
783
+ [16, 0]
784
+ ] },
785
+ 'M':{ width:24, points:[
786
+ [4, 21],
787
+ [4, 0],
788
+ [-1, -1],
789
+ [4, 21],
790
+ [12, 0],
791
+ [-1, -1],
792
+ [20, 21],
793
+ [12, 0],
794
+ [-1, -1],
795
+ [20, 21],
796
+ [20, 0]
797
+ ] },
798
+ 'N':{ width:22, points:[
799
+ [4, 21],
800
+ [4, 0],
801
+ [-1, -1],
802
+ [4, 21],
803
+ [18, 0],
804
+ [-1, -1],
805
+ [18, 21],
806
+ [18, 0]
807
+ ] },
808
+ 'O':{ width:22, points:[
809
+ [9, 21],
810
+ [7, 20],
811
+ [5, 18],
812
+ [4, 16],
813
+ [3, 13],
814
+ [3, 8],
815
+ [4, 5],
816
+ [5, 3],
817
+ [7, 1],
818
+ [9, 0],
819
+ [13, 0],
820
+ [15, 1],
821
+ [17, 3],
822
+ [18, 5],
823
+ [19, 8],
824
+ [19, 13],
825
+ [18, 16],
826
+ [17, 18],
827
+ [15, 20],
828
+ [13, 21],
829
+ [9, 21]
830
+ ] },
831
+ 'P':{ width:21, points:[
832
+ [4, 21],
833
+ [4, 0],
834
+ [-1, -1],
835
+ [4, 21],
836
+ [13, 21],
837
+ [16, 20],
838
+ [17, 19],
839
+ [18, 17],
840
+ [18, 14],
841
+ [17, 12],
842
+ [16, 11],
843
+ [13, 10],
844
+ [4, 10]
845
+ ] },
846
+ 'Q':{ width:22, points:[
847
+ [9, 21],
848
+ [7, 20],
849
+ [5, 18],
850
+ [4, 16],
851
+ [3, 13],
852
+ [3, 8],
853
+ [4, 5],
854
+ [5, 3],
855
+ [7, 1],
856
+ [9, 0],
857
+ [13, 0],
858
+ [15, 1],
859
+ [17, 3],
860
+ [18, 5],
861
+ [19, 8],
862
+ [19, 13],
863
+ [18, 16],
864
+ [17, 18],
865
+ [15, 20],
866
+ [13, 21],
867
+ [9, 21],
868
+ [-1, -1],
869
+ [12, 4],
870
+ [18, -2]
871
+ ] },
872
+ 'R':{ width:21, points:[
873
+ [4, 21],
874
+ [4, 0],
875
+ [-1, -1],
876
+ [4, 21],
877
+ [13, 21],
878
+ [16, 20],
879
+ [17, 19],
880
+ [18, 17],
881
+ [18, 15],
882
+ [17, 13],
883
+ [16, 12],
884
+ [13, 11],
885
+ [4, 11],
886
+ [-1, -1],
887
+ [11, 11],
888
+ [18, 0]
889
+ ] },
890
+ 'S':{ width:20, points:[
891
+ [17, 18],
892
+ [15, 20],
893
+ [12, 21],
894
+ [8, 21],
895
+ [5, 20],
896
+ [3, 18],
897
+ [3, 16],
898
+ [4, 14],
899
+ [5, 13],
900
+ [7, 12],
901
+ [13, 10],
902
+ [15, 9],
903
+ [16, 8],
904
+ [17, 6],
905
+ [17, 3],
906
+ [15, 1],
907
+ [12, 0],
908
+ [8, 0],
909
+ [5, 1],
910
+ [3, 3]
911
+ ] },
912
+ 'T':{ width:16, points:[
913
+ [8, 21],
914
+ [8, 0],
915
+ [-1, -1],
916
+ [1, 21],
917
+ [15, 21]
918
+ ] },
919
+ 'U':{ width:22, points:[
920
+ [4, 21],
921
+ [4, 6],
922
+ [5, 3],
923
+ [7, 1],
924
+ [10, 0],
925
+ [12, 0],
926
+ [15, 1],
927
+ [17, 3],
928
+ [18, 6],
929
+ [18, 21]
930
+ ] },
931
+ 'V':{ width:18, points:[
932
+ [1, 21],
933
+ [9, 0],
934
+ [-1, -1],
935
+ [17, 21],
936
+ [9, 0]
937
+ ] },
938
+ 'W':{ width:24, points:[
939
+ [2, 21],
940
+ [7, 0],
941
+ [-1, -1],
942
+ [12, 21],
943
+ [7, 0],
944
+ [-1, -1],
945
+ [12, 21],
946
+ [17, 0],
947
+ [-1, -1],
948
+ [22, 21],
949
+ [17, 0]
950
+ ] },
951
+ 'X':{ width:20, points:[
952
+ [3, 21],
953
+ [17, 0],
954
+ [-1, -1],
955
+ [17, 21],
956
+ [3, 0]
957
+ ] },
958
+ 'Y':{ width:18, points:[
959
+ [1, 21],
960
+ [9, 11],
961
+ [9, 0],
962
+ [-1, -1],
963
+ [17, 21],
964
+ [9, 11]
965
+ ] },
966
+ 'Z':{ width:20, points:[
967
+ [17, 21],
968
+ [3, 0],
969
+ [-1, -1],
970
+ [3, 21],
971
+ [17, 21],
972
+ [-1, -1],
973
+ [3, 0],
974
+ [17, 0]
975
+ ] },
976
+ '[':{ width:14, points:[
977
+ [4, 25],
978
+ [4, -7],
979
+ [-1, -1],
980
+ [5, 25],
981
+ [5, -7],
982
+ [-1, -1],
983
+ [4, 25],
984
+ [11, 25],
985
+ [-1, -1],
986
+ [4, -7],
987
+ [11, -7]
988
+ ] },
989
+ '\\':{ width:14, points:[
990
+ [0, 21],
991
+ [14, -3]
992
+ ] },
993
+ ']':{ width:14, points:[
994
+ [9, 25],
995
+ [9, -7],
996
+ [-1, -1],
997
+ [10, 25],
998
+ [10, -7],
999
+ [-1, -1],
1000
+ [3, 25],
1001
+ [10, 25],
1002
+ [-1, -1],
1003
+ [3, -7],
1004
+ [10, -7]
1005
+ ] },
1006
+ '^':{ width:16, points:[
1007
+ [6, 15],
1008
+ [8, 18],
1009
+ [10, 15],
1010
+ [-1, -1],
1011
+ [3, 12],
1012
+ [8, 17],
1013
+ [13, 12],
1014
+ [-1, -1],
1015
+ [8, 17],
1016
+ [8, 0]
1017
+ ] },
1018
+ '_':{ width:16, points:[
1019
+ [0, -2],
1020
+ [16, -2]
1021
+ ] },
1022
+ '`':{ width:10, points:[
1023
+ [6, 21],
1024
+ [5, 20],
1025
+ [4, 18],
1026
+ [4, 16],
1027
+ [5, 15],
1028
+ [6, 16],
1029
+ [5, 17]
1030
+ ] },
1031
+ 'a':{ width:19, points:[
1032
+ [15, 14],
1033
+ [15, 0],
1034
+ [-1, -1],
1035
+ [15, 11],
1036
+ [13, 13],
1037
+ [11, 14],
1038
+ [8, 14],
1039
+ [6, 13],
1040
+ [4, 11],
1041
+ [3, 8],
1042
+ [3, 6],
1043
+ [4, 3],
1044
+ [6, 1],
1045
+ [8, 0],
1046
+ [11, 0],
1047
+ [13, 1],
1048
+ [15, 3]
1049
+ ] },
1050
+ 'b':{ width:19, points:[
1051
+ [4, 21],
1052
+ [4, 0],
1053
+ [-1, -1],
1054
+ [4, 11],
1055
+ [6, 13],
1056
+ [8, 14],
1057
+ [11, 14],
1058
+ [13, 13],
1059
+ [15, 11],
1060
+ [16, 8],
1061
+ [16, 6],
1062
+ [15, 3],
1063
+ [13, 1],
1064
+ [11, 0],
1065
+ [8, 0],
1066
+ [6, 1],
1067
+ [4, 3]
1068
+ ] },
1069
+ 'c':{ width:18, points:[
1070
+ [15, 11],
1071
+ [13, 13],
1072
+ [11, 14],
1073
+ [8, 14],
1074
+ [6, 13],
1075
+ [4, 11],
1076
+ [3, 8],
1077
+ [3, 6],
1078
+ [4, 3],
1079
+ [6, 1],
1080
+ [8, 0],
1081
+ [11, 0],
1082
+ [13, 1],
1083
+ [15, 3]
1084
+ ] },
1085
+ 'd':{ width:19, points:[
1086
+ [15, 21],
1087
+ [15, 0],
1088
+ [-1, -1],
1089
+ [15, 11],
1090
+ [13, 13],
1091
+ [11, 14],
1092
+ [8, 14],
1093
+ [6, 13],
1094
+ [4, 11],
1095
+ [3, 8],
1096
+ [3, 6],
1097
+ [4, 3],
1098
+ [6, 1],
1099
+ [8, 0],
1100
+ [11, 0],
1101
+ [13, 1],
1102
+ [15, 3]
1103
+ ] },
1104
+ 'e':{ width:18, points:[
1105
+ [3, 8],
1106
+ [15, 8],
1107
+ [15, 10],
1108
+ [14, 12],
1109
+ [13, 13],
1110
+ [11, 14],
1111
+ [8, 14],
1112
+ [6, 13],
1113
+ [4, 11],
1114
+ [3, 8],
1115
+ [3, 6],
1116
+ [4, 3],
1117
+ [6, 1],
1118
+ [8, 0],
1119
+ [11, 0],
1120
+ [13, 1],
1121
+ [15, 3]
1122
+ ] },
1123
+ 'f':{ width:12, points:[
1124
+ [10, 21],
1125
+ [8, 21],
1126
+ [6, 20],
1127
+ [5, 17],
1128
+ [5, 0],
1129
+ [-1, -1],
1130
+ [2, 14],
1131
+ [9, 14]
1132
+ ] },
1133
+ 'g':{ width:19, points:[
1134
+ [15, 14],
1135
+ [15, -2],
1136
+ [14, -5],
1137
+ [13, -6],
1138
+ [11, -7],
1139
+ [8, -7],
1140
+ [6, -6],
1141
+ [-1, -1],
1142
+ [15, 11],
1143
+ [13, 13],
1144
+ [11, 14],
1145
+ [8, 14],
1146
+ [6, 13],
1147
+ [4, 11],
1148
+ [3, 8],
1149
+ [3, 6],
1150
+ [4, 3],
1151
+ [6, 1],
1152
+ [8, 0],
1153
+ [11, 0],
1154
+ [13, 1],
1155
+ [15, 3]
1156
+ ] },
1157
+ 'h':{ width:19, points:[
1158
+ [4, 21],
1159
+ [4, 0],
1160
+ [-1, -1],
1161
+ [4, 10],
1162
+ [7, 13],
1163
+ [9, 14],
1164
+ [12, 14],
1165
+ [14, 13],
1166
+ [15, 10],
1167
+ [15, 0]
1168
+ ] },
1169
+ 'i':{ width:8, points:[
1170
+ [3, 21],
1171
+ [4, 20],
1172
+ [5, 21],
1173
+ [4, 22],
1174
+ [3, 21],
1175
+ [-1, -1],
1176
+ [4, 14],
1177
+ [4, 0]
1178
+ ] },
1179
+ 'j':{ width:10, points:[
1180
+ [5, 21],
1181
+ [6, 20],
1182
+ [7, 21],
1183
+ [6, 22],
1184
+ [5, 21],
1185
+ [-1, -1],
1186
+ [6, 14],
1187
+ [6, -3],
1188
+ [5, -6],
1189
+ [3, -7],
1190
+ [1, -7]
1191
+ ] },
1192
+ 'k':{ width:17, points:[
1193
+ [4, 21],
1194
+ [4, 0],
1195
+ [-1, -1],
1196
+ [14, 14],
1197
+ [4, 4],
1198
+ [-1, -1],
1199
+ [8, 8],
1200
+ [15, 0]
1201
+ ] },
1202
+ 'l':{ width:8, points:[
1203
+ [4, 21],
1204
+ [4, 0]
1205
+ ] },
1206
+ 'm':{ width:30, points:[
1207
+ [4, 14],
1208
+ [4, 0],
1209
+ [-1, -1],
1210
+ [4, 10],
1211
+ [7, 13],
1212
+ [9, 14],
1213
+ [12, 14],
1214
+ [14, 13],
1215
+ [15, 10],
1216
+ [15, 0],
1217
+ [-1, -1],
1218
+ [15, 10],
1219
+ [18, 13],
1220
+ [20, 14],
1221
+ [23, 14],
1222
+ [25, 13],
1223
+ [26, 10],
1224
+ [26, 0]
1225
+ ] },
1226
+ 'n':{ width:19, points:[
1227
+ [4, 14],
1228
+ [4, 0],
1229
+ [-1, -1],
1230
+ [4, 10],
1231
+ [7, 13],
1232
+ [9, 14],
1233
+ [12, 14],
1234
+ [14, 13],
1235
+ [15, 10],
1236
+ [15, 0]
1237
+ ] },
1238
+ 'o':{ width:19, points:[
1239
+ [8, 14],
1240
+ [6, 13],
1241
+ [4, 11],
1242
+ [3, 8],
1243
+ [3, 6],
1244
+ [4, 3],
1245
+ [6, 1],
1246
+ [8, 0],
1247
+ [11, 0],
1248
+ [13, 1],
1249
+ [15, 3],
1250
+ [16, 6],
1251
+ [16, 8],
1252
+ [15, 11],
1253
+ [13, 13],
1254
+ [11, 14],
1255
+ [8, 14]
1256
+ ] },
1257
+ 'p':{ width:19, points:[
1258
+ [4, 14],
1259
+ [4, -7],
1260
+ [-1, -1],
1261
+ [4, 11],
1262
+ [6, 13],
1263
+ [8, 14],
1264
+ [11, 14],
1265
+ [13, 13],
1266
+ [15, 11],
1267
+ [16, 8],
1268
+ [16, 6],
1269
+ [15, 3],
1270
+ [13, 1],
1271
+ [11, 0],
1272
+ [8, 0],
1273
+ [6, 1],
1274
+ [4, 3]
1275
+ ] },
1276
+ 'q':{ width:19, points:[
1277
+ [15, 14],
1278
+ [15, -7],
1279
+ [-1, -1],
1280
+ [15, 11],
1281
+ [13, 13],
1282
+ [11, 14],
1283
+ [8, 14],
1284
+ [6, 13],
1285
+ [4, 11],
1286
+ [3, 8],
1287
+ [3, 6],
1288
+ [4, 3],
1289
+ [6, 1],
1290
+ [8, 0],
1291
+ [11, 0],
1292
+ [13, 1],
1293
+ [15, 3]
1294
+ ] },
1295
+ 'r':{ width:13, points:[
1296
+ [4, 14],
1297
+ [4, 0],
1298
+ [-1, -1],
1299
+ [4, 8],
1300
+ [5, 11],
1301
+ [7, 13],
1302
+ [9, 14],
1303
+ [12, 14]
1304
+ ] },
1305
+ 's':{ width:17, points:[
1306
+ [14, 11],
1307
+ [13, 13],
1308
+ [10, 14],
1309
+ [7, 14],
1310
+ [4, 13],
1311
+ [3, 11],
1312
+ [4, 9],
1313
+ [6, 8],
1314
+ [11, 7],
1315
+ [13, 6],
1316
+ [14, 4],
1317
+ [14, 3],
1318
+ [13, 1],
1319
+ [10, 0],
1320
+ [7, 0],
1321
+ [4, 1],
1322
+ [3, 3]
1323
+ ] },
1324
+ 't':{ width:12, points:[
1325
+ [5, 21],
1326
+ [5, 4],
1327
+ [6, 1],
1328
+ [8, 0],
1329
+ [10, 0],
1330
+ [-1, -1],
1331
+ [2, 14],
1332
+ [9, 14]
1333
+ ] },
1334
+ 'u':{ width:19, points:[
1335
+ [4, 14],
1336
+ [4, 4],
1337
+ [5, 1],
1338
+ [7, 0],
1339
+ [10, 0],
1340
+ [12, 1],
1341
+ [15, 4],
1342
+ [-1, -1],
1343
+ [15, 14],
1344
+ [15, 0]
1345
+ ] },
1346
+ 'v':{ width:16, points:[
1347
+ [2, 14],
1348
+ [8, 0],
1349
+ [-1, -1],
1350
+ [14, 14],
1351
+ [8, 0]
1352
+ ] },
1353
+ 'w':{ width:22, points:[
1354
+ [3, 14],
1355
+ [7, 0],
1356
+ [-1, -1],
1357
+ [11, 14],
1358
+ [7, 0],
1359
+ [-1, -1],
1360
+ [11, 14],
1361
+ [15, 0],
1362
+ [-1, -1],
1363
+ [19, 14],
1364
+ [15, 0]
1365
+ ] },
1366
+ 'x':{ width:17, points:[
1367
+ [3, 14],
1368
+ [14, 0],
1369
+ [-1, -1],
1370
+ [14, 14],
1371
+ [3, 0]
1372
+ ] },
1373
+ 'y':{ width:16, points:[
1374
+ [2, 14],
1375
+ [8, 0],
1376
+ [-1, -1],
1377
+ [14, 14],
1378
+ [8, 0],
1379
+ [6, -4],
1380
+ [4, -6],
1381
+ [2, -7],
1382
+ [1, -7]
1383
+ ] },
1384
+ 'z':{ width:17, points:[
1385
+ [14, 14],
1386
+ [3, 0],
1387
+ [-1, -1],
1388
+ [3, 14],
1389
+ [14, 14],
1390
+ [-1, -1],
1391
+ [3, 0],
1392
+ [14, 0]
1393
+ ] },
1394
+ '{':{ width:14, points:[
1395
+ [9, 25],
1396
+ [7, 24],
1397
+ [6, 23],
1398
+ [5, 21],
1399
+ [5, 19],
1400
+ [6, 17],
1401
+ [7, 16],
1402
+ [8, 14],
1403
+ [8, 12],
1404
+ [6, 10],
1405
+ [-1, -1],
1406
+ [7, 24],
1407
+ [6, 22],
1408
+ [6, 20],
1409
+ [7, 18],
1410
+ [8, 17],
1411
+ [9, 15],
1412
+ [9, 13],
1413
+ [8, 11],
1414
+ [4, 9],
1415
+ [8, 7],
1416
+ [9, 5],
1417
+ [9, 3],
1418
+ [8, 1],
1419
+ [7, 0],
1420
+ [6, -2],
1421
+ [6, -4],
1422
+ [7, -6],
1423
+ [-1, -1],
1424
+ [6, 8],
1425
+ [8, 6],
1426
+ [8, 4],
1427
+ [7, 2],
1428
+ [6, 1],
1429
+ [5, -1],
1430
+ [5, -3],
1431
+ [6, -5],
1432
+ [7, -6],
1433
+ [9, -7]
1434
+ ] },
1435
+ '|':{ width:8, points:[
1436
+ [4, 25],
1437
+ [4, -7]
1438
+ ] },
1439
+ '}':{ width:14, points:[
1440
+ [5, 25],
1441
+ [7, 24],
1442
+ [8, 23],
1443
+ [9, 21],
1444
+ [9, 19],
1445
+ [8, 17],
1446
+ [7, 16],
1447
+ [6, 14],
1448
+ [6, 12],
1449
+ [8, 10],
1450
+ [-1, -1],
1451
+ [7, 24],
1452
+ [8, 22],
1453
+ [8, 20],
1454
+ [7, 18],
1455
+ [6, 17],
1456
+ [5, 15],
1457
+ [5, 13],
1458
+ [6, 11],
1459
+ [10, 9],
1460
+ [6, 7],
1461
+ [5, 5],
1462
+ [5, 3],
1463
+ [6, 1],
1464
+ [7, 0],
1465
+ [8, -2],
1466
+ [8, -4],
1467
+ [7, -6],
1468
+ [-1, -1],
1469
+ [8, 8],
1470
+ [6, 6],
1471
+ [6, 4],
1472
+ [7, 2],
1473
+ [8, 1],
1474
+ [9, -1],
1475
+ [9, -3],
1476
+ [8, -5],
1477
+ [7, -6],
1478
+ [5, -7]
1479
+ ] },
1480
+ '~':{ width:24, points:[
1481
+ [3, 6],
1482
+ [3, 8],
1483
+ [4, 11],
1484
+ [6, 12],
1485
+ [8, 12],
1486
+ [10, 11],
1487
+ [14, 8],
1488
+ [16, 7],
1489
+ [18, 7],
1490
+ [20, 8],
1491
+ [21, 10],
1492
+ [-1, -1],
1493
+ [3, 8],
1494
+ [4, 10],
1495
+ [6, 11],
1496
+ [8, 11],
1497
+ [10, 10],
1498
+ [14, 7],
1499
+ [16, 6],
1500
+ [18, 6],
1501
+ [20, 7],
1502
+ [21, 10],
1503
+ [21, 12]
1504
+ ] }
1505
+ };
1506
+ }
1507
+
1508
+ })();