blob: 848bc8fe8950f9aacfde5a757fa2b2d4dd2798ee [file] [log] [blame] [edit]
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7781#31
https://bugs.gentoo.org/518740
--- src/tools/hunspell.cxx
+++ src/tools/hunspell.cxx
@@ -710,13 +748,22 @@ if (pos >= 0) {
fflush(stdout);
} else {
char ** wlst = NULL;
- int ns = pMS[d]->suggest(&wlst, token);
+ int byte_offset = parser->get_tokenpos() + pos;
+ int char_offset = 0;
+ if (strcmp(io_enc, "UTF-8") == 0) {
+ for (int i = 0; i < byte_offset; i++) {
+ if ((buf[i] & 0xc0) != 0x80)
+ char_offset++;
+ }
+ } else {
+ char_offset = byte_offset;
+ }
+ int ns = pMS[d]->suggest(&wlst, chenc(token, io_enc, dic_enc[d]));
if (ns == 0) {
- fprintf(stdout,"# %s %d", token,
- parser->get_tokenpos() + pos);
+ fprintf(stdout,"# %s %d", token, char_offset);
} else {
fprintf(stdout,"& %s %d %d: ", token, ns,
- parser->get_tokenpos() + pos);
+ char_offset);
fprintf(stdout,"%s", chenc(wlst[0], dic_enc[d], io_enc));
}
for (int j = 1; j < ns; j++) {
@@ -745,13 +792,23 @@ if (pos >= 0) {
if (root) free(root);
} else {
char ** wlst = NULL;
+ int byte_offset = parser->get_tokenpos() + pos;
+ int char_offset = 0;
+ if (strcmp(io_enc, "UTF-8") == 0) {
+ for (int i = 0; i < byte_offset; i++) {
+ if ((buf[i] & 0xc0) != 0x80)
+ char_offset++;
+ }
+ } else {
+ char_offset = byte_offset;
+ }
int ns = pMS[d]->suggest(&wlst, chenc(token, io_enc, dic_enc[d]));
if (ns == 0) {
fprintf(stdout,"# %s %d", chenc(token, io_enc, ui_enc),
- parser->get_tokenpos() + pos);
+ char_offset);
} else {
fprintf(stdout,"& %s %d %d: ", chenc(token, io_enc, ui_enc), ns,
- parser->get_tokenpos() + pos);
+ char_offset);
fprintf(stdout,"%s", chenc(wlst[0], dic_enc[d], ui_enc));
}
for (int j = 1; j < ns; j++) {