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 }
//+------------------------------------------------------------------------ // // 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); }
int CompareColorValuePairsByName(const void* pv1, const void* pv2) { return StrCmpIC(((struct COLORVALUE_PAIR*)pv1)->szName, ((struct COLORVALUE_PAIR*)pv2)->szName); }
//+------------------------------------------------------------------------ // // 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); }