X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Findent.c;h=f72f02072d3cbc1573a8d89dfd89e917161b96f5;hb=59ca45fb82208b9758b0eb17b9ba670e5e53c240;hp=7ace51f27063161758b599ef809f3ec4a1bc8bd6;hpb=0d13da69401238f67cf3b2ffddfc575446da1b59;p=chise%2Fxemacs-chise.git- diff --git a/src/indent.c b/src/indent.c index 7ace51f..f72f020 100644 --- a/src/indent.c +++ b/src/indent.c @@ -169,7 +169,7 @@ column_at_point (struct buffer *buf, Bufpos init_pos, int cur_col) + displayed_glyphs->end_columns)); #else /* XEmacs */ #ifdef MULE - col += XCHARSET_COLUMNS (CHAR_CHARSET (c)); + col += CHAR_COLUMNS (c); #else col ++; #endif /* MULE */ @@ -195,6 +195,53 @@ column_at_point (struct buffer *buf, Bufpos init_pos, int cur_col) } 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 += CHAR_COLUMNS (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 @@ -409,7 +456,7 @@ Returns the actual column that it moved to. + displayed_glyphs->end_columns)); #else /* XEmacs */ #ifdef MULE - col += XCHARSET_COLUMNS (CHAR_CHARSET (c)); + col += CHAR_COLUMNS (c); #else col ++; #endif /* MULE */