Advertisement
AZJIO

Calculator.js для AkelPad

Jul 24th, 2019
710
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  // я тут внёс изменения (AZJIO) http://akelpad.sourceforge.net/forum/viewtopic.php?p=34216&sid=bb535212a0501b1c1f55a0d84b782830#34216
  2. // Добавил вставку результата (ОК, Enter) и копирование в буфер обмена (Отмена, Esc)
  3.  
  4. // http://akelpad.sourceforge.net/en/plugins.php#Scripts
  5. // Version: 1.0
  6. // Author: Shengalts Aleksander aka Instructor
  7. //
  8. //
  9. // Description(1033): Text calculator (based on wisgest code).
  10. //
  11. // How to use:
  12. // Select expression and call script.
  13. //
  14. // Constants:
  15. // E       -Euler's constant, the base of natural logarithms. Approximately equal to 2.718.
  16. // LN2     -The natural logarithm of 2. Approximately equal to 0.693.
  17. // LN10    -The natural logarithm of 10. Approximately equal to 2.302.
  18. // LOG2E   -The base-2 logarithm of e, Euler's constant. Approximately equal to 1.442.
  19. // LOG10E  -The base-10 logarithm of e, Euler's constant. Approximately equal to 0.434.
  20. // PI      -The ratio of the circumference of a circle to its diameter. Approximately equal to 3.141592653589793.
  21. // SQRT1_2 -The square root of 0.5, or one divided by the square root of 2. Approximately equal to 0.707.
  22. // SQRT2   -The square root of 2. Approximately equal to 1.414.
  23. //
  24. // Functions:
  25. // abs     -The absolute value of a number.
  26. // acos    -The arccosine of a number.
  27. // asin    -The arcsine of a number.
  28. // atan    -The arctangent of a number.
  29. // atan2   -The angle (in radians) from the X axis to a point (y,x).
  30. // ceil    -The smallest integer greater than or equal to its numeric argument.
  31. // cos     -The cosine of a number.
  32. // exp     -e (the base of natural logarithms) raised to a power.
  33. // floor   -The greatest integer less than or equal to its numeric argument.
  34. // log     -The natural logarithm of a number.
  35. // max     -The greater of zero or more supplied numeric expressions.
  36. // min     -The lesser of zero or more supplied numeric expressions.
  37. // pow     -The value of a base expression taken to a specified power.
  38. // random  -A pseudorandom number between 0 and 1.
  39. // round   -A supplied numeric expression rounded to the nearest integer.
  40. // sin     -The sine of a number.
  41. // sqrt    -The square root of a number.
  42. // tan     -The tangent of a number.
  43. //
  44. // Examples:
  45. // 56 * 13
  46. // Result: 728
  47. //
  48. // sin(PI/2)
  49. // Result: 1
  50. //
  51. // res=0; for (i=1; i<=500; ++i) res=res+i*i;
  52. // Result: 41791750
  53. //
  54. // x=34+56; Trace(x, "Intermediate result:"); x+26;
  55. // Result: 116
  56. //
  57. // Trace(34+56)+26
  58. // Result: 116
  59. //
  60. //
  61. // Description(1049): Текстовый калькулятор (основан на коде wisgest'a).
  62. //
  63. // Как использовать:
  64. // Выделите выражение и вызовите скрипт.
  65. //
  66. // Константы:
  67. // E       -Основание натуральных логарифмов, значение приблизительно равно 2.718. Иногда ее еще называют Эйлеровой константой.
  68. // LN2     -Константа, определяющая натуральный логарифм числа 2, приблизительно равна 0.693.
  69. // LN10    -Константа, определяющая натуральный логарифм числа десять, приблизительно равна 2.302.
  70. // LOG2E   -Константа, представляющая логарифм с основанием 2 числа E, приблизительно равна 1.442.
  71. // LOG10E  -Константа, представляющая логарифм с основанием 10 числа E, приблизительно равна 0.434.
  72. // PI      -Значение pi - это отношение длины окружности к диаметру, приблизительно равное 3.14159.
  73. // SQRT1_2 -Квадратный корень из 0.5, приблизительно равно 0.707.
  74. // SQRT2   -Квадратный корень из числа два, приблизительно равно 1.414.
  75. //
  76. // Функции:
  77. // abs     -Возвращает абсолютное значение указанного числа.
  78. // acos    -Возвращает угол, косинус которого равен указанному числу.
  79. // asin    -Возвращает угол, синус которого равен указанному числу.
  80. // atan    -Возвращает угол, тангенс которого равен указанному числу.
  81. // atan2   -Возвращает угол, тангенс которого равен отношению двух указанных чисел.
  82. // ceil    -Возвращает наименьшее целое число, которое больше или равно указанному числу.
  83. // cos     -Возвращает косинус указанного угла.
  84. // exp     -Возвращает e, возведенное в указанную степень.
  85. // floor   -Возвращает наибольшее целое число, которое меньше или равно указанному числу.
  86. // log     -Возвращает логарифм указанного числа.
  87. // max     -Возвращает наибольшее из двух чисел.
  88. // min     -Возвращает наименьшее из двух чисел.
  89. // pow     -Возвращает указанное число, возведенное в указанную степень.
  90. // random  -Возвращает случайное число в интервале между 0 и 1.
  91. // round   -Возвращает ближайшее к указанному значению число.
  92. // sin     -Возвращает синус указанного угла.
  93. // sqrt    -Возвращает квадратный корень из указанного числа.
  94. // tan     -Возвращает тангенс указанного угла.
  95. //
  96. // Примеры:
  97. // 56 * 13
  98. // Результат: 728
  99. //
  100. // sin(PI/2)
  101. // Результат: 1
  102. //
  103. // res=0; for (i=1; i<=500; ++i) res=res+i*i;
  104. // Результат: 41791750
  105. //
  106. // x=34+56; Trace(x, "Промежуточный результат:"); x+26;
  107. // Результат: 116
  108. //
  109. // Trace(34+56)+26
  110. // Результат: 116
  111.  
  112. // Переменные
  113. var hMainWnd=AkelPad.GetMainWnd();
  114. var nSelEnd = AkelPad.GetSelEnd();
  115. var pSelText=AkelPad.GetSelText();
  116. var bHex=false;
  117. var nResult=0;
  118. var nError;
  119. var WM_USER=1024;
  120.  
  121. if (pSelText) // если выделенно
  122. {
  123.   pSelText=pSelText.replace(/(\d),(\d)/g, "$1.$2");
  124.   if (pSelText.substr(0, 2) == "0x") // если 2 символа от начала (0) равны 0x, то
  125.     bHex=true;
  126.  
  127.   try // конструкция чтобы исключить сбой кода, просто отправив обработку ошибок в блок catch
  128.   {
  129.     with (Math) // Выполнить с видимостью объекта Math
  130.     {
  131.       nResult=eval(pSelText); // Выполнить код, то есть вычислить выражение
  132.     }
  133.   }
  134.   catch (nError)
  135.   {
  136.     AkelPad.Call("Scripts::Main", 1, "Calculator2.js")
  137.     // AkelPad.MessageBox(hMainWnd, nError.description, WScript.ScriptName, 16 /*MB_ICONERROR*/);
  138.     WScript.Quit(); // выход, ошибка же
  139.   }
  140.   Trace(nResult, GetLangString(1));
  141. }
  142. else
  143. {
  144.   // мессага типа "выдели текст"
  145.   AkelPad.MessageBox(hMainWnd, GetLangString(0), WScript.ScriptName, 48 /*MB_ICONEXCLAMATION*/);
  146. }
  147.  
  148.  
  149. // Функции
  150. function Trace(nResult, pLabel)
  151. {
  152.   var nValue;
  153.  
  154.   if (bHex) // если данные содержат шестнадцатеричные числа
  155.   {
  156.     if (nResult < 0) nResult=(0xFFFFFFFF + 1) + nResult;
  157.     nResult="0x" + nResult.toString(16).toUpperCase();
  158.   }
  159.   if (nValue=AkelPad.InputBox(hMainWnd, WScript.ScriptName, pLabel, nResult)) // если жмём "ОК"
  160.   {
  161.     AkelPad.SetSel(nSelEnd, nSelEnd);
  162.     AkelPad.ReplaceSel(" = " + nResult);
  163.     return parseInt(nValue); // Возвращает целое число
  164.   }
  165.   AkelPad.SetclipboardText(nResult); // в буфер обмена
  166.   return nResult;
  167. }
  168.  
  169. function GetLangString(nStringID)
  170. {
  171.   var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);
  172.  
  173.   if (nLangID == 0x19) //LANG_RUSSIAN
  174.   {
  175.     if (nStringID == 0)
  176.       return "\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u0020\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439\u0020\u0442\u0435\u043A\u0441\u0442\u002E";
  177.     if (nStringID == 1)
  178.       return "\u0418\u0442\u043E\u0433\u043E\u0432\u044B\u0439\u0020\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u003A";
  179.   }
  180.   else
  181.   {
  182.     if (nStringID == 0)
  183.       return "No text selected.";
  184.     if (nStringID == 1)
  185.       return "Final result:";
  186.   }
  187.   return "";
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement