2-ից 2 էջ

Re: Windows XP ի հայերեն տեղակայում

գրառումԱվելացվել է: 18 հոկ 2013, 21:18
Մյասնիկ
xp1645 -ը գրել է:Ես էս ֆորումում նոր եմ, կից թեմաները նայել եմ ու փորձեր արել, բայց ոչ մի նորմալ բան չի ստացվել: Էստեղի նշած րէդակտորներով համարյա անհնարին ա : Եթե հնարավոր ա մի քիչ կասեիք ինչը ոնց ա՞:
win17789 -ը գրել է:Իմ մոտ էլ ա նույն վիճակը:
zuk112233 -ը գրել է:Ես էլ կուզեի, բայց մանրամասն՝ դլյա ասոբը ...

Իրոք, ես նույնպես փորձեցի անտեղյակ աչքերով նայել բոլոր թեմաները եւ ինձ համար նույնպես պարզեցի մի շարք անհասկանալի պահեր: Ինչ վերաբերվում է խմբագրիչներին, իհարկե կարելի է նրացով նույնպես աշխատանքը իրականացնել: Սակայն նշեմ, որ ֆորումի օգտվողները օգտվում են նաեւ ուրիշ խմբագրիչներից, բայց այդ մասին թեմաներում չի նշվում, քանի որ նրանք այդ տեղեկություննրը միմյանց հետ փոխանակում են ԱՆ-երի միջոցով:
Ուստի, խնդրում եմ բոլոր օգտվողներին՝ կարեւվոր նշանակություն ունեցող տեղեկությունը անպայման նշել ֆորումում:

Re: Windows XP ի հայերեն տեղակայում

գրառումԱվելացվել է: 19 հոկ 2013, 09:20
zuk112233
Իսկ մանրամասնե՞րը:

Re: Windows XP ի հայերեն տեղակայում

գրառումԱվելացվել է: 20 հոկ 2013, 10:08
Մյասնիկ
Ինչպես արդեն մի քանի անգամ նշվել է Windows XP-ի տեղակայումը կատարվում է հիմնականում SETUPLDR.BIN եւ SMSS.EXE ծրագրերի միջոցով, որից հետո համակարգիչը վերաբեռնավորվում է, անցնում Windows XP միջավայր եւ տեղակայման ղեկավարումը տրվում է WINNTBBU.DLL (այս մասին հետո) ծրագրին:
Առաջին երկու SETUPLDR.BIN եւ SMSS.EXE ծրագրերը օգտագործում են համապատասխանաբար BOOTFONT.BIN եւ VGA866.fon ռուսական տառատեսակները: Ի տարբերություն ռուսերենի, հայերեն տառերը իրենց կոդային էջը չունեն, ինչի պատճառով մենք օգտվել ենք ռուսերենի կոդային էջերից՝ C_866.NLS C_1251.NLS: Վերոհիշյալ տառատեսակներում տառերի այսպէս ասած ռուսական պատկերները վերափոխվել է հայկականի (նայել այստեղ), որից հետո ծրագրերի էկրանին արտապատկերվող հաղորդումները թարգմանվել են անգլերենից կամ ռուսերենից հայերեն եւ հայերեն բառերը ռուսերեն տառերով խմբագրվել ծրագրերի մեջ՝ պահպանելով հաղորդումների չափը եւ արդյունքում նաեւ ծրագրի չափը, քանի որ ծրագրերի աշխատանքը սկսելիս ստուգվում է նրանց հսկիչ գումարը՝ խախտված լինելու դեպքում ծրագիրը կամ ունենում է վթարային ավարտ կամ ստանում ենք կապույտ էկրան՝ համապատասխան հաղորդումներով:
Բնականաբար հայերեն բառերը ռուսերեն տառերով մուտքագրելը շատ անհարմար կլիներ, այդ իսկ պատճառով փոքրիկ վերակոդավորման ծրագրով հայերեն գրվածքի հայերեն տառերը փոխարինվում են ռուսերենի, իսկ արտապատկերումը էկրանին լինում է հայերեն: Խմբագրման հեշտության համար կարելի է օգտվել Akelpad խմբագրիչից, այն Total Commander նիշքային կառավարչի մեջ կա (Հրանտ Օհանյանի հայերեն թարգմանությամբ կարելի է ներբեռնել այստեղից) :
Այսպես, Akelpad-ով SETUPLDR.BIN-ը խմբագրելիս ուշադրություն դարձրեք ներքեւի խնդրագոտուն՝ այն պետք է լինի` ovr | win | 866 (OEM - Russian) :
Գտնում ենք "Вас приветствует программа установки Windows" արտահայտությունը:

Image 1.png

Պատճենում / սոսնձում նոր նիշքում՝

Image 2.png

Թարգմանում / նշում , աջ կտտոց / скрипты / скрипты...
ընտրում ենք Ansihyru.js java-ով գրված վերակոդավորման սկրիպտից եւ թարգմանում հայերենից-ռուսերեն:
Ուշադրություն դարձրեք, որ գրվածքների չափերը չեն փոխվել:

Image 3.png


Ansihyru.js-անունով java-ով գրված վերակոդավորման սկրիպտը տեղադրում ենք :\Program Files\Total Commander\Plugins\exe\AkelFiles\Plugs\Scripts\ պանակում:
//// Convert keyboard layout or transliterate text.
//
// Arguments:
// -Type=Layout -Convert keyboard layout.
// -Type=Translit -Transliteration.
// -Direction=En->Ru -From English to Russian.
// -Direction=Ru->En -From Russian to English.
//
// Examples:
// -"Convert layout" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout -Direction=En->Ru`)
// -"Transliteration" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit -Direction=Ru->En`)
//
//
//// Исправляет раскладку клавиатуры или транслитерирует текст.
//
// Аргументы:
// -Type=Layout -Исправление раскладки клавиатуры.
// -Type=Translit -Транслитерация.
// -Direction=En->Ru -Из английского в русский.
// -Direction=Ru->En -Из русского в английский.
//
// Примеры:
// -"Исправить набор" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout -Direction=En->Ru`)
// -"Транслитерация" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit -Direction=Ru->En`)

//Arguments
var pType=AkelPad.GetArgValue("Type", "").toLowerCase();
var pDirection=AkelPad.GetArgValue("Direction", "").toLowerCase();

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var hInstanceDLL=AkelPad.GetInstanceDll();
var nSelStart;
var nSelEnd;
var pSelText;

if (hMainWnd)
{
//Show menu
if (pType == "")
{
var hWndHidden;
var hMenu;
var nItem;
var ptPoint=[];

if (hWndHidden=oSys.Call("user32::CreateWindowEx" + _TCHAR, 0, "Static", 0, 0x50000000 /*WS_VISIBLE|WS_CHILD*/, 0, 0, 0, 0, hMainWnd, 0, hInstanceDLL, 0))
{
oSys.Call("user32::SetFocus", hWndHidden);
GetCaretPos(hWndEdit, ptPoint);

if (hMenu=oSys.Call("user32::CreatePopupMenu"))
{
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 1, "Հայերեն->Ռուսերեն");
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 2, "Ռուսերեն->Հայերեն");
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 3, "Stroka->Строка");
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 4, "Строка->Stroka");
nItem=oSys.Call("user32::TrackPopupMenu", hMenu, 0x182 /*TPM_RETURNCMD|TPM_NONOTIFY|TPM_LEFTBUTTON|TPM_RIGHTBUTTON*/, ptPoint.x, ptPoint.y, 0, hWndHidden, 0);

if (nItem == 1)
{
pType="layout";
pDirection="en->ru";
}
else if (nItem == 2)
{
pType="layout";
pDirection="ru->en";
}
else if (nItem == 3)
{
pType="translit";
pDirection="en->ru";
}
else if (nItem == 4)
{
pType="translit";
pDirection="ru->en";
}
oSys.Call("user32::DestroyMenu", hMenu);
}
oSys.Call("user32::DestroyWindow", hWndHidden);
}
}
if (!pType) WScript.Quit();

//Get selection
nSelStart=AkelPad.GetSelStart();
nSelEnd=AkelPad.GetSelEnd();
if (nSelStart == nSelEnd)
AkelPad.SetSel(0, -1);
pSelText=AkelPad.GetSelText();

if (pType == "layout")
{
if (pDirection == "en->ru")
{
// Convert keyboard layout Hy->Ru
var pArraySource=new Array("փ", "շ", "ղ", "Թ", "թ", "Շ", "Ղ", "Փ", "չ", "ջ", "ռ", "Չ", "Ջ", "՜", "Յ", "Ձ", "Ժ", "ժ", "Ծ", "Օ", "ծ", "օ", "Ա", "ա", "Բ", "բ", "Գ", "գ", "Դ", "դ", "Է", "է", "Ֆ", "ֆ", "Ք", "ք", "Հ", "հ", "Ի", "ի", "Ճ", "ճ", "Կ", "կ", "Լ", "լ", "Մ", "մ", "Ն", "ն", "Ո", "ո", "Պ", "պ", "Խ", "խ", "Ր", "ր", "Ս", "ս", "Տ", "տ", "Ը", "ը", "Վ", "վ", "Ւ", "ւ", "Ց", "ց", "Ե", "ե", "Զ", "զ", "Ռ", "ձ", "յ", "՞", "՝");
var pArrayTarget=new Array("°", "ь", "ч", "И", "о", "Ц", "С", "в", "ю", "Ё", "ё", "Ш", "Ъ", "¤", "Ф", "Р", "Й", "п", "Н", "д", "у", "·", "А", "ж", "Б", "з", "В", "и", "Г", "й", "Ж", "м", "е", "~", "г", "^", "П", "х", "К", "р", "Т", "ш", "О", "ф", "Л", "с", "У", "щ", "Х", "ы", "Ч", "э", "Щ", "я", "М", "т", "Я", "ї", "Ь", "Є", "Ю", "Ї", "З", "н", "Э", "є", "б", "ў", "а", "Ў", "Д", "к", "Е", "л", "Ы", "ц", "ъ", "№", "`");

pSelText=ConvertLayout(pSelText, pArraySource, pArrayTarget);
}
else if (pDirection == "ru->en")
{
// Convert keyboard layout Ru->Hy
var pArraySource=new Array("°", "ь", "ч", "И", "о", "Ц", "С", "в", "ю", "Ё", "ё", "Ш", "Ъ", "¤", "Ф", "Р", "Й", "п", "Н", "д", "у", "·", "А", "ж", "Б", "з", "В", "и", "Г", "й", "Ж", "м", "е", "~", "г", "^", "П", "х", "К", "р", "Т", "ш", "О", "ф", "Л", "с", "У", "щ", "Х", "ы", "Ч", "э", "Щ", "я", "М", "т", "Я", "ї", "Ь", "Є", "Ю", "Ї", "З", "н", "Э", "є", "б", "ў", "а", "Ў", "Д", "к", "Е", "л", "Ы", "ц", "ъ", "№", "`");
var pArrayTarget=new Array("փ", "շ", "ղ", "Թ", "թ", "Շ", "Ղ", "Փ", "չ", "ջ", "ռ", "Չ", "Ջ", "՜", "Յ", "Ձ", "Ժ", "ժ", "Ծ", "Օ", "ծ", "օ", "Ա", "ա", "Բ", "բ", "Գ", "գ", "Դ", "դ", "Է", "է", "Ֆ", "ֆ", "Ք", "ք", "Հ", "հ", "Ի", "ի", "Ճ", "ճ", "Կ", "կ", "Լ", "լ", "Մ", "մ", "Ն", "ն", "Ո", "ո", "Պ", "պ", "Խ", "խ", "Ր", "ր", "Ս", "ս", "Տ", "տ", "Ը", "ը", "Վ", "վ", "Ւ", "ւ", "Ց", "ց", "Ե", "ե", "Զ", "զ", "Ռ", "ձ", "յ", "՞", "՝");

pSelText=ConvertLayout(pSelText, pArraySource, pArrayTarget);
}
}
else if (pType == "translit")
{
if (pDirection == "en->ru")
{
// Transliteration Latin->Cyrillic
var pArraySourceMulti=new Array("jo", "yo", "\xF6", "ch", "w", "shh", "sh", "je", "\xE4", "ju", "yu", "\xFC", "ja", "ya", "zh", "ts");
var pArrayTargetMulti=new Array("ё", "ё", "ё", "ч", "щ", "щ", "ш", "э", "э", "ю", "ю", "ю", "я", "я", "ж", "ц");
var pArraySourceSingle=new Array("c", "h", "x", "j", "'", "y", "#", "`", "a", "b", "v", "g", "d", "e", "z", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f");
var pArrayTargetSingle=new Array("ц", "х", "х", "й", "ь", "ы", "ъ", "ъ", "а", "б", "в", "г", "д", "е", "з", "и", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф");

pSelText=Transliterate(pSelText, pArraySourceMulti, pArrayTargetMulti);
pSelText=Transliterate(pSelText, pArraySourceSingle, pArrayTargetSingle);
}
else if (pDirection == "ru->en")
{
// Transliteration Cyrillic->Latin
var pArraySource=new Array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я");
var pArrayTarget=new Array("a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "ts", "ch", "sh", "shh", "`", "y", "'", "je", "ju", "ja");

pSelText=Transliterate(pSelText, pArraySource, pArrayTarget);
}
}
AkelPad.ReplaceSel(pSelText, true);
}


//Functions
function ConvertLayout(pText, pArraySource, pArrayTarget)
{
var oPattern;
var i;

for (i=0; i < pArraySource.length; ++i)
{
oPattern=new RegExp(PatternToString(pArraySource[i]), "g");
pText=pText.replace(oPattern, pArrayTarget[i]);
}
return pText;
}

function Transliterate(pText, pArraySource, pArrayTarget)
{
var oPattern;
var i;

for (i=0; i < pArraySource.length; ++i)
{
oPattern=new RegExp(PatternToString(pArraySource[i]), "g");
pText=pText.replace(oPattern, pArrayTarget[i]);
}
for (i=0; i < pArraySource.length; ++i)
{
oPattern=new RegExp(PatternToString(pArraySource[i]), "gi");
pText=pText.replace(oPattern, pArrayTarget[i].substr(0, 1).toUpperCase() + pArrayTarget[i].substr(1));
}
return pText;
}

function PatternToString(pPattern)
{
var pString="";
var pCharCode;
var i;

for (i=0; i < pPattern.length; ++i)
{
pCharCode=pPattern.charCodeAt(i).toString(16);
while (pCharCode.length < 4) pCharCode="0" + pCharCode;
pString=pString + "\\u" + pCharCode;
}
return pString;
}

function GetCaretPos(hWndEdit, ptPoint)
{
var lpPoint;

ptPoint.x=0;
ptPoint.y=0;

if (lpPoint=AkelPad.MemAlloc(8 /*sizeof(POINT)*/))
{
//Caret position
AkelPad.SendMessage(hWndEdit, 3190 /*AEM_GETCARETPOS*/, lpPoint, 0);
ptPoint.x=AkelPad.MemRead(lpPoint, 3 /*DT_DWORD*/);
ptPoint.y=AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpPoint);

//Caret bottom
ptPoint.y+=AkelPad.SendMessage(hWndEdit, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);

//In screen coordinates
ClientToScreen(hWndEdit, ptPoint);
}
}

function ClientToScreen(hWnd, ptPoint)
{
var lpPoint;

if (lpPoint=AkelPad.MemAlloc(8 /*sizeof(POINT)*/))
{
AkelPad.MemCopy(lpPoint, ptPoint.x, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpPoint + 4, ptPoint.y, 3 /*DT_DWORD*/);
oSys.Call("user32::ClientToScreen", hWnd, lpPoint);
ptPoint.x=AkelPad.MemRead(lpPoint, 3 /*DT_DWORD*/);
ptPoint.y=AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpPoint);
}
}


Պատճենում / սոսնձում նոր SETUPLD1.BINնիշքում՝

Image 4.png


Այսպես ամբողջ հաղորդումների գրվածքները:

Ինչ վերաբերվում է SMSS.EXE ծրագրին, այնտեղ հաղորդումների գրվածքների կոդավորումը 1200 (UTF-16LE) -ով է:
Համապատասխան ընտրանքը փոխում ենք 1200 (UTF-16LE) -ի եւ վարվում նույն կերպ՝ Ansihyru.js-փոխարեն օգտագործելով Keybhyru.js վերակոդավորման ծրագիրը:

//// Convert keyboard layout or transliterate text.
//
// Arguments:
// -Type=Layout -Convert keyboard layout.
// -Type=Translit -Transliteration.
// -Direction=En->Ru -From English to Russian.
// -Direction=Ru->En -From Russian to English.
//
// Examples:
// -"Convert layout" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout -Direction=En->Ru`)
// -"Transliteration" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit -Direction=Ru->En`)
//
//
//// Исправляет раскладку клавиатуры или транслитерирует текст.
//
// Аргументы:
// -Type=Layout -Исправление раскладки клавиатуры.
// -Type=Translit -Транслитерация.
// -Direction=En->Ru -Из английского в русский.
// -Direction=Ru->En -Из русского в английский.
//
// Примеры:
// -"Исправить набор" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout -Direction=En->Ru`)
// -"Транслитерация" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit -Direction=Ru->En`)

//Arguments
var pType=AkelPad.GetArgValue("Type", "").toLowerCase();
var pDirection=AkelPad.GetArgValue("Direction", "").toLowerCase();

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var hInstanceDLL=AkelPad.GetInstanceDll();
var nSelStart;
var nSelEnd;
var pSelText;

if (hMainWnd)
{
//Show menu
if (pType == "")
{
var hWndHidden;
var hMenu;
var nItem;
var ptPoint=[];

if (hWndHidden=oSys.Call("user32::CreateWindowEx" + _TCHAR, 0, "Static", 0, 0x50000000 /*WS_VISIBLE|WS_CHILD*/, 0, 0, 0, 0, hMainWnd, 0, hInstanceDLL, 0))
{
oSys.Call("user32::SetFocus", hWndHidden);
GetCaretPos(hWndEdit, ptPoint);

if (hMenu=oSys.Call("user32::CreatePopupMenu"))
{
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 1, "Հայերեն->Ռուսերեն");
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 2, "Ռուսերեն->Հայերեն");
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 3, "Stroka->Строка");
oSys.Call("user32::AppendMenu" + _TCHAR, hMenu, 0x0 /*MF_STRING*/, 4, "Строка->Stroka");
nItem=oSys.Call("user32::TrackPopupMenu", hMenu, 0x182 /*TPM_RETURNCMD|TPM_NONOTIFY|TPM_LEFTBUTTON|TPM_RIGHTBUTTON*/, ptPoint.x, ptPoint.y, 0, hWndHidden, 0);

if (nItem == 1)
{
pType="layout";
pDirection="en->ru";
}
else if (nItem == 2)
{
pType="layout";
pDirection="ru->en";
}
else if (nItem == 3)
{
pType="translit";
pDirection="en->ru";
}
else if (nItem == 4)
{
pType="translit";
pDirection="ru->en";
}
oSys.Call("user32::DestroyMenu", hMenu);
}
oSys.Call("user32::DestroyWindow", hWndHidden);
}
}
if (!pType) WScript.Quit();

//Get selection
nSelStart=AkelPad.GetSelStart();
nSelEnd=AkelPad.GetSelEnd();
if (nSelStart == nSelEnd)
AkelPad.SetSel(0, -1);
pSelText=AkelPad.GetSelText();

if (pType == "layout")
{
if (pDirection == "en->ru")
{
// Convert keyboard layout Hy->Ru
var pArraySource=new Array("փ", "շ", "ղ", "Թ", "թ", "Շ", "Ղ", "Փ", "չ", "ջ", "ռ", "Չ", "Ջ", "՜", "Յ", "Ձ", "Ժ", "ժ", "Ծ", "Օ", "ծ", "օ", "Ա", "ա", "Բ", "բ", "Գ", "գ", "Դ", "դ", "Է", "է", "Ֆ", "ֆ", "Ք", "ք", "Հ", "հ", "Ի", "ի", "Ճ", "ճ", "Կ", "կ", "Լ", "լ", "Մ", "մ", "Ն", "ն", "Ո", "ո", "Պ", "պ", "Խ", "խ", "Ր", "ր", "Ս", "ս", "Տ", "տ", "Ը", "ը", "Վ", "վ", "Ւ", "ւ", "Ց", "ց", "Ե", "ե", "Զ", "զ", "Ռ", "ձ", "յ", "՞", "՝");
var pArrayTarget=new Array("°", "ь", "ч", "И", "о", "Ц", "С", "в", "ю", "Ё", "ё", "Ш", "Ъ", "¤", "Ф", "Р", "Й", "п", "Н", "д", "у", "·", "А", "ж", "Б", "з", "В", "и", "Г", "й", "Ж", "м", "е", "√", "г", "∙", "П", "х", "К", "р", "Т", "ш", "О", "ф", "Л", "с", "У", "щ", "Х", "ы", "Ч", "э", "Щ", "я", "М", "т", "Я", "ї", "Ь", "Є", "Ю", "Ї", "З", "н", "Э", "є", "б", "ў", "а", "Ў", "Д", "к", "Е", "л", "Ы", "ц", "ъ", "№", "`");

pSelText=ConvertLayout(pSelText, pArraySource, pArrayTarget);
}
else if (pDirection == "ru->en")
{
// Convert keyboard layout Ru->Hy
var pArraySource=new Array("°", "ь", "ч", "И", "о", "Ц", "С", "в", "ю", "Ё", "ё", "Ш", "Ъ", "¤", "Ф", "Р", "Й", "п", "Н", "д", "у", "·", "А", "ж", "Б", "з", "В", "и", "Г", "й", "Ж", "м", "е", "√", "г", "∙", "П", "х", "К", "р", "Т", "ш", "О", "ф", "Л", "с", "У", "щ", "Х", "ы", "Ч", "э", "Щ", "я", "М", "т", "Я", "ї", "Ь", "Є", "Ю", "Ї", "З", "н", "Э", "є", "б", "ў", "а", "Ў", "Д", "к", "Е", "л", "Ы", "ц", "ъ", "№", "`");
var pArrayTarget=new Array("փ", "շ", "ղ", "Թ", "թ", "Շ", "Ղ", "Փ", "չ", "ջ", "ռ", "Չ", "Ջ", "՜", "Յ", "Ձ", "Ժ", "ժ", "Ծ", "Օ", "ծ", "օ", "Ա", "ա", "Բ", "բ", "Գ", "գ", "Դ", "դ", "Է", "է", "Ֆ", "ֆ", "Ք", "ք", "Հ", "հ", "Ի", "ի", "Ճ", "ճ", "Կ", "կ", "Լ", "լ", "Մ", "մ", "Ն", "ն", "Ո", "ո", "Պ", "պ", "Խ", "խ", "Ր", "ր", "Ս", "ս", "Տ", "տ", "Ը", "ը", "Վ", "վ", "Ւ", "ւ", "Ց", "ց", "Ե", "ե", "Զ", "զ", "Ռ", "ձ", "յ", "՞", "՝");

pSelText=ConvertLayout(pSelText, pArraySource, pArrayTarget);
}
}
else if (pType == "translit")
{
if (pDirection == "en->ru")
{
// Transliteration Latin->Cyrillic
var pArraySourceMulti=new Array("jo", "yo", "\xF6", "ch", "w", "shh", "sh", "je", "\xE4", "ju", "yu", "\xFC", "ja", "ya", "zh", "ts");
var pArrayTargetMulti=new Array("ё", "ё", "ё", "ч", "щ", "щ", "ш", "э", "э", "ю", "ю", "ю", "я", "я", "ж", "ц");
var pArraySourceSingle=new Array("c", "h", "x", "j", "'", "y", "#", "`", "a", "b", "v", "g", "d", "e", "z", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f");
var pArrayTargetSingle=new Array("ц", "х", "х", "й", "ь", "ы", "ъ", "ъ", "а", "б", "в", "г", "д", "е", "з", "и", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф");

pSelText=Transliterate(pSelText, pArraySourceMulti, pArrayTargetMulti);
pSelText=Transliterate(pSelText, pArraySourceSingle, pArrayTargetSingle);
}
else if (pDirection == "ru->en")
{
// Transliteration Cyrillic->Latin
var pArraySource=new Array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я");
var pArrayTarget=new Array("a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "ts", "ch", "sh", "shh", "`", "y", "'", "je", "ju", "ja");

pSelText=Transliterate(pSelText, pArraySource, pArrayTarget);
}
}
AkelPad.ReplaceSel(pSelText, true);
}


//Functions
function ConvertLayout(pText, pArraySource, pArrayTarget)
{
var oPattern;
var i;

for (i=0; i < pArraySource.length; ++i)
{
oPattern=new RegExp(PatternToString(pArraySource[i]), "g");
pText=pText.replace(oPattern, pArrayTarget[i]);
}
return pText;
}

function Transliterate(pText, pArraySource, pArrayTarget)
{
var oPattern;
var i;

for (i=0; i < pArraySource.length; ++i)
{
oPattern=new RegExp(PatternToString(pArraySource[i]), "g");
pText=pText.replace(oPattern, pArrayTarget[i]);
}
for (i=0; i < pArraySource.length; ++i)
{
oPattern=new RegExp(PatternToString(pArraySource[i]), "gi");
pText=pText.replace(oPattern, pArrayTarget[i].substr(0, 1).toUpperCase() + pArrayTarget[i].substr(1));
}
return pText;
}

function PatternToString(pPattern)
{
var pString="";
var pCharCode;
var i;

for (i=0; i < pPattern.length; ++i)
{
pCharCode=pPattern.charCodeAt(i).toString(16);
while (pCharCode.length < 4) pCharCode="0" + pCharCode;
pString=pString + "\\u" + pCharCode;
}
return pString;
}

function GetCaretPos(hWndEdit, ptPoint)
{
var lpPoint;

ptPoint.x=0;
ptPoint.y=0;

if (lpPoint=AkelPad.MemAlloc(8 /*sizeof(POINT)*/))
{
//Caret position
AkelPad.SendMessage(hWndEdit, 3190 /*AEM_GETCARETPOS*/, lpPoint, 0);
ptPoint.x=AkelPad.MemRead(lpPoint, 3 /*DT_DWORD*/);
ptPoint.y=AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpPoint);

//Caret bottom
ptPoint.y+=AkelPad.SendMessage(hWndEdit, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);

//In screen coordinates
ClientToScreen(hWndEdit, ptPoint);
}
}

function ClientToScreen(hWnd, ptPoint)
{
var lpPoint;

if (lpPoint=AkelPad.MemAlloc(8 /*sizeof(POINT)*/))
{
AkelPad.MemCopy(lpPoint, ptPoint.x, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpPoint + 4, ptPoint.y, 3 /*DT_DWORD*/);
oSys.Call("user32::ClientToScreen", hWnd, lpPoint);
ptPoint.x=AkelPad.MemRead(lpPoint, 3 /*DT_DWORD*/);
ptPoint.y=AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpPoint);
}
}

Re: Windows XP ի հայերեն տեղակայում

գրառումԱվելացվել է: 20 հոկ 2013, 13:32
zuk112233
Շատ, շատ ... շնորհակալություն ինձ մատչելի բացատրելու համար: Մի 60%-ով հասկացել եմ, հիմա կսկսեմ փորձերը: