Усовершенствованные языковые инъекции XML - PullRequest
1 голос
/ 25 октября 2019

У меня есть несколько 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 (как я делаю в своем приложении). Если кто-нибудь знает, что это возможно, пожалуйста, дайте мне знать.

...