AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts discussion (2)
Goto page Previous  1, 2, 3 ... 50, 51, 52 ... 94, 95, 96  Next
 
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Andrey_A_A



Joined: 03 Jun 2010
Posts: 662
Location: Сочи, Хоста

PostPosted: Sat Sep 08, 2012 8:01 pm    Post subject: Reply with quote

KDJ
спасибо, буду разбираться, особенно порадовало диалоговое окно

Скрин

Very Happy
Back to top
View user's profile Send private message Send e-mail Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 3076
Location: Киев, Русь

PostPosted: Sat Sep 08, 2012 9:08 pm    Post subject: Reply with quote

Instructor
Как подключаемая библиотека это здорово!
Спасибо.

Добавлено:
Большая просьба, - сделайте пожалуйста чтобы структура была такого вида: [идентификатор, MF_NORMAL, текст пункта меню] - идентификатор ведь обязателен, потому и спереди, а текст иногда может быть опциональным, т.о. количество элементов структуры м.б. меньше (в некоторых случаях можно это анализировать).
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 6225

PostPosted: Sun Sep 09, 2012 1:53 pm    Post subject: Reply with quote

VladSh
Порядок такой: ["Текст", MF_NORMAL, ПользовательскиеДанные1, ПользовательскиеДанные2, ...]. В пользовательских данных может передаваться идентификатор, либо что-то другое, либо не указываться. Т.е. как раз таки параметры после MF_* не влияют на работоспособность функции ShowMenu, поэтому могут быть опущены.
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 3076
Location: Киев, Русь

PostPosted: Sun Sep 09, 2012 2:53 pm    Post subject: Reply with quote

Instructor
То есть идентификатор необязателен? А если надо будет установить/снять галку у определённого пункта меню, то как анализировать, по тексту? Насколько помню, всегда уникальный идентификатор был самым важным, а к нему уже опции.
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 6225

PostPosted: Sun Sep 09, 2012 4:09 pm    Post subject: Reply with quote

VladSh
Можно по индексу в массиве, можно по тексту, можно через пользовательские данные.
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 3076
Location: Киев, Русь

PostPosted: Mon Sep 10, 2012 2:02 pm    Post subject: Reply with quote

Andrey_A_A wrote:
скрипт ConsoleRun.js ведёт себя странно, либо опрокидывает AkelPad, либо подвисает вся система
Исправлено.
• упразднены ShowMenuCommon.js и ShowMenuAlt.js, переработан ShowMenuEx.js (теперь он использует ShowMenu.js из дистрибутива Scripts-плагина);
• также изменены: ExecuteScriptMenu.js и XMLGetAttrValues.js.
Переработан CaretSelect.js.
Back to top
View user's profile Send private message Visit poster's website
F. Phoenix



Joined: 24 Dec 2011
Posts: 175

PostPosted: Mon Sep 10, 2012 2:41 pm    Post subject: Reply with quote

F. Phoenix wrote:
Набросок: CoderFunctions.js

Основываясь на примерах документации, дополнил:
CoderFunctions.js
Code:

//*** СИНТАКСИЧЕСКАЯ ТЕМА ***\\

// Устанавливает синтаксическую тему по указанному расширению.
function SetSyntax(pAlias)
{
   AkelPad.Call("Coder::Settings", 1, pAlias);
}

// Возвращает имя используемого coder-файла.
function GetSyntaxFile(hWndEdit)
{
   if (arguments.length == 0) hWndEdit = AkelPad.GetEditWnd();
   if (!hWndEdit) return "";
   
   var pFile="", lpFile;
   if (lpFile=AkelPad.MemAlloc(256))
   {
      AkelPad.Call("Coder::Settings", 16, hWndEdit, lpFile, 256);
      pFile=AkelPad.MemRead(lpFile, 1  /*DT_UNICODE*/);
      AkelPad.MemFree(lpFile);
   }
   return pFile;
}

// Возвращает псевдоним синтаксического файла, установленного вручную
// (расширение, по которому тот был установлен).
// Если же тема была определена автоматически, возвращает имя документа.
function GetSyntaxAlias()
{
   var hWndEdit = AkelPad.GetEditWnd(), hDocEdit = AkelPad.GetEditDoc();
   if (!hWndEdit || !hDocEdit) return "";
   
   var pAlias="", lpAlias;
   if (lpAlias=AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/))
   {
      AkelPad.CallW("Coder::Settings", 18 /*DLLA_CODER_GETALIAS*/, hWndEdit, hDocEdit, lpAlias, 0);
      pAlias=AkelPad.MemRead(lpAlias, 1 /*DT_UNICODE*/);
      AkelPad.MemFree(lpAlias);
   }
   return pAlias;
}

// Проверяет ассоциацию текущей синтаксической темы с указанным расширением.
function CheckSyntaxExtension(pAlias)
{
   var lpActive;
   var bActive=false;

   if (lpActive=AkelPad.MemAlloc(4 /*sizeof(BOOL)*/))
   {
      AkelPad.CallW("Coder::Settings", 12, pAlias, lpActive);
      bActive=AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
      AkelPad.MemFree(lpActive);
   }
   return bActive;
}

// Возвращает массив расширений текущей синтаксической темы.
function GetSyntaxExtensions(hWndEdit)
{
   var pText = AkelPad.ReadFile(AkelPad.GetAkelDir(4) + "\\Coder\\" + GetSyntaxFile(hWndEdit), 0xD).replace(/\r\n?/g, "\n");
   var mSection = pText.match(/^Files:\s*?\n((?:(?:\*\..*?|;.*?|\s*?)\n)+)/m);
   var mResult = mSection[1].match(/^\*\.\w+/gmi);
   for (var i = 0; i < mResult.length; i++) mResult[i] = mResult[i].substr(1);
   return mResult;
}


//*** ЦВЕТОВАЯ ТЕМА ***\\

// Устанавливает цветовую тему по имени.
function SetColorTheme(pName)
{
   AkelPad.CallW("Coder::Settings", 5, pName);
}

// Возвращает имя активной цветовой темы.
function GetColorTheme(hWndEdit)
{
   var pVarTheme="";
   var lpVarTheme;

   if (lpVarTheme=AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/))
   {
      AkelPad.CallW("Coder::Settings", 20, hWndEdit, lpVarTheme, 256);
      pVarTheme=AkelPad.MemRead(lpVarTheme, 1 /*DT_UNICODE*/);
      AkelPad.MemFree(lpVarTheme);
   }
   return pVarTheme;
}

// Проверяет активность цветовой темы с указанным именем.
function CheckColorTheme(pName)
{
   var lpActive;
   var bActive=false;

   if (lpActive=AkelPad.MemAlloc(4 /*sizeof(BOOL)*/))
   {
      AkelPad.CallW("Coder::Settings", 14, pName, lpActive);
      bActive=AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
      AkelPad.MemFree(lpActive);
   }
   return bActive;
}


Как я и предполагал, со всеми расширениями темы вполне работает 12й вызов. В функции 18го же hWndEdit бесполезен, т.к. нужен еще hDocEdit, а функция GetEditDoc() всегда основывается на активном документа... т.е. как я понимаю, тут либо добавлять эти параметры исключительно в целях опцтимизации (чтоб не запрашивать у Акела один и тот же дескриптор по нескольку раз), либо как-то дополнить, чтоб можно было получить дескриптор документа на основе указанного окна.
Back to top
View user's profile Send private message
DrakonHaSh



Joined: 19 Mar 2011
Posts: 122

PostPosted: Tue Sep 11, 2012 9:10 am    Post subject: Reply with quote

Instructor wrote:
Export highlighted text to HTML or BBCode.

CodePoster.js
Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13021#13021
// Version v1.9
//
//
//// Export highlighted text to HTML or BBCode.
//
// Arguments:
// -Format="html"                     -Output highlighting in HTML format (default is "BBCode").
// -Enclose="[code]${result}[/code]"  -Enclose result string (default is "<pre>${result}</pre>").
// -XHTML=false                       -use "<br>" instead of "<br/>" (default is true).
// -Strict=true                       -use "<span style=" instead of "<font" (default is false).
// -Info=false                        -Don't add link to CodePoster.js script (default is true).
//
// Usage:
// Call("Scripts::Main", 1, "CodePoster.js", `-Format="BBCode" -Enclose="[code]${result}[/code]"`)

//Arguments
var pFormat=AkelPad.GetArgValue("Format", "BBCode");
var pEnclose=AkelPad.GetArgValue("Enclose", "<pre>${result}</pre>");
var bXHTML=AkelPad.GetArgValue("XHTML", true);
var bStrict=AkelPad.GetArgValue("Strict", false);
var bInfo=AkelPad.GetArgValue("Info", true);

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var dwSystemTextColor=oSys.Call("user32::GetSysColor", 8 /*COLOR_WINDOWTEXT*/);
var lpGH;
var lpCallback;
var pText="";
var pColorBegin;
var pColorEnd;
var lpMemText=0;
var nMemTextBytes;
var bBBCode;
var pScriptURL="";

if (hWndEdit)
{
  if (pFormat.toLowerCase() == "html")
    bBBCode=false;
  else
    bBBCode=true;

  if (bInfo)
    pScriptURL="http://akelpad.sourceforge.net/forum/viewtopic.php?p=13021#13021";

  if (lpGH=AkelPad.MemAlloc(_X64?80:40 /*sizeof(AEGETHIGHLIGHT)*/))
  {
    if (lpCallback=oSys.RegisterCallback("GetHighLightCallback"))
    {
      AkelPad.MemCopy(lpGH + (_X64?16:8) /*offsetof(AEGETHIGHLIGHT, lpCallback)*/, lpCallback, 2 /*DT_QWORD*/);
      AkelPad.MemCopy(lpGH + (_X64?72:36) /*offsetof(AEGETHIGHLIGHT, dwFlags)*/, 0x7 /*AEGHF_NOSELECTION|AEGHF_NOACTIVELINETEXT|AEGHF_NOACTIVELINEBK*/, 3 /*DT_DWORD*/);

      if (!AkelPad.SendMessage(hWndEdit, 3123 /*AEM_EXGETSEL*/, lpGH + (_X64?24:12) /*offsetof(AEGETHIGHLIGHT, crText.ciMin)*/, lpGH + (_X64?48:24) /*offsetof(AEGETHIGHLIGHT, crText.ciMax)*/))
      {
        AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 1 /*AEGI_FIRSTCHAR*/, lpGH + (_X64?24:12) /*offsetof(AEGETHIGHLIGHT, crText.ciMin)*/);
        AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 2 /*AEGI_LASTCHAR*/, lpGH + (_X64?48:24) /*offsetof(AEGETHIGHLIGHT, crText.ciMax)*/);
      }

      //Calculate nMemTextBytes
      nMemTextBytes=0;
      AkelPad.SendMessage(hWndEdit, 3595 /*AEM_HLGETHIGHLIGHT*/, 0, lpGH);

      if (lpMemText=AkelPad.MemAlloc(nMemTextBytes + _TSIZE))
      {
        //Fill lpMemText
        nMemTextBytes=0;
        AkelPad.SendMessage(hWndEdit, 3595 /*AEM_HLGETHIGHLIGHT*/, 0, lpGH);

        pText=AkelPad.MemRead(lpMemText, _TSTR);
        AkelPad.MemFree(lpMemText);
      }
      oSys.UnregisterCallback(lpCallback);
    }
    AkelPad.MemFree(lpGH);
  }

  if (pText)
  {
    pText=pEnclose.replace(/\$\{result\}/, pText);
    if (bInfo)
    {
      if (bBBCode)
        pText+="[color=Purple][size=1]* " + GetLangString(0) + " [URL=" + pScriptURL + "]CodePoster.js[/URL] " + GetLangString(1) + "[/size][/color]\r";
      else
      {
        if (bStrict)
          pText+="\r<span style=\"color:Purple; font-size:xx-small;\">* " + GetLangString(0) + " <a href=\"" + pScriptURL + "\">CodePoster.js</a> " + GetLangString(1) + "</span>\r";
        else
          pText+="\r<font color=\"Purple\" size=\"1\">* " + GetLangString(0) + " <a href=\"" + pScriptURL + "\">CodePoster.js</a> " + GetLangString(1) + "</font>\r";
      }
    }
    AkelPad.SetClipboardText(pText);
    AkelPad.MessageBox(hMainWnd, GetLangString(2), WScript.ScriptName, 64 /*MB_ICONINFORMATION*/);
  }
}

function GetHighLightCallback(dwCookie, crAkelRange, crRichRange, hlp)
{
  var nRangeStart=AkelPad.MemRead(crRichRange + 0 /*offsetof(CHARRANGE64, crRichRange.cpMin)*/, 2 /*DT_QWORD*/);
  var nRangeEnd=AkelPad.MemRead(crRichRange + (_X64?8:4) /*offsetof(CHARRANGE64, crRichRange.cpMax)*/, 2 /*DT_QWORD*/);
  var pRangeText;
  var dwFontStyle=AkelPad.MemRead(hlp + (_X64?16:16) /*offsetof(AEHLPAINT, dwFontStyle)*/, 3 /*DT_DWORD*/);
  var dwActiveTextColor=AkelPad.MemRead(hlp + (_X64?8:8) /*offsetof(AEHLPAINT, dwActiveText)*/, 3 /*DT_DWORD*/);
  var dwPaintType=AkelPad.MemRead(hlp + (_X64?20:20) /*offsetof(AEHLPAINT, dwPaintType)*/, 3 /*DT_DWORD*/);

  if (pRangeText=AkelPad.GetTextRange(nRangeStart, nRangeEnd))
  {
    if (!bBBCode)
    {
      //pRangeText=pRangeText.replace(/[ ]{2,}/g, "&nbsp;");
      pRangeText=pRangeText.replace(/&/g, "&amp;");
      pRangeText=pRangeText.replace(/</g, "&lt;");
      pRangeText=pRangeText.replace(/>/g, "&gt;");
      pRangeText=pRangeText.replace(/"/g, "&quot;");
    }

    if (dwPaintType & 0x80 /*AEHPT_LINK*/)
    {
      if (bBBCode)
        pRangeText="[url=" + pRangeText + "]" + pRangeText + "[/url]";
      else
        pRangeText="<a href=\"" + pRangeText + "\">" + pRangeText + "</a>";
    }
    if (dwFontStyle == 2 /*AEHLS_FONTBOLD*/)
    {
      if (bBBCode)
        pRangeText="[b]" + pRangeText + "[/b]";
      else
        pRangeText="<b>" + pRangeText + "</b>";
    }
    else if (dwFontStyle == 3 /*AEHLS_FONTITALIC*/)
    {
      if (bBBCode)
        pRangeText="[i]" + pRangeText + "[/i]";
      else
        pRangeText="<i>" + pRangeText + "</i>";
    }
    else if (dwFontStyle == 4 /*AEHLS_FONTBOLDITALIC*/)
    {
      if (bBBCode)
        pRangeText="[b][i]" + pRangeText + "[/i][/b]";
      else
        pRangeText="<b><i>" + pRangeText + "</i></b>";
    }

    if (dwSystemTextColor != dwActiveTextColor)
    {
      if (bBBCode)
        nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "[color=#" + rgb2hex(dwActiveTextColor) + "]" + pRangeText + "[/color]", _TSTR) - _TSIZE;
      else
      {
        if (bStrict)
          nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "<span style=\"color:#" + rgb2hex(dwActiveTextColor) + ";\">" + pRangeText + "</span>", _TSTR) - _TSIZE;
        else
          nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "<font color=\"#" + rgb2hex(dwActiveTextColor) + "\">" + pRangeText + "</font>", _TSTR) - _TSIZE;
      }
    }
    else nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, pRangeText, _TSTR) - _TSIZE;
  }

  if (IsLastCharInLine(crAkelRange + (_X64?24:12) /*offsetof(AECHARRANGE, ciMax)*/) && IndexCompare(crAkelRange + (_X64?24:12) /*offsetof(AECHARRANGE, ciMax)*/, lpGH + (_X64?48:24) /*offsetof(AEGETHIGHLIGHT, crText.ciMax)*/))
  {
    if (bBBCode)
      nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "\r", _TSTR) - _TSIZE;
    else
      nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "\r" + (bXHTML?"<br/>":"<br>"), _TSTR) - _TSIZE;
  }
  return 0;
}

function rgb2hex(dwColor)
{
  var pHexColor;

  pHexColor=dwColor.toString(16)
  while (pHexColor.length < 6) pHexColor="0" + pHexColor;
  return pHexColor.substr(4, 2) + pHexColor.substr(2, 2) + pHexColor.substr(0, 2);
}

function IsLastCharInLine(lpCharIndex)
{
  var nCharInLine=AkelPad.MemRead(lpCharIndex + (_X64?16:8) /*offsetof(AECHARINDEX, nCharInLine)*/, 3 /*DT_DWORD*/);
  var lpLine=AkelPad.MemRead(lpCharIndex + (_X64?8:4) /*offsetof(AECHARINDEX, lpLine)*/, 2 /*DT_QWORD*/);
  var nLineLen=AkelPad.MemRead(lpLine + (_X64?24:12) /*offsetof(AELINEDATA, nLineLen)*/, 3 /*DT_DWORD*/);
  var nLineBreak=AkelPad.MemRead(lpLine + (_X64?28:16) /*offsetof(AELINEDATA, nLineBreak)*/, 3 /*DT_DWORD*/);

  if (nCharInLine == nLineLen && nLineBreak != 9 /*AELB_WRAP*/)
    return true;
  return false;
}

function IndexCompare(lpCharIndex1, lpCharIndex2)
{
  var nCharInLine1=AkelPad.MemRead(lpCharIndex1 + (_X64?16:8) /*offsetof(AECHARINDEX, nCharInLine)*/, 3 /*DT_DWORD*/);
  var nLine1=AkelPad.MemRead(lpCharIndex1 + 0 /*offsetof(AECHARINDEX, nLine)*/, 3 /*DT_DWORD*/);
  var nCharInLine2=AkelPad.MemRead(lpCharIndex2 + (_X64?16:8) /*offsetof(AECHARINDEX, nCharInLine)*/, 3 /*DT_DWORD*/);
  var nLine2=AkelPad.MemRead(lpCharIndex2 + 0 /*offsetof(AECHARINDEX, nLine)*/, 3 /*DT_DWORD*/);

  if (nLine1 == nLine2 && nCharInLine1 == nCharInLine2)
    return 0;
  if (nLine1 < nLine2 || (nLine1 == nLine2 && nCharInLine1 < nCharInLine2))
    return -1;
  return 1;
}

function GetLangString(nStringID)
{
  var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);

  if (nLangID == 0x19) //LANG_RUSSIAN
  {
    if (nStringID == 0)
      return "\u041F\u043E\u0434\u0441\u0432\u0435\u0447\u0435\u043D\u043E\u0020\u0441\u0020\u043F\u043E\u043C\u043E\u0449\u044C\u044E\u0020\u0441\u043A\u0440\u0438\u043F\u0442\u0430";
    if (nStringID == 1)
      return "\u0434\u043B\u044F AkelPad";
    if (nStringID == 2)
      return "\u041A\u043E\u0434\u0020\u043F\u043E\u043C\u0435\u0449\u0435\u043D\u0020\u0432\u0020\u0431\u0443\u0444\u0435\u0440\u0020\u043E\u0431\u043C\u0435\u043D\u0430\u002E";
  }
  else
  {
    if (nStringID == 0)
      return "Highlighted with script";
    if (nStringID == 1)
      return "for AkelPad";
    if (nStringID == 2)
      return "Code has been placed in clipboard.";
  }
  return "";
}


Example


Code:

<?php
    $scan_subdirs = isset($_POST['subdirs']) ? $_POST['subdirs'] : false;
    //$scan_subdirs = isset($_POST['subdirs']) ? $_POST['subdirs'] : false;
?>

=>
вызываем CodePoster.js из Scripts по Запустить] =>
<pre><?php
$scan_subdirs = isset($_POST['subdirs']) ? $_POST['subdirs'] : false;
//$scan_subdirs = isset(<pre>${result}</pre>POST['subdirs']) ? <pre>${result}</pre>POST['subdirs'] : false;
?>
</pre>* Подсвечено с помощью скрипта CodePoster.js для AkelPad

$_ в закомментированной строке превратилось в <pre>${result}</pre>
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 3076
Location: Киев, Русь

PostPosted: Tue Sep 11, 2012 11:32 am    Post subject: Reply with quote

Infocatcher wrote:
Нечто вроде: insertTag-test.js
Работает, можно "финалить" Smile

F. Phoenix wrote:
Набросок: CoderFunctions.js
Я туда ещё добавил функцию GetSyntaxAliasExtension и так, по мелочи.. + отступы порасставлял вокруг =, чтобы текст скрипта нормально читался:
CoderFunctions.js

Code:
///Скрипт-"библиотека", содержащая функции для работы с Coder-плагином
// © Instructor, F. Phoenix, VladSh
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=19641#19641
// Version: ? (2013.08.01)

var fCoderHighLight = "Coder::HighLight";
var fCoderSettings = "Coder::Settings";

//*** СИНТАКСИЧЕСКАЯ ТЕМА ***\\

// Устанавливает синтаксическую тему по указанному расширению.
function SetSyntax(pExt) {
   AkelPad.Call(fCoderSettings, 1, pExt);
}

// Возвращает имя используемого coder-файла.
function GetSyntaxFile(hWndEdit) {
   if (arguments.length == 0) hWndEdit = AkelPad.GetEditWnd();
   if (!hWndEdit) return "";

   var pFile = "", lpFile;
   if (lpFile = AkelPad.MemAlloc(256)) {
      AkelPad.Call(fCoderSettings, 16, hWndEdit, lpFile, 256);
      pFile = AkelPad.MemRead(lpFile, 1  /*DT_UNICODE*/);
      AkelPad.MemFree(lpFile);
   }
   return pFile;
}

// Возвращает псевдоним синтаксического файла, установленного вручную
// (расширение, по которому тот был установлен).
// Если же тема была определена автоматически, возвращает имя документа.
function GetSyntaxAlias() {
   var hWndEdit = AkelPad.GetEditWnd(), hDocEdit = AkelPad.GetEditDoc();
   if (!hWndEdit || !hDocEdit) return "";

   var pAlias = "", lpAlias;
   if (lpAlias = AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/)) {
      AkelPad.CallW(fCoderSettings, 18 /*DLLA_CODER_GETALIAS*/, hWndEdit, hDocEdit, lpAlias, 0);
      pAlias = AkelPad.MemRead(lpAlias, 1 /*DT_UNICODE*/);
      AkelPad.MemFree(lpAlias);
   }
   return pAlias;
}

// Возвращает расширение из псевдонима синтаксического файла
function GetSyntaxAliasExtension() {
   var ext = "";
   var syntaxAlias = GetSyntaxAlias();
   if (syntaxAlias) {
      ext = syntaxAlias.split('.');
      ext = ext[ext.length-1]      //всё после последней точки
   }
   return ext;
}

// Проверяет ассоциацию текущей синтаксической темы с указанным расширением.
function CheckSyntaxExtension(pAlias) {
   var lpActive;
   var bActive = false;

   if (lpActive = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/)) {
      AkelPad.CallW(fCoderSettings, 12, pAlias, lpActive);
      bActive = AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
      AkelPad.MemFree(lpActive);
   }
   return bActive;
}

// Возвращает массив расширений текущей синтаксической темы.
function GetSyntaxExtensions(hWndEdit) {
   var pText = AkelPad.ReadFile(AkelPad.GetAkelDir(4) + "\\Coder\\" + GetSyntaxFile(hWndEdit), 0xD).replace(/\r\n?/g, "\n");
   var mSection = pText.match(/^Files:\s*?\n((?:(?:\*\..*?|;.*?|\s*?)\n)+)/m);
   var mResult = mSection[1].match(/^\*\.\w+/gmi);
   for (var i = 0; i < mResult.length; i++) mResult[i] = mResult[i].substr(1);
   return mResult;
}


//*** ЦВЕТОВАЯ ТЕМА ***\\

// Устанавливает цветовую тему по имени.
function SetColorTheme(pName) {
   AkelPad.CallW(fCoderSettings, 5, pName);
}

// Возвращает имя активной цветовой темы.
function GetColorTheme(hWndEdit) {
   var pVarTheme = "";
   var lpVarTheme;

   if (lpVarTheme = AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/)) {
      AkelPad.CallW(fCoderSettings, 20, hWndEdit, lpVarTheme, 256);
      pVarTheme = AkelPad.MemRead(lpVarTheme, 1 /*DT_UNICODE*/);
      AkelPad.MemFree(lpVarTheme);
   }
   return pVarTheme;
}

// Проверяет активность цветовой темы с указанным именем.
function CheckColorTheme(pName) {
   var lpActive;
   var bActive = false;

   if (lpActive = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/)) {
      AkelPad.CallW(fCoderSettings, 14, pName, lpActive);
      bActive = AkelPad.MemRead(lpActive, 3 /*DT_DWORD*/);
      AkelPad.MemFree(lpActive);
   }
   return bActive;
}

В принципе можно помещать в коллекцию скриптов, у себя в скриптах вовсю пользую его - уже изменил CommonFunctions.js, NewFilebyRecent.js, SaveAs.js, OpenCoderParamsFile.js.

Добавлено:
Изменено TranslateWithGoogleAPI.js - выбор вариантов в диалоге был неинтуитивен и неудобен, поэтому изменён порядок: теперь Yes заменяет выделенный текст, No - копирует в буфер. Соответственно поменялись местами значения 0 и 1 параметра resType, передаваемого в аргументах.


Last edited by VladSh on Wed Dec 11, 2013 9:18 am; edited 1 time in total
Back to top
View user's profile Send private message Visit poster's website
F. Phoenix



Joined: 24 Dec 2011
Posts: 175

PostPosted: Wed Sep 12, 2012 12:28 am    Post subject: Reply with quote

Хм, явоскрипту проще из переменных чтоль строки брать, чем напрямую?
И какой там ужасный пэкмен перед нашими никами - он же нас сожрет Shocked >>>






А еще я тут твой перевод регесп-тестера подправил... точнее, наброски-то вообще сделал сразу, как KDJ локализуемую версию выложил, а тута смержил + разметку кнопок в скрипте чутка изменил: так вроде и на русском, и на инглише неплохо смотрится.

RegExpTestJS_1049.lng
Code:
/********************************
RegExpTestJS.js - ver. 2012-09-05
Interface language
Language:      Russian (1049)
Translated by: forum community
*********************************/
pTxtCaption   = "Отладчик регулярных выражений JavaScript";
pTxtRegExp    = "Регулярное выражение (RE)";
pTxtSource    = "RE.source";
pTxtEscape    = "&Экранировать";
pTxtUnEscape  = "&Деэкранир.";
pTxtRE        = "RE";
pTxtIgCase    = "&ignoreCase";
pTxtGlobal    = "&global";
pTxtMultiL    = "&multiline";
pTxtNewLine   = "Переносы:";
pTxtCollect   = "&Коллекция";
pTxtNLWin     = "Win (\\r\\n)";
pTxtNLUnix    = "Unix (\\n)";
pTxtNLMac     = "Mac (\\r)";
pTxtString    = "Строка с данными для обработки (Str)";
pTxtAction    = "Операция";
pTxtMeTest    = "RE.test(Str)";
pTxtMeExec    = "RE.exec(Str)";
pTxtMeSearch  = "Str.search(RE)";
pTxtMeMatch   = "Str.match(RE)";
pTxtMeSplit   = "Str.split(RE)";
pTxtMeReplace = "Str.replace(RE,With):";
pTxtResult    = "Результат";
pTxtLastInd   = "RE.lastIndex=";
pTxtResetInd  = "Сбросить &индекс";
pTxtArray     = "Array";
pTxtEmpArray  = "empty Array";
pTxtGlobPro   = "Свойства глобального объекта RegExp";
pTxtTest      = "Тест";
pTxtHelp      = "Справка";
pTxtOpaqMinus = "Прозрачн. +";
pTxtOpaqPlus  = "Прозрачн. -";
pTxtClose     = "Закрыть";
pTxtCopyPaste = "Копия";
pTxtCopy      = "Копия";
pTxtCopyCB    = "Копировать в буфер";
pTxtCopyAP    = "Копировать в AkelPad";
pTxtPasteCB   = "Вставить из буфера";
pTxtPasteAP   = "Вставить из AkelPad";
pTxtNoRE      = "Регулярное выражение отсутствует."
pTxtNoStr     = "Строка для тестирования отсутствует.";
pTxtRECollect = "Коллекция шаблонов";
pTxtName      = "Наименование";
pTxtValue     = "Значение";
pTxtAdd       = "Добавить (Ins)";
pTxtRename    = "Переим. (F2)";
pTxtDelete    = "Удалить (Del)";
pTxtOK        = "OK (Enter)";
pTxtAddRE     = "Новый шаблон";
pTxtRenRE     = "Переименование шаблона";
pTxtNewName   = "Новое имя";
pTxtREExist   = "Шаблон уже сохранен под именем ";
pTxtNameExist = "Данное наименование уже существует: ";
pTxtREHelp    = "Справка по регулярным выражениям";
pTxtHelpText  = "\tМодификаторы, использующиеся для поиска\r\ni\t\tне различать строчные и заглавные буквы\r\ng\t\tглобальный поиск (обрабатываются все совпадения\r\n\t\tс шаблоном поиска)\r\nm\t\tмногострочный поиск\r\n\r\n\tНаборы символов, использующиеся для поиска\r\nВыражение\tОписание\r\n[abc]\t\tНайти любой, указанный в скобках, символ\r\n[^abc]\t\tНайти любой символ, исключая те, что в скобках\r\n[0-9]\t\tНайти любую цифру от 0 до 9\r\n[A-Z]\t\tНайти любой символ в верхнем регистре от A до Z\r\n[a-z]\t\tНайти любой символ в нижнем регистре от a до z\r\n[A-z]\t\tНайти любой символ от A в верхнем регистре до z\r\n\t\tв нижнем регистре\r\n[adgk]\t\tНайти любой символ из заданного набора\r\n[^adgk]\t\tНайти любой символ кроме данного набора\r\n(red|blue|green)\tНайти любое из перечисленных вхождений\r\n\r\n\tСпециальные метасимволы\r\n.\t\tНайдёт любой символ, кроме переводов строк: \\n, \\r,\r\n\t\t\\u2028 или \\u2029 (можно использовать [\\s\\S] для\r\n\t\tпоиска любого символа, включая переводы строк)\r\n\\w\t\tНайдёт любой символ латинского алфавита, включая\r\n\t\tбуквы, цифры и знак подчеркивания\r\n\\W\t\tНайдет любой не-(лат.)словесный символ\r\n\\d\t\tНайдёт цифру из любого алфавита (у нас же юникод);\r\n\t\tиспльзуйте [0-9], чтобы найти только обычные цифры\r\n\\D\t\tНайдет нецифровой символ (все алфавиты)\r\n\\s\t\tНайдет любой пробельный символ, включая пробел,\r\n\t\tтабуляцию, переводы строки и другие юникодные\r\n\t\tпробельные символы\r\n\\S\t\tНайдет любой символ, кроме пробельного\r\n\\b\t\tНаходит границу слов латинских алфавитов, например\r\n\t\tпробел; не путать с [\\b]!\r\n\\B\t\tНаходит совпадения не по границам слов\r\n\\0\t\tНайдет символ NUL; не добавляйте в конец другие\r\n\t\tцифры\r\n\\n\t\tНаходит символ новой строки\r\n\\f\t\tНаходит символ прогона (form-feed)\r\n\\r\t\tНаходит символ возврата каретки\r\n\\t\t\tНаходит символ обычной табуляции\r\n\\v\t\tНаходит символ вертикальной табуляции\r\n\\hhh\t\tНаходит символ, заданный восьмеричным числом hhh\r\n\\xhh\t\tНаходит символ, заданный шестнадцатиричным\r\n\t\tчислом, с кодом hh (2 шестнадцатиричных цифры)\r\n\\uhhhh\t\tНаходит юникодный символ, заданный\r\n\t\tшестнадцатиричным числом, с кодом hhhh\r\n\t\t(4 шестнадцатиричных цифры)\r\n\r\n\tКвантификаторы\r\n^\t\tОбозначает начало входных данных; если установлен\r\n\t\tфлаг многострочного поиска \"m\", то также сработает\r\n\t\tпри начале новой строки\r\n$\t\tОбозначает конец входных данных; если установлен\r\n\t\tфлаг многострочного поиска, то также сработает\r\n\t\tв конце строки\r\nx(?=y)\t\tНаходит x, только если за x следует y\r\nx(?!y)\t\tНаходит x, только если за x не следует y\r\n+\t\tОбозначает повторение предшествующего элемента\r\n\t\t1 или более раз, эквивалентно {1,}\r\n*\t\tОбозначает повторение предшествующего элемента\r\n\t\t0 или более раз\r\n?\t\tОбозначает, что предшествующий элемент может\r\n\t\tкак присутствовать, так и отсутствовать\r\n{n}\t\tНаходит ровно n повторений предшествующего\r\n\t\tэлемента\r\n{n,}\t\tНаходит n и более повторений предшествующего\r\n\t\tэлемента\r\n{n,m}\t\tНаходит от n до m повторений предшествующего\r\n\t\tэлемента\r\n\r\n\tСвойства объекта RegExp\r\nglobal\t\tПоказывает, был ли включен флаг поиска всех\r\n\t\tсовпадений \"g\"\r\nignoreCase\tПоказывает, был ли включен флаг\r\n\t\tрегистронезависимого поиска \"i\"\r\nmultiline\t\tПоказывает, был ли включен флаг многострочного\r\n\t\tпоиска \"m\"\r\nlastIndex\t\tИндекс, с которого начинать следующий поиск\r\nsource\t\tТекст RegExp-паттерна\r\n\r\n\tМетоды объекта RegExp\r\ncompile()\t\tКомпилирует регулярное выражение\r\nexec()\t\tПри совпадении возвращает массив и обновляет\r\n\t\tсвойства объекта RegExp, если совпадений нет,\r\n\t\tвозвращает null\r\ntest()\t\tИспользуется, чтобы выяснить, есть ли совпадения\r\n\t\tрегулярного выражения со строкой (аналогично\r\n\t\tString#search), возвращает true или false; чтобы\r\n\t\tполучить сами совпадения, используйте exec или\r\n\t\tString#match\r\ntoString()\t\tВыводит строковое представление объекта RegExp,\r\n\t\tт.е. \"/паттерн/\"\r\n\t________________________________________________\r\n\tИсточники: http://www.w3schools.com,  http://javascript.ru";


(Скачать вместе со скриптом);
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1764

PostPosted: Wed Sep 12, 2012 6:22 am    Post subject: Reply with quote

viewtopic.php?p=18304
Infocatcher wrote:
Можно как-нибудь починить возможность доступа к глобальному объекту?
Code:
var global = this;
global.x = {};
WScript.Echo(x);

Выдает
Quote:
Ошибка: Объект не поддерживает это свойство или метод
Код: 800A01B6
Источник: Ошибка выполнения Microsoft JScript

Финт ушами №1:
Code:
var _exports = (function() {
   var a = 1;
   var b = 2;

   return {
      libA: a,
      libB: b
   };
})();

if(_exports && AkelPad.IsInclude()) // this.foo doesn't work: http://akelpad.sourceforge.net/forum/viewtopic.php?p=18304#18304
   for(var _p in _exports)
      eval("if(!_p) var _p = _exports._p;".replace(/_p/g, _p));
_exports = _p = undefined;


Финт ушами №2:
Code:
(function() {
   var a = 1;
   var b = 2;

   if(AkelPad.IsInclude()) {
      // this.foo = ... doesn't work:
      // http://akelpad.sourceforge.net/forum/viewtopic.php?p=18304#18304
      // But declarations without "var" becomes global
      var _exports = {
         libA: a,
         libB: b
      };
      var _f = [];
      for(var _p in _exports)
         _f[_f.length] = _p + " = e." + _p + ";";
      // Go to the global scope
      new Function("e", _f.join("\n"))(_exports);
   }
})();


Упрощенный финт ушами №2 (только если экспортируемые имена не используются):
Code:
(function() {
   var a = 1;
   var b = 2;

   if(AkelPad.IsInclude()) {
      // this.foo = ... doesn't work:
      // http://akelpad.sourceforge.net/forum/viewtopic.php?p=18304#18304
      // But declarations without "var" becomes global
      libA = a;
      libB = b;
   }
})();


Использование:
Code:
AkelPad.Include("lib.js");
WScript.Echo(libA + "\n" + libB);


Правда, только первый вариант делает проверку на наличие переменной с таким именем.
Но там, если есть такая необходимость, все просто:
Code:
if(typeof global == "undefined")
   global = internal;
Back to top
View user's profile Send private message Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 3076
Location: Киев, Русь

PostPosted: Wed Sep 12, 2012 8:01 am    Post subject: Reply with quote

F. Phoenix wrote:
Хм, явоскрипту проще из переменных чтоль строки брать, чем напрямую?
Не легче. Просто использование констант исключает лишние возможные ошибки. Тем более, что кто-то может подключить скрипт и заюзать константу.

F. Phoenix wrote:
И какой там ужасный пэкмен перед нашими никами - он же нас сожрет
Это шутка Smile

F. Phoenix wrote:
А еще я тут твой перевод регесп-тестера подправил...
Считаю, что всё переводить не нужно; причины:
- некоторые надписи не влезают в кнопки (я сначала перевёл почти всё, но потом вернул обратно);
- некоторые надписи привычнее на английском (все програмеры к ним уже привыкли).
В итоге к себе скопировал:
Code:
pTxtRECollect = "Коллекция шаблонов...";
pTxtAddRE     = "Новый шаблон...";
pTxtRenRE     = "Переименование шаблона...";
т.к. оно точнее.
Многоточие в конце потому, что оно много где используется в заголовках модальных диалоговых окон.
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1764

PostPosted: Wed Sep 12, 2012 8:24 am    Post subject: Reply with quote

VladSh wrote:
Многоточие в конце потому, что оно много где используется в заголовках модальных диалоговых окон.

Многоточие обычно ставят, когда действие элемента управления подразумевает еще необходимость сделать какой-нибудь выбор после нажатия. Ну, как «Сохранить как…» еще спрашивает, куда сохранять.
А вот в заголовках, вроде бы, ни к чему многоточие. Я тут посмотрел... кажется, только в AkelPad'е «Настройки...» в заголовке окна. Smile
Back to top
View user's profile Send private message Visit poster's website
Andrey_A_A



Joined: 03 Jun 2010
Posts: 662
Location: Сочи, Хоста

PostPosted: Wed Sep 12, 2012 8:27 am    Post subject: Reply with quote

Instructor скрипт

ActiveColumnSwitch.js

всегда запускается с программой, выключаешь, перезагружаешься он опять активный
Code:
"Активный столбец вкл/выкл" +Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`)


как при отключении, чтобы он не запускался с программой?
Back to top
View user's profile Send private message Send e-mail Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 3076
Location: Киев, Русь

PostPosted: Wed Sep 12, 2012 9:22 am    Post subject: Reply with quote

Infocatcher wrote:
Многоточие обычно ставят, когда действие элемента управления подразумевает еще необходимость сделать какой-нибудь выбор после нажатия.
Спасибо за пояснение! Но не совсем понятно, что есть "выбор", кнопки "Ок" и "Отмена" тоже вроде выбор. В чём тут соль?

Andrey_A_A wrote:
как при отключении, чтобы он не запускался с программой?
Может, + убрать перед Call?
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 50, 51, 52 ... 94, 95, 96  Next
Page 51 of 96

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group