<?xml version="1.0"?>
<def format="1">
  <markup ext=".qml" reporterrors="false" aftercode="true">
    <!-- keywords in QML code to ignore -->
    <keywords>
      <keyword name="if"/>
      <keyword name="while"/>
      <keyword name="typeof"/>
      <keyword name="for"/>
    </keywords>
    <!-- code blocks are meta-code/pseudo code placed in the library
         that is used/called by the native c/c++ code -->
    <codeblocks>
      <!-- need to add all the QML function names below -->
      <block name="onClicked"/>
      <block name="onFinished"/>
      <block name="onTriggered"/>
      <block name="onRetrieveTriggered"/>
      <block name="onPressed"/>
      <block name="onTouch"/>
      <block name="onFocusedChanged"/>
      <block name="onSubmittedNewStatusChanged"/>
      <block name="onCreationCompleted"/>
      <block name="onFileSelected"/>
      <!-- code block structure in QML is:
            onClicked: {
              call(var)
            } -->
      <structure offset="3" start="{" end="}"/>
      <!-- the start block is '3' tokens after the
           name token so we skip them -->
    </codeblocks>
    <codeblocks>
      <block name="function"/>
      <!-- code block structure in QML is:
            funnction x(args): {
              call(var)
            } -->
      <structure offset="2" start="{" end="}"/>
    </codeblocks>
    <!-- Qt Properties have the format :
           Q_PROPERTY(<type> <name> READ <func> WRITE <func> NOTIFY <func>)
           the READ/WRITE/NOTIFY parts are optional -->
    <exported>
      <exporter prefix="Q_PROPERTY">
        <suffix>READ</suffix>
        <!-- catch the element before READ if present -->
        <prefix>READ</prefix>
        <prefix>WRITE</prefix>
        <prefix>NOTIFY</prefix>
      </exporter>
    </exported>
    <!-- qml files can call connect on the c++ code -->
    <imported>
      <importer>connect</importer>
    </imported>
  </markup>
  <!-- qt can call methods as strings using invokeMethod -->
  <reflection>
    <call arg="2">invokeMethod</call>
  </reflection>
  <!-- the SLOT/SIGNAL methods can be cause false-positives for pure
  virtual functions being called in the constructor because it sees
  the macro as a function. -->
  <function name="SLOT">
    <ignorefunction>true</ignorefunction>
  </function>
  <function name="SIGNAL">
    <ignorefunction>true</ignorefunction>
  </function>
  <define name="Q_DECL_EXPORT" value=""/>
  <define name="Q_DECL_IMPORT" value=""/>
  <define name="Q_DECLARE_FLAGS(x,y)" value=""/>
  <define name="Q_DISABLE_COPY(C)" value="C(C&amp;);C&amp; operator=(const C&amp;);"/>
  <define name="Q_ENUMS(X)" value=""/>
  <define name="Q_FLAGS(X)" value=""/>
  <define name="Q_INTERFACES(X)" value=""/>
  <define name="Q_OBJECT" value=""/>
  <define name="Q_PROPERTY(X)" value=""/>
  <podtype name="qint8" sign="s" size="1"/>
  <podtype name="qint16" sign="s" size="2"/>
  <podtype name="qint32" sign="s" size="4"/>
  <podtype name="qint64" sign="s" size="8"/>
  <podtype name="quint8" sign="u" size="1"/>
  <podtype name="quint16" sign="u" size="2"/>
  <podtype name="quint32" sign="u" size="4"/>
  <podtype name="quint64" sign="u" size="8"/>
  <podtype name="qlonglong" sign="s"/>
  <podtype name="qulonglong" sign="u"/>
  <podtype name="uchar" sign="u"/>
  <podtype name="uint" sign="u"/>
  <podtype name="ulong" sign="u"/>
  <podtype name="ushort" sign="u"/>
  <podtype name="qptrdiff" sign="s"/>
  <podtype name="quinitptr" sign="u"/>
</def>
