Resolves: rhbz#985052 layout problems with very long lines

This commit is contained in:
Caolán McNamara 2013-07-25 09:34:02 +01:00
parent d7ebd2551d
commit f83437d3bc
2 changed files with 92 additions and 3 deletions

84
hunspell.rhbz985052.patch Normal file
View File

@ -0,0 +1,84 @@
Index: man/hunspell.1
===================================================================
RCS file: /cvsroot/hunspell/hunspell/man/hunspell.1,v
retrieving revision 1.4
diff -u -r1.4 hunspell.1
--- man/hunspell.1 13 Jun 2013 19:13:50 -0000 1.4
+++ man/hunspell.1 25 Jul 2013 08:26:50 -0000
@@ -385,5 +385,3 @@
see hunspell(3).
.PP
This manual based on Ispell's manual. See ispell(1).
-.SH BUGS
-There are some layout problems with long lines.
Index: src/tools/hunspell.cxx
===================================================================
RCS file: /cvsroot/hunspell/hunspell/src/tools/hunspell.cxx,v
retrieving revision 1.34
diff -u -r1.34 hunspell.cxx
--- src/tools/hunspell.cxx 13 Jun 2013 19:37:30 -0000 1.34
+++ src/tools/hunspell.cxx 25 Jul 2013 08:26:50 -0000
@@ -854,18 +854,19 @@
// like mbstowcs which isn't quite correct, but close enough for western
// text in UTF-8
void strncpyu8(char * dest, const char * src, int begin, int n) {
- int u8 = ((ui_enc != NULL) && (strcmp(ui_enc, "UTF-8") == 0)) ? 1 : 0;
- int i = 0;
- while (i < begin + n) {
- if (i >= begin)
- {
- if (!*src)
- break;
- *dest++ = *src;
+ if (n) {
+ int u8 = ((ui_enc != NULL) && (strcmp(ui_enc, "UTF-8") == 0)) ? 1 : 0;
+ for (int i = 0; i < begin + n;) {
+ if (!*src) break; // source is at it's end
+ if (!u8 || (*src & 0xc0) != 0x80) i++; // new character
+ if(i > begin){ // copy char (w/ utf-8 bytes)
+ *dest++ = *src++;
+ while(u8 && (*src & 0xc0) == 0x80) *dest++ = *src++;
+ }else{ // skip char (w/ utf-8 bytes)
+ ++src;
+ while(u8 && (*src & 0xc0) == 0x80) ++src;
+ }
}
- if (!u8 || (*src & 0xc0) != 0x80)
- i++;
- ++src;
}
*dest = '\0';
}
@@ -902,8 +903,6 @@
expand_tab(lines[i], chenc(parser->get_prevline(i), io_enc, ui_enc), MAXLNLEN);
}
- int prevline = 0;
-
strncpy(line, parser->get_prevline(0), parser->get_tokenpos());
line[parser->get_tokenpos()] = '\0';
int tokenbeg = expand_tab(line2, chenc(line, io_enc, ui_enc), MAXLNLEN);
@@ -912,10 +911,13 @@
line[parser->get_tokenpos() + strlen(token)] = '\0';
int tokenend = expand_tab(line2, chenc(line, io_enc, ui_enc), MAXLNLEN);
- int rowindex = tokenend / x;
+ int rowindex = (tokenend - 1) / x;
int beginrow = rowindex - tokenbeg / x;
if (beginrow >= MAXPREVLINE) beginrow = MAXPREVLINE - 1;
+ int ri = rowindex;
+ int prevline = 0;
+
for (int i = 0; i < MAXPREVLINE; i++) {
strncpyu8(line, lines[prevline], x * rowindex, x);
mvprintw(MAXPREVLINE + 1 - i, 0, "%s", line);
@@ -927,7 +929,7 @@
}
int linestartpos = tokenbeg - (tokenbeg % x);
- strncpyu8(line, lines[0], x * rowindex + linestartpos, tokenbeg % x);
+ strncpyu8(line, lines[0], x * (ri - beginrow), tokenbeg % x) ;
mvprintw(MAXPREVLINE + 1 - beginrow, 0, "%s", line);
attron(A_REVERSE);
printw("%s", chenc(token, io_enc, ui_enc));

View File

@ -3,7 +3,7 @@
Name: hunspell
Summary: A spell checker and morphological analyzer library
Version: 1.3.2
Release: 12%{?dist}
Release: 13%{?dist}
Source: http://downloads.sourceforge.net/%{name}/hunspell-%{version}.tar.gz
Group: System Environment/Libraries
URL: http://hunspell.sourceforge.net/
@ -20,6 +20,7 @@ Requires: hunspell-en-US
Patch0: hunspell.rhbz759647.patch
Patch1: hunspell.rhbz918938.patch
Patch2: hunspell-aarch64.patch
Patch3: hunspell.rhbz985052.patch
%description
Hunspell is a spell checker and morphological analyzer library and program
@ -40,6 +41,7 @@ Includes and definitions for developing with hunspell
%patch0 -p0 -b .rhbz759647
%patch1 -p0 -b .rhbz918938
%patch2 -p1 -b .aarch64
%patch3 -p0 -b .rhbz985052
%build
configureflags="--disable-rpath --disable-static --with-ui --with-readline"
@ -129,6 +131,9 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man3/hunspell.3.gz
%changelog
* Thu Jul 25 2013 Caolán McNamara <caolanm@redhat.com> - 1.3.2-13
- Resolves: rhbz#985052 layout problems with very long lines
* Wed Jul 17 2013 Petr Pisar <ppisar@redhat.com> - 1.3.2-12
- Perl 5.18 rebuild
@ -288,10 +293,10 @@ rm -rf $RPM_BUILD_ROOT
- Drop ABI breaking hunspell-1.2.2-xulrunner.pita.patch and fix the
hunspell include in xulrunner.
* Fri Jun 18 2008 Caolán McNamara <caolanm@redhat.com> - 1.2.4.2-1
* Wed Jun 18 2008 Caolán McNamara <caolanm@redhat.com> - 1.2.4.2-1
- latest version
* Thu Jun 17 2008 Caolán McNamara <caolanm@redhat.com> - 1.2.4-1
* Tue Jun 17 2008 Caolán McNamara <caolanm@redhat.com> - 1.2.4-1
- latest version
* Fri May 16 2008 Caolán McNamara <caolanm@redhat.com> - 1.2.2-3