// Content was manually copied July 12 2019
// Source: https://wiki.whatwg.org/wiki/DOM_XSLTProcessor
// There is no standard for this API. Only the link above, and notes in
// the HTML5 standard (https://html.spec.whatwg.org/multipage/scripting.html#scriptTagXSLT)

[Exposed=Window, Constructor]
interface XSLTProcessor {
  void importStylesheet(Node style);
  [CEReactions] DocumentFragment transformToFragment(Node source, Document output);
  [CEReactions] Document transformToDocument(Node source);
  void setParameter([TreatNullAs=EmptyString] DOMString namespaceURI, DOMString localName, any value);
  any getParameter([TreatNullAs=EmptyString] DOMString namespaceURI, DOMString localName);
  void removeParameter([TreatNullAs=EmptyString] DOMString namespaceURI, DOMString localName);
  void clearParameters();
  void reset();
};
