Changeset 116

Show
Ignore:
Timestamp:
12/19/07 10:09:00 (1 year ago)
Author:
tal
Message:
Added test cases.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • packages/fontMath/trunk/Lib/fontMath/mathKerning.py

    r114 r116  
    6969 
    7070    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        """ 
    7194        if self._kerning.has_key(pair): 
    7295            return self._kerning[pair] 
     
    107130 
    108131    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        """ 
    109155        left, right = pair 
    110156        CLASS_TYPE = "class" 
     
    191237 
    192238    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        """ 
    193268        k = self._processMathOne(other, add) 
    194269        k.cleanup() 
     
    196271 
    197272    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        """ 
    198302        k = self._processMathOne(other, sub) 
    199303        k.cleanup() 
     
    201305 
    202306    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        """ 
    203322        k = self._processMathTwo(value, mul) 
    204323        k.cleanup() 
     
    206325 
    207326    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        """ 
    208342        k = self._processMathTwo(value, mul) 
    209343        k.cleanup() 
     
    211345 
    212346    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        """ 
    213362        k = self._processMathTwo(value, div) 
    214363        k.cleanup() 
     
    216365 
    217366    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        """ 
    218382        k = self._processMathTwo(value, div) 
    219383        k.cleanup() 
     
    221385 
    222386    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        """ 
    223399        multiple = float(multiple) 
    224400        for k, v in self._kerning.items(): 
     
    226402 
    227403    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        """ 
    228419        for (left, right), v in self._kerning.items(): 
    229420            if v == 0: 
     
    233424 
    234425    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        """ 
    235436        for k, v in self._kerning.items(): 
    236437            self._kerning[k] = v + value 
     
    242443 
    243444 
     445if __name__ == "__main__": 
     446    import doctest 
     447    doctest.testmod()