Инструмент для упрощения избавления от Typhoon в проекте Swift
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

193 lines
5.1KB

  1. // // // //
  2. Перевести = мир =>
  3. {
  4. var функция = null;
  5. var класс = null;
  6. var одиночка = false;
  7. var свойства = [];
  8. вывод.value = "";
  9. var строки = ввод.value.split(/\n/);
  10. for (var номер in строки)
  11. {
  12. var строка = строки[номер].trim();
  13. //console.debug("строка", номер, строка);
  14. if (!функция && строка.startsWith(мир.перевод.функция))
  15. {
  16. var конец = строка.indexOf("(");
  17. функция = строка.substring(мир.перевод.функция.length, конец);
  18. //console.debug("функция", функция);
  19. }
  20. else if (!класс && строка.startsWith(мир.перевод.класс))
  21. {
  22. класс = строка.substring(мир.перевод.класс.length);
  23. //console.debug("класс", класс);
  24. }
  25. else if (функция && строка.startsWith(мир.перевод.свойство))
  26. {
  27. var конец = строка.indexOf(")");
  28. var название = строка.substring(мир.перевод.свойство.length, конец);
  29. var начало = строка.indexOf(мир.перевод.значение);
  30. var конецСвойства = строка.indexOf("(", конец + 1);
  31. if (конецСвойства == -1)
  32. {
  33. конецСвойства = строка.indexOf(")", конец + 1);
  34. }
  35. var значение = строка.substring(начало + мир.перевод.значение.length, конецСвойства);
  36. свойства.push({
  37. "название": название,
  38. "значение": значение,
  39. });
  40. //console.debug("свойство", название, "значение", значение);
  41. }
  42. else if (функция && строка.includes(мир.перевод.одиночка))
  43. {
  44. одиночка = true;
  45. }
  46. else if (функция && строка == "}")
  47. {
  48. var экземпляр = "instance";
  49. if (одиночка)
  50. {
  51. экземпляр = "_" + класс;
  52. }
  53. var содержимое = "";
  54. for (var номер in свойства)
  55. {
  56. var свойство = свойства[номер];
  57. содержимое += ` ${экземпляр}.${свойство.название} = ${свойство.значение}()\n`;
  58. }
  59. if (!одиночка)
  60. {
  61. вывод.value += `
  62. func ${функция}() -> ${класс} {
  63. let ${экземпляр} = ${класс}()
  64. ${содержимое}
  65. return ${экземпляр}
  66. }
  67. `;
  68. }
  69. else
  70. {
  71. вывод.value += `
  72. private var ${экземпляр}: ${класс}!
  73. func ${функция}() -> ${класс} {
  74. if let ${экземпляр} = ${экземпляр} {
  75. return ${экземпляр}
  76. }
  77. ${экземпляр} = ${класс}()
  78. ${содержимое}
  79. return ${экземпляр}
  80. }
  81. `;
  82. }
  83. функция = null;
  84. класс = null;
  85. одиночка = false;
  86. свойства = [];
  87. }
  88. }
  89. };
  90. // // // //
  91. ЗадатьНастройкиПеревода = мир =>
  92. {
  93. мир.перевод = {
  94. "функция": "dynamic func ",
  95. "класс": "typealias Class = ",
  96. "свойство": "definition?.injectProperty(#selector(getter: Class.",
  97. "значение": "with: ",
  98. "одиночка": "scope",
  99. };
  100. };
  101. // // // //
  102. Продублировать = мир =>
  103. {
  104. вывод.value = ввод.value;
  105. };
  106. // // // //
  107. ОтслеживатьОбновлениеОкнаВвода = мир =>
  108. {
  109. ввод.addEventListener(
  110. "input",
  111. function() {
  112. мир.уведомить("обновили окно ввода");
  113. },
  114. false
  115. );
  116. };
  117. // // // //
  118. СоздатьОкнаВводаИВывода = мир =>
  119. {
  120. document.body.innerHTML = `
  121. <textarea id="ввод"></textarea>
  122. <textarea id="вывод"></textarea>
  123. `;
  124. мир.ввод = document.getElementById("ввод");
  125. мир.вывод = document.getElementById("вывод");
  126. var вид = document.createElement("style");
  127. document.head.appendChild(вид);
  128. вид.innerHTML = `
  129. #ввод
  130. {
  131. position: fixed;
  132. left: 0;
  133. width: 50%;
  134. height: 100%;
  135. top: 0;
  136. bottom: 0;
  137. }
  138. #вывод
  139. {
  140. position: fixed;
  141. right: 0;
  142. width: 50%;
  143. height: 100%;
  144. top: 0;
  145. bottom: 0;
  146. }
  147. `;
  148. };
  149. // // // //
  150. ВывестиПриветствиеОтRemoveTyphoon = мир =>
  151. {
  152. console.debug("Привет от Remove Typhoon");
  153. };