src/reportlab/pdfbase/pdfpattern.py
author robin
Tue, 19 Nov 2013 13:50:34 +0000
branchpy33
changeset 3794 398ea04239b5
parent 3721 0c93dd8ff567
child 3800 e8547b00eb59
permissions -rw-r--r--
string module usage minimization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3032
22224b1b4d24 New docstrings mainly for module titles
damian
parents: 2964
diff changeset
     1
__doc__="""helper for importing pdf structures into a ReportLab generated document
1660
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
     2
"""
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
     3
from reportlab.pdfbase.pdfdoc import format
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
     4
class PDFPattern:
3317
7cc62d990f32 pdfform/pdfpattern.py: add __PDFObject__ to classes (patch from Arnaud Fontaine <arnaud@andesi.org>
rgbecker
parents: 3032
diff changeset
     5
    __PDFObject__ = True
1660
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
     6
    __RefOnly__ = 1
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
     7
    def __init__(self, pattern_sequence, **keywordargs):
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
     8
        """
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
     9
        Description of a kind of PDF object using a pattern.
1683
7fa753e4420a Removed all trailing whitespace
andy_robinson
parents: 1660
diff changeset
    10
1660
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    11
        Pattern sequence should contain strings or singletons of form [string].
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    12
        Strings are literal strings to be used in the object.
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    13
        Singletons are names of keyword arguments to include.
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    14
        Keyword arguments can be non-instances which are substituted directly in string conversion,
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    15
        or they can be object instances in which case they should be pdfdoc.* style
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    16
        objects with a x.format(doc) method.
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    17
        Keyword arguments may be set on initialization or subsequently using __setitem__, before format.
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    18
        "constant object" instances can also be inserted in the patterns.
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    19
        """
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    20
        self.pattern = pattern_sequence
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    21
        self.arguments = keywordargs
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    22
        from types import StringType, InstanceType
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    23
        toptypes = (StringType, InstanceType)
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    24
        for x in pattern_sequence:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    25
            if type(x) not in toptypes:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    26
                if len(x)!=1:
3721
0c93dd8ff567 initial changes from 2to3-3.3
rptlab
parents: 3317
diff changeset
    27
                    raise ValueError("sequence elts must be strings or singletons containing strings: "+repr(x))
1660
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    28
                if type(x[0]) is not StringType:
3721
0c93dd8ff567 initial changes from 2to3-3.3
rptlab
parents: 3317
diff changeset
    29
                    raise ValueError("Singletons must contain strings or instances only: "+repr(x[0]))
1660
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    30
    def __setitem__(self, item, value):
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    31
        self.arguments[item] = value
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    32
    def __getitem__(self, item):
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    33
        return self.arguments[item]
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    34
    def format(self, document):
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    35
        L = []
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    36
        arguments = self.arguments
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    37
        from types import StringType, InstanceType
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    38
        for x in self.pattern:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    39
            tx = type(x)
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    40
            if tx is StringType:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    41
                L.append(x)
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    42
            elif tx is InstanceType:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    43
                L.append( x.format(document) )
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    44
            else:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    45
                name = x[0]
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    46
                value = arguments.get(name, None)
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    47
                if value is None:
3721
0c93dd8ff567 initial changes from 2to3-3.3
rptlab
parents: 3317
diff changeset
    48
                    raise ValueError("%s value not defined" % repr(name))
1660
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    49
                if type(value) is InstanceType:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    50
                    #L.append( value.format(document) )
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    51
                    L.append(format(value, document))
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    52
                else:
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    53
                    L.append( str(value) )
3794
398ea04239b5 string module usage minimization
robin
parents: 3721
diff changeset
    54
        return "".join(L)
1660
c93476060b9d simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff changeset
    55
1683
7fa753e4420a Removed all trailing whitespace
andy_robinson
parents: 1660
diff changeset
    56