コード例 #1
0
bool CRegisterExtension::_IsBaseClassProgID(PCWSTR pszProgID) const
{
    return !StrCmpIC(pszProgID, L"AllFileSystemObjects") ||
           !StrCmpIC(pszProgID, L"Directory") ||
           !StrCmpIC(pszProgID, L"*") ||
           StrStrI(pszProgID, L"SystemFileAssociations\\Directory.");   // SystemFileAssociations\Directory.* values
}
コード例 #2
0
ファイル: StyleProp.cpp プロジェクト: hufuman/xindows
//+------------------------------------------------------------------------
//
//  Function:   ::ParseTextDecorationProperty
//
//  Synopsis:   Parses a text-decoration string in CSS format and sets the
//              appropriate sub-properties.
//
//-------------------------------------------------------------------------
HRESULT ParseTextDecorationProperty(CAttrArray** ppAA, LPCTSTR pcszTextDecoration, WORD wFlags)
{
    TCHAR* pszString;
    TCHAR* pszCopy;
    TCHAR* pszNextToken;
    HRESULT hr = S_OK;
    BOOL fInvalidValues = FALSE;
    BOOL fInsideParens;
    VARIANT v;

    Assert(ppAA && "No (CAttrArray*) pointer!");

    if(!pcszTextDecoration)
    {
        pcszTextDecoration = _T("");
    }

    v.vt = VT_I4;
    v.lVal = 0;

    pszCopy = pszNextToken = pszString = new TCHAR[_tcslen(pcszTextDecoration)+1];
    if(!pszCopy)
    {
        hr = E_OUTOFMEMORY;
        goto Cleanup;
    }
    _tcscpy(pszCopy,  pcszTextDecoration);

    // Loop through the tokens in the string (parenthesis parsing is for future
    // text-decoration values that might have parameters).
    for(; pszString&&*pszString; pszString=pszNextToken)
    {
        fInsideParens = FALSE;
        while(_istspace(*pszString))
        {
            pszString++;
        }

        while(*pszNextToken && (fInsideParens || !_istspace(*pszNextToken)))
        {
            if(*pszNextToken == _T('('))
            {
                fInsideParens = TRUE;
            }
            if(*pszNextToken == _T(')'))
            {
                fInsideParens = FALSE;
            }
            pszNextToken++;
        }

        if(*pszNextToken)
        {
            *pszNextToken++ = _T('\0');
        }

        if(!StrCmpIC(pszString, _T("none")))
        {
            v.lVal = TD_NONE; // "none" clears all the other properties (unlike the other properties)
        }
        else if(!StrCmpIC( pszString, _T("underline")))
        {
            v.lVal |= TD_UNDERLINE;
        }
        else if(!StrCmpIC( pszString, _T("overline")))
        {
            v.lVal |= TD_OVERLINE;
        }
        else if(!StrCmpIC( pszString, _T("line-through")))
        {
            v.lVal |= TD_LINETHROUGH;
        }
        else if(!StrCmpIC( pszString, _T("blink")))
        {
            v.lVal |= TD_BLINK;
        }
        else
        {
            fInvalidValues = TRUE;
        }
    }

    hr = CAttrArray::Set(ppAA, DISPID_A_TEXTDECORATION, &v,
        (PROPERTYDESC*)&s_propdescCStyletextDecoration, CAttrValue::AA_StyleAttribute, wFlags);

Cleanup:
    delete[] pszCopy;
    RRETURN1(fInvalidValues?(hr?hr:E_INVALIDARG):hr, E_INVALIDARG);
}
コード例 #3
0
ファイル: ColorValue.cpp プロジェクト: hufuman/xindows
int CompareColorValuePairsByName(const void* pv1, const void* pv2)
{
    return StrCmpIC(((struct COLORVALUE_PAIR*)pv1)->szName,
        ((struct COLORVALUE_PAIR*)pv2)->szName);
}
コード例 #4
0
ファイル: StyleProp.cpp プロジェクト: hufuman/xindows
//+------------------------------------------------------------------------
//
//  Function:   ::ParseTextAutospaceProperty
//
//  Synopsis:   Parses a text-autospace string in CSS format and sets the
//              appropriate sub-properties.
//
//-------------------------------------------------------------------------
HRESULT ParseTextAutospaceProperty(CAttrArray** ppAA, LPCTSTR pcszTextAutospace, WORD wFlags)
{
    TCHAR* pszTokenBegin;
    TCHAR* pszCopy;
    TCHAR* pszTokenEnd;
    HRESULT hr = S_OK;
    BOOL fInvalidValues = FALSE;
    VARIANT v;

    Assert(ppAA && "No (CAttrArray*) pointer!");

    if(!pcszTextAutospace)
    {
        pcszTextAutospace = _T("");
    }

    v.vt = VT_I4;
    v.lVal = 0;

    pszCopy = pszTokenBegin = pszTokenEnd = new TCHAR[_tcslen(pcszTextAutospace)+1];
    if(!pszCopy)
    {
        hr = E_OUTOFMEMORY;
        goto Cleanup;
    }
    _tcscpy(pszCopy,  pcszTextAutospace);

    for(pszTokenBegin=pszTokenEnd=pszCopy;
        pszTokenBegin&&*pszTokenBegin; 
        pszTokenBegin=pszTokenEnd)
    {
        while(_istspace(*pszTokenBegin))
        {
            pszTokenBegin++;
        }

        pszTokenEnd = pszTokenBegin;

        while(*pszTokenEnd && !_istspace(*pszTokenEnd))
        {
            pszTokenEnd++;
        }

        if(*pszTokenEnd)
        {
            *pszTokenEnd++ = _T('\0');
        }

        if(StrCmpIC(pszTokenBegin, _T("ideograph-numeric")) == 0)
        {
            v.lVal |= TEXTAUTOSPACE_NUMERIC;
        }
        else if(StrCmpIC(pszTokenBegin, _T("ideograph-space")) == 0)
        {
            v.lVal |= TEXTAUTOSPACE_SPACE;
        }
        else if(StrCmpIC(pszTokenBegin, _T("ideograph-alpha")) == 0)
        {
            v.lVal |= TEXTAUTOSPACE_ALPHA;
        }
        else if(StrCmpIC(pszTokenBegin, _T("ideograph-parenthesis")) == 0)
        {
            v.lVal |= TEXTAUTOSPACE_PARENTHESIS;
        }
        else if(StrCmpIC(pszTokenBegin, _T("none")) == 0)
        {
            v.lVal = TEXTAUTOSPACE_NONE;
        }
        else
        {
            fInvalidValues = TRUE;
        }
    }

    hr = CAttrArray::Set(ppAA, DISPID_A_TEXTAUTOSPACE, &v,
        (PROPERTYDESC*)&s_propdescCStyletextAutospace, CAttrValue::AA_StyleAttribute, wFlags);

Cleanup:
    delete[] pszCopy;
    RRETURN1(fInvalidValues?(hr?hr:E_INVALIDARG):hr, E_INVALIDARG);
}