Инструмент для упрощения избавления от 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.

192 lines
5.1KB

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