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 Hubbub.
  3.  * Licensed under the MIT License,
  4.  *                http://www.opensource.org/licenses/mit-license.php
  5.  * Copyright 2008 Andrew Sidwell <takkaria@netsurf-browser.org>
  6.  */
  7.  
  8. #include <assert.h>
  9. #include <string.h>
  10.  
  11. #include "treebuilder/modes.h"
  12. #include "treebuilder/internal.h"
  13. #include "treebuilder/treebuilder.h"
  14. #include "utils/utils.h"
  15.  
  16.  
  17. /**
  18.  * Handle token in "after after body" insertion mode
  19.  *
  20.  * \param treebuilder  The treebuilder instance
  21.  * \param token        The token to handle
  22.  * \return HUBBUB_OK on completion,
  23.  *         HUBBUB_REPROCESS to reprocess the token,
  24.  *         appropriate error otherwise
  25.  */
  26. hubbub_error handle_after_after_body(hubbub_treebuilder *treebuilder,
  27.                 const hubbub_token *token)
  28. {
  29.         hubbub_error err = HUBBUB_OK;
  30.  
  31.         switch (token->type) {
  32.         case HUBBUB_TOKEN_CHARACTER:
  33.                 err = process_characters_expect_whitespace(treebuilder,
  34.                                 token, true);
  35.                 if (err == HUBBUB_REPROCESS)
  36.                         treebuilder->context.mode = IN_BODY;
  37.                 break;
  38.         case HUBBUB_TOKEN_COMMENT:
  39.                 err = process_comment_append(treebuilder, token,
  40.                                 treebuilder->context.document);
  41.                 break;
  42.         case HUBBUB_TOKEN_DOCTYPE:
  43.                 err = handle_in_body(treebuilder, token);
  44.                 break;
  45.         case HUBBUB_TOKEN_START_TAG:
  46.         {
  47.                 element_type type = element_type_from_name(treebuilder,
  48.                                 &token->data.tag.name);
  49.  
  50.                 if (type == HTML) {
  51.                         /* Process as if "in body" */
  52.                         err = handle_in_body(treebuilder, token);
  53.                 } else {
  54.                         /** \todo parse error */
  55.                         treebuilder->context.mode = IN_BODY;
  56.                         err = HUBBUB_REPROCESS;
  57.                 }
  58.         }
  59.                 break;
  60.         case HUBBUB_TOKEN_END_TAG:
  61.                 /** \todo parse error */
  62.                 treebuilder->context.mode = IN_BODY;
  63.                 err = HUBBUB_REPROCESS;
  64.                 break;
  65.         case HUBBUB_TOKEN_EOF:
  66.                 break;
  67.         }
  68.  
  69.         return err;
  70. }
  71.  
  72.