diff --git a/flagships.html b/flagships.html index 3647007..67c8eb8 100644 --- a/flagships.html +++ b/flagships.html @@ -244,9 +244,8 @@ mROA.CodegenTools

mROA.CodegenTools

-

Инструментарий для генерации кода, разрабатываемый в рамках проекта mROA. Здесь будет описание - функциональности и возможностей инструмента.

- Подробнее → +

Инструментарий для генерации кода, разрабатываемый в рамках проекта mROA. Не сказать, что эта библиотечка делает магию, но может облегчить всевозможную работу с генерацией кода на разных языках.

+ Подробнее →
diff --git a/mroa.html b/mroa.html index 54df472..61e696f 100644 --- a/mroa.html +++ b/mroa.html @@ -53,26 +53,9 @@ color: #dcdcaa; } - .github-link { - display: flex; - align-items: center; - gap: 0.5rem; - color: white; - text-decoration: none; - font-size: 1.1rem; - padding: 0.5rem 1rem; - border-radius: 5px; - transition: background-color 0.3s; - } - .github-link:hover { - background-color: rgba(255, 255, 255, 0.1); - } - .github-link img { - width: 20px; - height: 20px; - } + @@ -118,9 +101,7 @@ public class X

© 2025 Моя страница. Наверное какие-то права защищены!!!

- + diff --git a/mroacgt.html b/mroacgt.html new file mode 100644 index 0000000..3f869bc --- /dev/null +++ b/mroacgt.html @@ -0,0 +1,107 @@ + + + + + + + mROA.CodegenTools + + + + + + + + + +
+ +

mROA.CodegenTools

+

Как робин для RPC-бэтмена

+
+
+

Чтож, если говорить о кодгене в C# при помощи Roslyn, то тут все не так шикарно, как могло бы быть в других + областях программировании. Ну по крайне мерее официально по примерам от Microsoft предлагается использовать + просто интерполяцию строк.

+

+// Build up the source code
+var code = $@"// 
+
+using System;
+using System.Collections.Generic;
+
+namespace {namespaceName};
+
+partial class {className}
+{{
+    public IEnumerable Report()
+    {{
+{string.Join("\n", methodBody)}
+    }}
+}}
+";
+
+// Add the source code to the compilation.
+context.AddSource($"{className}.g.cs", SourceText.From(code, Encoding.UTF8));
+    
+

+ И этот метод вполне себе на самом деле рабочий. Надежный, как швейцарские часы. Но после того как я сделал так + весь кодген для mROA, вышестоящий сказал что это не читабельно, и не только из-за того, как это написано, но и в + большей части из-за использования таких иногда огромных литералов. В связи с этим созрел план, как это все можно + убрать в файлики, которые лежат где-то там, и при помощи которых можно убрать большинство огромных литералов для + работы + с текстом в контексте генерации кода. +

+

+ Синтаксис mROA.CGT шаблонов основан на супер упрощенной, версии xml из параллельной вселенной и немного + перекликается с шаблонами T4. Однако в отличие от T4, код исполняется по-нормальному в среде C# кода, а не как + то там среди генерируемого кода. +

+

Каждый тег в файле, который определяет так называемый "Документ", начинается с + <! + после чего идет тип тега, и заканчивается + > + . Например + <!L someLinkName> + . Этот тег - тег ссылки с идентификатором. При компиляции документа она попытается найти определение для своего + идентификатора и вставить его содержащийся текст вместо себя. +

+

+ Есть два типа тегов по окончанию: те, которые заканчиваются на своем же объявлении, например Link tag ( + <!L> + ), и те которые нужно закрыть таким же тегом. Таким тегом является тег определения (Define tag). Он объявляется + таким же образом, как Link tag: + <!D someLinkName> + , но его нужно так же закрыть, используя + <!D> + . Между головой и хвостом тега заключается текст, который он определяет. +

+

+ Например, тут тег <!D someLinkName> определяет текст "qwerty text", а <!L someLinkName> вставляет его. +

+
<!L someLinkName><!L someLinkName><!L someLinkName>
+<!D someLinkName>qwerty text<!D>
+

При компиляции такого документа шаблона на выходе получится qwerty textqwerty textqwerty text потому что были прописаны 3 ссылки на одно и то же определение

+
+ + + + + \ No newline at end of file diff --git a/styles.css b/styles.css index 37bd3cf..52663a3 100644 --- a/styles.css +++ b/styles.css @@ -10,6 +10,27 @@ body { color: white; } +.github-link img { + width: 20px; + height: 20px; +} + +.github-link { + display: flex; + align-items: center; + gap: 0.5rem; + color: white; + text-decoration: none; + font-size: 1.1rem; + padding: 0.5rem 1rem; + border-radius: 5px; + transition: background-color 0.3s; +} + +.github-link:hover { + background-color: rgba(255, 255, 255, 0.1); +} + header { text-align: center; padding-top: 0px; @@ -102,6 +123,20 @@ h1, h2 { font-size: 1.4rem; } } + a { color: white; } + +.no-margin { + margin: 0; +} + +codesp{ + font-family: "Space Grotesk", monospace; + background-color: rgb(66, 69, 72) +} +* codesp { + padding: 1px 5px; + border-radius: 5px; +} \ No newline at end of file