    /*
     * call-seq:
     *   parse_stylesheet_doc(document)
     *
     * Parse a stylesheet from +document+.
     */
    static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
    {
        xmlDocPtr xml ;
        xsltStylesheetPtr ss ;
        Data_Get_Struct(xmldocobj, xmlDoc, xml);
        exsltRegisterAll();

        xsltSetGenericErrorFunc(NULL, xslt_generic_error_handler);

        ss = xsltParseStylesheetDoc(xmlCopyDoc(xml, 1)); /* 1 => recursive */

        xsltSetGenericErrorFunc(NULL, NULL);

        return Data_Wrap_Struct(klass, NULL, dealloc, ss);
    }