vim72-20100325-kaoriya-w64j.zip
[MacVim/KaoriYa.git] / runtime / plugin / hz_ja.vim
blob1cc8314dc2a17f50a26f93dd1c6e5346140a49bc
1 " vim:set ts=8 sts=2 sw=2 tw=0 nowrap:
3 " hz_ja.vim - Convert character between HANKAKU and ZENKAKU
5 " Last Change: 06-Feb-2006.
6 " Written By:  MURAOKA Taro <koron@tka.att.ne.jp>
8 " Commands:
9 "   :Hankaku      Convert to HANKAKU.
10 "   :Zenkaku      Convert to ZENKAKU.
11 "   :ToggleHZ     Toggole convert between HANKAKU and ZENKAKU.
13 " Functions:
14 "   ToHankaku(str)      Convert given string to HANKAKU.
15 "   ToZenkaku(str)      Convert given string to ZENKAKU.
17 " To make vim DO NOT LOAD this plugin, write next line in your .vimrc:
18 "       :let plugin_hz_ja_disable = 1
20 " Japanese Description:
21 " ƒRƒ}ƒ“ƒh:
22 "   :[raneg]Hankaku
23 "   :[range]Zenkaku
24 "   :[range]ToggleHZ
25 "   :[range]HzjaConvert {target}
27 " ƒL�[ƒ}ƒbƒsƒ“ƒO:
28 "   ˆÈ‰º‚̓rƒWƒ…ƒAƒ‹‘I‘ð—̈æ‚ɑ΂·‚é‘€�ì‚Å‚·�B‚Ü‚½()“à‚ÍHzjaConvertƒRƒ}ƒ“ƒh
29 "   ‚ÆŠÖ�”‚É“n‚·�Atarget‚ÉŽw’è‰Â”\‚È•¶Žš—ñ‚Å‚·�B
30 "     gHL       ‰Â”\‚È•¶Žš‚ð‘S‚Ä”¼Šp‚É•ÏŠ·‚·‚é  (han_all)
31 "     gZL       ‰Â”\‚È•¶Žš‚ð‘S‚Ä‘SŠp‚É•ÏŠ·‚·‚é  (zen_all)
32 "     gHA       ASCII•¶Žš‚ð‘S‚Ä”¼Šp‚É•ÏŠ·‚·‚é   (han_ascii)
33 "     gZA       ASCII•¶Žš‚ð‘S‚Ä‘SŠp‚É•ÏŠ·‚·‚é   (zen_ascii)
34 "     gHM       ‹L�†‚ð‘S‚Ä”¼Šp‚É•ÏŠ·‚·‚é        (han_kigou)
35 "     gZM       ‹L�†‚ð‘S‚Ä‘SŠp‚É•ÏŠ·‚·‚é        (zen_kigou)
36 "     gHW       ‰p�”Žš‚ð‘S‚Ä”¼Šp‚É•ÏŠ·‚·‚é      (han_eisu)
37 "     gZW       ‰p�”Žš‚ð‘S‚Ä‘SŠp‚É•ÏŠ·‚·‚é      (zen_eisu)
38 "     gHJ       ƒJƒ^ƒJƒi‚ð‘S‚Ä”¼Šp‚É•ÏŠ·‚·‚é    (han_kana)
39 "     gZJ       ƒJƒ^ƒJƒi‚ð‘S‚Ä‘SŠp‚É•ÏŠ·‚·‚é    (zen_kana)
40 "   ˆÈ‰º‚ÍŽg—p•p“x‚Ì�‚‚³‚ð�l—¶‚µ‚Ä�A�ã‹L‚Æ�d•¡‚µ‚½‹@”\‚Æ‚µ‚ÄŠ„‚è“–‚Ä‚ç‚ꂽ
41 "   ƒL�[ƒ}ƒbƒv‚Å‚·�B
42 "     gHH       ASCII•¶Žš‚ð‘S‚Ä”¼Šp‚É•ÏŠ·‚·‚é   (han_ascii)
43 "     gZZ       ƒJƒ^ƒJƒi‚ð‘S‚Ä‘SŠp‚É•ÏŠ·‚·‚é    (zen_kana)
44
45 " ŠÖ�”:
46 "   ToHankaku(str)      •¶Žš—ñ‚𔼊p‚Ö•ÏŠ·‚·‚é
47 "   ToZenkaku(str)      •¶Žš—ñ‚ð‘SŠp‚Ö•ÏŠ·‚·‚é
48 "   HzjaConvert(str, target)
49 "                       •¶Žš—ñ‚ðtarget‚É�]‚¢•ÏŠ·‚·‚é�Btarget‚̈Ӗ¡‚̓L�[ƒ}ƒb
50 "                       ƒsƒ“ƒO‚Ì�€–Ú‚ðŽQ�Æ�B
52 " ƒ�ƒjƒ…�[Šg’£:
53 "   GUIŠÂ‹«‚ł̓rƒWƒ…ƒAƒ‹‘I‘ðŽž‚Ìƒ|ƒbƒvƒAƒbƒvƒ�ƒjƒ…�[(‰EƒNƒŠƒbƒNƒ�ƒjƒ…�[)‚É
54 "   •ÏŠ·—p‚̃Rƒ}ƒ“ƒh‚ª’ljÁ‚³‚ê‚Ü‚·�B
56 " ‚±‚̃vƒ‰ƒOƒCƒ“‚ð“Ç�ž‚Ý‚½‚­‚È‚¢Žž‚Í.vimrc‚ÉŽŸ‚̂悤‚É�‘‚­‚±‚Æ:
57 "       :let plugin_hz_ja_disable = 1
59 scriptencoding cp932
61 if exists('plugin_hz_ja_disable')
62   finish
63 endif
64 if !has('multi_byte')
65   finish
66 endif
68 command! -nargs=0 -range Hankaku <line1>,<line2>call <SID>ToggleLineWise('Hankaku')
69 command! -nargs=0 -range Zenkaku <line1>,<line2>call <SID>ToggleLineWise('Zenkaku')
70 command! -nargs=0 -range ToggleHZ <line1>,<line2>call <SID>ToggleLineWise('Toggle')
71 command! -nargs=1 -range -complete=custom,HzjaConvertComplete HzjaConvert <line1>,<line2>call <SID>HzjaConvert(<q-args>)
73 vnoremap <silent> gHL <C-\><C-N>:call <SID>HzjaConvertVisual('han_all')<CR>
74 vnoremap <silent> gZL <C-\><C-N>:call <SID>HzjaConvertVisual('zen_all')<CR>
75 vnoremap <silent> gHA <C-\><C-N>:call <SID>HzjaConvertVisual('han_ascii')<CR>
76 vnoremap <silent> gZA <C-\><C-N>:call <SID>HzjaConvertVisual('zen_ascii')<CR>
77 vnoremap <silent> gHM <C-\><C-N>:call <SID>HzjaConvertVisual('han_kigou')<CR>
78 vnoremap <silent> gZM <C-\><C-N>:call <SID>HzjaConvertVisual('zen_kigou')<CR>
79 vnoremap <silent> gHW <C-\><C-N>:call <SID>HzjaConvertVisual('han_eisu')<CR>
80 vnoremap <silent> gZW <C-\><C-N>:call <SID>HzjaConvertVisual('zen_eisu')<CR>
81 vnoremap <silent> gHJ <C-\><C-N>:call <SID>HzjaConvertVisual('han_kana')<CR>
82 vnoremap <silent> gZJ <C-\><C-N>:call <SID>HzjaConvertVisual('zen_kana')<CR>
84 vnoremap <silent> gHH <C-\><C-N>:call <SID>HzjaConvertVisual('han_ascii')<CR>
85 vnoremap <silent> gZZ <C-\><C-N>:call <SID>HzjaConvertVisual('zen_kana')<CR>
87 if has('gui_running')
88   vnoremenu 1.120 PopUp.-SEP3-  <Nop>
89   vnoremenu 1.130.100 PopUp.‘SŠp�¨”¼Šp(&H).‘S•”(&L) <C-\><C-N>:call <SID>HzjaConvertVisual('han_all')<CR>
90   vnoremenu 1.130.110 PopUp.‘SŠp�¨”¼Šp(&H).ASCII(&A) <C-\><C-N>:call <SID>HzjaConvertVisual('han_ascii')<CR>
91   vnoremenu 1.130.120 PopUp.‘SŠp�¨”¼Šp(&H).‹L�†(&M) <C-\><C-N>:call <SID>HzjaConvertVisual('han_kigou')<CR>
92   vnoremenu 1.130.130 PopUp.‘SŠp�¨”¼Šp(&H).‰p�”(&W) <C-\><C-N>:call <SID>HzjaConvertVisual('han_eisu')<CR>
93   vnoremenu 1.130.140 PopUp.‘SŠp�¨”¼Šp(&H).ƒJƒ^ƒJƒi(&J) <C-\><C-N>:call <SID>HzjaConvertVisual('han_kana')<CR>
94   vnoremenu 1.140.100 PopUp.”¼Šp�¨‘SŠp(&Z).‘S•”(&L) <C-\><C-N>:call <SID>HzjaConvertVisual('zen_all')<CR>
95   vnoremenu 1.140.110 PopUp.”¼Šp�¨‘SŠp(&Z).ASCII(&A) <C-\><C-N>:call <SID>HzjaConvertVisual('zen_ascii')<CR>
96   vnoremenu 1.140.120 PopUp.”¼Šp�¨‘SŠp(&Z).‹L�†(&M) <C-\><C-N>:call <SID>HzjaConvertVisual('zen_kigou')<CR>
97   vnoremenu 1.140.130 PopUp.”¼Šp�¨‘SŠp(&Z).‰p�”(&W) <C-\><C-N>:call <SID>HzjaConvertVisual('zen_eisu')<CR>
98   vnoremenu 1.140.140 PopUp.”¼Šp�¨‘SŠp(&Z).ƒJƒ^ƒJƒi(&J) <C-\><C-N>:call <SID>HzjaConvertVisual('zen_kana')<CR>
99 endif
101 function! HzjaConvertComplete(argleand, cmdline, curpos)
102   call s:Initialize()
103   return s:targetlist
104 endfunction
106 function! s:HzjaConvert(target) range
107   let nline = a:firstline
108   while nline <= a:lastline
109     call setline(nline, HzjaConvert(getline(nline), a:target))
110     let nline = nline + 1
111   endwhile
112 endfunction
114 " —^‚¦‚ç‚ꂽ•¶Žš—ñ‚Ì”¼Šp‘SŠp•¶Žš‚𑊌݂ɕϊ·‚·‚é�B•ÏŠ·‚Ì•û–@‚͈ø�”target‚Å•¶
115 " Žš—ñ‚Æ‚µ‚ÄŽw’è‚·‚é�BŽw’è‚Å‚«‚镶Žš—ñ‚͈ȉº‚Ì‚Æ‚¨‚è�B
117 "   han_all     ‘S‚Ä‚Ì‘SŠp•¶Žš�¨”¼Šp
118 "   han_ascii   ‘SŠpƒAƒXƒL�[�¨”¼Šp
119 "   han_kana    ‘SŠpƒJƒ^ƒJƒi�¨”¼Šp
120 "   han_eisu    ‘SŠp‰p�”�¨”¼Šp
121 "   han_kigou   ‘SŠp‹L�†�¨”¼Šp
122 "   zen_all     ‘S‚Ä‚Ì”¼Šp•¶Žš�¨‘SŠp
123 "   zen_ascii   ”¼ŠpƒAƒXƒL�[�¨‘SŠp
124 "   zen_kana    ”¼ŠpƒJƒ^ƒJƒi�¨‘SŠp
125 "   zen_eisu    ”¼Šp‰p�”�¨‘SŠp
126 "   zen_kigou   ”¼Šp‹L�†�¨‘SŠp
128 function! HzjaConvert(line, target)
129   call s:Initialize()
130   if !exists('s:mx_'.a:target)
131     return a:line
132   else
133     let mode = a:target =~# '^han_' ? 'Hankaku' : 'Zenkaku'
134     return substitute(a:line, s:mx_{a:target}, '\=s:ToggleLine(submatch(0),0,0,mode)', 'g')
135   endif
136 endfunction
138 function! s:HzjaConvertVisual(target)
139   call s:Initialize()
140   let save_regcont = @"
141   let save_regtype = getregtype('"')
142   normal! gvy
143   call setreg('"', HzjaConvert(@", a:target), getregtype('"'))
144   normal! gvp
145   call setreg('"', save_regcont, save_regtype)
146 endfunction
148 let s:init = 0
149 function! s:Initialize()
150   if s:init != 0
151     return
152   endif
153   let s:init = 1
155   let s:match_character = '\%([³¶·¸¹º»¼½¾¿ÀÁÂÃÄÊËÌÍÎ]Þ\|[ÊËÌÍÎ]ß\|.\)'
156   let s:match_hankaku = '\%([³¶·¸¹º»¼½¾¿ÀÁÂÃÄÊËÌÍÎ]Þ\|[ÊËÌÍÎ]ß\|[ -~¡¢£¤¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß]\)'
158   let zen_ascii = '�@�I�h�”���“�•�f�i�j�–�{�C�|�D�^‚O‚P‚Q‚R‚S‚T‚U‚V‚W‚X�F�G�ƒ���„�H�—‚`‚a‚b‚c‚d‚e‚f‚g‚h‚i‚j‚k‚l‚m‚n‚o‚p‚q‚r‚s‚t‚u‚v‚w‚x‚y�m���n�O�Q�e‚�‚‚‚ƒ‚„‚…‚†‚‡‚ˆ‚‰‚Š‚‹‚Œ‚�‚Ž‚�‚�‚‘‚’‚“‚”‚•‚–‚—‚˜‚™‚š�o�b�p�`'
159   let zen_kana = '�B�u�v�Aƒ’ƒ@ƒBƒDƒFƒHƒƒƒ…ƒ‡ƒb�[ƒAƒCƒEƒGƒIƒJƒLƒNƒPƒRƒTƒVƒXƒZƒ\ƒ^ƒ`ƒcƒeƒgƒiƒjƒkƒlƒmƒnƒqƒtƒwƒzƒ}ƒ~ƒ€ƒ�ƒ‚ƒ„ƒ†ƒˆƒ‰ƒŠƒ‹ƒŒƒ�ƒ�ƒ“�J�Kƒ”ƒKƒMƒOƒQƒSƒUƒWƒYƒ[ƒ]ƒ_ƒaƒdƒfƒhƒoƒrƒuƒxƒ{ƒpƒsƒvƒyƒ|'
160   let han_ascii = " !\"#$%&'()*+,\\-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
161   let han_kana = '¡¢£¤¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß'
162   let s:mx_han_all = "[".zen_ascii.zen_kana."]\\+"
163   let s:mx_zen_all = "[".han_ascii.han_kana."]\\+"
164   let s:mx_han_ascii = "[".zen_ascii."]\\+"
165   let s:mx_zen_ascii = "[".han_ascii."]\\+"
166   let s:mx_han_kana = "[".zen_kana."]\\+"
167   let s:mx_zen_kana = "[".han_kana."]\\+"
168   let s:mx_han_eisu = '[‚O‚P‚Q‚R‚S‚T‚U‚V‚W‚X‚`‚a‚b‚c‚d‚e‚f‚g‚h‚i‚j‚k‚l‚m‚n‚o‚p‚q‚r‚s‚t‚u‚v‚w‚x‚y‚�‚‚‚ƒ‚„‚…‚†‚‡‚ˆ‚‰‚Š‚‹‚Œ‚�‚Ž‚�‚�‚‘‚’‚“‚”‚•‚–‚—‚˜‚™‚š]\+'
169   let s:mx_zen_eisu = '[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]\+'
170   let s:mx_han_kigou = '[�I�h�”���“�•�f�i�j�–�{�C�|�D�^�F�G�ƒ���„�H�—�m���n�O�Q�e�o�b�p�`]\+'
171   let s:mx_zen_kigou = "[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~]\\+"
172   let s:targetlist = "han_all\<NL>zen_all\<NL>han_ascii\<NL>zen_ascii\<NL>han_kana\<NL>zen_kana\<NL>han_eisu\<NL>zen_eisu\<NL>han_kigou\<NL>zen_kigou"
174   " ”¼Šp�¨‘SŠpƒe�[ƒuƒ‹�ì�¬
175   let tmp = ''
176   let tmp = tmp . " �@!�I\"�h#�”$��%�“&�•'�f(�i)�j*�–+�{,�C-�|.�D/�^"
177   let tmp = tmp . '0‚O1‚P2‚Q3‚R4‚S5‚T6‚U7‚V8‚W9‚X:�F;�G<�ƒ=��>�„?�H'
178   let tmp = tmp . '@�—A‚`B‚aC‚bD‚cE‚dF‚eG‚fH‚gI‚hJ‚iK‚jL‚kM‚lN‚mO‚n'
179   let tmp = tmp . 'P‚oQ‚pR‚qS‚rT‚sU‚tV‚uW‚vX‚wY‚xZ‚y[�m\��]�n^�O_�Q'
180   let tmp = tmp . '`�ea‚�b‚‚c‚ƒd‚„e‚…f‚†g‚‡h‚ˆi‚‰j‚Šk‚‹l‚Œm‚�n‚Žo‚�'
181   let tmp = tmp . 'p‚�q‚‘r‚’s‚“t‚”u‚•v‚–w‚—x‚˜y‚™z‚š{�o|�b}�p~�`'
182   let tmp = tmp . '¡�B¢�u£�v¤�A¦ƒ’§ƒ@¨ƒB©ƒDªƒF«ƒH¬ƒƒ­ƒ…®ƒ‡¯ƒb'
183   let tmp = tmp . '°�[±ƒA²ƒC³ƒE´ƒGµƒI¶ƒJ·ƒL¸ƒN¹ƒPºƒR»ƒT¼ƒV½ƒX¾ƒZ¿ƒ\'
184   let tmp = tmp . 'Àƒ^Áƒ`ƒcÃeăgŃiƃjǃkȃlɃmʃn˃q̃t̓w΃zσ}'
185   let tmp = tmp . 'Ѓ~у€Òƒ�Óƒ‚Ôƒ„Õƒ†Öƒˆ×ƒ‰ØƒŠÙƒ‹ÚƒŒÛƒ�܃�݃“Þ�Jß�K'
186   let tmp = tmp . '³Þƒ”¶ÞƒK·ÞƒM¸ÞƒO¹ÞƒQºÞƒS»ÞƒU¼ÞƒW½ÞƒY¾Þƒ[¿Þƒ]'
187   let tmp = tmp . 'ÀÞƒ_ÁÞƒaÂÞƒdÃÞƒfÄÞƒhÊÞƒoËÞƒrÌÞƒuÍÞƒxÎÞƒ{'
188   let tmp = tmp . 'Ê߃pË߃sÌ߃vÍ߃yÎ߃|'
189   let tmp = tmp . ''
190   let s:table_h2z = tmp
192   " ‘SŠp�¨”¼Šp•ÏŠ·ƒe�[ƒuƒ‹‚ð�ì�¬‚·‚é�B
193   let s:table_z2h = ''
194   let startcol = 0
195   let endcol = strlen(s:table_h2z)
196   let curcol = 0
197   let mx = '^\(' . s:match_hankaku . '\)\(.\)'
198   while curcol < endcol
199     let char = matchstr(s:table_h2z, mx, curcol)
200     let s:table_z2h = s:table_z2h . substitute(char, mx, '\2\1', '')
201     let curcol = curcol + strlen(char)
202   endwhile
203 endfunction
206 " ƒRƒ}ƒ“ƒh‚ÅŽw’肳‚ꂽ—̈æ‚ð•ÏŠ·‚·‚é
208 function! s:ToggleLineWise(operator) range
209   call s:Initialize()
211   let ncurline = a:firstline
212   while ncurline <= a:lastline
213     call setline(ncurline, s:ToggleLine(getline(ncurline), 0, 0, a:operator))
214     let ncurline = ncurline + 1
215   endwhile
216 endfunction
219 " —^‚¦‚ç‚ꂽ•¶Žš—ñ‚ð•ÏŠ·‚µ‚Ä•Ô‚·�B
221 function! s:ToggleLine(line, startcolumn, endcolumn, operator)
222   let endcol = ((a:endcolumn > 0 && a:endcolumn < strlen(a:line))? a:endcolumn : strlen(a:line)) - 1
223   let startcol = a:startcolumn > 0 ? a:startcolumn - 1: 0
224   let curcol = startcol
225   let newline = ''
226   while curcol <= endcol
227     let char = matchstr(a:line, s:match_character, curcol)
228     let newline = newline . s:{a:operator}Char(char)
229     let curcol = curcol + strlen(char)
230   endwhile
231   return strpart(a:line, 0, startcol) . newline . strpart(a:line, curcol)
232 endfunction
234 function! ToHankaku(str)
235   call s:Initialize()
236   return s:ToggleLine(a:str, 0, 0, 'Hankaku')
237 endfunction
239 function! ToZenkaku(str)
240   call s:Initialize()
241   return s:ToggleLine(a:str, 0, 0, 'Zenkaku')
242 endfunction
245 " “ü—Íchar‚ð‰Â”\‚È‚ç‚Δ¼Šp/‘SŠp•ÏŠ·‚µ‚Ä•Ô‚·�B•ÏŠ·‚Å‚«‚È‚¢�ê�‡‚Í‚»‚Ì‚Ü‚Ü�B
247 function! s:ToggleChar(char)
248   return (s:IsHankaku(a:char)) ? (s:ZenkakuChar(a:char)) : (s:HankakuChar(a:char))
249 endfunction
252 " “ü—Íchar‚ð‰Â”\‚È‚ç‚ΑSŠp‚É•ÏŠ·‚µ‚Ä•Ô‚·�B•ÏŠ·‚Å‚«‚È‚¢�ê�‡‚Í‚»‚Ì‚Ü‚Ü�B
254 function! s:ZenkakuChar(char)
255   if s:IsHankaku(a:char)
256     let pos = matchend(s:table_h2z, '\V\C' . escape(a:char, '\'))
257     if pos >= 0
258       return matchstr(s:table_h2z, '.', pos)
259     endif
260   endif
261   return a:char
262 endfunction
265 " “ü—Íchar‚ð‰Â”\‚È‚ç‚Δ¼Šp‚É•ÏŠ·‚µ‚Ä•Ô‚·�B•ÏŠ·‚Å‚«‚È‚¢�ê�‡‚Í‚»‚Ì‚Ü‚Ü�B
267 function! s:HankakuChar(char)
268   if !s:IsHankaku(a:char)
269     let pos = matchend(s:table_z2h, '\V\C' . escape(a:char, '\'))
270     if pos >= 0
271       return matchstr(s:table_z2h, s:match_hankaku, pos)
272     endif
273   endif
274   return a:char
275 endfunction
278 " —^‚¦‚ç‚ꂽ•¶Žš‚ª”¼Šp‚©‚Ç‚¤‚©‚ð”»’è‚·‚é�B
280 function! s:IsHankaku(char)
281   return a:char =~ '^' . s:match_hankaku . '$'
282 endfunction