// ---------------------------------------------------------------------------- BrowseMarks* ProjectData::HashAddBrowse_Marks( const wxString fullPath ) // ---------------------------------------------------------------------------- { // EditorManager calls fail during the OnEditorClose event //EditorBase* eb = Manager::Get()->GetEditorManager()->GetEditor(filename); EditorBase* eb = m_pEdMgr->GetEditor(fullPath); #if defined(LOGGING) if(not eb) asm("int3"); /*trap*/ #endif if(not eb) return 0; wxString filePath = eb->GetFilename(); if (filePath.IsEmpty()) return 0; // don't add duplicates BrowseMarks* pBrowse_Marks = GetBrowse_MarksFromHash( filePath ); if (pBrowse_Marks) return pBrowse_Marks ; pBrowse_Marks = new BrowseMarks( fullPath ); if (pBrowse_Marks) m_FileBrowse_MarksArchive[filePath] = pBrowse_Marks; // allocate the equivalent BookMarks hash HashAddBook_Marks( fullPath ); return pBrowse_Marks; }
void MacrosManager::ReplaceMacros(wxString& buffer, ProjectBuildTarget* target, bool subrequest) { if (buffer.IsEmpty()) return; static const wxString delim(_T("$%[")); if ( buffer.find_first_of(delim) == wxString::npos ) return; cbProject* project = target ? target->GetParentProject() : Manager::Get()->GetProjectManager()->GetActiveProject(); EditorBase* editor = Manager::Get()->GetEditorManager()->GetActiveEditor(); if (!target) { if (project) { // use the currently compiling target target = project->GetCurrentlyCompilingTarget(); // if none, if (!target) // use the last known active target target = project->GetBuildTarget(project->GetActiveBuildTarget()); } } if (project != m_LastProject || target != m_LastTarget || (editor && (editor->GetFilename() != m_ActiveEditorFilename)) ) RecalcVars(project, editor, target); wxString search; wxString replace; if (buffer.find(_T("$if")) != wxString::npos) while (m_RE_If.Matches(buffer)) { search = m_RE_If.GetMatch(buffer, 0); replace = EvalCondition(m_RE_If.GetMatch(buffer, 1), m_RE_If.GetMatch(buffer, 3), m_RE_If.GetMatch(buffer, 5), target); buffer.Replace(search, replace, false); } while (m_RE_Script.Matches(buffer)) { search = m_RE_Script.GetMatch(buffer, 1); replace = Manager::Get()->GetScriptingManager()->LoadBufferRedirectOutput(m_RE_Script.GetMatch(buffer, 2)); buffer.Replace(search, replace, false); } while (m_RE_ToAbsolutePath.Matches(buffer)) { search = m_RE_ToAbsolutePath.GetMatch(buffer, 0); const wxString relativePath = m_RE_ToAbsolutePath.GetMatch(buffer, 1); wxFileName fn(relativePath); fn.MakeAbsolute(); replace = fn.GetFullPath(); buffer.Replace(search, replace, false); } while (m_RE_To83Path.Matches(buffer)) { search = m_RE_To83Path.GetMatch(buffer, 0); const wxString path = m_RE_To83Path.GetMatch(buffer, 1); wxFileName fn(path); fn.MakeAbsolute(); // make absolute before translating to 8.3 notation replace = fn.GetShortPath(); buffer.Replace(search, replace, false); } while (m_RE_Unix.Matches(buffer)) { replace.Empty(); wxString search = m_RE_Unix.GetMatch(buffer, 2); wxString var = m_RE_Unix.GetMatch(buffer, 3).Upper(); if (var.GetChar(0) == _T('#')) replace = UnixFilename(m_UserVarMan->Replace(var)); else { if (var.compare(const_COIN) == 0) replace.assign(1u, rand() & 1 ? _T('1') : _T('0')); else if (var.compare(const_RANDOM) == 0) replace = wxString::Format(_T("%d"), rand() & 0xffff); else { MacrosMap::iterator it; if ((it = m_Macros.find(var)) != m_Macros.end()) replace = it->second; } } const wxChar l = search.Last(); // make non-braced variables work if (l == _T('/') || l == _T('\\') || l == _T('$') || l == _T(' ')) replace.append(l); if (replace.IsEmpty()) wxGetEnv(var, &replace); buffer.Replace(search, replace, false); } while (m_RE_DOS.Matches(buffer)) { replace.Empty(); wxString search = m_RE_DOS.GetMatch(buffer, 2); wxString var = m_RE_DOS.GetMatch(buffer, 3).Upper(); if (var.GetChar(0) == _T('#')) replace = UnixFilename(m_UserVarMan->Replace(var)); else { if (var.compare(const_COIN) == 0) replace.assign(1u, rand() & 1 ? _T('1') : _T('0')); else if (var.compare(const_RANDOM) == 0) replace = wxString::Format(_T("%d"), rand() & 0xffff); else { MacrosMap::iterator it; if ((it = m_Macros.find(var)) != m_Macros.end()) replace = it->second; } } if (replace.IsEmpty()) wxGetEnv(var, &replace); buffer.Replace(search, replace, false); } if (!subrequest) { buffer.Replace(_T("%%"), _T("%")); buffer.Replace(_T("$$"), _T("$")); } }