DKStringW::StringArray DKStringW::Split(const DKStringW& delimiter, bool ignoreEmptyString) const { StringArray strings; size_t len = Length(); size_t dlen = delimiter.Length(); if (dlen == 0) { strings.Add(*this); return strings; } long begin = 0; while (begin < len) { long next = this->Find(delimiter, begin); if (next >= begin) { DKStringW subString = this->Mid(begin, next - begin); if (ignoreEmptyString == false || subString.Length() > 0) strings.Add(this->Mid(begin, next - begin)); begin = next + dlen; } else { DKStringW subString = this->Right(begin); if (subString.Length() > 0) strings.Add(subString); break; } } return strings; }
DKStringW::StringArray DKStringW::SplitByCharactersInSet(const CharacterSet& cs, bool ignoreEmptyString) const { StringArray strings; size_t len = Length(); size_t numCs = cs.Count(); if (numCs == 0) { strings.Add(*this); return strings; } long begin = 0; while (begin < len) { long next = this->FindAnyCharactersInSet(cs, begin); if (next >= begin) { DKStringW subString = this->Mid(begin, next - begin); if (ignoreEmptyString == false || subString.Length() > 0) strings.Add(subString); begin = next + 1; } else { DKStringW subString = this->Right(begin); if (subString.Length() > 0) strings.Add(subString); break; } } return strings; }
////////////////////////////////////////////////////////////////////////////////// //Function: MyFontEnumProc // //Description: Call back function for EnumFontFamilies. // Loads CArray of Cstrings with the passed in font's name. // //Paramaters: lpelf - pointer to logical-font data // lpntm - pointer to physical-font data // FontType - type of font // lParam - address of application-defined data // //Returns: TRUE so fonts keep getting retrieved. // ////////////////////////////////////////////////////////////////////////////////// extern "C" int CALLBACK MyFontEnumProc( const ENUMLOGFONT FAR *lpelf, // pointer to logical-font data const NEWTEXTMETRIC FAR *lpntm, // pointer to physical-font data unsigned long FontType, // type of font LPARAM lParam // address of application-defined data ) { StringArray* pFontList = (StringArray*)lParam; int nFromOutline = 0; // //If the font is an Atm font or a Touch Type font, load it into the list. if ((ATMProperlyLoaded() && ATMFontAvailable((char*)lpelf->elfLogFont.lfFaceName, FW_NORMAL, FALSE, FALSE, FALSE, &nFromOutline)) || FontType & TRUETYPE_FONTTYPE) { pFontList->Add( CString(lpelf->elfLogFont.lfFaceName) ); } // // we want to continue... return TRUE; //Get rid of unreferenced formal parameter warning (on warning level 4 )... lpntm = lpntm; }
void AfxFindDictionaries(StringArray &aLanguage, StringArray &aDialect) { CString dicFileMatch = CConfiguration::GetInstance()->m_strSpellDictionaryPath + _T("\\*.dic"); WIN32_FIND_DATA dirInfo; HANDLE hFile; BOOL bNext = TRUE; hFile = FindFirstFile(dicFileMatch,&dirInfo); while (hFile != INVALID_HANDLE_VALUE && bNext) { // Dictionary file format LANG_DIALACT{-extra}?.dic // Example: de_DE.dic en_US-slang.dic // Get the language and dialect of all installed dictionaries. TCHAR* dash; TCHAR* dot; dash = _tcschr(dirInfo.cFileName,_T('_')); if (dash != NULL) dot = _tcschr(dash,_T('.')); else dot = NULL; if ((dash != NULL) && (dot != NULL)) { CString lang(dirInfo.cFileName,dash - dirInfo.cFileName); CString dialect(dash + 1,dot - dash - 1); aDialect.Add(dialect); aLanguage.Add(lang); } bNext = FindNextFile(hFile,&dirInfo); } FindClose(hFile); }
/////////////////////////////////////////////////////////////////////////////// // [in] fullPath : true to get paths as dir+name instead of name only StringArray Directory::GetFileNames(const String& dirPath, const String& joker, bool fullPaths) { StringArray filePaths; StringArray jokerPatterns; Array<Joker> jokers; if( !joker.IsEmpty() ) { jokerPatterns = joker.Split('|'); } else { jokerPatterns.Add("*"); } jokers.EnsureCapacity(jokerPatterns.GetSize()); foreach(jokerPatterns, i) { jokers.Add( Joker(jokerPatterns[i]) ); }
// Use the legacy main on Linux and assume UTF-8 int main(int argc, char** argv) #endif { String cmdLine = Process::GetCommandLine(); ArgvParser ap(argc, argv); if( !ap.HasFlag("file") ) { // Display usage String version = "PngOptimizerCL 2.4.1"; #if defined(_M_X64) version = version + String(" (x64)"); #elif defined(_M_IX86) version = version + String(" (x86)"); #endif Console::WriteLine(version + " \xA9 2002/2014 Hadrien Nilsson - psydk.org"); Console::WriteLine("Converts GIF, BMP and TGA files to optimized PNG files."); Console::WriteLine("Optimizes and cleans PNG files."); Console::WriteLine(""); Console::WriteLine("Usage: PngOptimizerCL -file:\"yourfile.png\" [-recurs]"); POEngineSettings::WriteArgvUsage(" "); Console::WriteLine(""); Console::WriteLine("Values enclosed with [] are optional."); Console::WriteLine("Chunk option meaning: R=Remove, K=Keep, F=Force. 0|1|2 can be used too."); Console::WriteLine(""); Console::WriteLine("Input examples:"); Console::WriteLine("Handle a specific file:"); Console::WriteLine(" PngOptimizerCL -file:\"icon.png\""); Console::WriteLine("Handle specific file types in the current directory:"); Console::WriteLine(" PngOptimizerCL -file:\"*.png|*.bmp\""); Console::WriteLine("Handle any supported file in the current directory:"); Console::WriteLine(" PngOptimizerCL -file:\"*\""); Console::WriteLine("Handle specific file types in the current directory (recursive):"); Console::WriteLine(" PngOptimizerCL -file:\".png|*.bmp\" -recurs"); Console::WriteLine("Handle a specific directory (recursive):"); Console::WriteLine(" PngOptimizerCL -file:\"gfx/\""); Console::WriteLine(""); if( Console::IsOwned() ) { Console::Write("Press any key to continue"); Console::WaitForKey(); } return 0; } POApplicationConsole app; // PngOptimizer.exe -file:"myfile.png" POEngine engine; if( !engine.WarmUp() ) { Console::WriteLine("Warm-up failed"); return 1; } engine.Progressing.Handle(&app, &POApplicationConsole::OnEngineProgressing); engine.m_settings.LoadFromArgv(ap); ////////////////////////////////////////////////////////////////// String filePath = ap.GetFlagString("file"); String dir, fileName; FilePath::Split(filePath, dir, fileName); StringArray filePaths; String joker; if( ap.HasFlag("recurs") ) { filePaths.Add(dir); joker = fileName; } else { filePaths = Directory::GetFileNames(dir, fileName, true); if( filePaths.IsEmpty() ) { // For PngOptimizerCL, it is an error if we have nothing to optimize Color32 col = POEngine::ColorFromTextType(POEngine::TT_ErrorMsg); Console::SetTextColor(col); Console::WriteLine("File not found: " + filePath); Console::ResetTextColor(); return 1; } } if( !engine.OptimizeFiles(filePaths, joker) ) { return 1; } return 0; }