Package: libstfl-dev
Version: 0.21-2+b1
Severity: normal
Tags: patch

If a section of richtext contains multi-column caracters,
it is overwritten by the following section.

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.37-rc1 (SMP w/4 CPU cores)
Locale: LANG=ja_JP.eucJP, LC_CTYPE=ja_JP.eucJP (charmap=EUC-JP)
Shell: /bin/sh linked to /bin/dash

Versions of packages libstfl-dev depends on:
ii  libncursesw5-dev          5.7+20100313-4 developer's libraries for ncursesw

libstfl-dev recommends no packages.

libstfl-dev suggests no packages.

-- no debconf information
#include <stfl.h>
#include <locale.h>
#include <stdio.h>
#include <wchar.h>

int main(void)
{
    struct stfl_form *form;

    if (setlocale(LC_ALL, "") == NULL)
    {
	return 1;
    }

    form = stfl_create(L"table\n textview[t] .border:lrtb richtext:1 style_u_normal:attr=underline\n tablebr\n !input .border:lrtb .expand:h text[i]:");

    while (1)
    {
	const wchar_t * const event = stfl_run(form, 0);

	if (event == NULL)
	{
	    continue;
	}

	if (wcscmp(event, L"ENTER") == 0)
	{
	    const wchar_t * const text = stfl_get(form, L"i");

	    stfl_modify(form, L"t", L"replace_inner", L"textview");
	    {
		static const wchar_t format[] = L"listitem text:%ls";
		wchar_t buf[sizeof format - 3 + wcslen(text)];

		swprintf(buf, sizeof buf / sizeof buf[0], L"listitem text:%ls", text);
		stfl_modify(form, L"t", L"append", buf);
	    }
	}
	else
	{
	    break;
	}
    }

    stfl_reset();
    stfl_free(form);

    return 0;
}

<<attachment: original.png>>

<<attachment: patched.png>>

--- stfl-0.21.orig/base.c       2009-06-19 17:27:33.000000000 +0000
+++ stfl-0.21/base.c    2010-11-13 05:37:03.261927052 +0000
@@ -681,7 +681,7 @@ unsigned int stfl_print_richtext(struct
                                len = p1 - p;
                        mvwaddnwstr(win, y, x, p, len);
                        retval += len;
-                       x += len;
+                       x += wcswidth(p, len);
 
                        if (p2) {
                                wchar_t stylename[p2 - p1];

Reply via email to