Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 1 | """aetypes - Python objects representing various AE types.""" |
| 2 | |
Jack Jansen | 5a6fdcd | 2001-08-25 12:15:04 +0000 | [diff] [blame] | 3 | from Carbon.AppleEvents import * |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 4 | import struct |
| 5 | from types import * |
| 6 | import string |
| 7 | |
| 8 | # |
| 9 | # convoluted, since there are cyclic dependencies between this file and |
| 10 | # aetools_convert. |
| 11 | # |
Jack Jansen | 8b77767 | 2002-08-07 14:49:00 +0000 | [diff] [blame] | 12 | def pack(*args, **kwargs): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 13 | from aepack import pack |
| 14 | return pack( *args, **kwargs) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 15 | |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 16 | def nice(s): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 17 | """'nice' representation of an object""" |
| 18 | if type(s) is StringType: return repr(s) |
| 19 | else: return str(s) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 20 | |
| 21 | class Unknown: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 22 | """An uninterpreted AE object""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 23 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 24 | def __init__(self, type, data): |
| 25 | self.type = type |
| 26 | self.data = data |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 27 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 28 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 29 | return "Unknown(%r, %r)" % (self.type, self.data) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 30 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 31 | def __aepack__(self): |
| 32 | return pack(self.data, self.type) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 33 | |
| 34 | class Enum: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 35 | """An AE enumeration value""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 36 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 37 | def __init__(self, enum): |
| 38 | self.enum = "%-4.4s" % str(enum) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 39 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 40 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 41 | return "Enum(%r)" % (self.enum,) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 42 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 43 | def __str__(self): |
| 44 | return string.strip(self.enum) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 45 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 46 | def __aepack__(self): |
| 47 | return pack(self.enum, typeEnumeration) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 48 | |
| 49 | def IsEnum(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 50 | return isinstance(x, Enum) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 51 | |
| 52 | def mkenum(enum): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 53 | if IsEnum(enum): return enum |
| 54 | return Enum(enum) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 55 | |
Jack Jansen | 8b77767 | 2002-08-07 14:49:00 +0000 | [diff] [blame] | 56 | # Jack changed the way this is done |
| 57 | class InsertionLoc: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 58 | def __init__(self, of, pos): |
| 59 | self.of = of |
| 60 | self.pos = pos |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 61 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 62 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 63 | return "InsertionLoc(%r, %r)" % (self.of, self.pos) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 64 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 65 | def __aepack__(self): |
| 66 | rec = {'kobj': self.of, 'kpos': self.pos} |
| 67 | return pack(rec, forcetype='insl') |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 68 | |
Jack Jansen | 8b77767 | 2002-08-07 14:49:00 +0000 | [diff] [blame] | 69 | # Convenience functions for dsp: |
| 70 | def beginning(of): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 71 | return InsertionLoc(of, Enum('bgng')) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 72 | |
Jack Jansen | 8b77767 | 2002-08-07 14:49:00 +0000 | [diff] [blame] | 73 | def end(of): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 74 | return InsertionLoc(of, Enum('end ')) |
Jack Jansen | 8b77767 | 2002-08-07 14:49:00 +0000 | [diff] [blame] | 75 | |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 76 | class Boolean: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 77 | """An AE boolean value""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 78 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 79 | def __init__(self, bool): |
| 80 | self.bool = (not not bool) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 81 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 82 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 83 | return "Boolean(%r)" % (self.bool,) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 84 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 85 | def __str__(self): |
| 86 | if self.bool: |
| 87 | return "True" |
| 88 | else: |
| 89 | return "False" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 90 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 91 | def __aepack__(self): |
| 92 | return pack(struct.pack('b', self.bool), 'bool') |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 93 | |
| 94 | def IsBoolean(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 95 | return isinstance(x, Boolean) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 96 | |
| 97 | def mkboolean(bool): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 98 | if IsBoolean(bool): return bool |
| 99 | return Boolean(bool) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 100 | |
| 101 | class Type: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 102 | """An AE 4-char typename object""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 103 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 104 | def __init__(self, type): |
| 105 | self.type = "%-4.4s" % str(type) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 106 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 107 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 108 | return "Type(%r)" % (self.type,) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 109 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 110 | def __str__(self): |
| 111 | return string.strip(self.type) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 112 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 113 | def __aepack__(self): |
| 114 | return pack(self.type, typeType) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 115 | |
| 116 | def IsType(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 117 | return isinstance(x, Type) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 118 | |
| 119 | def mktype(type): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 120 | if IsType(type): return type |
| 121 | return Type(type) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 122 | |
| 123 | |
| 124 | class Keyword: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 125 | """An AE 4-char keyword object""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 126 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 127 | def __init__(self, keyword): |
| 128 | self.keyword = "%-4.4s" % str(keyword) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 129 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 130 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 131 | return "Keyword(%r)" % `self.keyword` |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 132 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 133 | def __str__(self): |
| 134 | return string.strip(self.keyword) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 135 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 136 | def __aepack__(self): |
| 137 | return pack(self.keyword, typeKeyword) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 138 | |
| 139 | def IsKeyword(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 140 | return isinstance(x, Keyword) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 141 | |
| 142 | class Range: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 143 | """An AE range object""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 144 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 145 | def __init__(self, start, stop): |
| 146 | self.start = start |
| 147 | self.stop = stop |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 148 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 149 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 150 | return "Range(%r, %r)" % (self.start, self.stop) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 151 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 152 | def __str__(self): |
| 153 | return "%s thru %s" % (nice(self.start), nice(self.stop)) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 154 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 155 | def __aepack__(self): |
| 156 | return pack({'star': self.start, 'stop': self.stop}, 'rang') |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 157 | |
| 158 | def IsRange(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 159 | return isinstance(x, Range) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 160 | |
| 161 | class Comparison: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 162 | """An AE Comparison""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 163 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 164 | def __init__(self, obj1, relo, obj2): |
| 165 | self.obj1 = obj1 |
| 166 | self.relo = "%-4.4s" % str(relo) |
| 167 | self.obj2 = obj2 |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 168 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 169 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 170 | return "Comparison(%r, %r, %r)" % (self.obj1, self.relo, self.obj2) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 171 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 172 | def __str__(self): |
| 173 | return "%s %s %s" % (nice(self.obj1), string.strip(self.relo), nice(self.obj2)) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 174 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 175 | def __aepack__(self): |
| 176 | return pack({'obj1': self.obj1, |
| 177 | 'relo': mkenum(self.relo), |
| 178 | 'obj2': self.obj2}, |
| 179 | 'cmpd') |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 180 | |
| 181 | def IsComparison(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 182 | return isinstance(x, Comparison) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 183 | |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 184 | class NComparison(Comparison): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 185 | # The class attribute 'relo' must be set in a subclass |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 186 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 187 | def __init__(self, obj1, obj2): |
| 188 | Comparison.__init__(obj1, self.relo, obj2) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 189 | |
| 190 | class Ordinal: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 191 | """An AE Ordinal""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 192 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 193 | def __init__(self, abso): |
| 194 | # self.obj1 = obj1 |
| 195 | self.abso = "%-4.4s" % str(abso) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 196 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 197 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 198 | return "Ordinal(%r)" % (self.abso,) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 199 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 200 | def __str__(self): |
| 201 | return "%s" % (string.strip(self.abso)) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 202 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 203 | def __aepack__(self): |
| 204 | return pack(self.abso, 'abso') |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 205 | |
| 206 | def IsOrdinal(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 207 | return isinstance(x, Ordinal) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 208 | |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 209 | class NOrdinal(Ordinal): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 210 | # The class attribute 'abso' must be set in a subclass |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 211 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 212 | def __init__(self): |
| 213 | Ordinal.__init__(self, self.abso) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 214 | |
| 215 | class Logical: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 216 | """An AE logical expression object""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 217 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 218 | def __init__(self, logc, term): |
| 219 | self.logc = "%-4.4s" % str(logc) |
| 220 | self.term = term |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 221 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 222 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 223 | return "Logical(%r, %r)" % (self.logc, self.term) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 224 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 225 | def __str__(self): |
| 226 | if type(self.term) == ListType and len(self.term) == 2: |
| 227 | return "%s %s %s" % (nice(self.term[0]), |
| 228 | string.strip(self.logc), |
| 229 | nice(self.term[1])) |
| 230 | else: |
| 231 | return "%s(%s)" % (string.strip(self.logc), nice(self.term)) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 232 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 233 | def __aepack__(self): |
| 234 | return pack({'logc': mkenum(self.logc), 'term': self.term}, 'logi') |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 235 | |
| 236 | def IsLogical(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 237 | return isinstance(x, Logical) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 238 | |
| 239 | class StyledText: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 240 | """An AE object respresenting text in a certain style""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 241 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 242 | def __init__(self, style, text): |
| 243 | self.style = style |
| 244 | self.text = text |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 245 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 246 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 247 | return "StyledText(%r, %r)" % (self.style, self.text) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 248 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 249 | def __str__(self): |
| 250 | return self.text |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 251 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 252 | def __aepack__(self): |
| 253 | return pack({'ksty': self.style, 'ktxt': self.text}, 'STXT') |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 254 | |
| 255 | def IsStyledText(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 256 | return isinstance(x, StyledText) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 257 | |
| 258 | class AEText: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 259 | """An AE text object with style, script and language specified""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 260 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 261 | def __init__(self, script, style, text): |
| 262 | self.script = script |
| 263 | self.style = style |
| 264 | self.text = text |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 265 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 266 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 267 | return "AEText(%r, %r, %r)" % (self.script, self.style, self.text) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 268 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 269 | def __str__(self): |
| 270 | return self.text |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 271 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 272 | def __aepack__(self): |
| 273 | return pack({keyAEScriptTag: self.script, keyAEStyles: self.style, |
| 274 | keyAEText: self.text}, typeAEText) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 275 | |
| 276 | def IsAEText(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 277 | return isinstance(x, AEText) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 278 | |
| 279 | class IntlText: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 280 | """A text object with script and language specified""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 281 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 282 | def __init__(self, script, language, text): |
| 283 | self.script = script |
| 284 | self.language = language |
| 285 | self.text = text |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 286 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 287 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 288 | return "IntlText(%r, %r, %r)" % (self.script, self.language, self.text) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 289 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 290 | def __str__(self): |
| 291 | return self.text |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 292 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 293 | def __aepack__(self): |
| 294 | return pack(struct.pack('hh', self.script, self.language)+self.text, |
| 295 | typeIntlText) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 296 | |
| 297 | def IsIntlText(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 298 | return isinstance(x, IntlText) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 299 | |
| 300 | class IntlWritingCode: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 301 | """An object representing script and language""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 302 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 303 | def __init__(self, script, language): |
| 304 | self.script = script |
| 305 | self.language = language |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 306 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 307 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 308 | return "IntlWritingCode(%r, %r)" % (self.script, self.language) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 309 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 310 | def __str__(self): |
| 311 | return "script system %d, language %d"%(self.script, self.language) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 312 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 313 | def __aepack__(self): |
| 314 | return pack(struct.pack('hh', self.script, self.language), |
| 315 | typeIntlWritingCode) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 316 | |
| 317 | def IsIntlWritingCode(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 318 | return isinstance(x, IntlWritingCode) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 319 | |
| 320 | class QDPoint: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 321 | """A point""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 322 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 323 | def __init__(self, v, h): |
| 324 | self.v = v |
| 325 | self.h = h |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 326 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 327 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 328 | return "QDPoint(%r, %r)" % (self.v, self.h) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 329 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 330 | def __str__(self): |
| 331 | return "(%d, %d)"%(self.v, self.h) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 332 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 333 | def __aepack__(self): |
| 334 | return pack(struct.pack('hh', self.v, self.h), |
| 335 | typeQDPoint) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 336 | |
| 337 | def IsQDPoint(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 338 | return isinstance(x, QDPoint) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 339 | |
| 340 | class QDRectangle: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 341 | """A rectangle""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 342 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 343 | def __init__(self, v0, h0, v1, h1): |
| 344 | self.v0 = v0 |
| 345 | self.h0 = h0 |
| 346 | self.v1 = v1 |
| 347 | self.h1 = h1 |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 348 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 349 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 350 | return "QDRectangle(%r, %r, %r, %r)" % (self.v0, self.h0, self.v1, self.h1) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 351 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 352 | def __str__(self): |
| 353 | return "(%d, %d)-(%d, %d)"%(self.v0, self.h0, self.v1, self.h1) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 354 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 355 | def __aepack__(self): |
| 356 | return pack(struct.pack('hhhh', self.v0, self.h0, self.v1, self.h1), |
| 357 | typeQDRectangle) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 358 | |
| 359 | def IsQDRectangle(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 360 | return isinstance(x, QDRectangle) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 361 | |
| 362 | class RGBColor: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 363 | """An RGB color""" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 364 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 365 | def __init__(self, r, g, b): |
| 366 | self.r = r |
| 367 | self.g = g |
| 368 | self.b = b |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 369 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 370 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 371 | return "RGBColor(%r, %r, %r)" % (self.r, self.g, self.b) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 372 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 373 | def __str__(self): |
| 374 | return "0x%x red, 0x%x green, 0x%x blue"% (self.r, self.g, self.b) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 375 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 376 | def __aepack__(self): |
| 377 | return pack(struct.pack('hhh', self.r, self.g, self.b), |
| 378 | typeRGBColor) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 379 | |
| 380 | def IsRGBColor(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 381 | return isinstance(x, RGBColor) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 382 | |
| 383 | class ObjectSpecifier: |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 384 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 385 | """A class for constructing and manipulation AE object specifiers in python. |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 386 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 387 | An object specifier is actually a record with four fields: |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 388 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 389 | key type description |
| 390 | --- ---- ----------- |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 391 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 392 | 'want' type 4-char class code of thing we want, |
| 393 | e.g. word, paragraph or property |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 394 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 395 | 'form' enum how we specify which 'want' thing(s) we want, |
| 396 | e.g. by index, by range, by name, or by property specifier |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 397 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 398 | 'seld' any which thing(s) we want, |
| 399 | e.g. its index, its name, or its property specifier |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 400 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 401 | 'from' object the object in which it is contained, |
| 402 | or null, meaning look for it in the application |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 403 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 404 | Note that we don't call this class plain "Object", since that name |
| 405 | is likely to be used by the application. |
| 406 | """ |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 407 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 408 | def __init__(self, want, form, seld, fr = None): |
| 409 | self.want = want |
| 410 | self.form = form |
| 411 | self.seld = seld |
| 412 | self.fr = fr |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 413 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 414 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 415 | s = "ObjectSpecifier(%r, %r, %r" % (self.want, self.form, self.seld) |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 416 | if self.fr: |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 417 | s = s + ", %r)" % (self.fr,) |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 418 | else: |
| 419 | s = s + ")" |
| 420 | return s |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 421 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 422 | def __aepack__(self): |
| 423 | return pack({'want': mktype(self.want), |
| 424 | 'form': mkenum(self.form), |
| 425 | 'seld': self.seld, |
| 426 | 'from': self.fr}, |
| 427 | 'obj ') |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 428 | |
| 429 | def IsObjectSpecifier(x): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 430 | return isinstance(x, ObjectSpecifier) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 431 | |
| 432 | |
| 433 | # Backwards compatability, sigh... |
| 434 | class Property(ObjectSpecifier): |
| 435 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 436 | def __init__(self, which, fr = None, want='prop'): |
| 437 | ObjectSpecifier.__init__(self, want, 'prop', mktype(which), fr) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 438 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 439 | def __repr__(self): |
| 440 | if self.fr: |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 441 | return "Property(%r, %r)" % (self.seld.type, self.fr) |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 442 | else: |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 443 | return "Property(%r)" % (self.seld.type,) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 444 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 445 | def __str__(self): |
| 446 | if self.fr: |
| 447 | return "Property %s of %s" % (str(self.seld), str(self.fr)) |
| 448 | else: |
| 449 | return "Property %s" % str(self.seld) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 450 | |
| 451 | |
| 452 | class NProperty(ObjectSpecifier): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 453 | # Subclasses *must* self baseclass attributes: |
| 454 | # want is the type of this property |
| 455 | # which is the property name of this property |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 456 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 457 | def __init__(self, fr = None): |
| 458 | #try: |
| 459 | # dummy = self.want |
| 460 | #except: |
| 461 | # self.want = 'prop' |
| 462 | self.want = 'prop' |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 463 | ObjectSpecifier.__init__(self, self.want, 'prop', |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 464 | mktype(self.which), fr) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 465 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 466 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 467 | rv = "Property(%r" % (self.seld.type,) |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 468 | if self.fr: |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 469 | rv = rv + ", fr=%r" % (self.fr,) |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 470 | if self.want != 'prop': |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 471 | rv = rv + ", want=%r" % (self.want,) |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 472 | return rv + ")" |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 473 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 474 | def __str__(self): |
| 475 | if self.fr: |
| 476 | return "Property %s of %s" % (str(self.seld), str(self.fr)) |
| 477 | else: |
| 478 | return "Property %s" % str(self.seld) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 479 | |
| 480 | |
| 481 | class SelectableItem(ObjectSpecifier): |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 482 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 483 | def __init__(self, want, seld, fr = None): |
| 484 | t = type(seld) |
| 485 | if t == StringType: |
| 486 | form = 'name' |
| 487 | elif IsRange(seld): |
| 488 | form = 'rang' |
| 489 | elif IsComparison(seld) or IsLogical(seld): |
| 490 | form = 'test' |
| 491 | elif t == TupleType: |
| 492 | # Breakout: specify both form and seld in a tuple |
| 493 | # (if you want ID or rele or somesuch) |
| 494 | form, seld = seld |
| 495 | else: |
| 496 | form = 'indx' |
| 497 | ObjectSpecifier.__init__(self, want, form, seld, fr) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 498 | |
| 499 | |
| 500 | class ComponentItem(SelectableItem): |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 501 | # Derived classes *must* set the *class attribute* 'want' to some constant |
| 502 | # Also, dictionaries _propdict and _elemdict must be set to map property |
| 503 | # and element names to the correct classes |
Jack Jansen | 7e0bc11 | 2003-03-21 12:04:19 +0000 | [diff] [blame] | 504 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 505 | _propdict = {} |
| 506 | _elemdict = {} |
| 507 | def __init__(self, which, fr = None): |
| 508 | SelectableItem.__init__(self, self.want, which, fr) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 509 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 510 | def __repr__(self): |
| 511 | if not self.fr: |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 512 | return "%s(%r)" % (self.__class__.__name__, self.seld) |
| 513 | return "%s(%r, %r)" % (self.__class__.__name__, self.seld, self.fr) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 514 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 515 | def __str__(self): |
| 516 | seld = self.seld |
| 517 | if type(seld) == StringType: |
| 518 | ss = repr(seld) |
| 519 | elif IsRange(seld): |
| 520 | start, stop = seld.start, seld.stop |
| 521 | if type(start) == InstanceType == type(stop) and \ |
| 522 | start.__class__ == self.__class__ == stop.__class__: |
| 523 | ss = str(start.seld) + " thru " + str(stop.seld) |
| 524 | else: |
| 525 | ss = str(seld) |
| 526 | else: |
| 527 | ss = str(seld) |
| 528 | s = "%s %s" % (self.__class__.__name__, ss) |
| 529 | if self.fr: s = s + " of %s" % str(self.fr) |
| 530 | return s |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 531 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 532 | def __getattr__(self, name): |
| 533 | if self._elemdict.has_key(name): |
| 534 | cls = self._elemdict[name] |
| 535 | return DelayedComponentItem(cls, self) |
| 536 | if self._propdict.has_key(name): |
| 537 | cls = self._propdict[name] |
| 538 | return cls(self) |
| 539 | raise AttributeError, name |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 540 | |
| 541 | |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 542 | class DelayedComponentItem: |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 543 | def __init__(self, compclass, fr): |
| 544 | self.compclass = compclass |
| 545 | self.fr = fr |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 546 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 547 | def __call__(self, which): |
| 548 | return self.compclass(which, self.fr) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 549 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 550 | def __repr__(self): |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 551 | return "%s(???, %r)" % (self.__class__.__name__, self.fr) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame^] | 552 | |
Jack Jansen | 0ae3220 | 2003-04-09 13:25:43 +0000 | [diff] [blame] | 553 | def __str__(self): |
| 554 | return "selector for element %s of %s"%(self.__class__.__name__, str(self.fr)) |
Jack Jansen | d0fc42f | 2001-08-19 22:05:06 +0000 | [diff] [blame] | 555 | |
| 556 | template = """ |
| 557 | class %s(ComponentItem): want = '%s' |
| 558 | """ |
| 559 | |
| 560 | exec template % ("Text", 'text') |
| 561 | exec template % ("Character", 'cha ') |
| 562 | exec template % ("Word", 'cwor') |
| 563 | exec template % ("Line", 'clin') |
| 564 | exec template % ("paragraph", 'cpar') |
| 565 | exec template % ("Window", 'cwin') |
| 566 | exec template % ("Document", 'docu') |
| 567 | exec template % ("File", 'file') |
| 568 | exec template % ("InsertionPoint", 'cins') |