Изменить грамматику HTML на основе атрибутов в TextMate - PullRequest
11 голосов
/ 07 апреля 2011

Я недавно начал экспериментировать с шаблонами jQuery, которые полагаются на вашу способность заключать HTML в теги SCRIPT.

<script id="movieTemplate" type="text/x-jquery-tmpl">
    <li>
        <b>${Name}</b> (${ReleaseYear})
    </li>
</script>

Проблема в том, что TextMate предполагает, что что-то внутри тегов SCRIPTэто JavaScript.Я уверен, что TextMate можно обрабатывать по-разному в зависимости от атрибута type, но я борюсь с некоторыми грамматиками, используемыми в комплекте.Я довольно уверен, что строка ниже является ключевой, но я не уверен, с чего начать.

begin = '(?:^\s+)?(<)((?i:script))\b(?![^>]*/>)';

Кто-нибудь уже имел дело с подобным сценарием?Может ли кто-нибудь указать мне правильное направление?

Рич

Ответы [ 3 ]

6 голосов
/ 21 сентября 2011

begin = '(?:^\s+)?(<)((?i:script))\b(?!([^>]*text/x-jquery-tmpl[^>]*|[^>]*/>))';

перестанет обрабатывать теги скрипта с "text / x-jquery-tmpl" в них как javascript

2 голосов
/ 17 апреля 2011

Это регулярное выражение. Вы можете расширить его для проверки типа text/javascript, например:

begin = '(?:^\s+)?(<)((?i:script))\b(.*?type="text/javascript")(?![^>]*/>.*)';

Я тестировал только с if, но, похоже, работает. Когда тип text/javascript TextMate расширяет его до Javascript для каждого другого типа, который использует PHP. (Как и вне тегов скрипта.)

Подробнее о том, как TextMate использует регулярные выражения, можно прочитать здесь: Regex (Руководство по TextMate)

1 голос
/ 03 августа 2011

Соответствующие группы имеют смысл.Вам нужно изменить это на:

begin = '(?:^\s+)?(<)((?i:script))\b(?:.*?type="text/javascript")(?![^>]*/>)';

Чтобы сохранить текущую конфигурацию группы соответствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...