baetypes.py :  » Language-Interface » ChinesePython » chinesepython2.1.3-0.4 » Mac » Contrib » PythonScript » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Language Interface » ChinesePython 
ChinesePython » chinesepython2.1.3 0.4 » Mac » Contrib » PythonScript » baetypes.py
"""aetypes - Python objects representing various AE types."""

from AppleEvents import *
import struct
from types import *
import string

#
# convoluted, since there are cyclic dependencies between this file and
# aetools_convert.
#
def pack(*args):
  from aepack import pack
  return apply(pack, args)
  
def IsSubclass(cls, base):
  """Test whether CLASS1 is the same as or a subclass of CLASS2"""
  # Loop to optimize for single inheritance
  while 1:
    if cls is base: return 1
    if len(cls.__bases__) <> 1: break
    cls = cls.__bases__[0]
  # Recurse to cope with multiple inheritance
  for c in cls.__bases__:
    if IsSubclass(c, base): return 1
  return 0

def IsInstance(x, cls):
  """Test whether OBJECT is an instance of (a subclass of) CLASS"""
  return type(x) is InstanceType and IsSubclass(x.__class__, cls)

def nice(s):
  """'nice' representation of an object"""
  if type(s) is StringType: return repr(s)
  else: return str(s)

class Unknown:
  """An uninterpreted AE object"""
  
  def __init__(self, type, data):
    self.type = type
    self.data = data
  
  def __repr__(self):
    return "Unknown(%s, %s)" % (`self.type`, `self.data`)
  
  def __aepack__(self):
    return pack(self.data, self.type)

class Enum:
  """An AE enumeration value"""
  
  def __init__(self, enum):
    self.enum = "%-4.4s" % str(enum)
  
  def __repr__(self):
    return "Enum(%s)" % `self.enum`
  
  def __str__(self):
    return string.strip(self.enum)
  
  def __aepack__(self):
    return pack(self.enum, typeEnumeration)

def IsEnum(x):
  return IsInstance(x, Enum)

def mkenum(enum):
#  print enum
  if IsEnum(enum): return enum
  return Enum(enum)

class Boolean:
  """An AE boolean value"""
  
  def __init__(self, bool):
    if bool:
      self.bool = "%-4.4s" % str(typeTrue)
    else:
      self.bool = "%-4.4s" % str(typeFalse)
  
  def __repr__(self):
    return "Boolean(%s)" % self.bool
  
  def __str__(self):
    return self.bool
  
  def __aepack__(self):
    if self.bool == 'true':
      return pack('', typeTrue)
    else:
      return pack('', typeFalse)

def IsBoolean(x):
  return IsInstance(x, Boolean)

def mkboolean(bool):
#  print bool
  if IsBoolean(bool): return bool
  return Boolean(bool)

class Type:
  """An AE 4-char typename object"""
  
  def __init__(self, _type):
    self.type = "%-4.4s" % str(_type)
    
  def __repr__(self):
    return "Type(%s)" % `self.type`
  
  def __str__(self):
    return string.strip(self.type)
  
  def __aepack__(self):
#    print self.type, typeType
    return pack(self.type, typeType)

def IsType(x):
  return IsInstance(x, Type)

def mktype(_type):
  # Should check for apple ID codes, will allow 
  if IsType(_type): return _type
  if type(_type) <> StringType: return _type
  if len(_type) <> 4: return Type(eval('type' + _type))
  return Type(_type)


class Keyword:
  """An AE 4-char keyword object"""
  
  def __init__(self, keyword):
    self.keyword = "%-4.4s" % str(keyword)
  
  def __repr__(self):
    return "Keyword(%s)" % `self.keyword`
  
  def __str__(self):
    return string.strip(self.keyword)
  
  def __aepack__(self):
    return pack(self.keyword, typeKeyword)

def IsKeyword(x):
  return IsInstance(x, Keyword)

class Range:
  """An AE range object"""
  
  def __init__(self, start, stop):
    self.start = start
    self.stop = stop
  
  def __repr__(self):
    return "Range(%s, %s)" % (`self.start`, `self.stop`)
  
  def __str__(self):
    return "%s thru %s" % (nice(self.start), nice(self.stop))
  
  def __aepack__(self):
    return pack({'star': self.start, 'stop': self.stop}, 'rang')

def IsRange(x):
  return IsInstance(x, Range)

class Comparison:
  """An AE Comparison"""
  
  def __init__(self, obj1, relo, obj2):
    self.obj1 = obj1
    self.relo = "%-4.4s" % str(relo)
    self.obj2 = obj2
  
  def __repr__(self):
    return "Comparison(%s, %s, %s)" % (`self.obj1`, `self.relo`, `self.obj2`)
  
  def __str__(self):
    return "%s %s %s" % (nice(self.obj1), string.strip(self.relo), nice(self.obj2))
  
  def __aepack__(self):
    return pack({'obj1': self.obj1,
           'relo': mkenum(self.relo),
           'obj2': self.obj2},
          'cmpd')

def IsComparison(x):
  return IsInstance(x, Comparison)
  
class NComparison(Comparison):
  # The class attribute 'relo' must be set in a subclass
  
  def __init__(self, obj1, obj2):
    Comparison.__init__(obj1, self.relo, obj2)

class Ordinal:
  """An AE Ordinal"""
  
  def __init__(self, ord):
    self.ord = ord
  
  def __repr__(self):
    return  "baetypes.Ordinal(%s)" % `self.ord`
  
  def __str__(self):
    return "%s" % (string.strip(self.ord))
  
  def __aepack__(self):
    return pack(self.ord, typeAbsoluteOrdinal)

def IsOrdinal(x):
#  print 'IsOrdinal', x, IsInstance(x, Ordinal)
  return IsInstance(x, Ordinal)
  
def mkOrdinal(Ord):
  if IsOrdinal(Ord): return Ord
  return Ordinal(Ord)


  
class NOrdinal(Ordinal):
  # The class attribute 'abso' must be set in a subclass
  
  def __init__(self ):
#    print 'NOrdinal', self.abso
    Ordinal.__init__(self, self.abso)

class Logical:
  """An AE logical expression object"""
  
  def __init__(self, logc, term):
    self.logc = "%-4.4s" % str(logc)
    self.term = term
  
  def __repr__(self):
    return "Logical(%s, %s)" % (`self.logc`, `self.term`)
  
  def __str__(self):
    if type(self.term) == ListType and len(self.term) == 2:
      return "%s %s %s" % (nice(self.term[0]),
                           string.strip(self.logc),
                           nice(self.term[1]))
    else:
      return "%s(%s)" % (string.strip(self.logc), nice(self.term))
  
  def __aepack__(self):
    return pack({'logc': mkenum(self.logc), 'term': self.term}, 'logi')

def IsLogical(x):
  return IsInstance(x, Logical)

class StyledText:
  """An AE object respresenting text in a certain style"""
  
  def __init__(self, style, text):
    self.style = style
    self.text = text
  
  def __repr__(self):
    return "StyledText(%s, %s)" % (`self.style`, `self.text`)
  
  def __str__(self):
    return self.text
  
  def __aepack__(self):
    return pack({'ksty': self.style, 'ktxt': self.text}, 'STXT')

def IsStyledText(x):
  return IsInstance(x, StyledText)

class AEText:
  """An AE text object with style, script and language specified"""
  
  def __init__(self, script, style, text):
    self.script = script
    self.style = style
    self.text = text
  
  def __repr__(self):
    return "AEText(%s, %s, %s)" % (`self.script`, `self.style`, `self.text`)
  
  def __str__(self):
    return self.text
  
  def __aepack__(self):
    return pack({keyAEScriptTag: self.script, keyAEStyles: self.style,
         keyAEText: self.text}, typeAEText)

def IsAEText(x):
  return IsInstance(x, AEText)

class IntlText:
  """A text object with script and language specified"""
  
  def __init__(self, script, language, text):
    self.script = script
    self.language = language
    self.text = text
  
  def __repr__(self):
    return "IntlText(%s, %s, %s)" % (`self.script`, `self.language`, `self.text`)
  
  def __str__(self):
    return self.text
  
  def __aepack__(self):
    return pack(struct.pack('hh', self.script, self.language)+self.text,
      typeIntlText)

def IsIntlText(x):
  return IsInstance(x, IntlText)

class IntlWritingCode:
  """An object representing script and language"""
  
  def __init__(self, script, language):
    self.script = script
    self.language = language
  
  def __repr__(self):
    return "IntlWritingCode(%s, %s)" % (`self.script`, `self.language`)
  
  def __str__(self):
    return "script system %d, language %d"%(self.script, self.language)
  
  def __aepack__(self):
    return pack(struct.pack('hh', self.script, self.language),
      typeIntlWritingCode)

def IsIntlWritingCode(x):
  return IsInstance(x, IntlWritingCode)

class QDPoint:
  """A point"""
  
  def __init__(self, v, h):
    self.v = v
    self.h = h
  
  def __repr__(self):
    return "QDPoint(%s, %s)" % (`self.v`, `self.h`)
  
  def __str__(self):
    return "(%d, %d)"%(self.v, self.h)
  
  def __aepack__(self):
    return pack(struct.pack('hh', self.v, self.h),
      typeQDPoint)

def IsQDPoint(x):
  return IsInstance(x, QDPoint)

class QDRectangle:
  """A rectangle"""
  
  def __init__(self, v0, h0, v1, h1):
    self.v0 = v0
    self.h0 = h0
    self.v1 = v1
    self.h1 = h1
  
  def __repr__(self):
    return "QDRectangle(%s, %s, %s, %s)" % (`self.v0`, `self.h0`,
        `self.v1`, `self.h1`)
  
  def __str__(self):
    return "(%d, %d)-(%d, %d)"%(self.v0, self.h0, self.v1, self.h1)
  
  def __aepack__(self):
    return pack(struct.pack('hhhh', self.v0, self.h0, self.v1, self.h1),
      typeQDRectangle)

def IsQDRectangle(x):
  return IsInstance(x, QDRectangle)

class RGBColor:
  """An RGB color"""
  
  def __init__(self, r, g, b):
    self.r = r
    self.g = g
    self.b = b
      
  def __repr__(self):
    return "RGBColor(%s, %s, %s)" % (`self.r`, `self.g`, `self.b`)
  
  def __str__(self):
    return "0x%x red, 0x%x green, 0x%x blue"% (self.r, self.g, self.b)
  
  def __aepack__(self):
    return pack(struct.pack('hhh', self.r, self.g, self.b),
      typeRGBColor)

def IsRGBColor(x):
  return IsInstance(x, RGBColor)

class ObjectSpecifier:
  
  """A class for constructing and manipulation AE object specifiers in python.
  
  An object specifier is actually a record with four fields:
  
  key  type  description
  ---  ----  -----------
  
  'want'  type  4-char class code of thing we want,
      e.g. word, paragraph or property
  
  'form'  enum  how we specify which 'want' thing(s) we want,
      e.g. by index, by range, by name, or by property specifier
  
  'seld'  any  which thing(s) we want,
      e.g. its index, its name, or its property specifier
  
  'from'  object  the object in which it is contained,
      or null, meaning look for it in the application
  
  Note that we don't call this class plain "Object", since that name
  is likely to be used by the application.
  """
  
  def __init__(self, want, form, seld, fr = None):
    self.want = want
    self.form = form
    self.seld = seld
    self.fr = fr
  
  def __repr__(self):
    s = "ObjectSpecifier(%s, %s, %s" % (`self.want`, `self.form`, `self.seld`)
    if self.fr:
      s = s + ", %s)" % `self.fr`
    else:
      s = s + ")"
    return s
  
  def __aepack__(self):
    return pack({'want': mktype(self.want),
           'form': mkenum(self.form),
           'seld': self.seld,
           'from': self.fr},
          'obj ')

def IsObjectSpecifier(x):
  return IsInstance(x, ObjectSpecifier)


# Backwards compatability, sigh...
class Property(ObjectSpecifier):

  def __init__(self, which, fr = None, want='prop'):
    ObjectSpecifier.__init__(self, want, 'prop', mktype(which), fr)

  def __repr__(self):
    if self.fr:
      return "Property_r(%s, %s)" % (`self.seld.type`, `self.fr`)
    else:
      return "Property_r(%s)" % `self.seld.type`
  
  def __str__(self):
    if self.fr:
      return "Property %s of %s" % (str(self.seld), str(self.fr))
    else:
      return "Property_s %s" % str(self.seld)


class NProperty(ObjectSpecifier):
  # Subclasses *must* self baseclass attributes:
  # want is the type of this property
  # which is the property name of this property

  def __init__(self, want, form, seld, fr = None):
    ObjectSpecifier.__init__(self, want, form, 
          mktype(seld), fr)


class SelectableItem(ObjectSpecifier):
  
  def __init__(self, want, seld, fr = None):
    t = type(seld)
    if t == StringType:
      form = 'name'
    elif IsRange(seld):
      form = 'rang'
    elif IsComparison(seld) or IsLogical(seld):
      form = 'test'
    elif t == TupleType:
      # Breakout: specify both form and seld in a tuple
      # (if you want ID or rele or somesuch)
      form, seld = seld
    else:
      form = 'indx'
    ObjectSpecifier.__init__(self, want, form, seld, fr)


class ComponentItem(SelectableItem):
  # Derived classes *must* set the *class attribute* 'want' to some constant
  # Also, dictionaries _propdict and _elemdict must be set to map property
  # and element names to the correct classes
  
  def __init__(self, want, which, fr = None):
    SelectableItem.__init__(self, want, which, fr)
  
  def __repr__(self):
    if not self.fr:
      return "%s(%s)" % (self.__class__.__name__, `self.seld`)
    return "%s(%s, %s)" % (self.__class__.__name__, `self.seld`, `self.fr`)
  
  def __str__(self):
    seld = self.seld
    if type(seld) == StringType:
      ss = repr(seld)
    elif IsRange(seld):
      start, stop = seld.start, seld.stop
      if type(start) == InstanceType == type(stop) and \
         start.__class__ == self.__class__ == stop.__class__:
        ss = str(start.seld) + " thru " + str(stop.seld)
      else:
        ss = str(seld)
    else:
      ss = str(seld)
    s = "%s %s" % (self.__class__.__name__, ss)
    if self.fr: s = s + " of %s" % str(self.fr)
    return s
    
#  def __getattr__(self, name):
#    print name
#    if self._elemdict.has_key(name):
#      cls = self._elemdict[name]
#      return DelayedComponentItem(cls, self)
#       if self._propdict.has_key(name):
#         cls = self._propdict[name]
#         return cls(self)
#    raise AttributeError, name
    
    
class DelayedComponentItem:
  def __init__(self, compclass, fr):
    self.compclass = compclass
    self.fr = fr
    
  def __call__(self, which):
    return self.compclass(which, self.fr)
    
  def __repr__(self):
    return "%s(???, %s)" % (self.__class__.__name__, `self.fr`)
    
  def __str__(self):
    return "selector for element %s of %s"%(self.__class__.__name__, str(self.fr))

template = """
class %s(ComponentItem): want = '%s'
"""

exec template % ("Text", 'text')
exec template % ("Character", 'cha ')
exec template % ("Word", 'cwor')
exec template % ("Line", 'clin')
exec template % ("paragraph", 'cpar')
exec template % ("Window", 'cwin')
exec template % ("Document", 'docu')
exec template % ("File", 'file')
exec template % ("InsertionPoint", 'cins')

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.