C++程序  |  145行  |  3.85 KB


/* =========================== Module _AH =========================== */

#include "Python.h"



#include "pymactoolbox.h"

/* 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>


static PyObject *Ah_Error;

static PyObject *Ah_AHSearch(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSStatus _err;
    CFStringRef bookname;
    CFStringRef query;
    if (!PyArg_ParseTuple(_args, "O&O&",
                          CFStringRefObj_Convert, &bookname,
                          CFStringRefObj_Convert, &query))
        return NULL;
    _err = AHSearch(bookname,
                    query);
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *Ah_AHGotoMainTOC(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSStatus _err;
    AHTOCType toctype;
    if (!PyArg_ParseTuple(_args, "h",
                          &toctype))
        return NULL;
    _err = AHGotoMainTOC(toctype);
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *Ah_AHGotoPage(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSStatus _err;
    CFStringRef bookname;
    CFStringRef path;
    CFStringRef anchor;
    if (!PyArg_ParseTuple(_args, "O&O&O&",
                          CFStringRefObj_Convert, &bookname,
                          CFStringRefObj_Convert, &path,
                          CFStringRefObj_Convert, &anchor))
        return NULL;
    _err = AHGotoPage(bookname,
                      path,
                      anchor);
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *Ah_AHLookupAnchor(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSStatus _err;
    CFStringRef bookname;
    CFStringRef anchor;
    if (!PyArg_ParseTuple(_args, "O&O&",
                          CFStringRefObj_Convert, &bookname,
                          CFStringRefObj_Convert, &anchor))
        return NULL;
    _err = AHLookupAnchor(bookname,
                          anchor);
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyObject *Ah_AHRegisterHelpBook(PyObject *_self, PyObject *_args)
{
    PyObject *_res = NULL;
    OSStatus _err;
    FSRef appBundleRef;
    if (!PyArg_ParseTuple(_args, "O&",
                          PyMac_GetFSRef, &appBundleRef))
        return NULL;
    _err = AHRegisterHelpBook(&appBundleRef);
    if (_err != noErr) return PyMac_Error(_err);
    Py_INCREF(Py_None);
    _res = Py_None;
    return _res;
}

static PyMethodDef Ah_methods[] = {
    {"AHSearch", (PyCFunction)Ah_AHSearch, 1,
     PyDoc_STR("(CFStringRef bookname, CFStringRef query) -> None")},
    {"AHGotoMainTOC", (PyCFunction)Ah_AHGotoMainTOC, 1,
     PyDoc_STR("(AHTOCType toctype) -> None")},
    {"AHGotoPage", (PyCFunction)Ah_AHGotoPage, 1,
     PyDoc_STR("(CFStringRef bookname, CFStringRef path, CFStringRef anchor) -> None")},
    {"AHLookupAnchor", (PyCFunction)Ah_AHLookupAnchor, 1,
     PyDoc_STR("(CFStringRef bookname, CFStringRef anchor) -> None")},
    {"AHRegisterHelpBook", (PyCFunction)Ah_AHRegisterHelpBook, 1,
     PyDoc_STR("(FSRef appBundleRef) -> None")},
    {NULL, NULL, 0}
};




void init_AH(void)
{
    PyObject *m;
    PyObject *d;




    m = Py_InitModule("_AH", Ah_methods);
    d = PyModule_GetDict(m);
    Ah_Error = PyMac_GetOSErrException();
    if (Ah_Error == NULL ||
        PyDict_SetItemString(d, "Error", Ah_Error) != 0)
        return;
}

/* ========================= End module _AH ========================= */