diff options
author | Fumitoshi UKAI <ukai@debian.or.jp> | 2001-12-07 07:24:22 +0000 |
---|---|---|
committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2001-12-07 07:24:22 +0000 |
commit | 8b13540fb8c860e643e14893a460fb8fec7240f6 (patch) | |
tree | eec817b8f9df4eb7f95b8d8bb76ccaaf145f5d7c /linein.c | |
parent | [w3m-dev 02638] (diff) | |
download | w3m-8b13540fb8c860e643e14893a460fb8fec7240f6.tar.gz w3m-8b13540fb8c860e643e14893a460fb8fec7240f6.zip |
[w3m-dev 02640]
From: Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
Diffstat (limited to 'linein.c')
-rw-r--r-- | linein.c | 43 |
1 files changed, 28 insertions, 15 deletions
@@ -1,4 +1,4 @@ -/* $Id: linein.c,v 1.13 2001/12/07 07:20:26 ukai Exp $ */ +/* $Id: linein.c,v 1.14 2001/12/07 07:24:22 ukai Exp $ */ #include "fm.h" #include "local.h" #include "myctype.h" @@ -855,37 +855,50 @@ next_dcompl(int next) } } + Str escape_spaces(Str s) { + Str tmp = NULL; char *p; if (s == NULL) - return; - p = s->ptr; - s = Strnew(); - while(*p) { - if (*p == ' ') - Strcat_char(s, '\\'); - Strcat_char(s, *p++); + return s; + for (p = s->ptr; *p; p++) { + if (*p == ' ' || *p == CTRL_I) { + if (tmp == NULL) + tmp = Strnew_charp_n(s->ptr, (int)(p - s->ptr)); + Strcat_char(tmp, '\\'); + } + if (tmp) + Strcat_char(tmp, *p); } + if (tmp) + return tmp; return s; } + Str unescape_spaces(Str s) { + Str tmp = NULL; char *p; if (s == NULL) - return; - p = s->ptr; - s = Strnew(); - while (*p) { - if (!(*p == '\\' && *(p+1) && *(p+1) == ' ')) - Strcat_char(s, *p); - p++; + return s; + for (p = s->ptr; *p; p++) { + if (*p == '\\' && (*(p+1) == ' ' || *(p+1) == CTRL_I)) { + if (tmp == NULL) + tmp = Strnew_charp_n(s->ptr, (int)(p - s->ptr)); + } + else { + if (tmp) + Strcat_char(tmp, *p); + } } + if (tmp) + return tmp; return s; } |