diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/editfns.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/editfns.c b/src/editfns.c index a8acff659cd..081ea0b3b7c 100644 --- a/src/editfns.c +++ b/src/editfns.c | |||
| @@ -4257,6 +4257,9 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) | |||
| 4257 | /* The start and end bytepos in the output string. */ | 4257 | /* The start and end bytepos in the output string. */ |
| 4258 | ptrdiff_t start, end; | 4258 | ptrdiff_t start, end; |
| 4259 | 4259 | ||
| 4260 | /* The start of the spec in the format string. */ | ||
| 4261 | ptrdiff_t fbeg; | ||
| 4262 | |||
| 4260 | /* Whether the argument is a string with intervals. */ | 4263 | /* Whether the argument is a string with intervals. */ |
| 4261 | bool_bf intervals : 1; | 4264 | bool_bf intervals : 1; |
| 4262 | } *info; | 4265 | } *info; |
| @@ -4408,6 +4411,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) | |||
| 4408 | char conversion = *format++; | 4411 | char conversion = *format++; |
| 4409 | memset (&discarded[format0 - format_start], 1, | 4412 | memset (&discarded[format0 - format_start], 1, |
| 4410 | format - format0 - (conversion == '%')); | 4413 | format - format0 - (conversion == '%')); |
| 4414 | info[ispec].fbeg = format0 - format_start; | ||
| 4411 | if (conversion == '%') | 4415 | if (conversion == '%') |
| 4412 | { | 4416 | { |
| 4413 | new_result = true; | 4417 | new_result = true; |
| @@ -4981,7 +4985,9 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) | |||
| 4981 | else if (discarded[bytepos] == 1) | 4985 | else if (discarded[bytepos] == 1) |
| 4982 | { | 4986 | { |
| 4983 | position++; | 4987 | position++; |
| 4984 | if (fieldn < nspec && translated == info[fieldn].start) | 4988 | if (fieldn < nspec |
| 4989 | && position > info[fieldn].fbeg | ||
| 4990 | && translated == info[fieldn].start) | ||
| 4985 | { | 4991 | { |
| 4986 | translated += info[fieldn].end - info[fieldn].start; | 4992 | translated += info[fieldn].end - info[fieldn].start; |
| 4987 | fieldn++; | 4993 | fieldn++; |
| @@ -5001,7 +5007,9 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) | |||
| 5001 | else if (discarded[bytepos] == 1) | 5007 | else if (discarded[bytepos] == 1) |
| 5002 | { | 5008 | { |
| 5003 | position++; | 5009 | position++; |
| 5004 | if (fieldn < nspec && translated == info[fieldn].start) | 5010 | if (fieldn < nspec |
| 5011 | && position > info[fieldn].fbeg | ||
| 5012 | && translated == info[fieldn].start) | ||
| 5005 | { | 5013 | { |
| 5006 | translated += info[fieldn].end - info[fieldn].start; | 5014 | translated += info[fieldn].end - info[fieldn].start; |
| 5007 | fieldn++; | 5015 | fieldn++; |