| OLD | NEW |
| 1 # Copyright 2013 the V8 project authors. All rights reserved. | 1 # Copyright 2013 the V8 project authors. All rights reserved. |
| 2 # Redistribution and use in source and binary forms, with or without | 2 # Redistribution and use in source and binary forms, with or without |
| 3 # modification, are permitted provided that the following conditions are | 3 # modification, are permitted provided that the following conditions are |
| 4 # met: | 4 # met: |
| 5 # | 5 # |
| 6 # * Redistributions of source code must retain the above copyright | 6 # * Redistributions of source code must retain the above copyright |
| 7 # notice, this list of conditions and the following disclaimer. | 7 # notice, this list of conditions and the following disclaimer. |
| 8 # * Redistributions in binary form must reproduce the above | 8 # * Redistributions in binary form must reproduce the above |
| 9 # copyright notice, this list of conditions and the following | 9 # copyright notice, this list of conditions and the following |
| 10 # disclaimer in the documentation and/or other materials provided | 10 # disclaimer in the documentation and/or other materials provided |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 self.__lower_bound = primary_range[0] | 50 self.__lower_bound = primary_range[0] |
| 51 self.__upper_bound = primary_range[1] + len(class_names) | 51 self.__upper_bound = primary_range[1] + len(class_names) |
| 52 f = lambda i : (i + primary_range[1] + 1, i + primary_range[1] + 1) | 52 f = lambda i : (i + primary_range[1] + 1, i + primary_range[1] + 1) |
| 53 self.__class_ranges = {name : f(i) for i, name in enumerate(class_names)} | 53 self.__class_ranges = {name : f(i) for i, name in enumerate(class_names)} |
| 54 self.__predefined_ranges = {} | 54 self.__predefined_ranges = {} |
| 55 | 55 |
| 56 def name(self): | 56 def name(self): |
| 57 return self.__name | 57 return self.__name |
| 58 | 58 |
| 59 def add_predefined_range(self, name, ranges): | 59 def add_predefined_range(self, name, ranges): |
| 60 # TODO verify disjointness | |
| 61 self.__predefined_ranges[name] = ranges | 60 self.__predefined_ranges[name] = ranges |
| 62 | 61 |
| 63 def lower_bound(self): | 62 def lower_bound(self): |
| 64 return self.__lower_bound | 63 return self.__lower_bound |
| 65 | 64 |
| 66 def upper_bound(self): | 65 def upper_bound(self): |
| 67 return self.__upper_bound | 66 return self.__upper_bound |
| 68 | 67 |
| 69 def primary_range(self): | 68 def primary_range(self): |
| 70 return self.__primary_range | 69 return self.__primary_range |
| 71 | 70 |
| 72 def class_range(self, name): | 71 def class_range(self, name): |
| 73 ranges = self.__class_ranges | 72 ranges = self.__class_ranges |
| 74 return None if not name in ranges else ranges[name] | 73 return None if not name in ranges else ranges[name] |
| 75 | 74 |
| 76 def class_range_iter(self): | 75 def class_range_iter(self): |
| 77 return self.__class_ranges.iteritems() | 76 return self.__class_ranges.iteritems() |
| 78 | 77 |
| 78 def class_name_iter(self): |
| 79 return self.__class_ranges.iterkeys() |
| 80 |
| 79 def class_value_iter(self): | 81 def class_value_iter(self): |
| 80 return self.__class_ranges.itervalues() | 82 return self.__class_ranges.itervalues() |
| 81 | 83 |
| 82 def predefined_range_iter(self, name): | 84 def predefined_range_iter(self, name): |
| 83 ranges = self.__predefined_ranges | 85 ranges = self.__predefined_ranges |
| 84 return None if not name in ranges else iter(ranges[name]) | 86 return None if not name in ranges else iter(ranges[name]) |
| 85 | 87 |
| 86 def is_primary_range(self, r): | 88 def is_primary_range(self, r): |
| 87 assert self.lower_bound() <= r[0] and r[1] <= self.upper_bound() | 89 assert self.lower_bound() <= r[0] and r[1] <= self.upper_bound() |
| 88 primary_range = self.__primary_range | 90 primary_range = self.__primary_range |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 inverted.append((last[1] + 1, upper_bound)) | 458 inverted.append((last[1] + 1, upper_bound)) |
| 457 inverted += list(classes) | 459 inverted += list(classes) |
| 458 return inverted | 460 return inverted |
| 459 | 461 |
| 460 class Latin1Encoding(KeyEncoding): | 462 class Latin1Encoding(KeyEncoding): |
| 461 | 463 |
| 462 def __init__(self): | 464 def __init__(self): |
| 463 super(Latin1Encoding, self).__init__( | 465 super(Latin1Encoding, self).__init__( |
| 464 'latin1', | 466 'latin1', |
| 465 (1, 255), | 467 (1, 255), |
| 466 ['eos', 'zero', 'byte_order_mark']) | 468 ['eos', 'zero']) |
| 467 self.add_predefined_range( | 469 self.add_predefined_range( |
| 468 'whitespace', [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160)]) | 470 'whitespace', [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160)]) |
| 469 self.add_predefined_range( | 471 self.add_predefined_range( |
| 470 'letter', [ | 472 'letter', [ |
| 471 (65, 90), (97, 122), (170, 170), (181, 181), | 473 (65, 90), (97, 122), (170, 170), (181, 181), |
| 472 (186, 186), (192, 214), (216, 246), (248, 255)]) | 474 (186, 186), (192, 214), (216, 246), (248, 255)]) |
| 473 self.add_predefined_range('line_terminator', [(10, 10), (13, 13)]) | 475 self.add_predefined_range('line_terminator', [(10, 10), (13, 13)]) |
| 474 self.add_predefined_range( | 476 self.add_predefined_range( |
| 475 'identifier_part_not_letter', [(48, 57), (95, 95)]) | 477 'identifier_part_not_letter', [(48, 57), (95, 95)]) |
| 476 | 478 |
| 477 class Utf16Encoding(KeyEncoding): | 479 class Utf16Encoding(KeyEncoding): |
| 478 | 480 |
| 479 def __init__(self): | 481 def __init__(self): |
| 480 super(Utf16Encoding, self).__init__( | 482 super(Utf16Encoding, self).__init__( |
| 481 'utf16', | 483 'utf16', |
| 482 (1, 255), | 484 (1, 255), |
| 483 ['eos', 'zero', 'byte_order_mark', | 485 ['eos', 'zero', 'byte_order_mark', |
| 484 'non_latin_1_whitespace', | 486 'non_primary_whitespace', |
| 485 'non_latin_1_letter', | 487 'non_primary_letter', |
| 486 'non_latin_1_identifier_part_not_letter', | 488 'non_primary_identifier_part_not_letter', |
| 487 'non_latin_1_line_terminator', | 489 'non_primary_line_terminator', |
| 488 'non_latin_1_everything_else']) | 490 'non_primary_everything_else']) |
| 489 self.add_predefined_range( | 491 self.add_predefined_range( |
| 490 'whitespace', | 492 'whitespace', |
| 491 [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160), | 493 [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160), |
| 492 self.class_range('non_latin_1_whitespace')]) | 494 self.class_range('byte_order_mark'), |
| 495 self.class_range('non_primary_whitespace')]) |
| 493 self.add_predefined_range( | 496 self.add_predefined_range( |
| 494 'letter', [ | 497 'letter', [ |
| 495 (65, 90), (97, 122), (170, 170), (181, 181), | 498 (65, 90), (97, 122), (170, 170), (181, 181), |
| 496 (186, 186), (192, 214), (216, 246), (248, 255), | 499 (186, 186), (192, 214), (216, 246), (248, 255), |
| 497 self.class_range('non_latin_1_letter')]) | 500 self.class_range('non_primary_letter')]) |
| 498 self.add_predefined_range( | 501 self.add_predefined_range( |
| 499 'line_terminator', | 502 'line_terminator', |
| 500 [(10, 10), (13, 13), self.class_range('non_latin_1_line_terminator')]) | 503 [(10, 10), (13, 13), self.class_range('non_primary_line_terminator')]) |
| 501 self.add_predefined_range( | 504 self.add_predefined_range( |
| 502 'identifier_part_not_letter', | 505 'identifier_part_not_letter', |
| 503 [(48, 57), (95, 95), | 506 [(48, 57), (95, 95), |
| 504 self.class_range('non_latin_1_identifier_part_not_letter')]) | 507 self.class_range('non_primary_identifier_part_not_letter')]) |
| 505 | 508 |
| 506 class Utf8Encoding(KeyEncoding): | 509 class Utf8Encoding(KeyEncoding): |
| 507 | 510 |
| 508 def __init__(self): | 511 def __init__(self): |
| 509 super(Utf8Encoding, self).__init__( | 512 super(Utf8Encoding, self).__init__( |
| 510 'utf8', | 513 'utf8', |
| 511 (1, 127), | 514 (1, 127), |
| 512 ['eos', 'zero', 'byte_order_mark', | 515 ['eos', 'zero', 'byte_order_mark', |
| 513 'non_ascii_whitespace', | 516 'non_primary_whitespace', |
| 514 'non_ascii_letter', | 517 'non_primary_letter', |
| 515 'non_ascii_identifier_part_not_letter', | 518 'non_primary_identifier_part_not_letter', |
| 516 'non_ascii_line_terminator', | 519 'non_primary_line_terminator', |
| 517 'non_ascii_everything_else']) | 520 'non_primary_everything_else']) |
| 518 self.add_predefined_range( | 521 self.add_predefined_range( |
| 519 'whitespace', | 522 'whitespace', |
| 520 [(9, 9), (11, 12), (32, 32), self.class_range('non_ascii_whitespace')]) | 523 [(9, 9), (11, 12), (32, 32), |
| 524 self.class_range('byte_order_mark'), |
| 525 self.class_range('non_primary_whitespace')]) |
| 521 self.add_predefined_range( | 526 self.add_predefined_range( |
| 522 'letter', [(65, 90), (97, 122), self.class_range('non_ascii_letter')]) | 527 'letter', [(65, 90), (97, 122), self.class_range('non_primary_letter')]) |
| 523 self.add_predefined_range( | 528 self.add_predefined_range( |
| 524 'line_terminator', | 529 'line_terminator', |
| 525 [(10, 10), (13, 13), self.class_range('non_ascii_line_terminator')]) | 530 [(10, 10), (13, 13), self.class_range('non_primary_line_terminator')]) |
| 526 self.add_predefined_range( | 531 self.add_predefined_range( |
| 527 'identifier_part_not_letter', | 532 'identifier_part_not_letter', |
| 528 [(48, 57), (95, 95), | 533 [(48, 57), (95, 95), |
| 529 self.class_range('non_ascii_identifier_part_not_letter')]) | 534 self.class_range('non_primary_identifier_part_not_letter')]) |
| OLD | NEW |