InDesign, Grep и подсветка синтаксиса

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

RegEx, который я разработал: http://regexr.com/39puq

Отлично работает онлайн.

Однако это не работает в InDesign. Я приложил изображение (посмотрите разницу между ним и ссылкой выше.

Второй абзац содержит набор отступов, которые InDesign просто пропускает.

Есть идеи, почему? Я что-то пропустил?

Спасибо.Несоответствие InDesign

Позднее редактирование:

Следуя другому потоку StackExchange , я нашел этот фрагмент: <.*>

Однако он имеет тот же нежелательный эффект. Помощь.

Ответы (2)

Не пытайтесь сопоставить общий XML с регулярным выражением. Во многих случаях это не сработает, вместо этого используйте синтаксический анализатор XML и экспортируйте результат. Видеть:

В любом случае стиль grep не допускает совпадений за пределами абзаца, потому что это не парсер с несколькими абзацами. Вы можете жестко обойти эту проблему, заменив все концы абзацев принудительными разрывами строк. Это заставляет в дизайне рассматривать его как одну строку и лучше совмещать. Теперь ваше регулярное выражение будет работать.

Тогда ваше регулярное выражение можно упростить как:

<\/?(.|\n)*?>

Поскольку сопоставление (.|/s|/S)несколько избыточно, так как большая часть /s и /S включена в . хотя \n НЕ так просто добавить, что одно исключение упрощает тестирование. Механизмы регулярных выражений в целом отличаются тем, как они обрабатывают многострочные вещи, поэтому будьте осторожны, проблемы заключаются именно в этом.

ПРЕДУПРЕЖДЕНИЕ: Это регулярное выражение не будет действительно надежным, поскольку оно понимает вложенные файлы <>. Так что закомментированный код может сильно испортиться. Используйте синтаксический анализатор, чтобы сбросить материал в формате RTF, гораздо лучший подход.

Ваша проблема в том, что многострочный элемент не является одним абзацем в отношении InDesign. Это 5 абзацев.

Замените возврат абзаца принудительным разрывом строки (Shift-Enter), и он будет работать как положено.

введите описание изображения здесь