-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathchar_render.js
More file actions
204 lines (191 loc) · 30 KB
/
char_render.js
File metadata and controls
204 lines (191 loc) · 30 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// array of structs
// each struct contains the character it represents and sequences of coordinates
// text rendering must search the array for the appropriate character
ocrb = {
native_pitch: [ 2.55, 4.5 ], // the "default" spacing of this font (when generated by inkscape for example) has this pitch in X and Y
chars: [
{ ch: "A", cmds: [ [ "M", 0.720774, 1.0893 ], [ "C", 0.08352, 0.35621, -0.064985, -0.252601, 1.10706, 2.5537 ], [ "C", 0.06499, 0.252601, -0.126733, -0.008376, 1.37636, 3.18461 ], [ "C", 0.126733, 0.0084, -0.112602, 0.36681, 1.6891, 2.53159 ], [ "C", 0.112601, -0.36681, -0.098938, 0.391093, 2.08701, 0.982314 ], [ "M", 0.892317, 1.7506 ], [ "C", 0.29209, -0.02676, -0.187457, -0.0084, 1.8566, 1.7545 ] ]},
{ ch: "B", cmds: [ [ "M", 0.685264, 1.05699 ], [ "C", 0.0005557, 0.700705, 0.001264, -0.700703, 0.683864, 3.1591 ], [ "C", 0, -0, -0.274065, -0.0077, 1.37612, 3.1578 ], [ "C", 0.272025, 0.0076, -0.0799409, 0.134787, 1.94901, 2.92809 ], [ "C", 0.07994, -0.134783, 0.215865, 0.235165, 1.90215, 2.31453 ], [ "C", -0.215861, -0.235164, 0, -0, 0.775805, 2.16896 ], [ "C", 0, -0, -0.149425, 0.03929, 1.71257, 2.11643 ], [ "C", 0.149426, -0.03929, 0.0048749, 0.337962, 2.08974, 1.57652 ], [ "C", -0.0049, -0.337962, 0.259093, 0.024812, 1.55978, 1.05272 ], [ "C", -0.259093, -0.02481, 0.262016, -0.00541, 0.678448, 1.04532 ] ]},
{ ch: "C", cmds: [ [ "M", 1.92936, 1.25799 ], [ "C", -0.233174, -0.326322, 0.209803, -0.427267, 0.991504, 1.27802 ], [ "C", -0.210962, 0.429642, -0.196125, -0.43405, 0.974954, 2.84062 ], [ "C", 0.196369, 0.434461, -0.243542, 0.367989, 1.92932, 2.90073 ] ]},
{ ch: "D", cmds: [ [ "M", 0.892922, 3.15077 ], [ "C", 0.149754, -0.002, -0.114051, 0.03621, 1.31318, 3.0792 ], [ "C", 0.114051, -0.03621, -0.161663, 0.1849, 1.72943, 2.79903 ], [ "C", 0.386119, -0.441622, 0.592742, 0.358534, 1.56137, 1.18063 ], [ "C", -0.389171, -0.19477, 0, -0, 0.847986, 1.06149 ], [ "C", 0.021701, 0.705182, -0.02276, -0.620129, 0.867846, 3.13401 ] ]},
{ ch: "E", cmds: [ [ "M", 1.99354, 1.01759 ], [ "C", -0.38093, -0.0024, 0.380606, -0.01536, 0.851397, 1.02975 ], [ "C", 0.0044, 0.775155, -0.0092, -0.72755, 0.857397, 3.13405 ], [ "C", 0, -0, -0.084062, -0, 1.193, 3.14115 ], [ "L", 1.9535, 3.14115 ], [ "M", 0.855782, 2.15616 ], [ "L", 1.83643, 2.15616 ] ]},
{ ch: "F", cmds: [ [ "M", 1.02481, 1.00588 ], [ "C", -0.000318, 0.678812, -0.0103, -0.678741, 1.03181, 3.13408 ], [ "C", 0.311086, 0.01112, -0.311251, -0, 1.96547, 3.14118 ], [ "M", 1.02782, 2.13946 ], [ "L", 1.80502, 2.13946 ] ]},
{ ch: "G", cmds: [ [ "M", 1.48334, 2.01593 ], [ "C", 0.115155, -0, 0, -0, 2.04374, 2.03114 ], [ "C", 0, -0, -0.000806, 0.068413, 2.04534, 1.5634 ], [ "C", 0.0017, -0.172585, 0, -0, 2.04014, 1.13826 ], [ "C", 0, -0, 0.298308, -0.005592, 1.57673, 0.97784 ], [ "C", -0.866869, -0.115194, -0.32415, -0.648466, 0.852451, 2.80057 ], [ "C", 0.308892, 0.534354, -0.345045, 0.315049, 2.00535, 2.98589 ] ]},
{ ch: "H", cmds: [ [ "M", 0.788532, 3.16116 ], [ "L", 0.788532, 1.05766 ], [ "M", 1.98934, 3.14118 ], [ "L", 1.98934, 1.07775 ], [ "M", 0.808249, 2.11942 ], [ "L", 1.96901, 2.11942 ] ]},
{ ch: "I", cmds: [ [ "M", 1.38862, 3.14486 ], [ "L", 1.39392, 1.00801 ], [ "M", 0.983275, 3.15457 ], [ "L", 1.80792, 3.16626 ], [ "M", 0.927778, 1.01754 ], [ "L", 1.82082, 1.01754 ] ]},
{ ch: "J", cmds: [ [ "M", 1.66124, 3.19797 ], [ "C", -0.000344, -0.516655, -0.0057, 0.363663, 1.66454, 2.026 ], [ "C", 0.0045, -0.284816, 0.08502, 0.220737, 1.61366, 1.23798 ], [ "C", -0.104864, -0.272594, 0.216145, -0.185467, 0.912804, 1.08222 ], [ "C", -0.11187, 0.0958, -0.00889, -0.163824, 0.752301, 1.47675 ] ]},
{ ch: "K", cmds: [ [ "M", 2.00471, 3.1812 ], [ "C", -0.230352, -0.230585, 0.229948, 0.230324, 1.14887, 2.33805 ], [ "C", -0.08686, -0.08694, 0, -0, 0.917613, 2.14782 ], [ "C", 0, -0, -0.092666, 0.092802, 1.16557, 1.97097 ], [ "C", 0.248816, -0.290817, -0.257168, 0.257329, 2.08476, 0.997573 ], [ "M", 0.744297, 3.15127 ], [ "L", 0.744297, 1.05438 ] ]},
{ ch: "L", cmds: [ [ "M", 0.776171, 3.19797 ], [ "L", 0.786331, 1.02978 ], [ "L", 2.04533, 1.04267 ] ]},
{ ch: "M", cmds: [ [ "M", 0.683842, 1.03507 ], [ "L", 0.704722, 3.14141 ], [ "L", 0.929043, 3.13731 ], [ "C", 0.166542, -0.417504, -0.150908, 0.427605, 1.38518, 1.88517 ], [ "C", 0.167195, 0.422491, -0.15054, -0.42937, 1.82948, 3.16945 ], [ "L", 2.07555, 3.17475 ], [ "L", 2.10148, 1.03918 ] ]},
{ ch: "N", cmds: [ [ "M", 2.05338, 3.18116 ], [ "L", 2.0396, 1.06926 ], [ "L", 1.91758, 1.07146 ], [ "L", 0.868476, 3.16172 ], [ "L", 0.724669, 3.16612 ], [ "L", 0.731369, 1.05167 ] ]},
{ ch: "O", cmds: [ [ "M", 1.35713, 3.22993 ], [ "C", 0.311798, 0.03757, -0.122672, 0.256524, 1.96728, 2.74045 ], [ "C", 0.184843, -0.483045, 0.702063, 0.075185, 1.43214, 0.983613 ], [ "C", -0.295199, -0.03162, 0.089255, -0.253402, 0.814358, 1.47 ], [ "C", -0.175114, 0.498003, -0.722275, -0.087032, 1.35295, 3.22993 ] ]},
{ ch: "P", cmds: [ [ "M", 0.779777, 1.0037 ], [ "C", 0.0042, 0.717558, -0.0105, -0.717508, 0.775777, 3.16476 ], [ "C", 0, -0, -0.103266, -0, 1.29946, 3.17466 ], [ "C", 0.412078, -0, 0.035822, 0.523419, 2.08306, 2.54025 ], [ "C", -0.0336, -0.491391, 0.379447, -0.000261, 1.21768, 2.06448 ], [ "L", 0.809556, 2.06476 ] ]},
{ ch: "Q", cmds: [ [ "M", 1.27161, 3.21437 ], [ "C", 0.314407, 0.04369, -0.124278, 0.261747, 1.911, 2.74047 ], [ "C", 0.179919, -0.378927, 0.12895, 0.211162, 1.86115, 1.51749 ], [ "C", -0.128956, -0.211161, 0.258168, 0.030612, 1.39586, 1.14368 ], [ "C", -0.287991, -0.03413, 0.077652, -0.259912, 0.784458, 1.59857 ], [ "C", -0.145693, 0.487273, -0.667438, -0.09269, 1.27161, 3.21437 ], [ "M", 1.34758, 1.93494 ], [ "L", 2.10108, 0.986418 ] ]},
{ ch: "R", cmds: [ [ "M", 0.823682, 1.03103 ], [ "L", 0.827882, 2.4601 ], [ "C", 0.000529, 0.171565, 0, -0, 0.828982, 3.1675 ], [ "C", 0, -0, -0.098068, -0, 1.1815, 3.1705 ], [ "C", 0.238358, -0, -0.122483, 0.257893, 1.94086, 2.8925 ], [ "C", 0.09626, -0.202627, 0.169155, 0.14682, 1.80652, 2.20343 ], [ "C", -0.164258, -0.130114, 0.568941, -0.020959, 0.865617, 2.07186 ], [ "C", 0.646207, -0.01362, -0.128109, 0.149448, 1.51459, 1.87094 ], [ "C", 0.14891, -0.248307, -0.132281, 0.224653, 2.00867, 0.997704 ] ]},
{ ch: "S", cmds: [ [ "M", 0.819332, 1.37821 ], [ "C", 0.06646, -0.149269, -0.159303, 0.072921, 1.09951, 1.02876 ], [ "C", 0.376256, -0.172305, 0.02422, -0.452867, 1.97589, 1.53847 ], [ "C", -0.03344, 0.626898, 0.149296, -0.533557, 0.852916, 2.60193 ], [ "C", -0.139896, 0.499507, -0.409869, 0.179379, 1.67485, 3.16919 ], [ "C", 0.115273, -0.05042, -0.059293, 0.137876, 1.95259, 2.85982 ] ]},
{ ch: "T", cmds: [ [ "M", 1.38429, 3.15507 ], [ "L", 1.39209, 1.01852 ], [ "M", 0.664543, 3.15881 ], [ "L", 2.10433, 3.15796 ] ]},
{ ch: "U", cmds: [ [ "M", 2.04769, 3.18204 ], [ "L", 2.04769, 1.93997 ], [ "C", 0, -0.206845, 0.111518, 0.182285, 1.93828, 1.24964 ], [ "C", -0.22275, -0.363945, 0.211137, -0.399039, 0.824031, 1.26634 ], [ "C", -0.10767, 0.203564, 0, -0.222427, 0.726821, 2.00594 ], [ "L", 0.726821, 3.17707 ] ]},
{ ch: "V", cmds: [ [ "M", 2.08712, 3.21544 ], [ "L", 1.50834, 1.03268 ], [ "L", 1.26587, 1.03236 ], [ "L", 0.686202, 3.19958 ] ]},
{ ch: "W", cmds: [ [ "M", 2.10011, 3.20628 ], [ "C", -0.04739, -0.71877, 0.120671, 0.708302, 1.9072, 1.05721 ], [ "L", 1.73727, 1.06793 ], [ "L", 1.42471, 2.15795 ], [ "L", 1.32839, 2.14628 ], [ "C", -0.125193, -0.353696, 0.129241, 0.402975, 1.00273, 1.01197 ], [ "L", 0.870533, 1.01427 ], [ "C", -0.143557, 0.791898, 0.05434, -0.722509, 0.682293, 3.20141 ] ]},
{ ch: "X", cmds: [ [ "M", 0.776564, 3.17696 ], [ "C", 0.4131, -0.712072, -0.423127, 0.8224, 2.01978, 0.997596 ], [ "M", 2.00915, 3.22196 ], [ "L", 0.742319, 0.989198 ] ]},
{ ch: "Y", cmds: [ [ "M", 0.749974, 3.20209 ], [ "L", 1.37981, 2.06344 ], [ "L", 1.38221, 0.999214 ], [ "M", 2.01932, 3.19791 ], [ "L", 1.37803, 2.06177 ] ]},
{ ch: "Z", cmds: [ [ "M", 0.774686, 3.15796 ], [ "L", 1.86609, 3.16656 ], [ "L", 0.763306, 1.0331 ], [ "L", 1.96902, 1.0428 ] ]},
{ ch: "a", cmds: [ [ "M", 0.882191, 2.43605 ], [ "C", 0.241936, 0.195485, -0.205191, 0.293739, 1.85844, 2.42995 ], [ "C", 0.127059, -0.181862, -0.001512, 0.213615, 1.9717, 1.72832 ], [ "L", 1.9643, 1.25768 ], [ "L", 1.97476, 0.985606 ], [ "M", 1.90288, 1.40897 ], [ "C", -0.05907, -0.06935, 0.110671, 0.068968, 1.61912, 1.11696 ], [ "C", -0.150849, -0.121337, 0.240224, -0.10707, 0.985263, 1.02066 ], [ "C", -0.224378, 0.100026, -0.163184, -0.205061, 0.813526, 1.65027 ], [ "C", 0.09401, 0.118114, -0.145879, -0.017709, 1.23067, 1.86254 ], [ "C", 0.229444, 0.02785, -0.231233, -0, 1.95475, 1.8774 ] ]},
{ ch: "b", cmds: [ [ "M", 0.760837, 2.20284 ], [ "C", 0.24648, 0.244718, -0.473852, 0.315718, 1.80627, 2.48657 ], [ "C", 0.432946, -0.282048, 0.503627, 0.212053, 1.6973, 1.01969 ], [ "C", -0.384714, -0.177332, 0.154367, -0.266105, 0.795139, 1.41591 ], [ "M", 0.720815, 3.42545 ], [ "L", 0.720815, 1.00671 ] ]},
{ ch: "c", cmds: [ [ "M", 1.9473, 1.29637 ], [ "C", -0.143958, -0.354106, 0.259831, -0.36566, 1.0062, 1.19035 ], [ "C", -0.167337, 0.297261, -0.149926, -0.286325, 0.977472, 2.31219 ], [ "C", 0.195859, 0.380843, -0.168792, 0.373104, 1.92732, 2.32302 ] ]},
{ ch: "d", cmds: [ [ "M", 2.04974, 3.42335 ], [ "L", 2.05814, 1.00254 ], [ "M", 2.0278, 1.41539 ], [ "C", -0.05822, -0.08891, 0.117399, 0.078564, 1.73877, 1.10546 ], [ "C", -0.109329, -0.07316, 0.120262, 0.00405, 1.36931, 0.966718 ], [ "C", -0.871257, -0.02944, -0.73223, -0.182625, 1.21736, 2.59945 ], [ "C", 0.329347, 0.08214, -0.0948111, 0.175104, 2.02222, 2.17276 ] ]},
{ ch: "e", cmds: [ [ "M", 0.835528, 1.8723 ], [ "C", 0.16821, -0, 0, -0, 2.04839, 1.8803 ], [ "C", 0.03436, 0.04435, 0.1333, -0.097721, 1.8266, 2.47661 ], [ "C", -0.376266, 0.275841, 0.131154, 0.231126, 0.848856, 2.31413 ], [ "C", -0.131154, -0.23112, 0, -0, 0.74863, 1.72111 ], [ "C", 0.01412, -0.589485, -0.522662, -0.289497, 1.85354, 1.09015 ] ]},
{ ch: "f", cmds: [ [ "M", 1.39067, 0.980923 ], [ "C", 0, 0.461687, 0.01419, -0.46171, 1.36181, 2.46362 ], [ "C", -0.0064, 0.207529, -0.0734, -0.207437, 1.43391, 3.13358 ], [ "C", 0.08256, 0.233153, -0.198106, 0.016694, 1.96487, 3.42418 ], [ "M", 0.805119, 2.57041 ], [ "L", 1.98098, 2.57341 ] ]},
{ ch: "g", cmds: [ [ "M", 1.97249, 1.62513 ], [ "C", -0.115161, -0.196689, 0.105853, 0.102724, 1.72592, 1.28511 ], [ "C", -0.108157, -0.104959, 0.154347, 0.009435, 1.31707, 1.09205 ], [ "C", -0.63189, 0.059, -0.014008, -0.323823, 0.721661, 2.07789 ], [ "C", 0.01042, 0.240806, -0.289103, -0.028289, 1.25198, 2.59572 ], [ "C", 0.383465, 0.03752, -0.083469, 0.180336, 1.97925, 2.13052 ], [ "M", 2.00328, 2.60928 ], [ "L", 1.99738, 1.03005 ], [ "C", -0.000635, -0.171484, 0.122581, 0.135185, 1.8697, 0.532902 ], [ "C", -0.233089, -0.257729, 0.217127, -0.254666, 0.816609, 0.549252 ] ]},
{ ch: "h", cmds: [ [ "M", 0.873565, 2.17251 ], [ "C", 0.12227, 0.179506, -0.079289, -0.038579, 1.25578, 2.53456 ], [ "C", 0.172696, 0.08404, -0.145415, 0.15436, 1.81884, 2.47753 ], [ "C", 0.154664, -0.162301, 0.003807, 0.151012, 1.94261, 1.83588 ], [ "C", 0.0034, -0.283113, -0.0143, 0.315817, 1.94901, 1.01706 ], [ "M", 0.821326, 3.41297 ], [ "L", 0.828526, 1.02876 ] ]},
{ ch: "i", cmds: [ [ "M", 0.974833, 2.54804 ], [ "C", 0.123683, -0, 0, -0, 1.55123, 2.53954 ], [ "C", 0, -0, 0, 0.102209, 1.56113, 2.11193 ], [ "L", 1.56113, 1.00756 ], [ "M", 1.50231, 3.42953 ], [ "L", 1.50431, 3.23715 ] ]},
{ ch: "j", cmds: [ [ "M", 1.08684, 2.55395 ], [ "C", 0.107467, -0, 0, -0, 1.53665, 2.56065 ], [ "C", 0, -0, 0.000744, 0.169941, 1.53535, 1.37798 ], [ "C", -0.0014, -0.324781, 0.27458, 0.147502, 1.3011, 0.466979 ], [ "C", -0.119675, -0.07352, 0.145902, -0.02953, 0.829966, 0.430389 ], [ "M", 1.50769, 3.24063 ], [ "L", 1.50399, 3.43773 ] ]},
{ ch: "k", cmds: [ [ "M", 0.904122, 3.37398 ], [ "L", 0.892312, 1.0229 ], [ "M", 1.88513, 2.58817 ], [ "L", 1.15318, 1.91507 ], [ "C", 0, -0, 0.169682, 0.02774, 0.948125, 1.89523 ], [ "L", 1.15252, 1.90463 ], [ "L", 2.00292, 0.995949 ] ]},
{ ch: "l", cmds: [ [ "M", 1.17849, 3.41793 ], [ "C", 0, -0.508566, 0, 0.507784, 1.17609, 1.77138 ], [ "C", 0, -0.207886, -0.162708, 0.153174, 1.3422, 1.11988 ], [ "C", 0.138099, -0.129956, -0.174609, -0.00115, 1.90149, 1.03142 ] ]},
{ ch: "m", cmds: [ [ "M", 0.700007, 2.14995 ], [ "C", 0.03543, 0.129529, -0.080903, -0.105215, 0.8809, 2.49195 ], [ "C", 0.08485, 0.110303, -0.11186, 0.076276, 1.23368, 2.55022 ], [ "C", 0.09011, -0.06145, -0.012647, 0.252519, 1.39104, 2.12052 ], [ "C", 0.01828, -0.364749, 0.0009, 0.000306, 1.403, 1 ], [ "C", 0, -0, -0.11435, -0.198359, 1.49904, 2.36478 ], [ "C", 0.170022, 0.294935, -0.149151, 0.068158, 1.94637, 2.56201 ], [ "C", 0.178734, -0.08168, -0.004596, 0.164636, 2.10066, 2.0126 ], [ "C", -0.0089, -0.333253, -0.01599, 0.351547, 2.09736, 1.01812 ], [ "M", 0.682233, 2.60491 ], [ "L", 0.679833, 0.963791 ] ]},
{ ch: "n", cmds: [ [ "M", 0.7235, 1.96164 ], [ "C", 0.06682, 0.143311, -0.061079, -0.098102, 0.892778, 2.26528 ], [ "C", 0.0663, 0.09159, -0.103317, -0.032803, 1.24171, 2.55165 ], [ "C", 0.112335, 0.03567, -0.198204, 0.310082, 1.92575, 2.38034 ], [ "C", 0.191402, -0.271238, -0.021971, 0.334584, 2.04523, 1.02334 ], [ "M", 0.727546, 2.57352 ], [ "L", 0.734146, 0.97166 ] ]},
{ ch: "o", cmds: [ [ "M", 1.3274, 2.61259 ], [ "C", 0.918601, 0.0849, 0.892784, 0.095678, 1.47253, 0.973439 ], [ "C", -0.968034, -0.103753, -0.937017, -0.086603, 1.3274, 2.61259 ] ]},
{ ch: "p", cmds: [ [ "M", 0.724061, 2.11037 ], [ "C", 0.07355, 0.106482, -0.101492, -0.088311, 0.985901, 2.42274 ], [ "C", 0.121518, 0.105741, -0.219583, -0.003229, 1.43372, 2.60437 ], [ "C", 0.897588, 0.01341, 0.876942, 0.018691, 1.46456, 0.970292 ], [ "C", -0.337058, -0.01441, 0.087794, -0.168645, 0.76853, 1.41549 ], [ "M", 0.715549, 0.364373 ], [ "L", 0.704619, 2.58193 ] ]},
{ ch: "q", cmds: [ [ "M", 2.04851, 1.51587 ], [ "C", -0.04176, -0.06847, 0.07688, 0.097958, 1.86743, 1.24754 ], [ "C", -0.124118, -0.158153, 0.1547, 0.005188, 1.37638, 0.97093 ], [ "C", -0.900395, -0.0302, -0.901204, -0.032592, 1.32297, 2.59842 ], [ "C", 0.16591, 0.006, -0.25662, 0.306319, 2.04075, 2.15442 ], [ "M", 2.0583, 2.61019 ], [ "L", 2.0564, 0.368953 ] ]},
{ ch: "r", cmds: [ [ "M", 1.02196, 2.12645 ], [ "C", 0.08801, 0.124019, -0.128825, -0.099333, 1.35332, 2.48473 ], [ "C", 0.214762, 0.165596, 0.009604, 0.394182, 2.03204, 2.26721 ], [ "M", 0.991263, 2.58603 ], [ "L", 0.997063, 0.982479 ] ]},
{ ch: "s", cmds: [ [ "M", 0.839819, 1.17028 ], [ "C", 0.219741, -0.214736, -0.291598, -0.087345, 1.68037, 1.00571 ], [ "C", 0.209534, 0.06276, 0.105478, -0.216459, 1.94254, 1.51055 ], [ "C", -0.187915, 0.385962, 0.097864, -0.448125, 0.856046, 2.14526 ], [ "C", -0.155266, 0.571643, -0.077343, 0.394827, 1.90887, 2.35558 ] ]},
{ ch: "t", cmds: [ [ "M", 1.18317, 3.07778 ], [ "C", 0.0046, -0.544448, -0.05471, 0.517483, 1.18557, 1.28138 ], [ "C", 0.05503, -0.326522, -0.26978, -0.141554, 1.87214, 1.05018 ], [ "M", 0.72827, 2.5494 ], [ "L", 1.89337, 2.5452 ] ]},
{ ch: "u", cmds: [ [ "M", 2.04514, 1.54049 ], [ "C", -0.04622, -0.09976, 0.137337, 0.035366, 1.614, 1.05565 ], [ "C", -0.256014, -0.06593, 0.260985, -0.262935, 0.866348, 1.17117 ], [ "C", -0.189611, 0.191029, 0.016568, -0.533204, 0.722788, 2.55692 ], [ "M", 2.05028, 2.60432 ], [ "L", 2.05608, 0.987443 ] ]},
{ ch: "v", cmds: [ [ "M", 0.682174, 2.57026 ], [ "L", 1.25785, 0.99241 ], [ "L", 1.50762, 1.00241 ], [ "L", 2.08814, 2.59115 ] ]},
{ ch: "w", cmds: [ [ "M", 0.682487, 2.59614 ], [ "L", 0.881959, 1.02901 ], [ "L", 1.04495, 1.03051 ], [ "L", 1.27883, 1.79798 ], [ "L", 1.47562, 1.79328 ], [ "L", 1.71135, 0.992511 ], [ "L", 1.87834, 0.993305 ], [ "L", 2.09257, 2.58864 ] ]},
{ ch: "x", cmds: [ [ "M", 0.838649, 2.59446 ], [ "L", 1.98036, 0.979576 ], [ "M", 1.92172, 2.5948 ], [ "L", 0.798446, 1.00249 ] ]},
{ ch: "y", cmds: [ [ "M", 0.661243, 2.58695 ], [ "C", 0.1569, -0.256626, -0.148895, 0.261455, 1.41662, 1.33375 ], [ "M", 2.09226, 2.53266 ], [ "C", -0.312391, -0.553873, 0.369107, 0.665635, 1.12783, 0.806805 ], [ "C", -0.09971, -0.179816, 0.229838, -0.058689, 0.662817, 0.401534 ] ]},
{ ch: "z", cmds: [ [ "M", 0.828272, 2.54186 ], [ "L", 1.90837, 2.54606 ], [ "L", 1.91427, 2.39702 ], [ "L", 0.824552, 1.1861 ], [ "L", 0.819552, 1.03154 ], [ "L", 1.96828, 1.03104 ] ]},
{ ch: "0", cmds: [ [ "M", 1.33335, 3.43144 ], [ "C", 0.895951, 0.0892, 0.098177, 0.602982, 2.03387, 1.56354 ], [ "C", -0.04907, -0.284372, 0.310382, 0.025, 1.50527, 0.984439 ], [ "C", -0.123723, -0.01, 0.11991, -0.03435, 1.12502, 1.01349 ], [ "C", -0.498592, 0.142356, 0, -0.398721, 0.684731, 2.30477 ], [ "C", 0, 0.265662, -0.15371, -0.22868, 0.841841, 3.14617 ], [ "C", 0.119019, 0.176534, -0.202325, -0.017589, 1.32744, 3.43735 ] ]},
{ ch: "1", cmds: [ [ "M", 0.794527, 2.86334 ], [ "L", 1.41525, 3.41233 ], [ "L", 1.53142, 3.41513 ], [ "L", 1.54323, 0.995142 ] ]},
{ ch: "2", cmds: [ [ "M", 0.736815, 3.25583 ], [ "C", 0.250506, 0.142717, -0.283328, 0.087565, 1.59738, 3.3954 ], [ "C", 0.334788, -0.0794, 0.169849, 0.354215, 1.9334, 2.58524 ], [ "C", -0.305336, -0.457379, 0.200167, 0.450169, 0.87519, 1.60361 ], [ "C", -0.128647, -0.264298, 0, -0, 0.77945, 1.05217 ], [ "L", 1.42317, 1.05217 ], [ "L", 2.01438, 1.05807 ] ]},
{ ch: "3", cmds: [ [ "M", 0.697894, 3.38782 ], [ "L", 1.93185, 3.37601 ], [ "L", 1.93426, 3.23412 ], [ "L", 1.17465, 2.40402 ], [ "C", 0, -0, -0.0753152, 0.0314, 1.50438, 2.37217 ], [ "C", 0.176123, -0.01829, -0.0671322, 0.249187, 2.04732, 1.90512 ], [ "C", 0.152468, -0.856381, 0.529553, -0.256296, 0.712385, 1.10043 ] ]},
{ ch: "4", cmds: [ [ "M", 1.43293, 3.38656 ], [ "L", 0.684145, 1.77961 ], [ "L", 0.697365, 1.64162 ], [ "L", 2.08779, 1.63312 ], [ "M", 1.73308, 2.23538 ], [ "L", 1.73308, 1.01775 ] ]},
{ ch: "5", cmds: [ [ "M", 0.791367, 1.00027 ], [ "C", 0.242483, 2e-05, -0.205895, -0.13697, 1.54957, 1.17086 ], [ "C", 0.341501, 0.144665, 0.287254, -0.417258, 1.83278, 2.22431 ], [ "C", -0.149197, 0.184748, 0.22001, -0.02999, 1.26742, 2.50894 ], [ "C", -0.07805, 0.01063, 0, -0, 0.867086, 2.51714 ], [ "L", 0.927646, 3.36857 ], [ "L", 1.93377, 3.38189 ] ]},
{ ch: "6", cmds: [ [ "M", 1.63691, 3.38655 ], [ "C", -0.184699, -0.211631, 0.166548, 0.243072, 1.07348, 2.70542 ], [ "C", -0.09213, -0.134463, 0.057432, 0.262614, 0.722539, 2.06598 ], [ "C", -0.05578, -0.25508, -0.228198, 0.366073, 0.825977, 1.22305 ], [ "C", 0.266394, -0.331895, -0.268417, -0.31877, 1.94074, 1.22475 ], [ "C", 0.297317, 0.344804, 0.483308, -0.12296, 1.61691, 2.40159 ], [ "C", -0.142492, 0.03436, 0.144725, 0.03481, 1.17072, 2.41954 ], [ "C", -0.137707, -0.03312, 0.155033, 0.120055, 0.800359, 2.21128 ] ]},
{ ch: "7", cmds: [ [ "M", 0.679739, 3.38189 ], [ "L", 1.51995, 3.38189 ], [ "C", 0.07544, -0, 0, -0, 2.06401, 3.37339 ], [ "C", 0.130916, -0.04016, 0.225118, 0.234291, 1.73392, 2.66045 ], [ "C", -0.373642, -0.388867, 0.013526, 0.694454, 1.12265, 1.03185 ] ]},
{ ch: "8", cmds: [ [ "M", 1.32681, 2.42162 ], [ "C", -0.207752, 0.09817, -0.108678, -0.347478, 0.830348, 3.1097 ], [ "C", 0.121482, 0.387363, -0.177114, 0.344492, 1.90605, 3.16978 ], [ "C", 0.158505, -0.308534, 0.225543, 0.174829, 1.69146, 2.53051 ], [ "C", -0.09327, -0.0721, 0.102864, 0.04178, 1.30748, 2.32687 ], [ "C", -0.06864, -0.02801, 0.054632, 0.04784, 0.985117, 2.13841 ], [ "C", -0.246566, -0.215377, -0.090061, 0.353906, 0.718176, 1.38326 ], [ "C", 0.138687, -0.544868, -0.170711, -0.523725, 2.04845, 1.36322 ], [ "C", 0.154095, 0.473186, 0.254891, -0.179325, 1.48034, 2.35075 ] ]},
{ ch: "9", cmds: [ [ "M", 1.90502, 2.1473 ], [ "C", -0.195612, -0.115344, 0.26009, -0.197953, 0.952254, 2.11815 ], [ "C", -0.511934, 0.392252, -0.629013, -0.020133, 1.37844, 3.42115 ], [ "C", 0.473303, 0.01515, 0.073653, 0.456678, 2.0866, 2.52515 ], [ "C", -0.05799, -0.379522, 0.17363, 0.271286, 1.69073, 1.64368 ], [ "C", -0.152761, -0.238679, 0.197536, 0.197668, 1.13237, 1.00262 ] ]},
{ ch: "`", cmds: [ [ "M", 1.20434, 3.36648 ], [ "L", 1.38446, 3.08602 ] ]},
{ ch: "!", cmds: [ [ "M", 1.39648, 3.30638 ], [ "L", 1.39648, 2.08435 ], [ "M", 1.39143, 0.982047 ], [ "L", 1.39143, 0.775981 ] ]},
{ ch: "@", cmds: [ [ "M", 1.45671, 1.18881 ], [ "C", -0.14972, -0.170697, 0.183817, -0.068102, 0.898085, 1.00504 ], [ "C", -0.122562, 0.04541, 0.007991, -0.05345, 0.695364, 1.34068 ], [ "C", -0.03303, 0.217381, -0.08413, -0.232852, 0.765654, 2.04584 ], [ "C", 0.09239, 0.255728, -0.166272, 0.208322, 1.47112, 1.94353 ], [ "M", 1.47662, 2.21155 ], [ "L", 1.46822, 1.3483 ], [ "C", 0.01572, -0.128285, -0.204475, 0.096824, 1.64839, 0.985615 ], [ "C", 0.183925, -0.0613, -0.054031, -0.172066, 2.05326, 1.22297 ], [ "C", 0.04131, 0.133241, 0.00803, -0.188451, 2.1046, 1.7865 ], [ "C", -0.0176, 0.413029, 0.228897, -0.333935, 1.88739, 3.00755 ], [ "C", -0.301168, 0.415971, -0.021349, 0.457599, 0.707797, 2.8056 ] ]},
{ ch: "#", cmds: [ [ "M", 1.25597, 3.42912 ], [ "L", 0.711441, 1.01424 ], [ "M", 0.722219, 2.67874 ], [ "L", 2.10906, 2.67454 ], [ "M", 2.06101, 3.43543 ], [ "L", 1.52869, 0.997551 ], [ "M", 0.651179, 1.7647 ], [ "L", 2.04254, 1.76555 ] ]},
{ ch: "$", cmds: [ [ "M", 1.38808, 3.46592 ], [ "L", 1.37968, 0.957405 ], [ "M", 0.687477, 1.48925 ], [ "C", 0.213146, -0.238027, -0.149164, 0.040523, 1.05802, 1.20461 ], [ "C", 0.132985, -0.03613, -0.130985, 0.0067, 1.47058, 1.1787 ], [ "C", 0.123962, -0.0063, -0.11143, -0.05468, 1.83238, 1.2668 ], [ "C", 0.261236, 0.128191, 0.236585, -0.2897, 1.9999, 1.9832 ], [ "C", -0.07528, 0.09218, 0.110169, -0.048407, 1.68773, 2.16451 ], [ "C", -0.106254, 0.04669, 0.112268, -0.029425, 1.35529, 2.268 ], [ "C", -0.10668, 0.02796, 0.105195, -0.03311, 1.03177, 2.33725 ], [ "C", -0.266653, 0.08393, -0.325974, -0.303698, 0.838017, 3.09575 ], [ "C", 0.28579, 0.266221, -0.221144, 0.30749, 2.01659, 2.98006 ] ]},
{ ch: "%", cmds: [ [ "M", 0.943798, 3.37385 ], [ "C", 0.376846, 0.0309, 0.353665, 0.0241, 0.983788, 2.7498 ], [ "C", -0.353832, -0.02411, -0.339459, -0.027846, 0.943798, 3.37385 ], [ "M", 2.0846, 3.34645 ], [ "L", 0.683682, 1.00255 ], [ "M", 1.72425, 1.61214 ], [ "C", 0.379053, 0.110343, 0.314003, 0.1087, 1.90438, 1.00557 ], [ "C", -0.368443, -0.127513, -0.298191, -0.086824, 1.72425, 1.61214 ] ]},
{ ch: "&", cmds: [ [ "M", 2.08805, 1.97507 ], [ "C", -0.000529, -0.251238, 0.06687, 0.162035, 1.98988, 1.45844 ], [ "C", -0.04207, -0.101936, 0.053997, 0.069375, 1.80445, 1.18447 ], [ "C", -0.09773, -0.125574, 0.117141, 0.013809, 1.436, 0.991797 ], [ "C", -0.574802, -0.06776, -0.236273, -0.482319, 0.750748, 1.84393 ], [ "C", 0.05687, 0.141254, -0.116052, -0.117819, 1.04334, 2.2446 ], [ "C", 0.09867, 0.100168, -0.105648, -0.080843, 1.38019, 2.49848 ], [ "C", 0.576525, 0.441157, 0.33645, -0.094743, 1.50113, 3.41468 ], [ "C", -0.08562, 0.02411, 0.10854, 0.02769, 1.16579, 3.43642 ], [ "C", -0.126127, -0.03217, 0.05842, 0.116316, 0.835827, 3.22758 ], [ "C", -0.09939, -0.197894, -0.160202, 0.263009, 0.886037, 2.56513 ], [ "C", 0.123013, -0.201948, -0.137113, 0.192653, 1.29315, 1.98419 ], [ "C", 0.124214, -0.174532, -0.131881, 0.167538, 1.6696, 1.46332 ], [ "L", 1.74438, 1.36245 ], [ "L", 1.99635, 1.00258 ] ]},
{ ch: "*", cmds: [ [ "M", 1.38717, 2.99499 ], [ "L", 1.39327, 2.25157 ], [ "C", 0.03142, -0.06528, -0.041626, 0.066369, 1.5376, 2.13126 ], [ "L", 1.86289, 1.56944 ], [ "M", 0.654366, 2.47282 ], [ "L", 1.38713, 2.20816 ], [ "L", 0.906959, 1.58123 ], [ "M", 1.44243, 2.23474 ], [ "L", 2.10319, 2.4492 ] ]},
{ ch: "(", cmds: [ [ "M", 1.86015, 3.40661 ], [ "C", -0.571373, -0.461085, -0.386656, 0.695636, 1.36683, 1.48342 ], [ "C", 0.115274, -0.207486, -0.174911, 0.152813, 1.84014, 0.982582 ] ]},
{ ch: ")", cmds: [ [ "M", 0.931476, 3.40661 ], [ "C", 0.170905, -0.135705, -0.115271, 0.189195, 1.38257, 2.94584 ], [ "C", 0.423275, -0.695676, 0.638018, 0.459123, 0.931476, 0.982582 ] ]},
{ ch: "-", cmds: [ [ "M", 0.713889, 2.21378 ], [ "L", 2.0283, 2.22218 ] ]},
{ ch: "+", cmds: [ [ "M", 1.37882, 2.99431 ], [ "L", 1.39136, 1.41495 ], [ "M", 0.709278, 2.21798 ], [ "L", 2.082, 2.20958 ] ]},
{ ch: "=", cmds: [ [ "M", 0.747171, 2.5852 ], [ "L", 2.04803, 2.5852 ], [ "M", 0.787095, 1.78388 ], [ "L", 2.04793, 1.78388 ] ]},
{ ch: "[", cmds: [ [ "M", 2.0157, 1.00849 ], [ "L", 1.0306, 0.997225 ], [ "L", 1.0236, 3.4213 ], [ "L", 2.01574, 3.4284 ] ]},
{ ch: "]", cmds: [ [ "M", 0.758331, 3.4326 ], [ "L", 1.75785, 3.4506 ], [ "L", 1.74845, 1.00147 ], [ "L", 0.750819, 1.00437 ] ]},
{ ch: "{", cmds: [ [ "M", 2.08795, 1.00857 ], [ "C", -0.206677, 0.0384, 0.155783, -0.176271, 1.41358, 1.13631 ], [ "C", -0.143736, 0.16261, 0.03116, -0.203599, 1.26042, 1.79652 ], [ "C", 0.01329, 0.431098, 0.177123, 6.1e-05, 0.695161, 2.22727 ], [ "C", 0.192548, -0.002, -0.131693, -0.28848, 1.24649, 2.49769 ], [ "C", 0.09563, 0.353546, -0.577131, 0.001396, 1.76861, 3.41305 ], [ "C", 0.09872, 0.01249, -0.0995119, -0.00081, 2.06881, 3.43677 ] ]},
{ ch: "}", cmds: [ [ "M", 0.685412, 3.44097 ], [ "C", 0.116096, -0.000317, -0.113274, 0.02613, 1.12499, 3.39364 ], [ "C", 0.270634, -0.04131, -0.0055052, 0.417522, 1.49387, 2.72234 ], [ "C", 0.005, -0.375498, -0.430006, -0.006684, 2.09879, 2.23898 ], [ "C", -0.273742, 0.01313, -0.0156621, 0.270452, 1.50497, 1.85 ], [ "C", -0.02839, -0.294547, 0.271359, 0.134526, 1.2576, 1.08331 ], [ "C", -0.146491, -0.08375, 0.176848, 0.01306, 0.690457, 1.0086 ] ]},
{ ch: "\\", cmds: [ [ "M", 0.892595, 3.37919 ], [ "L", 1.87324, 1.01526 ] ]},
{ ch: "|", cmds: [ [ "M", 1.38483, 3.29905 ], [ "L", 1.38483, 0.574524 ] ]},
{ ch: ";", cmds: [ [ "M", 1.47599, 2.56813 ], [ "L", 1.47675, 2.35758 ], [ "M", 1.43671, 1.23544 ], [ "L", 0.936387, 0.474178 ] ]},
{ ch: ":", cmds: [ [ "M", 1.41873, 2.57343 ], [ "L", 1.41793, 2.36695 ], [ "M", 1.39581, 1.2534 ], [ "L", 1.39535, 1.05112 ] ]},
{ ch: "'", cmds: [ [ "M", 1.38067, 3.21886 ], [ "L", 1.38067, 2.55776 ] ]},
{ ch: "\"", cmds: [ [ "M", 0.89221, 3.29905 ], [ "L", 0.85222, 2.65799 ], [ "M", 1.91292, 3.29905 ], [ "L", 1.89292, 2.69805 ] ]},
{ ch: ",", cmds: [ [ "M", 1.64455, 1.33561 ], [ "L", 0.924073, 0.434112 ] ]},
{ ch: ".", cmds: [ [ "M", 1.39636, 1.30397 ], [ "L", 1.39633, 1.09828 ] ]},
{ ch: "<", cmds: [ [ "M", 2.10554, 3.17214 ], [ "L", 0.677622, 2.23057 ], [ "L", 2.10971, 1.26395 ] ]},
{ ch: ">", cmds: [ [ "M", 0.68227, 3.1613 ], [ "L", 2.0838, 2.21976 ], [ "L", 0.670613, 1.27648 ] ]},
{ ch: "/", cmds: [ [ "M", 1.8925, 3.37919 ], [ "L", 1.54387, 2.55782 ], [ "L", 0.911858, 1.01526 ] ]},
{ ch: "?", cmds: [ [ "M", 0.783749, 2.73806 ], [ "C", -0.03824, 0.120248, -0.132064, -0.085455, 0.958823, 3.12225 ], [ "C", 0.26448, 0.192166, -0.069358, 0.397784, 1.88814, 2.8783 ], [ "C", 0.02368, -0.540817, 0.020998, 0.34096, 1.40416, 1.9167 ], [ "M", 1.39407, 1.00587 ], [ "L", 1.39318, 0.799155 ] ]},
]
};
// out_pitch is the x and y spacing of the characters, determined by the caller to have the output text fit a given size
// textlines is an array of strings
function render_text(textlines, drawparms, out_pitch) {
var pitch_scale = [ 0.8, 0.77 ]; // to get better "fill factor" of character size vs. character pitch
// native font with pitch adjusted to be a bit more dense (but character size unchanged) would have this pitch:
var ndx = ocrb.native_pitch[0] * pitch_scale[0];
var ndy = ocrb.native_pitch[1] * pitch_scale[1];
// characters (and dense pitch) are scaled by this much to achieve requested output pitch
var cscalex = out_pitch[0] / ndx;
var cscaley = out_pitch[1] / ndy;
var gcode = [];
var nlines = textlines.length;
for (var i=0; i < nlines; i++) {
var line = textlines[i];
var ybase = (nlines-i-1)*cscaley*ndy;
for (var j=0; j < line.length; j++) {
var x = j*cscalex*ndx;
var gctmp = render_char(line[j], [x, ybase], [cscalex, cscaley], drawparms);
gcode.push.apply(gcode, gctmp); // if gctmp is unlimited, this could fail, but gctmp is pretty short, while gcode can be quite large
}
}
// add a pen-up and move to 0, 0 at the end
gcode.push("G1 Z" + drawparms.zup.toFixed(2) + " F" + drawparms.vertical.toFixed(0));
gcode.push("G1 X0 Y0 F" + drawparms.rapid.toFixed(0));
return gcode;
}
// character is the character to render
// pos is the x, y coordinate of the lower left corner
// scale is the relative scale in x and y (might not be equal)
// drawparms contains feedrates, z height, etc.
// returns array of strings, being g-code commands
function render_char(ch, pos, scale, drawparms) {
// locate character in ocrb_data
var chix = -1;
chars = ocrb.chars;
for (var i=0; i < chars.length; i++) {
if (chars[i].ch == ch) {
chix = i;
break;
}
}
if (chix == -1) {
return []; // empty array
}
var cmds = chars[i].cmds; // array of arrays cmds = [ [ "M", ... ], [ "L", ... ], [ "C", ... ], ... ];
var gcode = [];
var zupcmd = "G1 Z" + drawparms.zup.toFixed(2) + " F" + drawparms.vertical.toFixed(0);
var zdncmd = "G1 Z" + drawparms.zdn.toFixed(2) + " F" + drawparms.vertical.toFixed(0);
for (var i=0; i < cmds.length; i++) {
if (cmds[i][0] == "M") {
var x = cmds[i][1] * scale[0] + pos[0];
var y = cmds[i][2] * scale[1] + pos[1];
gcode.push(zupcmd);
gcode.push("G1 X" + n2s(x, 6) + " Y" + n2s(y, 6) + " F" + drawparms.rapid.toFixed(0));
gcode.push(zdncmd);
}
else if (cmds[i][0] == "L") {
var x = cmds[i][1] * scale[0] + pos[0];
var y = cmds[i][2] * scale[1] + pos[1];
gcode.push("G1 X" + n2s(x, 6) + " Y" + n2s(y, 6) + " F" + drawparms.drawspeed.toFixed(0));
}
else if (cmds[i][0] == "C") {
var p1x = cmds[i][1] * scale[0];
var p1y = cmds[i][2] * scale[1];
var p2x = cmds[i][3] * scale[0];
var p2y = cmds[i][4] * scale[1];
var x = cmds[i][5] * scale[0] + pos[0];
var y = cmds[i][6] * scale[1] + pos[1];
gcode.push("G5 I" + n2s(p1x, 6) + " J" + n2s(p1y, 6) + " P" + n2s(p2x, 6) + " Q" + n2s(p2y, 6) + " X" + n2s(x, 6) + " Y" + n2s(y, 6) + " F" + drawparms.drawspeed.toFixed(0));
}
else {
alert("unrecognized command " + cmds[i][0]);
}
}
return gcode;
}
// convert number to string, keeping p significant digits
function n2s(n, p) {
if (n == 0) {
return "0";
}
var leftdigits = Math.floor(Math.log10(Math.abs(n))) + 1;
// positive: number of (nonzero) digits to the left of the decimal point
// zero: 0.xxxx but not 0.0xxxx
// negative: negative number of zero digits to the right of the decimal point
var rightdigits = p-leftdigits;
if (rightdigits < 0) {
rightdigits = 0;
}
return n.toFixed(rightdigits);
}
//alert(render_char('a', [0, 0], [1, 1], { zup: 0.5, zdn: -0.5, rapid: 2000, drawspeed: 1000, vertical: 800} ));