src/reportlab/graphics/barcode/code93.py
author robin
Tue, 19 Nov 2013 13:50:34 +0000
branchpy33
changeset 3794 398ea04239b5
parent 3723 99aa837b6703
child 3975 4a3599863c11
permissions -rw-r--r--
string module usage minimization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     1
#
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     2
# Copyright (c) 2000 Tyler C. Sarna <tsarna@sarna.org>
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     3
# All rights reserved.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     4
#
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     5
# Redistribution and use in source and binary forms, with or without
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     6
# modification, are permitted provided that the following conditions
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     7
# are met:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     8
# 1. Redistributions of source code must retain the above copyright
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
     9
#    notice, this list of conditions and the following disclaimer.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    10
# 2. Redistributions in binary form must reproduce the above copyright
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    11
#    notice, this list of conditions and the following disclaimer in the
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    12
#    documentation and/or other materials provided with the distribution.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    13
# 3. All advertising materials mentioning features or use of this software
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    14
#    must display the following acknowledgement:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    15
#      This product includes software developed by Tyler C. Sarna.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    16
# 4. Neither the name of the author nor the names of contributors
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    17
#    may be used to endorse or promote products derived from this software
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    18
#    without specific prior written permission.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    19
#
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    20
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    21
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    22
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    23
# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    24
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    25
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    26
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    27
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    28
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    29
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    30
# POSSIBILITY OF SUCH DAMAGE.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    31
#
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    32
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    33
from reportlab.lib.units import inch
3721
0c93dd8ff567 initial changes from 2to3-3.3
rptlab
parents: 3326
diff changeset
    34
from .common import MultiWidthBarcode
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    35
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    36
_patterns = {
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    37
  '0' : ('AcAaAb', 0),  '1' : ('AaAbAc', 1),  '2' : ('AaAcAb', 2),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    38
  '3' : ('AaAdAa', 3),  '4' : ('AbAaAc', 4),  '5' : ('AbAbAb', 5),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    39
  '6' : ('AbAcAa', 6),  '7' : ('AaAaAd', 7),  '8' : ('AcAbAa', 8),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    40
  '9' : ('AdAaAa', 9),  'A' : ('BaAaAc', 10), 'B' : ('BaAbAb', 11),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    41
  'C' : ('BaAcAa', 12), 'D' : ('BbAaAb', 13), 'E' : ('BbAbAa', 14),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    42
  'F' : ('BcAaAa', 15), 'G' : ('AaBaAc', 16), 'H' : ('AaBbAb', 17),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    43
  'I' : ('AaBcAa', 18), 'J' : ('AbBaAb', 19), 'K' : ('AcBaAa', 20),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    44
  'L' : ('AaAaBc', 21), 'M' : ('AaAbBb', 22), 'N' : ('AaAcBa', 23),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    45
  'O' : ('AbAaBb', 24), 'P' : ('AcAaBa', 25), 'Q' : ('BaBaAb', 26),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    46
  'R' : ('BaBbAa', 27), 'S' : ('BaAaBb', 28), 'T' : ('BaAbBa', 29),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    47
  'U' : ('BbAaBa', 30), 'V' : ('BbBaAa', 31), 'W' : ('AaBaBb', 32),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    48
  'X' : ('AaBbBa', 33), 'Y' : ('AbBaBa', 34), 'Z' : ('AbCaAa', 35),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    49
  '-' : ('AbAaCa', 36), '.' : ('CaAaAb', 37), ' ' : ('CaAbAa', 38),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    50
  '$' : ('CbAaAa', 39), '/' : ('AaBaCa', 40), '+' : ('AaCaBa', 41),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    51
  '%' : ('BaAaCa', 42), '#' : ('AbAbBa', 43), '!' : ('CaBaAa', 44),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    52
  '=' : ('CaAaBa', 45), '&' : ('AbBbAa', 46),
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    53
  'start' : ('AaAaDa', -1),  'stop' : ('AaAaDaA', -2)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    54
}
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    55
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    56
_charsbyval = {}
3723
99aa837b6703 second stage of port to Python 3.3; working hello world
rptlab
parents: 3721
diff changeset
    57
for k, v in _patterns.items():
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    58
    _charsbyval[v[1]] = k
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    59
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    60
_extended = {
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    61
    '\x00' : '!U',    '\x01' : '#A',    '\x02' : '#B',    '\x03' : '#C',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    62
    '\x04' : '#D',    '\x05' : '#E',    '\x06' : '#F',    '\x07' : '#G',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    63
    '\x08' : '#H',    '\x09' : '#I',    '\x0a' : '#J',    '\x0b' : '#K',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    64
    '\x0c' : '#L',    '\x0d' : '#M',    '\x0e' : '#N',    '\x0f' : '#O',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    65
    '\x10' : '#P',    '\x11' : '#Q',    '\x12' : '#R',    '\x13' : '#S',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    66
    '\x14' : '#T',    '\x15' : '#U',    '\x16' : '#V',    '\x17' : '#W',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    67
    '\x18' : '#X',    '\x19' : '#Y',    '\x1a' : '#Z',    '\x1b' : '!A',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    68
    '\x1c' : '!B',    '\x1d' : '!C',    '\x1e' : '!D',    '\x1f' : '!E',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    69
    '!'    : '=A',    '"'    : '=B',    '#'    : '=C',    '$'    : '=D',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    70
    '%'    : '=E',    '&'    : '=F',    '\''   : '=G',    '('    : '=H',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    71
    ')'    : '=I',    '*'    : '=J',    '+'    : '=K',    ','    : '=L',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    72
    '/'    : '=O',    ':'    : '=Z',    ';'    : '!F',    '<'    : '!G',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    73
    '='    : '!H',    '>'    : '!I',    '?'    : '!J',    '@'    : '!V',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    74
    '['    : '!K',    '\\'   : '!L',    ']'    : '!M',    '^'    : '!N',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    75
    '_'    : '!O',    '`'    : '!W',    'a'    : '&A',    'b'    : '&B',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    76
    'c'    : '&C',    'd'    : '&D',    'e'    : '&E',    'f'    : '&F',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    77
    'g'    : '&G',    'h'    : '&H',    'i'    : '&I',    'j'    : '&J',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    78
    'k'    : '&K',    'l'    : '&L',    'm'    : '&M',    'n'    : '&N',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    79
    'o'    : '&O',    'p'    : '&P',    'q'    : '&Q',    'r'    : '&R',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    80
    's'    : '&S',    't'    : '&T',    'u'    : '&U',    'v'    : '&V',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    81
    'w'    : '&W',    'x'    : '&X',    'y'    : '&Y',    'z'    : '&Z',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    82
    '{'    : '!P',    '|'    : '!Q',    '}'    : '!R',    '~'    : '!S',
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    83
    '\x7f' : '!T'
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    84
}
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    85
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    86
def _encode93(str):
3721
0c93dd8ff567 initial changes from 2to3-3.3
rptlab
parents: 3326
diff changeset
    87
    s = list(str)
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    88
    s.reverse()
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    89
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    90
    # compute 'C' checksum
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    91
    i = 0; v = 1; c = 0
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    92
    while i < len(s):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    93
        c = c + v * _patterns[s[i]][1]
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    94
        i = i + 1; v = v + 1
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    95
        if v > 20:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    96
            v = 1
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    97
    s.insert(0, _charsbyval[c % 47])
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    98
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
    99
    # compute 'K' checksum
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   100
    i = 0; v = 1; c = 0
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   101
    while i < len(s):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   102
        c = c + v * _patterns[s[i]][1]
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   103
        i = i + 1; v = v + 1
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   104
        if v > 15:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   105
            v = 1
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   106
    s.insert(0, _charsbyval[c % 47])
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   107
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   108
    s.reverse()
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   109
3794
398ea04239b5 string module usage minimization
robin
parents: 3723
diff changeset
   110
    return ''.join(s)
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   111
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   112
class _Code93Base(MultiWidthBarcode):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   113
    barWidth = inch * 0.0075
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   114
    lquiet = None
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   115
    rquiet = None
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   116
    quiet = 1
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   117
    barHeight = None
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   118
    stop = 1
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   119
    def __init__(self, value='', **args):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   120
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   121
        if type(value) is type(1):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   122
            value = str(value)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   123
            
3721
0c93dd8ff567 initial changes from 2to3-3.3
rptlab
parents: 3326
diff changeset
   124
        for (k, v) in args.items():
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   125
            setattr(self, k, v)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   126
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   127
        if self.quiet:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   128
            if self.lquiet is None:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   129
                self.lquiet = max(inch * 0.25, self.barWidth * 10.0)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   130
                self.rquiet = max(inch * 0.25, self.barWidth * 10.0)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   131
        else:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   132
            self.lquiet = self.rquiet = 0.0
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   133
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   134
        MultiWidthBarcode.__init__(self, value)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   135
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   136
    def decompose(self):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   137
        dval = self.stop and [_patterns['start'][0]] or []
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   138
        dval += [_patterns[c][0] for c in self.encoded]
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   139
        if self.stop: dval.append(_patterns['stop'][0])
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   140
        self.decomposed = ''.join(dval)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   141
        return self.decomposed
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   142
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   143
class Standard93(_Code93Base):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   144
    """
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   145
    Code 93 is a Uppercase alphanumeric symbology with some punctuation.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   146
    See Extended Code 93 for a variant that can represent the entire
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   147
    128 characrter ASCII set.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   148
    
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   149
    Options that may be passed to constructor:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   150
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   151
        value (int, or numeric string. required.):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   152
            The value to encode.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   153
   
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   154
        barWidth (float, default .0075):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   155
            X-Dimension, or width of the smallest element
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   156
            Minumum is .0075 inch (7.5 mils).
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   157
            
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   158
        barHeight (float, see default below):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   159
            Height of the symbol.  Default is the height of the two
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   160
            bearer bars (if they exist) plus the greater of .25 inch
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   161
            or .15 times the symbol's length.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   162
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   163
        quiet (bool, default 1):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   164
            Wether to include quiet zones in the symbol.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   165
            
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   166
        lquiet (float, see default below):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   167
            Quiet zone size to left of code, if quiet is true.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   168
            Default is the greater of .25 inch, or 10 barWidth
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   169
            
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   170
        rquiet (float, defaults as above):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   171
            Quiet zone size to right left of code, if quiet is true.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   172
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   173
        stop (bool, default 1):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   174
            Whether to include start/stop symbols.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   175
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   176
    Sources of Information on Code 93:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   177
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   178
    http://www.semiconductor.agilent.com/barcode/sg/Misc/code_93.html
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   179
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   180
    Official Spec, "NSI/AIM BC5-1995, USS" is available for US$45 from
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   181
    http://www.aimglobal.org/aimstore/
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   182
    """
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   183
    def validate(self):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   184
        vval = ""
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   185
        self.valid = 1
3794
398ea04239b5 string module usage minimization
robin
parents: 3723
diff changeset
   186
        for c in self.value.upper():
3326
ce725978d11c Initial Python3 compatibility fixes
damian
parents: 2964
diff changeset
   187
            if c not in _patterns:
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   188
                self.valid = 0
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   189
                continue
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   190
            vval = vval + c
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   191
        self.validated = vval
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   192
        return vval
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   193
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   194
    def encode(self):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   195
        self.encoded = _encode93(self.validated)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   196
        return self.encoded
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   197
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   198
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   199
class Extended93(_Code93Base):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   200
    """
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   201
    Extended Code 93 is a convention for encoding the entire 128 character
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   202
    set using pairs of characters to represent the characters missing in
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   203
    Standard Code 93. It is very much like Extended Code 39 in that way.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   204
    
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   205
    See Standard93 for arguments.
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   206
    """    
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   207
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   208
    def validate(self):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   209
        vval = []
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   210
        self.valid = 1
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   211
        a = vval.append
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   212
        for c in self.value:
3326
ce725978d11c Initial Python3 compatibility fixes
damian
parents: 2964
diff changeset
   213
            if c not in _patterns and c not in _extended:
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   214
                self.valid = 0
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   215
                continue
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   216
            a(c)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   217
        self.validated = ''.join(vval)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   218
        return self.validated
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   219
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   220
    def encode(self):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   221
        self.encoded = ""
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   222
        for c in self.validated:
3326
ce725978d11c Initial Python3 compatibility fixes
damian
parents: 2964
diff changeset
   223
            if c in _patterns:
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   224
                self.encoded = self.encoded + c
3326
ce725978d11c Initial Python3 compatibility fixes
damian
parents: 2964
diff changeset
   225
            elif c in _extended:
2587
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   226
                self.encoded = self.encoded + _extended[c]
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   227
            else:
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   228
                raise ValueError
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   229
        self.encoded = _encode93(self.encoded)
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   230
        return self.encoded
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   231
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   232
    def _humanText(self):
8984967879af reportlab: barcode moved to reportlab/graphics
rgbecker
parents:
diff changeset
   233
        return self.validated+self.encoded[-2:]