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