Как выделить блоки кода HTML в коде C++?
Я пишу веб-проект на C++. В мой код C++ должен вставить HTML, например такой
void CPage::putBaseFooter() {
if(m_canRender) {
HTML(
<!++
</main>
<footer>
<f++ composePageFooter(); ++f>
</footer>
</body>
</html>
++!>);
}
}
То есть весь HTML-код находится между <!++
а также ++!>
(Код обрабатывается перед компиляцией собственного препроцессора в строку)
Просто имейте свой собственный препроцессор макросов, такой как, например,
<f++ composeHead(); ++f>
<v++ ts.tm_year + 1900++v>
<paged_list++ [day_tasks_control] [/tasks/list] [taskListRenderer]>
...
<++paged_list>
<labeled_control++ [Description] [taskDescription]>
<textarea></textarea>
<++labeled_control>
Скажите, пожалуйста, как я могу выделить ключевые слова html и собственные макросы в редакторе кода qt-creator? Я пытался написать higlite-xml для Kate (с наследованием C++ highlite), но, вероятно, я чего-то не понимаю, так как не работает подсветка.
Вот мои наброски с подсветкой синтаксиса
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd"
[
<!ENTITY space " ">
<!ENTITY separators ",;">
<!ENTITY ns_punctuators "!%&space;&()+-/.*<=>?[]{|}~^&separators;">
]>
<!--
Copyright (c) 2012 by Alex Turbov (i.zaufi@gmail.com)
-->
<language
name="C++"
section="Sources"
version="1.0"
kateversion="2.4"
indenter="cstyle"
style="C++"
mimetype="text/x-c++src;text/x-c++hdr;text/x-chdr"
extensions="*.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;*.moc"
author="Sheridan (gorlov.maxim@gmail.com)"
license="LGPL"
priority="11"
>
<highlighting>
<list name="InplaceHTML">
<item> form </item>
<item> table </item>
<item> div </item>
<item> td </item>
<item> tr </item>
<item> th </item>
<item> span </item>
<item> input </item>
<item> textarea </item>
<item> label </item>
<item> a </item>
<item> head </item>
<item> link </item>
<item> script </item>
</list>
<contexts>
<context attribute="Normal Text" lineEndContext="#stay" name="Normal">
<IncludeRules context="##C++" />
<IncludeRules context="DetectInplaceHTML" />
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="DetectInplaceHTML">
<keyword attribute="Inplace HTML" context="#stay" String="InplaceHTML" />
</context>
</contexts>
<itemDatas>
<itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false" />
<itemData name="Inplace HTML" defStyleNum="dsKeyword" color="#0095ff" selColor="#ffffff" bold="1" italic="0" spellChecking="false" />
</itemDatas>
</highlighting>
</language>
2 ответа
Подсветка Kate C++ не используется в Qt Creator, изменение / расширение файла конфигурации Kate не окажет никакого влияния. Вы можете попробовать зарегистрировать отдельный тип MIME, который не распознается как C или C++ Qt Creator, и написать для этого подсветку Kate, но я не знаю, сработает ли это.
На самом деле у вас может быть несколько подсветок для одного языка, но с другим приоритетом! Посмотрите на файлы синтаксиса: есть ISO C++
а также C++
(который является чистым синтаксисом C++ плюс аддоны Qt4). Также здесь есть альтернативные маркеры C++, где C++ - это чистый синтаксис C++ и C++/Qt4
является вторичным. Можно использовать настройки конфигурации, чтобы изменить приоритет в соответствии с потребностями. Лично я предпочитаю иметь чистый C++ вместо "по умолчанию" C++/Qt4
,
Таким образом, вы можете попробовать добавить свой собственный C++/Custom
синтаксис и повысить его приоритет. Посмотрите на C++/Qt4
чтобы понять, как "повторно использовать" чистый синтаксис C++.
И, наконец, учитывая ваш примерный синтаксис, вам лучше определить свое расширение, прежде чем попадать в унаследованные контексты C++.