root/lib/search/normal.c

/* [previous][next][first][last][top][bottom][index][help]  */

DEFINITIONS

This source file includes following definitions.
  1. mc_search__normal_translate_to_regex
  2. mc_search__cond_struct_new_init_normal
  3. mc_search__run_normal
  4. mc_search_normal_prepare_replace_str

   1 /*
   2    Search text engine.
   3    Plain search
   4 
   5    Copyright (C) 2009-2019
   6    Free Software Foundation, Inc.
   7 
   8    Written by:
   9    Slava Zanko <slavazanko@gmail.com>, 2009.
  10 
  11    This file is part of the Midnight Commander.
  12 
  13    The Midnight Commander is free software: you can redistribute it
  14    and/or modify it under the terms of the GNU General Public License as
  15    published by the Free Software Foundation, either version 3 of the License,
  16    or (at your option) any later version.
  17 
  18    The Midnight Commander is distributed in the hope that it will be useful,
  19    but WITHOUT ANY WARRANTY; without even the implied warranty of
  20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21    GNU General Public License for more details.
  22 
  23    You should have received a copy of the GNU General Public License
  24    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  25  */
  26 
  27 #include <config.h>
  28 
  29 #include "lib/global.h"
  30 #include "lib/strutil.h"
  31 #include "lib/search.h"
  32 
  33 #include "internal.h"
  34 
  35 /*** global variables ****************************************************************************/
  36 
  37 /*** file scope macro definitions ****************************************************************/
  38 
  39 /*** file scope type declarations ****************************************************************/
  40 
  41 /*** file scope variables ************************************************************************/
  42 
  43 /*** file scope functions ************************************************************************/
  44 
  45 static GString *
  46 mc_search__normal_translate_to_regex (const GString * astr)
     /* [previous][next][first][last][top][bottom][index][help]  */
  47 {
  48     const char *str = astr->str;
  49     GString *buff;
  50     gsize loop;
  51 
  52     buff = g_string_sized_new (32);
  53 
  54     for (loop = 0; loop < astr->len; loop++)
  55         switch (str[loop])
  56         {
  57         case '*':
  58         case '?':
  59         case ',':
  60         case '{':
  61         case '}':
  62         case '[':
  63         case ']':
  64         case '\\':
  65         case '+':
  66         case '.':
  67         case '$':
  68         case '(':
  69         case ')':
  70         case '^':
  71         case '-':
  72         case '|':
  73             g_string_append_c (buff, '\\');
  74             MC_FALLTHROUGH;
  75         default:
  76             g_string_append_c (buff, str[loop]);
  77             break;
  78         }
  79 
  80     return buff;
  81 }
  82 
  83 /*** public functions ****************************************************************************/
  84 
  85 void
  86 mc_search__cond_struct_new_init_normal (const char *charset, mc_search_t * lc_mc_search,
     /* [previous][next][first][last][top][bottom][index][help]  */
  87                                         mc_search_cond_t * mc_search_cond)
  88 {
  89     GString *tmp;
  90 
  91     tmp = mc_search__normal_translate_to_regex (mc_search_cond->str);
  92     g_string_free (mc_search_cond->str, TRUE);
  93 
  94     mc_search_cond->str = tmp;
  95     mc_search__cond_struct_new_init_regex (charset, lc_mc_search, mc_search_cond);
  96 }
  97 
  98 /* --------------------------------------------------------------------------------------------- */
  99 
 100 gboolean
 101 mc_search__run_normal (mc_search_t * lc_mc_search, const void *user_data,
     /* [previous][next][first][last][top][bottom][index][help]  */
 102                        gsize start_search, gsize end_search, gsize * found_len)
 103 {
 104     return mc_search__run_regex (lc_mc_search, user_data, start_search, end_search, found_len);
 105 }
 106 
 107 /* --------------------------------------------------------------------------------------------- */
 108 GString *
 109 mc_search_normal_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str)
     /* [previous][next][first][last][top][bottom][index][help]  */
 110 {
 111     (void) lc_mc_search;
 112     return g_string_new_len (replace_str->str, replace_str->len);
 113 }

/* [previous][next][first][last][top][bottom][index][help]  */