Search the web
Sign In
New User? Sign Up
vim-multibyte · Vim (Vi IMproved) text editor special language list
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Want to share photos of your group with the world? Add a group photo to Flickr.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Messages 1 - 149 of 2636   Newest  |  < Newer  |  Older >  |  Oldest
Messages: Show Message Summaries   (Group by Topic) Sort by Date v  
#149 From: "Taro Muraoka" <koron@...>
Date: Mon Jan 17, 2000 11:35 am
Subject: Re: Gvim Japanese screenshot now on picture page
koron@...
Send Email Send Email
 
> Now available on the Vim Picture Page:
> page: http://www.math.fu-berlin.de/~guckes/vim/pics.html#muraoka
> page: http://www.vim.org/pics.html#muraoka
> link: http://www.vim.org/pics/muraoka.gvim-5.6a-jp.gif
>
> Is this ok with you, Muraoka-san?

Yes of cource.
----
Taro Muraoka   koron@...

#148 From: Sven Guckes <guckes@...>
Date: Mon Jan 17, 2000 11:23 am
Subject: Gvim Japanese screenshot now on picture page
guckes@...
Send Email Send Email
 
* Taro Muraoka <koron@...> [000116 07:24]:
> Screen shot of gVim with Japanese menu is available here.
> http://ixeris.bios.ics.saitama-u.ac.jp/~koron/software/img/gvim-5.6a.21-00.gif

Now available on the Vim Picture Page:
page: http://www.math.fu-berlin.de/~guckes/vim/pics.html#muraoka
page: http://www.vim.org/pics.html#muraoka
link: http://www.vim.org/pics/muraoka.gvim-5.6a-jp.gif

Is this ok with you, Muraoka-san?

Sven

--
Sven Guckes@...           VIM Picture Gallery
VIM PICS  Buttons and Logos:  http://www.vim.org/pics.html#icons
VIM PICS  Screenshots:        http://www.vim.org/pics.html#screenshots
VIM PICS  Got a cool picture of your editing enviornment to share?  Send it!

#147 From: "Yasuhiro Matsumoto" <matsu@...>
Date: Mon Jan 17, 2000 10:30 am
Subject: I send again
matsu@...
Send Email Send Email
 
Sorry,
Just now I have known that
   vim-multibyte can attend the file.

So I send again.

#146 From: Yasuhiro Matsumoto <matsu@...>
Date: Mon Jan 17, 2000 7:31 am
Subject: Please use font given from SystemParameterInfo
matsu@...
Send Email Send Email
 
I think good of...
The GVim must not use static font name on GUI tear off menu.
It is possible that everyone don't have font "MS Sans Serif".

Problem: Font of Tearoff Menu use static font name.
Solution: Use SystemParametersInfo function
Files: src/gui_w32.c

*** src/gui_w32.c.orig
--- src/gui_w32.c
**************
*** 162,167
   static LOGFONT norm_logfont;
   #endif
   #endif

   /* Local variables: */
   static int  s_button_pending = -1;
--- 162,169 -----
   static LOGFONT norm_logfont;
   #endif
   #endif
+ /* Use System Menu Font */
+ #define USE_SYSMENU_FONT

   /* Local variables: */
   static int  s_button_pending = -1;
**************
*** 4613,4618
       "IDR_VIM_QUESTION"
   };

       int
   gui_mch_dialog(
       int   type,
--- 4615,4634 -----
       "IDR_VIM_QUESTION"
   };

+ #ifdef USE_SYSMENU_FONT
+ /*
+  * Get Menu Font
+  */
+     LOGFONT*
+ gui_w32_get_menu_font()
+ {
+     static NONCLIENTMETRICS nm;
+     nm.cbSize = sizeof (NONCLIENTMETRICS);
+     SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof
  NONCLIENTMETRICS ),
&nm, 0);
+     return &(nm.lfMenuFont);
+ }
+ #endif
+
       int
   gui_mch_dialog(
       int   type,
**************
*** 4643,4648
       int  vertical;
       int  dlgPaddingX;
       int  dlgPaddingY;

   #ifndef NO_CONSOLE
       /* Don't output anything in silent mode ("ex -s") */
--- 4659,4667 -----
       int  vertical;
       int  dlgPaddingX;
       int  dlgPaddingY;
+ #ifdef USE_SYSMENU_FONT
+     LOGFONT *sysmenu_logfont = NULL;
+ #endif

   #ifndef NO_CONSOLE
       /* Don't output anything in silent mode ("ex -s") */
**************
*** 4700,4705
        */
       hwnd = GetDesktopWindow();
       hdc = GetWindowDC(hwnd);
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
       if (s_usenewlook)
--- 4719,4725 -----
        */
       hwnd = GetDesktopWindow();
       hdc = GetWindowDC(hwnd);
+ #ifndef USE_SYSMENU_FONT
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
   #else
**************
*** 4702,4707
       hdc = GetWindowDC(hwnd);
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
       if (s_usenewlook)
       {
    oldFont = SelectFont(hdc, font);
--- 4722,4731 -----
   #ifndef USE_SYSMENU_FONT
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
+ #else
+     sysmenu_logfont = gui_w32_get_menu_font();
+     font = CreateFontIndirect(sysmenu_logfont);
+ #endif
       if (s_usenewlook)
       {
    oldFont = SelectFont(hdc, font);
**************
*** 4837,4842
       if (s_usenewlook)
       {
    /* do the font, since DS_3DLOOK doesn't work properly */
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
--- 4861,4867 -----
       if (s_usenewlook)
       {
    /* do the font, since DS_3DLOOK doesn't work properly */
+ #ifndef USE_SYSMENU_FONT
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
**************
*** 4840,4845
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
       }

       pstart = tbuffer;
--- 4865,4876 -----
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
+ #else
+  /* point size */
+  *p++ = -MulDiv(sysmenu_logfont->lfHeight, 72, GetDeviceCaps(hdc,
LOGPIXELSY));
+  nchar = nCopyAnsiToWideChar (p, TEXT(sysmenu_logfont->lfFaceName));
+  p += nchar;
+ #endif
       }

       pstart = tbuffer;
**************
*** 5182,5187
       char_u *label, *text, *end, *acEnd;
       int  padding0, padding1, padding2;
       int  sepPadding=0;

       /*
        * If this menu is already torn off, then don't
--- 5213,5221 -----
       char_u *label, *text, *end, *acEnd;
       int  padding0, padding1, padding2;
       int  sepPadding=0;
+ #ifdef USE_SYSMENU_FONT
+     LOGFONT *sysmenu_logfont = NULL;
+ #endif

       /*
        * If this menu is already torn off, then don't
**************
*** 5215,5220

       hwnd = GetDesktopWindow();
       hdc = GetWindowDC(hwnd);
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
       if (s_usenewlook)
--- 5249,5255 -----

       hwnd = GetDesktopWindow();
       hdc = GetWindowDC(hwnd);
+ #ifndef USE_SYSMENU_FONT
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
   #else
**************
*** 5217,5222
       hdc = GetWindowDC(hwnd);
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
       if (s_usenewlook)
    oldFont = SelectFont(hdc, font);
       else
--- 5252,5261 -----
   #ifndef USE_SYSMENU_FONT
       font = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
           VARIABLE_PITCH , DLG_FONT_NAME);
+ #else
+     sysmenu_logfont = gui_w32_get_menu_font();
+     font = CreateFontIndirect(sysmenu_logfont);
+ #endif
       if (s_usenewlook)
    oldFont = SelectFont(hdc, font);
       else
**************
*** 5315,5320
       if (s_usenewlook)
       {
    /* do the font, since DS_3DLOOK doesn't work properly */
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
--- 5354,5360 -----
       if (s_usenewlook)
       {
    /* do the font, since DS_3DLOOK doesn't work properly */
+ #ifndef USE_SYSMENU_FONT
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
**************
*** 5318,5323
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
       }

       /* Don't include tearbar in tearoff menu */
--- 5358,5369 -----
    *p++ = DLG_FONT_POINT_SIZE;  //point size
    nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
    p += nchar;
+ #else
+  /* point size */
+  *p++ = -MulDiv(sysmenu_logfont->lfHeight, 72, GetDeviceCaps(hdc,
LOGPIXELSY));
+  nchar = nCopyAnsiToWideChar (p, TEXT(sysmenu_logfont->lfFaceName));
+  p += nchar;
+ #endif
       }

       /* Don't include tearbar in tearoff menu */
**************
*** 5447,5452
       HFONT     hfontTools = 0;
       DWORD     dlgFontSize;
       SIZE     size;

       s_usenewlook = FALSE;

--- 5493,5501 -----
       HFONT     hfontTools = 0;
       DWORD     dlgFontSize;
       SIZE     size;
+ #ifdef USE_SYSMENU_FONT
+     LOGFONT     *sysmenu_logfont = NULL;
+ #endif

       s_usenewlook = FALSE;

**************
*** 5456,5461
        */
       if (!is_winnt_3())
       {
    hfontTools = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, VARIABLE_PITCH , DLG_FONT_NAME);

--- 5505,5511 -----
        */
       if (!is_winnt_3())
       {
+ #ifndef USE_SYSMENU_FONT
    hfontTools = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, VARIABLE_PITCH , DLG_FONT_NAME);
   #else
**************
*** 5458,5463
       {
    hfontTools = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, VARIABLE_PITCH , DLG_FONT_NAME);

    if (hfontTools)
    {
--- 5508,5517 -----
   #ifndef USE_SYSMENU_FONT
    hfontTools = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, VARIABLE_PITCH , DLG_FONT_NAME);
+ #else
+     sysmenu_logfont = gui_w32_get_menu_font();
+     hfontTools = CreateFontIndirect(sysmenu_logfont);
+ #endif

    if (hfontTools)
    {

#145 From: Bram Moolenaar <Bram@...>
Date: Sun Jan 16, 2000 7:37 pm
Subject: Vim version 5.6 has been released
Bram@...
Send Email Send Email
 
Announcing:  Vim (Vi IMproved) version 5.6
     Author:  Bram Moolenaar et al.

Announcement
------------
This is a bug-fix release of Vim.  Since version 5.5 bugs have been fixed and
a few improvements have been made.

Vim 5.6 has been tested by quite a few people over the past weeks, and there
are no big changes since version 5.5.  This should be the most stable Vim
version ever.  But it's free software, the usual disclaimers apply.


What is Vim?
------------
Vim is an almost 100% compatible version of the UNIX editor Vi.  Many new
features have been added: Multi level undo, syntax highlighting, command line
history, filename completion, block operations, etc.  Those who don't know Vi
can probably skip this message, unless you are prepared to learn something new
and useful.  Vim is especially recommended for editing programs.

Vim runs on almost any Unix flavor, MS-DOS, MS-Windows 3.1, MS-Windows
95/98/NT, OS/2, Atari MiNT, BeOS, VMS, RISC OS, Macintosh and Amiga.

For more information, see "http://www.vim.org".


New since version 5.5
---------------------
Not much:
- New "Edit with Vim" popup menu entry for MS-Windows.  Avoids problems with
   the MS Office taskbar.
- 18 new syntax files.
- "z+" and "z^" commands.

And many bug fixes!  This version is aimed at stability.

See ":help version-5.6" in Vim for the details.


Where to get it
---------------
You can find a list of distribution sites at

         ftp://ftp.vim.org/pub/vim/MIRRORS

Suggested locations:

         ftp://ftp.<country>.vim.org/pub/vim/
         ftp://ftp.vim.org/pub/vim/

Replace <country> with a country code, e.g.:

         ftp://ftp.us.vim.org/pub/vim/


What is available
-----------------
Note that for all systems the distribution is split into an archive with
runtime files (documentation, syntax files, etc.) and a binary and/or source
archive.  You should download at least two archives!

FILE                       SYSTEM  COMMENTS

unix/vim-5.6-src.tar.gz    Unix(*) Sources.
unix/vim-5.6-rt.tar.gz     Unix(*) Runtime files.

extra/vim-5.6-extra.tar.gz Unix(*) Extra sources and docs (Farsi, OLE, VisVim).

unix/vim-5.5-5.6-rt.diff.gz        Runtime diff with version 5.5.
unix/vim-5.5-5.6-src.diff.gz       Sources diff with version 5.5.
extra/vim-5.5-5.6-extra.diff.gz    Extra diff with version 5.5.

pc/vim56rt.zip            Win32    MS-DOS and MS-Windows runtime files.
pc/gvim56.zip             Win32    32 bit MS-Windows 95/98/NT GUI binaries.
                                    Recommended for MS-Windows 95/98/NT.
                                    The best choice for syntax highlighting and
                                    speed.
pc/gvim56ole.zip          Win32    32 bit MS-Windows 95/98/NT GUI binaries,
                                    with OLE support and VisVim.
pc/gvim56_s.zip           Win32s   32 bit MS-Windows 3.1/3.11 GUI binaries.
                                    Requires Win32s.
pc/vim56w32.zip           Win32    32 bit MS-Windows 95/98/NT console binaries.
                                    Recommended for Windows NT, NOT for 95/98.
                                    Supports long file names.
pc/vim56d32.zip           MS-DOS   32 bit protected mode binaries.
                                    Recommended for MS-DOS, MS-Windows 3.1 and
                                    MS-Windows 95/98 console.  It is compiled
                                    with DJGPP, it may need a DPMI driver
                                    (CWSDPMI is included).  Supports long file
                                    names on MS-Windows 95/98 (NOT on NT).
pc/vim56d16.zip           MS-DOS   16 bit real mode binaries.
                                    Runs on most MS-DOS systems, but is
                                    restricted to using 640K memory.  Small
                                    version, without e.g., syntax highlighting
                                    and autocommands.
pc/vim56src.zip           PC       Sources for PC versions (with CR-LF).

os2/vim56rt.zip           OS/2     Runtime files (same as for PC).
os2/vim56os2.zip          OS/2     Binaries.
                                    (use the Unix+extra archives for sources)

amiga/vim56rt.tgz         Amiga    Runtime files.
amiga/vim56bin.tgz        Amiga    Binaries.
amiga/vim56big.tgz        Amiga    Binaries with more features.
amiga/vim56src.tgz        Amiga    Sources for Amiga.

doc/vim56html.zip         all      Documentation converted to HTML.

patches/*                 all      Recent patches.

(*) Also for BeOS, OS/2, VMS, Macintosh and Atari MiNT

The contents of the source archives depends on the specified system.  To
obtain the full sources and docs, get the three Unix archives.


system    file type      Unpack with

Unix      file.tar.gz    gunzip file.tar.gz; tar xf file.tar
Amiga     file.tgz       gzip -d file.tgz; tar xf file.tar
PC        file.zip           pkunzip -d file.zip
                          or: unzip file.zip


Mailing lists
-------------
For user questions you can turn to the Vim mailing list.  There are a lot of
tips, scripts and solutions.  You can ask your Vim questions, but only if you
subscribe.  See http://www.vim.org/mail.html.  An archive is kept at
http://www.egroups.com/group/vim.

If you want to help developing Vim or get the latest patches, subscribe to the
vim-dev mailing list.  An archive is kept at
http://www.egroups.com/group/vimdev.

Subject specific lists:
Multi-byte issues: vim-multibyte  http://www.egroups.com/group/vim-multibyte
Macintosh issues:  vim-mac        http://www.egroups.com/group/vim-mac


Reporting bugs
--------------
Send them to <Bram@...>.  Please be brief, all the time spent on answering
mail is subtracted from the time that is spent on improving Vim!  Always give
a reproducable example and try to find out which settings or other things
influence the appearance of the bug.  Try different machines if possible.  See
":help bugs" in Vim.  Send me patches if you can!

If something needs discussing with other developers, send a message to the
vim-dev mailing list.  You need to subscribe first.


Happy Vimming!

--
hundred-and-one symptoms of being an internet addict:
195. Your cat has its own home page.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#144 From: Bram Moolenaar <Bram@...>
Date: Sun Jan 16, 2000 12:51 pm
Subject: Re: Illegal match at multibyte trail
Bram@...
Send Email Send Email
 
Taro Muraoka wrote:

> It works very good. Thank you Bram for fix.
>
> First two locations were made by me Taro Muraoka. And I had forgot to think
> about 8-bit character. Second two were originated by other. He probably
> thought IsLeadByte() is very high cost and this code is not needed for UNIX's
> encoding EUC. Multibyte of EUC consist of 0x80-0xFF, but multibyte of
> Shift-JIS consist of 0x40-0xFF.

Thanks for checking.  I have included these fixes.  I didn't include the one
for the regexp code yet, I'll do that later.

IsLeadByte() isn't high cost, but IsTrailByte() is, because it starts looking
at the start of the string.

This multi-byte code is really two-byte code.  For Vim 6.0 we will have to
change it all drastically to support UTF-8.  Perhaps the multi-byte codes that
are supported until now can be converted to UTF-8?  The main advantage will be
that you can edit two buffers with different encoding at the same time.

--
hundred-and-one symptoms of being an internet addict:
193. You ask your girlfriend to drive home so you can sit back with
      your PDA and download the information to your laptop

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#143 From: Taro Muraoka <koron@...>
Date: Sun Jan 16, 2000 7:24 am
Subject: Re: Illegal match at multibyte trail
koron@...
Send Email Send Email
 
Bram Moolenaar wrote:
> Looks like a good fix.  However, I don't see why is_dbcs isn't tested in the
> first two locations, and specifically compared to DBCS_JPN in the second two.
>
> Also, I don't understand why the second two should only be used for Win32.
> Wouldn't they be required for all systems?
>
> Please consider this change instead:
>
> *** ../vim-5.6a.28/src/search.c Wed Dec 29 12:11:01 1999
> --- src/search.c Sat Jan 15 21:12:19 2000
		 :
		 :
		 (omit)

It works very good. Thank you Bram for fix.

First two locations were made by me Taro Muraoka. And I had forgot to think
about 8-bit character. Second two were originated by other. He probably
thought IsLeadByte() is very high cost and this code is not needed for UNIX's
encoding EUC. Multibyte of EUC consist of 0x80-0xFF, but multibyte of
Shift-JIS consist of 0x40-0xFF.

----
Taro Muraoka mailto:koron@...

#142 From: Taro Muraoka <koron@...>
Date: Sun Jan 16, 2000 7:24 am
Subject: Re: Special multibyte in menu is not displayed correctly
koron@...
Send Email Send Email
 
Bram Moolenaar wrote:
> I suspect this can cause problems when using 8-bit characters in a menu.  I
> think it's better to use is_dbcs here, even though that's actually for buffer
> text.  How about this patch instead:
>
> *** ../vim-5.6a.28/src/menu.c Mon Dec 20 09:59:12 1999
> --- src/menu.c Sat Jan 15 21:24:15 2000
> ***************
> *** 1010,1021 ****
> --- 1010,1027 ----
>       char_u  *p;
>
>       for (p = name; *p && *p != '.'; p++)
> +     {
>   if (*p == '\\' || *p == Ctrl('V'))
>   {
>       mch_memmove(p, p + 1, STRLEN(p));
>       if (*p == NUL)
>   break;
>   }
> + #ifdef MULTI_BYTE
> + else if (is_dbcs && IsLeadByte(*p) && p[1] != NUL)
> +     ++p; /* skip multibyte char */
> + #endif
> +     }
>       if (*p)
>   *p++ = NUL;
>       return p;


Yes, indeed to use is_dbcs is better way. But there is one very very small
problem and question. If multibyte menu user did not set 'fileencoding' before
menu.vim was loaded, buffer would be initialized wrong. In this case user lose
all chances to correct this. Menu is not updated, even if user type ":set
fe=japan" in vim session.

Of cource it is one easy solution that distribute multibyte menu.vim with a
comment "WARNING: Do not forget to set 'fileencoding' option in your _vimrc.
Just add line 'set fe=japan' in your _vimrc".  Anoter way, at top of multibyte
menu.vim distribute, add "set fe=japan".  Or is there any good way to reload
menu buffer?

Post script...
Screen shot of gVim with Japanese menu is available here.
http://ixeris.bios.ics.saitama-u.ac.jp/~koron/software/img/gvim-5.6a.21-00.gif
----
Taro Muraoka  koron@...


----
Taro Muraoka mailto:koron@...

#141 From: Taro Muraoka <koron@...>
Date: Sun Jan 16, 2000 7:24 am
Subject: Re: Multibyte regexp
koron@...
Send Email Send Email
 
Bram Moolenaar wrote:
> One question, like with the other ones: Doesn't is_dbcs need to be used here?

Yes it needs. Sorry I forgot about 8-bit character. It is almost always needed
checking is_dbcs before IsLeadByte(). And I amended patch.
----
Taro Muraoka  koron@...


Problem:    Cannot multibyte pattern search and substitute.
Solution:   Add new node for multibyte character. and etc...
Files:     src/regexp.c src/misc2.c


*** ./src.orig/regexp.c Sat May 15 22:48:52 1999
--- ./src/regexp.c Sun Jan 16 14:33:24 2000
***************
*** 195,200 ****
--- 195,204 ----
   #define BACKREF  80 /* -89  node Match same string again \1-\9 */
   #define BRACE_COMPLEX 90 /* -99  node Match nodes between m & n times */

+ #ifdef MULTI_BYTE
+ #define MULTIBYTECODE 200     /* str Match multibyte code */
+ #endif
+
   #define Magic(x)    ((x) | ('\\' << 8))

   /*
***************
*** 416,421 ****
--- 420,433 ----
  	 {
  	     ++p;
  	     if (*p != ']' && *p != NUL)
+ #ifdef MULTI_BYTE
+ 	 if (is_dbcs && IsLeadByte(*p))
+ 	 {
+ 		    if (*++p == NUL) break;
+ 		    ++p;
+ 	 }
+ 	 else
+ #endif
  		 ++p;
  	 }
  	 else if (*p == '\\'
***************
*** 428,433 ****
--- 440,452 ----
  		 ++p; /* It was not a class name */
  	 }
  	 else
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*p))
+ 	    {
+ 	 if (*++p == NUL) break;
+ 	    }
+ 	    else
+ #endif
  	     ++p;
       }

***************
*** 491,496 ****
--- 510,518 ----
    * Global work variables for vim_regcomp().
    */

+ #ifdef MULTI_BYTE
+ static int skip_multi; /* previous skip was multibyte */
+ #endif
   static char_u *regparse;  /* Input-scan pointer. */
   static int num_complex_braces; /* Complex \{...} count */
   static int regnpar; /* () count. */
***************
*** 534,539 ****
--- 556,575 ----
   static int read_limits __ARGS((int, int, int *, int *));
   static void regtail __ARGS((char_u *, char_u *));
   static void regoptail __ARGS((char_u *, char_u *));
+ #ifdef MULTI_BYTE
+ static int re_ismultibytecode __ARGS((int));
+
+ /*
+  * Is chr multi-byte? If no then return 0 else return leadbyte
+  */
+     int
+ re_ismultibytecode(c)
+     int c;
+ {
+     int lead = ( c >> 8 ) & 0xFF;
+     return (is_dbcs && IsLeadByte(lead)) ? lead : 0;
+ }
+ #endif

   /*
    * Skip past regular expression.
***************
*** 559,564 ****
--- 595,607 ----
  	 }
  	 else if (p[0] == '\\' && p[1] != NUL)
  	     ++p;    /* skip next character */
+ #ifdef MULTI_BYTE
+  else if (is_dbcs && IsLeadByte(*p))
+  {
+ 	    if (*++p == NUL)
+ 	 break;
+  }
+ #endif
       }
       return p;
   }
***************
*** 1148,1154 ****
--- 1191,1201 ----
         case Magic('['):
  	 {
  	     char_u *p;
+ #ifdef MULTI_BYTE
+ 	    char_u *base;

+ 	    base = regparse;
+ #endif
  	     /*
  	      * If there is no matching ']', we assume the '[' is a normal
  	      * character. This makes ":help [" work.
***************
*** 1175,1180 ****
--- 1222,1264 ----
  			 regparse++;
  			 if (*regparse == ']' || *regparse == '\0')
  			     regc('-');
+ #ifdef MULTI_BYTE
+ 		 else if (is_dbcs)
+ 		 {
+
+ 			    int     lead, start, end;
+
+ 			    start = UCHARAT(regparse - 2) + 1;
+ 			    end = UCHARAT(regparse);
+ 			    if (IsTrailByte(base, regparse - 2))
+ 			    {
+ 			 if (!IsLeadByte(end))
+ 				    EMSG_RET_NULL(e_invrange);
+ 			 lead = UCHARAT(regparse - 3);
+ 			 if (lead != end)
+ 				    EMSG_RET_NULL(e_invrange);
+ 			 end = UCHARAT(regparse + 1);
+ 			 if (start > end +1)
+ 				    EMSG_RET_NULL(e_invrange);
+ 			 for (; start <= end; start++)
+ 			 {
+ 				    regc(lead);
+ 				    regc(start);
+ 			 }
+ 			 regparse += 2;
+ 			    }
+ 			    else
+ 			    {
+ 			 if (IsLeadByte(end))
+ 				    EMSG_RET_NULL(e_invrange);
+ 			 if (start > end +1)
+ 				    EMSG_RET_NULL(e_invrange);
+ 			 for (; start <= end; start++)
+ 				    regc(start);
+ 			 regparse++;
+ 			    }
+ 		 }
+ #endif
  			 else
  			 {
  			     int  cclass;
***************
*** 1216,1222 ****
--- 1300,1315 ----
  				     regc(cu);
  		     }
  		     else
+ #ifndef MULTI_BYTE
  			 regc(*regparse++);
+ #else
+ 		    {
+ 		 int c;
+ 		 regc(c = *regparse++);
+ 		 if (is_dbcs && IsLeadByte(c))
+ 			    regc(*regparse++);
+ 		    }
+ #endif
  		 }
  		 regc('\0');
  		 if (*regparse != ']')
***************
*** 1234,1239 ****
--- 1327,1344 ----
  	     int 	    chr;

  	     ungetchr();
+ #ifdef MULTI_BYTE
+ 	    chr = re_ismultibytecode(peekchr());
+ 	    if (chr)
+ 	    {
+ 	 ret = regnode(MULTIBYTECODE);
+ 	 regc(chr);
+ 	 regc(PeekChr() & 0xFF);
+ 	 skipchr();
+ 	 *flagp |= HASWIDTH;
+ 	 break;
+ 	    }
+ #endif
  	     len = 0;
  	     ret = regnode(EXACTLY);
  	     /*
***************
*** 1542,1547 ****
--- 1647,1657 ----
  		 curchr = regparse[0];
  	     }
  	     break;
+ #ifdef MULTI_BYTE
+  default:
+ 	    if (is_dbcs && IsLeadByte(curchr))
+ 	 curchr = curchr << 8 | regparse[1];
+ #endif
  	 }
       }

***************
*** 1551,1556 ****
--- 1661,1675 ----
       static void
   skipchr()
   {
+ #ifdef MULTI_BYTE
+     if (is_dbcs && IsLeadByte(*regparse))
+     {
+  skip_multi = 1;
+  regparse++;
+     }
+     else
+  skip_multi = 0;
+ #endif
       regparse++;
       prev_at_start = at_start;
       at_start = FALSE;
***************
*** 1584,1589 ****
--- 1703,1715 ----
        * Backup regparse as well; not because we will use what it points at,
        * but because skipchr() will bump it again.
        */
+ #ifdef MULTI_BYTE
+     if (skip_multi)
+     {
+  regparse--;
+  skip_multi = 0;
+     }
+ #endif
       regparse--;
   }

***************
*** 1702,1707 ****
--- 1828,1837 ----
  	 {
  	     if (cstrncmp(s, prog->regmust, prog->regmlen) == 0)
  		 break;  /* Found it. */
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*s))
+ 	 if (!(*++s)) break;
+ #endif
  	     s++;
  	 }
  	 if (s == NULL)  /* Not present. */
***************
*** 1730,1735 ****
--- 1860,1869 ----
  	 {
  	     if (regtry(prog, s))
  		 return 1;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*s))
+ 	 if (!(*++s)) break;
+ #endif
  	     s++;
  	 }
       else
***************
*** 1738,1743 ****
--- 1872,1881 ----
  	 {
  	     if (regtry(prog, s))
  		 return 1;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*s))
+ 	 if (!(*++s)) break;
+ #endif
  	 } while (*s++ != '\0');

       /* Failure. */
***************
*** 1855,1990 ****
--- 1993,2209 ----
  	   case ANY:
  	     if (*reginput == '\0')
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case IDENT:
  	     if (!vim_isIDc(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case KWORD:
  	     if (!vim_iswordc(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case FNAME:
  	     if (!vim_isfilec(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case PRINT:
  	     if (charsize(*reginput) != 1)
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case SIDENT:
  	     if (isdigit(*reginput) || !vim_isIDc(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case SWORD:
  	     if (isdigit(*reginput) || !vim_iswordc(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case SFNAME:
  	     if (isdigit(*reginput) || !vim_isfilec(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case SPRINT:
  	     if (isdigit(*reginput) || charsize(*reginput) != 1)
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case WHITE:
  	     if (!vim_iswhite(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NWHITE:
  	     if (*reginput == NUL || vim_iswhite(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case DIGIT:
  	     if (!ri_digit(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NDIGIT:
  	     if (*reginput == NUL || ri_digit(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case HEX:
  	     if (!ri_hex(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NHEX:
  	     if (*reginput == NUL || ri_hex(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case OCTAL:
  	     if (!ri_octal(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NOCTAL:
  	     if (*reginput == NUL || ri_octal(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case WORD:
  	     if (!ri_word(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NWORD:
  	     if (*reginput == NUL || ri_word(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case HEAD:
  	     if (!ri_head(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NHEAD:
  	     if (*reginput == NUL || ri_head(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case ALPHA:
  	     if (!ri_alpha(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NALPHA:
  	     if (*reginput == NUL || ri_alpha(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case LOWER:
  	     if (!ri_lower(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NLOWER:
  	     if (*reginput == NUL || ri_lower(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case UPPER:
  	     if (!ri_upper(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case NUPPER:
  	     if (*reginput == NUL || ri_upper(*reginput))
  		 return 0;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && IsLeadByte(*reginput)) reginput++;
+ #endif
  	     reginput++;
  	     break;
  	   case EXACTLY:
***************
*** 2004,2016 ****
--- 2223,2269 ----
  	     }
  	     break;
  	   case ANYOF:
+ #ifdef MULTI_BYTE
+ 	    {
+ 	 int c;
+
+ 	 if ((c = *reginput) == '\0' )
+ 		    return 0;
+ 	 if (is_dbcs && IsLeadByte(c))
+ 	 {
+ 		    if (cstrchr(OPERAND(scan), c << 8 | reginput[1]) == NULL)
+ 		 return 0;
+ 		    reginput++;
+ 	 }
+ 	 else
+ 		    if (cstrchr(OPERAND(scan), c) == NULL) return 0;
+ 	    }
+ #else
  	     if (*reginput == '\0' || cstrchr(OPERAND(scan), *reginput) == NULL)
  		 return 0;
+ #endif
  	     reginput++;
  	     break;
  	   case ANYBUT:
+ #ifdef MULTI_BYTE
+ 	    {
+ 	 int c;
+
+ 	 if ((c = *reginput) == '\0' )
+ 		    return 0;
+ 	 if (is_dbcs && IsLeadByte(c))
+ 	 {
+ 		    if (cstrchr(OPERAND(scan), c << 8 | reginput[1]) != NULL)
+ 		 return 0;
+ 		    reginput++;
+ 	 }
+ 	 else
+ 		    if (cstrchr(OPERAND(scan), c) != NULL) return 0;
+ 	    }
+ #else
  	     if (*reginput == '\0' || cstrchr(OPERAND(scan), *reginput) != NULL)
  		 return 0;
+ #endif
  	     reginput++;
  	     break;
  	   case NOTHING:
***************
*** 2316,2321 ****
--- 2569,2586 ----
  	   case END:
  	     return 1;     /* Success! */
  	     /* break; Not Reached */
+ #ifdef MULTI_BYTE
+ 	  case MULTIBYTECODE:
+ 	    {
+ 	 char_u     *opnd;
+
+ 	 opnd = OPERAND(scan);
+ 	 if( *opnd != *reginput || *(opnd+1) != *(reginput+1) )
+ 		    return 0;
+ 	 reginput += 2;
+ 	    }
+ 	    break;
+ #endif
  	   default:
  	     emsg(e_re_corr);
   #ifdef DEBUG
***************
*** 2479,2497 ****
--- 2744,2820 ----
  	     break;
  	 }
         case ANYOF:
+ #ifdef MULTI_BYTE
+  while (1)
+  {
+ 	    int     c;
+
+ 	    if ((c = *scan) == '\0')
+ 	 break;
+ 	    if (is_dbcs && IsLeadByte(c)) /* if multibyte, extra forward */
+ 	    {
+ 	 if (cstrchr(opnd, c << 8 | *(scan + 1)) == NULL)
+ 		    break;
+ 	 count++;
+ 	 scan++;
+ 	    }
+ 	    else
+ 	 if (cstrchr(opnd, c) == NULL)
+ 		    break;
+ 	    count++;
+ 	    scan++;
+  }
+ #else
  	 while (*scan != '\0' && cstrchr(opnd, *scan) != NULL)
  	 {
  	     count++;
  	     scan++;
  	 }
+ #endif
  	 break;
         case ANYBUT:
+ #ifdef MULTI_BYTE
+  while (1)
+  {
+ 	    int     c;
+
+ 	    if ((c = *scan) == '\0')
+ 	 break;
+ 	    if (is_dbcs && IsLeadByte(c)) /* if multibyte, extra forward */
+ 	    {
+ 	 if (cstrchr(opnd, c << 8 | *(scan + 1)) != NULL)
+ 		    break;
+ 	 count++;
+ 	 scan++;
+ 	    }
+ 	    else
+ 	 if (cstrchr(opnd, c) != NULL)
+ 		    break;
+ 	    count++;
+ 	    scan++;
+  }
+ #else
  	 while (*scan != '\0' && cstrchr(opnd, *scan) == NULL)
  	 {
  	     count++;
  	     scan++;
  	 }
+ #endif
  	 break;
+ #ifdef MULTI_BYTE
+       case MULTIBYTECODE:
+  {
+ 	    int cl, ct;
+ 	    cl = opnd[0];
+ 	    ct = opnd[1];
+ 	    while( scan[0] == cl && scan[1] == ct )
+ 	    {
+ 	 count += 2;
+ 	 scan++;
+ 	    }
+  }
+  break;
+ #endif
         default: 	 /* Oh dear.  Called inappropriately. */
  	 emsg(e_re_corr);
   #ifdef DEBUG
***************
*** 2769,2774 ****
--- 3092,3102 ----
  	 sprintf(buf + STRLEN(buf), "BRACE_COMPLEX%d", OP(op) - BRACE_COMPLEX);
  	 p = NULL;
  	 break;
+ #ifdef MULTI_BYTE
+       case MULTIBYTECODE:
+  p = 'MULTIBYTE CODE';
+  break;
+ #endif
         default:
  	 sprintf(buf + STRLEN(buf), "corrupt %d", OP(op));
  	 p = NULL;
***************
*** 2807,2812 ****
--- 3135,3144 ----

       if (!reg_ic)
  	 return vim_strchr(s, c);
+ #ifdef MULTI_BYTE
+     if (re_ismultibytecode(c))
+  return vim_strchr(s, c);
+ #endif

       /* tolower() and toupper() can be slow, comparing twice should be a lot
        * faster (esp. when using MS Visual C++!) */
***************
*** 2820,2825 ****
--- 3152,3161 ----
       for (p = s; *p; ++p)
  	 if (*p == c || *p == cc)
  	     return p;
+ #ifdef MULTI_BYTE
+  else if (is_dbcs && IsLeadByte(*p))
+ 	    if (!(*++p)) break;
+ #endif
       return NULL;
   }

***************
*** 3046,3051 ****
--- 3382,3395 ----
  	     }
  	     if (copy)
  	     {
+ #ifdef MULTI_BYTE
+ 	 if (is_dbcs && IsLeadByte(c) && *src != NUL )
+ 	 {
+ 		    *dst++ = c;
+ 		    *dst = *src++;
+ 	 }
+ 	 else
+ #endif
  		 if (func == (fptr)NULL)     /* just copy */
  		     *dst = c;
  		 else 		    /* change case */
*** ./src.orig/misc2.c Sun Jan 09 09:50:54 2000
--- ./src/misc2.c Sun Jan 16 14:02:04 2000
***************
*** 1017,1028 ****
--- 1017,1043 ----
   {
       char_u *p;
       int  c;
+ #ifdef MULTI_BYTE
+     int  n2 = -1;
+     if (n > 255)
+     {
+  n2 = n & 0xFF;
+  n = (n >> 8) & 0xFF;
+     }
+ #endif

       p = string;
       while ((c = *p) != NUL)
       {
  	 if (c == n)
+ #ifdef MULTI_BYTE
+ 	    if (n2 == -1 || p[1] == n2)
+ #endif
  	     return p;
+ #ifdef MULTI_BYTE
+  if (is_dbcs && IsLeadByte(c))
+ 	    if (!(*++p)) break;
+ #endif
  	 ++p;
       }
       return NULL;
***************
*** 1039,1044 ****
--- 1054,1063 ----
       {
  	 if (*string == n)
  	     retval = string;
+ #ifdef MULTI_BYTE
+  if (is_dbcs && IsLeadByte(*string))
+ 	    if (!(*++string)) break;
+ #endif
  	 ++string;
       }
       return retval;

----
Taro Muraoka mailto:koron@...

#140 From: Bram Moolenaar <Bram@...>
Date: Sat Jan 15, 2000 8:38 pm
Subject: Re: Illegal match at multibyte trail
Bram@...
Send Email Send Email
 
Taro Muraoka wrote:

> -Simple search in search.c. (2K)
> Please test.

> Problem:    Illegal match at trail of multibyte character caused trouble.
> Solution:   Add codes consider multibyte. Foward pointer 2 byte if pointed
>  character is lead byte of multibyte.
> Files:     src/search.c

Looks like a good fix.  However, I don't see why is_dbcs isn't tested in the
first two locations, and specifically compared to DBCS_JPN in the second two.

Also, I don't understand why the second two should only be used for Win32.
Wouldn't they be required for all systems?

Please consider this change instead:

*** ../vim-5.6a.28/src/search.c Wed Dec 29 12:11:01 1999
--- src/search.c Sat Jan 15 21:12:19 2000
***************
*** 265,272 ****
       {
  	 /* don't ignore case if pattern has uppercase */
  	 for (p = pat; *p; )
! 	    if (isupper(*p++))
! 	 reg_ic = FALSE;
       }
       no_smartcase = FALSE;
   }
--- 265,283 ----
       {
  	 /* don't ignore case if pattern has uppercase */
  	 for (p = pat; *p; )
!  {
! #ifdef MULTI_BYTE
! 	    if (is_dbcs && IsLeadByte(*p))
! 	    {
! 	 if (*++p == NUL)
! 		    break;
! 	 ++p;
! 	    }
! 	    else
! #endif
! 	 if (isupper(*p++))
! 		    reg_ic = FALSE;
!  }
       }
       no_smartcase = FALSE;
   }
***************
*** 1081,1088 ****
--- 1092,1107 ----
  	 {
  	     if ((col += dir) < 0 || col >= len)
  		 return FALSE;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && dir < 0 && IsTrailByte(p, &p[col]))
+ 	 continue; /* skip multibyte's trail byte */
+ #endif
  	     if (p[col] == c)
  		 break;
+ #ifdef MULTI_BYTE
+ 	    if (is_dbcs && dir > 0 && IsLeadByte(p[col]))
+ 	 ++col;  /* skip multibyte's trail byte */
+ #endif
  	 }
       }
       if (type)
***************
*** 1421,1427 ****
--- 1440,1452 ----
  		     comment_col = check_linecomment(linep);
  	     }
  	     else
+ 	    {
  		 --pos.col;
+ #ifdef MULTI_BYTE
+ 	 if (is_dbcs && IsTrailByte(linep, linep + pos.col))
+ 		    --pos.col;
+ #endif
+ 	    }
  	 }
  	 else 		 /* forward search */
  	 {
***************
*** 1440,1446 ****
--- 1465,1478 ----
  		 line_breakcheck();
  	     }
  	     else
+ 	    {
+ #ifdef MULTI_BYTE
+ 	 if (is_dbcs && IsLeadByte(linep[pos.col])
+ 						 && linep[pos.col + 1] != NUL)
+ 		    ++pos.col;
+ #endif
  		 ++pos.col;
+ 	    }
  	 }

  	 /*

--
hundred-and-one symptoms of being an internet addict:
187. You promise yourself that you'll only stay online for another
      15 minutes...at least once every hour.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#139 From: Bram Moolenaar <Bram@...>
Date: Sat Jan 15, 2000 8:38 pm
Subject: Re: Special multibyte in menu is not displayed correctly
Bram@...
Send Email Send Email
 
Taro Muraoka wrote:

> -Special multibyte character cannot be used in menu. (1K)
> Please test.
> ----
> Taro Muraoka <koron@...>
>
>
> Problem:    Menu item have multibyte character '\' trail, cannot be displayed
>  correctly.
> Solution:   Add codes consider multibyte. Foward pointer 2 byte if pointed
>  character is lead byte of multibyte.
> Files:     src/menu.c
>
>
> *** ./src.orig/menu.c Sun Dec 05 03:56:08 1999
> --- ./src/menu.c Sat Jan 15 14:43:08 2000
> ***************
> *** 1016,1021 ****
> --- 1016,1028 ----
>        if (*p == NUL)
>     break;
>    }
> + #ifdef MULTI_BYTE
> +  else if (IsLeadByte(*p)) /* skip multibyte */
> +  {
> +      ++p;
> +      continue;
> +  }
> + #endif
>       if (*p)
>    *p++ = NUL;
>       return p;

I suspect this can cause problems when using 8-bit characters in a menu.  I
think it's better to use is_dbcs here, even though that's actually for buffer
text.  How about this patch instead:

*** ../vim-5.6a.28/src/menu.c Mon Dec 20 09:59:12 1999
--- src/menu.c Sat Jan 15 21:24:15 2000
***************
*** 1010,1021 ****
--- 1010,1027 ----
       char_u  *p;

       for (p = name; *p && *p != '.'; p++)
+     {
  	 if (*p == '\\' || *p == Ctrl('V'))
  	 {
  	     mch_memmove(p, p + 1, STRLEN(p));
  	     if (*p == NUL)
  		 break;
  	 }
+ #ifdef MULTI_BYTE
+  else if (is_dbcs && IsLeadByte(*p) && p[1] != NUL)
+ 	    ++p; /* skip multibyte char */
+ #endif
+     }
       if (*p)
  	 *p++ = NUL;
       return p;

--
hundred-and-one symptoms of being an internet addict:
188. You purchase a laptop so you can surf while sitting on the can.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#138 From: Bram Moolenaar <Bram@...>
Date: Sat Jan 15, 2000 8:38 pm
Subject: Re: Multibyte regexp
Bram@...
Send Email Send Email
 
Taro Muraoka wrote:

> -Regular expression search and substitute. (16K)
> Please test.

I'm glad Taro looked into this and made a patch.

One question, like with the other ones: Doesn't is_dbcs need to be used here?

--
hundred-and-one symptoms of being an internet addict:
189. You put your e-mail address in the upper left-hand corner of envelopes.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#137 From: Bram Moolenaar <Bram@...>
Date: Thu Dec 23, 1999 8:49 am
Subject: Calendar with Vim available
Bram@...
Send Email Send Email
 
Hello Vimmers,

I have created a desktop calendar for the year 2000, with some info about Vim
and ICCF Holland on the back.  Useful, and may attract some attention at the
same time.  It also has my Christmas and new year wishes on the bottom.

There are six files available (in .zip format to reduce the size):

Nederlands, A4, Corel Draw              Nederlands, A4, PostScript
English, A4, Corel Draw                 English, A4, PostScript
English, Letter, Corel Draw             English, Letter, PostScript

With the GhostScript program you can print the PostScript version on almost
any printer.  It looks better on a color printer.

You can find it at: http://www.moolenaar.net

You are allowed to change it and pass on the modified version.


I wish you all a merry Christmas and a Vimmy 2000!

- Bram

--
The Characters and incidents portrayed and the names used are fictitious and
any similarity to the names, characters, or history of any person is entirely
accidental and unintentional.
                                   Signed RICHARD M. NIXON
                  "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#136 From: "Taro Muraoka" <koron@...>
Date: Sat Jan 15, 2000 4:04 pm
Subject: Multibyte regexp
koron@...
Send Email Send Email
 
-Regular expression search and substitute. (16K)
Please test.
----
Taro Muraoka <koron@...>


Problem:    Cannot multibyte pattern search and substitute.
Solution:   Add new node for multibyte character. and etc...
Files:     src/regexp.c src/misc2.c


*** ./src.orig/regexp.c Sat May 15 22:48:52 1999
--- ./src/regexp.c Sat Jan 15 14:45:42 2000
***************
*** 195,200 ****
--- 195,204 ----
   #define BACKREF  80 /* -89  node Match same string again \1-\9 */
   #define BRACE_COMPLEX 90 /* -99  node Match nodes between m & n times */

+ #ifdef MULTI_BYTE
+ #define MULTIBYTECODE 200     /* str Match multibyte code */
+ #endif
+
   #define Magic(x)    ((x) | ('\\' << 8))

   /*
***************
*** 416,421 ****
--- 420,433 ----
    {
        ++p;
        if (*p != ']' && *p != NUL)
+ #ifdef MULTI_BYTE
+   if (IsLeadByte(*p))
+   {
+       if (*++p == NUL) break;
+       ++p;
+   }
+   else
+ #endif
     ++p;
    }
    else if (*p == '\\'
***************
*** 428,433 ****
--- 440,452 ----
     ++p; /* It was not a class name */
    }
    else
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*p))
+      {
+   if (*++p == NUL) break;
+      }
+      else
+ #endif
        ++p;
       }

***************
*** 491,496 ****
--- 510,518 ----
    * Global work variables for vim_regcomp().
    */

+ #ifdef MULTI_BYTE
+ static int skip_multi; /* previous skip was multibyte */
+ #endif
   static char_u *regparse;  /* Input-scan pointer. */
   static int num_complex_braces; /* Complex \{...} count */
   static int regnpar; /* () count. */
***************
*** 534,539 ****
--- 556,575 ----
   static int read_limits __ARGS((int, int, int *, int *));
   static void regtail __ARGS((char_u *, char_u *));
   static void regoptail __ARGS((char_u *, char_u *));
+ #ifdef MULTI_BYTE
+ static int re_ismultibytecode __ARGS((int));
+
+ /*
+  * Is chr multi-byte? If no then return 0 else return leadbyte
+  */
+     int
+ re_ismultibytecode(c)
+     int c;
+ {
+     int lead = ( c >> 8 ) & 0xFF;
+     return IsLeadByte(lead) ? lead : 0;
+ }
+ #endif

   /*
    * Skip past regular expression.
***************
*** 559,564 ****
--- 595,607 ----
    }
    else if (p[0] == '\\' && p[1] != NUL)
        ++p;    /* skip next character */
+ #ifdef MULTI_BYTE
+  else if (IsLeadByte(*p))
+  {
+      if (*++p == NUL)
+   break;
+  }
+ #endif
       }
       return p;
   }
***************
*** 1148,1154 ****
--- 1191,1201 ----
         case Magic('['):
    {
        char_u *p;
+ #ifdef MULTI_BYTE
+      char_u *base;

+      base = regparse;
+ #endif
        /*
         * If there is no matching ']', we assume the '[' is a normal
         * character. This makes ":help [" work.
***************
*** 1177,1182 ****
--- 1224,1262 ----
          regc('-');
      else
      {
+ #ifdef MULTI_BYTE
+        int     lead, start, end;
+
+        start = UCHARAT(regparse - 2) + 1;
+        end = UCHARAT(regparse);
+        if (IsTrailByte(base, regparse - 2))
+        {
+     if (!IsLeadByte(end))
+         EMSG_RET_NULL(e_invrange);
+     lead = UCHARAT(regparse - 3);
+     if (lead != end)
+         EMSG_RET_NULL(e_invrange);
+     end = UCHARAT(regparse + 1);
+     if (start > end +1)
+         EMSG_RET_NULL(e_invrange);
+     for (; start <= end; start++)
+     {
+         regc(lead);
+         regc(start);
+     }
+     regparse += 2;
+        }
+        else
+        {
+     if (IsLeadByte(end))
+         EMSG_RET_NULL(e_invrange);
+     if (start > end +1)
+         EMSG_RET_NULL(e_invrange);
+     for (; start <= end; start++)
+         regc(start);
+     regparse++;
+        }
+ #else
          int  cclass;
          int  cclassend;

***************
*** 1187,1192 ****
--- 1267,1273 ----
          for (; cclass <= cclassend; cclass++)
       regc(cclass);
          regparse++;
+ #endif
      }
         }
         /*
***************
*** 1216,1222 ****
--- 1297,1312 ----
           regc(cu);
         }
         else
+ #ifndef MULTI_BYTE
      regc(*regparse++);
+ #else
+       {
+    int c;
+    regc(c = *regparse++);
+    if (IsLeadByte(c))
+        regc(*regparse++);
+       }
+ #endif
     }
     regc('\0');
     if (*regparse != ']')
***************
*** 1234,1239 ****
--- 1324,1342 ----
        int      chr;

        ungetchr();
+ #if defined(MULTI_BYTE)
+      chr = re_ismultibytecode(peekchr());
+      if (chr)
+      {
+   ret = regnode(MULTIBYTECODE);
+   regc(chr);
+   regc(PeekChr() & 0xFF);
+   skipchr();
+   *flagp |= HASWIDTH;
+ //  *flagp |= HASWIDTH | SIMPLE;
+   break;
+      }
+ #endif
        len = 0;
        ret = regnode(EXACTLY);
        /*
***************
*** 1542,1547 ****
--- 1645,1655 ----
     curchr = regparse[0];
        }
        break;
+ #ifdef MULTI_BYTE
+  default:
+      if (IsLeadByte(curchr))
+   curchr = curchr << 8 | regparse[1];
+ #endif
    }
       }

***************
*** 1551,1556 ****
--- 1659,1673 ----
       static void
   skipchr()
   {
+ #ifdef MULTI_BYTE
+     if (IsLeadByte(*regparse))
+     {
+  skip_multi = 1;
+  regparse++;
+     }
+     else
+  skip_multi = 0;
+ #endif
       regparse++;
       prev_at_start = at_start;
       at_start = FALSE;
***************
*** 1584,1589 ****
--- 1701,1713 ----
        * Backup regparse as well; not because we will use what it points at,
        * but because skipchr() will bump it again.
        */
+ #ifdef MULTI_BYTE
+     if (skip_multi)
+     {
+  regparse--;
+  skip_multi = 0;
+     }
+ #endif
       regparse--;
   }

***************
*** 1702,1707 ****
--- 1826,1835 ----
    {
        if (cstrncmp(s, prog->regmust, prog->regmlen) == 0)
     break;  /* Found it. */
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*s))
+   if (!(*++s)) break;
+ #endif
        s++;
    }
    if (s == NULL)  /* Not present. */
***************
*** 1730,1735 ****
--- 1858,1867 ----
    {
        if (regtry(prog, s))
     return 1;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*s))
+   if (!(*++s)) break;
+ #endif
        s++;
    }
       else
***************
*** 1738,1743 ****
--- 1870,1879 ----
    {
        if (regtry(prog, s))
     return 1;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*s))
+   if (!(*++s)) break;
+ #endif
    } while (*s++ != '\0');

       /* Failure. */
***************
*** 1855,1990 ****
--- 1991,2207 ----
      case ANY:
        if (*reginput == '\0')
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case IDENT:
        if (!vim_isIDc(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case KWORD:
        if (!vim_iswordc(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case FNAME:
        if (!vim_isfilec(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case PRINT:
        if (charsize(*reginput) != 1)
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case SIDENT:
        if (isdigit(*reginput) || !vim_isIDc(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case SWORD:
        if (isdigit(*reginput) || !vim_iswordc(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case SFNAME:
        if (isdigit(*reginput) || !vim_isfilec(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case SPRINT:
        if (isdigit(*reginput) || charsize(*reginput) != 1)
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case WHITE:
        if (!vim_iswhite(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NWHITE:
        if (*reginput == NUL || vim_iswhite(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case DIGIT:
        if (!ri_digit(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NDIGIT:
        if (*reginput == NUL || ri_digit(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case HEX:
        if (!ri_hex(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NHEX:
        if (*reginput == NUL || ri_hex(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case OCTAL:
        if (!ri_octal(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NOCTAL:
        if (*reginput == NUL || ri_octal(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case WORD:
        if (!ri_word(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NWORD:
        if (*reginput == NUL || ri_word(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case HEAD:
        if (!ri_head(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NHEAD:
        if (*reginput == NUL || ri_head(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case ALPHA:
        if (!ri_alpha(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NALPHA:
        if (*reginput == NUL || ri_alpha(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case LOWER:
        if (!ri_lower(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NLOWER:
        if (*reginput == NUL || ri_lower(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case UPPER:
        if (!ri_upper(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case NUPPER:
        if (*reginput == NUL || ri_upper(*reginput))
     return 0;
+ #ifdef MULTI_BYTE
+      if (IsLeadByte(*reginput++))
+ #endif
        reginput++;
        break;
      case EXACTLY:
***************
*** 2004,2016 ****
--- 2221,2267 ----
        }
        break;
      case ANYOF:
+ #ifdef MULTI_BYTE
+      {
+   int c;
+
+   if ((c = *reginput) == '\0' )
+       return 0;
+   if (IsLeadByte(c))
+   {
+       if (cstrchr(OPERAND(scan), c << 8 | reginput[1]) == NULL)
+    return 0;
+       reginput++;
+   }
+   else
+       if (cstrchr(OPERAND(scan), c) == NULL) return 0;
+      }
+ #else
        if (*reginput == '\0' || cstrchr(OPERAND(scan), *reginput) == NULL)
     return 0;
+ #endif
        reginput++;
        break;
      case ANYBUT:
+ #ifdef MULTI_BYTE
+      {
+   int c;
+
+   if ((c = *reginput) == '\0' )
+       return 0;
+   if (IsLeadByte(c))
+   {
+       if (cstrchr(OPERAND(scan), c << 8 | reginput[1]) != NULL)
+    return 0;
+       reginput++;
+   }
+   else
+       if (cstrchr(OPERAND(scan), c) != NULL) return 0;
+      }
+ #else
        if (*reginput == '\0' || cstrchr(OPERAND(scan), *reginput) != NULL)
     return 0;
+ #endif
        reginput++;
        break;
      case NOTHING:
***************
*** 2316,2321 ****
--- 2567,2584 ----
      case END:
        return 1;     /* Success! */
        /* break; Not Reached */
+ #ifdef MULTI_BYTE
+    case MULTIBYTECODE:
+      {
+   char_u     *opnd;
+
+   opnd = OPERAND(scan);
+   if( *opnd != *reginput || *(opnd+1) != *(reginput+1) )
+       return 0;
+   reginput += 2;
+      }
+      break;
+ #endif
      default:
        emsg(e_re_corr);
   #ifdef DEBUG
***************
*** 2479,2497 ****
--- 2742,2818 ----
        break;
    }
         case ANYOF:
+ #ifdef MULTI_BYTE
+  while (1)
+  {
+      int     c;
+
+      if ((c = *scan) == '\0')
+   break;
+      if (IsLeadByte(c))
+      {
+   if (cstrchr(opnd, c << 8 | *(scan + 1)) == NULL)
+       break;
+   count++;
+   scan++;
+      }
+      else
+   if (cstrchr(opnd, c) == NULL)
+       break;
+      count++;
+      scan++;
+  }
+ #else
    while (*scan != '\0' && cstrchr(opnd, *scan) != NULL)
    {
        count++;
        scan++;
    }
+ #endif
    break;
         case ANYBUT:
+ #ifdef MULTI_BYTE
+  while (1)
+  {
+      int     c;
+
+      if ((c = *scan) == '\0')
+   break;
+      if (IsLeadByte(c))
+      {
+   if (cstrchr(opnd, c << 8 | *(scan + 1)) != NULL)
+       break;
+   count++;
+   scan++;
+      }
+      else
+   if (cstrchr(opnd, c) != NULL)
+       break;
+      count++;
+      scan++;
+  }
+ #else
    while (*scan != '\0' && cstrchr(opnd, *scan) == NULL)
    {
        count++;
        scan++;
    }
+ #endif
    break;
+ #ifdef MULTI_BYTE
+       case MULTIBYTECODE:
+  {
+      int cl, ct;
+      cl = opnd[0];
+      ct = opnd[1];
+      while( scan[0] == cl && scan[1] == ct )
+      {
+   count += 2;
+   scan++;
+      }
+  }
+  break;
+ #endif
         default:   /* Oh dear.  Called inappropriately. */
    emsg(e_re_corr);
   #ifdef DEBUG
***************
*** 2769,2774 ****
--- 3090,3100 ----
    sprintf(buf + STRLEN(buf), "BRACE_COMPLEX%d", OP(op) - BRACE_COMPLEX);
    p = NULL;
    break;
+ #ifdef MULTI_BYTE
+       case MULTIBYTECODE:
+  p = 'MULTIBYTE CODE';
+  break;
+ #endif
         default:
    sprintf(buf + STRLEN(buf), "corrupt %d", OP(op));
    p = NULL;
***************
*** 2807,2812 ****
--- 3133,3142 ----

       if (!reg_ic)
    return vim_strchr(s, c);
+ #ifdef MULTI_BYTE
+     if (re_ismultibytecode(c))
+  return vim_strchr(s, c);
+ #endif

       /* tolower() and toupper() can be slow, comparing twice should be a lot
        * faster (esp. when using MS Visual C++!) */
***************
*** 2820,2825 ****
--- 3150,3159 ----
       for (p = s; *p; ++p)
    if (*p == c || *p == cc)
        return p;
+ #ifdef MULTI_BYTE
+  else if (IsLeadByte(*p))
+      if (!(*++p)) break;
+ #endif
       return NULL;
   }

***************
*** 3046,3051 ****
--- 3380,3393 ----
        }
        if (copy)
        {
+ #ifdef MULTI_BYTE
+   if (IsLeadByte(c) && *src != NUL)
+   {
+       *dst++ = c;
+       *dst = *src++;
+   }
+   else
+ #endif
     if (func == (fptr)NULL)     /* just copy */
         *dst = c;
     else       /* change case */
*** ./src.orig/misc2.c Sun Jan 09 09:50:54 2000
--- ./src/misc2.c Sun Jan 09 09:48:06 2000
***************
*** 1017,1028 ****
--- 1017,1043 ----
   {
       char_u *p;
       int  c;
+ #ifdef MULTI_BYTE
+     int  n2 = -1;
+     if (n > 255)
+     {
+  n2 = n & 0xFF;
+  n = (n >> 8) & 0xFF;
+     }
+ #endif

       p = string;
       while ((c = *p) != NUL)
       {
    if (c == n)
+ #ifdef MULTI_BYTE
+      if (n2 == -1 || p[1] == n2)
+ #endif
        return p;
+ #ifdef MULTI_BYTE
+  if (IsLeadByte(c))
+      if (!(*++p)) break;
+ #endif
    ++p;
       }
       return NULL;
***************
*** 1039,1044 ****
--- 1054,1063 ----
       {
    if (*string == n)
        retval = string;
+ #ifdef MULTI_BYTE
+  if (IsLeadByte(*string))
+      if (!(*++string)) break;
+ #endif
    ++string;
       }
       return retval;

#135 From: "Taro Muraoka" <koron@...>
Date: Sat Jan 15, 2000 4:04 pm
Subject: Special multibyte in menu is not displayed correctly
koron@...
Send Email Send Email
 
-Special multibyte character cannot be used in menu. (1K)
Please test.
----
Taro Muraoka <koron@...>


Problem:    Menu item have multibyte character '\' trail, cannot be displayed
  correctly.
Solution:   Add codes consider multibyte. Foward pointer 2 byte if pointed
  character is lead byte of multibyte.
Files:     src/menu.c


*** ./src.orig/menu.c Sun Dec 05 03:56:08 1999
--- ./src/menu.c Sat Jan 15 14:43:08 2000
***************
*** 1016,1021 ****
--- 1016,1028 ----
        if (*p == NUL)
     break;
    }
+ #ifdef MULTI_BYTE
+  else if (IsLeadByte(*p)) /* skip multibyte */
+  {
+      ++p;
+      continue;
+  }
+ #endif
       if (*p)
    *p++ = NUL;
       return p;

#134 From: "Taro Muraoka" <koron@...>
Date: Sat Jan 15, 2000 4:04 pm
Subject: Illegal match at multibyte trail
koron@...
Send Email Send Email
 
-Simple search in search.c. (2K)
Please test.
----
Taro Muraoka <koron@...>


Problem:    Illegal match at trail of multibyte character caused trouble.
Solution:   Add codes consider multibyte. Foward pointer 2 byte if pointed
  character is lead byte of multibyte.
Files:     src/search.c


*** ./src.orig/search.c Thu Dec 30 07:41:50 1999
--- ./src/search.c Sat Jan 15 14:45:06 2000
***************
*** 265,270 ****
--- 265,276 ----
       {
    /* don't ignore case if pattern has uppercase */
    for (p = pat; *p; )
+ #ifdef MULTI_BYTE
+      if( IsLeadByte( *p ) ){
+   if( !*++p ) break;
+   ++p;
+      }else
+ #endif
        if (isupper(*p++))
     reg_ic = FALSE;
       }
***************
*** 1081,1088 ****
--- 1087,1102 ----
    {
        if ((col += dir) < 0 || col >= len)
     return FALSE;
+ #ifdef MULTI_BYTE
+      if (dir < 0 && IsTrailByte(p, &p[col]))
+   continue; /* skip multibyte's trail byte */
+ #endif
        if (p[col] == c)
     break;
+ #ifdef MULTI_BYTE
+      if (dir > 0 && IsLeadByte(p[col]))
+   col += dir; /* skip multibyte's trail byte */
+ #endif
    }
       }
       if (type)
***************
*** 1421,1427 ****
--- 1435,1450 ----
         comment_col = check_linecomment(linep);
        }
        else
+ #if defined(MULTI_BYTE) && defined(WIN32)
+      {
+   --pos.col;
+   if ( is_dbcs == (int)DBCS_JPN &&
+    IsTrailByte(linep, linep + pos.col) )
+       --pos.col;
+      }
+ #else
     --pos.col;
+ #endif
    }
    else    /* forward search */
    {
***************
*** 1440,1446 ****
--- 1463,1478 ----
     line_breakcheck();
        }
        else
+ #if defined(MULTI_BYTE) && defined(WIN32)
+      {
+   ++pos.col;
+   if ( is_dbcs == (int)DBCS_JPN &&
+    IsTrailByte(linep, linep + pos.col) )
+       ++pos.col;
+      }
+ #else
     ++pos.col;
+ #endif
    }

    /*

#133 From: Bram Moolenaar <Bram@...>
Date: Sat Jan 15, 2000 1:36 pm
Subject: Re: May I post some pathes?
Bram@...
Send Email Send Email
 
Taro Muraoka wrote:

> I made some patches for multibyte.
> May I post these patches to here?
>
> list of pathes
>   -Regular expression search and substitute. (16K)
>   -Simple search in search.c. (2K)
>   -Special multibyte character cannot be used in menu. (1K)

I would welcome sending small patches to vim-multibyte.  This gives
subscribers a chance to say something about them, which helps me to decide if
they should be included.

Your patch for multibyte characters in a menu is probably the one that
resulted in patch 5.6a.028:

*** ../vim-5.6a.27/src/gui_w32.c Wed Jan 12 21:20:04 2000
--- src/gui_w32.c Fri Jan 14 20:14:43 2000
***************
*** 5014,5019 ****
--- 5014,5032 ----
   {
       int nChar = 0;

+ #ifdef MULTI_BYTE
+     int len = lstrlen(lpAnsiIn) + 1; /* include NUL character */
+     int i;
+
+     nChar = MultiByteToWideChar(
+ 	    CP_OEMCP,
+ 	    MB_PRECOMPOSED,
+ 	    lpAnsiIn, len,
+ 	    lpWCStr, len);
+     for (i = 0; i < nChar; ++i)
+  if (lpWCStr[i] == (WORD)'\t') /* replace tabs with spaces */
+ 	    lpWCStr[i] = (WORD)' ';
+ #else
       do
       {
  	 if (*lpAnsiIn == '\t')
***************
*** 5022,5027 ****
--- 5035,5041 ----
  	     *lpWCStr++ = (WORD)*lpAnsiIn;
  	 nChar++;
       } while (*lpAnsiIn++);
+ #endif

       return nChar;
   }
*** ../vim-5.6a.27/src/version.c Fri Jan 14 22:49:13 2000
--- src/version.c Fri Jan 14 22:48:51 2000
***************
*** 420,421 ****
--- 420,423 ----
   {   /* Add new patch number below this line */
+ /**/
+     28,
   /**/

--
hundred-and-one symptoms of being an internet addict:
181. You make up words that go with the "happy tune" your modem makes
      while dialing your ISP.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#132 From: "Taro Muraoka" <koron@...>
Date: Sat Jan 15, 2000 6:34 am
Subject: May I post some pathes?
koron@...
Send Email Send Email
 
I made some patches for multibyte.
May I post these patches to here?

list of pathes
   -Regular expression search and substitute. (16K)
   -Simple search in search.c. (2K)
   -Special multibyte character cannot be used in menu. (1K)

Thanks.
----
Taro Muraoka koron@...

#131 From: Bram Moolenaar <Bram@...>
Date: Wed Jan 12, 2000 7:16 pm
Subject: Re: (fwd) [56a] Can't display japanese menu
Bram@...
Send Email Send Email
 
Vince Negri wrote:

> > This was sent to the vim-multibyte group.  Are you subscribed there?
> I already have too much email - can't really face joining another list! :)

Well, I got a warning from egroups that the list would be deleted, because
there was no message for the past 90 days...  I wouldn't worry about getting
too much extra email! :-)

> > Anyway, this looks OK, except that the special handling of the TAB is
> > missing.
>
> Yes, the way to fix this is probably:
>
>      int len = lstrlen( lpAnsiIn ) + 1; /* include NULL character */
>      retval = MultiByteToWideChar(
>       CP_OEMCP,
>       MB_PRECOMPOSED,
>       lpAnsiIn, len,
>       lpWCStr, len
>       );
>
>      if (retval)
>     {
>  /* walk along lpWCStr string, turning tabs to spaces */
>     ]
>
>     return retval;

I'll send this back to the vim-multibyte list.  Comments, anyone?

--
hundred-and-one symptoms of being an internet addict:
123. You ask the car dealer to install an extra cigarette lighter
      on your new car to power your notebook.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#130 From: "?? ??" <matsu@...>
Date: Wed Jan 12, 2000 5:45 am
Subject: Re: [56a] Can't display japanese menu
matsu@...
Send Email Send Email
 
Sorry !!!
I missed.

miss:

     int nChar = 0;
     nChar = MultiByteToWideChar(
         CP_OEMCP,
         MB_PRECOMPOSED,
         lpAnsiIn,
         -1,
         lpWCStr,
         sizeof(lpAnsiIn)
     );
     return nChar;

correct:

     int nChar = 0;
     nChar = MultiByteToWideChar(
         CP_OEMCP,
         MB_PRECOMPOSED,
         lpAnsiIn,
         -1,
         lpWCStr,
         lstrlen(lpAnsiIn)+1
     );
     return nChar;

#129 From: "?? ??" <matsu@...>
Date: Wed Jan 12, 2000 4:36 am
Subject: Re: [56a] Can't display japanese menu
matsu@...
Send Email Send Email
 
Thank you Taro
     (about patch)

but...
Last parameter of function "MultiByteToWideChar"
is the size, in wide characters, of the buffer pointed
to by the lpWideCharStr parameter.
If this work ..., may be broken a few buffers.

     int nChar = 0;
     nChar = MultiByteToWideChar(
         CP_OEMCP,
         MB_PRECOMPOSED,
         lpAnsiIn,
         -1,
         lpWCStr,
         sizeof(lpAnsiIn)
     );
     return nChar;

#12 From: Bram Moolenaar <Bram@...>
Date: Wed Nov 3, 1999 11:17 am
Subject: Re: (fwd) Correct use of UTF-8 under Unix
Bram@...
Send Email Send Email
 
[There is a discussion on the linux-utf8 maillist about file encodings.  Here
is a reply about the 'fileencoding' option in Vim which you might find
interesting.]

Date:   Tue, 2 Nov 1999 20:31:59 +0100 (CET)
From: PILCH Hartmut <phm@...>
To: linux-utf8@...
cc: perl-unicode@...
Subject: Re: Correct use of UTF-8 under Unix
Message-ID: <Pine.LNX.4.10.9911022028010.7046-100000@...>

On Tue, 2 Nov 1999, Bram Moolenaar wrote:

> So, what now?  I certainly would like Vim to be able to handle multiple
> encodings.  The easy way out is to let the user set the 'fileencoding' option.
> This is actually already working, with these values:
> 	    ansi default setting, good for most Western languages
> 	    japan set to use shift-JIS (Windows CP 932) encoding
> 	    korea set to use Korean DBCS
> 	    prc  use simplified Chinese encoding
> 	    taiwan use traditional Chinese encoding

For Japan, Shift-JIS is definitely not enough.  You need at least also
EUC-Japan and iso-2022-jp-2.  For the others the situation is similar.
Emacs uses the MIME names, as does Java.

Also, Emacs subdivides your 'fileencoding' into a
'coding-system-for-read' and a 'coding-system-for-write'.

If in doubt, it is a good idea to follow the Emacs naming.  Emacs is
not yet UTF8 based, but it has thouroughly designed multi-coding
capabilities with many years of experience and it is the only
multilingual system that has been in use on Linux.  Therefore it
would also be very helpful, if your vim was able to read the
multilingual encodings used by Emacs: iso-2022-7bit and emacs-mule.

Thanks to Otfried Cheong's conversion frontend, I am currently using
Emacs with the "unicode-utf8" encoding (is that a MIME name?), but
the other two multilingual encodings will keep staying around for
quite a while, since it will take a lot of effort to move the core
of Emacs to Unicode.

--
phm

-
Linux-UTF8:   i18n of Linux on all levels
Archive:      http://mail.nl.linux.org/lists/

#11 From: Sung-Hyun Nam <namsh@...>
Date: Thu Oct 21, 1999 12:51 am
Subject: Re: gtk-XIM patch (was Syncup for GTK+)
namsh@...
Send Email Send Email
 
On Thu, Jul 15, 1999 at 05:12:50 +0900, Chi-Deok Hwang wrote:
>
> It is possible to use the separate widget for status area, but not separate
> window. Then client window will be mainwin and focus window be drawarea.
> And GtkLabel or something containing status area will have mainwin's window
> as it's parent window.
> It is clean and really I wanted this senario. But old vim's layout/resizing
> code was too hackish to implement this. My main aim was to try fix this
> horrible resizing codes.
> Next time I or Nam will remove XIM code from gui_gtk_f.c.

And now, here is a patch for it from Chi-Deok Hwang.
I applied this to VIM-5.5.28 and have no problem yet.
This also fixes the ':set guioptions+=b'.

namsh

--- gui_gtk_f.c.orig Wed Oct 20 21:32:46 1999
+++ gui_gtk_f.c Wed Oct 20 21:52:27 1999
@@ -399,12 +399,6 @@

      requisition->width = form->width;
      requisition->height = form->height;
-#ifdef USE_XIM
-    /*
-     * FIXME: This isn't the proper place to do this!
-     */
-    requisition->height += xim_get_status_area_height();
-#endif

      tmp_list = form->children;

@@ -798,10 +792,6 @@
      event.y = widget->allocation.y;
      event.width = widget->allocation.width;
      event.height = widget->allocation.height;
-
-#ifdef USE_XIM
-    event.height -= xim_get_status_area_height();
-#endif

      gtk_widget_event (widget, (GdkEvent*) &event);
  }
--- gui_gtk_x11.c.orig Wed Oct 20 21:32:55 1999
+++ gui_gtk_x11.c Wed Oct 20 22:15:38 1999
@@ -1614,6 +1614,15 @@
      /* Adjust input management behaviour to the capabilities of the new
       * fontset */
      xim_decide_input_style();
+    if (xim_get_status_area_height()) {
+  /* status area is required */
+  /* just create the empty label so that
+     mainwin will allocate the extra space for status area */
+         GtkWidget *label = gtk_label_new("       ");
+  gtk_widget_set_usize(label, 20, gui.char_height + 2);
+  gtk_box_pack_end(GTK_BOX(GTK_BIN(gui.mainwin)->child), label, FALSE, FALSE,
0);
+  gtk_widget_show(label);
+    }
  #endif

      /* Preserve the logical dimensions of the screen. */
--- multbyte.c.orig Wed Oct 20 21:41:02 1999
+++ multbyte.c Wed Oct 20 22:30:23 1999
@@ -397,19 +397,19 @@
 	     return;

 	 attr = xic_attr;
- widget = gui.drawarea;
 	 attrmask = 0;
 	 style = gdk_ic_get_style(xic);
 	 if ((style & GDK_IM_STATUS_MASK) == GDK_IM_STATUS_AREA)
 	 {
 	     if (gui.fontset && gui.fontset->type == GDK_FONT_FONTSET)
 	     {
+  widget = gui.mainwin;
 		 gdk_window_get_size(widget->window, &width, &height);

 		 attrmask |= GDK_IC_STATUS_AREA;
-  attr->status_area.x = gui.border_offset;
-  attr->status_area.y = height - gui.char_height - gui.border_offset;
-  attr->status_area.width = width - 2 * gui.border_offset;
+  attr->status_area.x = 0;
+  attr->status_area.y = height - gui.char_height - 1;
+  attr->status_area.width = width;
 		 attr->status_area.height = gui.char_height;
 	     }
 	 }
@@ -815,7 +815,7 @@

      if (!gdk_im_ready())
      {
- EMSG("Your GTK+ does not support XIM");
+ EMSG("Input Method Server is not running");
 	 return;
      }
      if ((xic_attr = gdk_ic_attr_new()) != NULL)
@@ -828,7 +828,7 @@
 	 GtkWidget *widget = gui.drawarea;

 	 attr->style = xim_input_style;
- attr->client_window = widget->window;
+ attr->client_window = gui.mainwin->window;

 	 if ((colormap = gtk_widget_get_colormap(widget)) !=
 	     gtk_widget_get_default_colormap())
@@ -871,13 +871,13 @@
 	     }
 	     else
 	     {
+  gdk_window_get_size(gui.mainwin->window, &width, &height);
 		 attrmask |= GDK_IC_STATUS_AREA_REQ;
-  attr->status_area.x = gui.border_offset;
-  attr->status_area.y = height - gui.char_height - gui.border_offset;
-  attr->status_area.width = width - 2*gui.border_offset;
+  attr->status_area.x = 0;
+  attr->status_area.y = height - gui.char_height - 1;
+  attr->status_area.width = width;
 		 attr->status_area.height = gui.char_height;
 		 attr->status_fontset = gui.fontset;
-  attr->preedit_area.height -= gui.char_height;
 	     }
 	 }
  #endif

#10 From: Sven Guckes <guckes@...>
Date: Mon Oct 4, 1999 7:38 pm
Subject: Vim in San Francisco and/or at Berkeley Oct12/13/14
guckes@...
Send Email Send Email
 
Hi, fellow Vim users in California!

I am currently in Arcata (near Eureka) and I will be coming down to
San Francisco on Tuesday October 12th.  I will probably take a look
at the Berkeley campus and maybe to meet some of you guys there.
So if you have some spare time on either of Oct 12-14 - let me know!  :-)

I might not be able to check my email on my way until
I get into Sacramento on the weekend before (Oct 9/10).

Sven

#9 From: Bram Moolenaar <Bram@...>
Date: Tue Sep 28, 1999 7:46 pm
Subject: Vim 5.5 for Mac uploaded.
Bram@...
Send Email Send Email
 
Axel Kielhorn has compiled Vim 5.5 for the MacIntosh and created .sit
archives.  Patches up to 5.5.002 have been included.

Syntax highlighting is not supported for 68k.
You will need StuffIt Expander 5.x to extract the files.

The files are located at ftp://ftp.vim.org/pub/vim/mac/

SIZE     FILE          CONTENTS
1136568  vim55rt.sit   Vim 5.5 runtime files packed for Mac
  746557  vim55bin.sit  Vim 5.5 Mac 68k and PPC binaries

If you have problems, please contact Axel Kielhorn <A.Kielhorn@...>.
More info: http://www.tu-bs.de/~i0080108/macvim.html.

--
hundred-and-one symptoms of being an internet addict:
199. You read this entire list of symptoms, looking for something
      that doesn't describe you.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#8 From: Bram Moolenaar <Bram@...>
Date: Tue Sep 21, 1999 8:30 pm
Subject: Vim version 5.5 has been released
Bram@...
Send Email Send Email
 
Announcing:  Vim (Vi IMproved) version 5.5
     Author:  Bram Moolenaar et al.

Announcement
------------
This is a bug-fix release of Vim.  Since version 5.4 bugs have been fixed, and
some items cleaned up.

Vim 5.5 has been tested by quite a few people over the past weeks, and there
are no big changes since version 5.4.  This should be the most stable Vim
version ever.  But it's free software, the usual disclaimers apply.


What is Vim?
------------
Vim is an almost 100% compatible version of the UNIX editor Vi.  Many new
features have been added: Multi level undo, syntax highlighting, command line
history, filename completion, block operations, etc.  Those who don't know Vi
can probably skip this message, unless you are prepared to learn something new
and useful.  Vim is especially recommended for editing programs.

Vim runs on almost any Unix flavor, MS-DOS, MS-Windows 3.1, MS-Windows
95/98/NT, OS/2, Atari MiNT, BeOS, VMS, RISC OS, Macintosh and Amiga.

For more information, see "http://www.vim.org".


New since version 5.4
---------------------
Not much:
- Support for a mouse scroll wheel in X11 (GTK, Athena and Motif).  Should
   also work in an xterm when translations are installed.
- Support for decompression of bzip2 files in the example vimrc file.
- Handling of patch numbers, they show up in the ":version" output.
- Uninstall program for MS-Windows, for those that have a problem with the
   "Edit with Vim" popup menu entry.

And many bug fixes!  This version is aimed at stability.

See ":help version-5.5" in Vim for the details.


Where to get it
---------------
You can find a list of distribution sites at

         ftp://ftp.vim.org/pub/vim/MIRRORS

Suggested locations:

         ftp://ftp.<country>.vim.org/pub/vim/
         ftp://ftp.vim.org/pub/vim/

Replace <country> with a country code, e.g.:

         ftp://ftp.us.vim.org/pub/vim/


What is available
-----------------
Note that for all systems the distribution is split into an archive with
runtime files (documentation, syntax files, etc.) and a binary and/or source
archive.  You should download at least two archives.

FILE                       SYSTEM  COMMENTS

unix/vim-5.5-src.tar.gz    Unix(*) Sources.
unix/vim-5.5-rt.tar.gz     Unix(*) Runtime files.

extra/vim-5.5-extra.tar.gz Unix(*) Extra sources and docs (Farsi, OLE, VisVim).

unix/vim-5.4-5.5-rt.diff.gz        Runtime diff with version 5.4.
unix/vim-5.4-5.5-src.diff.gz       Sources diff with version 5.4.
extra/vim-5.4-5.5-extra.diff.gz    Extra diff with version 5.4.

pc/vim55rt.zip            Win32    MS-DOS and MS-Windows runtime files.
pc/gvim55.zip             Win32    32 bit MS-Windows 95/98/NT GUI binaries.
                                    Recommended for MS-Windows 95/98/NT.
                                    The best choice for syntax highlighting and
                                    speed.
pc/gvim55ole.zip          Win32    32 bit MS-Windows 95/98/NT GUI binaries,
                                    with OLE support and VisVim.
pc/gvim55_s.zip           Win32s   32 bit MS-Windows 3.1/3.11 GUI binaries.
                                    Requires Win32s.
pc/vim55w32.zip           Win32    32 bit MS-Windows 95/98/NT console binaries.
                                    Recommended for Windows NT, NOT for 95/98.
                                    Supports long file names.
pc/vim55d32.zip           MS-DOS   32 bit protected mode binaries.
                                    Recommended for MS-DOS, MS-Windows 3.1 and
                                    MS-Windows 95/98 console.  It is compiled
                                    with DJGPP, it may need a DPMI driver
                                    (CWSDPMI is included).  Supports long file
                                    names on MS-Windows 95/98 (NOT on NT).
pc/vim55d16.zip           MS-DOS   16 bit real mode binaries.
                                    Runs on most MS-DOS systems, but is
                                    restricted to using 640K memory.  Small
                                    version, without e.g., syntax highlighting
                                    and autocommands.
pc/vim55src.zip           PC       Sources for PC versions (with CR-LF).

os2/vim55rt.zip           OS/2     Runtime files (same as for PC).
os2/vim55os2.zip          OS/2     Binaries.
                                    (use the Unix+extra archives for sources)

amiga/vim55rt.tgz         Amiga    Runtime files.
amiga/vim55bin.tgz        Amiga    Binaries.
amiga/vim55big.tgz        Amiga    Binaries with more features.
amiga/vim55src.tgz        Amiga    Sources for Amiga.

doc/vim55html.zip         all      Documentation converted to HTML.

patches/*                 all      Recent patches.

(*) Also for BeOS, OS/2, VMS, Macintosh and Atari MiNT

The contents of the source archives depends on the specified system.  To
obtain the full sources and docs, get the three Unix archives.


system    file type      Unpack with

Unix      file.tar.gz    gunzip file.tar.gz; tar xf file.tar
Amiga     file.tgz       gzip -d file.tgz; tar xf file.tar
PC        file.zip           pkunzip -d file.zip
                          or: unzip file.zip


Mailing lists
-------------
For user questions you can turn to the Vim mailing list.  There are a lot of
tips, scripts and solutions.  You can ask your Vim questions, but only if you
subscribe.  See http://www.vim.org/mail.html.  An archive is kept at
http://www.egroups.com/group/vim.

If you want to help developing Vim or get the latest patches, subscribe to the
vim-dev mailing list.  An archive is kept at
http://www.egroups.com/group/vimdev.


Reporting bugs
--------------
Send them to <Bram@...>.  Please be brief, all the time spent on answering
mail is subtracted from the time that is spent on improving Vim!  Always give
a reproducable example and try to find out which settings or other things
influence the appearance of the bug.  Try different machines if possible.  See
":help bugs" in Vim.  Send me patches if you can!

If something needs discussing with other developers, send a message to the
vim-dev mailing list.  You need to subscribe first.


Happy Vimming!

--
hundred-and-one symptoms of being an internet addict:
141. You'd rather go to http://www.weather.com/ than look out your window.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#7 From: Oezguer Kesim <oec@...>
Date: Fri Sep 17, 1999 6:04 am
Subject: final test, please ignore
oec@...
Send Email Send Email
 
This is the final test in order to check, wether egroups finaly can handle
the archive correctly.

Sorry for the interruption,
cheers,
   oec
   maillinglistmanager

#5 From: Oezguer Kesim <Oezguer.Kesim@...>
Date: Tue Sep 14, 1999 1:01 pm
Subject: Writebility test
Oezguer.Kesim@...
Send Email Send Email
 
--
~
~
~
".signature" 4 lines, 50 characters written

#2 From: Bram Moolenaar <Bram@...>
Date: Sat Aug 14, 1999 2:24 pm
Subject: Welcome
Bram@...
Send Email Send Email
 
Welcome to the vim-multibyte maillist!

This list is to be used for multi-byte user issues of Vim (Vi IMproved) and
some development.  Also see the "vim" and "vimdev" maillists.

NOTE: Don't send messages to vim-multibyte@egroups.com, use
vim-multibyte@....  Otherwise the subscribers will not get your message,
it will only be archived at egroups.

--
hundred-and-one symptoms of being an internet addict:
91. It's Saturday afternoon in the middle of may and you are on computer.

--/-/---- Bram Moolenaar ---- Bram@... ---- Bram@... ---\-\--
   \ \    www.vim.org/iccf      www.moolenaar.net       www.vim.org    / /

#1 From: "Bram Moolenaar" <bram@...>
Date: Sat Aug 14, 1999 11:47 am
Subject: Welcome to the vim-multibyte eGroup
bram@...
Send Email Send Email
 

Multi-byte aspects of Vim (Vi IMproved)
Mostly for users, but also for development.
Original address: vim-multibyte@...
Also see the "vim" and "vimdev" lists.

Group Manager: vim-multibyte-owner@egroups.com

To subscribe, send a message to vim-multibyte-subscribe@egroups.com or go to the e-groups's home page at http://www.egroups.com/group/vim-multibyte/


Messages 1 - 149 of 2636   Newest  |  < Newer  |  Older >  |  Oldest
Advanced
Add to My Yahoo!      XML What's This?

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help