Upgrade to irssi-0.8.1,
Add line-wrap support with big5 charset. Add multibytes cursor movement support with big5 charset. PR: ports/35485 Submitted by: Chou Yeh-Jyi <yjchou@cis.nctu.edu.tw>
This commit is contained in:
parent
d6a666d5be
commit
232caa5fd1
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=55440
12 changed files with 247 additions and 292 deletions
|
@ -6,21 +6,17 @@
|
|||
#
|
||||
|
||||
MASTERDIR= ${.CURDIR}/../../irc/irssi
|
||||
EXTRA_PATCHES= ${.CURDIR}/files/patch-config.h.in \
|
||||
${.CURDIR}/files/patch-configure.in \
|
||||
${.CURDIR}/files/patch-src_fe-text_gui-entry.c \
|
||||
${.CURDIR}/files/patch-src_fe-text_screen.h \
|
||||
${.CURDIR}/files/patch-src_fe-text_window.c
|
||||
EXTRA_PATCHES= ${.CURDIR}/files/patch-irssi.conf \
|
||||
${.CURDIR}/files/patch-src::fe-text::gui-entry.c \
|
||||
${.CURDIR}/files/patch-src::fe-text::term-terminfo.c \
|
||||
${.CURDIR}/files/patch-src::fe-text::textbuffer-view.c \
|
||||
${.CURDIR}/files/patch-src::fe-text::utf8.h
|
||||
|
||||
PORTREVISION= 0
|
||||
CATEGORIES= chinese
|
||||
|
||||
MAINTAINER= vanilla@FreeBSD.org
|
||||
|
||||
BROKEN= patches are not compatible for 0.8.1
|
||||
USE_AUTOCONF= yes
|
||||
CONFIGURE_ARGS+= --with-big5
|
||||
|
||||
.include "${MASTERDIR}/Makefile"
|
||||
|
||||
PKGNAMEPREFIX:= ${PKGNAMEPREFIX}tw-
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
--- config.orig Sat Apr 28 02:59:56 2001
|
||||
+++ config Sat Apr 28 03:04:54 2001
|
||||
@@ -1,27 +1,15 @@
|
||||
servers = (
|
||||
- { address = "irc.stealth.net"; chatnet = IRCNet; port = 6668; },
|
||||
- { address = "irc.efnet.net"; chatnet = EFNet; port = 6667; },
|
||||
- { address = "irc.undernet.org"; chatnet = Undernet; port = 6667; },
|
||||
- { address = "irc.dal.net"; chatnet = DALNet; port = 6667; },
|
||||
- { address = "irc.openprojects.net"; chatnet = OPN; port = 6667; },
|
||||
- { address = "irc.ptlink.net"; chatnet = PTlink; port = 6667; }
|
||||
- { address = "silc.pspt.fi"; chatnet = SILC; port = 706; }
|
||||
+ { address = "irc.hinet.net"; chatnet = Hinet; port = 6667; },
|
||||
+ { address = "irc.seed.net.tw"; chatnet = Seednet; port = 6667; }
|
||||
);
|
||||
|
||||
chatnets = {
|
||||
- IRCNet = { type = "IRC"; max_kicks = 4; max_modes = 3; max_msgs = 5; max_whois = 4; };
|
||||
- EFNet = { type = "IRC"; max_kicks = 4; max_modes = 4; max_msgs = 3; };
|
||||
- Undernet = { type = "IRC"; max_kicks = 4; max_modes = 3; max_msgs = 3; max_query_chans = "1"; };
|
||||
- DALNet = { type = "IRC"; max_kicks = 4; max_modes = 6; max_msgs = 3; };
|
||||
- OPN = { type = "IRC"; max_kicks = 1; max_modes = 6; max_msgs = 100; };
|
||||
- PTLink = { type = "IRC"; max_kicks = 1; max_modes = 6; max_msgs = 100; };
|
||||
- SILC = { type = "SILC"; };
|
||||
+ Hinet = { type = "IRC"; max_kicks = 3; max_modes = 3; max_msgs = 3; };
|
||||
+ Seednet = { type = "IRC"; };
|
||||
};
|
||||
|
||||
channels = (
|
||||
- { name = "#irssi"; chatnet = ircnet; autojoin = No; },
|
||||
- { name = "#irssi"; chatnet = opn; autojoin = No; },
|
||||
- { name = "#silc"; chatnet = silc; autojoin = No; }
|
||||
+ { name = "#bsdchat"; chatnet = Seednet; autojoin = No; }
|
||||
);
|
||||
|
||||
aliases = {
|
||||
@@ -61,4 +49,24 @@
|
||||
WN = "window new hide";
|
||||
SV = "say Irssi $J - http://irssi.org";
|
||||
GOTO = "sb goto";
|
||||
+};
|
||||
+settings = {
|
||||
+ "fe-common/core" = {
|
||||
+ use_status_window = "yes";
|
||||
+ use_msgs_window = "yes";
|
||||
+ reuse_unused_windows = "yes";
|
||||
+ autocreate_windows = "yes";
|
||||
+ autolog = "yes";
|
||||
+ autolog_path = "~/.irssi/logs/%Y/$m/%d/$tag.$0";
|
||||
+ timestamps = "no";
|
||||
+ hide_text_style = "yes";
|
||||
+ autolog_level = "all";
|
||||
+ autocreate_query_level = "msgs";
|
||||
+ autocreate_own_query = "no";
|
||||
+ window_auto_change = "no";
|
||||
+ };
|
||||
+ "irc/dcc" = {
|
||||
+ dcc_download_path = "~/.irssi/download";
|
||||
+ dcc_autoget = "yes";
|
||||
+ };
|
||||
};
|
|
@ -1,10 +0,0 @@
|
|||
--- config.h.in.orig Fri Mar 9 09:28:46 2001
|
||||
+++ config.h.in Fri Apr 27 22:36:31 2001
|
||||
@@ -45,6 +45,7 @@
|
||||
|
||||
/* misc.. */
|
||||
#undef MEM_DEBUG
|
||||
+#undef WANT_BIG5
|
||||
#undef HAVE_IPV6
|
||||
#undef HAVE_POPT_H
|
||||
#undef HAVE_SOCKS_H
|
|
@ -1,37 +0,0 @@
|
|||
--- configure.in.orig Tue Mar 13 23:52:32 2001
|
||||
+++ configure.in Sat Apr 28 00:48:10 2001
|
||||
@@ -37,6 +37,19 @@
|
||||
# check posix headers..
|
||||
AC_CHECK_HEADERS(sys/time.h sys/utsname.h regex.h)
|
||||
|
||||
+AC_ARG_WITH(big5,
|
||||
+[ --with-big5 Build with tr-Chinese Big5 support],
|
||||
+ if test x$withval = xyes; then
|
||||
+ want_big5=yes
|
||||
+ else
|
||||
+ if test "x$withval" = xno; then
|
||||
+ want_big5=no
|
||||
+ else
|
||||
+ want_big5=yes
|
||||
+ fi
|
||||
+ fi,
|
||||
+ want_big5=no)
|
||||
+
|
||||
AC_ARG_WITH(socks,
|
||||
[ --with-socks Build with socks support],
|
||||
if test x$withval = xyes; then
|
||||
@@ -687,6 +700,14 @@
|
||||
AC_DEFINE(MEM_DEBUG)
|
||||
fi
|
||||
AM_CONDITIONAL(BUILD_MEMDEBUG, test "x$want_memdebug" = "xyes")
|
||||
+
|
||||
+dnl **
|
||||
+dnl ** tr-Chinese Big5 support
|
||||
+dnl **
|
||||
+
|
||||
+if test "x$want_big5" = "xyes"; then
|
||||
+ AC_DEFINE(WANT_BIG5)
|
||||
+fi
|
||||
|
||||
dnl **
|
||||
dnl ** IPv6 support
|
83
chinese/irssi/files/patch-irssi.conf
Normal file
83
chinese/irssi/files/patch-irssi.conf
Normal file
|
@ -0,0 +1,83 @@
|
|||
--- irssi.conf.orig Sun Mar 3 10:21:54 2002
|
||||
+++ irssi.conf Sun Mar 3 10:26:51 2002
|
||||
@@ -1,65 +1,17 @@
|
||||
servers = (
|
||||
- { address = "irc.stealth.net"; chatnet = "IRCNet"; port = "6668"; },
|
||||
- { address = "irc.efnet.net"; chatnet = "EFNet"; port = "6667"; },
|
||||
- {
|
||||
- address = "irc.undernet.org";
|
||||
- chatnet = "Undernet";
|
||||
- port = "6667";
|
||||
- },
|
||||
- { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
|
||||
- { address = "irc.openprojects.net"; chatnet = "OPN"; port = "6667"; },
|
||||
- { address = "irc.gnome.org"; chatnet = "GIMPNet"; port = "6667"; },
|
||||
- { address = "irc.ptlink.net"; chatnet = "PTlink"; port = "6667"; },
|
||||
- { address = "silc.pspt.fi"; chatnet = "SILC"; port = "706"; }
|
||||
+ { address = "irc.hinet.net"; charnet = "Hinet"; port = "6667"; },
|
||||
+ { address = "irc.seed.net.tw"; chatnet = "BSDChat"; port = "6667"; },
|
||||
+ { address = "irc.csie.nctu.edu.tw"; chatnet = "BSDChat"; port = "6667"; },
|
||||
+ { address = "irc.tw.freebsd.org"; chatnet = "BSDChat"; port = "6667"; }
|
||||
);
|
||||
|
||||
chatnets = {
|
||||
- IRCNet = {
|
||||
- type = "IRC";
|
||||
- max_kicks = "4";
|
||||
- max_modes = "3";
|
||||
- max_msgs = "5";
|
||||
- max_whois = "4";
|
||||
- max_query_chans = "5";
|
||||
- };
|
||||
- EFNet = {
|
||||
- type = "IRC";
|
||||
- max_kicks = "4";
|
||||
- max_modes = "4";
|
||||
- max_msgs = "3";
|
||||
- };
|
||||
- Undernet = {
|
||||
- type = "IRC";
|
||||
- max_kicks = "4";
|
||||
- max_modes = "3";
|
||||
- max_msgs = "3";
|
||||
- };
|
||||
- DALNet = {
|
||||
- type = "IRC";
|
||||
- max_kicks = "4";
|
||||
- max_modes = "6";
|
||||
- max_msgs = "3";
|
||||
- };
|
||||
- OPN = { type = "IRC"; max_kicks = "4"; max_modes = "4"; max_msgs = "1"; };
|
||||
- GIMPNet = {
|
||||
- type = "IRC";
|
||||
- max_kicks = "4";
|
||||
- max_modes = "4";
|
||||
- max_msgs = "3";
|
||||
- };
|
||||
- PTLink = {
|
||||
- type = "IRC";
|
||||
- max_kicks = "1";
|
||||
- max_modes = "6";
|
||||
- max_msgs = "100";
|
||||
- };
|
||||
- SILC = { type = "SILC"; };
|
||||
+ Hinet = { type = "IRC"; max_kicks = "3"; max_modes = "3"; max_msgs = "3"; };
|
||||
+ BSDChat = { type = "IRC"; max_kicks = 4; max_modes = 6; max_msgs = 3; };
|
||||
};
|
||||
|
||||
channels = (
|
||||
- { name = "#irssi"; chatnet = "ircnet"; autojoin = "No"; },
|
||||
- { name = "#irssi"; chatnet = "opn"; autojoin = "No"; },
|
||||
- { name = "#silc"; chatnet = "silc"; autojoin = "No"; }
|
||||
+ { name = "#bsdchat"; chatnet = "BSDChat"; autojoin = "No"; },
|
||||
);
|
||||
|
||||
aliases = {
|
||||
@@ -192,6 +144,7 @@
|
||||
position = "1";
|
||||
visible = "always";
|
||||
items = { info = { }; };
|
||||
+ disabled = "yes";
|
||||
};
|
||||
|
||||
# we treat input line as yet another statusbar :) It's possible to
|
85
chinese/irssi/files/patch-src::fe-text::gui-entry.c
Normal file
85
chinese/irssi/files/patch-src::fe-text::gui-entry.c
Normal file
|
@ -0,0 +1,85 @@
|
|||
--- src/fe-text/gui-entry.c.orig Sat Feb 16 19:10:11 2002
|
||||
+++ src/fe-text/gui-entry.c Sun Mar 3 10:29:10 2002
|
||||
@@ -67,6 +69,27 @@
|
||||
g_free(entry);
|
||||
}
|
||||
|
||||
+/* Fixes the cursor position if it at big5_lo .
|
||||
+ Direct: -1 , left shift 1 byte.
|
||||
+ Direct: 0, +1 , right shift 1 byte.
|
||||
+*/
|
||||
+static int _fix_big5_pos(unichar *p, int pos, int direct)
|
||||
+{
|
||||
+ int newpos;
|
||||
+
|
||||
+ for (newpos=0; newpos<pos && p[newpos] != 0; ) {
|
||||
+ if (is_big5(p[newpos], p[newpos+1]))
|
||||
+ newpos += 2;
|
||||
+ else
|
||||
+ newpos ++;
|
||||
+ }
|
||||
+
|
||||
+ if (newpos != pos)
|
||||
+ pos += direct > 0 ? 1 : -1;
|
||||
+
|
||||
+ return pos;
|
||||
+}
|
||||
+
|
||||
/* Fixes the cursor position in screen */
|
||||
static void gui_entry_fix_cursor(GUI_ENTRY_REC *entry)
|
||||
{
|
||||
@@ -84,6 +107,8 @@
|
||||
entry->scrstart = entry->pos - entry->scrpos;
|
||||
}
|
||||
|
||||
+ entry->scrstart = _fix_big5_pos(entry->text, entry->scrstart, -1);
|
||||
+
|
||||
if (old_scrstart != entry->scrstart)
|
||||
entry->redraw_needed_from = 0;
|
||||
}
|
||||
@@ -335,11 +360,18 @@
|
||||
|
||||
void gui_entry_erase(GUI_ENTRY_REC *entry, int size)
|
||||
{
|
||||
+ int newpos;
|
||||
+
|
||||
g_return_if_fail(entry != NULL);
|
||||
|
||||
if (entry->pos < size)
|
||||
return;
|
||||
|
||||
+ /* recount the erase size with big5 charsets */
|
||||
+ for (newpos = entry->pos; newpos >= 0 && size > 0; size--)
|
||||
+ newpos = _fix_big5_pos(entry->text, newpos-1, -1);
|
||||
+ size = entry->pos - newpos;
|
||||
+
|
||||
/* put erased text to cutbuffer */
|
||||
if (entry->cutbuffer == NULL || entry->cutbuffer_len < size) {
|
||||
g_free(entry->cutbuffer);
|
||||
@@ -461,10 +493,24 @@
|
||||
|
||||
void gui_entry_move_pos(GUI_ENTRY_REC *entry, int pos)
|
||||
{
|
||||
+ int newpos;
|
||||
+
|
||||
g_return_if_fail(entry != NULL);
|
||||
|
||||
- if (entry->pos+pos >= 0 && entry->pos+pos <= entry->text_len)
|
||||
- entry->pos += pos;
|
||||
+ /* move cursor with big5 charset */
|
||||
+ newpos = _fix_big5_pos(entry->text, entry->pos, -1);
|
||||
+ if (pos > 0) {
|
||||
+ while (pos > 0 && newpos < entry->text_len) {
|
||||
+ newpos = _fix_big5_pos(entry->text, newpos+1, 1);
|
||||
+ pos --;
|
||||
+ }
|
||||
+ } else {
|
||||
+ while (pos < 0 && newpos > 0) {
|
||||
+ newpos = _fix_big5_pos(entry->text, newpos-1, -1);
|
||||
+ pos ++;
|
||||
+ }
|
||||
+ }
|
||||
+ entry->pos = newpos;
|
||||
|
||||
gui_entry_fix_cursor(entry);
|
||||
gui_entry_draw(entry);
|
15
chinese/irssi/files/patch-src::fe-text::term-terminfo.c
Normal file
15
chinese/irssi/files/patch-src::fe-text::term-terminfo.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
--- src/fe-text/term-terminfo.c.orig Sun Feb 17 23:48:32 2002
|
||||
+++ src/fe-text/term-terminfo.c Sun Mar 3 10:10:42 2002
|
||||
@@ -549,12 +549,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
-/* XXX I didn't check the encoding range of big5+. This is standard big5. */
|
||||
-#define is_big5_los(lo) (0x40 <= (lo) && (lo) <= 0x7E) /* standard */
|
||||
-#define is_big5_lox(lo) (0x80 <= (lo) && (lo) <= 0xFE) /* extended */
|
||||
-#define is_big5_hi(hi) (0x81 <= (hi) && (hi) <= 0xFE)
|
||||
-#define is_big5(hi,lo) (is_big5_hi(hi) && (is_big5_los(lo) || is_big5_lox(lo)))
|
||||
-
|
||||
static int input_big5(const unsigned char *buffer, int size, unichar *result)
|
||||
{
|
||||
if (is_big5_hi(*buffer)) {
|
45
chinese/irssi/files/patch-src::fe-text::textbuffer-view.c
Normal file
45
chinese/irssi/files/patch-src::fe-text::textbuffer-view.c
Normal file
|
@ -0,0 +1,45 @@
|
|||
--- src/fe-text/textbuffer-view.c.orig Fri Feb 15 22:10:10 2002
|
||||
+++ src/fe-text/textbuffer-view.c Sun Mar 3 10:10:42 2002
|
||||
@@ -194,7 +194,7 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
- if (xpos == view->width && sub != NULL &&
|
||||
+ if (xpos >= view->width && sub != NULL &&
|
||||
(last_space <= indent_pos || last_space <= 10) &&
|
||||
view->longword_noindent) {
|
||||
/* long word, remove the indentation from this line */
|
||||
@@ -202,7 +202,7 @@
|
||||
sub->indent = 0;
|
||||
}
|
||||
|
||||
- if (xpos == view->width) {
|
||||
+ if (xpos >= view->width) {
|
||||
xpos = indent_func == NULL ? indent_pos :
|
||||
indent_func(view, line, -1);
|
||||
|
||||
@@ -233,12 +233,21 @@
|
||||
if (view->utf8)
|
||||
get_utf8_char(&ptr, 6);
|
||||
|
||||
- xpos++;
|
||||
- if (*ptr++ == ' ') {
|
||||
+ /* set line-wrap data with big5 charset */
|
||||
+ xpos ++;
|
||||
+ if (ptr[1] != '\0' && is_big5(ptr[0], ptr[1])) {
|
||||
last_space = xpos-1;
|
||||
+ xpos ++;
|
||||
+ if (xpos < view->width)
|
||||
+ ptr += 2;
|
||||
last_space_ptr = ptr;
|
||||
last_color = color;
|
||||
- }
|
||||
+ } else if (*ptr == ' ') {
|
||||
+ last_space = xpos-1;
|
||||
+ last_space_ptr = ++ptr;
|
||||
+ last_color = color;
|
||||
+ } else
|
||||
+ ptr++;
|
||||
}
|
||||
|
||||
rec = g_malloc(sizeof(LINE_CACHE_REC)-sizeof(LINE_CACHE_SUB_REC) +
|
14
chinese/irssi/files/patch-src::fe-text::utf8.h
Normal file
14
chinese/irssi/files/patch-src::fe-text::utf8.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
--- src/fe-text/utf8.h.orig Sun Feb 17 23:10:09 2002
|
||||
+++ src/fe-text/utf8.h Sun Mar 3 10:10:42 2002
|
||||
@@ -18,4 +18,11 @@
|
||||
Make sure out is at least 6 x length of str. */
|
||||
void utf16_to_utf8(const unichar *str, char *out);
|
||||
|
||||
+/* XXX I didn't check the encoding range of big5+. This is standard big5. */
|
||||
+#define is_big5_los(lo) (0x40 <= (lo) && (lo) <= 0x7E) /* standard */
|
||||
+#define is_big5_lox(lo) (0x80 <= (lo) && (lo) <= 0xFE) /* extended */
|
||||
+#define is_big5_lo(lo) ((is_big5_los(lo) || is_big5_lox(lo)))
|
||||
+#define is_big5_hi(hi) (0x81 <= (hi) && (hi) <= 0xFE)
|
||||
+#define is_big5(hi,lo) (is_big5_hi(hi) && is_big5_lo(lo))
|
||||
+
|
||||
#endif
|
|
@ -1,87 +0,0 @@
|
|||
--- src/fe-text/gui-entry.c.orig Sun Mar 4 02:04:10 2001
|
||||
+++ src/fe-text/gui-entry.c Sat Jan 26 20:38:19 2002
|
||||
@@ -29,6 +29,28 @@
|
||||
static int prompt_hidden;
|
||||
static char *prompt;
|
||||
|
||||
+#ifdef WANT_BIG5
|
||||
+#include "settings.h"
|
||||
+
|
||||
+int gui_is_big5(char *str, int pos)
|
||||
+{
|
||||
+ int a;
|
||||
+
|
||||
+ if(pos < 0)
|
||||
+ return 0;
|
||||
+ for(a = 0; a < pos;)
|
||||
+ {
|
||||
+ if(str[0] == '\0')
|
||||
+ break;
|
||||
+ if(is_big5(str[a], str[a + 1]))
|
||||
+ a += 2;
|
||||
+ else
|
||||
+ a ++;
|
||||
+ }
|
||||
+ return ((a == pos) && is_big5(str[a], str[a + 1]));
|
||||
+}
|
||||
+#endif WANT_BIG5
|
||||
+
|
||||
static void entry_screenpos(void)
|
||||
{
|
||||
if (pos-scrstart < COLS-2-promptlen && pos-scrstart > 0) {
|
||||
@@ -42,6 +64,14 @@
|
||||
} else {
|
||||
scrpos = (COLS-promptlen)*2/3;
|
||||
scrstart = pos-scrpos;
|
||||
+#ifdef WANT_BIG5
|
||||
+ if((scrstart > 0) &&
|
||||
+ gui_is_big5(entry->str, scrstart - 1))
|
||||
+ {
|
||||
+ scrstart --;
|
||||
+ scrpos ++;
|
||||
+ }
|
||||
+#endif WANT_BIG5
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,6 +182,12 @@
|
||||
{
|
||||
if (pos < size) return;
|
||||
|
||||
+#ifdef WANT_BIG5
|
||||
+ if (settings_get_bool("big5_cursor_movement"))
|
||||
+ if(size == 1 && gui_is_big5(entry->str, pos - 2))
|
||||
+ size++;
|
||||
+#endif WANT_BIG5
|
||||
+
|
||||
pos -= size;
|
||||
g_string_erase(entry, pos, size);
|
||||
|
||||
@@ -217,6 +253,16 @@
|
||||
|
||||
void gui_entry_move_pos(int p)
|
||||
{
|
||||
+#ifdef WANT_BIG5
|
||||
+ if(settings_get_bool("big5_cursor_movement"))
|
||||
+ {
|
||||
+ if (p == 1 && gui_is_big5(entry->str, pos))
|
||||
+ p++;
|
||||
+ else if (p == -1 && gui_is_big5(entry->str, pos - 2))
|
||||
+ p--;
|
||||
+ }
|
||||
+#endif WANT_BIG5
|
||||
+
|
||||
if (pos+p >= 0 && pos+p <= entry->len)
|
||||
pos += p;
|
||||
|
||||
@@ -277,6 +323,9 @@
|
||||
prompt = NULL; promptlen = 0;
|
||||
permanent_prompt = FALSE;
|
||||
prompt_hidden = FALSE;
|
||||
+#ifdef WANT_BIG5
|
||||
+ settings_add_bool("fe-text", "big5_cursor_movement", FALSE);
|
||||
+#endif WANT_BIG5
|
||||
}
|
||||
|
||||
void gui_entry_deinit(void)
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
--- src/fe-text/screen.h.orig Fri Apr 27 19:13:01 2001
|
||||
+++ src/fe-text/screen.h Fri Apr 27 22:38:46 2001
|
||||
@@ -16,6 +16,21 @@
|
||||
#define ATTR_COLOR8 0x200
|
||||
#define ATTR_REVERSE 0x400
|
||||
|
||||
+/* XXX I hope this could be integrated into BX.
|
||||
+ * XXX Well, this should be done via libc,
|
||||
+ * but FreeBSD libc support is quite LAME.
|
||||
+ * Macro below are copied from lynx.
|
||||
+ *
|
||||
+ * clive@FreeBSD.org
|
||||
+ */
|
||||
+#ifdef WANT_BIG5
|
||||
+/* XXX I didn't check the encoding range of big5+. This is standard big5. */
|
||||
+#define is_big5_los(lo) (((char)0x40<=lo)&&(lo<=(char)0x7E)) /* standard */
|
||||
+#define is_big5_lox(lo) (((char)0x80<=lo)&&(lo<=(char)0xFE)) /* extended */
|
||||
+#define is_big5_hi(hi) (((char)0x81<=hi)&&(hi<=(char)0xFE))
|
||||
+#define is_big5(hi,lo) is_big5_hi(hi) && (is_big5_los(lo) || is_big5_lox(lo))
|
||||
+#endif WANT_BIG5
|
||||
+
|
||||
int init_screen(void); /* Initialize screen, detect screen length */
|
||||
void deinit_screen(void); /* Deinitialize screen */
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
--- src/fe-text/gui-windows.c.orig Sat Mar 17 07:55:50 2001
|
||||
+++ src/fe-text/gui-windows.c Sat Jan 26 19:40:34 2002
|
||||
@@ -289,6 +289,7 @@
|
||||
unsigned char cmd;
|
||||
char *ptr, *last_space_ptr;
|
||||
int xpos, pos, indent_pos, last_space, last_color, color;
|
||||
+ int w = 0;
|
||||
|
||||
g_return_val_if_fail(line->text != NULL, NULL);
|
||||
|
||||
@@ -343,14 +344,14 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
- if (xpos == COLS && sub != NULL &&
|
||||
+ if (xpos >= COLS && sub != NULL &&
|
||||
(last_space <= indent_pos || last_space <= 10)) {
|
||||
/* long word, remove the indentation from this line */
|
||||
xpos -= sub->indent;
|
||||
sub->indent = 0;
|
||||
}
|
||||
|
||||
- if (xpos == COLS) {
|
||||
+ if (xpos >= COLS) {
|
||||
xpos = indent_pos;
|
||||
|
||||
sub = g_new(LINE_CACHE_SUB_REC, 1);
|
||||
@@ -376,8 +377,25 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
- xpos++;
|
||||
- if (*ptr++ == ' ') {
|
||||
+ if(ptr[1] != '\0' && is_big5(ptr[0], ptr[1]))
|
||||
+ w = 2;
|
||||
+ else
|
||||
+ w = 1;
|
||||
+
|
||||
+ xpos+=w;
|
||||
+ if (*ptr == ' ' ||
|
||||
+ (xpos <= COLS && w > 1)) {
|
||||
+ last_space = xpos-1;
|
||||
+ last_space_ptr = ptr + w;
|
||||
+ last_color = color;
|
||||
+ }
|
||||
+ if(xpos <= COLS)
|
||||
+ ptr += w;
|
||||
+
|
||||
+ if(w == 1 && xpos <= COLS &&
|
||||
+ (ptr[0] == ' ' ||
|
||||
+ (ptr[0] != '\0' && ptr[1] != '\0' && is_big5(ptr[0], ptr[1]))))
|
||||
+ {
|
||||
last_space = xpos-1;
|
||||
last_space_ptr = ptr;
|
||||
last_color = color;
|
||||
@@ -525,6 +543,9 @@
|
||||
next_pos = (n+1 < cache->count) ?
|
||||
cache->lines[n].start : NULL;
|
||||
|
||||
+ if(next_pos != NULL && next_pos > pos && *(next_pos - 1) == ' ')
|
||||
+ while(next_pos > pos && *(next_pos - 1) == ' ')
|
||||
+ next_pos --;
|
||||
single_line_draw(gui, ypos, sub, pos, next_pos);
|
||||
}
|
||||
|
Loading…
Reference in a new issue