using System; using System.Collections.Generic; using System.ComponentModel; //using System.Data; //using System.Drawing; //using System.Text; //using System.Windows.Forms; //using CommandLine.Utility; using System.IO; using System.Diagnostics; namespace Snap2HTML { class Utils { // Hack to sort folders correctly even if they have spaces/periods in them public static List SortDirList( List lstDirs ) { for( int n = 0; n < lstDirs.Count; n++ ) { lstDirs[n] = lstDirs[n].Replace( " ", "1|1" ); lstDirs[n] = lstDirs[n].Replace( ".", "2|2" ); } lstDirs.Sort(); for( int n = 0; n < lstDirs.Count; n++ ) { lstDirs[n] = lstDirs[n].Replace( "1|1", " " ); lstDirs[n] = lstDirs[n].Replace( "2|2", "." ); } return lstDirs; } // Replaces characters that may appear in filenames/paths that have special meaning to JavaScript // Info on u2028/u2029: https://en.wikipedia.org/wiki/Newline#Unicode public static string MakeCleanJsString( string s ) { return s.Replace( "\\", "\\\\" ) .Replace( "&", "&" ) .Replace( "\u2028", "" ) .Replace( "\u2029", "" ) .Replace( "\u0004", "" ); } // Test string for matches against a wildcard pattern. Use ? and * as wildcards. (Wrapper around RegEx) public static bool IsWildcardMatch( String wildcard, String text, bool casesensitive ) { System.Text.StringBuilder sb = new System.Text.StringBuilder( wildcard.Length + 10 ); sb.Append( "^" ); for( int i = 0; i < wildcard.Length; i++ ) { char c = wildcard[i]; switch( c ) { case '*': sb.Append( ".*" ); break; case '?': sb.Append( "." ); break; default: sb.Append( System.Text.RegularExpressions.Regex.Escape( wildcard[i].ToString() ) ); break; } } sb.Append( "$" ); System.Text.RegularExpressions.Regex regex; if( casesensitive ) regex = new System.Text.RegularExpressions.Regex( sb.ToString(), System.Text.RegularExpressions.RegexOptions.None ); else regex = new System.Text.RegularExpressions.Regex( sb.ToString(), System.Text.RegularExpressions.RegexOptions.IgnoreCase ); return regex.IsMatch( text ); } public static int ToUnixTimestamp( DateTime value ) { return (int)Math.Truncate( ( value.ToUniversalTime().Subtract( new DateTime( 1970, 1, 1 ) ) ).TotalSeconds ); } public static long ParseLong(string s) { long num; if( Int64.TryParse( s, out num ) ) { return num; } return 0; } } }