ЗАДАЧА
Простенькое GUI приложение, позволяющее вручную определять кодировку текста.
РЕШЕНИЕ
Тексты встречаются в различных кодировках, в основном в KOI8-R и Cp1251. Для
текстов больших объёмов узнать какая именно из этих кодировок встретилась можно автоматически по соотношению заглавных и прописных букв. Оставшиеся "огрызки" от СAPS и Cp866 MODE фриков обрабатываются в Vim'е:
"run as:
"gvim -U /path/to/vimrc -n /path/to/file
"data and functions
let t:currenc=1
function LeapEncoding(i)
set modifiable
if a:i == 0
e ++enc=KOI8-R
set statusline=KOI8-R\ (k),\ Win-1251\ (w),\ UTF-8\ (u),\ DOS\ (d),\ ISO-8859-5\ (i),\ Leap\ (Space),\ Save\ (Enter),\ Quit\ silent\ (Ctrl+q).\ [Now\ KOI8-R]
elseif a:i == 1
e ++enc=Cp1251
set statusline=KOI8-R\ (k),\ Win-1251\ (w),\ UTF-8\ (u),\ DOS\ (d),\ ISO-8859-5\ (i),\ Leap\ (Space),\ Save\ (Enter),\ Quit\ silent\ (Ctrl+q).\ [Now\ Win-1251]
elseif a:i == 2
e ++enc=UTF-8
set statusline=KOI8-R\ (k),\ Win-1251\ (w),\ UTF-8\ (u),\ DOS\ (d),\ ISO-8859-5\ (i),\ Leap\ (Space),\ Save\ (Enter),\ Quit\ silent\ (Ctrl+q).\ [Now\ UTF-8]
elseif a:i == 3
e ++enc=Cp866
set statusline=KOI8-R\ (k),\ Win-1251\ (w),\ UTF-8\ (u),\ DOS\ (d),\ ISO-8859-5\ (i),\ Leap\ (Space),\ Save\ (Enter),\ Quit\ silent\ (Ctrl+q).\ [Now\ Cp866]
elseif a:i == 4
e ++enc=ISO-8859-5
set statusline=KOI8-R\ (k),\ Win-1251\ (w),\ UTF-8\ (u),\ DOS\ (d),\ ISO-8859-5\ (i),\ Leap\ (Space),\ Save\ (Enter),\ Quit\ silent\ (Ctrl+q).\ [Now\ ISO-8859-5]
endif
set laststatus=2
set modifiable!
endfunction
"guard
set modifiable!
"remove toolbar
set guioptions-=T
"remove menu
aunmenu *
let no_buffers_menu=1
"make menu
menu File.Save <ESC>:echo "save"<CR>:exit<CR>
menu File.Quit <ESC>:echo "quit"<CR>:exit<CR>
menu Encoding.KOI8-R <ESC>:let t:currenc=0<CR>:call LeapEncoding(t:currenc)<CR>
menu Encoding.Win-1251 <ESC>:let t:currenc=1<CR>:call LeapEncoding(t:currenc)<CR>
menu Encoding.UTF-8 <ESC>:let t:currenc=2<CR>:call LeapEncoding(t:currenc)<CR>
menu Encoding.DOS(866) <ESC>:let t:currenc=3<CR>:call LeapEncoding(t:currenc)<CR>
menu Encoding.ISO-8859-5 <ESC>:let t:currenc=4<CR>:call LeapEncoding(t:currenc)<CR>
menu Help.what_the_duck?! <ESC>:echo "== Help."<CR>
"make status line with hints
call LeapEncoding(t:currenc)
"map keyboard actions
map k <ESC>:let t:currenc=0<CR>:call LeapEncoding(t:currenc)<CR>
map w <ESC>:let t:currenc=1<CR>:call LeapEncoding(t:currenc)<CR>
map u <ESC>:let t:currenc=2<CR>:call LeapEncoding(t:currenc)<CR>
map d <ESC>:let t:currenc=3<CR>:call LeapEncoding(t:currenc)<CR>
map i <ESC>:let t:currenc=4<CR>:call LeapEncoding(t:currenc)<CR>
map <SPACE> <ESC>:let t:currenc=(t:currenc+1)%5<CR>:call LeapEncoding(t:currenc)<CR>
map <CR> <ESC>:echo "save"<CR>
map <C-q> <ESC>:echo "quit"<CR>
"highlight russian chars
match Normal /[\.,\?]/
2match Comment /\w/"/[A-Za-z0-9"%=\+-\*^%&$#@!~`{}\[\]\(\)]/
3match Comment /[><\/"#%@\[\]\(\)=]/
ВЫВОД
По возможностям за Eclips'ом, может быть конечно, не угнаться, но свои достоинства тоже есть.
БОНУС
Для расцветки vimrc использовался: mensus
понедельник, 26 мая 2008 г.
День девятый (Vim RCP)
на
13:07
Подписаться на:
Комментарии к сообщению (Atom)

Комментариев нет:
Отправить комментарий