1.onLoad <- function(libname, pkgname) { # nocov start
2    reg_s3_method("XML", "querySelector", "XMLInternalNode", querySelector.XMLInternalNode)
3    reg_s3_method("XML", "querySelectorAll", "XMLInternalNode", querySelectorAll.XMLInternalNode)
4    reg_s3_method("XML", "querySelectorNS", "XMLInternalNode", querySelectorNS.XMLInternalNode)
5    reg_s3_method("XML", "querySelectorAllNS", "XMLInternalNode", querySelectorAllNS.XMLInternalNode)
6
7    reg_s3_method("XML", "querySelector", "XMLInternalDocument", querySelector.XMLInternalDocument)
8    reg_s3_method("XML", "querySelectorAll", "XMLInternalDocument", querySelectorAll.XMLInternalDocument)
9    reg_s3_method("XML", "querySelectorNS", "XMLInternalDocument", querySelectorNS.XMLInternalDocument)
10    reg_s3_method("XML", "querySelectorAllNS", "XMLInternalDocument", querySelectorAllNS.XMLInternalDocument)
11
12    reg_s3_method("xml2", "querySelector", "xml_node", querySelector.xml_node)
13    reg_s3_method("xml2", "querySelectorAll", "xml_node", querySelectorAll.xml_node)
14    reg_s3_method("xml2", "querySelectorNS", "xml_node", querySelectorNS.xml_node)
15    reg_s3_method("xml2", "querySelectorAllNS", "xml_node", querySelectorAllNS.xml_node)
16
17    invisible()
18} # nocov end
19
20reg_s3_method <- function(pkg, generic, class, fun = NULL) { # nocov start
21    stopifnot(is.character(pkg), length(pkg) == 1)
22    stopifnot(is.character(generic), length(generic) == 1)
23    stopifnot(is.character(class), length(class) == 1)
24
25    if (is.null(fun))
26        fun <- get(paste0(generic, ".", class), envir = parent.frame())
27
28    stopifnot(is.function(fun))
29
30    if (pkg %in% loadedNamespaces()) {
31        envir <- asNamespace("selectr")
32        registerS3method(generic, class, fun, envir = envir)
33    }
34
35    # Register hook in case package is later unloaded & reloaded
36    setHook(
37        packageEvent(pkg, "onLoad"),
38        function(...) {
39            envir <- asNamespace("selectr")
40            registerS3method(generic, class, fun, envir = envir)
41        }
42    )
43} # nocov end
44