Advertisement
Guest User

Untitled

a guest
May 30th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // http://doesnotexist.net
  2. // Version: 1.3.0
  3. // Author: thx@ Instructor, KDJ, Skif_off
  4. // Date: 10.07.2015 / 22.04.2019
  5. //
  6. //
  7. // Description(1033): Execute document depends on extension.
  8. // Description(1049): Запуск редактируемого документа в зависимости от его расширения.
  9. //                    Можно также передавать параметры для запуска из меню.
  10. //
  11. // Arguments:       AutoItSyntaxCheck    - запуск соответствующей функции
  12. //                  AutoItStdOut2Console - запуск соответствующей функции
  13. //
  14. // Usage:
  15. //         Call("Scripts::Main", 1, "ExecuteDocument.js")
  16. //         Call("Scripts::Main", 1, "ExecuteDocument.js", "AutoItSyntaxCheck")
  17.  
  18. //Include
  19. if (!AkelPad.Include("ShowMenu.js")) WScript.Quit();
  20.  
  21. var hMainWnd=AkelPad.GetMainWnd();
  22.  
  23. if (! AkelPad.Include("AkelDSLConstants.js")) WScript.Quit();
  24.  
  25. var hEditWnd  = AkelPad.GetEditWnd();
  26. var pEditFile = AkelPad.GetEditFile(0);
  27. var pFileExt  = AkelPad.GetFilePath(pEditFile, 4 /*CPF_FILEEXT*/);
  28. var pSelText  = AkelPad.GetSelText();
  29. var sArg      = AkelPad.GetArgLine();
  30. var lpItems;
  31. var nItem;
  32.  
  33. switch (sArg)
  34. {
  35.   case "AutoItSyntaxCheck":
  36.     AutoItSyntaxCheck();
  37.     WScript.Quit();
  38.   case "AutoItStdOut2Console":
  39.     AutoItStdOut2Console();
  40.     WScript.Quit();
  41.   default:
  42.     break;
  43. }
  44.  
  45.  
  46. // written by KDJ
  47. var nX, nY;
  48. var lpRECT = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);
  49.  
  50. AkelPad.SystemFunction().Call("User32::GetWindowRect", AkelPad.GetEditWnd(), lpRECT);
  51.  
  52. nX = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
  53. nY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
  54. nX += (AkelPad.MemRead(_PtrAdd(lpRECT,  8), 3 /*DT_DWORD*/) - nX) / 2;
  55. nY += (AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - nY) / 2;
  56.  
  57. AkelPad.MemFree(lpRECT);
  58.  
  59. switch (pFileExt.toLowerCase())
  60. {
  61.   case "htm":
  62.   case "html":
  63.   case "xhtm":
  64.   case "xhtml":
  65.   case "asp":
  66.     AkelPad.Call("Scripts::Main", 1, "HTMLView.js");
  67.     break;
  68.     /*
  69.     AkelPad.Exec('%ProgramFiles%\\Internet Explorer\\iexplore.exe "' + pEditFile + '"');
  70.     break;
  71.     */
  72.   case "bat":
  73.   case "cmd":
  74.     AkelPad.Exec('%comspec% /c "' + pEditFile + '"');
  75.     break;
  76.   case "dsl":
  77.     AkelPad.Exec(AUTOIT + ' "' + AKELDSL_PATH + '\\CompileDSL.au3" "' + pEditFile + '"');
  78.     break;
  79.   case "au3":
  80.     lpItems=[["AutoIt    Run", MF_NORMAL, 101],
  81.              ["AutoIt    Compile from GUI", MF_NORMAL, 102],
  82.              ["AutoIt    Build", MF_NORMAL, 103],
  83.              ["", MF_SEPARATOR],
  84.              ["AutoIt    Syntax Check", MF_NORMAL, 104],
  85.              ["AutoIt    Run :: StdOut2Console", MF_NORMAL, 105],
  86.              ["", MF_SEPARATOR],
  87.              ["AutoIt    Jump to function", MF_NORMAL, 106],
  88.              ["AutoIt    Remove debug lines", MF_NORMAL|MF_LAST, 107]];
  89.     nItem=ShowMenu(lpItems, nX-250, nY-100);
  90.     if (nItem == -1)
  91.       break;
  92.     else
  93.       switch (lpItems[nItem][2])
  94.       {
  95.         case 101:
  96.           AkelPad.Exec('"' + AUTOIT + '" "' + pEditFile + '"');
  97.           break;
  98.         case 102:
  99.           AkelPad.Exec('"' + AUTOIT + '" "' + AUTOIT_PATH + '\\AutoIt3Wrapper\\AutoIt3Wrapper.au3" /ShowGui /in "' + pEditFile + '"');
  100.           break;
  101.         case 103:
  102.           AkelPad.Exec('"' + AUTOIT + '" "' + AUTOIT_PATH + '\\AutoIt3Wrapper\\AutoIt3Wrapper.au3" /prod /notmp /in "' + pEditFile + '"');
  103.           break;
  104.         case 104:
  105.           AutoItSyntaxCheck();
  106.           break;
  107.         case 105:
  108.           AutoItStdOut2Console();
  109.           break;
  110.         case 106:
  111.           AkelPad.TextFind(hEditWnd, 'Func ' + pSelText, 0x00000001|0x00200000 /*FRF_DOWN|FRF_BEGINNING*/);
  112.           break;
  113.         case 107:
  114.           AutoItRemoveDebugLines();
  115.           break;
  116.         default:
  117.           break;
  118.       };
  119.     break;
  120.   case "md":
  121.     MarkdownPreview();
  122.     break;
  123.   default:
  124.     AkelPad.MessageBox(hMainWnd, "This file type is not currently supported.", "Execute Document", 64 /*MB_ICONINFORMATION*/);
  125.     break;
  126. }
  127. WScript.Quit();
  128.  
  129. function AutoItRemoveDebugLines()
  130. {
  131.   AkelPad.TextReplace(hEditWnd, "^(?m-s).+?;### DEBUG (MSGBOX|CONSOLE|ARRAY|LINE)\\n", "", 0x00280005 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP|FRF_MATCHCASE*/, true);
  132. }
  133.  
  134. function AutoItSyntaxCheck()
  135. {
  136. AkelPad.Call("Log::Output", 1, '"' + AUTOIT + '" "' + AUTOIT_PATH + '\\AutoIt3Wrapper\\AutoIt3Wrapper.au3" /notmp /prod /AU3Check /in "' + pEditFile + '"', "", "^(.+?\\.au3)\\((\\d+),(\\d+)\\)", "/FILE=\\1 /GOTOLINE=\\2:\\3", -1, -1);
  137. }
  138.  
  139. function AutoItStdOut2Console()
  140. {
  141. AkelPad.Call("Log::Output", 1, '"' + AUTOIT + '" "' + AUTOIT_PATH + '\\AutoIt3Wrapper\\AutoIt3Wrapper.au3" /notmp /run /prod /ErrorStdOut /in "' + pEditFile + '"', "", "^(.+?\\.au3) ?\\((\\d+)(\\)|,(\\d+)\\))", "/FILE=\\1 /GOTOLINE=\\2:\\4");
  142. }
  143.  
  144. function MarkdownPreview()
  145. {
  146.   // http://akelpad.sourceforge.net/forum/viewtopic.php?p=28787#28787
  147.   //
  148.   // Version: 2016-03-28 [mod: 22.04.2019]
  149.   //
  150.   // -"" Call("Scripts::Main", 1, "MarkdownPreview.js", `-browser=path`)
  151.   //   параметры (не обязательны):
  152.   //     -browser=path - путь к браузеру, если нет - используется MarkdownPreview.exe;
  153.   //
  154.   //   [yozhic::mod]
  155.   //   - аргумент -file убрал, т.к. теперь мы создаём temp-файл всегда рядом с оригинальным, а в Temp только если не создался рядом
  156.   //   - аргумент -del убрал, добавил эту опцию в диалог
  157.   //
  158.   // Сохранить в UTF-16LE
  159.  
  160.   // Пути к утилитам
  161.  
  162.   if (_X64) {
  163.     var pMultiMarkdown   = "%a\\AkelFiles\\Plugs\\Scripts\\MarkdownPreview\\multimarkdown64.exe"
  164.   } else {
  165.     var pMultiMarkdown   = "%a\\AkelFiles\\Plugs\\Scripts\\MarkdownPreview\\multimarkdown32.exe"
  166.   }
  167.   var pMarkdownPreview = "%a\\AkelFiles\\Plugs\\Scripts\\MarkdownPreview\\MarkdownPreview.au3"
  168.  
  169.   var hMainWnd      = AkelPad.GetMainWnd();
  170.   var pAkelFilesDir = AkelPad.GetAkelDir();
  171.   var nArg1         = AkelPad.GetEditFile(0);
  172.   var nArg2         = AkelPad.GetArgValue("browser", "");
  173.   var WshShell      = new ActiveXObject("WScript.Shell");
  174.   var fso           = new ActiveXObject("Scripting.FileSystemObject");
  175.   var pTextRange;
  176.   var sTxtTextError;
  177.   var pTempMDFile;
  178.   var pTempHTMLFile;
  179.   var bError;
  180.  
  181.   pTextRange = AkelPad.GetSelText(2);
  182.   if (! pTextRange.length > 0)
  183.     pTextRange = AkelPad.GetTextRange(0, -1, 2);
  184.  
  185.   if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
  186.     sTxtTextError = "Не найдена утилита MultiMarkdown! Проверьте путь в pMultiMarkdown.";
  187.   else
  188.     sTxtTextError = "MultiMarkdown not found! Check path into pMultiMarkdown.";
  189.  
  190.   pMultiMarkdown   = pMultiMarkdown.replace(/^%a(?=\\)/, pAkelFilesDir);
  191.   pMarkdownPreview = pMarkdownPreview.replace(/^%a(?=\\)/, pAkelFilesDir);
  192.  
  193.   if (! fso.FileExists(pMultiMarkdown))
  194.   {
  195.     AkelPad.MessageBox(hMainWnd, sTxtTextError, WScript.ScriptName, 48 /*MB_ICONWARNING*/);
  196.     WScript.Quit();
  197.   }
  198.  
  199.   // Strikethrough text: "~~text~~" => ""<strike>text</strike>"
  200.   //pTextRange = pTextRange.replace(/(~~)([^~]+)(~~)/g, '<strike>$2</strike>')
  201.  
  202.   pTempMDFile = nArg1 + "-temp.md";
  203.   pTempHTMLFile = nArg1 + "-temp.html";
  204.  
  205.   bError = AkelPad.WriteFile(pTempMDFile, pTextRange, -1, 65001, false);
  206.   if (bError != 0) {
  207.     pTempMDFile = WshShell.ExpandEnvironmentStrings("%Temp%") + "\\temp.md";
  208.     pTempHTMLFile = WshShell.ExpandEnvironmentStrings("%Temp%") + "\\temp.html";
  209.     AkelPad.WriteFile(pTempMDFile, pTextRange, -1, 65001, false);
  210.   }
  211.  
  212.   AkelPad.Exec("\"" + pMultiMarkdown + "\" --batch --full \"" + pTempMDFile + "\" --output=\"" + pTempHTMLFile + "\"", "", 1, 0);
  213.  
  214.  
  215.   if (nArg2 && fso.FileExists(nArg2))
  216.     AkelPad.Exec(nArg2 + " " + pTempHTMLFile, "", 1);
  217.   else if (fso.FileExists(pMarkdownPreview))
  218.     AkelPad.Exec("%AUTOIT%" + " \"" + pMarkdownPreview + "\" \"" + pTempHTMLFile + "\" \"" + pAkelFilesDir + "\\AkelPad.exe\" " + hMainWnd);
  219.   else
  220.     AkelPad.Exec(WshShell.ExpandEnvironmentStrings("%ProgramFiles%") + "\\Internet Explorer\\iexplore.exe " + pTempHTMLFile, "", 1);
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement