COM tmLanguage
        <dict>
            <key>begin</key>
            <string>(?x)
                    (?:  ^                                 # begin-of-line
                      |  (?: (?&lt;!else|new|=) )             #  or word + space before name
                    )
                    (?: IFACEMETHOD|STDMETHOD)\(([A-Za-z_][A-Za-z0-9_]*)\)
                     \s*(\()                           # start bracket or end-of-line
                </string>
            <key>beginCaptures</key>
            <dict>
                <key>1</key>
                <dict>
                    <key>name</key>
                    <string>entity.name.function.c++</string>
                </dict>
                <key>2</key>
                <dict>
                    <key>name</key>
                    <string>punctuation.definition.parameters.c</string>
                </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
                <key>0</key>
                <dict>
                    <key>name</key>
                    <string>punctuation.definition.parameters.c</string>
                </dict>
            </dict>
            <key>name</key>
            <string>meta.function.c</string>
            <key>patterns</key>
            <array>
                <dict>
                    <key>include</key>
                    <string>$base</string>
                </dict>
            </array>
        </dict>
        <dict>
            <key>begin</key>
            <string>(?x)
                    (?:  ^                                 # begin-of-line
                      |  (?: (?&lt;!else|new|=) )             #  or word + space before name
                    )
                    (?: IFACEMETHOD|STDMETHOD)\(([A-Za-z_][A-Za-z0-9_]*)\)
                     \s*(\()                           # start bracket or end-of-line
                </string>
            <key>beginCaptures</key>
            <dict>
                <key>1</key>
                <dict>
                    <key>name</key>
                    <string>entity.name.function.c++</string>
                </dict>
                <key>2</key>
                <dict>
                    <key>name</key>
                    <string>punctuation.definition.parameters.c</string>
                </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
                <key>0</key>
                <dict>
                    <key>name</key>
                    <string>punctuation.definition.parameters.c</string>
                </dict>
            </dict>
            <key>name</key>
            <string>meta.function.c</string>
            <key>patterns</key>
            <array>
                <dict>
                    <key>include</key>
                    <string>$base</string>
                </dict>
            </array>
        </dict>
        <dict>
            <key>begin</key>
            <string>(?x)
                    (?:  ^                                 # begin-of-line
                      |  (?: (?&lt;!else|new|=) )             #  or word + space before name
                    )
                    (?: IFACEMETHOD_|STDMETHOD_|IFACEMETHODIMP_|STDMETHODIMP_)\(
                        (.*), \s
                        ([A-Za-z_][A-Za-z0-9_]*)
                        \)
                     \s*(\()                           # start bracket or end-of-line
                </string>
            <key>beginCaptures</key>
            <dict>
                <key>2</key>
                <dict>
                    <key>name</key>
                    <string>entity.name.function.c++</string>
                </dict>
                <key>3</key>
                <dict>
                    <key>name</key>
                    <string>punctuation.definition.parameters.c</string>
                </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
                <key>0</key>
                <dict>
                    <key>name</key>
                    <string>punctuation.definition.parameters.c</string>
                </dict>
            </dict>
            <key>name</key>
            <string>meta.function.c</string>
            <key>patterns</key>
            <array>
                <dict>
                    <key>include</key>
                    <string>$base</string>
                </dict>
            </array>
        </dict>