Changeset 116
- Timestamp:
- 12/19/07 10:09:00 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
packages/fontMath/trunk/Lib/fontMath/mathKerning.py
r114 r116 69 69 70 70 def __getitem__(self, pair): 71 """ 72 >>> kerning = { 73 ... ("@A_left", "@A_right") : 1, 74 ... ("A1", "@A_right") : 2, 75 ... ("@A_left", "A2") : 3, 76 ... ("A3", "A3") : 4, 77 ... } 78 >>> groups = { 79 ... "@A_left" : ["A", "A1", "A2", "A3"], 80 ... "@A_right" : ["A", "A1", "A2", "A3"], 81 ... } 82 >>> obj = MathKerning(kerning, groups) 83 >>> obj["A", "A"] 84 1 85 >>> obj["A1", "A"] 86 2 87 >>> obj["A", "A2"] 88 3 89 >>> obj["A3", "A3"] 90 4 91 >>> obj["X", "X"] 92 0 93 """ 71 94 if self._kerning.has_key(pair): 72 95 return self._kerning[pair] … … 107 130 108 131 def guessPairType(self, pair): 132 """ 133 >>> kerning = { 134 ... ("@A_left", "@A_right") : 1, 135 ... ("A1", "@A_right") : 2, 136 ... ("@A_left", "A2") : 3, 137 ... ("A3", "A3") : 4, 138 ... } 139 >>> groups = { 140 ... "@A_left" : ["A", "A1", "A2", "A3"], 141 ... "@A_right" : ["A", "A1", "A2", "A3"], 142 ... } 143 >>> obj = MathKerning(kerning, groups) 144 >>> obj.guessPairType(("@A_left", "@A_right")) 145 ('class', 'class') 146 >>> obj.guessPairType(("A1", "@A_right")) 147 ('exception', 'class') 148 >>> obj.guessPairType(("@A_left", "A2")) 149 ('class', 'exception') 150 >>> obj.guessPairType(("A3", "A3")) 151 ('exception', 'exception') 152 >>> obj.guessPairType(("A", "A")) 153 ('single', 'single') 154 """ 109 155 left, right = pair 110 156 CLASS_TYPE = "class" … … 191 237 192 238 def __add__(self, other): 239 """ 240 >>> kerning1 = { 241 ... ("A", "A") : 1, 242 ... ("B", "B") : 1, 243 ... ("NotIn2", "NotIn2") : 1, 244 ... ("@NotIn2", "C") : 1, 245 ... ("@D", "@D") : 1, 246 ... } 247 >>> groups1 = { 248 ... "@NotIn1" : ["C"], 249 ... "@D" : ["D", "H"], 250 ... } 251 >>> kerning2 = { 252 ... ("A", "A") : -1, 253 ... ("B", "B") : 1, 254 ... ("NotIn1", "NotIn1") : 1, 255 ... ("@NotIn1", "C") : 1, 256 ... ("@D", "@D") : 1, 257 ... } 258 >>> groups2 = { 259 ... "@NotIn2" : ["C"], 260 ... "@D" : ["D"], 261 ... } 262 >>> obj = MathKerning(kerning1, groups1) + MathKerning(kerning2, groups2) 263 >>> sorted(obj.items()) 264 [(('@D', '@D'), 2), (('@NotIn1', 'C'), 1), (('@NotIn2', 'C'), 1), (('B', 'B'), 2), (('NotIn1', 'NotIn1'), 1), (('NotIn2', 'NotIn2'), 1)] 265 >>> sorted(obj.groups()["@D"]) 266 ['D', 'H'] 267 """ 193 268 k = self._processMathOne(other, add) 194 269 k.cleanup() … … 196 271 197 272 def __sub__(self, other): 273 """ 274 >>> kerning1 = { 275 ... ("A", "A") : 1, 276 ... ("B", "B") : 1, 277 ... ("NotIn2", "NotIn2") : 1, 278 ... ("@NotIn2", "C") : 1, 279 ... ("@D", "@D") : 1, 280 ... } 281 >>> groups1 = { 282 ... "@NotIn1" : ["C"], 283 ... "@D" : ["D", "H"], 284 ... } 285 >>> kerning2 = { 286 ... ("A", "A") : -1, 287 ... ("B", "B") : 1, 288 ... ("NotIn1", "NotIn1") : 1, 289 ... ("@NotIn1", "C") : 1, 290 ... ("@D", "@D") : 1, 291 ... } 292 >>> groups2 = { 293 ... "@NotIn2" : ["C"], 294 ... "@D" : ["D"], 295 ... } 296 >>> obj = MathKerning(kerning1, groups1) - MathKerning(kerning2, groups2) 297 >>> sorted(obj.items()) 298 [(('@NotIn1', 'C'), -1), (('@NotIn2', 'C'), 1), (('A', 'A'), 2), (('NotIn1', 'NotIn1'), -1), (('NotIn2', 'NotIn2'), 1)] 299 >>> sorted(obj.groups()["@D"]) 300 ['D', 'H'] 301 """ 198 302 k = self._processMathOne(other, sub) 199 303 k.cleanup() … … 201 305 202 306 def __mul__(self, value): 307 """ 308 >>> kerning = { 309 ... ("A", "A") : 0, 310 ... ("B", "B") : 1, 311 ... ("C2", "@C") : 0, 312 ... ("@C", "@C") : 2, 313 ... } 314 >>> groups = { 315 ... "@C" : ["C1", "C2"], 316 ... "@C" : ["C1", "C2"], 317 ... } 318 >>> obj = MathKerning(kerning, groups) * 2 319 >>> sorted(obj.items()) 320 [(('@C', '@C'), 4), (('B', 'B'), 2), (('C2', '@C'), 0)] 321 """ 203 322 k = self._processMathTwo(value, mul) 204 323 k.cleanup() … … 206 325 207 326 def __rmul__(self, value): 327 """ 328 >>> kerning = { 329 ... ("A", "A") : 0, 330 ... ("B", "B") : 1, 331 ... ("C2", "@C") : 0, 332 ... ("@C", "@C") : 2, 333 ... } 334 >>> groups = { 335 ... "@C" : ["C1", "C2"], 336 ... "@C" : ["C1", "C2"], 337 ... } 338 >>> obj = 2 * MathKerning(kerning, groups) 339 >>> sorted(obj.items()) 340 [(('@C', '@C'), 4), (('B', 'B'), 2), (('C2', '@C'), 0)] 341 """ 208 342 k = self._processMathTwo(value, mul) 209 343 k.cleanup() … … 211 345 212 346 def __div__(self, value): 347 """ 348 >>> kerning = { 349 ... ("A", "A") : 0, 350 ... ("B", "B") : 4, 351 ... ("C2", "@C") : 0, 352 ... ("@C", "@C") : 4, 353 ... } 354 >>> groups = { 355 ... "@C" : ["C1", "C2"], 356 ... "@C" : ["C1", "C2"], 357 ... } 358 >>> obj = MathKerning(kerning, groups) / 2 359 >>> sorted(obj.items()) 360 [(('@C', '@C'), 4), (('B', 'B'), 2), (('C2', '@C'), 0)] 361 """ 213 362 k = self._processMathTwo(value, div) 214 363 k.cleanup() … … 216 365 217 366 def __rdiv__(self, value): 367 """ 368 >>> kerning = { 369 ... ("A", "A") : 0, 370 ... ("B", "B") : 4, 371 ... ("C2", "@C") : 0, 372 ... ("@C", "@C") : 4, 373 ... } 374 >>> groups = { 375 ... "@C" : ["C1", "C2"], 376 ... "@C" : ["C1", "C2"], 377 ... } 378 >>> obj = 2 / MathKerning(kerning, groups) 379 >>> sorted(obj.items()) 380 [(('@C', '@C'), 4), (('B', 'B'), 2), (('C2', '@C'), 0)] 381 """ 218 382 k = self._processMathTwo(value, div) 219 383 k.cleanup() … … 221 385 222 386 def round(self, multiple=1): 387 """ 388 >>> kerning = { 389 ... ("A", "A") : 2, 390 ... ("B", "B") : 4, 391 ... ("C", "C") : 7, 392 ... ("D", "D") : 9, 393 ... } 394 >>> obj = MathKerning(kerning) 395 >>> obj.round(5) 396 >>> sorted(obj.items()) 397 [(('A', 'A'), 0), (('B', 'B'), 5), (('C', 'C'), 5), (('D', 'D'), 10)] 398 """ 223 399 multiple = float(multiple) 224 400 for k, v in self._kerning.items(): … … 226 402 227 403 def cleanup(self): 404 """ 405 >>> kerning = { 406 ... ("A", "A") : 0, 407 ... ("B", "B") : 1, 408 ... ("C", "@C") : 0, 409 ... ("@C", "@C") : 1, 410 ... } 411 >>> groups = { 412 ... "@C" : ["C", "C1"] 413 ... } 414 >>> obj = MathKerning(kerning, groups) 415 >>> obj.cleanup() 416 >>> sorted(obj.items()) 417 [(('@C', '@C'), 1), (('B', 'B'), 1), (('C', '@C'), 0)] 418 """ 228 419 for (left, right), v in self._kerning.items(): 229 420 if v == 0: … … 233 424 234 425 def addTo(self, value): 426 """ 427 >>> kerning = { 428 ... ("A", "A") : 1, 429 ... ("B", "B") : -1, 430 ... } 431 >>> obj = MathKerning(kerning) 432 >>> obj.addTo(1) 433 >>> sorted(obj.items()) 434 [(('A', 'A'), 2), (('B', 'B'), 0)] 435 """ 235 436 for k, v in self._kerning.items(): 236 437 self._kerning[k] = v + value … … 242 443 243 444 445 if __name__ == "__main__": 446 import doctest 447 doctest.testmod()
