Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * This file is part of libdom.
  3.  * Licensed under the MIT License,
  4.  *                http://www.opensource.org/licenses/mit-license.php
  5.  * Copyright 2009 Bo Yang <struggleyb.nku.com>
  6.  */
  7.  
  8. #include <stdlib.h>
  9.  
  10. #include "html/html_document.h"
  11. #include "html/html_html_element.h"
  12.  
  13. #include "core/node.h"
  14. #include "utils/utils.h"
  15.  
  16. static struct dom_element_protected_vtable _protect_vtable = {
  17.         {
  18.                 DOM_NODE_PROTECT_VTABLE_HTML_HTML_ELEMENT
  19.         },
  20.         DOM_HTML_HTML_ELEMENT_PROTECT_VTABLE
  21. };
  22.  
  23. /**
  24.  * Create a dom_html_html_element object
  25.  *
  26.  * \param doc  The document object
  27.  * \param ele  The returned element object
  28.  * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
  29.  */
  30. dom_exception _dom_html_html_element_create(struct dom_html_document *doc,
  31.                 dom_string *namespace, dom_string *prefix,                            
  32.                 struct dom_html_html_element **ele)
  33. {
  34.         struct dom_node_internal *node;
  35.  
  36.         *ele = malloc(sizeof(dom_html_html_element));
  37.         if (*ele == NULL)
  38.                 return DOM_NO_MEM_ERR;
  39.        
  40.         /* Set up vtables */
  41.         node = (struct dom_node_internal *) *ele;
  42.         node->base.vtable = &_dom_html_element_vtable;
  43.         node->vtable = &_protect_vtable;
  44.  
  45.         return _dom_html_html_element_initialise(doc, namespace, prefix, *ele);
  46. }
  47.  
  48. /**
  49.  * Initialise a dom_html_html_element object
  50.  *
  51.  * \param doc  The document object
  52.  * \param ele  The dom_html_html_element object
  53.  * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
  54.  */
  55. dom_exception _dom_html_html_element_initialise(struct dom_html_document *doc,
  56.                 dom_string *namespace, dom_string *prefix,                            
  57.                 struct dom_html_html_element *ele)
  58. {
  59.         return _dom_html_element_initialise(doc, &ele->base,
  60.                         doc->memoised[hds_HTML], namespace, prefix);
  61. }
  62.  
  63. /**
  64.  * Finalise a dom_html_html_element object
  65.  *
  66.  * \param ele  The dom_html_html_element object
  67.  */
  68. void _dom_html_html_element_finalise(struct dom_html_html_element *ele)
  69. {
  70.         _dom_html_element_finalise(&ele->base);
  71. }
  72.  
  73. /**
  74.  * Destroy a dom_html_html_element object
  75.  *
  76.  * \param ele  The dom_html_html_element object
  77.  */
  78. void _dom_html_html_element_destroy(struct dom_html_html_element *ele)
  79. {
  80.         _dom_html_html_element_finalise(ele);
  81.  
  82.         free(ele);
  83. }
  84.  
  85. /*------------------------------------------------------------------------*/
  86. /* The protected virtual functions */
  87.  
  88. /* The virtual function used to parse attribute value, see src/core/element.c
  89.  * for detail */
  90. dom_exception _dom_html_html_element_parse_attribute(dom_element *ele,
  91.                 dom_string *name, dom_string *value,
  92.                 dom_string **parsed)
  93. {
  94.         UNUSED(ele);
  95.         UNUSED(name);
  96.  
  97.         dom_string_ref(value);
  98.         *parsed = value;
  99.  
  100.         return DOM_NO_ERR;
  101. }
  102.  
  103. /* The virtual destroy function, see src/core/node.c for detail */
  104. void _dom_virtual_html_html_element_destroy(dom_node_internal *node)
  105. {
  106.         _dom_html_html_element_destroy((struct dom_html_html_element *) node);
  107. }
  108.  
  109. /* The virtual copy function, see src/core/node.c for detail */
  110. dom_exception _dom_html_html_element_copy(dom_node_internal *old,
  111.                 dom_node_internal **copy)
  112. {
  113.         return _dom_html_element_copy(old, copy);
  114. }
  115.  
  116. /*-----------------------------------------------------------------------*/
  117. /* API functions */
  118.  
  119. dom_exception dom_html_html_element_get_version(dom_html_html_element *element,
  120.                                            dom_string **version)
  121. {
  122.         dom_exception ret;
  123.         dom_string *_memo_version;
  124.  
  125.         _memo_version =
  126.                 ((struct dom_html_document *)
  127.                  ((struct dom_node_internal *)element)->owner)->memoised[hds_version];
  128.  
  129.         ret = dom_element_get_attribute(element, _memo_version, version);
  130.  
  131.         return ret;
  132. }
  133.  
  134. dom_exception dom_html_html_element_set_version(dom_html_html_element *element,
  135.                                            dom_string *version)
  136. {
  137.         dom_exception ret;
  138.         dom_string *_memo_version;
  139.  
  140.         _memo_version =
  141.                 ((struct dom_html_document *)
  142.                  ((struct dom_node_internal *)element)->owner)->memoised[hds_version];
  143.  
  144.         ret = dom_element_set_attribute(element, _memo_version, version);
  145.  
  146.         return ret;
  147. }
  148.