STDMETHODIMP Language::GetSource(IVsTextBuffer* pBuffer, ISparkSource** ppSource) { HRESULT hr = S_OK; CComCritSecLock<CComCriticalSection> lock(_sourcesLock); CComPtr<IUnknown> key; _HR(pBuffer->QueryInterface(&key)); int index = _sources.FindKey(key); if (index == -1) { CComPtr<ISparkSource> source; SourceInit init = {_site}; _HR(pBuffer->QueryInterface(&init._primaryBuffer)); _HR(Source::CreateInstance(init, &source)); _HR(_supervisor->OnSourceAssociated(source)); _HR(source->QueryInterface(ppSource)); if (SUCCEEDED(hr)) _sources.Add(key.Detach(), source.Detach()); } else { _sources.GetValueAt(index)->QueryInterface(ppSource); } return hr; }
STDMETHODIMP Language::GetColorizer( /* [in] */ __RPC__in_opt IVsTextLines *pBuffer, /* [out] */ __RPC__deref_out_opt IVsColorizer **ppColorizer) { HRESULT hr = S_OK; CComPtr<IVsProvideColorableItems> csharpItems; _HR(_site->QueryService(__uuidof(CSharp), &csharpItems)); int csharpItemCount; _HR(csharpItems->GetItemCount(&csharpItemCount)); ColorizerInit init = {this, pBuffer, csharpItemCount}; _HR(Colorizer::CreateInstance(init, ppColorizer)); return hr; }
void _WIN(BOOL x, const char *filename, int line) { if (!x) { _HR(HRESULT_FROM_WIN32(GetLastError()), filename, line); } }
STDMETHODIMP Language::GetItemCount( /* [out] */ __RPC__out int *piCount) { HRESULT hr = S_OK; CComPtr<IVsProvideColorableItems> csharpItems; _HR(_site->QueryService(__uuidof(CSharp), &csharpItems)); int csharpItemCount; _HR(csharpItems->GetItemCount(&csharpItemCount)); CComPtr<IVsProvideColorableItems> sparkItems; _HR(_supervisor->QueryInterface(&sparkItems)); int sparkItemCount; _HR(sparkItems->GetItemCount(&sparkItemCount)); *piCount = csharpItemCount + sparkItemCount; return hr; }
STDMETHODIMP Language::GetCodeWindowManager( /* [in] */ __RPC__in_opt IVsCodeWindow *pCodeWin, /* [out] */ __RPC__deref_out_opt IVsCodeWindowManager **ppCodeWinMgr) { HRESULT hr = S_OK; CodeWindowManagerInit init = {this, pCodeWin}; _HR(CodeWindowManager::CreateInstance(init, ppCodeWinMgr)); return hr; }
extern "C" __declspec(dllexport) HRESULT __stdcall BindApplicationMain(ApplicationMainInfo* pInfo) { HRESULT hr = S_OK; // LOCK g_ IKatanaManagerPtr katanaManager = g_katanaManager; _HR(katanaManager->BindApplicationMain(pInfo)); return hr; }
STDMETHODIMP CodeWindowManager::OnNewView(IVsTextView *pView) { HRESULT hr = S_OK; CComPtr<IUnknown> filter; TextViewFilterInit init = {_language, pView}; _HR(TextViewFilter::CreateInstance(init, &filter)); if (SUCCEEDED(hr)) { CComCritSecLock<CComCriticalSection> lock(_filtersLock); _filters.Add(filter.Detach()); } return hr; }
STDMETHODIMP Language::GetColorableItem( /* [in] */ int iIndex, /* [out] */ __RPC__deref_out_opt IVsColorableItem **ppItem) { HRESULT hr = S_OK; // return csharp color info for lower band CComPtr<IVsProvideColorableItems> csharpItems; _HR(_site->QueryService(__uuidof(CSharp), &csharpItems)); // default@[0] : reserved // csharpItemCount@[1..csharpItemCount] : contained language colors // sparkItemCount@[csharpItemCount+1..csharpItemCount+sparkItemCount] : spark language colors int csharpItemCount; _HR(csharpItems->GetItemCount(&csharpItemCount)); if (SUCCEEDED(hr) && iIndex <= csharpItemCount) { _HR(csharpItems->GetColorableItem(iIndex, ppItem)); CComBSTR name; _HR((*ppItem)->GetDisplayName(&name)); return hr; } // return spark color info for upper band CComPtr<IVsProvideColorableItems> sparkItems; _HR(_supervisor->QueryInterface(&sparkItems)); int sparkItemCount; _HR(sparkItems->GetItemCount(&sparkItemCount)); if (SUCCEEDED(hr) && iIndex <= csharpItemCount + sparkItemCount) { _HR(sparkItems->GetColorableItem(iIndex - csharpItemCount, ppItem)); CComBSTR name; _HR((*ppItem)->GetDisplayName(&name)); return hr; } return E_INVALIDARG; }
HRESULT TextViewFilter::FinalConstruct() { HRESULT hr = S_OK; // get references to existing source, buffer coordinator, and contained language instances CComPtr<IVsTextLines> textLines; _HR(_textView->GetBuffer(&textLines)); _HR(_language->GetSource(textLines, &_source)); CComPtr<IVsTextBufferCoordinator> bufferCoordinator; _HR(_source->GetTextBufferCoordinator(&bufferCoordinator)); CComPtr<IVsContainedLanguage> containedLanguage; _HR(_source->GetContainedLanguage(&containedLanguage)); // Create intellisense host from text view's host provider CComPtr<IVsTextViewIntellisenseHostProvider> intellisenseHostProvider; _HR(_textView->QueryInterface(&intellisenseHostProvider)); _HR(intellisenseHostProvider->CreateIntellisenseHost(bufferCoordinator, __uuidof(_intellisenseHost), (void**)&_intellisenseHost)); // Obtain the contained text view filter and command target // to sergee еще проблема тут _HR(containedLanguage->GetTextViewFilter(_intellisenseHost, this, &_containedTextViewFilter)); _HR(_containedTextViewFilter->QueryInterface(&_containedCommandTarget)); // Wedge command target and text view filter into chain _HR(_textView->AddCommandFilter(_containedCommandTarget, &_nextCommandTarget)); // Hold onto the targets that are chained after the ones we've added _chainCommandTarget = _nextCommandTarget; _chainTextViewFilter = _nextCommandTarget; CComPtr<IVsIntellisenseProjectManager> projectManager; _HR(_source->GetIntellisenseProjectManager(&projectManager)); _HR(projectManager->OnEditorReady()); _HR(projectManager->CompleteIntellisenseProjectLoad()); return hr; }