XEmacs 21.2.25 "Hephaestus".
[chise/xemacs-chise.git.1] / src / syntax.c
index 16a0902..d4cd963 100644 (file)
@@ -328,6 +328,7 @@ syntax table.
 
 \f
 
+#ifdef MULE
 /* Return 1 if there is a word boundary between two word-constituent
    characters C1 and C2 if they appear in this order, else return 0.
    There is no word boundary between two word-constituent ASCII
@@ -337,6 +338,7 @@ syntax table.
    && word_boundary_p (c1, c2))
 
 extern int word_boundary_p (Emchar c1, Emchar c2);
+#endif
 
 /* Return the position across COUNT words from FROM.
    If that many words cannot be found before the end of the buffer, return 0.
@@ -350,6 +352,7 @@ scan_words (struct buffer *buf, Bufpos from, int count)
   Emchar ch0, ch1;
   enum syntaxcode code;
 
+  /* #### is it really worth it to hand expand both cases? JV */
   while (count > 0)
     {
       QUIT;
@@ -358,28 +361,37 @@ scan_words (struct buffer *buf, Bufpos from, int count)
        {
          if (from == limit)
            return 0;
+
          ch0 = BUF_FETCH_CHAR (buf, from);
          code = SYNTAX_UNSAFE (mirrortab, ch0);
-         from++;
+
          if (words_include_escapes
              && (code == Sescape || code == Scharquote))
            break;
          if (code == Sword)
            break;
+
+         from++;
        }
 
       QUIT;
 
-      while ( from != limit )
+      while (from != limit)
        {
          ch1 = BUF_FETCH_CHAR (buf, from);
          code = SYNTAX_UNSAFE (mirrortab, ch1);
          if (!(words_include_escapes
                && (code == Sescape || code == Scharquote)))
-           if (code != Sword || WORD_BOUNDARY_P (ch0, ch1))
+           if (code != Sword
+#ifdef MULE
+               || WORD_BOUNDARY_P (ch0, ch1)
+#endif
+               )
              break;
-         from++;
+#ifdef MULE
          ch0 = ch1;
+#endif
+         from++;
        }
       count--;
     }
@@ -392,7 +404,7 @@ scan_words (struct buffer *buf, Bufpos from, int count)
        {
          if (from == limit)
            return 0;
-         from--;
+
          ch1 = BUF_FETCH_CHAR (buf, from - 1);
          code = SYNTAX_UNSAFE (mirrortab, ch1);
          if (words_include_escapes
@@ -400,20 +412,28 @@ scan_words (struct buffer *buf, Bufpos from, int count)
            break;
          if (code == Sword)
            break;
+
+         from--;
        }
 
       QUIT;
 
-      while ( from != limit )
+      while (from != limit)
        {
          ch0 = BUF_FETCH_CHAR (buf, from - 1);
          code = SYNTAX_UNSAFE (mirrortab, ch0);
          if (!(words_include_escapes
                && (code == Sescape || code == Scharquote)))
-           if (code != Sword || WORD_BOUNDARY_P (ch0, ch1))
+           if (code != Sword
+#ifdef MULE
+               || WORD_BOUNDARY_P (ch0, ch1)
+#endif
+               )
              break;
-         from--;
+#ifdef MULE
          ch1 = ch0;
+#endif
+         from--;
        }
       count++;
     }
@@ -641,7 +661,7 @@ Optional argument BUFFER defaults to the current buffer.
   Bufpos stop;
   Emchar c;
   enum syntaxcode code;
-  int count;
+  EMACS_INT count;
   struct buffer *buf = decode_buffer (buffer, 0);
   struct Lisp_Char_Table *mirrortab = XCHAR_TABLE (buf->mirror_syntax_table);
 
@@ -1007,7 +1027,7 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth,
          if (SYNTAX_PREFIX_UNSAFE (mirrortab, c))
            continue;
 
-         switch (((quoted) ? Sword : code))
+         switch (quoted ? Sword : code)
            {
            case Sword:
            case Ssymbol:
@@ -1661,18 +1681,28 @@ vars_of_syntax (void)
   DEFVAR_BOOL ("parse-sexp-ignore-comments", &parse_sexp_ignore_comments /*
 Non-nil means `forward-sexp', etc., should treat comments as whitespace.
 */ );
+  parse_sexp_ignore_comments = 0;
 
-  words_include_escapes = 0;
   DEFVAR_BOOL ("words-include-escapes", &words_include_escapes /*
 Non-nil means `forward-word', etc., should treat escape chars part of words.
 */ );
+  words_include_escapes = 0;
 
   no_quit_in_re_search = 0;
 }
 
+static void
+define_standard_syntax (CONST char *p, enum syntaxcode syn)
+{
+  for (; *p; p++)
+    Fput_char_table (make_char (*p), make_int (syn), Vstandard_syntax_table);
+}
+
 void
 complex_vars_of_syntax (void)
 {
+  Emchar i;
+  CONST char *p;
   /* Set this now, so first buffer creation can refer to it. */
   /* Make it nil before calling copy-syntax-table
      so that copy-syntax-table will know not to try to copy from garbage */
@@ -1684,68 +1714,31 @@ complex_vars_of_syntax (void)
                                                        Smax);
   staticpro (&Vsyntax_designator_chars_string);
 
-  fill_char_table (XCHAR_TABLE (Vstandard_syntax_table),
-                  make_int (Spunct));
-
-  {
-    Emchar i;
+  fill_char_table (XCHAR_TABLE (Vstandard_syntax_table), make_int (Spunct));
 
-    for (i = 0; i <= 32; i++)
-      Fput_char_table (make_char (i), make_int ((int) Swhitespace),
-                      Vstandard_syntax_table);
-    for (i = 127; i <= 159; i++)
-      Fput_char_table (make_char (i), make_int ((int) Swhitespace),
-                      Vstandard_syntax_table);
-
-    for (i = 'a'; i <= 'z'; i++)
-      Fput_char_table (make_char (i), make_int ((int) Sword),
-                      Vstandard_syntax_table);
-    for (i = 'A'; i <= 'Z'; i++)
-      Fput_char_table (make_char (i), make_int ((int) Sword),
-                      Vstandard_syntax_table);
-    for (i = '0'; i <= '9'; i++)
-      Fput_char_table (make_char (i), make_int ((int) Sword),
-                      Vstandard_syntax_table);
-    Fput_char_table (make_char ('$'), make_int ((int) Sword),
+  for (i = 0; i <= 32; i++)    /* Control 0 plus SPACE */
+    Fput_char_table (make_char (i), make_int (Swhitespace),
                     Vstandard_syntax_table);
-    Fput_char_table (make_char ('%'), make_int ((int) Sword),
+  for (i = 127; i <= 159; i++) /* DEL plus Control 1 */
+    Fput_char_table (make_char (i), make_int (Swhitespace),
                     Vstandard_syntax_table);
 
+  define_standard_syntax ("abcdefghijklmnopqrstuvwxyz"
+                         "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                         "0123456789"
+                         "$%", Sword);
+  define_standard_syntax ("\"", Sstring);
+  define_standard_syntax ("\\", Sescape);
+  define_standard_syntax ("_-+*/&|<>=", Ssymbol);
+  define_standard_syntax (".,;:?!#@~^'`", Spunct);
+
+  for (p = "()[]{}"; *p; p+=2)
     {
-      Fput_char_table (make_char ('('), Fcons (make_int ((int) Sopen),
-                                              make_char (')')),
-                      Vstandard_syntax_table);
-      Fput_char_table (make_char (')'), Fcons (make_int ((int) Sclose),
-                                              make_char ('(')),
-                      Vstandard_syntax_table);
-      Fput_char_table (make_char ('['), Fcons (make_int ((int) Sopen),
-                                              make_char (']')),
+      Fput_char_table (make_char (p[0]),
+                      Fcons (make_int (Sopen), make_char (p[1])),
                       Vstandard_syntax_table);
-      Fput_char_table (make_char (']'), Fcons (make_int ((int) Sclose),
-                                              make_char ('[')),
+      Fput_char_table (make_char (p[1]),
+                      Fcons (make_int (Sclose), make_char (p[0])),
                       Vstandard_syntax_table);
-      Fput_char_table (make_char ('{'), Fcons (make_int ((int) Sopen),
-                                              make_char ('}')),
-                      Vstandard_syntax_table);
-      Fput_char_table (make_char ('}'), Fcons (make_int ((int) Sclose),
-                                              make_char ('{')),
-                      Vstandard_syntax_table);
-    }
-
-    Fput_char_table (make_char ('"'), make_int ((int) Sstring),
-                    Vstandard_syntax_table);
-    Fput_char_table (make_char ('\\'), make_int ((int) Sescape),
-                    Vstandard_syntax_table);
-
-    {
-      CONST char *p;
-      for (p = "_-+*/&|<>="; *p; p++)
-       Fput_char_table (make_char (*p), make_int ((int) Ssymbol),
-                        Vstandard_syntax_table);
-
-      for (p = ".,;:?!#@~^'`"; *p; p++)
-       Fput_char_table (make_char (*p), make_int ((int) Spunct),
-                        Vstandard_syntax_table);
     }
-  }
 }