Exemple #1
0
        /// <summary>
        /// 范围排序
        /// </summary>
        /// <typeparam name="valueType">排序数据类型</typeparam>
        /// <param name="values">待排序数组</param>
        /// <param name="startIndex">起始位置</param>
        /// <param name="count">排序范围数据数量</param>
        /// <param name="comparer">排序比较器</param>
        /// <param name="skipCount">跳过数据数量</param>
        /// <param name="getCount">排序数据数量</param>
        /// <returns>排序后的数据</returns>
        public static SubArray <valueType> RangeSort <valueType>
            (this valueType[] values, int startIndex, int count, Func <valueType, valueType, int> comparer, int skipCount, int getCount)
        {
            FormatRange range = new FormatRange(values.length(), startIndex, count);

            if ((count = range.GetCount) != 0)
            {
                FormatRange getRange = new FormatRange(count, skipCount, getCount);
                if ((getCount = getRange.GetCount) != 0)
                {
                    if (comparer == null)
                    {
                        throw new ArgumentNullException();
                    }
                    skipCount = range.SkipCount + getRange.SkipCount;
                    new AutoCSer.Algorithm.RangeQuickSort.Sorter <valueType>
                    {
                        Array       = values,
                        Comparer    = comparer,
                        SkipCount   = skipCount,
                        GetEndIndex = skipCount + getCount - 1
                    }.Sort(range.SkipCount, range.SkipCount + --count);
                    return(new SubArray <valueType>(skipCount, getCount, values));
                }
            }
            return(default(SubArray <valueType>));
        }
Exemple #2
0
        public static void Sort <valueType>(valueType[] values, Func <valueType, valueType, int> comparer, int startIndex, int count)
        {
            FormatRange range = new FormatRange(values.length(), startIndex, count);

            if (range.GetCount > 1)
            {
                new Sorter <valueType> {
                    Array = values, Comparer = comparer
                }.Sort(range.SkipCount, range.EndIndex - 1);
            }
        }
Exemple #3
0
        public static void FormatCurrentDocument(ObjectModelRoot psIse, FormatRange range)
        {
            //Cached IseRoot is not sync? ISERoot.CurrentFile may be null when multiple PowerShell tab opened.
            var currentFile = psIse.CurrentFile;

            if (currentFile == null)
            {
                return;
            }

            //TODO:Reflection Performance
            var viewHost = (IWpfTextViewHost)typeof(ISEEditor).GetProperty("EditorViewHost", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(currentFile.Editor);
            var textView = (ITextView)viewHost.TextView;

            if (textView == null || textView.TextBuffer == null)
            {
                return;
            }

            var analyzer  = _codeAnalyzerFactory.Create(textView);
            var formatter = _codeFormatterFactory.Create(textView.TextBuffer);

            var analyzedResult = analyzer.Analyze();
            var formatResult   = formatter.FormatCode(analyzedResult);

            try
            {
                //Need to execute operation in UI thread? to avoid ISE crashed by ArgumentOutOfRangeException
                Application.Current.Dispatcher.Invoke(() =>
                {
                    //If refresh needed. retry operation in UI thread
                    if (textView.TextSnapshot.Version != analyzedResult.TextSnapshot.Version)
                    {
                        formatResult = formatter.FormatCode(analyzer.Analyze());
                    }
                    formatResult.Commit(_undoManagerProvider);
                });
            }
            catch (Exception ex)
            {
                LastException = ex;
                throw;
                //TODO:Support ErrorMessage
                //Console.WriteLine(ex.Message); //Output to ISE ConsoleWindow
            }
        }
Exemple #4
0
        /// <summary>
        /// 范围排序
        /// </summary>
        /// <typeparam name="valueType">排序数据类型</typeparam>
        /// <param name="values">待排序数组</param>
        /// <param name="startIndex">起始位置</param>
        /// <param name="count">排序范围数据数量</param>
        /// <param name="comparer">排序比较器</param>
        /// <param name="skipCount">跳过数据数量</param>
        /// <param name="getCount">排序数据数量</param>
        /// <returns>排序后的数据</returns>
        public static SubArray <valueType> GetRangeSort <valueType>
            (this valueType[] values, int startIndex, int count, Func <valueType, valueType, int> comparer, int skipCount, int getCount)
        {
            FormatRange range = new FormatRange(values.length(), startIndex, count);

            if ((count = range.GetCount) != 0)
            {
                FormatRange getRange = new FormatRange(count, skipCount, getCount);
                if ((getCount = getRange.GetCount) != 0)
                {
                    valueType[] newValues = new valueType[count];
                    Array.Copy(values, range.SkipCount, newValues, 0, count);
                    return(RangeSort(newValues, comparer, getRange.SkipCount, getCount));
                }
            }
            return(default(SubArray <valueType>));
        }
Exemple #5
0
        public int FormatRange(PrintPageEventArgs e, int charFrom, int charTo)
        {
            var range = new CharRange
            {
                cpMin = charFrom,
                cpMax = charTo
            };
            var rect = new Rect
            {
                top    = (int)(e.MarginBounds.Top * inch),
                bottom = (int)(e.MarginBounds.Bottom * inch),
                left   = (int)(e.MarginBounds.Left * inch),
                right  = (int)(e.MarginBounds.Right * inch)
            };
            var rectPage = new Rect
            {
                top    = (int)(e.PageBounds.Top * inch),
                bottom = (int)(e.PageBounds.Bottom * inch),
                left   = (int)(e.PageBounds.Left * inch),
                right  = (int)(e.PageBounds.Right * inch)
            };
            IntPtr hdc = e.Graphics.GetHdc();

            var formatRange = new FormatRange
            {
                chrg      = range,
                hdc       = hdc,
                hdcTarget = hdc,
                rc        = rect,
                rcPage    = rectPage
            };
            IntPtr lParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(formatRange));

            Marshal.StructureToPtr(formatRange, lParam, false);

            IntPtr result = NativeMethods.SendMessage(Handle, RichEditMessages.EM_FORMATRANGE, (IntPtr)1, lParam);

            Marshal.FreeCoTaskMem(lParam);
            e.Graphics.ReleaseHdc(hdc);

            return(result.ToInt32());
        }
Exemple #6
0
        /// <summary>
        /// 范围排序
        /// </summary>
        /// <typeparam name="valueType">排序数据类型</typeparam>
        /// <param name="values">待排序数组</param>
        /// <param name="comparer">排序比较器</param>
        /// <param name="skipCount">跳过数据数量</param>
        /// <param name="getCount">排序数据数量</param>
        /// <returns>排序后的数据</returns>
        public static SubArray <valueType> RangeSort <valueType>
            (this valueType[] values, Func <valueType, valueType, int> comparer, int skipCount, int getCount)
        {
            FormatRange range = new FormatRange(values.length(), skipCount, getCount);

            if ((getCount = range.GetCount) != 0)
            {
                if (comparer == null)
                {
                    throw new ArgumentNullException();
                }
                new AutoCSer.Algorithm.RangeQuickSort.Sorter <valueType>
                {
                    Array       = values,
                    Comparer    = comparer,
                    SkipCount   = range.SkipCount,
                    GetEndIndex = range.EndIndex - 1
                }.Sort(0, values.Length - 1);
                return(new SubArray <valueType>(range.SkipCount, getCount, values));
            }
            return(new SubArray <valueType>());
        }
 public FormatSerializeException(string message, Exception innerException, FormatRange format, object model) : base(message, innerException)
 {
     Format = format;
     Model  = model;
 }
 public FormatDeserializeException(string message, Exception innerException, FormatRange format, Type targetType, string input) : base(message, innerException)
 {
     Format     = format;
     TargetType = targetType;
     Input      = input;
 }