Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.  * Copyright 2004 John M Bell <jmb202@ecs.soton.ac.uk>
  3.  * Copyright 2005 Adrian Lees <adrianl@users.sourceforge.net>
  4.  * Copyright 2009 Mark Benjamin <netsurf-browser.org.MarkBenjamin@dfgh.net>
  5.  *
  6.  * This file is part of NetSurf, http://www.netsurf-browser.org/
  7.  *
  8.  * NetSurf is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; version 2 of the License.
  11.  *
  12.  * NetSurf is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19.  */
  20.  
  21.  /** \file
  22.  * Free text search (core)
  23.  */
  24. #include "utils/config.h"
  25.  
  26. #include <ctype.h>
  27. #include <string.h>
  28. #include <dom/dom.h>
  29. #include "content/content.h"
  30. #include "content/hlcache.h"
  31. #include "desktop/browser_private.h"
  32. #include "desktop/gui.h"
  33. #include "desktop/options.h"
  34. #include "desktop/search.h"
  35. #include "desktop/selection.h"
  36. #include "render/box.h"
  37. #include "render/html.h"
  38. #include "render/search.h"
  39. #include "render/textplain.h"
  40. #include "utils/config.h"
  41. #include "utils/log.h"
  42. #include "utils/messages.h"
  43. #include "utils/url.h"
  44. #include "utils/utils.h"
  45.  
  46.  
  47. /* callback informing us that a search context is nolonger valid */
  48. static void browser_window_search_invalidate(struct search_context *context,
  49.                 void *p)
  50. {
  51.         struct browser_window *bw = p;
  52.         assert(bw != NULL);
  53.  
  54.         if (bw->cur_search != NULL && bw->cur_search == context) {
  55.                 /* The browser's current search is the one being invalidated */
  56.                 bw->cur_search = NULL;
  57.         }
  58. }
  59.  
  60.  
  61. bool browser_window_search_create_context(struct browser_window *bw,
  62.                 struct gui_search_callbacks *gui_callbacks, void *gui_p)
  63. {
  64.         struct search_callbacks callbacks;
  65.         assert(bw != NULL);
  66.         assert(gui_callbacks != NULL);
  67.  
  68.         if (bw->cur_search != NULL)
  69.                 search_destroy_context(bw->cur_search);
  70.         bw->cur_search = NULL;
  71.  
  72.         if (!bw->current_content)
  73.                 return false;
  74.  
  75.         callbacks.gui = gui_callbacks;
  76.         callbacks.gui_p = gui_p;
  77.         callbacks.invalidate = browser_window_search_invalidate;
  78.         callbacks.p = bw;
  79.         bw->cur_search = search_create_context(bw->current_content, callbacks);
  80.  
  81.         if (bw->cur_search == NULL)
  82.                 return false;
  83.  
  84.         return true;
  85. }
  86.  
  87.  
  88. void browser_window_search_destroy_context(struct browser_window *bw)
  89. {
  90.         assert(bw != NULL);
  91.  
  92.         if (bw->cur_search != NULL)
  93.                 search_destroy_context(bw->cur_search);
  94.         bw->cur_search = NULL;
  95. }
  96.  
  97.  
  98. /**
  99.  * to simplify calls to search_step(); checks that the browser_window is
  100.  * non-NULL, creates a new search_context in case of a new search
  101.  * \param bw the browser_window the search refers to
  102.  * \param callbacks the callbacks to modify appearance according to results
  103.  * \param gui_p a pointer returned to the callbacks
  104.  * \return true for success
  105.  */
  106. bool browser_window_search_verify_new(struct browser_window *bw,
  107.                 struct gui_search_callbacks *gui_callbacks, void *gui_p)
  108. {
  109.         if (bw == NULL)
  110.                 return false;
  111.         if (bw->cur_search == NULL)
  112.                 return browser_window_search_create_context(bw,
  113.                                 gui_callbacks, gui_p);
  114.  
  115.         return true;
  116. }
  117.  
  118.  
  119. void browser_window_search_step(struct browser_window *bw,
  120.                 search_flags_t flags, const char *string)
  121. {
  122.         assert(bw != NULL);
  123.  
  124.         if (bw->cur_search != NULL)
  125.                 search_step(bw->cur_search, flags, string);
  126. }
  127.  
  128.  
  129. void browser_window_search_show_all(bool all, struct browser_window *bw)
  130. {
  131.         assert(bw != NULL);
  132.  
  133.         if (bw->cur_search != NULL)
  134.                 search_show_all(all, bw->cur_search);
  135. }
  136.  
  137.