emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/search.c [lexbind]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/search.c [lexbind]
Date: Wed, 08 Dec 2004 18:56:49 -0500

Index: emacs/src/search.c
diff -c emacs/src/search.c:1.164.2.12 emacs/src/search.c:1.164.2.13
*** emacs/src/search.c:1.164.2.12       Fri Oct 29 02:05:11 2004
--- emacs/src/search.c  Wed Dec  8 23:36:24 2004
***************
*** 41,47 ****
  struct regexp_cache
  {
    struct regexp_cache *next;
!   Lisp_Object regexp;
    struct re_pattern_buffer buf;
    char fastmap[0400];
    /* Nonzero means regexp was compiled to do full POSIX backtracking.  */
--- 41,47 ----
  struct regexp_cache
  {
    struct regexp_cache *next;
!   Lisp_Object regexp, whitespace_regexp;
    struct re_pattern_buffer buf;
    char fastmap[0400];
    /* Nonzero means regexp was compiled to do full POSIX backtracking.  */
***************
*** 83,88 ****
--- 83,90 ----
  
  Lisp_Object Qinvalid_regexp;
  
+ Lisp_Object Vsearch_spaces_regexp;
+ 
  static void set_search_regs ();
  static void save_search_regs ();
  static int simple_search ();
***************
*** 107,113 ****
     for this pattern.  0 means backtrack only enough to get a valid match.
     MULTIBYTE is nonzero if we want to handle multibyte characters in
     PATTERN.  0 means all multibyte characters are recognized just as
!    sequences of binary data.  */
  
  static void
  compile_pattern_1 (cp, pattern, translate, regp, posix, multibyte)
--- 109,117 ----
     for this pattern.  0 means backtrack only enough to get a valid match.
     MULTIBYTE is nonzero if we want to handle multibyte characters in
     PATTERN.  0 means all multibyte characters are recognized just as
!    sequences of binary data.
! 
!    The behavior also depends on Vsearch_spaces_regexp.  */
  
  static void
  compile_pattern_1 (cp, pattern, translate, regp, posix, multibyte)
***************
*** 158,168 ****
--- 162,180 ----
    cp->buf.translate = (! NILP (translate) ? translate : make_number (0));
    cp->posix = posix;
    cp->buf.multibyte = multibyte;
+   cp->whitespace_regexp = Vsearch_spaces_regexp;
    BLOCK_INPUT;
    old = re_set_syntax (RE_SYNTAX_EMACS
                       | (posix ? 0 : RE_NO_POSIX_BACKTRACKING));
+ 
+   re_set_whitespace_regexp (NILP (Vsearch_spaces_regexp) ? NULL
+                           : SDATA (Vsearch_spaces_regexp));
+ 
    val = (char *) re_compile_pattern ((char *)raw_pattern,
                                     raw_pattern_size, &cp->buf);
+ 
+   re_set_whitespace_regexp (NULL);
+ 
    re_set_syntax (old);
    UNBLOCK_INPUT;
    if (val)
***************
*** 223,229 ****
          && !NILP (Fstring_equal (cp->regexp, pattern))
          && EQ (cp->buf.translate, (! NILP (translate) ? translate : 
make_number (0)))
          && cp->posix == posix
!         && cp->buf.multibyte == multibyte)
        break;
  
        /* If we're at the end of the cache, compile into the nil cell
--- 235,242 ----
          && !NILP (Fstring_equal (cp->regexp, pattern))
          && EQ (cp->buf.translate, (! NILP (translate) ? translate : 
make_number (0)))
          && cp->posix == posix
!         && cp->buf.multibyte == multibyte
!         && !NILP (Fequal (cp->whitespace_regexp, Vsearch_spaces_regexp)))
        break;
  
        /* If we're at the end of the cache, compile into the nil cell
***************
*** 1051,1057 ****
        return pos;
      }
  
!   if (RE && !trivial_regexp_p (string))
      {
        unsigned char *p1, *p2;
        int s1, s2;
--- 1064,1070 ----
        return pos;
      }
  
!   if (RE && !(trivial_regexp_p (string) && NILP (Vsearch_spaces_regexp)))
      {
        unsigned char *p1, *p2;
        int s1, s2;
***************
*** 2847,2853 ****
        else
          {
            int from;
!           
            if (MARKERP (marker))
              {
                if (XMARKER (marker)->buffer == 0)
--- 2860,2866 ----
        else
          {
            int from;
! 
            if (MARKERP (marker))
              {
                if (XMARKER (marker)->buffer == 0)
***************
*** 2855,2869 ****
                else
                  XSETBUFFER (last_thing_searched, XMARKER (marker)->buffer);
              }
!           
            CHECK_NUMBER_COERCE_MARKER (marker);
            from = XINT (marker);
            list = Fcdr (list);
!           
            marker = Fcar (list);
            if (MARKERP (marker) && XMARKER (marker)->buffer == 0)
              XSETFASTINT (marker, 0);
!           
            CHECK_NUMBER_COERCE_MARKER (marker);
            search_regs.start[i] = from;
            search_regs.end[i] = XINT (marker);
--- 2868,2882 ----
                else
                  XSETBUFFER (last_thing_searched, XMARKER (marker)->buffer);
              }
! 
            CHECK_NUMBER_COERCE_MARKER (marker);
            from = XINT (marker);
            list = Fcdr (list);
! 
            marker = Fcar (list);
            if (MARKERP (marker) && XMARKER (marker)->buffer == 0)
              XSETFASTINT (marker, 0);
! 
            CHECK_NUMBER_COERCE_MARKER (marker);
            search_regs.start[i] = from;
            search_regs.end[i] = XINT (marker);
***************
*** 2972,2977 ****
--- 2985,2991 ----
        searchbufs[i].buf.buffer = (unsigned char *) xmalloc (100);
        searchbufs[i].buf.fastmap = searchbufs[i].fastmap;
        searchbufs[i].regexp = Qnil;
+       searchbufs[i].whitespace_regexp = Qnil;
        staticpro (&searchbufs[i].regexp);
        searchbufs[i].next = (i == REGEXP_CACHE_SIZE-1 ? 0 : &searchbufs[i+1]);
      }
***************
*** 2998,3003 ****
--- 3012,3025 ----
    saved_last_thing_searched = Qnil;
    staticpro (&saved_last_thing_searched);
  
+   DEFVAR_LISP ("search-spaces-regexp", &Vsearch_spaces_regexp,
+       doc: /* Regexp to substitute for bunches of spaces in regexp search.
+ Some commands use this for user-specified regexps.
+ Spaces that occur inside character classes or repetition operators
+ or other such regexp constructs are not replaced with this.
+ A value of nil (which is the normal value) means treat spaces literally.  */);
+   Vsearch_spaces_regexp = Qnil;
+ 
    defsubr (&Slooking_at);
    defsubr (&Sposix_looking_at);
    defsubr (&Sstring_match);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]