changeset 17463:bb9ae80d22e2

(looking_at_1): Set re_match_object. (string_match_1): Set re_match_object. (fast_string_match): Set re_match_object. (Fskip_chars_forward): Move to syntax.c. (Fskip_chars_backward): Move to syntax.c. (Fskip_syntax_forward): Move to syntax.c. (Fskip_syntax_backward): Move to syntax.c. (skip_chars): Move to syntax.c. (search_buffer): Set re_match_object. (syms_of_search): Move initialization of skip* to syntax.c.
author Richard M. Stallman <rms@gnu.org>
date Tue, 15 Apr 1997 04:52:38 +0000
parents a609ccd7eefb
children 36483a1ada24
files src/search.c
diffstat 1 files changed, 8 insertions(+), 297 deletions(-) [+]
line wrap: on
line diff
--- a/src/search.c	Tue Apr 15 04:46:14 1997 +0000
+++ b/src/search.c	Tue Apr 15 04:52:38 1997 +0000
@@ -249,6 +249,8 @@
       s1 = ZV - BEGV;
       s2 = 0;
     }
+
+  re_match_object = Qnil;
   
   i = re_match_2 (bufp, (char *) p1, s1, (char *) p2, s2,
 		  PT - BEGV, &search_regs,
@@ -325,6 +327,8 @@
 			   ? DOWNCASE_TABLE : 0),
 			  posix);
   immediate_quit = 1;
+  re_match_object = string;
+  
   val = re_search (bufp, (char *) XSTRING (string)->data,
 		   XSTRING (string)->size, s, XSTRING (string)->size - s,
 		   &search_regs);
@@ -374,6 +378,8 @@
 
   bufp = compile_pattern (regexp, 0, 0, 0);
   immediate_quit = 1;
+  re_match_object = string;
+  
   val = re_search (bufp, (char *) XSTRING (string)->data,
 		   XSTRING (string)->size, 0, XSTRING (string)->size,
 		   0);
@@ -671,299 +677,6 @@
   return pos;
 }
 
-Lisp_Object skip_chars ();
-
-DEFUN ("skip-chars-forward", Fskip_chars_forward, Sskip_chars_forward, 1, 2, 0,
-  "Move point forward, stopping before a char not in STRING, or at pos LIM.\n\
-STRING is like the inside of a `[...]' in a regular expression\n\
-except that `]' is never special and `\\' quotes `^', `-' or `\\'.\n\
-Thus, with arg \"a-zA-Z\", this skips letters stopping before first nonletter.\n\
-With arg \"^a-zA-Z\", skips nonletters stopping before first letter.\n\
-Returns the distance traveled, either zero or positive.")
-  (string, lim)
-     Lisp_Object string, lim;
-{
-  return skip_chars (1, 0, string, lim);
-}
-
-DEFUN ("skip-chars-backward", Fskip_chars_backward, Sskip_chars_backward, 1, 2, 0,
-  "Move point backward, stopping after a char not in STRING, or at pos LIM.\n\
-See `skip-chars-forward' for details.\n\
-Returns the distance traveled, either zero or negative.")
-  (string, lim)
-     Lisp_Object string, lim;
-{
-  return skip_chars (0, 0, string, lim);
-}
-
-DEFUN ("skip-syntax-forward", Fskip_syntax_forward, Sskip_syntax_forward, 1, 2, 0,
-  "Move point forward across chars in specified syntax classes.\n\
-SYNTAX is a string of syntax code characters.\n\
-Stop before a char whose syntax is not in SYNTAX, or at position LIM.\n\
-If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.\n\
-This function returns the distance traveled, either zero or positive.")
-  (syntax, lim)
-     Lisp_Object syntax, lim;
-{
-  return skip_chars (1, 1, syntax, lim);
-}
-
-DEFUN ("skip-syntax-backward", Fskip_syntax_backward, Sskip_syntax_backward, 1, 2, 0,
-  "Move point backward across chars in specified syntax classes.\n\
-SYNTAX is a string of syntax code characters.\n\
-Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM.\n\
-If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.\n\
-This function returns the distance traveled, either zero or negative.")
-  (syntax, lim)
-     Lisp_Object syntax, lim;
-{
-  return skip_chars (0, 1, syntax, lim);
-}
-
-Lisp_Object
-skip_chars (forwardp, syntaxp, string, lim)
-     int forwardp, syntaxp;
-     Lisp_Object string, lim;
-{
-  register unsigned char *p, *pend;
-  register unsigned int c;
-  register int ch;
-  unsigned char fastmap[0400];
-  /* If SYNTAXP is 0, STRING may contain multi-byte form of characters
-     of which codes don't fit in FASTMAP.  In that case, we set the
-     first byte of multibyte form (i.e. base leading-code) in FASTMAP
-     and set the actual ranges of characters in CHAR_RANGES.  In the
-     form "X-Y" of STRING, both X and Y must belong to the same
-     character set because a range striding across character sets is
-     meaningless.  */
-  int *char_ranges
-    = (int *) alloca (XSTRING (string)->size * (sizeof (int)) * 2);
-  int n_char_ranges = 0;
-  int negate = 0;
-  register int i;
-  int multibyte = !NILP (current_buffer->enable_multibyte_characters);
-
-  CHECK_STRING (string, 0);
-
-  if (NILP (lim))
-    XSETINT (lim, forwardp ? ZV : BEGV);
-  else
-    CHECK_NUMBER_COERCE_MARKER (lim, 1);
-
-  /* In any case, don't allow scan outside bounds of buffer.  */
-  /* jla turned this off, for no known reason.
-     bfox turned the ZV part on, and rms turned the
-     BEGV part back on.  */
-  if (XINT (lim) > ZV)
-    XSETFASTINT (lim, ZV);
-  if (XINT (lim) < BEGV)
-    XSETFASTINT (lim, BEGV);
-
-  p = XSTRING (string)->data;
-  pend = p + XSTRING (string)->size;
-  bzero (fastmap, sizeof fastmap);
-
-  if (p != pend && *p == '^')
-    {
-      negate = 1; p++;
-    }
-
-  /* Find the characters specified and set their elements of fastmap.
-     If syntaxp, each character counts as itself.
-     Otherwise, handle backslashes and ranges specially.  */
-
-  while (p != pend)
-    {
-      c = *p;
-      if (multibyte)
-	{
-	  ch = STRING_CHAR (p, pend - p);
-	  p += BYTES_BY_CHAR_HEAD (*p);
-	}
-      else
-	{
-	  ch = c;
-	  p++;
-	}
-      if (syntaxp)
-	fastmap[syntax_spec_code[c]] = 1;
-      else
-	{
-	  if (c == '\\')
-	    {
-	      if (p == pend) break;
-	      c = *p++;
-	    }
-	  if (p != pend && *p == '-')
-	    {
-	      unsigned int ch2;
-
-	      p++;
-	      if (p == pend) break;
-	      if (SINGLE_BYTE_CHAR_P (ch))
-		while (c <= *p)
-		  {
-		    fastmap[c] = 1;
-		    c++;
-		  }
-	      else
-		{
-		  fastmap[c] = 1; /* C is the base leading-code.  */
-		  ch2 = STRING_CHAR (p, pend - p);
-		  if (ch <= ch2)
-		    char_ranges[n_char_ranges++] = ch,
-		    char_ranges[n_char_ranges++] = ch2;
-		}
-	      p += multibyte ? BYTES_BY_CHAR_HEAD (*p) : 1;
-	    }
-	  else
-	    {
-	      fastmap[c] = 1;
-	      if (!SINGLE_BYTE_CHAR_P (ch))
-		char_ranges[n_char_ranges++] = ch,
-		char_ranges[n_char_ranges++] = ch;
-	    }
-	}
-    }
-
-  /* If ^ was the first character, complement the fastmap.  In
-     addition, as all multibyte characters have possibility of
-     matching, set all entries for base leading codes, which is
-     harmless even if SYNTAXP is 1.  */
-
-  if (negate)
-    for (i = 0; i < sizeof fastmap; i++)
-      {
-	if (!multibyte || !BASE_LEADING_CODE_P (i))
-	  fastmap[i] ^= 1;
-	else
-	  fastmap[i] = 1;
-      }
-
-  {
-    int start_point = PT;
-    int pos = PT;
-
-    immediate_quit = 1;
-    if (syntaxp)
-      {
-	if (forwardp)
-	  {
-	    if (multibyte)
-	      while (pos < XINT (lim)
-		     && fastmap[(int) SYNTAX (FETCH_CHAR (pos))])
-		INC_POS (pos);
-	    else
-	      while (pos < XINT (lim)
-		     && fastmap[(int) SYNTAX (FETCH_BYTE (pos))])
-		pos++;
-	  }
-	else
-	  {
-	    if (multibyte)
-	      while (pos > XINT (lim))
-		{
-		  int savepos = pos;
-		  DEC_POS (pos);
-		  if (!fastmap[(int) SYNTAX (FETCH_CHAR (pos))])
-		    {
-		      pos = savepos;
-		      break;
-		    }
-		}
-	    else
-	      while (pos > XINT (lim)
-		     && fastmap[(int) SYNTAX (FETCH_BYTE (pos - 1))])
-		pos--;
-	  }
-      }
-    else
-      {
-	if (forwardp)
-	  {
-	    if (multibyte)
-	      while (pos < XINT (lim) && fastmap[(c = FETCH_BYTE (pos))])
-		{
-		  if (!BASE_LEADING_CODE_P (c))
-		    pos++;
-		  else if (n_char_ranges)
-		    {
-		      /* We much check CHAR_RANGES for a multibyte
-			 character.  */
-		      ch = FETCH_MULTIBYTE_CHAR (pos);
-		      for (i = 0; i < n_char_ranges; i += 2)
-			if ((ch >= char_ranges[i] && ch <= char_ranges[i + 1]))
-			  break;
-		      if (!(negate ^ (i < n_char_ranges)))
-			break;
-
-		      INC_POS (pos);
-		    }
-		  else
-		    {
-		      if (!negate) break;
-		      INC_POS (pos);
-		    }
-		}
-	    else
-	      while (pos < XINT (lim) && fastmap[FETCH_BYTE (pos)])
-		pos++;
-	  }
-	else
-	  {
-	    if (multibyte)
-	      while (pos > XINT (lim))
-		{
-		  int savepos = pos;
-		  DEC_POS (pos);
-		  if (fastmap[(c = FETCH_BYTE (pos))])
-		    {
-		      if (!BASE_LEADING_CODE_P (c))
-			;
-		      else if (n_char_ranges)
-			{
-			  /* We much check CHAR_RANGES for a multibyte
-			     character.  */
-			  ch = FETCH_MULTIBYTE_CHAR (pos);
-			  for (i = 0; i < n_char_ranges; i += 2)
-			    if (ch >= char_ranges[i] && ch <= char_ranges[i + 1])
-			      break;
-			  if (!(negate ^ (i < n_char_ranges)))
-			    {
-			      pos = savepos;
-			      break;
-			    }
-			}
-		      else
-			if (!negate)
-			  {
-			    pos = savepos;
-			    break;
-			  }
-		    }
-		  else
-		    {
-		      pos = savepos;
-		      break;
-		    }
-		}
-	    else
-	      while (pos > XINT (lim) && fastmap[FETCH_BYTE (pos - 1)])
-		pos--;
-	  }
-      }
-    if (multibyte
-	/* INC_POS or DEC_POS might have moved POS over LIM.  */
-	&& (forwardp ? (pos > XINT (lim)) : (pos < XINT (lim))))
-      pos = XINT (lim);
-
-    SET_PT (pos);
-    immediate_quit = 0;
-
-    return make_number (PT - start_point);
-  }
-}
-
 /* Subroutines of Lisp buffer search functions. */
 
 static Lisp_Object
@@ -1145,6 +858,8 @@
 	  s1 = ZV - BEGV;
 	  s2 = 0;
 	}
+      re_match_object = Qnil;
+  
       while (n < 0)
 	{
 	  int val;
@@ -2273,10 +1988,6 @@
   defsubr (&Sposix_looking_at);
   defsubr (&Sstring_match);
   defsubr (&Sposix_string_match);
-  defsubr (&Sskip_chars_forward);
-  defsubr (&Sskip_chars_backward);
-  defsubr (&Sskip_syntax_forward);
-  defsubr (&Sskip_syntax_backward);
   defsubr (&Ssearch_forward);
   defsubr (&Ssearch_backward);
   defsubr (&Sword_search_forward);