summaryrefslogtreecommitdiff
path: root/pdfrw/objects/pdfarray.py
blob: b6627556f85f587e9b8a6cb2260e134c7981cfcb (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
60
61
62
63
64
65
66
67
# A part of pdfrw (https://github.com/pmaupin/pdfrw)
# Copyright (C) 2006-2015 Patrick Maupin, Austin, Texas
# MIT license -- See LICENSE.txt for details

from .pdfindirect import PdfIndirect
from .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)

    try:
        def __getslice__(self, i, j, listget=list.__getslice__):
            self._resolve()
            return listget(self, i, j)
    except AttributeError:
        pass

    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)