/*
 * Copyright 2013 Piotr Caban for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";

#include "vbscript_defs.h"

[
    helpstring("Microsoft VBScript Regular Expressions 5.5"),
    id(3),
    uuid(3f4daca7-160d-11d2-a8e9-00104b365c9f),
    version(5.5)
]
library VBScript_RegExp_55
{
    importlib("stdole2.tlb");

    [
        dual,
        hidden,
        nonextensible,
        odl,
        oleautomation,
        uuid(3f4daca0-160d-11d2-a8e9-00104b365c9f),
    ]
    interface IRegExp : IDispatch
    {
        [id(DISPID_REGEXP_PATTERN), propget]
        HRESULT Pattern([out, retval] BSTR *pPattern);

        [id(DISPID_REGEXP_PATTERN), propput]
        HRESULT Pattern([in] BSTR pPattern);

        [id(DISPID_REGEXP_IGNORECASE), propget]
        HRESULT IgnoreCase([out, retval] VARIANT_BOOL *pIgnoreCase);

        [id(DISPID_REGEXP_IGNORECASE), propput]
        HRESULT IgnoreCase([in] VARIANT_BOOL pIgnoreCase);

        [id(DISPID_REGEXP_GLOBAL), propget]
        HRESULT Global([out, retval] VARIANT_BOOL *pGlobal);

        [id(DISPID_REGEXP_GLOBAL), propput]
        HRESULT Global([in] VARIANT_BOOL pGlobal);

        [id(DISPID_REGEXP_EXECUTE)]
        HRESULT Execute(
                [in] BSTR sourceString,
                [out, retval] IDispatch **ppMatches);

        [id(DISPID_REGEXP_TEST)]
        HRESULT Test(
                [in] BSTR sourceString,
                [out, retval] VARIANT_BOOL *pMatch);

        [id(DISPID_REGEXP_REPLACE)]
        HRESULT Replace(
                [in] BSTR sourceString,
                [in] BSTR replaceString,
                [out, retval] BSTR *pDestString);
    }

    [
        dual,
        hidden,
        nonextensible,
        odl,
        oleautomation,
        uuid(3f4dacb0-160d-11d2-a8e9-00104b365c9f)
    ]
    interface IRegExp2 : IDispatch
    {
        [id(DISPID_REGEXP_PATTERN), propget]
        HRESULT Pattern([out, retval] BSTR *pPattern);

        [id(DISPID_REGEXP_PATTERN), propput]
        HRESULT Pattern([in] BSTR pPattern);

        [id(DISPID_REGEXP_IGNORECASE), propget]
        HRESULT IgnoreCase([out, retval] VARIANT_BOOL *pIgnoreCase);

        [id(DISPID_REGEXP_IGNORECASE), propput]
        HRESULT IgnoreCase([in] VARIANT_BOOL pIgnoreCase);

        [id(DISPID_REGEXP_GLOBAL), propget]
        HRESULT Global([out, retval] VARIANT_BOOL *pGlobal);

        [id(DISPID_REGEXP_GLOBAL), propput]
        HRESULT Global([in] VARIANT_BOOL pGlobal);

        [id(DISPID_REGEXP_MULTILINE), propget]
        HRESULT Multiline([out, retval] VARIANT_BOOL *pMultiline);

        [id(DISPID_REGEXP_MULTILINE), propput]
        HRESULT Multiline([in] VARIANT_BOOL pMultiline);

        [id(DISPID_REGEXP_EXECUTE)]
        HRESULT Execute(
                [in] BSTR sourceString,
                [out, retval] IDispatch **ppMatches);

        [id(DISPID_REGEXP_TEST)]
        HRESULT Test(
                [in] BSTR sourceString,
                [out, retval] VARIANT_BOOL *pMatch);

        [id(DISPID_REGEXP_REPLACE)]
        HRESULT Replace(
                [in] BSTR sourceString,
                [in] VARIANT replaceVar,
                [out, retval] BSTR *pDestString);
    }

    [
        dual,
        hidden,
        nonextensible,
        odl,
        oleautomation,
        uuid(3f4daca1-160d-11d2-a8e9-00104b365c9f)
    ]
    interface IMatch : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Value([out, retval] BSTR *pValue);

        [id(DISPID_MATCH_FIRSTINDEX), propget]
        HRESULT FirstIndex([out, retval] LONG *pFirstIndex);

        [id(DISPID_MATCH_LENGTH), propget]
        HRESULT Length([out, retval] LONG *pLength);
    }

    [
        odl,
        uuid(3f4dacb1-160d-11d2-a8e9-00104b365c9f),
        hidden,
        dual,
        nonextensible,
        oleautomation
    ]
    interface IMatch2 : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Value([out, retval] BSTR *pValue);

        [id(DISPID_MATCH_FIRSTINDEX), propget]
        HRESULT FirstIndex([out, retval] LONG *pFirstIndex);

        [id(DISPID_MATCH_LENGTH), propget]
        HRESULT Length([out, retval] LONG *pLength);

        [id(DISPID_MATCH_SUBMATCHES), propget]
        HRESULT SubMatches([out, retval] IDispatch **ppSubMatches);
    }

    [
        dual,
        hidden,
        nonextensible,
        odl,
        oleautomation,
        uuid(3f4daca2-160d-11d2-a8e9-00104b365c9f)
    ]
    interface IMatchCollection : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Item(
                [in] LONG index,
                [out, retval] IDispatch **ppMatch);

        [id(DISPID_MATCHCOLLECTION_COUNT), propget]
        HRESULT Count([out, retval] LONG *pCount);

        [id(DISPID_NEWENUM), propget]
        HRESULT _NewEnum([out, retval] IUnknown **ppEnum);
    }

    [
        dual,
        hidden,
        nonextensible,
        odl,
        oleautomation,
        uuid(3f4dacb2-160d-11d2-a8e9-00104b365c9f)
    ]
    interface IMatchCollection2 : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Item(
                [in] LONG index,
                [out, retval] IDispatch **ppMatch);

        [id(DISPID_MATCHCOLLECTION_COUNT), propget]
        HRESULT Count([out, retval] LONG *pCount);

        [id(DISPID_NEWENUM), propget]
        HRESULT _NewEnum([out, retval] IUnknown **ppEnum);
    }

    [
        dual,
        hidden,
        nonextensible,
        odl,
        oleautomation,
        uuid(3f4dacb3-160d-11d2-a8e9-00104b365c9f)
    ]
    interface ISubMatches : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Item(
                [in] LONG index,
                [out, retval] VARIANT *pSubMatch);

        [id(DISPID_SUBMATCHES_COUNT), propget]
        HRESULT Count([out, retval] LONG *pCount);

        [id(DISPID_NEWENUM), propget]
        HRESULT _NewEnum([out, retval] IUnknown **ppEnum);
    }

    [
        uuid(3f4daca4-160d-11d2-a8e9-00104b365c9f)
    ]
    coclass RegExp
    {
        [default] interface IRegExp2;
    }

    [
        noncreatable,
        uuid(3f4daca5-160d-11d2-a8e9-00104b365c9f)
    ]
    coclass Match
    {
        [default] interface IMatch2;
    }

    [
        noncreatable,
        uuid(3f4daca6-160d-11d2-a8e9-00104b365c9f)
    ]
    coclass MatchCollection
    {
        [default] interface IMatchCollection2;
    }

    [
        noncreatable,
        uuid(3f4dacc0-160d-11d2-a8e9-00104b365c9f)
    ]
    coclass SubMatches {
        [default] interface ISubMatches;
    }
}