труба и заменить контекстом

Я использую трубку Какунэ ( |) для форматирования документа ryd , который по сути является обычным файлом YAML, состоящим из нескольких документов YAML, некоторые из которых имеют в корне (помеченный) литеральный скаляр:

      --- !Python |
print('hello world')
--- !Output |
this    results in:

(В этом случае !Outputпредполагается, что помеченный скаляр представляет собой ReST, к которому конкатенируется вывод предыдущей «программы» «hello world»).

Каждый из этих скаляров/документов имеет разные потребности в форматировании в зависимости от тега и/или конфигурации. Что я обычно делаю, так это выбираю весь буфер, передаю его в программу, которая понимает каждый документ, форматирую каждый документ соответствующим «подформатером» и повторно комбинирую их. Форматирование может пойти не так, когда я делаю частичный выбор, так как тогда я не могу легко определить, какой модуль форматирования использовать, если только выбор не начинается с тега для литерального скаляра.

Я могу вызывать соответствующие субформатеры напрямую, но это одновременно громоздко, иногда неуместно (попробуйте форматировать Python, начиная с середины метода класса) или неприменимо, например, при множественном выборе из разных типов документов (таким образом, требуются разные субформатеры).

То, что я хотел бы иметь, - это функциональность команды pipe, но когда вызываемый внешний модуль форматирования получает полный буфер в качестве стандартного ввода и получает (несколько) выборок в буфере в качестве индексов начального и конечного байтов в качестве аргумента. Что-то, как если бы я выбрал из примера выше строчку с Python и слова this results и вызовите средство форматирования, например:

myfmt -s 13,32 -s45,60

Когда myfmtимеет полный буфер, он может сканировать с самого начала и выбирать, что делать с каждым выбором. Возможно, имеет смысл расширить выборку (до полных строк, полного определения класса или полной программы), поэтому нужно будет вернуть полный результат, но не весь файл нужно будет переформатировать, что я и сделал. нужно сделать сейчас, основываясь на выборе всего буфера (используя %)

Есть ли способ добиться этого в какунэ?

0 ответов

Другие вопросы по тегам