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 "in select in table" insertion mode
  19.  *
  20.  * \param treebuilder  The treebuilder instance
  21.  * \param token        The token to handle
  22.  * \return True to reprocess token, false otherwise
  23.  */
  24. hubbub_error handle_in_select_in_table(hubbub_treebuilder *treebuilder,
  25.                 const hubbub_token *token)
  26. {
  27.         bool handled = false;
  28.         hubbub_error err = HUBBUB_OK;
  29.  
  30.         if (token->type == HUBBUB_TOKEN_END_TAG ||
  31.                         token->type == HUBBUB_TOKEN_START_TAG) {
  32.                 element_type type = element_type_from_name(treebuilder,
  33.                                 &token->data.tag.name);
  34.  
  35.                 if (type == CAPTION || type == TABLE || type == TBODY ||
  36.                                 type == TFOOT || type == THEAD || type == TR ||
  37.                                 type == TD || type == TH) {
  38.                         /** \todo parse error */
  39.  
  40.                         handled = true;
  41.  
  42.                         if ((token->type == HUBBUB_TOKEN_END_TAG &&
  43.                                         element_in_scope(treebuilder, type,
  44.                                                         true)) ||
  45.                                         token->type == HUBBUB_TOKEN_START_TAG) {
  46.                                 /** \todo fragment case */
  47.  
  48.                                 element_stack_pop_until(treebuilder,
  49.                                                 SELECT);
  50.                                 reset_insertion_mode(treebuilder);
  51.                                 err = HUBBUB_REPROCESS;
  52.                         }
  53.                 }
  54.         }
  55.  
  56.         if (!handled) {
  57.                 err = handle_in_select(treebuilder, token);
  58.         }
  59.  
  60.         return err;
  61. }
  62.