У меня есть несколько XML-файлов, в которые я встраиваю код Python, и я использую для этого языковую инъекцию. Это вроде работает, но не на 100%. Вот пример
<frm>
...
<script>
<code name = "__init__(self, *args, **kwargs)">
<![CDATA[
# Python code
super().__init__(*args, **kwargs)
]]>
</code>
</script>
</frm>
Приведенный выше xml должен быть «переведен» на следующий код Python:
class Form1(FormBase):
def __init__(self, *args, **kwargs):
# Python code
super().__init__(*args, **kwargs)
...
Теперь, мой первый вопрос, можно ли определить внедрение языка дляполный путь тега? Я имею в виду frm/script/code
? Потому что это работает, только если я укажу «код» как локальное имя при внедрении языка xml.
Для <script>
Я определил префикс как «class Form1 (FormBase):», но не знаю, если этоработает, потому что при наведении на «self» в определении метода ничего не отображается, только то, что нигде не используется.
Тег <code>
работает нормально (я полагаю). Но инъекция для <code>'s
CDATA
не работает как часть тела функции. Я определил его как «код» как локальное имя в xml-инъекции.
Отступы - Можно ли как-то указать, что код в теге <code>
должен быть идентифицирован для некоторого числа пробелов / табуляций?
Могу ли я как-то просмотреть «сгенерированный» код из языковых инъекций?
Или я мог бы как-то создать плагин, который бы создавал нужную мне языковую инъекцию?
(Вопросбыла опубликована на форумах pycharm, но не получила ответа https://intellij -support.jetbrains.com / hc / en-us / community / posts / 360006457580-Advanced-XML-language-инъекции- )
Спасибо
edit:
Итак, я попытался создать плагин, используя LanguageInjector
, а также MultiHostInjector
, но не повезло. Отступы Python действительно проблематичны, и я не смог «сгенерировать» код, который бы имел правильные отступы. Что мне действительно нужно, так это иметь возможность предварительно обработать весь XML, сгенерировать код Python, а затем отобразить код на части XML (как я делаю в своем приложении). Если кто-нибудь знает, что это возможно, пожалуйста, дайте мне знать.