porting shell from nuget to local
This commit is contained in:
1 parent
d971be8816
commit
035ef17569
164 files changed
+10363
-11
No files matched your search
@@ -0,0 +1,822 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
namespace Standard
|
||||
{
|
||||
internal static class Utility
|
||||
{
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
private static bool _MemCmp(IntPtr left, IntPtr right, long cb)
|
||||
{
|
||||
int num = 0;
|
||||
while ((long)num < cb - 8L)
|
||||
{
|
||||
long num2 = Marshal.ReadInt64(left, num);
|
||||
long num3 = Marshal.ReadInt64(right, num);
|
||||
if (num2 != num3)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
num += 8;
|
||||
}
|
||||
while ((long)num < cb)
|
||||
{
|
||||
byte b = Marshal.ReadByte(left, num);
|
||||
byte b2 = Marshal.ReadByte(right, num);
|
||||
if (b != b2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
num++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static int RGB(Color c)
|
||||
{
|
||||
return (int)c.R | (int)c.G << 8 | (int)c.B << 16;
|
||||
}
|
||||
|
||||
public static Color ColorFromArgbDword(uint color)
|
||||
{
|
||||
return Color.FromArgb((byte)((color & 4278190080u) >> 24), (byte)((color & 16711680u) >> 16), (byte)((color & 65280u) >> 8), (byte)(color & 255u));
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static int GET_X_LPARAM(IntPtr lParam)
|
||||
{
|
||||
return Utility.LOWORD(lParam.ToInt32());
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static int GET_Y_LPARAM(IntPtr lParam)
|
||||
{
|
||||
return Utility.HIWORD(lParam.ToInt32());
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static int HIWORD(int i)
|
||||
{
|
||||
return (int)((short)(i >> 16));
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static int LOWORD(int i)
|
||||
{
|
||||
return (int)((short)(i & 65535));
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool AreStreamsEqual(Stream left, Stream right)
|
||||
{
|
||||
if (left == null)
|
||||
{
|
||||
return right == null;
|
||||
}
|
||||
if (right == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!left.CanRead || !right.CanRead)
|
||||
{
|
||||
throw new NotSupportedException("The streams can't be read for comparison");
|
||||
}
|
||||
if (left.Length != right.Length)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
int num = (int)left.Length;
|
||||
left.Position = 0L;
|
||||
right.Position = 0L;
|
||||
int i = 0;
|
||||
int num2 = 0;
|
||||
byte[] array = new byte[512];
|
||||
byte[] array2 = new byte[512];
|
||||
GCHandle gchandle = GCHandle.Alloc(array, GCHandleType.Pinned);
|
||||
IntPtr left2 = gchandle.AddrOfPinnedObject();
|
||||
GCHandle gchandle2 = GCHandle.Alloc(array2, GCHandleType.Pinned);
|
||||
IntPtr right2 = gchandle2.AddrOfPinnedObject();
|
||||
bool result;
|
||||
try
|
||||
{
|
||||
while (i < num)
|
||||
{
|
||||
int num3 = left.Read(array, 0, array.Length);
|
||||
int num4 = right.Read(array2, 0, array2.Length);
|
||||
if (num3 != num4)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!Utility._MemCmp(left2, right2, (long)num3))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i += num3;
|
||||
num2 += num4;
|
||||
}
|
||||
result = true;
|
||||
}
|
||||
finally
|
||||
{
|
||||
gchandle.Free();
|
||||
gchandle2.Free();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool GuidTryParse(string guidString, out Guid guid)
|
||||
{
|
||||
Verify.IsNeitherNullNorEmpty(guidString, "guidString");
|
||||
try
|
||||
{
|
||||
guid = new Guid(guidString);
|
||||
return true;
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
}
|
||||
catch (OverflowException)
|
||||
{
|
||||
}
|
||||
guid = default(Guid);
|
||||
return false;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool IsFlagSet(int value, int mask)
|
||||
{
|
||||
return 0 != (value & mask);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool IsFlagSet(uint value, uint mask)
|
||||
{
|
||||
return 0u != (value & mask);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool IsFlagSet(long value, long mask)
|
||||
{
|
||||
return 0L != (value & mask);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool IsFlagSet(ulong value, ulong mask)
|
||||
{
|
||||
return 0UL != (value & mask);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool IsOSVistaOrNewer
|
||||
{
|
||||
get
|
||||
{
|
||||
return Utility._osVersion >= new Version(6, 0);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool IsOSWindows7OrNewer
|
||||
{
|
||||
get
|
||||
{
|
||||
return Utility._osVersion >= new Version(6, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsPresentationFrameworkVersionLessThan4
|
||||
{
|
||||
get
|
||||
{
|
||||
return Utility._presentationFrameworkVersion < new Version(4, 0);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")]
|
||||
public static IntPtr GenerateHICON(ImageSource image, Size dimensions)
|
||||
{
|
||||
if (image == null)
|
||||
{
|
||||
return IntPtr.Zero;
|
||||
}
|
||||
BitmapFrame bitmapFrame = image as BitmapFrame;
|
||||
if (bitmapFrame != null)
|
||||
{
|
||||
bitmapFrame = Utility.GetBestMatch(bitmapFrame.Decoder.Frames, (int)dimensions.Width, (int)dimensions.Height);
|
||||
}
|
||||
else
|
||||
{
|
||||
Rect rectangle = new Rect(0.0, 0.0, dimensions.Width, dimensions.Height);
|
||||
double num = dimensions.Width / dimensions.Height;
|
||||
double num2 = image.Width / image.Height;
|
||||
if (image.Width <= dimensions.Width && image.Height <= dimensions.Height)
|
||||
{
|
||||
rectangle = new Rect((dimensions.Width - image.Width) / 2.0, (dimensions.Height - image.Height) / 2.0, image.Width, image.Height);
|
||||
}
|
||||
else if (num > num2)
|
||||
{
|
||||
double num3 = image.Width / image.Height * dimensions.Width;
|
||||
rectangle = new Rect((dimensions.Width - num3) / 2.0, 0.0, num3, dimensions.Height);
|
||||
}
|
||||
else if (num < num2)
|
||||
{
|
||||
double num4 = image.Height / image.Width * dimensions.Height;
|
||||
rectangle = new Rect(0.0, (dimensions.Height - num4) / 2.0, dimensions.Width, num4);
|
||||
}
|
||||
DrawingVisual drawingVisual = new DrawingVisual();
|
||||
DrawingContext drawingContext = drawingVisual.RenderOpen();
|
||||
drawingContext.DrawImage(image, rectangle);
|
||||
drawingContext.Close();
|
||||
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap((int)dimensions.Width, (int)dimensions.Height, 96.0, 96.0, PixelFormats.Pbgra32);
|
||||
renderTargetBitmap.Render(drawingVisual);
|
||||
bitmapFrame = BitmapFrame.Create(renderTargetBitmap);
|
||||
}
|
||||
IntPtr result;
|
||||
using (MemoryStream memoryStream = new MemoryStream())
|
||||
{
|
||||
new PngBitmapEncoder
|
||||
{
|
||||
Frames =
|
||||
{
|
||||
bitmapFrame
|
||||
}
|
||||
}.Save(memoryStream);
|
||||
using (ManagedIStream managedIStream = new ManagedIStream(memoryStream))
|
||||
{
|
||||
IntPtr zero = IntPtr.Zero;
|
||||
try
|
||||
{
|
||||
Status status = NativeMethods.GdipCreateBitmapFromStream(managedIStream, out zero);
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
result = IntPtr.Zero;
|
||||
}
|
||||
else
|
||||
{
|
||||
IntPtr intPtr;
|
||||
status = NativeMethods.GdipCreateHICONFromBitmap(zero, out intPtr);
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
result = IntPtr.Zero;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = intPtr;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
Utility.SafeDisposeImage(ref zero);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static BitmapFrame GetBestMatch(IList<BitmapFrame> frames, int width, int height)
|
||||
{
|
||||
return Utility._GetBestMatch(frames, Utility._GetBitDepth(), width, height);
|
||||
}
|
||||
|
||||
private static int _MatchImage(BitmapFrame frame, int bitDepth, int width, int height, int bpp)
|
||||
{
|
||||
return 2 * Utility._WeightedAbs(bpp, bitDepth, false) + Utility._WeightedAbs(frame.PixelWidth, width, true) + Utility._WeightedAbs(frame.PixelHeight, height, true);
|
||||
}
|
||||
|
||||
private static int _WeightedAbs(int valueHave, int valueWant, bool fPunish)
|
||||
{
|
||||
int num = valueHave - valueWant;
|
||||
if (num < 0)
|
||||
{
|
||||
num = (fPunish ? -2 : -1) * num;
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
private static BitmapFrame _GetBestMatch(IList<BitmapFrame> frames, int bitDepth, int width, int height)
|
||||
{
|
||||
int num = int.MaxValue;
|
||||
int num2 = 0;
|
||||
int index = 0;
|
||||
bool flag = frames[0].Decoder is IconBitmapDecoder;
|
||||
int num3 = 0;
|
||||
while (num3 < frames.Count && num != 0)
|
||||
{
|
||||
int num4 = flag ? frames[num3].Thumbnail.Format.BitsPerPixel : frames[num3].Format.BitsPerPixel;
|
||||
if (num4 == 0)
|
||||
{
|
||||
num4 = 8;
|
||||
}
|
||||
int num5 = Utility._MatchImage(frames[num3], bitDepth, width, height, num4);
|
||||
if (num5 < num)
|
||||
{
|
||||
index = num3;
|
||||
num2 = num4;
|
||||
num = num5;
|
||||
}
|
||||
else if (num5 == num && num2 < num4)
|
||||
{
|
||||
index = num3;
|
||||
num2 = num4;
|
||||
}
|
||||
num3++;
|
||||
}
|
||||
return frames[index];
|
||||
}
|
||||
|
||||
private static int _GetBitDepth()
|
||||
{
|
||||
if (Utility.s_bitDepth == 0)
|
||||
{
|
||||
using (SafeDC desktop = SafeDC.GetDesktop())
|
||||
{
|
||||
Utility.s_bitDepth = NativeMethods.GetDeviceCaps(desktop, DeviceCap.BITSPIXEL) * NativeMethods.GetDeviceCaps(desktop, DeviceCap.PLANES);
|
||||
}
|
||||
}
|
||||
return Utility.s_bitDepth;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void SafeDeleteFile(string path)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
File.Delete(path);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void SafeDeleteObject(ref IntPtr gdiObject)
|
||||
{
|
||||
IntPtr intPtr = gdiObject;
|
||||
gdiObject = IntPtr.Zero;
|
||||
if (IntPtr.Zero != intPtr)
|
||||
{
|
||||
NativeMethods.DeleteObject(intPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void SafeDestroyIcon(ref IntPtr hicon)
|
||||
{
|
||||
IntPtr intPtr = hicon;
|
||||
hicon = IntPtr.Zero;
|
||||
if (IntPtr.Zero != intPtr)
|
||||
{
|
||||
NativeMethods.DestroyIcon(intPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void SafeDestroyWindow(ref IntPtr hwnd)
|
||||
{
|
||||
IntPtr hwnd2 = hwnd;
|
||||
hwnd = IntPtr.Zero;
|
||||
if (NativeMethods.IsWindow(hwnd2))
|
||||
{
|
||||
NativeMethods.DestroyWindow(hwnd2);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void SafeDispose<T>(ref T disposable) where T : IDisposable
|
||||
{
|
||||
IDisposable disposable2 = disposable;
|
||||
disposable = default(T);
|
||||
if (disposable2 != null)
|
||||
{
|
||||
disposable2.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void SafeDisposeImage(ref IntPtr gdipImage)
|
||||
{
|
||||
IntPtr intPtr = gdipImage;
|
||||
gdipImage = IntPtr.Zero;
|
||||
if (IntPtr.Zero != intPtr)
|
||||
{
|
||||
NativeMethods.GdipDisposeImage(intPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
[SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
|
||||
public static void SafeCoTaskMemFree(ref IntPtr ptr)
|
||||
{
|
||||
IntPtr intPtr = ptr;
|
||||
ptr = IntPtr.Zero;
|
||||
if (IntPtr.Zero != intPtr)
|
||||
{
|
||||
Marshal.FreeCoTaskMem(intPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void SafeFreeHGlobal(ref IntPtr hglobal)
|
||||
{
|
||||
IntPtr intPtr = hglobal;
|
||||
hglobal = IntPtr.Zero;
|
||||
if (IntPtr.Zero != intPtr)
|
||||
{
|
||||
Marshal.FreeHGlobal(intPtr);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
[SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
|
||||
public static void SafeRelease<T>(ref T comObject) where T : class
|
||||
{
|
||||
T t = comObject;
|
||||
comObject = default(T);
|
||||
if (t != null)
|
||||
{
|
||||
Marshal.ReleaseComObject(t);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void GeneratePropertyString(StringBuilder source, string propertyName, string value)
|
||||
{
|
||||
if (source.Length != 0)
|
||||
{
|
||||
source.Append(' ');
|
||||
}
|
||||
source.Append(propertyName);
|
||||
source.Append(": ");
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
source.Append("<null>");
|
||||
return;
|
||||
}
|
||||
source.Append('"');
|
||||
source.Append(value);
|
||||
source.Append('"');
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
[Obsolete]
|
||||
public static string GenerateToString<T>(T @object) where T : struct
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
|
||||
{
|
||||
if (stringBuilder.Length != 0)
|
||||
{
|
||||
stringBuilder.Append(", ");
|
||||
}
|
||||
object value = propertyInfo.GetValue(@object, null);
|
||||
string format = (value == null) ? "{0}: <null>" : "{0}: \"{1}\"";
|
||||
stringBuilder.AppendFormat(format, propertyInfo.Name, value);
|
||||
}
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void CopyStream(Stream destination, Stream source)
|
||||
{
|
||||
destination.Position = 0L;
|
||||
if (source.CanSeek)
|
||||
{
|
||||
source.Position = 0L;
|
||||
destination.SetLength(source.Length);
|
||||
}
|
||||
byte[] array = new byte[4096];
|
||||
int num;
|
||||
do
|
||||
{
|
||||
num = source.Read(array, 0, array.Length);
|
||||
if (num != 0)
|
||||
{
|
||||
destination.Write(array, 0, num);
|
||||
}
|
||||
}
|
||||
while (array.Length == num);
|
||||
destination.Position = 0L;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static string HashStreamMD5(Stream stm)
|
||||
{
|
||||
stm.Position = 0L;
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
using (MD5 md = MD5.Create())
|
||||
{
|
||||
foreach (byte b in md.ComputeHash(stm))
|
||||
{
|
||||
stringBuilder.Append(b.ToString("x2", CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static void EnsureDirectory(string path)
|
||||
{
|
||||
if (!Directory.Exists(Path.GetDirectoryName(path)))
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static bool MemCmp(byte[] left, byte[] right, int cb)
|
||||
{
|
||||
GCHandle gchandle = GCHandle.Alloc(left, GCHandleType.Pinned);
|
||||
IntPtr left2 = gchandle.AddrOfPinnedObject();
|
||||
GCHandle gchandle2 = GCHandle.Alloc(right, GCHandleType.Pinned);
|
||||
IntPtr right2 = gchandle2.AddrOfPinnedObject();
|
||||
bool result = Utility._MemCmp(left2, right2, (long)cb);
|
||||
gchandle.Free();
|
||||
gchandle2.Free();
|
||||
return result;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static string UrlDecode(string url)
|
||||
{
|
||||
if (url == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Utility._UrlDecoder urlDecoder = new Utility._UrlDecoder(url.Length, Encoding.UTF8);
|
||||
int length = url.Length;
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
char c = url[i];
|
||||
if (c == '+')
|
||||
{
|
||||
urlDecoder.AddByte(32);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == '%' && i < length - 2)
|
||||
{
|
||||
if (url[i + 1] == 'u' && i < length - 5)
|
||||
{
|
||||
int num = Utility._HexToInt(url[i + 2]);
|
||||
int num2 = Utility._HexToInt(url[i + 3]);
|
||||
int num3 = Utility._HexToInt(url[i + 4]);
|
||||
int num4 = Utility._HexToInt(url[i + 5]);
|
||||
if (num >= 0 && num2 >= 0 && num3 >= 0 && num4 >= 0)
|
||||
{
|
||||
urlDecoder.AddChar((char)(num << 12 | num2 << 8 | num3 << 4 | num4));
|
||||
i += 5;
|
||||
goto IL_12D;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int num5 = Utility._HexToInt(url[i + 1]);
|
||||
int num6 = Utility._HexToInt(url[i + 2]);
|
||||
if (num5 >= 0 && num6 >= 0)
|
||||
{
|
||||
urlDecoder.AddByte((byte)(num5 << 4 | num6));
|
||||
i += 2;
|
||||
goto IL_12D;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((c & 'タ') == '\0')
|
||||
{
|
||||
urlDecoder.AddByte((byte)c);
|
||||
}
|
||||
else
|
||||
{
|
||||
urlDecoder.AddChar(c);
|
||||
}
|
||||
}
|
||||
IL_12D:;
|
||||
}
|
||||
return urlDecoder.GetString();
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public static string UrlEncode(string url)
|
||||
{
|
||||
if (url == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
byte[] array = Encoding.UTF8.GetBytes(url);
|
||||
bool flag = false;
|
||||
int num = 0;
|
||||
foreach (byte b in array)
|
||||
{
|
||||
if (b == 32)
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
else if (!Utility._UrlEncodeIsSafe(b))
|
||||
{
|
||||
num++;
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
if (flag)
|
||||
{
|
||||
byte[] array3 = new byte[array.Length + num * 2];
|
||||
int num2 = 0;
|
||||
foreach (byte b2 in array)
|
||||
{
|
||||
if (Utility._UrlEncodeIsSafe(b2))
|
||||
{
|
||||
array3[num2++] = b2;
|
||||
}
|
||||
else if (b2 == 32)
|
||||
{
|
||||
array3[num2++] = 43;
|
||||
}
|
||||
else
|
||||
{
|
||||
array3[num2++] = 37;
|
||||
array3[num2++] = Utility._IntToHex(b2 >> 4 & 15);
|
||||
array3[num2++] = Utility._IntToHex((int)(b2 & 15));
|
||||
}
|
||||
}
|
||||
array = array3;
|
||||
}
|
||||
return Encoding.ASCII.GetString(array);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
private static bool _UrlEncodeIsSafe(byte b)
|
||||
{
|
||||
if (Utility._IsAsciiAlphaNumeric(b))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (b != 33)
|
||||
{
|
||||
switch (b)
|
||||
{
|
||||
case 39:
|
||||
case 40:
|
||||
case 41:
|
||||
case 42:
|
||||
case 45:
|
||||
case 46:
|
||||
return true;
|
||||
case 43:
|
||||
case 44:
|
||||
break;
|
||||
default:
|
||||
if (b == 95)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
private static bool _IsAsciiAlphaNumeric(byte b)
|
||||
{
|
||||
return (b >= 97 && b <= 122) || (b >= 65 && b <= 90) || (b >= 48 && b <= 57);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
private static byte _IntToHex(int n)
|
||||
{
|
||||
if (n <= 9)
|
||||
{
|
||||
return (byte)(n + 48);
|
||||
}
|
||||
return (byte)(n - 10 + 65);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
private static int _HexToInt(char h)
|
||||
{
|
||||
if (h >= '0' && h <= '9')
|
||||
{
|
||||
return (int)(h - '0');
|
||||
}
|
||||
if (h >= 'a' && h <= 'f')
|
||||
{
|
||||
return (int)(h - 'a' + '\n');
|
||||
}
|
||||
if (h >= 'A' && h <= 'F')
|
||||
{
|
||||
return (int)(h - 'A' + '\n');
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static void AddDependencyPropertyChangeListener(object component, DependencyProperty property, EventHandler listener)
|
||||
{
|
||||
if (component == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
DependencyPropertyDescriptor dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(property, component.GetType());
|
||||
dependencyPropertyDescriptor.AddValueChanged(component, listener);
|
||||
}
|
||||
|
||||
public static void RemoveDependencyPropertyChangeListener(object component, DependencyProperty property, EventHandler listener)
|
||||
{
|
||||
if (component == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
DependencyPropertyDescriptor dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(property, component.GetType());
|
||||
dependencyPropertyDescriptor.RemoveValueChanged(component, listener);
|
||||
}
|
||||
|
||||
public static bool IsThicknessNonNegative(Thickness thickness)
|
||||
{
|
||||
return Utility.IsDoubleFiniteAndNonNegative(thickness.Top) && Utility.IsDoubleFiniteAndNonNegative(thickness.Left) && Utility.IsDoubleFiniteAndNonNegative(thickness.Bottom) && Utility.IsDoubleFiniteAndNonNegative(thickness.Right);
|
||||
}
|
||||
|
||||
public static bool IsCornerRadiusValid(CornerRadius cornerRadius)
|
||||
{
|
||||
return Utility.IsDoubleFiniteAndNonNegative(cornerRadius.TopLeft) && Utility.IsDoubleFiniteAndNonNegative(cornerRadius.TopRight) && Utility.IsDoubleFiniteAndNonNegative(cornerRadius.BottomLeft) && Utility.IsDoubleFiniteAndNonNegative(cornerRadius.BottomRight);
|
||||
}
|
||||
|
||||
public static bool IsDoubleFiniteAndNonNegative(double d)
|
||||
{
|
||||
return !double.IsNaN(d) && !double.IsInfinity(d) && d >= 0.0;
|
||||
}
|
||||
|
||||
private static readonly Version _osVersion = Environment.OSVersion.Version;
|
||||
|
||||
private static readonly Version _presentationFrameworkVersion = Assembly.GetAssembly(typeof(Window)).GetName().Version;
|
||||
|
||||
private static int s_bitDepth;
|
||||
|
||||
private class _UrlDecoder
|
||||
{
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public _UrlDecoder(int size, Encoding encoding)
|
||||
{
|
||||
this._encoding = encoding;
|
||||
this._charBuffer = new char[size];
|
||||
this._byteBuffer = new byte[size];
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public void AddByte(byte b)
|
||||
{
|
||||
this._byteBuffer[this._byteCount++] = b;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public void AddChar(char ch)
|
||||
{
|
||||
this._FlushBytes();
|
||||
this._charBuffer[this._charCount++] = ch;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
private void _FlushBytes()
|
||||
{
|
||||
if (this._byteCount > 0)
|
||||
{
|
||||
this._charCount += this._encoding.GetChars(this._byteBuffer, 0, this._byteCount, this._charBuffer, this._charCount);
|
||||
this._byteCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
public string GetString()
|
||||
{
|
||||
this._FlushBytes();
|
||||
if (this._charCount > 0)
|
||||
{
|
||||
return new string(this._charBuffer, 0, this._charCount);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private readonly Encoding _encoding;
|
||||
|
||||
private readonly char[] _charBuffer;
|
||||
|
||||
private readonly byte[] _byteBuffer;
|
||||
|
||||
private int _byteCount;
|
||||
|
||||
private int _charCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user