/* =========================== Module _TE =========================== */

#include "Python.h"
#include "pymactoolbox.h"

#if APPLE_SUPPORTS_QUICKTIME



/* Macro to test whether a weak-loaded CFM function exists */
#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
        PyErr_SetString(PyExc_NotImplementedError, \
            "Not available in this shared library/OS version"); \
        return NULL; \
    }} while(0)


#include <Carbon/Carbon.h>

#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_TEObj_New(TEHandle);
extern int _TEObj_Convert(PyObject *, TEHandle *);

#define TEObj_New _TEObj_New
#define TEObj_Convert _TEObj_Convert
#endif

#define as_TE(h) ((TEHandle)h)
#define as_Resource(teh) ((Handle)teh)

/*
** Parse/generate TextStyle records
*/
static PyObject *
TextStyle_New(TextStylePtr itself)
{

    return Py_BuildValue("lllO&", (long)itself->tsFont, (long)itself->tsFace, (long)itself->tsSize, QdRGB_New,
                            &itself->tsColor);
}

static int
TextStyle_Convert(PyObject *v, TextStylePtr p_itself)
{
    long font, face, size;

    if( !PyArg_ParseTuple(v, "lllO&", &font, &face, &size, QdRGB_Convert, &p_itself->tsColor) )
        return 0;
    p_itself->tsFont = (short)font;
    p_itself->tsFace = (Style)face;
    p_itself->tsSize = (short)size;
    return 1;
}

static PyObject *TE_Error;

/* ------------------------- Object type TE ------------------------- */

PyTypeObject TE_Type;

#define TEObj_Check(x) ((x)->ob_type == &TE_Type || PyObject_TypeCheck((x), &TE_Type))

typedef struct TEObject {
    PyObject_HEAD
    TEHandle ob_itself;
} TEObject;

PyObject *TEObj_New(TEHandle itself)
{
    TEObject *it;
    if (itself == NULL) {
                                    PyErr_SetString(TE_Error,"Cannot create null TE");
                                    return NULL;
                            }
    it = PyObject_NEW(TEObject, &TE_Type);
    if (it == NULL) return NULL;
    it->ob_itself = itself;
    return (PyObject *)it;
}

int TEObj_Convert(PyObject *v, TEHandle *p_itself)
{
    if (!TEObj_Check(v))
    {
        PyErr_SetString(PyExc_TypeError, "TE required");
        return 0;
    }
    *p_itself = ((TEObject *)v)->ob_itself;
    return 1;
}

static void TEObj_dealloc(TEObject *self)
{
    TEDispose(self->ob_itself);
    self->ob_type->tp_free((PyObject *)self);
}

static PyObject *TEObj_TESetText(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    char *text__in__;
    long text__len__;
    int text__in_len__;
#ifndef TESetText
    PyMac_PRECHECK(TESetText);
#endif
    if (!PyArg_ParseTuple(_args, "s#",
                          &text__in__, &text__in_len__))
        return NULL;
    text__len__ = text__in_len__;
    TESetText(text__in__, text__len__,
              _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEGetText(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    CharsHandle _rv;
#ifndef TEGetText
    PyMac_PRECHECK(TEGetText);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = TEGetText(_self->ob_itself);
    _res = Py_BuildValue("O&",
                         ResObj_New, _rv);
    return _res;
}

static PyObject *TEObj_TEIdle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TEIdle
    PyMac_PRECHECK(TEIdle);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TEIdle(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TESetSelect(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    long selStart;
    long selEnd;
#ifndef TESetSelect
    PyMac_PRECHECK(TESetSelect);
#endif
    if (!PyArg_ParseTuple(_args, "ll",
                          &selStart,
                          &selEnd))
        return NULL;
    TESetSelect(selStart,
                selEnd,
                _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEActivate(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TEActivate
    PyMac_PRECHECK(TEActivate);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TEActivate(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEDeactivate(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TEDeactivate
    PyMac_PRECHECK(TEDeactivate);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TEDeactivate(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEKey(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    CharParameter key;
#ifndef TEKey
    PyMac_PRECHECK(TEKey);
#endif
    if (!PyArg_ParseTuple(_args, "h",
                          &key))
        return NULL;
    TEKey(key,
          _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TECut(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TECut
    PyMac_PRECHECK(TECut);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TECut(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TECopy(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TECopy
    PyMac_PRECHECK(TECopy);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TECopy(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEPaste(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TEPaste
    PyMac_PRECHECK(TEPaste);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TEPaste(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEDelete(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TEDelete
    PyMac_PRECHECK(TEDelete);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TEDelete(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEInsert(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    char *text__in__;
    long text__len__;
    int text__in_len__;
#ifndef TEInsert
    PyMac_PRECHECK(TEInsert);
#endif
    if (!PyArg_ParseTuple(_args, "s#",
                          &text__in__, &text__in_len__))
        return NULL;
    text__len__ = text__in_len__;
    TEInsert(text__in__, text__len__,
             _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TESetAlignment(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short just;
#ifndef TESetAlignment
    PyMac_PRECHECK(TESetAlignment);
#endif
    if (!PyArg_ParseTuple(_args, "h",
                          &just))
        return NULL;
    TESetAlignment(just,
                   _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEUpdate(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Rect rUpdate;
#ifndef TEUpdate
    PyMac_PRECHECK(TEUpdate);
#endif
    if (!PyArg_ParseTuple(_args, "O&",
                          PyMac_GetRect, &rUpdate))
        return NULL;
    TEUpdate(&rUpdate,
             _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEScroll(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short dh;
    short dv;
#ifndef TEScroll
    PyMac_PRECHECK(TEScroll);
#endif
    if (!PyArg_ParseTuple(_args, "hh",
                          &dh,
                          &dv))
        return NULL;
    TEScroll(dh,
             dv,
             _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TESelView(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TESelView
    PyMac_PRECHECK(TESelView);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TESelView(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEPinScroll(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short dh;
    short dv;
#ifndef TEPinScroll
    PyMac_PRECHECK(TEPinScroll);
#endif
    if (!PyArg_ParseTuple(_args, "hh",
                          &dh,
                          &dv))
        return NULL;
    TEPinScroll(dh,
                dv,
                _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEAutoView(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Boolean fAuto;
#ifndef TEAutoView
    PyMac_PRECHECK(TEAutoView);
#endif
    if (!PyArg_ParseTuple(_args, "b",
                          &fAuto))
        return NULL;
    TEAutoView(fAuto,
               _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TECalText(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TECalText
    PyMac_PRECHECK(TECalText);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TECalText(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEGetOffset(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short _rv;
    Point pt;
#ifndef TEGetOffset
    PyMac_PRECHECK(TEGetOffset);
#endif
    if (!PyArg_ParseTuple(_args, "O&",
                          PyMac_GetPoint, &pt))
        return NULL;
    _rv = TEGetOffset(pt,
                      _self->ob_itself);
    _res = Py_BuildValue("h",
                         _rv);
    return _res;
}

static PyObject *TEObj_TEGetPoint(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Point _rv;
    short offset;
#ifndef TEGetPoint
    PyMac_PRECHECK(TEGetPoint);
#endif
    if (!PyArg_ParseTuple(_args, "h",
                          &offset))
        return NULL;
    _rv = TEGetPoint(offset,
                     _self->ob_itself);
    _res = Py_BuildValue("O&",
                         PyMac_BuildPoint, _rv);
    return _res;
}

static PyObject *TEObj_TEClick(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Point pt;
    Boolean fExtend;
#ifndef TEClick
    PyMac_PRECHECK(TEClick);
#endif
    if (!PyArg_ParseTuple(_args, "O&b",
                          PyMac_GetPoint, &pt,
                          &fExtend))
        return NULL;
    TEClick(pt,
        fExtend,
        _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TESetStyleHandle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    TEStyleHandle theHandle;
#ifndef TESetStyleHandle
    PyMac_PRECHECK(TESetStyleHandle);
#endif
    if (!PyArg_ParseTuple(_args, "O&",
                          ResObj_Convert, &theHandle))
        return NULL;
    TESetStyleHandle(theHandle,
                     _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEGetStyleHandle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    TEStyleHandle _rv;
#ifndef TEGetStyleHandle
    PyMac_PRECHECK(TEGetStyleHandle);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = TEGetStyleHandle(_self->ob_itself);
    _res = Py_BuildValue("O&",
                         ResObj_New, _rv);
    return _res;
}

static PyObject *TEObj_TEGetStyle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short offset;
    TextStyle theStyle;
    short lineHeight;
    short fontAscent;
#ifndef TEGetStyle
    PyMac_PRECHECK(TEGetStyle);
#endif
    if (!PyArg_ParseTuple(_args, "h",
                          &offset))
        return NULL;
    TEGetStyle(offset,
               &theStyle,
               &lineHeight,
               &fontAscent,
               _self->ob_itself);
    _res = Py_BuildValue("O&hh",
                         TextStyle_New, &theStyle,
                         lineHeight,
                         fontAscent);
    return _res;
}

static PyObject *TEObj_TEStylePaste(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
#ifndef TEStylePaste
    PyMac_PRECHECK(TEStylePaste);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    TEStylePaste(_self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TESetStyle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short mode;
    TextStyle newStyle;
    Boolean fRedraw;
#ifndef TESetStyle
    PyMac_PRECHECK(TESetStyle);
#endif
    if (!PyArg_ParseTuple(_args, "hO&b",
                          &mode,
                          TextStyle_Convert, &newStyle,
                          &fRedraw))
        return NULL;
    TESetStyle(mode,
               &newStyle,
               fRedraw,
               _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEReplaceStyle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short mode;
    TextStyle oldStyle;
    TextStyle newStyle;
    Boolean fRedraw;
#ifndef TEReplaceStyle
    PyMac_PRECHECK(TEReplaceStyle);
#endif
    if (!PyArg_ParseTuple(_args, "hO&O&b",
                          &mode,
                          TextStyle_Convert, &oldStyle,
                          TextStyle_Convert, &newStyle,
                          &fRedraw))
        return NULL;
    TEReplaceStyle(mode,
                   &oldStyle,
                   &newStyle,
                   fRedraw,
                   _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEGetStyleScrapHandle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    StScrpHandle _rv;
#ifndef TEGetStyleScrapHandle
    PyMac_PRECHECK(TEGetStyleScrapHandle);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = TEGetStyleScrapHandle(_self->ob_itself);
    _res = Py_BuildValue("O&",
                         ResObj_New, _rv);
    return _res;
}

static PyObject *TEObj_TEStyleInsert(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    char *text__in__;
    long text__len__;
    int text__in_len__;
    StScrpHandle hST;
#ifndef TEStyleInsert
    PyMac_PRECHECK(TEStyleInsert);
#endif
    if (!PyArg_ParseTuple(_args, "s#O&",
                          &text__in__, &text__in_len__,
                          ResObj_Convert, &hST))
        return NULL;
    text__len__ = text__in_len__;
    TEStyleInsert(text__in__, text__len__,
                  hST,
                  _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TEGetHeight(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    long _rv;
    long endLine;
    long startLine;
#ifndef TEGetHeight
    PyMac_PRECHECK(TEGetHeight);
#endif
    if (!PyArg_ParseTuple(_args, "ll",
                          &endLine,
                          &startLine))
        return NULL;
    _rv = TEGetHeight(endLine,
                      startLine,
                      _self->ob_itself);
    _res = Py_BuildValue("l",
                         _rv);
    return _res;
}

static PyObject *TEObj_TEContinuousStyle(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Boolean _rv;
    short mode;
    TextStyle aStyle;
#ifndef TEContinuousStyle
    PyMac_PRECHECK(TEContinuousStyle);
#endif
    if (!PyArg_ParseTuple(_args, "hO&",
                          &mode,
                          TextStyle_Convert, &aStyle))
        return NULL;
    _rv = TEContinuousStyle(&mode,
                            &aStyle,
                            _self->ob_itself);
    _res = Py_BuildValue("bhO&",
                         _rv,
                         mode,
                         TextStyle_New, &aStyle);
    return _res;
}

static PyObject *TEObj_TEUseStyleScrap(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    long rangeStart;
    long rangeEnd;
    StScrpHandle newStyles;
    Boolean fRedraw;
#ifndef TEUseStyleScrap
    PyMac_PRECHECK(TEUseStyleScrap);
#endif
    if (!PyArg_ParseTuple(_args, "llO&b",
                          &rangeStart,
                          &rangeEnd,
                          ResObj_Convert, &newStyles,
                          &fRedraw))
        return NULL;
    TEUseStyleScrap(rangeStart,
                    rangeEnd,
                    newStyles,
                    fRedraw,
                    _self->ob_itself);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_TENumStyles(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    long _rv;
    long rangeStart;
    long rangeEnd;
#ifndef TENumStyles
    PyMac_PRECHECK(TENumStyles);
#endif
    if (!PyArg_ParseTuple(_args, "ll",
                          &rangeStart,
                          &rangeEnd))
        return NULL;
    _rv = TENumStyles(rangeStart,
                      rangeEnd,
                      _self->ob_itself);
    _res = Py_BuildValue("l",
                         _rv);
    return _res;
}

static PyObject *TEObj_TEFeatureFlag(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    short _rv;
    short feature;
    short action;
#ifndef TEFeatureFlag
    PyMac_PRECHECK(TEFeatureFlag);
#endif
    if (!PyArg_ParseTuple(_args, "hh",
                          &feature,
                          &action))
        return NULL;
    _rv = TEFeatureFlag(feature,
                        action,
                        _self->ob_itself);
    _res = Py_BuildValue("h",
                         _rv);
    return _res;
}

static PyObject *TEObj_TEGetHiliteRgn(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSErr _err;
    RgnHandle region;
#ifndef TEGetHiliteRgn
    PyMac_PRECHECK(TEGetHiliteRgn);
#endif
    if (!PyArg_ParseTuple(_args, "O&",
                          ResObj_Convert, &region))
        return NULL;
    _err = TEGetHiliteRgn(region,
                          _self->ob_itself);
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TEObj_as_Resource(TEObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Handle _rv;
#ifndef as_Resource
    PyMac_PRECHECK(as_Resource);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = as_Resource(_self->ob_itself);
    _res = Py_BuildValue("O&",
                         ResObj_New, _rv);
    return _res;
}

static PyMethodDef TEObj_methods[] = {
    {"TESetText", (PyCFunction)TEObj_TESetText, 1,
     PyDoc_STR("(Buffer text) -> None")},
    {"TEGetText", (PyCFunction)TEObj_TEGetText, 1,
     PyDoc_STR("() -> (CharsHandle _rv)")},
    {"TEIdle", (PyCFunction)TEObj_TEIdle, 1,
     PyDoc_STR("() -> None")},
    {"TESetSelect", (PyCFunction)TEObj_TESetSelect, 1,
     PyDoc_STR("(long selStart, long selEnd) -> None")},
    {"TEActivate", (PyCFunction)TEObj_TEActivate, 1,
     PyDoc_STR("() -> None")},
    {"TEDeactivate", (PyCFunction)TEObj_TEDeactivate, 1,
     PyDoc_STR("() -> None")},
    {"TEKey", (PyCFunction)TEObj_TEKey, 1,
     PyDoc_STR("(CharParameter key) -> None")},
    {"TECut", (PyCFunction)TEObj_TECut, 1,
     PyDoc_STR("() -> None")},
    {"TECopy", (PyCFunction)TEObj_TECopy, 1,
     PyDoc_STR("() -> None")},
    {"TEPaste", (PyCFunction)TEObj_TEPaste, 1,
     PyDoc_STR("() -> None")},
    {"TEDelete", (PyCFunction)TEObj_TEDelete, 1,
     PyDoc_STR("() -> None")},
    {"TEInsert", (PyCFunction)TEObj_TEInsert, 1,
     PyDoc_STR("(Buffer text) -> None")},
    {"TESetAlignment", (PyCFunction)TEObj_TESetAlignment, 1,
     PyDoc_STR("(short just) -> None")},
    {"TEUpdate", (PyCFunction)TEObj_TEUpdate, 1,
     PyDoc_STR("(Rect rUpdate) -> None")},
    {"TEScroll", (PyCFunction)TEObj_TEScroll, 1,
     PyDoc_STR("(short dh, short dv) -> None")},
    {"TESelView", (PyCFunction)TEObj_TESelView, 1,
     PyDoc_STR("() -> None")},
    {"TEPinScroll", (PyCFunction)TEObj_TEPinScroll, 1,
     PyDoc_STR("(short dh, short dv) -> None")},
    {"TEAutoView", (PyCFunction)TEObj_TEAutoView, 1,
     PyDoc_STR("(Boolean fAuto) -> None")},
    {"TECalText", (PyCFunction)TEObj_TECalText, 1,
     PyDoc_STR("() -> None")},
    {"TEGetOffset", (PyCFunction)TEObj_TEGetOffset, 1,
     PyDoc_STR("(Point pt) -> (short _rv)")},
    {"TEGetPoint", (PyCFunction)TEObj_TEGetPoint, 1,
     PyDoc_STR("(short offset) -> (Point _rv)")},
    {"TEClick", (PyCFunction)TEObj_TEClick, 1,
     PyDoc_STR("(Point pt, Boolean fExtend) -> None")},
    {"TESetStyleHandle", (PyCFunction)TEObj_TESetStyleHandle, 1,
     PyDoc_STR("(TEStyleHandle theHandle) -> None")},
    {"TEGetStyleHandle", (PyCFunction)TEObj_TEGetStyleHandle, 1,
     PyDoc_STR("() -> (TEStyleHandle _rv)")},
    {"TEGetStyle", (PyCFunction)TEObj_TEGetStyle, 1,
     PyDoc_STR("(short offset) -> (TextStyle theStyle, short lineHeight, short fontAscent)")},
    {"TEStylePaste", (PyCFunction)TEObj_TEStylePaste, 1,
     PyDoc_STR("() -> None")},
    {"TESetStyle", (PyCFunction)TEObj_TESetStyle, 1,
     PyDoc_STR("(short mode, TextStyle newStyle, Boolean fRedraw) -> None")},
    {"TEReplaceStyle", (PyCFunction)TEObj_TEReplaceStyle, 1,
     PyDoc_STR("(short mode, TextStyle oldStyle, TextStyle newStyle, Boolean fRedraw) -> None")},
    {"TEGetStyleScrapHandle", (PyCFunction)TEObj_TEGetStyleScrapHandle, 1,
     PyDoc_STR("() -> (StScrpHandle _rv)")},
    {"TEStyleInsert", (PyCFunction)TEObj_TEStyleInsert, 1,
     PyDoc_STR("(Buffer text, StScrpHandle hST) -> None")},
    {"TEGetHeight", (PyCFunction)TEObj_TEGetHeight, 1,
     PyDoc_STR("(long endLine, long startLine) -> (long _rv)")},
    {"TEContinuousStyle", (PyCFunction)TEObj_TEContinuousStyle, 1,
     PyDoc_STR("(short mode, TextStyle aStyle) -> (Boolean _rv, short mode, TextStyle aStyle)")},
    {"TEUseStyleScrap", (PyCFunction)TEObj_TEUseStyleScrap, 1,
     PyDoc_STR("(long rangeStart, long rangeEnd, StScrpHandle newStyles, Boolean fRedraw) -> None")},
    {"TENumStyles", (PyCFunction)TEObj_TENumStyles, 1,
     PyDoc_STR("(long rangeStart, long rangeEnd) -> (long _rv)")},
    {"TEFeatureFlag", (PyCFunction)TEObj_TEFeatureFlag, 1,
     PyDoc_STR("(short feature, short action) -> (short _rv)")},
    {"TEGetHiliteRgn", (PyCFunction)TEObj_TEGetHiliteRgn, 1,
     PyDoc_STR("(RgnHandle region) -> None")},
    {"as_Resource", (PyCFunction)TEObj_as_Resource, 1,
     PyDoc_STR("() -> (Handle _rv)")},
    {NULL, NULL, 0}
};

static PyObject *TEObj_get_destRect(TEObject *self, void *closure)
{
    return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->destRect);
}

#define TEObj_set_destRect NULL

static PyObject *TEObj_get_viewRect(TEObject *self, void *closure)
{
    return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->viewRect);
}

#define TEObj_set_viewRect NULL

static PyObject *TEObj_get_selRect(TEObject *self, void *closure)
{
    return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->selRect);
}

#define TEObj_set_selRect NULL

static PyObject *TEObj_get_lineHeight(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->lineHeight);
}

#define TEObj_set_lineHeight NULL

static PyObject *TEObj_get_fontAscent(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->fontAscent);
}

#define TEObj_set_fontAscent NULL

static PyObject *TEObj_get_selPoint(TEObject *self, void *closure)
{
    return Py_BuildValue("O&", PyMac_BuildPoint, (*self->ob_itself)->selPoint);
}

#define TEObj_set_selPoint NULL

static PyObject *TEObj_get_selStart(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->selStart);
}

#define TEObj_set_selStart NULL

static PyObject *TEObj_get_selEnd(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->selEnd);
}

#define TEObj_set_selEnd NULL

static PyObject *TEObj_get_active(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->active);
}

#define TEObj_set_active NULL

static PyObject *TEObj_get_just(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->just);
}

#define TEObj_set_just NULL

static PyObject *TEObj_get_teLength(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->teLength);
}

#define TEObj_set_teLength NULL

static PyObject *TEObj_get_txFont(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->txFont);
}

#define TEObj_set_txFont NULL

static PyObject *TEObj_get_txFace(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->txFace);
}

#define TEObj_set_txFace NULL

static PyObject *TEObj_get_txMode(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->txMode);
}

#define TEObj_set_txMode NULL

static PyObject *TEObj_get_txSize(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->txSize);
}

#define TEObj_set_txSize NULL

static PyObject *TEObj_get_nLines(TEObject *self, void *closure)
{
    return Py_BuildValue("h", (*self->ob_itself)->nLines);
}

#define TEObj_set_nLines NULL

static PyGetSetDef TEObj_getsetlist[] = {
    {"destRect", (getter)TEObj_get_destRect, (setter)TEObj_set_destRect, "Destination rectangle"},
    {"viewRect", (getter)TEObj_get_viewRect, (setter)TEObj_set_viewRect, "Viewing rectangle"},
    {"selRect", (getter)TEObj_get_selRect, (setter)TEObj_set_selRect, "Selection rectangle"},
    {"lineHeight", (getter)TEObj_get_lineHeight, (setter)TEObj_set_lineHeight, "Height of a line"},
    {"fontAscent", (getter)TEObj_get_fontAscent, (setter)TEObj_set_fontAscent, "Ascent of a line"},
    {"selPoint", (getter)TEObj_get_selPoint, (setter)TEObj_set_selPoint, "Selection Point"},
    {"selStart", (getter)TEObj_get_selStart, (setter)TEObj_set_selStart, "Start of selection"},
    {"selEnd", (getter)TEObj_get_selEnd, (setter)TEObj_set_selEnd, "End of selection"},
    {"active", (getter)TEObj_get_active, (setter)TEObj_set_active, "TBD"},
    {"just", (getter)TEObj_get_just, (setter)TEObj_set_just, "Justification"},
    {"teLength", (getter)TEObj_get_teLength, (setter)TEObj_set_teLength, "TBD"},
    {"txFont", (getter)TEObj_get_txFont, (setter)TEObj_set_txFont, "Current font"},
    {"txFace", (getter)TEObj_get_txFace, (setter)TEObj_set_txFace, "Current font variant"},
    {"txMode", (getter)TEObj_get_txMode, (setter)TEObj_set_txMode, "Current text-drawing mode"},
    {"txSize", (getter)TEObj_get_txSize, (setter)TEObj_set_txSize, "Current font size"},
    {"nLines", (getter)TEObj_get_nLines, (setter)TEObj_set_nLines, "TBD"},
    {NULL, NULL, NULL, NULL},
};


#define TEObj_compare NULL

#define TEObj_repr NULL

#define TEObj_hash NULL
#define TEObj_tp_init 0

#define TEObj_tp_alloc PyType_GenericAlloc

static PyObject *TEObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
    PyObject *_self;
    TEHandle itself;
    char *kw[] = {"itself", 0};

    if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, TEObj_Convert, &itself)) return NULL;
    if ((_self = type->tp_alloc(type, 0)) == NULL) return NULL;
    ((TEObject *)_self)->ob_itself = itself;
    return _self;
}

#define TEObj_tp_free PyObject_Del


PyTypeObject TE_Type = {
    PyObject_HEAD_INIT(NULL)
    0, /*ob_size*/
    "_TE.TE", /*tp_name*/
    sizeof(TEObject), /*tp_basicsize*/
    0, /*tp_itemsize*/
    /* methods */
    (destructor) TEObj_dealloc, /*tp_dealloc*/
    0, /*tp_print*/
    (getattrfunc)0, /*tp_getattr*/
    (setattrfunc)0, /*tp_setattr*/
    (cmpfunc) TEObj_compare, /*tp_compare*/
    (reprfunc) TEObj_repr, /*tp_repr*/
    (PyNumberMethods *)0, /* tp_as_number */
    (PySequenceMethods *)0, /* tp_as_sequence */
    (PyMappingMethods *)0, /* tp_as_mapping */
    (hashfunc) TEObj_hash, /*tp_hash*/
    0, /*tp_call*/
    0, /*tp_str*/
    PyObject_GenericGetAttr, /*tp_getattro*/
    PyObject_GenericSetAttr, /*tp_setattro */
    0, /*tp_as_buffer*/
    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
    0, /*tp_doc*/
    0, /*tp_traverse*/
    0, /*tp_clear*/
    0, /*tp_richcompare*/
    0, /*tp_weaklistoffset*/
    0, /*tp_iter*/
    0, /*tp_iternext*/
    TEObj_methods, /* tp_methods */
    0, /*tp_members*/
    TEObj_getsetlist, /*tp_getset*/
    0, /*tp_base*/
    0, /*tp_dict*/
    0, /*tp_descr_get*/
    0, /*tp_descr_set*/
    0, /*tp_dictoffset*/
    TEObj_tp_init, /* tp_init */
    TEObj_tp_alloc, /* tp_alloc */
    TEObj_tp_new, /* tp_new */
    TEObj_tp_free, /* tp_free */
};

/* ----------------------- End object type TE ----------------------- */


static PyObject *TE_TEScrapHandle(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Handle _rv;
#ifndef TEScrapHandle
    PyMac_PRECHECK(TEScrapHandle);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = TEScrapHandle();
    _res = Py_BuildValue("O&",
                         ResObj_New, _rv);
    return _res;
}

static PyObject *TE_TEGetScrapLength(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    long _rv;
#ifndef TEGetScrapLength
    PyMac_PRECHECK(TEGetScrapLength);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = TEGetScrapLength();
    _res = Py_BuildValue("l",
                         _rv);
    return _res;
}

static PyObject *TE_TENew(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    TEHandle _rv;
    Rect destRect;
    Rect viewRect;
#ifndef TENew
    PyMac_PRECHECK(TENew);
#endif
    if (!PyArg_ParseTuple(_args, "O&O&",
                          PyMac_GetRect, &destRect,
                          PyMac_GetRect, &viewRect))
        return NULL;
    _rv = TENew(&destRect,
                &viewRect);
    _res = Py_BuildValue("O&",
                         TEObj_New, _rv);
    return _res;
}

static PyObject *TE_TETextBox(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    char *text__in__;
    long text__len__;
    int text__in_len__;
    Rect box;
    short just;
#ifndef TETextBox
    PyMac_PRECHECK(TETextBox);
#endif
    if (!PyArg_ParseTuple(_args, "s#O&h",
                          &text__in__, &text__in_len__,
                          PyMac_GetRect, &box,
                          &just))
        return NULL;
    text__len__ = text__in_len__;
    TETextBox(text__in__, text__len__,
              &box,
              just);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TE_TEStyleNew(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    TEHandle _rv;
    Rect destRect;
    Rect viewRect;
#ifndef TEStyleNew
    PyMac_PRECHECK(TEStyleNew);
#endif
    if (!PyArg_ParseTuple(_args, "O&O&",
                          PyMac_GetRect, &destRect,
                          PyMac_GetRect, &viewRect))
        return NULL;
    _rv = TEStyleNew(&destRect,
                     &viewRect);
    _res = Py_BuildValue("O&",
                         TEObj_New, _rv);
    return _res;
}

static PyObject *TE_TESetScrapLength(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    long length;
#ifndef TESetScrapLength
    PyMac_PRECHECK(TESetScrapLength);
#endif
    if (!PyArg_ParseTuple(_args, "l",
                          &length))
        return NULL;
    TESetScrapLength(length);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TE_TEFromScrap(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSErr _err;
#ifndef TEFromScrap
    PyMac_PRECHECK(TEFromScrap);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _err = TEFromScrap();
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TE_TEToScrap(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSErr _err;
#ifndef TEToScrap
    PyMac_PRECHECK(TEToScrap);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _err = TEToScrap();
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TE_TEGetScrapHandle(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Handle _rv;
#ifndef TEGetScrapHandle
    PyMac_PRECHECK(TEGetScrapHandle);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = TEGetScrapHandle();
    _res = Py_BuildValue("O&",
                         ResObj_New, _rv);
    return _res;
}

static PyObject *TE_TESetScrapHandle(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    Handle value;
#ifndef TESetScrapHandle
    PyMac_PRECHECK(TESetScrapHandle);
#endif
    if (!PyArg_ParseTuple(_args, "O&",
                          ResObj_Convert, &value))
        return NULL;
    TESetScrapHandle(value);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TE_LMGetWordRedraw(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    UInt8 _rv;
#ifndef LMGetWordRedraw
    PyMac_PRECHECK(LMGetWordRedraw);
#endif
    if (!PyArg_ParseTuple(_args, ""))
        return NULL;
    _rv = LMGetWordRedraw();
    _res = Py_BuildValue("b",
                         _rv);
    return _res;
}

static PyObject *TE_LMSetWordRedraw(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    UInt8 value;
#ifndef LMSetWordRedraw
    PyMac_PRECHECK(LMSetWordRedraw);
#endif
    if (!PyArg_ParseTuple(_args, "b",
                          &value))
        return NULL;
    LMSetWordRedraw(value);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *TE_as_TE(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    TEHandle _rv;
    Handle h;
#ifndef as_TE
    PyMac_PRECHECK(as_TE);
#endif
    if (!PyArg_ParseTuple(_args, "O&",
                          ResObj_Convert, &h))
        return NULL;
    _rv = as_TE(h);
    _res = Py_BuildValue("O&",
                         TEObj_New, _rv);
    return _res;
}
#endif /* APPLE_SUPPORTS_QUICKTIME */

static PyMethodDef TE_methods[] = {
#if APPLE_SUPPORTS_QUICKTIME
    {"TEScrapHandle", (PyCFunction)TE_TEScrapHandle, 1,
     PyDoc_STR("() -> (Handle _rv)")},
    {"TEGetScrapLength", (PyCFunction)TE_TEGetScrapLength, 1,
     PyDoc_STR("() -> (long _rv)")},
    {"TENew", (PyCFunction)TE_TENew, 1,
     PyDoc_STR("(Rect destRect, Rect viewRect) -> (TEHandle _rv)")},
    {"TETextBox", (PyCFunction)TE_TETextBox, 1,
     PyDoc_STR("(Buffer text, Rect box, short just) -> None")},
    {"TEStyleNew", (PyCFunction)TE_TEStyleNew, 1,
     PyDoc_STR("(Rect destRect, Rect viewRect) -> (TEHandle _rv)")},
    {"TESetScrapLength", (PyCFunction)TE_TESetScrapLength, 1,
     PyDoc_STR("(long length) -> None")},
    {"TEFromScrap", (PyCFunction)TE_TEFromScrap, 1,
     PyDoc_STR("() -> None")},
    {"TEToScrap", (PyCFunction)TE_TEToScrap, 1,
     PyDoc_STR("() -> None")},
    {"TEGetScrapHandle", (PyCFunction)TE_TEGetScrapHandle, 1,
     PyDoc_STR("() -> (Handle _rv)")},
    {"TESetScrapHandle", (PyCFunction)TE_TESetScrapHandle, 1,
     PyDoc_STR("(Handle value) -> None")},
    {"LMGetWordRedraw", (PyCFunction)TE_LMGetWordRedraw, 1,
     PyDoc_STR("() -> (UInt8 _rv)")},
    {"LMSetWordRedraw", (PyCFunction)TE_LMSetWordRedraw, 1,
     PyDoc_STR("(UInt8 value) -> None")},
    {"as_TE", (PyCFunction)TE_as_TE, 1,
     PyDoc_STR("(Handle h) -> (TEHandle _rv)")},
#endif /* APPLE_SUPPORTS_QUICKTIME */
    {NULL, NULL, 0}
};




void init_TE(void)
{
    PyObject *m;
#if APPLE_SUPPORTS_QUICKTIME
    PyObject *d;



        PyMac_INIT_TOOLBOX_OBJECT_NEW(TEHandle, TEObj_New);
        PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TEHandle, TEObj_Convert);

#endif /* APPLE_SUPPORTS_QUICKTIME */

    m = Py_InitModule("_TE", TE_methods);
#if APPLE_SUPPORTS_QUICKTIME
    d = PyModule_GetDict(m);
    TE_Error = PyMac_GetOSErrException();
    if (TE_Error == NULL ||
        PyDict_SetItemString(d, "Error", TE_Error) != 0)
        return;
    TE_Type.ob_type = &PyType_Type;
    if (PyType_Ready(&TE_Type) < 0) return;
    Py_INCREF(&TE_Type);
    PyModule_AddObject(m, "TE", (PyObject *)&TE_Type);
    /* Backward-compatible name */
    Py_INCREF(&TE_Type);
    PyModule_AddObject(m, "TEType", (PyObject *)&TE_Type);
#endif /* APPLE_SUPPORTS_QUICKTIME */
}

/* ========================= End module _TE ========================= */