1

我在 C++ 上编写 Web 项目。在我的 c++ 代码中必须插入 html,例如这样

void CPage::putBaseFooter() {
  if(m_canRender) {
    HTML(
      <!++
      </main>
      <footer>
          <f++ composePageFooter(); ++f>
      </footer>
      </body>
      </html>
      ++!>);
  }
}

也就是整个 html 代码在<!++and之间++!>(代码在编译自己的预处理器到字符串之前被处理)

只需拥有自己的宏预处理器,例如

<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 代码编辑器中?我试图为 Kate 编写一个 higlite-xml(继承 c++ highlite),但可能我不明白,因为背光不起作用。

这是我的草图语法高亮

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd"
[
    <!ENTITY space " ">
    <!ENTITY separators ",&#59;">
    <!ENTITY ns_punctuators "!&#37;&space;&amp;()+-/.*&lt;=&gt;?[]{|}~^&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>
4

2 回答 2

0

在 Qt Creator 中不使用 Kate C++ 突出显示,更改/扩展 Kate 配置文件不会有任何影响。您可以尝试注册一个Qt Creator识别为 C 或 C++ 的单独 mime 类型,并为此编写一个 Kate 荧光笔,但我不知道这是否可行。

于 2014-07-30T23:57:51.303 回答
0

实际上,同一种语言的荧光笔可能很少,但优先级不同!看一下语法文件:有ISO C++and C++(这是纯 C++ 语法加上 Qt4 插件)。这里还有替代的C++ 荧光笔,其中 C++ 是C++ 语法并且C++/Qt4是次要的。可以根据需要使用配置设置来更改优先级。就我个人而言,我更喜欢使用纯 C++ 而不是 "default" C++/Qt4

因此,您可以尝试添加自己的C++/Custom语法并提高其优先级。看一下以C++/Qt4了解如何“重用”纯 C++语法。

最后,考虑到您的示例语法,您最好在陷入继承的 C++ 上下文之前检测您的扩展。

于 2014-10-14T00:58:18.447 回答