ezStringIterator ezPathUtils::GetFileName(const char* szPath, const char* szPathEnd) { // make sure szPathEnd is valid ezStringUtils::UpdateStringEnd(szPath, szPathEnd); const char* szSeparator = FindPreviousSeparator(szPath, szPathEnd); const char* szDot = ezStringUtils::FindLastSubString(szPath, ".", szPathEnd); if (szDot < szSeparator) // includes (szDot == nullptr), szSeparator will never be nullptr here -> no extension { return ezStringIterator(szSeparator + 1, szPathEnd, szSeparator + 1); } if (szSeparator == nullptr) { if (szDot == nullptr) // no folder, no extension -> the entire thing is just a name return ezStringIterator(szPath, szPathEnd, szPath); return ezStringIterator(szPath, szDot, szPath); // no folder, but an extension -> remove the extension } // now: there is a separator AND an extension return ezStringIterator(szSeparator + 1, szDot, szSeparator + 1); }
ezStringIterator ezPathUtils::GetFileNameAndExtension(const char* szPath, const char* szPathEnd) { ezStringUtils::UpdateStringEnd(szPath, szPathEnd); const char* szSeparator = FindPreviousSeparator(szPath, szPathEnd); if (szSeparator == nullptr) return ezStringIterator(szPath, szPathEnd, szPath); return ezStringIterator(szSeparator + 1, szPathEnd, szSeparator + 1); }
ezStringIterator ezPathUtils::GetFileExtension(const char* szPath, const char* szPathEnd) { ezStringUtils::UpdateStringEnd(szPath, szPathEnd); const char* szDot = ezStringUtils::FindLastSubString(szPath, ".", nullptr, szPathEnd); if (szDot == nullptr) return ezStringIterator(nullptr); // find the last separator in the string const char* szSeparator = FindPreviousSeparator(szPath, szPathEnd); if (szSeparator > szDot) return ezStringIterator(nullptr); return ezStringIterator(szDot + 1, szPathEnd, szDot + 1); }
ezStringIterator ezPathUtils::GetFileDirectory(const char* szPath, const char* szPathEnd) { // make sure szPathEnd is valid ezStringUtils::UpdateStringEnd(szPath, szPathEnd); ezStringIterator end (szPath, szPathEnd, szPath); end.ResetToBack(); // if it already ends in a path separator, do not return a different directory if (IsPathSeparator(end.GetCharacter())) return ezStringIterator(szPath, szPathEnd, szPath); // find the last separator in the string const char* szSeparator = FindPreviousSeparator(szPath, szPathEnd); // no path separator -> root dir -> return the empty path if (szSeparator == nullptr) return ezStringIterator(nullptr); return ezStringIterator(szPath, szSeparator + 1, szPath); }
void OnScreenLogWriter::LogMessageHandler(const ezLoggingEventData& eventData) { // ignore registered input sloat if(ezStringUtils::FindSubString(eventData.m_szText, "Registered Input Slot") != NULL) return; // ignore groups if(eventData.m_EventType == ezLogMsgType::BeginGroup) { m_sCurrentGroup = eventData.m_szText; return; } if(eventData.m_EventType == ezLogMsgType::EndGroup) { m_sCurrentGroup = ""; return; } // split up every line const char* text = eventData.m_szText; do { ezStringBuilder logtext; if(m_sCurrentGroup != "") { logtext.Append("["); logtext.Append(m_sCurrentGroup.GetData()); logtext.Append("] "); } const char* nextLine = ezStringIterator(text).FindSubString("\n"); if(nextLine != NULL) { ezUInt32 count = static_cast<ezUInt32>(nextLine-text); ezHybridArray<char, 128> linecpy; linecpy.SetCount(count); char* data = static_cast<ezArrayPtr<char>>(linecpy).GetPtr(); ezStringUtils::Copy(data, count, text); logtext.Append(data); text = nextLine+1; } else { logtext.Append(text); text = NULL; } LogEntry newEntry; newEntry.text = logtext.GetData(); switch(eventData.m_EventType) { case ezLogMsgType::InfoMsg: newEntry.color = ezColor(0.4f, 0.4f, 0.4f); break; case ezLogMsgType::SeriousWarningMsg: case ezLogMsgType::WarningMsg: newEntry.color = ezColor(1.0f, 0.7f, 0.1f); break; case ezLogMsgType::ErrorMsg: newEntry.color = ezColor::GetRed(); break; case ezLogMsgType::SuccessMsg: newEntry.color = ezColor::GetGreen(); break; default: newEntry.color = ezColor::GetWhite(); break; } if(!m_MessageBuffer.CanAppend()) { m_fOldestItemFade = 1.0f; m_MessageBuffer.PopFront(); } m_MessageBuffer.PushBack(newEntry); } while(text != NULL); }