Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

109 linhas
6.0KB

  1. <!DOCTYPE html>
  2. <html>
  3. <meta charset="utf-8">
  4. <head>
  5. <link rel="stylesheet" href="../../style.css">
  6. </head>
  7. <body>
  8. <script data-goatcounter="https://services.opengamestudio.org:443/count" async src="//services.opengamestudio.org:443/count.js"></script>
  9. <div id="header">
  10. <div class="header2">
  11. <div class="menu">
  12. <a href="../../ru/news/index.html">Новости</a>
  13. <a href="../../ru/game/index.html">Игры</a>
  14. <a href="../../ru/tool/index.html">Инструменты</a>
  15. <a href="../../ru/page/about.html">О нас</a>
  16. </div>
  17. <div id="lang">
  18. <a href="../../en/news/psk-jvm-item.html">EN</a>
  19. <a href="../../ru/news/psk-jvm-item.html">RU</a>
  20. </div>
  21. <div class="clear"></div>
  22. </div>
  23. </div>
  24. <h3 class="left_item_title">В новостях...</h3>
  25. <center>
  26. <div class="news_item">
  27. <h2 class="news_item_title">
  28. <a href="psk-jvm-item.html">ПСКОВ 2 на JVM</a>
  29. </h2>
  30. <p class="news_item_date">
  31. 2025-02-11 00:00
  32. </p>
  33. <div class="news_item_contents">
  34. <p><img src="../../images/2025_psk-jvm-item.png" alt="splash" /></p>
  35. <h1 id="">Генерация отдельных страниц</h1>
  36. <p>В январе сделал половину функциональности оригинального ПСКОВа на Kotlin для JVM,
  37. а именно: генерацию отдельных страниц HTML из Markdown.</p>
  38. <p>И ПСКОВ 1, и ПСКОВ 2 генерируют файлы HTML, которые отображаются идентично
  39. в веб-браузерах. Тем не менее, содержимое этих сгенерированных файлов отличается,
  40. т.к. ПСКОВ 1 использует <a href="https://github.com/showdownjs/showdown">Showdown</a> для конвертации Markdown в HTML,
  41. а ПСКОВ 2 - <a href="https://github.com/JetBrains/markdown">intellij-markdown</a>.</p>
  42. <p>Взглянем на описываемую разницу. Допустим, у нас есть следующая страница Markdown:</p>
  43. <pre><code>Simple page in **Markdown** to convert to **HTML**.
  44. | № | Parser | Language |
  45. |---|--- |--- |
  46. | 1 | [Showdown][showdown] | JavaScript |
  47. | 2 | [intellij-markdown][intellij-markdown] | Kotlin |
  48. [intellij-markdown]: https://github.com/JetBrains/markdown
  49. [showdown]: https://github.com/showdownjs/showdown
  50. </code></pre>
  51. <p>ПСКОВ 1 генерирует следующий файл HTML:</p>
  52. <pre><code>&lt;p&gt;Simple page in &lt;strong&gt;Markdown&lt;/strong&gt; to convert to &lt;strong&gt;HTML&lt;/strong&gt;.&lt;/p&gt;
  53. &lt;table&gt;
  54. &lt;thead&gt;
  55. &lt;tr&gt;
  56. &lt;th&gt;№&lt;/th&gt;
  57. &lt;th&gt;Parser&lt;/th&gt;
  58. &lt;th&gt;Language&lt;/th&gt;
  59. &lt;/tr&gt;
  60. &lt;/thead&gt;
  61. &lt;tbody&gt;
  62. &lt;tr&gt;
  63. &lt;td&gt;1&lt;/td&gt;
  64. &lt;td&gt;&lt;a href="https://github.com/showdownjs/showdown"&gt;Showdown&lt;/a&gt;&lt;/td&gt;
  65. &lt;td&gt;JavaScript&lt;/td&gt;
  66. &lt;/tr&gt;
  67. &lt;tr&gt;
  68. &lt;td&gt;2&lt;/td&gt;
  69. &lt;td&gt;&lt;a href="https://github.com/JetBrains/markdown"&gt;intellij-markdown&lt;/a&gt;&lt;/td&gt;
  70. &lt;td&gt;Kotlin&lt;/td&gt;
  71. &lt;/tr&gt;
  72. &lt;/tbody&gt;
  73. &lt;/table&gt;
  74. </code></pre>
  75. <p>ПСКОВ 2:</p>
  76. <pre><code>&lt;body&gt;&lt;p&gt;Simple page in &lt;strong&gt;Markdown&lt;/strong&gt; to convert to &lt;strong&gt;HTML&lt;/strong&gt;.&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;№&lt;/th&gt;&lt;th&gt;Parser&lt;/th&gt;&lt;th&gt;Language&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;a href="https://github.com/showdownjs/showdown"&gt;Showdown&lt;/a&gt;&lt;/td&gt;&lt;td&gt;JavaScript&lt;/td&gt;&lt;/tr&gt;&lt;tr class="intellij-row-even"&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;a href="https://github.com/JetBrains/markdown"&gt;intellij-markdown&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kotlin&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/body&gt;
  77. </code></pre>
  78. <p>А вот как оба файла отображаются в веб-браузере:</p>
  79. <p><img src="../../images/2025_psk-jvm-item_result.png" alt="result" /></p>
  80. <p>Идентичное отображение двух различающихся файлов.
  81. Мой внутренний перфекционист, конечно, возмущён несоответствием, но мой
  82. внутренний прагматик считает эту разницу несущественной.</p>
  83. <h1 id="-1">Февраль</h1>
  84. <p>В феврале доведу конвертер межъязыкового диалекта до генерации Context.</p>
  85. </div>
  86. </div>
  87. <div id="disqus_thread"></div>
  88. <script>
  89. var disqus_config = function () {
  90. this.page.url = "https://opengamestudio.org/ru/news/psk-jvm-item.html";
  91. this.page.identifier = "psk-jvm-item.html";
  92. };
  93. (function() { // DON'T EDIT BELOW THIS LINE
  94. var d = document, s = d.createElement('script');
  95. s.src = 'https://opengamestudio.disqus.com/embed.js';
  96. s.setAttribute('data-timestamp', +new Date());
  97. (d.head || d.body).appendChild(s);
  98. })();
  99. </script>
  100. <noscript>Пожалуйста, включите JavaScript для просмотра <a href="https://disqus.com/?ref_noscript">комментариев на платформе Disqus.</a></noscript>
  101. <div id="footer">
  102. Сайт сгенерирован <a href="http://opengamestudio.org/pskov/ru">ПСКОВОМ</a>
  103. из <a href="http://github.com/ogstudio/site-opengamestudio">этого исходного кода</a>.
  104. </div>
  105. </center>
  106. </body>
  107. </html>