Следует ли избегать аргументов пользовательской директивы? - PullRequest
0 голосов
/ 03 июня 2018

Я создал пользовательскую директиву для моего проекта документации, который построен с использованием Sphinx и reStructuredText.Директива используется следующим образом:

.. xpath-try:: //xpath[@expression="here"]

Это сделает выражение XPath простым блоком кода, но с добавлением ссылки, по которой пользователь может щелкнуть, чтобы выполнить выражение для образца XML-документа ипросмотреть совпадения ( пример ссылки , пример отображаемой страницы ).

Моя директива указывает, что она не имеет содержимого, принимает один обязательный аргумент (выражение xpath) ираспознает несколько параметров:

class XPathTryDirective(Directive):
    has_content = False
    required_arguments = 1
    optional_arguments = 0
    final_argument_whitespace = True
    option_spec = {
        'filename': directives.unchanged,
        'ns_args': directives.unchanged,
    }

    def run(self):
        xpath_expr = self.arguments[0]
        node = xpath_try(xpath_expr, xpath_expr)
        ...
        return [node]

Все кажется работает точно так, как задумано, за исключением того, что если выражение XPath содержит *, то подсветка синтаксиса в моем редакторе (gVim)становится действительно запутанным.Если я экранирую * с обратной косой чертой, то это делает моего редактора счастливым, но обратная косая черта появляется в выводе.

Мои вопросы:

  1. Являются ли специальные символы варгумент директивы, которую предполагается экранировать?
  2. Если да, то предоставляет ли API директивы способ получить неэкранированную версию?
  3. Или все работает нормально, и единственная проблема - это мой редакторне в состоянии правильно выделить вещи?

Это может показаться незначительной проблемой, но, поскольку я новичок в первый раз, я считаю выделение очень полезным.

1 Ответ

0 голосов
/ 05 июня 2018

Есть ли в аргументе директивы специальные символы, которые должны быть экранированы?

Нет, я думаю, что никакая дополнительная обработка не выполняется для аргументов первых директив.Что соответствует вашему наблюдению: что бы вы ни указали в качестве аргумента директивы, вы можете получить напрямую через self.arguments[0].

. Или все работает нормально, и единственная проблема в том, что мой редактор не можетправильно выделять вещи?

Да, похоже, это так.Символ * используется для выделения / курсива в первых числах, и по какой-то причине ему уделяется больше внимания при выделении синтаксиса.

Это означает, что решение здесь заключается в том, чтобы настроить или исправить файл синтаксиса vim для restructuredtext.

...