/* Name: FilenameQuickTexts Purpose: Replace quick texts in the file name Parameters: sFile - Name of the file to replace specific chars Return: New edited string */ 'FilenameQuickTexts' : function (sFile, bOverlayText) { bOverlayText = !!bOverlayText; var nNumber = -1, self = this; // Replace format tags sFile = sFile.replace(/([\\]*)!(\w+|#)/g, function(sMatch, sBackslashes, sTag) { var nStart = sBackslashes.length, sReplace = ''; if (IsEscaped(sBackslashes)) { // Escaped, return unedited return sMatch; } else switch(sTag) { case '#' : // !# - Current image number if (nNumber === -1) { nNumber = objPreferences['lFileNumber']; if (!bOverlayText) { // Increase file number ++objPreferences['lFileNumber']; Registry_SetKeyValue(HKCU, RegistryInit(), 'lFileNumber', objPreferences['lFileNumber'], REG_DWORD); } } sReplace = nNumber; break; case 'email' : // !email - Current user's e-mail sReplace = Messenger.MyEmail; break; case 'date' : // !date - Current date in user's locale sReplace = self.GetLocaleDate(); break; case 'time' : case 'time24' : // !date - Current time in user's locale sReplace = self.GetLocaleTime(); break; default : // Custom date/time format sReplace = new Date().toString(sTag); } // Return replacement return sMatch.substr(0, nStart) + sReplace; }); // Parse backslashes sFile = sFile.replace(/[\\]+/g, function(sMatch) { // Keep only half of the backslashes, rounded down return sMatch.substr(0, Math.floor(sMatch.length / 2)); }); // Remove invalid characters in file name if (!bOverlayText) { sFile = sFile.replace(/[\\\/\:\*>"<>\|]/g, ''); } return sFile; // Tests if a sequence of backslashes escapes the following character // A character is considered escaped when it's preceded by an odd number of backslashes function IsEscaped(sBackslashes) { return (sBackslashes.length & 1) === 1; } },