| 540 | return search(self.catalog['Outlines'], 0) |
| 541 | |
| 542 | def lookup_name(self, cat, key): |
| 543 | try: |
| 544 | names = dict_value(self.catalog['Names']) |
| 545 | except (PDFTypeError, KeyError): |
| 546 | raise KeyError((cat,key)) |
| 547 | # may raise KeyError |
| 548 | d0 = dict_value(names[cat]) |
| 549 | def lookup(d): |
| 550 | if 'Limits' in d: |
| 551 | (k1,k2) = list_value(d['Limits']) |
| 552 | if key < k1 or k2 < key: return None |
| 553 | if 'Names' in d: |
| 554 | objs = list_value(d['Names']) |
| 555 | names = dict(choplist(2, objs)) |
| 556 | return names[key] |
| 557 | if 'Kids' in d: |
| 558 | for c in list_value(d['Kids']): |
| 559 | v = lookup(dict_value(c)) |
| 560 | if v: return v |
| 561 | raise KeyError((cat,key)) |
| 562 | return lookup(d0) |
| 563 | |
| 564 | def get_dest(self, name): |
| 565 | try: |