X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/2a64315a111fb4da67e9c40c9b69045c4f63d619..37b3d30244ad822e049b6b20c2eadf5946cb02cc:/src/indent.c diff --git a/src/indent.c b/src/indent.c index b64eae1c42..85d26520cf 100644 --- a/src/indent.c +++ b/src/indent.c @@ -1,6 +1,5 @@ /* Indentation functions. - Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1998, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 1985-1988, 1993-1995, 1998, 2000-2011 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -38,11 +37,6 @@ along with GNU Emacs. If not, see . */ #include "dispextern.h" #include "region-cache.h" -/* Indentation can insert tabs if this is non-zero; - otherwise always uses spaces. */ - -static int indent_tabs_mode; - #define CR 015 /* These three values memorize the current column to avoid recalculation. */ @@ -61,8 +55,8 @@ EMACS_INT last_known_column_point; static int last_known_column_modified; -static double current_column_1 P_ ((void)); -static double position_indentation P_ ((int)); +static double current_column_1 (void); +static double position_indentation (int); /* Cache of beginning of line found by the last call of current_column. */ @@ -72,11 +66,11 @@ static EMACS_INT current_column_bol_cache; /* Get the display table to use for the current buffer. */ struct Lisp_Char_Table * -buffer_display_table () +buffer_display_table (void) { Lisp_Object thisbuf; - thisbuf = current_buffer->display_table; + thisbuf = BVAR (current_buffer, display_table); if (DISP_TABLE_P (thisbuf)) return XCHAR_TABLE (thisbuf); if (DISP_TABLE_P (Vstandard_display_table)) @@ -89,9 +83,7 @@ buffer_display_table () /* Return the width of character C under display table DP. */ static int -character_width (c, dp) - int c; - struct Lisp_Char_Table *dp; +character_width (int c, struct Lisp_Char_Table *dp) { Lisp_Object elt; @@ -125,9 +117,7 @@ character_width (c, dp) invalidate the buffer's width_run_cache. */ int -disptab_matches_widthtab (disptab, widthtab) - struct Lisp_Char_Table *disptab; - struct Lisp_Vector *widthtab; +disptab_matches_widthtab (struct Lisp_Char_Table *disptab, struct Lisp_Vector *widthtab) { int i; @@ -145,16 +135,14 @@ disptab_matches_widthtab (disptab, widthtab) /* Recompute BUF's width table, using the display table DISPTAB. */ void -recompute_width_table (buf, disptab) - struct buffer *buf; - struct Lisp_Char_Table *disptab; +recompute_width_table (struct buffer *buf, struct Lisp_Char_Table *disptab) { int i; struct Lisp_Vector *widthtab; - if (!VECTORP (buf->width_table)) - buf->width_table = Fmake_vector (make_number (256), make_number (0)); - widthtab = XVECTOR (buf->width_table); + if (!VECTORP (BVAR (buf, width_table))) + BVAR (buf, width_table) = Fmake_vector (make_number (256), make_number (0)); + widthtab = XVECTOR (BVAR (buf, width_table)); if (widthtab->size != 256) abort (); @@ -166,19 +154,19 @@ recompute_width_table (buf, disptab) state of current_buffer's cache_long_line_scans variable. */ static void -width_run_cache_on_off () +width_run_cache_on_off (void) { - if (NILP (current_buffer->cache_long_line_scans) + if (NILP (BVAR (current_buffer, cache_long_line_scans)) /* And, for the moment, this feature doesn't work on multibyte characters. */ - || !NILP (current_buffer->enable_multibyte_characters)) + || !NILP (BVAR (current_buffer, enable_multibyte_characters))) { /* It should be off. */ if (current_buffer->width_run_cache) { free_region_cache (current_buffer->width_run_cache); current_buffer->width_run_cache = 0; - current_buffer->width_table = Qnil; + BVAR (current_buffer, width_table) = Qnil; } } else @@ -217,11 +205,7 @@ width_run_cache_on_off () will equal the return value. */ EMACS_INT -skip_invisible (pos, next_boundary_p, to, window) - EMACS_INT pos; - EMACS_INT *next_boundary_p; - EMACS_INT to; - Lisp_Object window; +skip_invisible (EMACS_INT pos, EMACS_INT *next_boundary_p, EMACS_INT to, Lisp_Object window) { Lisp_Object prop, position, overlay_limit, proplimit; Lisp_Object buffer, tmp; @@ -322,7 +306,7 @@ Whether the line is visible (if `selective-display' is t) has no effect; however, ^M is treated as end of line when `selective-display' is t. Text that has an invisible property is considered as having width 0, unless `buffer-invisibility-spec' specifies that it is replaced by an ellipsis. */) - () + (void) { Lisp_Object temp; XSETFASTINT (temp, (int) current_column ()); /* iftc */ @@ -332,21 +316,21 @@ Text that has an invisible property is considered as having width 0, unless /* Cancel any recorded value of the horizontal position. */ void -invalidate_current_column () +invalidate_current_column (void) { last_known_column_point = 0; } double -current_column () +current_column (void) { register int col; register unsigned char *ptr, *stop; register int tab_seen; int post_tab; register int c; - register int tab_width = XINT (current_buffer->tab_width); - int ctl_arrow = !NILP (current_buffer->ctl_arrow); + register int tab_width = XINT (BVAR (current_buffer, tab_width)); + int ctl_arrow = !NILP (BVAR (current_buffer, ctl_arrow)); register struct Lisp_Char_Table *dp = buffer_display_table (); if (PT == last_known_column_point @@ -433,7 +417,7 @@ current_column () col++; else if (c == '\n' || (c == '\r' - && EQ (current_buffer->selective_display, Qt))) + && EQ (BVAR (current_buffer, selective_display), Qt))) { ptr++; goto start_of_line_found; @@ -479,7 +463,6 @@ current_column () return col; } -extern Lisp_Object Qspace, QCwidth, QCalign_to; /* Check the presence of a display property and compute its width. If a property was found and its width was found as well, return @@ -529,10 +512,10 @@ check_display_width (EMACS_INT pos, EMACS_INT col, EMACS_INT *endpos) static void scan_for_column (EMACS_INT *endpos, EMACS_INT *goalcol, EMACS_INT *prevcol) { - register EMACS_INT tab_width = XINT (current_buffer->tab_width); - register int ctl_arrow = !NILP (current_buffer->ctl_arrow); + register EMACS_INT tab_width = XINT (BVAR (current_buffer, tab_width)); + register int ctl_arrow = !NILP (BVAR (current_buffer, ctl_arrow)); register struct Lisp_Char_Table *dp = buffer_display_table (); - int multibyte = !NILP (current_buffer->enable_multibyte_characters); + int multibyte = !NILP (BVAR (current_buffer, enable_multibyte_characters)); struct composition_it cmp_it; Lisp_Object window; struct window *w; @@ -556,7 +539,7 @@ scan_for_column (EMACS_INT *endpos, EMACS_INT *goalcol, EMACS_INT *prevcol) w = ! NILP (window) ? XWINDOW (window) : NULL; if (tab_width <= 0 || tab_width > 1000) tab_width = 8; - bzero (&cmp_it, sizeof cmp_it); + memset (&cmp_it, 0, sizeof cmp_it); cmp_it.id = -1; composition_compute_stop_pos (&cmp_it, scan, scan_byte, end, Qnil); @@ -654,7 +637,7 @@ scan_for_column (EMACS_INT *endpos, EMACS_INT *goalcol, EMACS_INT *prevcol) if (c == '\n') goto endloop; - if (c == '\r' && EQ (current_buffer->selective_display, Qt)) + if (c == '\r' && EQ (BVAR (current_buffer, selective_display), Qt)) goto endloop; if (c == '\t') { @@ -672,7 +655,7 @@ scan_for_column (EMACS_INT *endpos, EMACS_INT *goalcol, EMACS_INT *prevcol) if (c == '\n') goto endloop; - if (c == '\r' && EQ (current_buffer->selective_display, Qt)) + if (c == '\r' && EQ (BVAR (current_buffer, selective_display), Qt)) goto endloop; if (c == '\t') { @@ -723,7 +706,7 @@ scan_for_column (EMACS_INT *endpos, EMACS_INT *goalcol, EMACS_INT *prevcol) due to text properties or overlays. */ static double -current_column_1 () +current_column_1 (void) { EMACS_INT col = MOST_POSITIVE_FIXNUM; EMACS_INT opoint = PT; @@ -822,12 +805,11 @@ Optional second argument MINIMUM says always do at least MINIMUM spaces even if that goes past COLUMN; by default, MINIMUM is zero. The return value is COLUMN. */) - (column, minimum) - Lisp_Object column, minimum; + (Lisp_Object column, Lisp_Object minimum) { int mincol; register int fromcol; - register int tab_width = XINT (current_buffer->tab_width); + register int tab_width = XINT (BVAR (current_buffer, tab_width)); CHECK_NUMBER (column); if (NILP (minimum)) @@ -867,17 +849,17 @@ The return value is COLUMN. */) } -static double position_indentation P_ ((int)); +static double position_indentation (int); DEFUN ("current-indentation", Fcurrent_indentation, Scurrent_indentation, 0, 0, 0, doc: /* Return the indentation of the current line. This is the horizontal position of the character following any initial whitespace. */) - () + (void) { Lisp_Object val; - int opoint = PT, opoint_byte = PT_BYTE; + EMACS_INT opoint = PT, opoint_byte = PT_BYTE; scan_newline (PT, PT_BYTE, BEGV, BEGV_BYTE, -1, 1); @@ -887,11 +869,10 @@ following any initial whitespace. */) } static double -position_indentation (pos_byte) - register int pos_byte; +position_indentation (register int pos_byte) { register EMACS_INT column = 0; - register EMACS_INT tab_width = XINT (current_buffer->tab_width); + register EMACS_INT tab_width = XINT (BVAR (current_buffer, tab_width)); register unsigned char *p; register unsigned char *stop; unsigned char *start; @@ -943,7 +924,7 @@ position_indentation (pos_byte) switch (*p++) { case 0240: - if (! NILP (current_buffer->enable_multibyte_characters)) + if (! NILP (BVAR (current_buffer, enable_multibyte_characters))) return column; case ' ': column++; @@ -953,7 +934,7 @@ position_indentation (pos_byte) break; default: if (ASCII_BYTE_P (p[-1]) - || NILP (current_buffer->enable_multibyte_characters)) + || NILP (BVAR (current_buffer, enable_multibyte_characters))) return column; { int c; @@ -977,12 +958,10 @@ position_indentation (pos_byte) preceding line. */ int -indented_beyond_p (pos, pos_byte, column) - int pos, pos_byte; - double column; +indented_beyond_p (EMACS_INT pos, EMACS_INT pos_byte, double column) { double val; - int opoint = PT, opoint_byte = PT_BYTE; + EMACS_INT opoint = PT, opoint_byte = PT_BYTE; SET_PT_BOTH (pos, pos_byte); while (PT > BEGV && FETCH_BYTE (PT_BYTE) == '\n') @@ -1011,8 +990,7 @@ In addition, if FORCE is t, and the line is too short to reach COLUMN, add spaces/tabs to get there. The return value is the current column. */) - (column, force) - Lisp_Object column, force; + (Lisp_Object column, Lisp_Object force) { EMACS_INT pos; EMACS_INT col, prev_col; @@ -1137,12 +1115,7 @@ struct position val_compute_motion; the scroll bars if they are turned on. */ struct position * -compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, hscroll, tab_offset, win) - EMACS_INT from, fromvpos, fromhpos, to, tovpos, tohpos; - int did_motion; - EMACS_INT width; - EMACS_INT hscroll, tab_offset; - struct window *win; +compute_motion (EMACS_INT from, EMACS_INT fromvpos, EMACS_INT fromhpos, int did_motion, EMACS_INT to, EMACS_INT tovpos, EMACS_INT tohpos, EMACS_INT width, EMACS_INT hscroll, EMACS_INT tab_offset, struct window *win) { register EMACS_INT hpos = fromhpos; register EMACS_INT vpos = fromvpos; @@ -1150,13 +1123,13 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, register EMACS_INT pos; EMACS_INT pos_byte; register int c = 0; - register EMACS_INT tab_width = XFASTINT (current_buffer->tab_width); - register int ctl_arrow = !NILP (current_buffer->ctl_arrow); + register EMACS_INT tab_width = XFASTINT (BVAR (current_buffer, tab_width)); + register int ctl_arrow = !NILP (BVAR (current_buffer, ctl_arrow)); register struct Lisp_Char_Table *dp = window_display_table (win); int selective - = (INTEGERP (current_buffer->selective_display) - ? XINT (current_buffer->selective_display) - : !NILP (current_buffer->selective_display) ? -1 : 0); + = (INTEGERP (BVAR (current_buffer, selective_display)) + ? XINT (BVAR (current_buffer, selective_display)) + : !NILP (BVAR (current_buffer, selective_display)) ? -1 : 0); int selective_rlen = (selective && dp && VECTORP (DISP_INVIS_VECTOR (dp)) ? XVECTOR (DISP_INVIS_VECTOR (dp))->size : 0); @@ -1178,7 +1151,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, EMACS_INT next_width_run = from; Lisp_Object window; - int multibyte = !NILP (current_buffer->enable_multibyte_characters); + int multibyte = !NILP (BVAR (current_buffer, enable_multibyte_characters)); /* If previous char scanned was a wide character, this is the column where it ended. Otherwise, this is 0. */ EMACS_INT wide_column_end_hpos = 0; @@ -1197,8 +1170,8 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, width_run_cache_on_off (); if (dp == buffer_display_table ()) - width_table = (VECTORP (current_buffer->width_table) - ? XVECTOR (current_buffer->width_table)->contents + width_table = (VECTORP (BVAR (current_buffer, width_table)) + ? XVECTOR (BVAR (current_buffer, width_table))->contents : 0); else /* If the window has its own display table, we can't use the width @@ -1232,7 +1205,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, pos_byte = prev_pos_byte = CHAR_TO_BYTE (from); contin_hpos = 0; prev_tab_offset = tab_offset; - bzero (&cmp_it, sizeof cmp_it); + memset (&cmp_it, 0, sizeof cmp_it); cmp_it.id = -1; composition_compute_stop_pos (&cmp_it, pos, pos_byte, to, Qnil); @@ -1275,9 +1248,9 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, to be changed here. */ { unsigned char *ovstr; - int ovlen = overlay_strings (pos, win, &ovstr); + EMACS_INT ovlen = overlay_strings (pos, win, &ovstr); hpos += ((multibyte && ovlen > 0) - ? strwidth (ovstr, ovlen) : ovlen); + ? strwidth ((char *) ovstr, ovlen) : ovlen); } did_motion = 0; @@ -1364,7 +1337,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, } if (hscroll || truncate - || !NILP (current_buffer->truncate_lines)) + || !NILP (BVAR (current_buffer, truncate_lines))) { /* Truncating: skip to newline, unless we are already past TO (we need to go back below). */ @@ -1469,7 +1442,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, the text character-by-character. */ if (current_buffer->width_run_cache && pos >= next_width_run) { - int run_end; + EMACS_INT run_end; int common_width = region_cache_forward (current_buffer, current_buffer->width_run_cache, @@ -1480,7 +1453,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, want to skip over it for some other reason. */ if (common_width != 0) { - int run_end_hpos; + EMACS_INT run_end_hpos; /* Don't go past the final buffer posn the user requested. */ @@ -1775,9 +1748,7 @@ of a certain window, pass the window's starting location as FROM and the window's upper-left coordinates as FROMPOS. Pass the buffer's (point-max) as TO, to limit the scan to the end of the visible section of the buffer, and pass LINE and COL as TOPOS. */) - (from, frompos, to, topos, width, offsets, window) - Lisp_Object from, frompos, to, topos; - Lisp_Object width, offsets, window; + (Lisp_Object from, Lisp_Object frompos, Lisp_Object to, Lisp_Object topos, Lisp_Object width, Lisp_Object offsets, Lisp_Object window) { struct window *w; Lisp_Object bufpos, hpos, vpos, prevhpos; @@ -1856,9 +1827,7 @@ visible section of the buffer, and pass LINE and COL as TOPOS. */) struct position val_vmotion; struct position * -vmotion (from, vtarget, w) - register EMACS_INT from, vtarget; - struct window *w; +vmotion (register EMACS_INT from, register EMACS_INT vtarget, struct window *w) { EMACS_INT hscroll = XINT (w->hscroll); struct position pos; @@ -1869,9 +1838,9 @@ vmotion (from, vtarget, w) EMACS_INT from_byte; EMACS_INT lmargin = hscroll > 0 ? 1 - hscroll : 0; int selective - = (INTEGERP (current_buffer->selective_display) - ? XINT (current_buffer->selective_display) - : !NILP (current_buffer->selective_display) ? -1 : 0); + = (INTEGERP (BVAR (current_buffer, selective_display)) + ? XINT (BVAR (current_buffer, selective_display)) + : !NILP (BVAR (current_buffer, selective_display)) ? -1 : 0); Lisp_Object window; EMACS_INT start_hpos = 0; int did_motion; @@ -2021,8 +1990,7 @@ regardless of which buffer is displayed in WINDOW. This is consistent with other cursor motion functions and makes it possible to use `vertical-motion' in any buffer, whether or not it is currently displayed in some window. */) - (lines, window) - Lisp_Object lines, window; + (Lisp_Object lines, Lisp_Object window) { struct it it; struct text_pos pt; @@ -2078,7 +2046,7 @@ whether or not it is currently displayed in some window. */) it_overshoot_expected = 1; else if (it.method == GET_FROM_STRING) { - const char *s = SDATA (it.string); + const char *s = SSDATA (it.string); const char *e = s + SBYTES (it.string); while (s < e && *s != '\n') ++s; @@ -2183,9 +2151,9 @@ whether or not it is currently displayed in some window. */) /* File's initialization. */ void -syms_of_indent () +syms_of_indent (void) { - DEFVAR_BOOL ("indent-tabs-mode", &indent_tabs_mode, + DEFVAR_BOOL ("indent-tabs-mode", indent_tabs_mode, doc: /* *Indentation can insert tabs if this is non-nil. */); indent_tabs_mode = 1; @@ -2196,6 +2164,3 @@ syms_of_indent () defsubr (&Svertical_motion); defsubr (&Scompute_motion); } - -/* arch-tag: 9adfea44-71f7-4988-8ee3-96da15c502cc - (do not change this comment) */