Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » SciTE - Open Source Text Editor for Windows & Linux

Модерирует : gyra, Maz

Widok (23-11-2010 11:23): Лимит страниц. Продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
--[[--------------------------------------------------
CodePage.lua
Authors: YuriNB, VladVRO, mozers™
Version: 2.1
------------------------------------------------------
Гибрид 2х скриптов:
win1251 to cp866 keyboard mapper (YuriNB icq#2614215)
 Переключатель кодировки текущего ввода и отображения win1251/dos866
 Одновременно переключается кодировка окна консоли
и
codepage.lua (VladVRO)
 Показ текущей кодировки в статусной строке.
 
Кроме того, скрипт пытается отличить кодировку cp866 от win1251 при открытии файла или при переключении на него.
Если это удается, то происходит автоматическое переключение отображения и ввода.
------------------------------------------------------
Connection:
 In file SciTEStartup.lua add a line:
    dofile (props["SciteDefaultHome"].."\\tools\\CodePage.lua")
 Set in a file .properties:
    command.name.29.*=DOS Mode (cp866)
    command.29.*=change_codepage_ru
    command.checked.29.*=$(code.page.866)
    command.mode.29.*=subsystem:lua,savebefore:no
--]]--------------------------------------------------
 
local function UpdateToolBar() -- лучшего способа обновить тулбар не нашел
   
scite.MenuCommand(IDM_TOGGLEOUTPUT)
   
scite.MenuCommand(IDM_TOGGLEOUTPUT)
end
 
local function
UpdateStatusCodePage(mode)
   
props["code.page.866"]='0'
   
if mode == IDM_ENCODING_UCS2BE then
       
props["code.page.name"]='UCS-2 BE'
   
elseif mode == IDM_ENCODING_UCS2LE then
       
props["code.page.name"]='UCS-2 LE'
   
elseif mode == IDM_ENCODING_UTF8 then
       
props["code.page.name"]='UTF-8 BOM'
   
elseif mode == IDM_ENCODING_UCOOKIE then
       
props["code.page.name"]='UTF-8'
   
else
        if
props["character.set"]=='255' then
           
props["code.page.name"]='DOS-866'
           
props["code.page.866"]='1'
       
elseif props["character.set"]=='204' then
           
props["code.page.name"]='WIN-1251'
       
elseif tonumber(props["character.set"])==0 then
           
props["code.page.name"]='CP1252'
       
elseif props["character.set"]=='238' then
           
props["code.page.name"]='CP1250'
       
elseif props["character.set"]=='161' then
           
props["code.page.name"]='CP1253'
       
elseif props["character.set"]=='162' then
           
props["code.page.name"]='CP1254'
       
else
           
props["code.page.name"]='???'
       
end
    end
   
UpdateToolBar()
   
scite.UpdateStatusBar()
end
 
local function
CharsetDetect(mode)
   
function CharsetDOS()
       
return editor:findtext("[\128-\191][\128-\191][\128-\191]", SCFIND_REGEXP, 0)
   
end
    if
mode == IDM_ENCODING_DEFAULT then
        if
(props["character.set"]=='204' and CharsetDOS())
           
or (props["character.set"]=='255' and not CharsetDOS()) then
           
change_codepage_ru()
       
end
    end
end
 
-- Добавляем свой обработчик события OnSwitchFile
local old_OnSwitchFile = OnSwitchFile
function OnSwitchFile(file)
   
local result
    if old_OnSwitchFile then result = old_OnSwitchFile(file) end
   
CharsetDetect(tonumber(props["editor.unicode.mode"]))
   
UpdateStatusCodePage(tonumber(props["editor.unicode.mode"]))
   
return result
end
 
-- Добавляем свой обработчик события OnOpen
local old_OnOpen = OnOpen
function OnOpen(file)
   
local result
    if old_OnOpen then result = old_OnOpen(file) end
   
CharsetDetect(tonumber(props["editor.unicode.mode"]))
   
UpdateStatusCodePage(tonumber(props["editor.unicode.mode"]))
   
return result
end
 
-- Добавляем свой обработчик события OnMenuCommand
local old_OnMenuCommand = OnMenuCommand
function OnMenuCommand(cmd, source)
   
local result
    if old_OnMenuCommand then result = old_OnMenuCommand(cmd, source) end
    if
cmd > 149 and cmd < 155 then -- IDM_ENCODING_DEFAULT, IDM_ENCODING_UCS2BE, IDM_ENCODING_UCS2LE, IDM_ENCODING_UTF8, IDM_ENCODING_UCOOKIE
       
UpdateStatusCodePage(cmd)
   
end
    return
result
end
 
-------------------------------------------------------------
-- win1251 to cp866 keyboard mapper
-------------------------------------------------------------
 
function change_codepage_ru()
   
scite.MenuCommand(IDM_ENCODING_DEFAULT)
   
if props["character.set"]=='255' then
       
props["character.set"]='204'
   
else
       
props["character.set"]='255'
   
end
   
scite.Perform('reloadproperties:')
   
UpdateStatusCodePage()
end
 
local
charset1251to866 =
{
[
168]=240, --Ё
[184]=241, --ё
[185]=252, --№
[192]=128,[193]=129,[194]=130,[195]=131,[196]=132,
[
197]=133,[198]=134,[199]=135,[200]=136,[201]=137,
[
202]=138,[203]=139,[204]=140,[205]=141,[206]=142,
[
207]=143,[208]=144,[209]=145,[210]=146,[211]=147,
[
212]=148,[213]=149,[214]=150,[215]=151,[216]=152,
[
217]=153,[218]=154,[219]=155,[220]=156,[221]=157,
[
222]=158,[223]=159,[224]=160,[225]=161,[226]=162,
[
227]=163,[228]=164,[229]=165,[230]=166,[231]=167,
[
232]=168,[233]=169,[234]=170,[235]=171,[236]=172,
[
237]=173,[238]=174,[239]=175,[240]=224,[241]=225,
[
242]=226,[243]=227,[244]=228,[245]=229,[246]=230,
[
247]=231,[248]=232,[249]=233,[250]=234,[251]=235,
[
252]=236,[253]=237,[254]=238,[255]=239
}
 
local function Win2DOS(charAdded)
   
local a1=string.byte(charAdded)
   
if charset1251to866[a1] ~= nil then
        local
pos = editor.CurrentPos
       
editor:SetSel(pos, pos - 1)
       
editor:ReplaceSel( string.char( charset1251to866[a1] ) )
   
end
end
 
-- Добавляем свой обработчик события OnChar
local old_OnChar = OnChar
function OnChar(char)
   
local result
    if old_OnChar then result = old_OnChar(char) end
    if
props["character.set"]=='255' then
       
Win2DOS(char)
   
end
    return
result
end

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 17:27 20-09-2009 | Исправлено: mozers, 09:00 21-09-2009
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » SciTE - Open Source Text Editor for Windows & Linux
Widok (23-11-2010 11:23): Лимит страниц. Продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru