/*
 * tcldom.c --
 *
 *	Generic interface to DOM Implementation.
 *	As of v3.0, there is no substantial generic layer;
 *	instead each implementation provides its own commands
 *	directly.  This module now provides common definitions
 *	for method/option tables, etc.
 *
 * Copyright (c) 2006-2009 Explain
 * http://www.explain.com.au/
 * Copyright (c) 2002-2004 Steve Ball, Zveno Pty Ltd
 *
 * See the file "LICENSE" for information on usage and
 * redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 *
 * $Id: tcldom.c,v 1.25 2004/02/25 20:10:27 balls Exp $
 *
 */

#include <tcldom/tcldom.h>

/*
 * Method tables for commands
 */

#ifndef CONST84
#define CONST84 /* Before 8.4 no 'const' required */
#endif

CONST84 char *TclDOM_DOMImplementationCommandMethods[] = {
  "hasFeature",
  "createDocument",
  "create",
  "createDocumentType",
  "createNode",
  "destroy",
  "isNode",
  "parse",
  "selectNode",
  "serialize",
  "trim",
  (char *) NULL
};
CONST84 char *TclDOM_DocumentCommandMethods[] = {
  "cget",
  "configure",
  "createElement",
  "createDocumentFragment",
  "createTextNode",
  "createComment",
  "createCDATASection",
  "createProcessingInstruction",
  "createAttribute",
  "createEntity",
  "createEntityReference",
  "createDocTypeDecl",
  "importNode",
  "createElementNS",
  "createAttributeNS",
  "getElementsByTagNameNS",
  "getElementsById",
  "createEvent",
  "getElementsByTagName",
  "dtd",
  "schema",
  "relaxng",
  (char *) NULL
};
CONST84 char *TclDOM_DocumentCommandOptions[] = {
  "-doctype",
  "-implementation",
  "-documentElement",
  "-keep",
  "-baseuri",
  (char *) NULL
};
CONST84 char *TclDOM_DocumentDTDSubmethods[] = {
  "validate",
  (char *) NULL
};
CONST84 char *TclDOM_DocumentSchemaSubmethods[] = {
  "compile",
  "validate",
  (char *) NULL
};
CONST84 char *TclDOM_DocumentRelaxNGSubmethods[] = {
  "compile",
  "validate",
  (char *) NULL
};
CONST84 char *TclDOM_NodeCommandMethods[] = {
  "cget",
  "configure",
  "insertBefore",
  "replaceChild",
  "removeChild",
  "appendChild",
  "hasChildNodes",
  "cloneNode",
  "children",
  "parent",
  "path",
  "createNode",
  "selectNode",
  "stringValue",
  "addEventListener",
  "removeEventListener",
  "dispatchEvent",
  "isSameNode",
  (char *) NULL
};
CONST84 char *TclDOM_NodeCommandOptions[] = {
  "-nodeType",
  "-parentNode",
  "-childNodes",
  "-firstChild",
  "-lastChild",
  "-previousSibling",
  "-nextSibling",
  "-attributes",
  "-namespaceURI",
  "-prefix",
  "-localName",
  "-nodeValue",
  "-cdatasection",
  "-nodeName",
  "-ownerDocument",
  "-id",
  (char *) NULL
};
CONST84 char *TclDOM_NodeCommandAddEventListenerOptions[] = {
  "-usecapture",
  (char *) NULL
};
CONST84 char *TclDOM_ElementCommandMethods[] = {
  "cget",
  "configure",
  "getAttribute",
  "setAttribute",
  "removeAttribute",
  "getAttributeNS",
  "setAttributeNS",
  "removeAttributeNS",
  "getAttributeNode",
  "setAttributeNode",
  "removeAttributeNode",
  "getAttributeNodeNS",
  "setAttributeNodeNS",
  "removeAttributeNodeNS",
  "getElementsByTagName",
  "normalize",
  (char *) NULL
};
CONST84 char *TclDOM_ElementCommandOptions[] = {
  "-tagName",
  "-empty",
  (char *) NULL
};
CONST84 char *TclDOM_EventCommandMethods[] = {
  "cget",
  "configure",
  "stopPropagation",
  "preventDefault",
  "initEvent",
  "initUIEvent",
  "initMouseEvent",
  "initMutationEvent",
  "postUIEvent",
  "postMouseEvent",
  "postMutationEvent",
  (char *) NULL
};
CONST84 char *TclDOM_EventCommandOptions[] = {
  "-altKey",
  "-attrName",
  "-attrChange",
  "-bubbles",
  "-button",
  "-cancelable",
  "-clientX",
  "-clientY",
  "-ctrlKey",
  "-currentNode",
  "-detail",
  "-eventPhase",
  "-metaKey",
  "-newValue",
  "-prevValue",
  "-relatedNode",
  "-screenX",
  "-screenY",
  "-shiftKey",
  "-target",
  "-timeStamp",
  "-type",
  "-view",
  (char *) NULL
};
CONST84 char *TclDOM_EventTypes[] = {
  "DOMFocusIn",
  "DOMFocusOut",
  "DOMActivate",
  "click",
  "mousedown",
  "mouseup",
  "mouseover",
  "mousemove",
  "mouseout",
  "DOMSubtreeModified",
  "DOMNodeInserted",
  "DOMNodeRemoved",
  "DOMNodeInsertedIntoDocument",
  "DOMNodeRemovedFromDocument",
  "DOMAttrModified",
  "DOMCharacterDataModified"
};

CONST84 char *TclDOM_ParseCommandOptions[] = {
  "-baseuri",
  "-externalentitycommand",
  (char *) NULL
};
CONST84 char *TclDOM_SerializeCommandOptions[] = {
  "-indent",
  "-method",
  "-encoding",
  "-omitxmldeclaration",
  (char *) NULL
};
CONST84 char *TclDOM_SerializeMethods[] = {
  "xml",
  "html",
  "text",
  (char *) NULL
};
CONST84 char *TclDOM_SelectNodeOptions[] = {
  "-namespaces",
  (char *) NULL
};

#if 0
/*
 *----------------------------------------------------------------------------
 *
 * Tcldom_Init --
 *
 *  Initialisation routine for generic module.
 *  NB. As of TclDOM v3.0 this module no longer gets loaded as
 *  a separate package.
 *
 * Results:
 *  None.
 *
 * Side effects:
 *  Creates variables.
 *
 *----------------------------------------------------------------------------
 */

int
Tcldom_Init (interp)
      Tcl_Interp *interp; /* Interpreter to initialise. */
{
  Tcl_Obj *objPtr;

  Tcl_SetVar(interp, "::dom::strictDOM", "0", TCL_GLOBAL_ONLY);
  Tcl_SetVar(interp, "::dom::maxSpecials", "10", TCL_GLOBAL_ONLY);
  objPtr = Tcl_NewListObj(0, NULL);
  Tcl_ListObjAppendElement(interp, objPtr, Tcl_NewIntObj(2));
  Tcl_ListObjAppendElement(interp, objPtr, Tcl_NewStringObj("        ", -1));
  Tcl_ListObjAppendElement(interp, objPtr, Tcl_NewStringObj("\t", -1));
  Tcl_SetVar2Ex(interp, "::dom::indentspec", NULL, objPtr, TCL_GLOBAL_ONLY);
  Tcl_SetVar(interp, "::dom::xmlnsURI", "http://www.w3.org/2000/xmlns/", TCL_GLOBAL_ONLY);

  return TCL_OK;
}
#endif /* 0 */

/*
 *----------------------------------------------------------------------------
 *
 * TclDOM_SetVars --
 *
 *  Initialisation routine for TclDOM modules.
 *
 * Results:
 *  None.
 *
 * Side effects:
 *  Creates variables.
 *
 *----------------------------------------------------------------------------
 */

int
TclDOM_SetVars(interp)
     Tcl_Interp *interp;
{
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMFocusIn", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMFocusOut", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMActivate", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "click", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "mousedown", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "mouseup", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "mouseover", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "mousemove", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "mouseout", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMSubtreeModified", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMNodeInserted", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMRemoved", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMNodeInsertedIntoDocument", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMRemovedFromDocument", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMAttrModified", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMAttrRemoved", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::bubbles", "DOMCharacterDataModified", Tcl_NewIntObj(1), 0);

  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMFocusIn", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMFocusOut", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMActivate", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "click", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "mousedown", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "mouseup", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "mouseover", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "mousemove", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "mouseout", Tcl_NewIntObj(1), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMSubtreeModified", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMNodeInserted", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMRemoved", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMNodeInsertedIntoDocument", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMRemovedFromDocument", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMAttrModified", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMAttrRemoved", Tcl_NewIntObj(0), 0);
  Tcl_SetVar2Ex(interp, "::dom::cancelable", "DOMCharacterDataModified", Tcl_NewIntObj(0), 0);

  return TCL_OK;
}
