File:  [Public] / Amaya / amaya / javascript.h
Revision 1.1: download - view: text, annotated - select for diffs
Wed Sep 12 16:37:10 2007 UTC (16 years, 9 months ago) by vatton
Branches: MAIN
CVS tags: HEAD
Prepare the integration of javascript support
Irene

/*
 *
 *  (c) COPYRIGHT INRIA and W3C, 2007
 *  Please first read the full copyright statement in file COPYRIGHT.
 *
 */

#ifndef __AMAYA_JAVASCRIPT_H__
#define __AMAYA_JAVASCRIPT_H__

/* javascript.h : defines functions, properties and classes
 * used by the javascript interpreter
 *
 * Author: F. Wang
 *
 */

/*----------------------------------------------------------------------
           Instructions to complete the javascript/DOM support

  * Properties

     - Add a C identifier for your property in the enum list
       properties_names.

     - Complete or create a JSPropertySpec to integrate your new property.
        If your property must not be modified by the user, then add a
        JSPROP_READONLY flag in its definition.

     - In javascript.c, complete the functions that manipulate your property:
        getProperty, setProperty (if your property is not readonly)...

     - If your property does not belong to an already declared class, you
       have to create one first (see the instructions for Classes). Then
       apply JS_DefineProperties to all the object of the classes that
       have the property.

  * Methods (functions)

     - Add a declaration of a C function representing the method.

     - Complete or create a JSFunctionSpec to integrate your new method.

     - In javascript.c, create the C function representing the method.

     - If your method does not belong to an already declared class, you
       have to create one first (see the instructions for Classes). Then
       apply JS_DefineFunctions to all the object of the classes that
       have the method.

  * Classes (in DOM specification, they correspond to "Object" in the
             pages ECMA Script Language Binding)

     - Add a JSClass definition (see all the possible configurations
       at http://www.mozilla.org/js/spidermonkey/):
       
         > The first element is the name of your class

         > If the class is supposed to be applied to objects that have an
           equivalent in Thot document tree (type Element), then add a
           JSCLASS_HAS_PRIVATE flag to the second element.

         > The next four elements indicate the name of the C functions
           (for instance getProperty) that manipulate properties of an
           object, respectivly to add, delete, get or set a property.
           If they are not used, then put JS_PropertyStub.
           
         > The last elements indicate other manipulations, that normally
           are not used, so you can let them to JS_EnumerateStub,
           JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub

      - Define Properties and Methods to use with your class. See the
        instructions before.

      - In javascript.c, make Amaya apply your class (and the corresponding
        property and methods) to a certain kind of objects:

        > If they are childs of the global object (such as Navigator,
          Screen...), then only one object is created for this class and
          this must directly be done in the function InitJavascript.

        > Otherwise, you have to analyse the type of Thot's Document/Node
          in the function BuildDocumentTree in order to apply the class to
          each object of the expected type.

        >  To create an object with a given class use the function
           JS_NewObject. If the object is actually a property, you have to
           use JS_DefineObject. Note that in this case, it is not mandatory
           to define the property in javascript.h

  -----------------------------------------------------------------------*/

/*----------------------------------------------------------------------
  Functions used to manipulate property values
  -----------------------------------------------------------------------*/
static JSBool getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
static JSBool setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);

/*----------------------------------------------------------------------
  Name of all properties used in getProperty, setProperty...
  -----------------------------------------------------------------------*/
enum properties_names
{
 WINDOW,
 WINDOW_CLOSED, WINDOW_FRAMES, WINDOW_LENGTH, WINDOW_OPENER,
 WINDOW_PARENT, WINDOW_SELF, WINDOW_TOP, WINDOW_NAME,

 NAVIGATOR_APPNAME, NAVIGATOR_APPCODENAME, NAVIGATOR_APPVERSION, 
 NAVIGATOR_USERAGENT, NAVIGATOR_COOKIESENABLED, NAVIGATOR_PLATFORM,
 NAVIGATOR_BROWSERLANGUAGE, /*NAVIGATOR_PLUGINS, */

 SCREEN_PIXELDEPTH, SCREEN_COLORDEPTH,
 SCREEN_AVAILHEIGHT, SCREEN_AVAILWIDTH,  SCREEN_HEIGHT, SCREEN_WIDTH,
 
 HISTORY_LENGTH,

 LOCATION_HREF, LOCATION_PATHNAME, LOCATION_HASH,
 /*, LOCATION_HOST, LOCATION_HOSTNAME, 
 LOCATION_PORT, LOCATION_PROTOCOL, LOCATION_SEARCH, */

 DOCUMENT_IMPLEMENTATION, DOCUMENT_DOCTYPE, DOCUMENT_DOCUMENTELEMENT,

 DOCUMENTTYPE_NAME, DOCUMENTTYPE_ENTITIES, DOCUMENTTYPE_NOTATIONS,

 NODE_NODENAME, NODE_NODEVALUE, NODE_NODETYPE, NODE_PARENTNODE, NODE_CHILDNODES, NODE_FIRSTCHILD,
 NODE_LASTCHILD, NODE_PREVIOUSSIBLING, NODE_NEXTSIBLING, NODE_ATTRIBUTES, NODE_OWNERDOCUMENT,

 NODELIST_LENGTH
};

/*----------------------------------------------------------------------
  Global Object Window
  -----------------------------------------------------------------------*/
static JSBool window_alert(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_confirm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_prompt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_blur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

/*
static JSBool window_clearInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_clearTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_focus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_moveBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_moveTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_resizeBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_resizeTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_scrollBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_scrollTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_setInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool window_setTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
*/

static JSFunctionSpec window_functions[] =
{
  /* name of javascript function     name of C function       number of arguments  */
  {"alert"                        , window_alert          ,        1},
  {"confirm"                      , window_confirm        ,        1},
  {"prompt"                       , window_prompt         ,        2},
  {"close"                        , window_close          ,        0},
  {"blur"                         , window_blur           ,        0},
  {"print"                        , window_print          ,        0},

/*
  {"clearInterval"                , window_clearInterval  ,        1},
  {"clearTimeout"                 , window_clearTimeout   ,        1},
  {"focus"                        , window_focus          ,        0},
  {"moveBy"                       , window_moveBy         ,        2},
  {"moveTo"                       , window_moveTo         ,        2},
  {"open"                         , window_open           ,        4},
  {"resizeBy"                     , window_resizeBy       ,        2},
  {"resizeTo"                     , window_resizeTo       ,        2},
  {"scrollBy"                     , window_scrollBy       ,        2},
  {"scrollTo"                     , window_scrollTo       ,        2},
  {"setInterval"                  , window_setInterval    ,        3},
  {"setTimeout"                   , window_setTimeout     ,        3},
*/
  {0}
};

static JSPropertySpec window_properties[] =
{
  {"window"     ,      WINDOW,             JSPROP_READONLY},
  {"closed"     ,      WINDOW_CLOSED,      JSPROP_READONLY},
  {"frames"     ,      WINDOW_FRAMES,      JSPROP_INDEX & JSPROP_READONLY},
  {"length"     ,      WINDOW_LENGTH,      JSPROP_READONLY},
  {"opener"     ,      WINDOW_OPENER,      JSPROP_READONLY},
  {"parent"     ,      WINDOW_PARENT,      JSPROP_READONLY},
  {"self"       ,      WINDOW_SELF  ,      JSPROP_READONLY},
  {"top"        ,      WINDOW_TOP   ,      JSPROP_READONLY},
  {0}
};

static JSClass window_class =
{
  "Window",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object Navigator
  -----------------------------------------------------------------------*/

static JSBool navigator_javaEnabled(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool navigator_taintEnabled(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec navigator_functions[] =
{
  /* name of javascript function     name of C function       number of arguments  */
  {"javaEnabled"                  , navigator_javaEnabled  ,        0},
  {"taintEnabled"                 , navigator_taintEnabled ,        0},
  {0}
};

static JSPropertySpec navigator_properties[] =
{
/*  {"plugins"         ,      NAVIGATOR_PLUGINS          , JSPROP_INDEX & JSPROP_READONLY},*/
  {"appCodeName"     ,      NAVIGATOR_APPCODENAME      , JSPROP_READONLY},
  {"appName"         ,      NAVIGATOR_APPNAME          , JSPROP_READONLY},
  {"appVersion"      ,      NAVIGATOR_APPVERSION       , JSPROP_READONLY},
  {"browserLanguage" ,      NAVIGATOR_BROWSERLANGUAGE  , JSPROP_READONLY},
  {"cookieEnabled"   ,      NAVIGATOR_COOKIESENABLED   , JSPROP_READONLY},
  {"platform"        ,      NAVIGATOR_PLATFORM         , JSPROP_READONLY},
  {"userAgent"       ,      NAVIGATOR_USERAGENT        , JSPROP_READONLY},
  {0}
};

static JSClass navigator_class =
{
  "Navigator",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};


/*----------------------------------------------------------------------
  Object Screen
  -----------------------------------------------------------------------*/

static JSPropertySpec screen_properties[] =
{
  {"availHeight",      SCREEN_AVAILHEIGHT      , JSPROP_READONLY},
  {"availWidth" ,      SCREEN_AVAILWIDTH       , JSPROP_READONLY},
  {"colorDepth" ,      SCREEN_COLORDEPTH       , JSPROP_READONLY},
  {"pixelDepth" ,      SCREEN_PIXELDEPTH       , JSPROP_READONLY},
  {"height"     ,      SCREEN_HEIGHT           , JSPROP_READONLY},
  {"width"      ,      SCREEN_WIDTH            , JSPROP_READONLY},
  {0}
};

static JSClass screen_class =
{
  "Screen",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object History
  -----------------------------------------------------------------------*/

static JSBool history_back(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool history_forward(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
/*static JSBool history_go(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);*/

static JSFunctionSpec history_functions[] =
{
  /* name of javascript function     name of C function       number of arguments  */
  {"back"                            , history_back          ,        0},
  {"forward"                         , history_forward       ,        0},
/*  {"go"                              , history_go            ,        1},*/
  {0}
};

static JSPropertySpec history_properties[] =
{
  {"length"      ,      HISTORY_LENGTH            , JSPROP_READONLY},
  {0}
};

static JSClass history_class =
{
  "History",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object Location
  -----------------------------------------------------------------------*/

static JSBool location_replace(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool location_assign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool location_reload(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec location_functions[] =
{
  /* name of javascript function     name of C function       number of arguments  */
  {"reload"                         , location_reload          ,        0},
  {"assign"                         , location_assign          ,        1},
  {"replace"                        , location_replace         ,        1},
  {0}
};


static JSPropertySpec location_properties[] =
{
  {"href"            ,      LOCATION_HREF               , 0},
  {"pathname"        ,      LOCATION_PATHNAME           , JSPROP_READONLY},
  {"hash"            ,      LOCATION_HASH               , JSPROP_READONLY},
/*   {"host"            ,      LOCATION_HOST               , 0},
  {"hostname"        ,      LOCATION_HOSTNAME           , 0},
  {"port"            ,      LOCATION_PORT               , 0},
  {"protocol"        ,      LOCATION_PROTOCOL           , 0},
  {"search"          ,      LOCATION_SEARCH             , 0},*/
  {0}
};


static JSClass location_class =
{
  "Location",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,setProperty,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object DOMException
  -----------------------------------------------------------------------*/
/*
static JSClass DOMException_class =
{
  "DOMException",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};*/

/*----------------------------------------------------------------------
  Object ExceptionCode
  -----------------------------------------------------------------------*/
/*
static JSClass ExceptionCode_class =
{
  "ExceptionCode",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};
*/

/* Definition ExceptionCode */
#define INDEX_SIZE_ERR                   1
#define DOMSTRING_SIZE_ERR               2
#define HIERARCHY_REQUEST_ERR            3
#define WRONG_DOCUMENT_ERR               4
#define INVALID_CHARACTER_ERR            5
#define NO_DATA_ALLOWED_ERR              6
#define NO_MODIFICATION_ALLOWED_ERR      7
#define NOT_FOUND_ERR                    8
#define NOT_SUPPORTED_ERR                9
#define INUSE_ATTRIBUTE_ERR             10 

/*----------------------------------------------------------------------
  Object DOMImplementation
  -----------------------------------------------------------------------*/
static JSBool DOMImplementation_hasFeature(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec DOMImplementation_functions[] =
{
  /* name of javascript function     name of C function             number of arguments  */
  {"hasFeature"                   , DOMImplementation_hasFeature   ,        2},
  {0}
};

static JSClass DOMImplementation_class =
{
  "DOMImplementation",0,
  JS_PropertyStub,JS_PropertyStub,JS_PropertyStub,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};


/*----------------------------------------------------------------------
  Object DocumentFragment
  -----------------------------------------------------------------------*/
static JSClass DocumentFragment_class =
{
  "DocumentFragment",0,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object Document
  -----------------------------------------------------------------------*/
/*

static JSBool Document_createElement(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Document_createDocumentFragment(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Document_createCDATASection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Document_createProcessingInstruction(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Document_createAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Document_createEntityReference(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Document_getElementsByTagName(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec Document_functions[] =
{
  / name of javascript function     name of C function                   number of arguments  /
  {"createElement"                , Document_createElement               ,        1},
  {"createDocumentFragment"       , Document_createDocumentFragment      ,        0},
  {"createCDATASection"           , Document_createCDATASection          ,        1},
  {"createProcessingInstruction"  , Document_createProcessingInstruction ,        2},
  {"createAttribute"              , Document_createAttribute             ,        1},
  {"createEntityReference"        , Document_createEntityReference       ,        1},
  {"getElementsByTagName"         , Document_getElementsByTagName        ,        1},
  {0}
};
*/

static JSPropertySpec Document_properties[] =
{
  {"doctype"            ,    DOCUMENT_DOCTYPE          , JSPROP_READONLY},
  {"implementation"     ,    DOCUMENT_IMPLEMENTATION   , JSPROP_READONLY},
  {"documentElement"    ,    DOCUMENT_DOCUMENTELEMENT  , JSPROP_READONLY},
  {0}
};

static JSClass Document_class =
{
  "Document", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};


/*----------------------------------------------------------------------
  Object Node
  -----------------------------------------------------------------------*/
/*
static JSBool Node_createElement(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Node_replaceChild(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Node_removeChild(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Node_appendChild(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);*/
static JSBool Node_hasChildNodes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
//static JSBool Node_cloneNode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);*/

static JSFunctionSpec Node_functions[] =
{
/*  {"insertBefore"                 , Node_createElement                   ,        2},
  {"replaceChild"                 , Node_replaceChild                    ,        1},
  {"removeChild"                  , Node_removeChild                     ,        0},
  {"appendChild"                  , Node_appendChild                     ,        1},*/
  {"hasChildNodes"                , Node_hasChildNodes                   ,        0},
/*  {"cloneNode"                    , Node_cloneNode                       ,        1},*/
  {0}
};

static JSPropertySpec Node_properties[] =
{
  {"nodeName"            ,      NODE_NODENAME               , JSPROP_READONLY},
  {"nodeValue"           ,      NODE_NODEVALUE              , JSPROP_READONLY},
  {"nodeType"            ,      NODE_NODETYPE               , JSPROP_READONLY},
  {"parentNode"          ,      NODE_PARENTNODE             , JSPROP_READONLY},
  {"childNodes"          ,      NODE_CHILDNODES             , JSPROP_READONLY},
  {"firstChild"          ,      NODE_FIRSTCHILD             , JSPROP_READONLY},
  {"lastChild"           ,      NODE_LASTCHILD              , JSPROP_READONLY},
  {"previousSibling"     ,      NODE_PREVIOUSSIBLING        , JSPROP_READONLY},
  {"nextSibling"         ,      NODE_NEXTSIBLING            , JSPROP_READONLY},
  {"attributes"          ,      NODE_ATTRIBUTES             , JSPROP_READONLY},
  {"ownerDocument"       ,      NODE_OWNERDOCUMENT          , JSPROP_READONLY},
  {0}
};

/*static JSClass Node_class =
{
  "Node", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};*/

/* Definition NodeType */
#define ELEMENT_NODE                    1
#define ATTRIBUTE_NODE                  2
#define TEXT_NODE                       3
#define CDATA_SECTION_NODE              4
#define ENTITY_REFERENCE_NODE           5
#define ENTITY_NODE                     6
#define PROCESSING_INSTRUCTION_NODE     7
#define COMMENT_NODE                    8
#define DOCUMENT_NODE                   9
#define DOCUMENT_TYPE_NODE             10
#define DOCUMENT_FRAGMENT_NODE         11
#define NOTATION_NODE                  12

/*----------------------------------------------------------------------
  Object NodeList
  -----------------------------------------------------------------------*/
static JSBool NodeList_item(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec NodeList_functions[] =
{
  {"item"                 , NodeList_item                   ,        1},
  {0}
};

static JSPropertySpec NodeList_properties[] =
{
  {"length"            ,      NODELIST_LENGTH               , JSPROP_READONLY},
  {0}
};

static JSClass NodeList_class =
{
  "NodeList", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object NamedNodeMap
  -----------------------------------------------------------------------*/
/*
static JSBool NamedNodeMap_getNamedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool NamedNodeMap_setNamedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool NamedNodeMap_removeNamedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool NamedNodeMap_item(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec NamedNodeMap_functions[] =
{
  {"getNamedItem"                 , NamedNodeMap_getNamedItem           ,        1},
  {"setNamedItem"                 , NamedNodeMap_setNamedItem           ,        1},
  {"removeNamedItem"              , NamedNodeMap_removeNamedItem        ,        1},
  {"item"                         , NamedNodeMap_item                   ,        1},
  {0}
};

static JSPropertySpec NamedNodeMap_properties[] =
{
  {"length"            ,      NAMEDNODEMAP_LENGTH               , JSPROP_READONLY},
  {0}
};

static JSClass NamedNodeMap_class =
{
  "NamedNodeMap", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};
*/

/*----------------------------------------------------------------------
  Object CharacterData
  -----------------------------------------------------------------------*/
/*
static JSBool CharacterData_substringData(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool CharacterData_appendData(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool CharacterData_insertData(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool CharacterData_deleteData(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool CharacterData_replaceData(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec CharacterData_functions[] =
{
  {"substringData"              , CharacterData_createElement                   ,        2},
  {"appendData"                 , CharacterData_createElement                   ,        1},
  {"insertData"                 , CharacterData_createElement                   ,        2},
  {"deleteData"                 , CharacterData_createElement                   ,        2},
  {"replaceData"                , CharacterData_createElement                   ,        3},
  {0}
};

static JSPropertySpec CharacterData_properties[] =
{
  {"data"                ,      CHARACTERDATA_DATA               , JSPROP_READONLY},
  {"length"              ,      CHARACTERDATA_LENGTH             , JSPROP_READONLY},
  {0}
};

static JSClass CharacterData_class =
{
  "CharacterData", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};
*/

/*----------------------------------------------------------------------
  Object Attr
  -----------------------------------------------------------------------*/
/*
static JSPropertySpec Attr_properties[] =
{
  {"name"            ,      ATTR_NAME                   , JSPROP_READONLY},
  {"specified"       ,      ATTR_SPECIFIED              , JSPROP_READONLY},
  {"value"           ,      ATTR_VALUE                  , JSPROP_READONLY},
  {0}
};
*/

static JSClass Attr_class =
{
  "Attr", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};


/*----------------------------------------------------------------------
  Object Element
  -----------------------------------------------------------------------*/
/*
static JSBool Element_getAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Element_setAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Element_removeAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Element_getAttributeNode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Element_setAttributeNode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Element_removeAttributeNode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Element_getElementsByTagName(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
static JSBool Element_normalize(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec Element_functions[] =
{
  {"getAttribute"                 , Element_getAttribute                ,        1},
  {"setAttribute"                 , Element_setAttribute                ,        1},
  {"removeAttribute"              , Element_removeAttribute             ,        1},
  {"getAttributeNode"             , Element_getAttributeNode            ,        1},
  {"setAttributeNode"             , Element_setAttributeNode            ,        1},
  {"removeAttributeNode"          , Element_removeAttributeNode         ,        1},
  {"getElementsByTagName"         , Element_getElementsByTagName        ,        1},
  {"normalize"                    , Element_normalize                   ,        0},
  {0}
};

static JSPropertySpec Element_properties[] =
{
  {"tagName"            ,      ELEMENT_TAGNAME               , JSPROP_READONLY},
  {0}
};

*/
static JSClass Element_class =
{
  "Element", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object Text
  -----------------------------------------------------------------------*/
/*
static JSBool Element_splitText(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);

static JSFunctionSpec Text_functions[] =
{
  {"splitText"                 , Text_splitText                   ,        1},
  {0}
};*/

static JSClass Text_class =
{
  "Text", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object Comment
  -----------------------------------------------------------------------*/
static JSClass Comment_class =
{
  "Comment", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object CDATASection
  -----------------------------------------------------------------------*/
static JSClass CDATASection_class =
{
  "CDATASection", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object DocumentType
  -----------------------------------------------------------------------*/

static JSPropertySpec DocumentType_properties[] =
{
  {"name"                ,      DOCUMENTTYPE_NAME           , JSPROP_READONLY},
  {"entities"            ,      DOCUMENTTYPE_ENTITIES       , JSPROP_READONLY},
  {"notations"           ,      DOCUMENTTYPE_NOTATIONS      , JSPROP_READONLY},
  {0}
};

static JSClass DocumentType_class =
{
  "DocumentType", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object Notation
  -----------------------------------------------------------------------*/
/*
static JSPropertySpec Notation_properties[] =
{
  {"publicId"            ,      NOTATION_PUBLICID            , JSPROP_READONLY},
  {"systemId"            ,      NOTATION_SYSTEMID            , JSPROP_READONLY},
  {0}
};
*/
static JSClass Notation_class =
{
  "Notation", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object Entity
  -----------------------------------------------------------------------*/
/*
static JSPropertySpec Entity_properties[] =
{
  {"publicId"            ,      ENTITY_PUBLICID               , JSPROP_READONLY},
  {"systemId"            ,      ENTITY_SYSTEMID               , JSPROP_READONLY},
  {"notationName"        ,      ENTITY_NOTATIONNAME           , JSPROP_READONLY},
  {0}
};
*/
static JSClass Entity_class =
{
  "Entity_properties", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object EntityReference
  -----------------------------------------------------------------------*/
static JSClass EntityReference_class =
{
  "EntityReference", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

/*----------------------------------------------------------------------
  Object ProcessingInstruction
  -----------------------------------------------------------------------*/
/*
static JSPropertySpec ProcessingInstruction_properties[] =
{
  {"target"            , PROCESSINGINSTRUCTION_TARGET     , JSPROP_READONLY},
  {"data"              , PROCESSINGINSTRUCTION_DATA       , JSPROP_READONLY},
  {0}
};
*/
static JSClass ProcessingInstruction_class =
{
  "ProcessingInstruction", JSCLASS_HAS_PRIVATE,
  JS_PropertyStub,JS_PropertyStub,getProperty,JS_PropertyStub,
  JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
};

#endif /* __AMAYA_JAVASCRIPT_H__ */

Webmaster