Mercurial > hg > xemacs-beta
diff src/indent.c @ 422:95016f13131a r21-2-19
Import from CVS: tag r21-2-19
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:25:01 +0200 |
parents | 41dbb7a9d5f2 |
children |
line wrap: on
line diff
--- a/src/indent.c Mon Aug 13 11:24:10 2007 +0200 +++ b/src/indent.c Mon Aug 13 11:25:01 2007 +0200 @@ -195,6 +195,53 @@ } int +string_column_at_point (struct Lisp_String* s, Bufpos init_pos, int tab_width) +{ + int col; + int tab_seen; + int post_tab; + Bufpos pos = init_pos; + Emchar c; + + if (tab_width <= 0 || tab_width > 1000) tab_width = 8; + col = tab_seen = post_tab = 0; + + while (1) + { + if (pos <= 0) + break; + + pos--; + c = string_char (s, pos); + if (c == '\t') + { + if (tab_seen) + col = ((col + tab_width) / tab_width) * tab_width; + + post_tab += col; + col = 0; + tab_seen = 1; + } + else if (c == '\n') + break; + else +#ifdef MULE + col += XCHARSET_COLUMNS (CHAR_CHARSET (c)); +#else + col ++; +#endif /* MULE */ + } + + if (tab_seen) + { + col = ((col + tab_width) / tab_width) * tab_width; + col += post_tab; + } + + return col; +} + +int current_column (struct buffer *buf) { if (buf == last_known_column_buffer