summaryrefslogtreecommitdiff
path: root/pdfrw/objects/pdfarray.py
blob: 8cf6bbb015861d20014aa0ae7e7c751ff45b1ef7 (plain)
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
# A part of pdfrw (pdfrw.googlecode.com)
# Copyright (C) 2006-2012 Patrick Maupin, Austin, Texas
# MIT license -- See LICENSE.txt for details

from pdfrw.objects.pdfindirect import PdfIndirect
from pdfrw.objects.pdfobject import PdfObject

def _resolved():
    pass

class PdfArray(list):
    ''' A PdfArray maps the PDF file array object into a Python list.
        It has an indirect attribute which defaults to False.
    '''
    indirect = False

    def __init__(self, source=[]):
        self._resolve = self._resolver
        self.extend(source)

    def _resolver(self, isinstance=isinstance, enumerate=enumerate,
                        listiter=list.__iter__,
                        PdfIndirect=PdfIndirect, resolved=_resolved,
                        PdfNull=PdfObject('null')):
        for index, value in enumerate(list.__iter__(self)):
                if isinstance(value, PdfIndirect):
                    value = value.real_value()
                    if value is None:
                        value = PdfNull
                    self[index] = value
        self._resolve = resolved

    def __getitem__(self, index, listget=list.__getitem__):
        self._resolve()
        return listget(self, index)

    def __getslice__(self, index, listget=list.__getslice__):
        self._resolve()
        return listget(self, index)

    def __iter__(self, listiter=list.__iter__):
        self._resolve()
        return listiter(self)

    def count(self, item):
        self._resolve()
        return list.count(self, item)
    def index(self, item):
        self._resolve()
        return list.index(self, item)
    def remove(self, item):
        self._resolve()
        return list.remove(self, item)
    def sort(self, *args, **kw):
        self._resolve()
        return list.sort(self, *args, **kw)
    def pop(self, *args):
        self._resolve()
        return list.pop(self, *args)