diff --git a/CPF.Skia/SkiaDrawingContext.cs b/CPF.Skia/SkiaDrawingContext.cs index 6e34ae6..d156a44 100644 --- a/CPF.Skia/SkiaDrawingContext.cs +++ b/CPF.Skia/SkiaDrawingContext.cs @@ -440,7 +440,7 @@ namespace CPF.Skia InitializeBrush(strokeBrush); paintWrapper = CreatePaint(strokeBrush, stroke, font); } - var drawline = decoration.Stroke.Width > 0 && decoration.Brush != null; + var drawline = decoration.Stroke.Width > 0 && decoration.Brush != null && decoration.Location != TextDecorationLocation.None; List linePositions = null; if (drawline) { @@ -460,13 +460,16 @@ namespace CPF.Skia if (textAlignment != TextAlignment.Left && maxWidth != float.MaxValue || drawline) { w = paint.Paint.MeasureString(text); - if (textAlignment == TextAlignment.Right) + if (textAlignment != TextAlignment.Left && maxWidth != float.MaxValue) { - x = x + (maxWidth - w); - } - else if (textAlignment == TextAlignment.Center) - { - x = x + (maxWidth - w) / 2; + if (textAlignment == TextAlignment.Right) + { + x = x + (maxWidth - w); + } + else if (textAlignment == TextAlignment.Center) + { + x = x + (maxWidth - w) / 2; + } } } if (strokeBrush != null && stroke.Width > 0) @@ -490,17 +493,17 @@ namespace CPF.Skia { w += 2; } - switch (decoration.Location) + if (decoration.Location.HasFlag(TextDecorationLocation.Underline)) { - case TextDecorationLocation.Underline: - linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing, Width = w }); - break; - case TextDecorationLocation.OverLine: - linePositions.Add(new LinePosition { X = x, Y = location.Y, Width = w }); - break; - case TextDecorationLocation.Strikethrough: - linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing / 2, Width = w }); - break; + linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing, Width = w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.OverLine)) + { + linePositions.Add(new LinePosition { X = x, Y = location.Y, Width = w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.Strikethrough)) + { + linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing / 2, Width = w }); } } } @@ -616,17 +619,17 @@ namespace CPF.Skia } if (drawline) { - switch (decoration.Location) + if (decoration.Location.HasFlag(TextDecorationLocation.Underline)) { - case TextDecorationLocation.Underline: - linePositions.Add(new LinePosition { X = xx, Y = item.y + paint.Paint.FontSpacing + paint.Paint.FontMetrics.Ascent, Width = item.w }); - break; - case TextDecorationLocation.OverLine: - linePositions.Add(new LinePosition { X = xx, Y = item.y + paint.Paint.FontMetrics.Ascent, Width = item.w }); - break; - case TextDecorationLocation.Strikethrough: - linePositions.Add(new LinePosition { X = xx, Y = item.y + paint.Paint.FontSpacing / 2 + paint.Paint.FontMetrics.Ascent, Width = item.w }); - break; + linePositions.Add(new LinePosition { X = xx, Y = item.y + paint.Paint.FontSpacing + paint.Paint.FontMetrics.Ascent, Width = item.w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.OverLine)) + { + linePositions.Add(new LinePosition { X = xx, Y = item.y + paint.Paint.FontMetrics.Ascent, Width = item.w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.Strikethrough)) + { + linePositions.Add(new LinePosition { X = xx, Y = item.y + paint.Paint.FontSpacing / 2 + paint.Paint.FontMetrics.Ascent, Width = item.w }); } } } @@ -636,10 +639,10 @@ namespace CPF.Skia paintWrapper?.Dispose(); if (drawline) { - using (var brush = decoration.Brush) + //using (var brush = decoration.Brush) { - InitializeBrush(brush); - using (var paint = CreatePaint(brush, decoration.Stroke)) + InitializeBrush(decoration.Brush); + using (var paint = CreatePaint(decoration.Brush, decoration.Stroke)) { foreach (var item in linePositions) { @@ -662,7 +665,7 @@ namespace CPF.Skia InitializeBrush(strokeBrush); paintWrapper = CreatePaint(strokeBrush, stroke, font); } - var drawline = decoration.Stroke.Width > 0 && decoration.Brush != null; + var drawline = decoration.Stroke.Width > 0 && decoration.Brush != null && decoration.Location != TextDecorationLocation.None; List linePositions = null; if (drawline) { @@ -680,13 +683,16 @@ namespace CPF.Skia if (textAlignment != TextAlignment.Left && maxWidth != float.MaxValue || drawline) { w = paint.Paint.MeasureString(text); - if (textAlignment == TextAlignment.Right) + if (textAlignment != TextAlignment.Left && maxWidth != float.MaxValue) { - x = x + (maxWidth - w); - } - else if (textAlignment == TextAlignment.Center) - { - x = x + (maxWidth - w) / 2; + if (textAlignment == TextAlignment.Right) + { + x = x + (maxWidth - w); + } + else if (textAlignment == TextAlignment.Center) + { + x = x + (maxWidth - w) / 2; + } } } if (strokeBrush != null && stroke.Width > 0) @@ -705,17 +711,17 @@ namespace CPF.Skia { w += 2; } - switch (decoration.Location) + if (decoration.Location.HasFlag(TextDecorationLocation.Underline)) { - case TextDecorationLocation.Underline: - linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing, Width = w }); - break; - case TextDecorationLocation.OverLine: - linePositions.Add(new LinePosition { X = x, Y = location.Y, Width = w }); - break; - case TextDecorationLocation.Strikethrough: - linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing / 2, Width = w }); - break; + linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing, Width = w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.OverLine)) + { + linePositions.Add(new LinePosition { X = x, Y = location.Y, Width = w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.Strikethrough)) + { + linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing / 2, Width = w }); } } } @@ -764,13 +770,16 @@ namespace CPF.Skia if (textAlignment != TextAlignment.Left && maxWidth != float.MaxValue || drawline) { w = paint.Paint.MeasureString(newText); - if (textAlignment == TextAlignment.Right) + if (textAlignment != TextAlignment.Left && maxWidth != float.MaxValue) { - x = x + (maxWidth - w); - } - else if (textAlignment == TextAlignment.Center) - { - x = x + (maxWidth - w) / 2; + if (textAlignment == TextAlignment.Right) + { + x = x + (maxWidth - w); + } + else if (textAlignment == TextAlignment.Center) + { + x = x + (maxWidth - w) / 2; + } } } if (strokeBrush != null && stroke.Width > 0) @@ -789,17 +798,17 @@ namespace CPF.Skia { w += 2; } - switch (decoration.Location) + if (decoration.Location.HasFlag(TextDecorationLocation.Underline)) { - case TextDecorationLocation.Underline: - linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing, Width = w }); - break; - case TextDecorationLocation.OverLine: - linePositions.Add(new LinePosition { X = x, Y = location.Y, Width = w }); - break; - case TextDecorationLocation.Strikethrough: - linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing / 2, Width = w }); - break; + linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing, Width = w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.OverLine)) + { + linePositions.Add(new LinePosition { X = x, Y = location.Y, Width = w }); + } + if (decoration.Location.HasFlag(TextDecorationLocation.Strikethrough)) + { + linePositions.Add(new LinePosition { X = x, Y = location.Y + paint.Paint.FontSpacing / 2, Width = w }); } } } @@ -807,10 +816,10 @@ namespace CPF.Skia paintWrapper?.Dispose(); if (drawline) { - using (var brush = decoration.Brush) + //using (var brush = decoration.Brush) { - InitializeBrush(brush); - using (var paint = CreatePaint(brush, decoration.Stroke)) + InitializeBrush(decoration.Brush); + using (var paint = CreatePaint(decoration.Brush, decoration.Stroke)) { foreach (var item in linePositions) { diff --git a/CPF.Skia/SkiaDrawingFactory.cs b/CPF.Skia/SkiaDrawingFactory.cs index 8e0a9c5..3fcfa58 100644 --- a/CPF.Skia/SkiaDrawingFactory.cs +++ b/CPF.Skia/SkiaDrawingFactory.cs @@ -303,7 +303,7 @@ namespace CPF.Skia } } - public override float GetDefaultLineHeight(in Font font) + public override float GetLineHeight(in Font font) { using (SKPaint paint = new SKPaint()) { @@ -318,6 +318,38 @@ namespace CPF.Skia return paint.FontSpacing; } } + + public override float GetAscent(in Font font) + { + using (SKPaint paint = new SKPaint()) + { + paint.TextEncoding = SKTextEncoding.Utf16; + //paint.IsStroke = false; + //paint.LcdRenderText = true; + //paint.SubpixelText = true; + paint.IsAntialias = true; + paint.Typeface = (font.AdapterFont as FontWrapper).SKTypeface; + paint.TextSize = font.FontSize; + + return -paint.FontMetrics.Ascent; + } + } + + public override float GetDescent(in Font font) + { + using (SKPaint paint = new SKPaint()) + { + paint.TextEncoding = SKTextEncoding.Utf16; + //paint.IsStroke = false; + //paint.LcdRenderText = true; + //paint.SubpixelText = true; + paint.IsAntialias = true; + paint.Typeface = (font.AdapterFont as FontWrapper).SKTypeface; + paint.TextSize = font.FontSize; + + return paint.FontMetrics.Descent; + } + } } class FontWrapper : IDisposable diff --git a/CPF.Skia/SkiaPath.cs b/CPF.Skia/SkiaPath.cs index b23a97a..0f49cc1 100644 --- a/CPF.Skia/SkiaPath.cs +++ b/CPF.Skia/SkiaPath.cs @@ -125,5 +125,10 @@ namespace CPF.Skia return new SkiaPath(p); } } + + public void Reset() + { + path.Reset(); + } } } diff --git a/CPF.Windows/GDIPlus/GDIPlusDrawingContext.cs b/CPF.Windows/GDIPlus/GDIPlusDrawingContext.cs index 76e06dc..95850b7 100644 --- a/CPF.Windows/GDIPlus/GDIPlusDrawingContext.cs +++ b/CPF.Windows/GDIPlus/GDIPlusDrawingContext.cs @@ -341,31 +341,58 @@ namespace CPF.GDIPlus } if (drawLine) { - var ly = y; - switch (decoration.Location) + var lw = drawingFactory.g.MeasureString(sub, f.Font).Width; + + if (decoration.Location.HasFlag(TextDecorationLocation.Underline)) { - case TextDecorationLocation.Underline: - ly = y + fHeight; - break; - case TextDecorationLocation.OverLine: - break; - case TextDecorationLocation.Strikethrough: - ly = y + fHeight / 2; - break; + var ly = y; + ly = y + fHeight; + + var lx = x; + switch (textAlignment) + { + case TextAlignment.Right: + lx = x + mw - lw; + break; + case TextAlignment.Center: + lx = x + (mw - lw) / 2; + break; + } + g.DrawLine(pen, lx, ly, lx + lw, ly); + } + if (decoration.Location.HasFlag(TextDecorationLocation.OverLine)) + { + var ly = y; + var lx = x; + switch (textAlignment) + { + case TextAlignment.Right: + lx = x + mw - lw; + break; + case TextAlignment.Center: + lx = x + (mw - lw) / 2; + break; + } + g.DrawLine(pen, lx, ly, lx + lw, ly); + } + if (decoration.Location.HasFlag(TextDecorationLocation.Strikethrough)) + { + var ly = y; + ly = y + fHeight / 2; + + var lx = x; + switch (textAlignment) + { + case TextAlignment.Right: + lx = x + mw - lw; + break; + case TextAlignment.Center: + lx = x + (mw - lw) / 2; + break; + } + g.DrawLine(pen, lx, ly, lx + lw, ly); } - var lw = drawingFactory.g.MeasureString(sub, f.Font).Width; - var lx = x; - switch (textAlignment) - { - case TextAlignment.Right: - lx = x + mw - lw; - break; - case TextAlignment.Center: - lx = x + (mw - lw) / 2; - break; - } - g.DrawLine(pen, lx, ly, lx + lw, ly); } y += fHeight; @@ -524,31 +551,58 @@ namespace CPF.GDIPlus } if (drawLine) { - var ly = y; - switch (decoration.Location) + var lw = drawingFactory.g.MeasureString(sub, f.Font).Width; + + if (decoration.Location.HasFlag(TextDecorationLocation.Underline)) { - case TextDecorationLocation.Underline: - ly = y + fHeight; - break; - case TextDecorationLocation.OverLine: - break; - case TextDecorationLocation.Strikethrough: - ly = y + fHeight / 2; - break; + var ly = y; + ly = y + fHeight; + + var lx = x; + switch (textAlignment) + { + case TextAlignment.Right: + lx = x + mw - lw; + break; + case TextAlignment.Center: + lx = x + (mw - lw) / 2; + break; + } + g.DrawLine(pen, lx, ly, lx + lw, ly); + } + if (decoration.Location.HasFlag(TextDecorationLocation.OverLine)) + { + var ly = y; + var lx = x; + switch (textAlignment) + { + case TextAlignment.Right: + lx = x + mw - lw; + break; + case TextAlignment.Center: + lx = x + (mw - lw) / 2; + break; + } + g.DrawLine(pen, lx, ly, lx + lw, ly); + } + if (decoration.Location.HasFlag(TextDecorationLocation.Strikethrough)) + { + var ly = y; + ly = y + fHeight / 2; + + var lx = x; + switch (textAlignment) + { + case TextAlignment.Right: + lx = x + mw - lw; + break; + case TextAlignment.Center: + lx = x + (mw - lw) / 2; + break; + } + g.DrawLine(pen, lx, ly, lx + lw, ly); } - var lw = drawingFactory.g.MeasureString(sub, f.Font).Width; - var lx = x; - switch (textAlignment) - { - case TextAlignment.Right: - lx = x + mw - lw; - break; - case TextAlignment.Center: - lx = x + (mw - lw) / 2; - break; - } - g.DrawLine(pen, lx, ly, lx + lw, ly); } y += fHeight; diff --git a/CPF.Windows/GDIPlus/GDIPlusDrawingFactory.cs b/CPF.Windows/GDIPlus/GDIPlusDrawingFactory.cs index 5e63da0..7ee6adf 100644 --- a/CPF.Windows/GDIPlus/GDIPlusDrawingFactory.cs +++ b/CPF.Windows/GDIPlus/GDIPlusDrawingFactory.cs @@ -232,10 +232,31 @@ namespace CPF.GDIPlus } } - public override float GetDefaultLineHeight(in Drawing.Font font) + public override float GetLineHeight(in Drawing.Font font) + { + //var f = (FontStruct)font.AdapterFont; + //return f.Height; + var f = (FontStruct)font.AdapterFont; + float emHeight = f.Font.FontFamily.GetEmHeight(f.Font.Style); + var lineSpacing = f.Font.FontFamily.GetLineSpacing(f.Font.Style) * f.Font.Size / emHeight; + return lineSpacing; + } + + public override float GetAscent(in Drawing.Font font) { var f = (FontStruct)font.AdapterFont; - return f.Height; + float emHeight = f.Font.FontFamily.GetEmHeight(f.Font.Style); + //var lineSpacing = f.Font.FontFamily.GetLineSpacing(f.Font.Style) * f.Font.Size / emHeight; + float ascent = f.Font.FontFamily.GetCellAscent(f.Font.Style) * f.Font.Size / emHeight; + return ascent; + } + + public override float GetDescent(in Drawing.Font font) + { + var f = (FontStruct)font.AdapterFont; + float emHeight = f.Font.FontFamily.GetEmHeight(f.Font.Style); + float descent = f.Font.FontFamily.GetCellDescent(f.Font.Style) * f.Font.Size / emHeight; + return descent; } ///// diff --git a/CPF.Windows/GDIPlus/GDIPlusPath.cs b/CPF.Windows/GDIPlus/GDIPlusPath.cs index 1c97a00..37c1dd1 100644 --- a/CPF.Windows/GDIPlus/GDIPlusPath.cs +++ b/CPF.Windows/GDIPlus/GDIPlusPath.cs @@ -272,6 +272,11 @@ namespace CPF.GDIPlus return new GDIPlusPath(p); } + public void Reset() + { + path.Reset(); + } + ~GDIPlusPath() { Dispose(); diff --git a/CPF.Windows/OpenGL/WglContext.cs b/CPF.Windows/OpenGL/WglContext.cs index af99b82..098663b 100644 --- a/CPF.Windows/OpenGL/WglContext.cs +++ b/CPF.Windows/OpenGL/WglContext.cs @@ -51,19 +51,18 @@ namespace CPF.Windows.OpenGL //Wgl.WGL_ALPHA_BITS_ARB, 8, ////Wgl.WGL_SAMPLE_BUFFERS_ARB, 1, // MSAA on,开启多重采样 ////Wgl.WGL_SAMPLES_ARB, 4, // 4x MSAA ,多重采样样本数量为4 - //0, 0 //}, new float[] { 0, 0 }, 1, nPixelFormat, out var f); - //Wgl.SetPixelFormat(dc, nPixelFormat[0], ref pfd); + //r= Wgl.SetPixelFormat(dc, nPixelFormat[0], ref pfd); //rc = Wgl.WglCreateContextAttribsArb(dc, IntPtr.Zero, //new[] //{ // // major // WGL_CONTEXT_MAJOR_VERSION_ARB, 3, // // minor - // WGL_CONTEXT_MINOR_VERSION_ARB, 0, + // WGL_CONTEXT_MINOR_VERSION_ARB, 3, // // core profile - // WGL_CONTEXT_PROFILE_MASK_ARB, 1, + // //WGL_CONTEXT_PROFILE_MASK_ARB, 0, // // debug // // WGL_CONTEXT_FLAGS_ARB, 1, // // end @@ -73,6 +72,7 @@ namespace CPF.Windows.OpenGL if (rc == IntPtr.Zero) { Console.WriteLine("无法创建OpenGLContext DC:" + dc + " Handle:" + handle); + System.Diagnostics.Debug.WriteLine("无法创建OpenGLContext DC:" + dc + " Handle:" + handle); } else { diff --git a/CPF/Charts/Chart.cs b/CPF/Charts/Chart.cs index be8e5b8..a695c79 100644 --- a/CPF/Charts/Chart.cs +++ b/CPF/Charts/Chart.cs @@ -605,7 +605,7 @@ namespace CPF.Charts if (length > 1) { - var count = (width + size.Width) / ((w1 + size.Width) / 2 + Font.DefaultLineHeight); + var count = (width + size.Width) / ((w1 + size.Width) / 2 + Font.LineHeight); var offset = 1.0 * (width) / (length - 1); var of = length / count; if (of < 1) @@ -639,7 +639,7 @@ namespace CPF.Charts { g.DrawLine(new Stroke(1), gpen, new Point(x, ownerSize.Height - padding.Bottom), new Point(x, padding.Top)); } - g.DrawString(new Point(x - cs.Width / 2, ownerSize.Height - padding.Bottom + Font.DefaultLineHeight / 4), foreColorBrush, c, Font, TextAlignment.Center, cs.Width + cs.Width / 5); + g.DrawString(new Point(x - cs.Width / 2, ownerSize.Height - padding.Bottom + Font.LineHeight / 4), foreColorBrush, c, Font, TextAlignment.Center, cs.Width + cs.Width / 5); } w = cs.Width; index += of; diff --git a/CPF/Controls/CodeTextBox/CodeTextBox.cs b/CPF/Controls/CodeTextBox/CodeTextBox.cs index 008639d..9aa4271 100644 --- a/CPF/Controls/CodeTextBox/CodeTextBox.cs +++ b/CPF/Controls/CodeTextBox/CodeTextBox.cs @@ -682,7 +682,7 @@ namespace CPF.Controls var size = codeTextView.ActualSize; using (var font = new Font(FontFamily, FontSize, FontStyle)) { - var lineHeight = (float)Math.Round(font.DefaultLineHeight, 2); + var lineHeight = (float)Math.Round(font.LineHeight, 2); var len = (int)Math.Ceiling(size.Height / lineHeight); scrollViewer.PageDown(); @@ -705,7 +705,7 @@ namespace CPF.Controls var size = codeTextView.ActualSize; using (var font = new Font(FontFamily, FontSize, FontStyle)) { - var lineHeight = (float)Math.Round(font.DefaultLineHeight, 2); + var lineHeight = (float)Math.Round(font.LineHeight, 2); var len = (int)Math.Ceiling(size.Height / lineHeight); scrollViewer.PageUp(); diff --git a/CPF/Controls/CodeTextBox/CodeTextView.cs b/CPF/Controls/CodeTextBox/CodeTextView.cs index aa3ec58..c530f13 100644 --- a/CPF/Controls/CodeTextBox/CodeTextView.cs +++ b/CPF/Controls/CodeTextBox/CodeTextView.cs @@ -191,7 +191,7 @@ namespace CPF.Controls using (var font = new Font(textBox.FontFamily, textBox.FontSize, textBox.FontStyle)) { lines.Clear(); - var lineHeight = (float)Math.Round(font.DefaultLineHeight, 2); + var lineHeight = (float)Math.Round(font.LineHeight, 2); var top = 0d;//换成双精度减少误差 var h = 0d; float left = 0; @@ -304,7 +304,7 @@ namespace CPF.Controls VerticalOffset = 0; } lineLayoutWidth.Clear(); - var lineHeight = (float)Math.Round(font.DefaultLineHeight, 2); + var lineHeight = (float)Math.Round(font.LineHeight, 2); var len = Math.Ceiling(size.Height / lineHeight); var start = (int)Math.Floor(VerticalOffset / lineHeight); textBox.LineNumber.Start = start; @@ -380,7 +380,7 @@ namespace CPF.Controls using (var font = new Font(textBox.FontFamily, textBox.FontSize, textBox.FontStyle)) { HybridDictionary caches = new HybridDictionary(); - var lineHeight = (float)Math.Round(font.DefaultLineHeight, 2); + var lineHeight = (float)Math.Round(font.LineHeight, 2); var len = Math.Ceiling(size.Height / lineHeight); var start = (int)Math.Floor(vo / lineHeight); @@ -634,7 +634,7 @@ namespace CPF.Controls { using (var font = new Font(textBox.FontFamily, textBox.FontSize, textBox.FontStyle)) { - lineHeight = (float)Math.Round(font.DefaultLineHeight, 2); + lineHeight = (float)Math.Round(font.LineHeight, 2); var ho = HorizontalOffset; var vo = VerticalOffset; var start = (int)Math.Floor(vo / lineHeight); @@ -688,7 +688,7 @@ namespace CPF.Controls //var size = new Size(ViewportWidth, ViewportHeight); using (var font = new Font(textBox.FontFamily, textBox.FontSize, textBox.FontStyle)) { - var lineHeight = Math.Round(font.DefaultLineHeight, 2); + var lineHeight = Math.Round(font.LineHeight, 2); var ho = (double)HorizontalOffset + point.X; var vo = (double)VerticalOffset; var start = (int)Math.Floor(vo / lineHeight); diff --git a/CPF/Controls/DataGrid.cs b/CPF/Controls/DataGrid/DataGrid.cs similarity index 89% rename from CPF/Controls/DataGrid.cs rename to CPF/Controls/DataGrid/DataGrid.cs index 33dea1a..9b7ea82 100644 --- a/CPF/Controls/DataGrid.cs +++ b/CPF/Controls/DataGrid/DataGrid.cs @@ -151,6 +151,14 @@ namespace CPF.Controls get { return GetValue(); } set { SetValue(value); } } + /// + /// 获取或设置一个值,该值指示是否自动创建列 + /// + public bool AutoGenerateColumns + { + get { return GetValue(); } + set { SetValue(value); } + } protected override void InitializeComponent() { @@ -687,13 +695,117 @@ namespace CPF.Controls } [PropertyChanged(nameof(Items))] - void RegisterItems(object newValue, object oldValue, PropertyMetadataAttribute attribute) + void OnItems(object newValue, object oldValue, PropertyMetadataAttribute attribute) { if (presenter) { presenter.Items = newValue as IList; } } + + protected override bool OnSetValue(string propertyName, ref object value) + { + if (propertyName == nameof(Items) && AutoGenerateColumns) + { + Items.Clear(); + Columns.Clear(); + if (value != null) + { + //if (value is DataRows rows) + //{ + // foreach (var item in rows.DataTable.Columns) + // { + + // } + //} + if (value is IList list) + { + if (list.Count > 0) + { + var v = list[0]; + if (v is CpfObject cpf) + { + foreach (var item in cpf.GetProperties()) + { + CreateColumn(item.PropertyType, item.PropertyName); + } + } + else + { + var t = v.GetType(); + var ps = t.GetProperties(); + foreach (var item in ps) + { + CreateColumn(item.PropertyType, item.Name); + } + } + } + else if (list.Count == 0) + { + var t = list.GetType(); + if (t.IsArray) + { + var ps = t.GetElementType().GetProperties(); + foreach (var item in ps) + { + CreateColumn(item.PropertyType, item.Name); + } + } + else + { + var gs = t.GetGenericArguments(); + if (gs != null && gs.Length == 1) + { + var ps = gs[0].GetProperties(); + foreach (var item in ps) + { + CreateColumn(item.PropertyType, item.Name); + } + } + } + } + } + } + } + return base.OnSetValue(propertyName, ref value); + } + + private void CreateColumn(Type PropertyType, string PropertyName) + { + DataGridColumn column; + + if (PropertyType == typeof(bool)) + { + column = new DataGridCheckBoxColumn { }; + } + else if (PropertyType.IsEnum) + { + //var kp = new List<(string, object)>(); + //var vs = Enum.GetValues(item.PropertyType); + //foreach (var vv in vs) + //{ + // kp.Add((Enum.GetName(item.PropertyType, vv), vv)); + //} + //column = new DataGridComboBoxColumn { DisplayMemberPath = "Item1", SelectedValuePath = "Item2", Items = kp }; + column = new DataGridComboBoxColumn { Items = Enum.GetValues(PropertyType) }; + } + else + { + column = new DataGridTextColumn { }; + } + column.Width = 100; + column.Binding = PropertyName; + column.Header = PropertyName; + var auto = new DataGridAutoGeneratingColumnEventArgs(column, PropertyName, PropertyType); + OnAutoGeneratingColumn(auto); + if (!auto.Cancel && auto.Column != null) + { + Columns.Add(auto.Column); + } + } + + + //protected override void OnPropertyChanged(string propertyName, object oldValue, object newValue, PropertyMetadataAttribute propertyMetadata) //{ // if (propertyName == nameof(Items) && presenter) @@ -1067,6 +1179,17 @@ namespace CPF.Controls overridePropertys.Override(nameof(ItemTemplate), new PropertyMetadataAttribute((UIElementTemplate)typeof(DataGridRow))); } + public event EventHandler AutoGeneratingColumn + { + add { AddHandler(value); } + remove { RemoveHandler(value); } + } + + protected virtual void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs eventArgs) + { + this.RaiseEvent(eventArgs, nameof(AutoGeneratingColumn)); + } + class EditCell { public int RowIndex; @@ -1146,4 +1269,20 @@ namespace CPF.Controls /// public DataGridCellTemplate EditingElement { get; private set; } } + public class DataGridAutoGeneratingColumnEventArgs : EventArgs + { + public DataGridAutoGeneratingColumnEventArgs(DataGridColumn column, string propertyName, Type propertyType) + { + Column = column; + PropertyName = propertyName; + PropertyType = propertyType; + } + public bool Cancel { get; set; } + + public DataGridColumn Column { get; set; } + + public string PropertyName { get; } + + public Type PropertyType { get; } + } } diff --git a/CPF/Controls/DataGridCell.cs b/CPF/Controls/DataGrid/DataGridCell.cs similarity index 100% rename from CPF/Controls/DataGridCell.cs rename to CPF/Controls/DataGrid/DataGridCell.cs diff --git a/CPF/Controls/DataGridCellInfo.cs b/CPF/Controls/DataGrid/DataGridCellInfo.cs similarity index 100% rename from CPF/Controls/DataGridCellInfo.cs rename to CPF/Controls/DataGrid/DataGridCellInfo.cs diff --git a/CPF/Controls/DataGridCellTemplate.cs b/CPF/Controls/DataGrid/DataGridCellTemplate.cs similarity index 100% rename from CPF/Controls/DataGridCellTemplate.cs rename to CPF/Controls/DataGrid/DataGridCellTemplate.cs diff --git a/CPF/Controls/DataGridCellTextEditTemplate.cs b/CPF/Controls/DataGrid/DataGridCellTextEditTemplate.cs similarity index 100% rename from CPF/Controls/DataGridCellTextEditTemplate.cs rename to CPF/Controls/DataGrid/DataGridCellTextEditTemplate.cs diff --git a/CPF/Controls/DataGridCheckBoxColumn.cs b/CPF/Controls/DataGrid/DataGridCheckBoxColumn.cs similarity index 100% rename from CPF/Controls/DataGridCheckBoxColumn.cs rename to CPF/Controls/DataGrid/DataGridCheckBoxColumn.cs diff --git a/CPF/Controls/DataGridColumn.cs b/CPF/Controls/DataGrid/DataGridColumn.cs similarity index 100% rename from CPF/Controls/DataGridColumn.cs rename to CPF/Controls/DataGrid/DataGridColumn.cs diff --git a/CPF/Controls/DataGridColumnTemplate.cs b/CPF/Controls/DataGrid/DataGridColumnTemplate.cs similarity index 100% rename from CPF/Controls/DataGridColumnTemplate.cs rename to CPF/Controls/DataGrid/DataGridColumnTemplate.cs diff --git a/CPF/Controls/DataGridComboBoxColumn.cs b/CPF/Controls/DataGrid/DataGridComboBoxColumn.cs similarity index 100% rename from CPF/Controls/DataGridComboBoxColumn.cs rename to CPF/Controls/DataGrid/DataGridComboBoxColumn.cs diff --git a/CPF/Controls/DataGridLength.cs b/CPF/Controls/DataGrid/DataGridLength.cs similarity index 100% rename from CPF/Controls/DataGridLength.cs rename to CPF/Controls/DataGrid/DataGridLength.cs diff --git a/CPF/Controls/DataGridRow.cs b/CPF/Controls/DataGrid/DataGridRow.cs similarity index 100% rename from CPF/Controls/DataGridRow.cs rename to CPF/Controls/DataGrid/DataGridRow.cs diff --git a/CPF/Controls/DataGridScrollViewer.cs b/CPF/Controls/DataGrid/DataGridScrollViewer.cs similarity index 100% rename from CPF/Controls/DataGridScrollViewer.cs rename to CPF/Controls/DataGrid/DataGridScrollViewer.cs diff --git a/CPF/Controls/DataGridTemplateColumn.cs b/CPF/Controls/DataGrid/DataGridTemplateColumn.cs similarity index 100% rename from CPF/Controls/DataGridTemplateColumn.cs rename to CPF/Controls/DataGrid/DataGridTemplateColumn.cs diff --git a/CPF/Controls/DataGridTextColumn.cs b/CPF/Controls/DataGrid/DataGridTextColumn.cs similarity index 100% rename from CPF/Controls/DataGridTextColumn.cs rename to CPF/Controls/DataGrid/DataGridTextColumn.cs diff --git a/CPF/Controls/ResponsivePanel.cs b/CPF/Controls/ResponsivePanel.cs new file mode 100644 index 0000000..5b3a8c3 --- /dev/null +++ b/CPF/Controls/ResponsivePanel.cs @@ -0,0 +1,719 @@ +using CPF.Drawing; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace CPF.Controls +{ + /// + /// 响应式布局容器,模仿bootstrap + /// XS(<768px), SM(<992px), MD(<1200px), LG(1200px>=) + /// 整个页面有12列。(可使用MaxDivision、BreakPoints属性自定义) + /// + [Description("响应式布局容器,模仿bootstrap")] + public class ResponsivePanel : Panel + { + /// + /// 响应式布局容器,模仿bootstrap + /// XS(<768px), SM(<992px), MD(<1200px), LG(1200px>=) + /// 整个页面有12列。(可使用MaxDivision、BreakPoints属性自定义) + /// + public ResponsivePanel() + { + + } + /// + /// 定义列数 + /// + [Description("定义列数")] + [UIPropertyMetadata(12, UIPropertyOptions.AffectsMeasure)] + public int MaxDivision + { + get { return (int)GetValue(); } + set { SetValue(value); } + } + + /// + /// 定义响应布局的尺寸 + /// + [Description("定义响应布局的尺寸")] + public BreakPoints BreakPoints + { + get { return (BreakPoints)GetValue(); } + set { SetValue(value); } + } + + /// + /// 显示分割列线条 + /// + [Description("显示分割列线条")] + public bool ShowGridLines + { + get { return (bool)GetValue(); } + set { SetValue(value); } + } + /// + /// 尺寸状态 XS, SM, MD, LG + /// + [Description("尺寸状态 XS, SM, MD, LG")] + public ResponsiveState State + { + get { return (ResponsiveState)GetValue(); } + private set { SetValue(value); } + } + + public static Attached XS + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached SM + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached MD + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached LG + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached XS_Offset + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + public static Attached SM_Offset + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + public static Attached MD_Offset + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + public static Attached LG_Offset + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached XS_Push + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + public static Attached SM_Push + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached MD_Push + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached LG_Push + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached XS_Pull + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached SM_Pull + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached MD_Pull + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + + + public static Attached LG_Pull + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + [Browsable(false)] + public static Attached ActualColumn + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel)); + } + } + + + [Browsable(false)] + public static Attached ActualRow + { + get + { + return RegisterAttached(0, typeof(ResponsivePanel)); + } + } + + public static Attached Visible + { + get + { + return RegisterAttached(RVisible.Visible, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + { + if (obj is UIElement element && element.Parent != null) + { + element.Parent.InvalidateMeasure(); + } + }); + } + } + //public static Attached Hidden + //{ + // get + // { + // return RegisterAttached(RHidden.None, typeof(ResponsivePanel), (CpfObject obj, string propertyName, object defaultValue, object oldValue, ref object newValue) => + // { + // if (obj is UIElement element && element.Parent != null) + // { + // element.Parent.InvalidateMeasure(); + // } + // }); + // } + //} + + protected int GetSpan(in BreakPoints breakPoints, UIElement element, double width) + { + var span = 0; + + var getXS = new Func((o) => { var x = XS(o); return x != 0 ? x : this.MaxDivision; }); + var getSM = new Func((o) => { var x = SM(o); return x != 0 ? x : getXS(o); }); + var getMD = new Func((o) => { var x = MD(o); return x != 0 ? x : getSM(o); }); + var getLG = new Func((o) => { var x = LG(o); return x != 0 ? x : getMD(o); }); + + if (width < breakPoints.XS_SM) + { + span = getXS(element); + } + else if (width < breakPoints.SM_MD) + { + span = getSM(element); + } + else if (width < breakPoints.MD_LG) + { + span = getMD(element); + } + else + { + span = getLG(element); + } + + return Math.Min(Math.Max(0, span), this.MaxDivision); ; + } + + protected int GetOffset(in BreakPoints breakPoints, UIElement element, double width) + { + var span = 0; + + var getXS = new Func((o) => { var x = XS_Offset(o); return x != 0 ? x : 0; }); + var getSM = new Func((o) => { var x = SM_Offset(o); return x != 0 ? x : getXS(o); }); + var getMD = new Func((o) => { var x = MD_Offset(o); return x != 0 ? x : getSM(o); }); + var getLG = new Func((o) => { var x = LG_Offset(o); return x != 0 ? x : getMD(o); }); + + if (width < breakPoints.XS_SM) + { + span = getXS(element); + } + else if (width < breakPoints.SM_MD) + { + span = getSM(element); + } + else if (width < breakPoints.MD_LG) + { + span = getMD(element); + } + else + { + span = getLG(element); + } + + return Math.Min(Math.Max(0, span), this.MaxDivision); ; + } + + protected int GetPush(in BreakPoints breakPoints, UIElement element, double width) + { + var span = 0; + + var getXS = new Func((o) => { var x = XS_Push(o); return x != 0 ? x : 0; }); + var getSM = new Func((o) => { var x = SM_Push(o); return x != 0 ? x : getXS(o); }); + var getMD = new Func((o) => { var x = MD_Push(o); return x != 0 ? x : getSM(o); }); + var getLG = new Func((o) => { var x = LG_Push(o); return x != 0 ? x : getMD(o); }); + + if (width < breakPoints.XS_SM) + { + span = getXS(element); + } + else if (width < breakPoints.SM_MD) + { + span = getSM(element); + } + else if (width < breakPoints.MD_LG) + { + span = getMD(element); + } + else + { + span = getLG(element); + } + + return Math.Min(Math.Max(0, span), this.MaxDivision); ; + } + + protected int GetPull(in BreakPoints breakPoints, UIElement element, double width) + { + var span = 0; + + var getXS = new Func((o) => { var x = XS_Pull(o); return x != 0 ? x : 0; }); + var getSM = new Func((o) => { var x = SM_Pull(o); return x != 0 ? x : getXS(o); }); + var getMD = new Func((o) => { var x = MD_Pull(o); return x != 0 ? x : getSM(o); }); + var getLG = new Func((o) => { var x = LG_Pull(o); return x != 0 ? x : getMD(o); }); + + if (width < breakPoints.XS_SM) + { + span = getXS(element); + } + else if (width < breakPoints.SM_MD) + { + span = getSM(element); + } + else if (width < breakPoints.MD_LG) + { + span = getMD(element); + } + else + { + span = getLG(element); + } + + return Math.Min(Math.Max(0, span), this.MaxDivision); ; + } + + Visibility GetVisibility(in BreakPoints breakPoints, UIElement element, float width) + { + Visibility visibility = Visibility.Collapsed; + var v = Visible(element); + if (width < breakPoints.XS_SM && v.HasFlag(RVisible.XS)) + { + visibility = Visibility.Visible; + } + else if (width >= breakPoints.XS_SM && width < breakPoints.SM_MD && v.HasFlag(RVisible.SM)) + { + visibility = Visibility.Visible; + } + else if (width >= breakPoints.SM_MD && width < breakPoints.MD_LG && v.HasFlag(RVisible.MD)) + { + visibility = Visibility.Visible; + } + else if (width >= breakPoints.MD_LG && v.HasFlag(RVisible.LG)) + { + visibility = Visibility.Visible; + } + return visibility; + } + + float availableWidth; + protected override Size MeasureOverride(in Size availableSize) + { + var count = 0; + var currentRow = 0; + + availableWidth = float.IsPositiveInfinity(availableSize.Width) ? float.PositiveInfinity : availableSize.Width / this.MaxDivision; + + var breakPoints = BreakPoints; + + foreach (UIElement child in this.Children) + { + if (child != null) + { + var v = GetVisibility(breakPoints, child, availableSize.Width); + //child.Visibility = v; + if (v == Visibility.Collapsed) { continue; } + + var span = this.GetSpan(breakPoints, child, availableSize.Width); + var offset = this.GetOffset(breakPoints, child, availableSize.Width); + var push = this.GetPush(breakPoints, child, availableSize.Width); + var pull = this.GetPull(breakPoints, child, availableSize.Width); + + if (count + span + offset > this.MaxDivision) + { + currentRow++; + count = 0; + } + + ActualColumn(child, count + offset + push - pull); + ActualRow(child, currentRow); + + count += (span + offset); + + var size = new Size(availableWidth * span, float.PositiveInfinity); + child.Measure(size); + } + } + + + var group = this.Children.GroupBy(x => ActualRow(x)); + + var totalSize = new Size(); + if (group.Count() != 0) + { + totalSize.Width = group.Max(rows => rows.Sum(o => o.DesiredSize.Width)); + totalSize.Height = group.Sum(rows => rows.Max(o => o.DesiredSize.Height)); + } + + return totalSize; + } + + protected override Size ArrangeOverride(in Size finalSize) + { + var breakPoints = BreakPoints; + if (finalSize.Width != availableWidth) + {//对于测量时给的尺寸不一致时候需要重新测量一遍 + var count = 0; + var currentRow = 0; + foreach (UIElement child in this.Children) + { + var v = GetVisibility(breakPoints, child, finalSize.Width); + child.Visibility = v; + if (v == Visibility.Collapsed) { continue; } + + var span = this.GetSpan(breakPoints, child, finalSize.Width); + var offset = this.GetOffset(breakPoints, child, finalSize.Width); + var push = this.GetPush(breakPoints, child, finalSize.Width); + var pull = this.GetPull(breakPoints, child, finalSize.Width); + + if (count + span + offset > this.MaxDivision) + { + currentRow++; + count = 0; + } + + ActualColumn(child, count + offset + push - pull); + ActualRow(child, currentRow); + + count += (span + offset); + } + } + + var columnWidth = finalSize.Width / this.MaxDivision; + + var group = this.Children.GroupBy(x => ActualRow(x)); + + float temp = 0; + foreach (var rows in group) + { + float max = 0; + + var columnHeight = rows.Max(o => o.DesiredSize.Height); + foreach (var element in rows) + { + var column = ActualColumn(element); + var row = ActualRow(element); + var columnSpan = this.GetSpan(breakPoints, element, finalSize.Width); + + var rect = new Rect(columnWidth * column, temp, columnWidth * columnSpan, columnHeight); + + element.Arrange(rect); + + max = Math.Max(element.DesiredSize.Height, max); + } + + temp += max; + } + + if (finalSize.Width < breakPoints.XS_SM) + { + State = ResponsiveState.XS; + } + else if (finalSize.Width >= breakPoints.XS_SM && finalSize.Width < breakPoints.SM_MD) + { + State = ResponsiveState.SM; + } + else if (finalSize.Width >= breakPoints.SM_MD && finalSize.Width < breakPoints.MD_LG) + { + State = ResponsiveState.MD; + } + else if (finalSize.Width >= breakPoints.MD_LG) + { + State = ResponsiveState.LG; + } + return finalSize; + } + + + + protected override void OnRender(DrawingContext dc) + { + base.OnRender(dc); + + if (this.ShowGridLines) + { + using (var brush = new SolidColorBrush("Yellow")) + { + using (var brush1 = new SolidColorBrush("Blue")) + { + var ds = new Stroke(1, DashStyles.Custom, 0, new float[] { 4, 4 }, CapStyles.Round); + var ds1 = new Stroke(1); + var size = ActualSize; + var gridNum = this.MaxDivision; + var unit = size.Width / gridNum; + for (var i = 0; i <= gridNum; i++) + { + var x = (int)(unit * i); + dc.DrawLine(ds1, brush, new Point(x, 0), new Point(x, size.Height)); + dc.DrawLine(ds, brush1, new Point(x, 0), new Point(x, size.Height)); + } + } + } + } + } + + protected override void OnOverrideMetadata(OverrideMetadata overridePropertys) + { + base.OnOverrideMetadata(overridePropertys); + overridePropertys.Override(nameof(BreakPoints), new UIPropertyMetadataAttribute(BreakPoints.Default, UIPropertyOptions.AffectsMeasure)); + } + } + + /// + /// 定义响应布局的尺寸 + /// + public struct BreakPoints + { + public float XS_SM { get; set; } + + public float SM_MD { get; set; } + + public float MD_LG { get; set; } + + public static BreakPoints Default + { + get { return new BreakPoints { XS_SM = 768f, SM_MD = 992f, MD_LG = 1200 }; } + } + public override string ToString() + { + return $"XS_SM = {XS_SM}, SM_MD = {SM_MD}, MD_LG = {MD_LG}"; + } + + public static implicit operator BreakPoints(string str) + { + try + { + var t = str.Split(','); + var bp = new BreakPoints(); + bp.XS_SM = float.Parse(t[0].Split('=')[1]); + bp.SM_MD = float.Parse(t[1].Split('=')[1]); + bp.MD_LG = float.Parse(t[2].Split('=')[1]); + return bp; + } + catch (Exception e) + { + throw new Exception("BreakPoints字符串格式不对", e); + } + } + } + /// + /// 响应布局元素的可见性 + /// + public enum RVisible : byte + { + Hidden = 0, + XS = 1, + SM = 2, + MD = 4, + LG = 8, + Hidden_XS = SM | MD | LG, + Hidden_SM = XS | MD | LG, + Hidden_MD = XS | SM | LG, + Hidden_LG = XS | SM | MD, + Visible = XS | SM | MD | LG, + } + + public enum ResponsiveState + { + XS, + SM, + MD, + LG, + } + + //public enum RHidden : byte + //{ + // None = 0, + // XS = 1, + // SM = 2, + // MD = 4, + // LG = 8 + //} +} diff --git a/CPF/Controls/STTextBox/Graphics.cs b/CPF/Controls/STTextBox/Graphics.cs deleted file mode 100644 index 5d61d44..0000000 --- a/CPF/Controls/STTextBox/Graphics.cs +++ /dev/null @@ -1,75 +0,0 @@ -using CPF.Drawing; -using System; -using System.Collections.Generic; -using System.Text; - -namespace CPF.Drawing -{ - public class Graphics - { - DrawingContext drawingContext; - public Graphics(DrawingContext dc) { - drawingContext = dc; - } - public void FillRectangle(Brush brush,float x,float y, float width,float height) { - drawingContext.FillRectangle(brush, new Rect(x,y,width,height)); - } - public void DrawLine(Brush brush,float x,float y,float x1,float y1,int stroke = 1) - { - drawingContext.DrawLine(new Stroke(stroke), brush,new Point(x,y),new Point(x1,y1)); - } - public void DrawRectangle(Brush brush,Rect rect) - { - drawingContext.DrawRectangle(brush, new Stroke(1), rect); - } - public void DrawPath(Brush brush,PathGeometry path) - { - drawingContext.DrawPath(brush,new Stroke(1), path); - } - - public void FillPath(Brush brush, PathGeometry path) - { - drawingContext.FillPath(brush, path); - } - public void FillRectangle(Brush brush,Rect rect) - { - drawingContext.FillRectangle(brush, rect); - } - public void FillRectangle(Brush brush,float x,float y,int width,int height) - { - drawingContext.FillRectangle(brush,new Rect(x,y,width,height)); - } - public void DrawString(string str,Font font, Brush brush,float x, float y, StringFormat stringFormat) - { - drawingContext.DrawString(new Point(x,y),brush,str,font, stringFormat.Alignment); - } - public void DrawString(string str, Font font, Brush brush, float x, float y) - { - drawingContext.DrawString(new Point(x, y), brush, str, font); - } - public void DrawString(string str, Font font, Brush brush, Rect rect, StringFormat stringFormat) - { - drawingContext.DrawString(new Point(rect.X, rect.Y), brush, str, font,stringFormat.Alignment, rect.Width, - default,rect.Height); - } - - public static Graphics FromImage(Bitmap bmp) - { - return new Graphics(DrawingContext.FromBitmap(bmp)); - } - - public Size MeasureString(string strText, Font ft, int v, StringFormat m_sf) - { - return Platform.Application.GetDrawingFactory().MeasureString(strText, ft,v); - } - - public void DrawImage(Image image, Rect rect) - { - drawingContext.DrawImage(image, rect, rect); - } - - internal void SetClip(Rect rect) - { - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/EmojiRender.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/EmojiRender.cs deleted file mode 100644 index 75d41cf..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/EmojiRender.cs +++ /dev/null @@ -1,222 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using ST.Library.UI.STTextBox; -using ST.Library.Drawing.SvgRender; - -using System.IO; -using System.Runtime.InteropServices; -using System.Text.RegularExpressions; -using CPF.Drawing; - -namespace ST.Library.Drawing -{ - public class EmojiRender : IEmojiRender, IDisposable - { - private Dictionary m_dic_xml = new Dictionary(); - private Dictionary m_dic_cache = new Dictionary(); - - private struct CacheInfo - { - public int Size; - public Image Image; - public Image SelectedImage; - } - - //private ImageAttributes m_img_attr_normal; - //private ImageAttributes m_img_attr_selected; - - public EmojiRender(string strFile) { - /*ColorMatrix m = new ColorMatrix(new float[][]{ - new float[]{1, 0, 0, 0, 0}, - new float[]{0, 1, 0, 0, 0}, - new float[]{0, 0, 1, 0, 0}, - new float[]{0, 0, 0, 1, 0}, - new float[]{0, 0, 0, 0, 1}, - }); - m_img_attr_normal = new ImageAttributes(); - m_img_attr_normal.SetColorMatrix(m); - m[3, 3] = 0.5F; - m_img_attr_selected = new ImageAttributes(); - m_img_attr_selected.SetColorMatrix(m);*/ - this.InitSvgFromPackage(strFile); - } - - public bool IsEmoji(string strChar) { - return this.GetEmojiString(strChar) != null; - } - - private string GetEmojiString(string strText) { - if (m_dic_xml.ContainsKey(strText)) { - return strText; - } - // http://www.unicode.org/charts/PDF/UFE00.pdf - // FE00 - FE0F is the Variation Selectors - // FE0E -> text variation selector - // FE0F -> emoji variation selector - if (strText.IndexOf('\uFE0F') == -1) { - return null; - } - strText = strText.Replace("\uFE0F", "");// strText.Substring(0, strText.Length - 1); - if (m_dic_xml.ContainsKey(strText)) { - return strText; - } - return null; - } - - public void DrawEmoji(ISTTextBoxRender render, string strChar, int nX, int nY, int nWidth, bool bSelected) { - strChar = this.GetEmojiString(strChar); - CacheInfo ci; - if (string.IsNullOrEmpty(strChar)) { - strChar = "none"; - } - if (m_dic_cache.ContainsKey(strChar)) { - ci = m_dic_cache[strChar]; - if (ci.Size != nWidth) { - ci.Image.Dispose(); - ci.Image = this.GetEmojiImage(strChar, nWidth); - m_dic_cache[strChar] = ci; - } - } else { - ci.Size = nWidth; - ci.Image = this.GetEmojiImage(strChar, nWidth); - ci.SelectedImage = this.SetAlpha((Bitmap)ci.Image.Clone()); - m_dic_cache.Add(strChar, ci); - } - Rect rect = new Rect(nX, nY, nWidth, nWidth); - render.DrawImage(bSelected ? ci.SelectedImage : ci.Image, rect); - //if (!bSelected) { - // render.DrawImage(ci.Image, rect); - //} else { - // using (Bitmap bmp = (Bitmap)ci.Image.Clone()) { - // var bmpData = bmp.LockBits(new Rectangle(0, 0, nWidth, nWidth), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); - // byte[] byClr = new byte[bmpData.Stride * bmpData.Height]; - // Marshal.Copy(bmpData.Scan0, byClr, 0, byClr.Length); - // for (int x = 0; x < bmp.Width; x++) { - // for (int y = 0; y < bmp.Height; y++) { - // int nIndex = y * bmpData.Stride + x * 4 + 3; - // byClr[nIndex] = (byte)(byClr[nIndex] >> 1); - // } - // } - // Marshal.Copy(byClr, 0, bmpData.Scan0, byClr.Length); - // bmp.UnlockBits(bmpData); - // render.DrawImage(bmp, rect); - // } - //} - } - - public Image GetEmojiImage(string strChar, int nSize) { - strChar = this.GetEmojiString(strChar); - if (strChar == null) { - return null; - } - Bitmap bmp = new Bitmap(nSize, nSize); - Graphics g = Graphics.FromImage(bmp); - using (SvgDocument svg = SvgDocument.FromXml(m_dic_xml[strChar])) - { - svg.Draw(g, new Rect(0, 0, nSize, nSize)); - } - return bmp; - } - - public Image SetAlpha(Bitmap bmp) { - //确定图像的宽和高 - int height = bmp.Height; - int width = bmp.Width; - - using (var l = bmp.Lock()) - {//l.DataPointer就是数据指针,一般不建议直接使用,因为不同平台,不同图形适配器,不同位图格式,数据格式不一样,那你就需要判断不同格式来遍历指针数据处理了 - for (int x = 0; x < width ; x++) - { - for (int y = 0; y < height; y++) - { - l.GetPixel(x, y, out byte a, out byte r, out byte g, out byte b); - var p = (byte)Math.Min(255, 0.7 * r + (0.2 * g) + (0.1 * b)); - l.SetPixel(x, y, (byte)(a >> 1), r, g, b); - } // x - } // y - } - return bmp; - } - - private int InitSvgFromPackage(string strFile) { - int nCounter = 0; - Dictionary dic = new Dictionary(); - using (StreamReader reader = new StreamReader(strFile, Encoding.UTF8)) { - string strLine = string.Empty; - while ((strLine = reader.ReadLine()) != null) { - int nIndex = strLine.IndexOf(','); - string strXml = strLine.Substring(nIndex + 1); - dic.Add(this.GetString(strLine.Substring(0, nIndex)), strXml); - } - } - if (!dic.ContainsKey("none")) { - dic.Add("none", ""); - } - m_dic_xml = dic; - return nCounter; - } - - public string GetString(string strText) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < strText.Length; i += 4) { - sb.Append((char)(Convert.ToInt32(strText.Substring(i, 4), 16))); - } - return sb.ToString(); - } - /// - /// Package all svg files to one file - /// - /// The svg path - /// The out file - /// Svg count - public static int PackageSvgFiles(string strSvgFilesPath, string strFileOut) { - int nCounter = 0; - Regex reg_start = new Regex(@"^\s+|\s+$", RegexOptions.Multiline); - using (StreamWriter writer = new StreamWriter(strFileOut, false, Encoding.UTF8)) { - foreach (var v in Directory.GetFiles(strSvgFilesPath, "*.svg")) { - string strName = Path.GetFileNameWithoutExtension(v); - string strText = EmojiRender.FileNameToUnicode(strName); - string strXml = File.ReadAllText(v).Trim(); - strXml = reg_start.Replace(strXml, "").Replace("\r", "").Replace("\n", ""); - writer.WriteLine(strText + "," + strXml); - nCounter++; - } - } - return nCounter; - } - - private static string FileNameToUnicode(string strName) { - //((strText[nIndex] & 0x03FF) << 10) + (strText[nIndex + 1] & 0x03FF) + 0x10000; - strName.ToLower(); - if (strName[0] == 'u') { - strName = strName.Substring(1); - } - string strRet = string.Empty; - foreach (var v in strName.Split('-', '_')) { - int number = Convert.ToInt32(v, 16); - if (number < 0x10000) { - strRet += number.ToString("X4"); - } else { - number &= 0xFFFF; - int nH = (number >> 10) | 0xD800; //D800-DBFF -> hight - int nL = (number & 0x03FF) | 0xDC00; //DC00-DEFF -> low - strRet += nH.ToString("X4"); - strRet += nL.ToString("X4"); - } - } - return strRet; - } - - public void Dispose() { - /*if (m_img_attr_normal != null) { - m_img_attr_normal.Dispose(); - } - if (m_img_attr_selected != null) { - m_img_attr_selected.Dispose(); - }*/ - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgAttributes.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgAttributes.cs deleted file mode 100644 index b173385..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgAttributes.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; -using System.Collections; -using System.Drawing.Drawing2D; - -namespace ST.Library.Drawing.SvgRender -{ - public partial class SvgAttributes : IEnumerable - { - private Dictionary m_dic_attr_has_set = new Dictionary(); - private Dictionary m_dic_attr_default = new Dictionary(); - - public string this[string strKey] { - get { - if (m_dic_attr_has_set.ContainsKey(strKey)) { - return m_dic_attr_has_set[strKey]; - } - return null; - } - } - - public bool Set(string strKey, string strValue) { - if (m_dic_attr_has_set.ContainsKey(strKey)) { - if (string.IsNullOrEmpty(strValue)) { - m_dic_attr_has_set.Remove(strValue); - } else { - if (m_dic_value_check.ContainsKey(strKey)) { - if (!m_dic_value_check[strKey](strValue)) { - return false; - } - } - m_dic_attr_has_set[strKey] = strValue; - } - } else { - if (m_dic_value_check.ContainsKey(strKey)) { - if (!m_dic_value_check[strKey](strValue)) { - return false; - } - } - m_dic_attr_has_set.Add(strKey, strValue); - } - return true; - } - - public bool SetDefault(string strKey, string strValue) { - if (m_dic_attr_default.ContainsKey(strKey)) { - if (string.IsNullOrEmpty(strValue)) { - m_dic_attr_default.Remove(strValue); - } else { - if (m_dic_value_check.ContainsKey(strKey)) { - if (!m_dic_value_check[strKey](strValue)) { - return false; - } - } - m_dic_attr_default[strKey] = strValue; - } - } else { - if (m_dic_value_check.ContainsKey(strKey)) { - if (!m_dic_value_check[strKey](strValue)) { - return false; - } - } - m_dic_attr_default.Add(strKey, strValue); - } - return true; - } - - public string Get(string strKey) { - string str = this[strKey]; - if (str != null) { - return str; - } - return this.GetDefault(strKey); - } - - public string GetDefault(string strKey) { - if (m_dic_attr_default.ContainsKey(strKey)) { - return m_dic_attr_default[strKey]; - } - return SvgAttributes.GetStaticDefault(strKey); - } - - public static bool SetCheckCallBack(string strName, SvgAttributeValueCheckCallBack cb) { - return SvgAttributes.AddCheckCallBack(strName, cb, true); - } - - public static bool AddCheckCallBack(string strName, SvgAttributeValueCheckCallBack cb, bool isOverrid) { - if (!m_dic_value_check.ContainsKey(strName)) { - m_dic_value_check.Add(strName, cb); - return true; - } - if (isOverrid) { - m_dic_value_check[strName] = cb; - return true; - } - return false; - } - - public string[] GetHasSetKeys() { - return m_dic_attr_has_set.Keys.ToArray(); - } - - // [interface] ======================================================== - public IEnumerator> GetEnumerator() { - foreach (var v in m_dic_attr_has_set) { - yield return v; - } - //foreach (var v in m_dic_attr_inherit) { - // yield return v; - //} - } - - IEnumerator IEnumerable.GetEnumerator() { - return this.GetEnumerator(); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgAttributes.static.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgAttributes.static.cs deleted file mode 100644 index acc41a7..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgAttributes.static.cs +++ /dev/null @@ -1,1201 +0,0 @@ -using CPF.Drawing; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; - -namespace ST.Library.Drawing.SvgRender -{ - public delegate bool SvgAttributeValueCheckCallBack(string strValue); - - public partial class SvgAttributes - { - private static Regex m_reg_number = new Regex(@"([+-]?(?:\.\d+|\d+(?:\.\d+)?)(?:[eE]-\d+)?)"); - private static Regex m_reg_angle = new Regex(@"([+-]?(?:\.\d+|\d+(?:\.\d+)?)(?:[eE]-\d+)?)(deg|grad|rad)?"); - private static Regex m_reg_size = new Regex(@"([+-]?(?:\.\d+|\d+(?:\.\d+)?)(?:[eE]-\d+)?)(em|ex|px|in|cm|mm|pt|pc|%)?"); - private static Regex m_reg_transform = new Regex(@"(rotate|scale|scaleX|scaleY|skew|skewX|skewY|translate|translateX|translateY|matrix)\((.*?)\)"); - private static Dictionary m_dic_color = new Dictionary(); - private static Dictionary m_dic_value_check = new Dictionary(); - private static Dictionary m_dic_static_default = new Dictionary(); - - static SvgAttributes() { - SvgAttributes.InitColorTable(); - SvgAttributes.InitDefaultCallBack(); - SvgAttributes.InitDefaultValue(); - } - - private static void InitColorTable() { - m_dic_color.Add("aliceblue", Color.FromArgb(240, 248, 255)); - m_dic_color.Add("antiquewhite", Color.FromArgb(250, 235, 215)); - m_dic_color.Add("antiquewhite1", Color.FromArgb(255, 239, 219)); - m_dic_color.Add("antiquewhite2", Color.FromArgb(238, 223, 204)); - m_dic_color.Add("antiquewhite3", Color.FromArgb(205, 192, 176)); - m_dic_color.Add("antiquewhite4", Color.FromArgb(139, 131, 120)); - m_dic_color.Add("aquamarine", Color.FromArgb(127, 255, 212)); - m_dic_color.Add("aquamarine1", Color.FromArgb(127, 255, 212)); - m_dic_color.Add("aquamarine2", Color.FromArgb(118, 238, 198)); - m_dic_color.Add("aquamarine3", Color.FromArgb(102, 205, 170)); - m_dic_color.Add("aquamarine4", Color.FromArgb(69, 139, 116)); - m_dic_color.Add("azure", Color.FromArgb(240, 255, 255)); - m_dic_color.Add("azure1", Color.FromArgb(240, 255, 255)); - m_dic_color.Add("azure2", Color.FromArgb(224, 238, 238)); - m_dic_color.Add("azure3", Color.FromArgb(193, 205, 205)); - m_dic_color.Add("azure4", Color.FromArgb(131, 139, 139)); - m_dic_color.Add("beige", Color.FromArgb(245, 245, 220)); - m_dic_color.Add("bisque", Color.FromArgb(255, 228, 196)); - m_dic_color.Add("bisque1", Color.FromArgb(255, 228, 196)); - m_dic_color.Add("bisque2", Color.FromArgb(238, 213, 183)); - m_dic_color.Add("bisque3", Color.FromArgb(205, 183, 158)); - m_dic_color.Add("bisque4", Color.FromArgb(139, 125, 107)); - m_dic_color.Add("black", Color.FromArgb(0, 0, 0)); - m_dic_color.Add("blanchedalmond", Color.FromArgb(255, 235, 205)); - m_dic_color.Add("blue", Color.FromArgb(0, 0, 255)); - m_dic_color.Add("blue1", Color.FromArgb(0, 0, 255)); - m_dic_color.Add("blue2", Color.FromArgb(0, 0, 238)); - m_dic_color.Add("blue3", Color.FromArgb(0, 0, 205)); - m_dic_color.Add("blue4", Color.FromArgb(0, 0, 139)); - m_dic_color.Add("blueviolet", Color.FromArgb(138, 43, 226)); - m_dic_color.Add("brown", Color.FromArgb(165, 42, 42)); - m_dic_color.Add("brown1", Color.FromArgb(255, 64, 64)); - m_dic_color.Add("brown2", Color.FromArgb(238, 59, 59)); - m_dic_color.Add("brown3", Color.FromArgb(205, 51, 51)); - m_dic_color.Add("brown4", Color.FromArgb(139, 35, 35)); - m_dic_color.Add("burlywood", Color.FromArgb(222, 184, 135)); - m_dic_color.Add("burlywood1", Color.FromArgb(255, 211, 155)); - m_dic_color.Add("burlywood2", Color.FromArgb(238, 197, 145)); - m_dic_color.Add("burlywood3", Color.FromArgb(205, 170, 125)); - m_dic_color.Add("burlywood4", Color.FromArgb(139, 115, 85)); - m_dic_color.Add("cadetblue", Color.FromArgb(95, 158, 160)); - m_dic_color.Add("cadetblue1", Color.FromArgb(152, 245, 255)); - m_dic_color.Add("cadetblue2", Color.FromArgb(142, 229, 238)); - m_dic_color.Add("cadetblue3", Color.FromArgb(122, 197, 205)); - m_dic_color.Add("cadetblue4", Color.FromArgb(83, 134, 139)); - m_dic_color.Add("chartreuse", Color.FromArgb(127, 255, 0)); - m_dic_color.Add("chartreuse1", Color.FromArgb(127, 255, 0)); - m_dic_color.Add("chartreuse2", Color.FromArgb(118, 238, 0)); - m_dic_color.Add("chartreuse3", Color.FromArgb(102, 205, 0)); - m_dic_color.Add("chartreuse4", Color.FromArgb(69, 139, 0)); - m_dic_color.Add("chocolate", Color.FromArgb(210, 105, 30)); - m_dic_color.Add("chocolate1", Color.FromArgb(255, 127, 36)); - m_dic_color.Add("chocolate2", Color.FromArgb(238, 118, 33)); - m_dic_color.Add("chocolate3", Color.FromArgb(205, 102, 29)); - m_dic_color.Add("chocolate4", Color.FromArgb(139, 69, 19)); - m_dic_color.Add("coral", Color.FromArgb(255, 127, 80)); - m_dic_color.Add("coral1", Color.FromArgb(255, 114, 86)); - m_dic_color.Add("coral2", Color.FromArgb(238, 106, 80)); - m_dic_color.Add("coral3", Color.FromArgb(205, 91, 69)); - m_dic_color.Add("coral4", Color.FromArgb(139, 62, 47)); - m_dic_color.Add("cornflowerblue", Color.FromArgb(100, 149, 237)); - m_dic_color.Add("cornsilk", Color.FromArgb(255, 248, 220)); - m_dic_color.Add("cornsilk1", Color.FromArgb(255, 248, 220)); - m_dic_color.Add("cornsilk2", Color.FromArgb(238, 232, 205)); - m_dic_color.Add("cornsilk3", Color.FromArgb(205, 200, 177)); - m_dic_color.Add("cornsilk4", Color.FromArgb(139, 136, 120)); - m_dic_color.Add("cyan", Color.FromArgb(0, 255, 255)); - m_dic_color.Add("cyan1", Color.FromArgb(0, 255, 255)); - m_dic_color.Add("cyan2", Color.FromArgb(0, 238, 238)); - m_dic_color.Add("cyan3", Color.FromArgb(0, 205, 205)); - m_dic_color.Add("cyan4", Color.FromArgb(0, 139, 139)); - m_dic_color.Add("darkblue", Color.FromArgb(0, 0, 139)); - m_dic_color.Add("darkcyan", Color.FromArgb(0, 139, 139)); - m_dic_color.Add("darkgoldenrod", Color.FromArgb(184, 134, 11)); - m_dic_color.Add("darkgoldenrod1", Color.FromArgb(255, 185, 15)); - m_dic_color.Add("darkgoldenrod2", Color.FromArgb(238, 173, 14)); - m_dic_color.Add("darkgoldenrod3", Color.FromArgb(205, 149, 12)); - m_dic_color.Add("darkgoldenrod4", Color.FromArgb(139, 101, 8)); - m_dic_color.Add("darkgreen", Color.FromArgb(0, 100, 0)); - m_dic_color.Add("darkgrey", Color.FromArgb(169, 169, 169)); - m_dic_color.Add("darkkhaki", Color.FromArgb(189, 183, 107)); - m_dic_color.Add("darkmagenta", Color.FromArgb(139, 0, 139)); - m_dic_color.Add("darkolivegreen", Color.FromArgb(85, 107, 47)); - m_dic_color.Add("darkolivegreen1", Color.FromArgb(202, 255, 112)); - m_dic_color.Add("darkolivegreen2", Color.FromArgb(188, 238, 104)); - m_dic_color.Add("darkolivegreen3", Color.FromArgb(162, 205, 90)); - m_dic_color.Add("darkolivegreen4", Color.FromArgb(110, 139, 61)); - m_dic_color.Add("darkorange", Color.FromArgb(255, 140, 0)); - m_dic_color.Add("darkorange1", Color.FromArgb(255, 127, 0)); - m_dic_color.Add("darkorange2", Color.FromArgb(238, 118, 0)); - m_dic_color.Add("darkorange3", Color.FromArgb(205, 102, 0)); - m_dic_color.Add("darkorange4", Color.FromArgb(139, 69, 0)); - m_dic_color.Add("darkorchid", Color.FromArgb(153, 50, 204)); - m_dic_color.Add("darkorchid1", Color.FromArgb(191, 62, 255)); - m_dic_color.Add("darkorchid2", Color.FromArgb(178, 58, 238)); - m_dic_color.Add("darkorchid3", Color.FromArgb(154, 50, 205)); - m_dic_color.Add("darkorchid4", Color.FromArgb(104, 34, 139)); - m_dic_color.Add("darkred", Color.FromArgb(139, 0, 0)); - m_dic_color.Add("darksalmon", Color.FromArgb(233, 150, 122)); - m_dic_color.Add("darkseagreen", Color.FromArgb(143, 188, 143)); - m_dic_color.Add("darkseagreen1", Color.FromArgb(193, 255, 193)); - m_dic_color.Add("darkseagreen2", Color.FromArgb(180, 238, 180)); - m_dic_color.Add("darkseagreen3", Color.FromArgb(155, 205, 155)); - m_dic_color.Add("darkseagreen4", Color.FromArgb(105, 139, 105)); - m_dic_color.Add("darkslateblue", Color.FromArgb(72, 61, 139)); - m_dic_color.Add("darkslategray", Color.FromArgb(47, 79, 79)); - m_dic_color.Add("darkslategray1", Color.FromArgb(151, 255, 255)); - m_dic_color.Add("darkslategray2", Color.FromArgb(141, 238, 238)); - m_dic_color.Add("darkslategray3", Color.FromArgb(121, 205, 205)); - m_dic_color.Add("darkslategray4", Color.FromArgb(82, 139, 139)); - m_dic_color.Add("darkturquoise", Color.FromArgb(0, 206, 209)); - m_dic_color.Add("darkviolet", Color.FromArgb(148, 0, 211)); - m_dic_color.Add("deeppink", Color.FromArgb(255, 20, 147)); - m_dic_color.Add("deeppink1", Color.FromArgb(255, 20, 147)); - m_dic_color.Add("deeppink2", Color.FromArgb(238, 18, 137)); - m_dic_color.Add("deeppink3", Color.FromArgb(205, 16, 118)); - m_dic_color.Add("deeppink4", Color.FromArgb(139, 10, 80)); - m_dic_color.Add("deepskyblue", Color.FromArgb(0, 191, 255)); - m_dic_color.Add("deepskyblue1", Color.FromArgb(0, 191, 255)); - m_dic_color.Add("deepskyblue2", Color.FromArgb(0, 178, 238)); - m_dic_color.Add("deepskyblue3", Color.FromArgb(0, 154, 205)); - m_dic_color.Add("deepskyblue4", Color.FromArgb(0, 104, 139)); - m_dic_color.Add("dimgrey", Color.FromArgb(105, 105, 105)); - m_dic_color.Add("dodgerblue", Color.FromArgb(30, 144, 255)); - m_dic_color.Add("dodgerblue1", Color.FromArgb(30, 144, 255)); - m_dic_color.Add("dodgerblue2", Color.FromArgb(28, 134, 238)); - m_dic_color.Add("dodgerblue3", Color.FromArgb(24, 116, 205)); - m_dic_color.Add("dodgerblue4", Color.FromArgb(16, 78, 139)); - m_dic_color.Add("firebrick", Color.FromArgb(178, 34, 34)); - m_dic_color.Add("firebrick1", Color.FromArgb(255, 48, 48)); - m_dic_color.Add("firebrick2", Color.FromArgb(238, 44, 44)); - m_dic_color.Add("firebrick3", Color.FromArgb(205, 38, 38)); - m_dic_color.Add("firebrick4", Color.FromArgb(139, 26, 26)); - m_dic_color.Add("floralwhite", Color.FromArgb(255, 250, 240)); - m_dic_color.Add("forestgreen", Color.FromArgb(34, 139, 34)); - m_dic_color.Add("gainsboro", Color.FromArgb(220, 220, 220)); - m_dic_color.Add("ghostwhite", Color.FromArgb(248, 248, 255)); - m_dic_color.Add("gold", Color.FromArgb(255, 215, 0)); - m_dic_color.Add("gold1", Color.FromArgb(255, 215, 0)); - m_dic_color.Add("gold2", Color.FromArgb(238, 201, 0)); - m_dic_color.Add("gold3", Color.FromArgb(205, 173, 0)); - m_dic_color.Add("gold4", Color.FromArgb(139, 117, 0)); - m_dic_color.Add("goldenrod1", Color.FromArgb(255, 193, 37)); - m_dic_color.Add("goldenrod2", Color.FromArgb(238, 180, 34)); - m_dic_color.Add("goldenrod3", Color.FromArgb(205, 155, 29)); - m_dic_color.Add("goldenrod4", Color.FromArgb(139, 105, 20)); - m_dic_color.Add("green", Color.FromArgb(0, 255, 0)); - m_dic_color.Add("green1", Color.FromArgb(0, 255, 0)); - m_dic_color.Add("green2", Color.FromArgb(0, 238, 0)); - m_dic_color.Add("green3", Color.FromArgb(0, 205, 0)); - m_dic_color.Add("green4", Color.FromArgb(0, 139, 0)); - m_dic_color.Add("greenyellow", Color.FromArgb(173, 255, 47)); - m_dic_color.Add("grey", Color.FromArgb(190, 190, 190)); - m_dic_color.Add("honeydew", Color.FromArgb(240, 255, 240)); - m_dic_color.Add("honeydew1", Color.FromArgb(240, 255, 240)); - m_dic_color.Add("honeydew2", Color.FromArgb(224, 238, 224)); - m_dic_color.Add("honeydew3", Color.FromArgb(193, 205, 193)); - m_dic_color.Add("honeydew4", Color.FromArgb(131, 139, 131)); - m_dic_color.Add("hotpink", Color.FromArgb(255, 105, 180)); - m_dic_color.Add("hotpink1", Color.FromArgb(255, 110, 180)); - m_dic_color.Add("hotpink2", Color.FromArgb(238, 106, 167)); - m_dic_color.Add("hotpink3", Color.FromArgb(205, 96, 144)); - m_dic_color.Add("hotpink4", Color.FromArgb(139, 58, 98)); - m_dic_color.Add("indianred", Color.FromArgb(205, 92, 92)); - m_dic_color.Add("indianred1", Color.FromArgb(255, 106, 106)); - m_dic_color.Add("indianred2", Color.FromArgb(238, 99, 99)); - m_dic_color.Add("indianred3", Color.FromArgb(205, 85, 85)); - m_dic_color.Add("indianred4", Color.FromArgb(139, 58, 58)); - m_dic_color.Add("ivory", Color.FromArgb(255, 255, 240)); - m_dic_color.Add("ivory1", Color.FromArgb(255, 255, 240)); - m_dic_color.Add("ivory2", Color.FromArgb(238, 238, 224)); - m_dic_color.Add("ivory3", Color.FromArgb(205, 205, 193)); - m_dic_color.Add("ivory4", Color.FromArgb(139, 139, 131)); - m_dic_color.Add("khaki1", Color.FromArgb(255, 246, 143)); - m_dic_color.Add("khaki2", Color.FromArgb(238, 230, 133)); - m_dic_color.Add("khaki3", Color.FromArgb(205, 198, 115)); - m_dic_color.Add("khaki4", Color.FromArgb(139, 134, 78)); - m_dic_color.Add("lavenderblush", Color.FromArgb(255, 240, 245)); - m_dic_color.Add("lavenderblush1", Color.FromArgb(255, 240, 245)); - m_dic_color.Add("lavenderblush2", Color.FromArgb(238, 224, 229)); - m_dic_color.Add("lavenderblush3", Color.FromArgb(205, 193, 197)); - m_dic_color.Add("lavenderblush4", Color.FromArgb(139, 131, 134)); - m_dic_color.Add("lawngreen", Color.FromArgb(124, 252, 0)); - m_dic_color.Add("lemonchiffon", Color.FromArgb(255, 250, 205)); - m_dic_color.Add("lemonchiffon1", Color.FromArgb(255, 250, 205)); - m_dic_color.Add("lemonchiffon2", Color.FromArgb(238, 233, 191)); - m_dic_color.Add("lemonchiffon3", Color.FromArgb(205, 201, 165)); - m_dic_color.Add("lemonchiffon4", Color.FromArgb(139, 137, 112)); - m_dic_color.Add("lightblue", Color.FromArgb(173, 216, 230)); - m_dic_color.Add("lightblue1", Color.FromArgb(191, 239, 255)); - m_dic_color.Add("lightblue2", Color.FromArgb(178, 223, 238)); - m_dic_color.Add("lightblue3", Color.FromArgb(154, 192, 205)); - m_dic_color.Add("lightblue4", Color.FromArgb(104, 131, 139)); - m_dic_color.Add("lightcoral", Color.FromArgb(240, 128, 128)); - m_dic_color.Add("lightcyan", Color.FromArgb(224, 255, 255)); - m_dic_color.Add("lightcyan1", Color.FromArgb(224, 255, 255)); - m_dic_color.Add("lightcyan2", Color.FromArgb(209, 238, 238)); - m_dic_color.Add("lightcyan3", Color.FromArgb(180, 205, 205)); - m_dic_color.Add("lightcyan4", Color.FromArgb(122, 139, 139)); - m_dic_color.Add("lightgoldenrod", Color.FromArgb(238, 221, 130)); - m_dic_color.Add("lightgoldenrod1", Color.FromArgb(255, 236, 139)); - m_dic_color.Add("lightgoldenrod2", Color.FromArgb(238, 220, 130)); - m_dic_color.Add("lightgoldenrod3", Color.FromArgb(205, 190, 112)); - m_dic_color.Add("lightgoldenrod4", Color.FromArgb(139, 129, 76)); - m_dic_color.Add("lightgray", Color.FromArgb(211, 211, 211)); - m_dic_color.Add("lightgreen", Color.FromArgb(144, 238, 144)); - m_dic_color.Add("lightpink", Color.FromArgb(255, 182, 193)); - m_dic_color.Add("lightpink1", Color.FromArgb(255, 174, 185)); - m_dic_color.Add("lightpink2", Color.FromArgb(238, 162, 173)); - m_dic_color.Add("lightpink3", Color.FromArgb(205, 140, 149)); - m_dic_color.Add("lightpink4", Color.FromArgb(139, 95, 101)); - m_dic_color.Add("lightsalmon", Color.FromArgb(255, 160, 122)); - m_dic_color.Add("lightsalmon1", Color.FromArgb(255, 160, 122)); - m_dic_color.Add("lightsalmon2", Color.FromArgb(238, 149, 114)); - m_dic_color.Add("lightsalmon3", Color.FromArgb(205, 129, 98)); - m_dic_color.Add("lightsalmon4", Color.FromArgb(139, 87, 66)); - m_dic_color.Add("lightseagreen", Color.FromArgb(32, 178, 170)); - m_dic_color.Add("lightskyblue", Color.FromArgb(135, 206, 250)); - m_dic_color.Add("lightskyblue1", Color.FromArgb(176, 226, 255)); - m_dic_color.Add("lightskyblue2", Color.FromArgb(164, 211, 238)); - m_dic_color.Add("lightskyblue3", Color.FromArgb(141, 182, 205)); - m_dic_color.Add("lightskyblue4", Color.FromArgb(96, 123, 139)); - m_dic_color.Add("lightslateblue", Color.FromArgb(132, 112, 255)); - m_dic_color.Add("lightslategray", Color.FromArgb(119, 136, 153)); - m_dic_color.Add("lightsteelblue", Color.FromArgb(176, 196, 222)); - m_dic_color.Add("lightsteelblue1", Color.FromArgb(202, 225, 255)); - m_dic_color.Add("lightsteelblue2", Color.FromArgb(188, 210, 238)); - m_dic_color.Add("lightsteelblue3", Color.FromArgb(162, 181, 205)); - m_dic_color.Add("lightsteelblue4", Color.FromArgb(110, 123, 139)); - m_dic_color.Add("lightyellow", Color.FromArgb(255, 255, 224)); - m_dic_color.Add("lightyellow1", Color.FromArgb(255, 255, 224)); - m_dic_color.Add("lightyellow2", Color.FromArgb(238, 238, 209)); - m_dic_color.Add("lightyellow3", Color.FromArgb(205, 205, 180)); - m_dic_color.Add("lightyellow4", Color.FromArgb(139, 139, 122)); - m_dic_color.Add("limegreen", Color.FromArgb(50, 205, 50)); - m_dic_color.Add("linen", Color.FromArgb(250, 240, 230)); - m_dic_color.Add("ltgoldenrodyello", Color.FromArgb(250, 250, 210)); - m_dic_color.Add("magenta", Color.FromArgb(255, 0, 255)); - m_dic_color.Add("magenta1", Color.FromArgb(255, 0, 255)); - m_dic_color.Add("magenta2", Color.FromArgb(238, 0, 238)); - m_dic_color.Add("magenta3", Color.FromArgb(205, 0, 205)); - m_dic_color.Add("magenta4", Color.FromArgb(139, 0, 139)); - m_dic_color.Add("maroon", Color.FromArgb(176, 48, 96)); - m_dic_color.Add("maroon1", Color.FromArgb(255, 52, 179)); - m_dic_color.Add("maroon2", Color.FromArgb(238, 48, 167)); - m_dic_color.Add("maroon3", Color.FromArgb(205, 41, 144)); - m_dic_color.Add("maroon4", Color.FromArgb(139, 28, 98)); - m_dic_color.Add("medspringgreen", Color.FromArgb(0, 250, 154)); - m_dic_color.Add("mediumaquamarine", Color.FromArgb(102, 205, 170)); - m_dic_color.Add("mediumblue", Color.FromArgb(0, 0, 205)); - m_dic_color.Add("mediumorchid", Color.FromArgb(186, 85, 211)); - m_dic_color.Add("mediumorchid1", Color.FromArgb(224, 102, 255)); - m_dic_color.Add("mediumorchid2", Color.FromArgb(209, 95, 238)); - m_dic_color.Add("mediumorchid3", Color.FromArgb(180, 82, 205)); - m_dic_color.Add("mediumorchid4", Color.FromArgb(122, 55, 139)); - m_dic_color.Add("mediumpurple", Color.FromArgb(147, 112, 219)); - m_dic_color.Add("mediumpurple1", Color.FromArgb(171, 130, 255)); - m_dic_color.Add("mediumpurple2", Color.FromArgb(159, 121, 238)); - m_dic_color.Add("mediumpurple3", Color.FromArgb(137, 104, 205)); - m_dic_color.Add("mediumpurple4", Color.FromArgb(93, 71, 139)); - m_dic_color.Add("mediumseagreen", Color.FromArgb(60, 179, 113)); - m_dic_color.Add("mediumslateblue", Color.FromArgb(123, 104, 238)); - m_dic_color.Add("mediumturquoise", Color.FromArgb(72, 209, 204)); - m_dic_color.Add("mediumvioletred", Color.FromArgb(199, 21, 133)); - m_dic_color.Add("midnightblue", Color.FromArgb(25, 25, 112)); - m_dic_color.Add("mintcream", Color.FromArgb(245, 255, 250)); - m_dic_color.Add("mistyrose", Color.FromArgb(255, 228, 225)); - m_dic_color.Add("mistyrose1", Color.FromArgb(255, 228, 225)); - m_dic_color.Add("mistyrose2", Color.FromArgb(238, 213, 210)); - m_dic_color.Add("mistyrose3", Color.FromArgb(205, 183, 181)); - m_dic_color.Add("mistyrose4", Color.FromArgb(139, 125, 123)); - m_dic_color.Add("moccasin", Color.FromArgb(255, 228, 181)); - m_dic_color.Add("navajowhite", Color.FromArgb(255, 222, 173)); - m_dic_color.Add("navajowhite1", Color.FromArgb(255, 222, 173)); - m_dic_color.Add("navajowhite2", Color.FromArgb(238, 207, 161)); - m_dic_color.Add("navajowhite3", Color.FromArgb(205, 179, 139)); - m_dic_color.Add("navajowhite4", Color.FromArgb(139, 121, 94)); - m_dic_color.Add("navyblue", Color.FromArgb(0, 0, 128)); - m_dic_color.Add("oldlace", Color.FromArgb(253, 245, 230)); - m_dic_color.Add("olivedrab", Color.FromArgb(107, 142, 35)); - m_dic_color.Add("olivedrab1", Color.FromArgb(192, 255, 62)); - m_dic_color.Add("olivedrab2", Color.FromArgb(179, 238, 58)); - m_dic_color.Add("olivedrab3", Color.FromArgb(154, 205, 50)); - m_dic_color.Add("olivedrab4", Color.FromArgb(105, 139, 34)); - m_dic_color.Add("orange", Color.FromArgb(255, 165, 0)); - m_dic_color.Add("orange1", Color.FromArgb(255, 165, 0)); - m_dic_color.Add("orange2", Color.FromArgb(238, 154, 0)); - m_dic_color.Add("orange3", Color.FromArgb(205, 133, 0)); - m_dic_color.Add("orange4", Color.FromArgb(139, 90, 0)); - m_dic_color.Add("orangered", Color.FromArgb(255, 69, 0)); - m_dic_color.Add("orangered1", Color.FromArgb(255, 69, 0)); - m_dic_color.Add("orangered2", Color.FromArgb(238, 64, 0)); - m_dic_color.Add("orangered3", Color.FromArgb(205, 55, 0)); - m_dic_color.Add("orangered4", Color.FromArgb(139, 37, 0)); - m_dic_color.Add("orchid", Color.FromArgb(218, 112, 214)); - m_dic_color.Add("orchid1", Color.FromArgb(255, 131, 250)); - m_dic_color.Add("orchid2", Color.FromArgb(238, 122, 233)); - m_dic_color.Add("orchid3", Color.FromArgb(205, 105, 201)); - m_dic_color.Add("orchid4", Color.FromArgb(139, 71, 137)); - m_dic_color.Add("palegoldenrod", Color.FromArgb(238, 232, 170)); - m_dic_color.Add("palegreen", Color.FromArgb(152, 251, 152)); - m_dic_color.Add("palegreen1", Color.FromArgb(154, 255, 154)); - m_dic_color.Add("palegreen2", Color.FromArgb(144, 238, 144)); - m_dic_color.Add("palegreen3", Color.FromArgb(124, 205, 124)); - m_dic_color.Add("palegreen4", Color.FromArgb(84, 139, 84)); - m_dic_color.Add("paleturquoise", Color.FromArgb(175, 238, 238)); - m_dic_color.Add("paleturquoise1", Color.FromArgb(187, 255, 255)); - m_dic_color.Add("paleturquoise2", Color.FromArgb(174, 238, 238)); - m_dic_color.Add("paleturquoise3", Color.FromArgb(150, 205, 205)); - m_dic_color.Add("paleturquoise4", Color.FromArgb(102, 139, 139)); - m_dic_color.Add("palevioletred", Color.FromArgb(219, 112, 147)); - m_dic_color.Add("palevioletred1", Color.FromArgb(255, 130, 171)); - m_dic_color.Add("palevioletred2", Color.FromArgb(238, 121, 159)); - m_dic_color.Add("palevioletred3", Color.FromArgb(205, 104, 137)); - m_dic_color.Add("palevioletred4", Color.FromArgb(139, 71, 93)); - m_dic_color.Add("papayawhip", Color.FromArgb(255, 239, 213)); - m_dic_color.Add("peachpuff", Color.FromArgb(255, 218, 185)); - m_dic_color.Add("peachpuff1", Color.FromArgb(255, 218, 185)); - m_dic_color.Add("peachpuff2", Color.FromArgb(238, 203, 173)); - m_dic_color.Add("peachpuff3", Color.FromArgb(205, 175, 149)); - m_dic_color.Add("peachpuff4", Color.FromArgb(139, 119, 101)); - m_dic_color.Add("peru", Color.FromArgb(205, 133, 63)); - m_dic_color.Add("pink", Color.FromArgb(255, 192, 203)); - m_dic_color.Add("pink1", Color.FromArgb(255, 181, 197)); - m_dic_color.Add("pink2", Color.FromArgb(238, 169, 184)); - m_dic_color.Add("pink3", Color.FromArgb(205, 145, 158)); - m_dic_color.Add("pink4", Color.FromArgb(139, 99, 108)); - m_dic_color.Add("plum", Color.FromArgb(221, 160, 221)); - m_dic_color.Add("plum1", Color.FromArgb(255, 187, 255)); - m_dic_color.Add("plum2", Color.FromArgb(238, 174, 238)); - m_dic_color.Add("plum3", Color.FromArgb(205, 150, 205)); - m_dic_color.Add("plum4", Color.FromArgb(139, 102, 139)); - m_dic_color.Add("powderblue", Color.FromArgb(176, 224, 230)); - m_dic_color.Add("purple", Color.FromArgb(160, 32, 240)); - m_dic_color.Add("purple1", Color.FromArgb(155, 48, 255)); - m_dic_color.Add("purple2", Color.FromArgb(145, 44, 238)); - m_dic_color.Add("purple3", Color.FromArgb(125, 38, 205)); - m_dic_color.Add("purple4", Color.FromArgb(85, 26, 139)); - m_dic_color.Add("red", Color.FromArgb(255, 0, 0)); - m_dic_color.Add("red1", Color.FromArgb(255, 0, 0)); - m_dic_color.Add("red2", Color.FromArgb(238, 0, 0)); - m_dic_color.Add("red3", Color.FromArgb(205, 0, 0)); - m_dic_color.Add("red4", Color.FromArgb(139, 0, 0)); - m_dic_color.Add("rosybrown", Color.FromArgb(188, 143, 143)); - m_dic_color.Add("rosybrown1", Color.FromArgb(255, 193, 193)); - m_dic_color.Add("rosybrown2", Color.FromArgb(238, 180, 180)); - m_dic_color.Add("rosybrown3", Color.FromArgb(205, 155, 155)); - m_dic_color.Add("rosybrown4", Color.FromArgb(139, 105, 105)); - m_dic_color.Add("royalblue", Color.FromArgb(65, 105, 225)); - m_dic_color.Add("royalblue1", Color.FromArgb(72, 118, 255)); - m_dic_color.Add("royalblue2", Color.FromArgb(67, 110, 238)); - m_dic_color.Add("royalblue3", Color.FromArgb(58, 95, 205)); - m_dic_color.Add("royalblue4", Color.FromArgb(39, 64, 139)); - m_dic_color.Add("saddlebrown", Color.FromArgb(139, 69, 19)); - m_dic_color.Add("salmon", Color.FromArgb(250, 128, 114)); - m_dic_color.Add("salmon1", Color.FromArgb(255, 140, 105)); - m_dic_color.Add("salmon2", Color.FromArgb(238, 130, 98)); - m_dic_color.Add("salmon3", Color.FromArgb(205, 112, 84)); - m_dic_color.Add("salmon4", Color.FromArgb(139, 76, 57)); - m_dic_color.Add("sandybrown", Color.FromArgb(244, 164, 96)); - m_dic_color.Add("seagreen", Color.FromArgb(46, 139, 87)); - m_dic_color.Add("seagreen1", Color.FromArgb(84, 255, 159)); - m_dic_color.Add("seagreen2", Color.FromArgb(78, 238, 148)); - m_dic_color.Add("seagreen3", Color.FromArgb(67, 205, 128)); - m_dic_color.Add("seagreen4", Color.FromArgb(46, 139, 87)); - m_dic_color.Add("seashell", Color.FromArgb(255, 245, 238)); - m_dic_color.Add("seashell1", Color.FromArgb(255, 245, 238)); - m_dic_color.Add("seashell2", Color.FromArgb(238, 229, 222)); - m_dic_color.Add("seashell3", Color.FromArgb(205, 197, 191)); - m_dic_color.Add("seashell4", Color.FromArgb(139, 134, 130)); - m_dic_color.Add("sienna", Color.FromArgb(160, 82, 45)); - m_dic_color.Add("sienna1", Color.FromArgb(255, 130, 71)); - m_dic_color.Add("sienna2", Color.FromArgb(238, 121, 66)); - m_dic_color.Add("sienna3", Color.FromArgb(205, 104, 57)); - m_dic_color.Add("sienna4", Color.FromArgb(139, 71, 38)); - m_dic_color.Add("skyblue", Color.FromArgb(135, 206, 235)); - m_dic_color.Add("skyblue1", Color.FromArgb(135, 206, 255)); - m_dic_color.Add("skyblue2", Color.FromArgb(126, 192, 238)); - m_dic_color.Add("skyblue3", Color.FromArgb(108, 166, 205)); - m_dic_color.Add("skyblue4", Color.FromArgb(74, 112, 139)); - m_dic_color.Add("slateblue", Color.FromArgb(106, 90, 205)); - m_dic_color.Add("slateblue1", Color.FromArgb(131, 111, 255)); - m_dic_color.Add("slateblue2", Color.FromArgb(122, 103, 238)); - m_dic_color.Add("slateblue3", Color.FromArgb(105, 89, 205)); - m_dic_color.Add("slateblue4", Color.FromArgb(71, 60, 139)); - m_dic_color.Add("slategray1", Color.FromArgb(198, 226, 255)); - m_dic_color.Add("slategray2", Color.FromArgb(185, 211, 238)); - m_dic_color.Add("slategray3", Color.FromArgb(159, 182, 205)); - m_dic_color.Add("slategray4", Color.FromArgb(108, 123, 139)); - m_dic_color.Add("slategrey", Color.FromArgb(112, 128, 144)); - m_dic_color.Add("snow", Color.FromArgb(255, 250, 250)); - m_dic_color.Add("snow1", Color.FromArgb(255, 250, 250)); - m_dic_color.Add("snow2", Color.FromArgb(238, 233, 233)); - m_dic_color.Add("snow3", Color.FromArgb(205, 201, 201)); - m_dic_color.Add("snow4", Color.FromArgb(139, 137, 137)); - m_dic_color.Add("springgreen", Color.FromArgb(0, 255, 127)); - m_dic_color.Add("springgreen1", Color.FromArgb(0, 255, 127)); - m_dic_color.Add("springgreen2", Color.FromArgb(0, 238, 118)); - m_dic_color.Add("springgreen3", Color.FromArgb(0, 205, 102)); - m_dic_color.Add("springgreen4", Color.FromArgb(0, 139, 69)); - m_dic_color.Add("steelblue", Color.FromArgb(70, 130, 180)); - m_dic_color.Add("steelblue1", Color.FromArgb(99, 184, 255)); - m_dic_color.Add("steelblue2", Color.FromArgb(92, 172, 238)); - m_dic_color.Add("steelblue3", Color.FromArgb(79, 148, 205)); - m_dic_color.Add("steelblue4", Color.FromArgb(54, 100, 139)); - m_dic_color.Add("tan", Color.FromArgb(210, 180, 140)); - m_dic_color.Add("tan1", Color.FromArgb(255, 165, 79)); - m_dic_color.Add("tan2", Color.FromArgb(238, 154, 73)); - m_dic_color.Add("tan3", Color.FromArgb(205, 133, 63)); - m_dic_color.Add("tan4", Color.FromArgb(139, 90, 43)); - m_dic_color.Add("thistle", Color.FromArgb(216, 191, 216)); - m_dic_color.Add("thistle1", Color.FromArgb(255, 225, 255)); - m_dic_color.Add("thistle2", Color.FromArgb(238, 210, 238)); - m_dic_color.Add("thistle3", Color.FromArgb(205, 181, 205)); - m_dic_color.Add("thistle4", Color.FromArgb(139, 123, 139)); - m_dic_color.Add("tomato", Color.FromArgb(255, 99, 71)); - m_dic_color.Add("tomato1", Color.FromArgb(255, 99, 71)); - m_dic_color.Add("tomato2", Color.FromArgb(238, 92, 66)); - m_dic_color.Add("tomato3", Color.FromArgb(205, 79, 57)); - m_dic_color.Add("tomato4", Color.FromArgb(139, 54, 38)); - m_dic_color.Add("turquoise", Color.FromArgb(64, 224, 208)); - m_dic_color.Add("turquoise1", Color.FromArgb(0, 245, 255)); - m_dic_color.Add("turquoise2", Color.FromArgb(0, 229, 238)); - m_dic_color.Add("turquoise3", Color.FromArgb(0, 197, 205)); - m_dic_color.Add("turquoise4", Color.FromArgb(0, 134, 139)); - m_dic_color.Add("violet", Color.FromArgb(238, 130, 238)); - m_dic_color.Add("violetred", Color.FromArgb(208, 32, 144)); - m_dic_color.Add("violetred1", Color.FromArgb(255, 62, 150)); - m_dic_color.Add("violetred2", Color.FromArgb(238, 58, 140)); - m_dic_color.Add("violetred3", Color.FromArgb(205, 50, 120)); - m_dic_color.Add("violetred4", Color.FromArgb(139, 34, 82)); - m_dic_color.Add("wheat", Color.FromArgb(245, 222, 179)); - m_dic_color.Add("wheat1", Color.FromArgb(255, 231, 186)); - m_dic_color.Add("wheat2", Color.FromArgb(238, 216, 174)); - m_dic_color.Add("wheat3", Color.FromArgb(205, 186, 150)); - m_dic_color.Add("wheat4", Color.FromArgb(139, 126, 102)); - m_dic_color.Add("white", Color.FromArgb(255, 255, 255)); - m_dic_color.Add("whitesmoke", Color.FromArgb(245, 245, 245)); - m_dic_color.Add("yellow", Color.FromArgb(255, 255, 0)); - m_dic_color.Add("yellow1", Color.FromArgb(255, 255, 0)); - m_dic_color.Add("yellow2", Color.FromArgb(238, 238, 0)); - m_dic_color.Add("yellow3", Color.FromArgb(205, 205, 0)); - m_dic_color.Add("yellow4", Color.FromArgb(139, 139, 0)); - m_dic_color.Add("yellowgreen", Color.FromArgb(154, 205, 50)); - m_dic_color.Add("goldenrod", Color.FromArgb(218, 165, 32)); - m_dic_color.Add("gray81", Color.FromArgb(207, 207, 207)); - m_dic_color.Add("gray91", Color.FromArgb(232, 232, 232)); - m_dic_color.Add("grey11", Color.FromArgb(28, 28, 28)); - m_dic_color.Add("grey21", Color.FromArgb(54, 54, 54)); - m_dic_color.Add("grey31", Color.FromArgb(79, 79, 79)); - m_dic_color.Add("grey41", Color.FromArgb(105, 105, 105)); - m_dic_color.Add("grey51", Color.FromArgb(130, 130, 130)); - m_dic_color.Add("grey61", Color.FromArgb(156, 156, 156)); - m_dic_color.Add("grey71", Color.FromArgb(181, 181, 181)); - m_dic_color.Add("lavender", Color.FromArgb(230, 230, 250)); - foreach (var v in Enum.GetNames(typeof(KnownColor))) { - string strKey = v.ToLower(); - if (m_dic_color.ContainsKey(strKey)) { - m_dic_color[strKey] = Color.FromName(v); - } else { - m_dic_color.Add(strKey, Color.FromName(v)); - } - } - m_dic_color.Add("none", Color.Transparent); - } - - private static void InitDefaultCallBack() { - SvgAttributes.SetCheckCallBack("x", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("y", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("x1", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("y1", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("x2", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("y2", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("cx", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("cy", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("rx", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("ry", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("left", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("top", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("right", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("bottom", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("width", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("height", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("stroke-width", SvgAttributes.CheckIsSize); - SvgAttributes.SetCheckCallBack("opacity", SvgAttributes.CheckIsFloat); - SvgAttributes.SetCheckCallBack("stroke-opacity", SvgAttributes.CheckIsFloat); - SvgAttributes.SetCheckCallBack("fill-opacity", SvgAttributes.CheckIsFloat); - SvgAttributes.SetCheckCallBack("stroke", SvgAttributes.CheckIsColor); - SvgAttributes.SetCheckCallBack("fill", SvgAttributes.CheckIsColor); - SvgAttributes.SetCheckCallBack("transform", SvgAttributes.CheckIsTransform); - } - - private static void InitDefaultValue() { - SvgAttributes.SetStaticDefault("font-size", "16"); - SvgAttributes.SetStaticDefault("stroke-width", "1"); - SvgAttributes.SetStaticDefault("stroke-opacity", "1"); - SvgAttributes.SetStaticDefault("stroke-miterlimit", "10"); - SvgAttributes.SetStaticDefault("stroke-dashoffset", "0"); - SvgAttributes.SetStaticDefault("stroke-linecap", "butt"); - SvgAttributes.SetStaticDefault("stroke-linejoin", "miter"); - SvgAttributes.SetStaticDefault("fill", "black"); - SvgAttributes.SetStaticDefault("fill-opacity", "1"); - SvgAttributes.SetStaticDefault("fill-rule", "nonzero"); - } - - public static bool SetStaticDefault(string strKey, string strValue) { - if (m_dic_static_default.ContainsKey(strKey)) { - if (string.IsNullOrEmpty(strValue)) { - m_dic_static_default.Remove(strKey); - } else { - if (m_dic_value_check.ContainsKey(strKey)) { - if (!m_dic_value_check[strKey](strValue)) { - return false; - } - } - m_dic_static_default[strKey] = strValue; - } - return true; - } else { - if (m_dic_value_check.ContainsKey(strKey)) { - if (!m_dic_value_check[strKey](strValue)) { - return false; - } - } - m_dic_static_default.Add(strKey, strValue); - return true; - } - } - - public static string GetStaticDefault(string strKey) { - if (m_dic_static_default.ContainsKey(strKey)) { - return m_dic_static_default[strKey]; - } - return null; - } - - public static bool CheckIsHex(string strText) { - if (string.IsNullOrEmpty(strText)) return false; - bool bFlag = false; - foreach (var v in strText) { - bFlag |= ('0' <= v && v <= '9'); - bFlag |= ('a' <= v && v <= 'f'); - bFlag |= ('A' <= v && v <= 'F'); - if (!bFlag) { - return false; - } - } - return true; - } - - public static bool CheckIsInt(string strText) { - if (string.IsNullOrEmpty(strText)) return false; - int nIndex = 0; - if (strText[0] == '-' || strText[0] == '+') { - nIndex++; - } - if (nIndex >= strText.Length) { - return false; - } - for (int i = nIndex; i < strText.Length; i++) { - if (strText[i] < '0' || strText[i] > '9') { - return false; - } - } - return true; - } - - public static bool CheckIsFloat(string strText) { - if (string.IsNullOrEmpty(strText)) { - return false; - } - return Regex.IsMatch(strText, @"^[+-]?(\.\d+|\d+(\.\d+)?)([eE]-\d+)?$"); - } - - public static bool CheckIsSize(string strText) { - if (string.IsNullOrEmpty(strText)) return false; - return Regex.IsMatch(strText, @"^[+-]?(\.\d+|\d+(?:\.\d+)?)(em|ex|px|in|cm|mm|pt|pc|%)?$"); - } - - public static bool CheckIsAngle(string strText) { - if (string.IsNullOrEmpty(strText)) return false; - return Regex.IsMatch(strText, @"^[+-]?(\.\d+|\d+(?:\.\d+)?)([eE]-\d+)?(deg|grad|rad)?$"); - } - - public static bool CheckIsColor(string strText) { - if (string.IsNullOrEmpty(strText)) return false; - strText = Regex.Replace(strText, @"\s+", ""); - strText = strText.Trim().ToLower(); - if (m_dic_color.ContainsKey(strText)) { - return true; - } - if (Regex.IsMatch(strText, @"^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$")) { - return true; - } - if (Regex.IsMatch(strText, @"^rgb\((\d{1,3},){2}\d{1,3}\)$")) { - return true; - } - if (Regex.IsMatch(strText, @"^rgba\((\d{1,3},){3}(\d?\.\d+|\d)\)$")) { - return true; - } - if (Regex.IsMatch(strText, @"^hsl\(\d{1,3}(,(?:\.\d+|\d+(?:\.\d+)?){2})\)$")) { - return true; - } - if (Regex.IsMatch(strText, @"^hsla\(\d{1,3}(,(?:\.\d+|\d+(?:\.\d+)?){2}),(\.\d+|\d(?:\.\d+)?)\)$")) { - return true; - } - if (Regex.IsMatch(strText, @"url\(#.+\)")) { - return true; - } - return false; - } - - public static bool CheckIsTransform(string strText) { - if (string.IsNullOrEmpty(strText)) return false; - var ms = Regex.Matches(strText, @"(?:(rotate|scale|scaleX|scaleY|skew|skewX|skewY|translate|translateX|translateY|matrix)\((.*?)\)[,\s]*)"); - if (ms.Count == 0) { - return false; - } - foreach (Match m in ms) { - string[] strs = Regex.Split(m.Groups[2].Value.Trim(), @"[,\s]+"); - switch (m.Groups[1].Value) { - case "skew": - case "skewX": - case "skewY": - case "rotate": - foreach (var v in strs) { - if (!SvgAttributes.CheckIsAngle(v)) { - return false; - } - } - break; - case "scale": - case "scaleX": - case "scaleY": - foreach (var v in strs) { - if (!SvgAttributes.CheckIsFloat(v)) { - return false; - } - } - break; - case "translate": - case "translateX": - case "translateY": - foreach (var v in strs) { - if (!SvgAttributes.CheckIsSize(v)) { - return false; - } - } - break; - case "matrix": - foreach (var v in strs) { - if (!SvgAttributes.CheckIsFloat(v)) { - return false; - } - } - break; - } - } - return true; - } - // ============================================================================================== - public static string GetString(SvgElement ele, string strName) { - return SvgAttributes.GetString(ele, strName, true); - } - - public static string GetString(SvgElement ele, string strName, bool inherit) { - if (ele == null) return null; - string strText = ele.Attributes[strName]; - if (!string.IsNullOrEmpty(strText)) { - return strText; - } - if (inherit) { - strText = SvgAttributes.GetString(ele.CurrentParent, strName, true); - } - if (strText == null) { - strText = ele.Attributes.GetDefault(strName); - } - return strText; - } - - public static float GetFloat(SvgElement ele, string strName) { - string strText = ele.Attributes.GetDefault(strName); - float f = 0; - if (!string.IsNullOrEmpty(strText) && SvgAttributes.CheckIsFloat(strText)) { - f = _F(strText); - } - return SvgAttributes.GetFloat(ele, strName, true, f); - } - - public static float GetFloat(SvgElement ele, string strName, bool inherit, float defaultValue) { - if (ele == null) return defaultValue; - string str = ele.Attributes[strName]; - if (string.IsNullOrEmpty(str) || !SvgAttributes.CheckIsFloat(str)) { - if (!inherit) return defaultValue; - return SvgAttributes.GetFloat(ele.CurrentParent, strName, true, defaultValue); - } - return float.Parse(str); - } - - public static Color GetColor(SvgElement ele, string strName) { - string strText = ele.Attributes.GetDefault(strName); - bool bError = false; - Color clr = SvgAttributes.GetColorFromText(strText, out bError); - return SvgAttributes.GetColor(ele, strName, true, clr); - } - - public static Color GetColor(SvgElement ele, string strName, bool inherit, Color defaultValue) { - if (ele == null) return defaultValue; - string strText = ele.Attributes[strName]; - if (string.IsNullOrEmpty(strText)) { - if (!inherit) return defaultValue; - return SvgAttributes.GetColor(ele.CurrentParent, strName, true, defaultValue); - } - bool bError = false; - Color clr = SvgAttributes.GetColorFromText(strText, out bError); - if (bError && inherit) { - return SvgAttributes.GetColor(ele.CurrentParent, strName, true, defaultValue); - } - return clr; - } - - public static Color GetColorFromText(string strText, out bool bError) { - bError = false; - if (string.IsNullOrEmpty(strText)) { - bError = true; - return Color.Transparent; - } - int nR = 0, nG = 0, nB = 0, nA = 255; - strText = strText.ToLower(); - if (m_dic_color.ContainsKey(strText)) { - return m_dic_color[strText]; - } - if (strText[0] == '#') { - if (!SvgAttributes.CheckIsHex(strText.Substring(1))) { - bError = true; - return Color.Transparent; - } - switch (strText.Length) { - case 4: - case 5: - nR = Convert.ToInt32(strText[1].ToString() + strText[1], 16); - nG = Convert.ToInt32(strText[2].ToString() + strText[2], 16); - nB = Convert.ToInt32(strText[3].ToString() + strText[3], 16); - if (strText.Length == 5) { - nA = Convert.ToInt32(strText[4].ToString() + strText[4], 16); - } - break; - case 7: - case 9: - nR = Convert.ToInt32(strText.Substring(1, 2), 16); - nG = Convert.ToInt32(strText.Substring(3, 2), 16); - nB = Convert.ToInt32(strText.Substring(5, 2), 16); - if (strText.Length == 9) { - nA = Convert.ToInt32(strText.Substring(7, 2), 16); - } - break; - default: - bError = true; - return Color.Transparent; - } - return Color.FromArgb(nA, nR, nG, nB); - } - if (strText.StartsWith("rgb(")) { - int nLeft = strText.IndexOf('('); - int nRight = strText.IndexOf(')'); - string[] strs = strText.Substring(nLeft + 1, nRight - nLeft - 1).Split(','); - if (strs.Length < 3) { - bError = true; - return Color.Transparent; - } - nR = (int)SvgAttributes.GetColorChannel(strs[0]); - nG = (int)SvgAttributes.GetColorChannel(strs[1]); - nB = (int)SvgAttributes.GetColorChannel(strs[2]); - if (strs.Length == 4 && SvgAttributes.CheckIsFloat(strs[3])) { - nA = (int)(255 * _F(strs[3])); - } - return Color.FromArgb(nA, nR, nG, nB); - } - if (strText.StartsWith("hsl(")) { - int nLeft = strText.IndexOf('('); - int nRight = strText.IndexOf(')'); - string[] strs = strText.Substring(nLeft + 1, nRight - nLeft - 1).Split(','); - if (strs.Length < 3) { - bError = true; - return Color.Transparent; - } - if (strs.Length == 4 && SvgAttributes.CheckIsFloat(strs[3])) { - nA = (int)(255 * _F(strs[3])); - } - float fH = (strs[0].Length > 1 && strs[1][strs[0].Length - 1] == '%') ? _F(strs[0].Substring(0, strs[0].Length - 1)) : 0; - float fS = (strs[1].Length > 1 && strs[1][strs[1].Length - 1] == '%') ? _F(strs[1].Substring(0, strs[1].Length - 1)) : 0; - float fL = (strs[2].Length > 1 && strs[1][strs[2].Length - 1] == '%') ? _F(strs[2].Substring(0, strs[2].Length - 1)) : 0; - return SvgAttributes.GetColorFromHSL( - SvgAttributes.CheckRange(fH, 0, 360) / 360, - SvgAttributes.CheckRange(fS, 0, 100) / 100, - SvgAttributes.CheckRange(fS, 0, 100) / 100, - SvgAttributes.CheckRange(nA, 0, 255)); - } - return Color.Transparent; - } - - public static Color GetColorFromHSL(float h, float s, float l, int nAlpha) { - float r, g, b; - - if (s == 0) { - r = g = b = l; // achromatic - } else { - float q = l < 0.5 ? l * (1 + s) : l + s - l * s; - float p = 2 * l - q; - r = SvgAttributes.HueToRgb(p, q, h + 1 / 3); - g = SvgAttributes.HueToRgb(p, q, h); - b = SvgAttributes.HueToRgb(p, q, h - 1 / 3); - } - return Color.FromArgb(nAlpha, (int)r, (int)g, (int)b); - } - - public static float GetAngleFromText(string strText) { - Match m = m_reg_angle.Match(strText); - if (!m.Success) { - return 0; - } - // 90deg = 100grad = 0.25turn ≈ 1.570796326794897rad - float f = float.Parse(m.Groups[1].Value); - switch (m.Groups[1].Value) { - case "grad": - return f * 90 / 100; - case "rad": - return (float)(f * 90 / (Math.PI / 2)); - } - return f; - } - - public static float GetSize(SvgElement ele, string strName) { - string strText = ele.Attributes.GetDefault(strName); - bool bError = false; - float f = SvgAttributes.GetSizeFromText(ele, strText, out bError); - return SvgAttributes.GetSize(ele, strName, true, f); - } - - public static float GetSize(SvgElement ele, string strName, bool inherit, float defaultValue) { - if (ele == null) return defaultValue; - string strText = ele.Attributes[strName]; - if (string.IsNullOrEmpty(strText)) { - if (!inherit) return defaultValue; - return SvgAttributes.GetSize(ele.CurrentParent, strName, true, defaultValue); - } - // number ("em" | "ex" | "px" | "in" | "cm" | "mm" | "pt" | "pc" | "%")? - Match m = m_reg_size.Match(strText); - if (!m.Success) { - return defaultValue; - } - float fSize = float.Parse(m.Groups[1].Value); - switch (m.Groups[2].Value) { - case "%": - return fSize / 100 * SvgAttributes.GetSize(ele.CurrentParent, strName, inherit, defaultValue); - case "em": - return fSize * SvgAttributes.GetFontSize(ele); - case "ex": - return fSize * SvgAttributes.GetFontSize(ele) * 0.45F; - case "in": - return fSize * 96; - case "cm": - return fSize * 96 / 2.54F; - case "mm": - return fSize * 96 / 2.54F / 10; - case "pt": - return fSize * 1 / 72; - case "pc": - return 12 * fSize * 1 / 72; - default: // px - return fSize; - } - } - - public static float GetSizeFromText(SvgElement ele, string strText, out bool bError) { - bError = false; - if (string.IsNullOrEmpty(strText)) { - bError = true; - return 0; - } - // number ("em" | "ex" | "px" | "in" | "cm" | "mm" | "pt" | "pc" | "%")? - Match m = m_reg_size.Match(strText); - if (!m.Success) { - bError = true; - return 0; - } - float fSize = float.Parse(m.Groups[1].Value); - switch (m.Groups[2].Value) { - case "%": - return fSize / 100 * SvgAttributes.GetSize(ele, "width", true, 0); - case "em": - return fSize * SvgAttributes.GetFontSize(ele); - case "ex": - return fSize * SvgAttributes.GetFontSize(ele) * 0.45F; - case "in": - return fSize * 96; - case "cm": - return fSize * 96 / 2.54F; - case "mm": - return fSize * 96 / 2.54F / 10; - case "pt": - return fSize * 1 / 72; - case "pc": - return 12 * fSize * 1 / 72; - default: // px - return fSize; - } - } - - public static float[] GetSizeArray(SvgElement ele, string strName, bool inherit) { - if (ele == null) return null; - string strText = ele.Attributes[strName]; - if (string.IsNullOrEmpty(strText)) { - if (!inherit) return null; - return SvgAttributes.GetSizeArray(ele.CurrentParent, strName, inherit); - } - var ms = m_reg_size.Matches(strText); - float[] arr = new float[ms.Count]; - for (int i = 0; i < arr.Length; i++) { - var m = ms[i]; - float fSize = float.Parse(m.Groups[1].Value); - switch (m.Groups[2].Value) { - case "%": - arr[i] = fSize / 100 * SvgAttributes.GetFontSize(ele.CurrentParent); - break; - case "em": - arr[i] = fSize * SvgAttributes.GetFontSize(ele.CurrentParent); - break; - case "ex": // the x-height - arr[i] = fSize * SvgAttributes.GetFontSize(ele.CurrentParent) * 0.45F; - break; - case "in": // 1in = ppi(dpi), 96 is the normal dpi, and SVG is vector graphics. Use regular DPI directly - arr[i] = fSize * 96; - break; - case "cm": // 1in = 2.54cm - arr[i] = fSize * 96 / 2.54F; - break; - case "mm": - arr[i] = fSize * 96 / 2.54F / 10; - break; - case "pt": // point - arr[i] = fSize * 1 / 72; - break; - case "pc": // 1pc = 12pt - arr[i] = 12 * fSize * 1 / 72; - break; - default: // px - arr[i] = fSize; - break; - } - } - return arr; - } - - public static float GetFontSize(SvgElement ele) { - if (ele == null) return 16; // The browser default font size is 16px; - string strText = ele.Attributes["font-size"]; - if (string.IsNullOrEmpty(strText)) { // not set,inherit from parent - return SvgAttributes.GetFontSize(ele.CurrentParent); - } - // number ("em" | "ex" | "px" | "in" | "cm" | "mm" | "pt" | "pc" | "%")? - Match m = m_reg_size.Match(strText); - if (!m.Success) { // The error value, search from parent to inherit - return SvgAttributes.GetFontSize(ele.CurrentParent); - } - float fSize = float.Parse(m.Groups[1].Value); - switch (m.Groups[2].Value) { - case "%": - return fSize / 100 * SvgAttributes.GetFontSize(ele.CurrentParent); - case "em": - return fSize * SvgAttributes.GetFontSize(ele.CurrentParent); - case "ex": // the x-height - return fSize * SvgAttributes.GetFontSize(ele.CurrentParent) * 0.45F; - case "in": // 1in = ppi(dpi), 96 is the normal dpi, and SVG is vector graphics. Use regular DPI directly - return fSize * 96; - case "cm": // 1in = 2.54cm - return fSize * 96 / 2.54F; - case "mm": - return fSize * 96 / 2.54F / 10; - case "pt": // point - return fSize * 1 / 72; - case "pc": // 1pc = 12pt - return 12 * fSize * 1 / 72; - default: // px - return fSize; - } - } - - public static float GetOpacity(SvgElement ele, string strName, bool inherit) { - float f = 1; - if (ele == null) { - return f; - } - string strText = ele.Attributes[strName]; - if (SvgAttributes.CheckIsFloat(strText)) { - f = _F(strText, 0, 1); - } - if (!inherit) return f; - return f * SvgAttributes.GetOpacity(ele.CurrentParent, strName, true); - } - - public static string GetEnum(SvgElement ele, string strName, bool inherit, string[] strValues, string defaultValue) { - if (ele == null) return defaultValue; - string strText = ele.Attributes[strName]; - if (strValues.Contains(strText)) { - return strText; - } - if (!inherit) return defaultValue; - return SvgAttributes.GetEnum(ele.CurrentParent, strName, true, strValues, defaultValue); - } - - public static Matrix GetTransform(SvgElement ele, string strName) { - return SvgAttributes.GetTransform(ele, strName, true); - } - - public static Matrix GetTransform(SvgElement ele, string strName, bool inherit) { - Matrix m = new Matrix(); - return SvgAttributes.GetTransformPrivate(ele, strName, inherit, m); - } - - private static Matrix GetTransformPrivate(SvgElement ele, string strName, bool inherit, Matrix defaultValue) { - if (ele == null) { - return defaultValue; - } - string strValue = ele.Attributes[strName]; - if (string.IsNullOrEmpty(strValue)) { - if (!inherit) return defaultValue; - return SvgAttributes.GetTransformPrivate(ele.CurrentParent, strName, true, defaultValue); - } - bool bError = false; - Matrix matrix = new Matrix(); - foreach (Match m in m_reg_transform.Matches(strValue)) { - var strArgs = Regex.Split(m.Groups[2].Value, @"[,\s*]");// m.Groups[2].Value.Split(','); - if (strArgs.Length < 1) { - continue; - } - switch (m.Groups[1].Value) { - case "rotate": - matrix.Rotate(SvgAttributes.GetAngleFromText(strArgs[0].Trim())); - break; - case "scale": - if (strArgs.Length == 1) { - matrix.Scale(_F(strArgs[0].Trim()), _F(strArgs[0].Trim())); - } else { - matrix.Scale(_F(strArgs[0].Trim()), _F(strArgs[1].Trim())); - } - break; - case "scaleX": - matrix.Scale(_F(strArgs[0].Trim()), 1); - break; - case "scaleY": - matrix.Scale(1, _F(strArgs[0].Trim())); - break; - case "skew": - //hmbb 这个cpf没有 - /*if (strArgs.Length == 1) { - matrix.Shear( - (float)Math.Tan(SvgAttributes.GetAngleFromText(strArgs[0].Trim()) / 180 * Math.PI), - (float)Math.Tan(SvgAttributes.GetAngleFromText(strArgs[0].Trim()) / 180 * Math.PI)); - } else { - matrix.Shear( - (float)Math.Tan(SvgAttributes.GetAngleFromText(strArgs[0].Trim()) / 180 * Math.PI), - (float)Math.Tan(SvgAttributes.GetAngleFromText(strArgs[1].Trim()) / 180 * Math.PI)); - }*/ - break; - case "skewX": - //matrix.Shear((float)Math.Tan(SvgAttributes.GetAngleFromText(strArgs[0].Trim()) / 180 * Math.PI), 0); - break; - case "skewY": - //matrix.Shear(0, (float)Math.Tan(SvgAttributes.GetAngleFromText(strArgs[0].Trim()) / 180 * Math.PI)); - break; - case "translate": - if (strArgs.Length == 1) { - matrix.Translate( - SvgAttributes.GetSizeFromText(ele, strArgs[0].Trim(), out bError), - SvgAttributes.GetSizeFromText(ele, strArgs[0].Trim(), out bError)); - } else { - matrix.Translate( - SvgAttributes.GetSizeFromText(ele, strArgs[0].Trim(), out bError), - SvgAttributes.GetSizeFromText(ele, strArgs[1].Trim(), out bError)); - } - break; - case "translateX": - matrix.Translate(SvgAttributes.GetSizeFromText(ele, strArgs[0].Trim(), out bError), 0); - break; - case "translateY": - matrix.Translate(0, SvgAttributes.GetSizeFromText(ele, strArgs[0].Trim(), out bError)); - break; - case "matrix": - if (strArgs.Length != 6) { - break; - } - Matrix m_temp = new Matrix( - _F(strArgs[0].Trim()), - _F(strArgs[1].Trim()), - _F(strArgs[2].Trim()), - _F(strArgs[3].Trim()), - _F(strArgs[4].Trim()), - _F(strArgs[5].Trim())); - matrix = Matrix.Multiply(matrix,m_temp); - break; - } - } - if (!inherit) return matrix; - var ret = SvgAttributes.GetTransformPrivate(ele.CurrentParent, strName, true, defaultValue); - ret = Matrix.Multiply(ret,matrix); - //matrix.Dispose(); - return ret; - } - //========================================================== - private static float GetColorChannel(string strNum) { - if (strNum.Length == 0) { - return 0; - } - if (strNum[strNum.Length - 1] != '%') { - if (!SvgAttributes.CheckIsFloat(strNum)) { - return 0; - } - return float.Parse(strNum); - } - if (strNum.Length < 2) { - return 0; - } - strNum = strNum.Substring(0, strNum.Length - 1); - if (!SvgAttributes.CheckIsFloat(strNum)) { - return 0; - } - return 255 * (SvgAttributes.CheckRange(float.Parse(strNum), 0, 100) % 100); - } - - private static float HueToRgb(float p, float q, float t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) { - p = p + (q - p) * 6 * t; - } else if (t < 1 / 2) { - p = q; - } else if (t < 2 / 3) { - p = p + (q - p) * (2 / 3 - t) * 6; - } - return SvgAttributes.CheckRange(p, 0, 255); - } - - private static int CheckRange(int nNum, int nMin, int nMax) { - if (nNum < nMin) { - nNum = nMin; - } else if (nNum > nMax) { - nNum = nMax; - } - return nNum; - } - - private static float CheckRange(float fNum, float fMin, float fMax) { - if (fNum < fMin) { - fNum = fMin; - } else if (fNum > fMax) { - fNum = fMax; - } - return fNum; - } - - private static float _F(string strText) { - if (!SvgAttributes.CheckIsFloat(strText)) { - return 0; - } - return float.Parse(strText); - } - - private static float _F(string strText, float fMin, float fMax) { - return SvgAttributes.CheckRange(_F(strText), fMin, fMax); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgDocument.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgDocument.cs deleted file mode 100644 index 98b3594..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgDocument.cs +++ /dev/null @@ -1,268 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.IO; -using System.Text.RegularExpressions; - -using CPF.Drawing; -using RectangleF = CPF.Drawing.Rect; - -namespace ST.Library.Drawing.SvgRender -{ - public partial class SvgDocument : SvgElement - { - public override string TargetName { - get { return "svg"; } - } - public override bool AllowElementDraw { - get { return true; } - } - - public float Width { get; private set; } - public float Height { get; private set; } - public RectangleF ViewBox { get; private set; } - public float XScale { get; private set; } - public float YScale { get; private set; } - - private struct DrawingRectInfo - { - public RectangleF Rect; - public float XScale; - public float YScale; - } - - protected internal override void OnInitAttribute(string strName, string strValue) { - var ms = m_reg_number.Matches(strValue); - switch (strName) { - case "viewBox": - if (ms.Count == 4) { - this.ViewBox = new RectangleF(_F(ms[0].Value), _F(ms[1].Value), _F(ms[2].Value), _F(ms[3].Value)); - } - break; - case "height": - if (ms.Count == 1) { - this.Height = _F(ms[0].Value); - } - break; - case "width": - if (ms.Count == 1) { - this.Width = _F(ms[0].Value); - } - break; - } - } - - protected override void OnInitElementCompleted() { - if (this.ViewBox == RectangleF.Empty) { - this.ViewBox = new RectangleF(0, 0, this.Width, this.Height); - } - if (this.ViewBox.Width == 0 || this.ViewBox.Height == 0) { - return; - } - if (this.Width == 0 && this.Height == 0) { - this.Width = this.ViewBox.Width; - this.Height = this.ViewBox.Height; - } else { - if (this.Width != 0 && this.Height == 0) { - this.Height = this.ViewBox.Height * this.Width / this.ViewBox.Width; - } - if (this.Height != 0 && this.Width == 0) { - this.Width = this.ViewBox.Width * this.Height / this.ViewBox.Height; - } - } - } - - public override GraphicsPath GetPath() { return null; } - - public void Draw(Graphics g, Rect rectF) { - if (rectF.Width <= 0 || rectF.Height <= 0) { - return; - } - var old_g = g.Save(); - g.SmoothingMode = SmoothingMode.HighQuality; - string strPreserveAspectRatio = this.Attributes["preserveAspectRatio"]; - if (string.IsNullOrEmpty(strPreserveAspectRatio)) { - strPreserveAspectRatio = "xMidYMid meet"; - } - var dri = this.CheckDrawingRect(rectF, strPreserveAspectRatio); - this.XScale = dri.XScale; - this.YScale = dri.YScale; - g.SetClip(rectF); - g.TranslateTransform(dri.Rect.X - this.ViewBox.X * dri.XScale, dri.Rect.Y - this.ViewBox.Y * dri.YScale); - g.ScaleTransform(dri.XScale, dri.YScale); - foreach (var v in this.Elements) { - if (v.AllowElementDraw) { - v.DrawElement(g); - } - } - g.Restore(old_g); - this.Dispose(this); - } - - private void Dispose(SvgElement ele) { - foreach (SvgElement e in ele.Elements) { - this.Dispose(e); - } - ele.Dispose(); - } - - private DrawingRectInfo CheckDrawingRect(RectangleF rectF, string strPreserveAspectRatio) { - DrawingRectInfo dri = new DrawingRectInfo(); - if (this.ViewBox.Width == 0 || this.ViewBox.Height == 0) { - dri.Rect = rectF; - dri.XScale = dri.YScale; - return dri; - } - string[] strs = Regex.Split(strPreserveAspectRatio, @"[,\s]+"); - foreach (var v in strs) { - switch (v) { - case "meet": - dri = this.ProcessMeet(rectF); - break; - case "slice": - dri = this.ProcessSlice(rectF); - break; - } - } - foreach (var v in strs) { - switch (v) { - case "xMinYMin": - dri.Rect.Location = this.ProcessXMinYMin(rectF, dri.Rect); - break; - case "xMidYMin": - dri.Rect.Location = this.ProcessXMidYMin(rectF, dri.Rect); - break; - case "xMaxYMin": - dri.Rect.Location = this.ProcessXMaxYMin(rectF, dri.Rect); - break; - case "xMinYMid": - dri.Rect.Location = this.ProcessXMinYMid(rectF, dri.Rect); - break; - case "xMidYMid": - dri.Rect.Location = this.ProcessXMidYMid(rectF, dri.Rect); - break; - case "xMaxYMid": - dri.Rect.Location = this.ProcessXMaxYMid(rectF, dri.Rect); - break; - case "xMinYMax": - dri.Rect.Location = this.ProcessXMinYMax(rectF, dri.Rect); - break; - case "xMidYMax": - dri.Rect.Location = this.ProcessXMidYMax(rectF, dri.Rect); - break; - case "xMaxYMax": - dri.Rect.Location = this.ProcessXMaxYMax(rectF, dri.Rect); - break; - } - } - return dri; - } - - private DrawingRectInfo ProcessMeet(RectangleF rectF) { - var dri = new DrawingRectInfo(); - float temp = this.ViewBox.Width / this.ViewBox.Height; - if (rectF.Width / rectF.Height > temp) { - dri.YScale = dri.XScale = rectF.Height / this.ViewBox.Height; - dri.Rect.Width = this.ViewBox.Width * dri.XScale; - dri.Rect.Height = rectF.Height; - dri.Rect.Y = rectF.Y; - dri.Rect.X = rectF.X + (rectF.Width - dri.Rect.Width) / 2; - } else { - dri.YScale = dri.XScale = rectF.Width / this.ViewBox.Width; - dri.Rect.Height = this.ViewBox.Height * dri.YScale; - dri.Rect.Width = rectF.Width; - dri.Rect.X = rectF.X; - dri.Rect.Y = rectF.Y + (rectF.Height - dri.Rect.Height) / 2; - } - return dri; - } - - private DrawingRectInfo ProcessSlice(RectangleF rectF) { - var dri = new DrawingRectInfo(); - float temp = this.ViewBox.Width / this.ViewBox.Height; - if (rectF.Width / rectF.Height > temp) { - dri.YScale = dri.XScale = rectF.Width / this.ViewBox.Width; - dri.Rect.Height = this.ViewBox.Height * dri.YScale; - dri.Rect.Width = rectF.Width; - dri.Rect.X = rectF.X; - dri.Rect.Y = rectF.Y + (rectF.Height - dri.Rect.Height) / 2; - } else { - dri.YScale = dri.XScale = rectF.Height / this.ViewBox.Height; - dri.Rect.Width = this.ViewBox.Width * dri.XScale; - dri.Rect.Height = rectF.Height; - dri.Rect.Y = rectF.Y; - dri.Rect.X = rectF.X + (rectF.Width - dri.Rect.Width) / 2; - } - return dri; - } - - private PointF ProcessXMinYMin(RectangleF rectF, RectangleF rectFView) { - return rectF.Location; - } - - private PointF ProcessXMidYMin(RectangleF rectF, RectangleF rectFView) { - rectF.X += (rectF.Width - rectFView.Width) / 2; - return rectF.Location; - } - - private PointF ProcessXMaxYMin(RectangleF rectF, RectangleF rectFView) { - rectF.X = rectF.Right - rectFView.Width; - return rectF.Location; - } - - private PointF ProcessXMinYMid(RectangleF rectF, RectangleF rectFView) { - rectF.Y = rectF.Y + (rectF.Height - rectFView.Height) / 2; - return rectF.Location; - } - - private PointF ProcessXMidYMid(RectangleF rectF, RectangleF rectFView) { - rectF.X = rectF.X + (rectF.Width - rectFView.Width) / 2; - rectF.Y = rectF.Y + (rectF.Height - rectFView.Height) / 2; - return rectF.Location; - } - - private PointF ProcessXMaxYMid(RectangleF rectF, RectangleF rectFView) { - rectF.X = rectF.Right - rectFView.Width; - rectF.Y = rectF.Y + (rectF.Height - rectFView.Width) / 2; - return rectF.Location; - } - - private PointF ProcessXMinYMax(RectangleF rectF, RectangleF rectFView) { - rectF.X = rectF.X; - rectF.Y = rectF.Bottom - rectFView.Height; - return rectF.Location; - } - - private PointF ProcessXMidYMax(RectangleF rectF, RectangleF rectFView) { - rectF.X = rectF.X + (rectF.Width - rectFView.Width) / 2; - rectF.Y = rectF.Bottom - rectFView.Height; - return rectF.Location; - } - - private PointF ProcessXMaxYMax(RectangleF rectF, RectangleF rectFView) { - rectF.X = rectF.Right - rectFView.Height; - rectF.Y = rectF.Bottom - rectFView.Height; - return rectF.Location; - } - - protected virtual void SetPen(Pen p, SvgAttributes attrs) { } - - protected virtual Brush GetBrush(SvgAttributes attr) { - return null; - } - - protected internal override void Dispose() { } - - private float _F(string strValue) { - return float.Parse(strValue); - } - - protected override void OnDrawStroke(Graphics g, GraphicsPath gp) { } - - protected override void OnDrawFill(Graphics g, GraphicsPath gp) { } - - protected override void OnDrawMarkers(Graphics g, GraphicsPath gp) { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgDocument.static.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgDocument.static.cs deleted file mode 100644 index 31a56bd..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgDocument.static.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Reflection; -using System.IO; -using System.Xml; - -namespace ST.Library.Drawing.SvgRender -{ - partial class SvgDocument - { - private static Type m_type_svg_element = typeof(SvgElement); - private static Regex m_reg_style_width = new Regex(@"\bwidth\s*:\s*(\.\d+|\d+(?:\.\d+))"); - private static Regex m_reg_style_height = new Regex(@"\bheight\s*:\s*(\.\d+|\d+(?:\.\d+))"); - private static Regex m_reg_number = new Regex(@"(-?(\.\d+|\d(?:\.\d+)?)+)"); - private static Dictionary m_dic_target_type = new Dictionary(); - - static SvgDocument() { - var asm = Assembly.GetExecutingAssembly(); - SvgDocument.RegisterType(asm); - } - - internal static SvgElement CreateElement(string strTargetName) { - if (!m_dic_target_type.ContainsKey(strTargetName)) { - return null; - } - var obj = Activator.CreateInstance(m_dic_target_type[strTargetName]); - return (SvgElement)obj; - } - - public static string[] GetTargetNames() { - return m_dic_target_type.Keys.ToArray(); - } - - public static bool UnRegisterType(string strTargetName) { - if (!m_dic_target_type.ContainsKey(strTargetName)) { - return false; - } - m_dic_target_type.Remove(strTargetName); - return true; - } - - public static bool RegisterType(string strTargetName, Type type) { - return SvgDocument.RegisterType(strTargetName, type, true); - } - - public static bool RegisterType(string strTargetName, Type type, bool bOverride) { - if (type.IsAbstract) { - throw new ArgumentException("Can not retister a abstract class!"); - } - if (!(type.IsSubclassOf(m_type_svg_element))) { - throw new ArgumentException("The type is not a SvgElement!"); - } - if (!m_dic_target_type.ContainsKey(strTargetName)) { - m_dic_target_type.Add(strTargetName, type); - return true; - } - if (!bOverride) { - return false; - } - m_dic_target_type[strTargetName] = type; - return true; - } - - public static int RegisterType() { - var asm = Assembly.GetCallingAssembly(); - return SvgDocument.RegisterType(asm, true); - } - - public static int RegisterType(bool bOverride) { - var asm = Assembly.GetCallingAssembly(); - return SvgDocument.RegisterType(asm, bOverride); - } - - public static int RegisterType(string strFile) { - return SvgDocument.RegisterType(strFile, true); - } - - public static int RegisterType(string strFile, bool bOverride) { - var asm = Assembly.LoadFrom(Path.GetFullPath(strFile)); - return SvgDocument.RegisterType(asm, bOverride); - } - - public static int RegisterType(Assembly asm) { - return SvgDocument.RegisterType(asm, true); - } - - public static int RegisterType(Assembly asm, bool bOverride) { - int nCounter = 0; - var types = asm.GetTypes(); - foreach (var t in types) { - if (t.IsAbstract) { - continue; - } - var attrs = t.GetCustomAttributes(false); - foreach (var a in attrs) { - if (!(a is SvgElementAttribute)) { - continue; - } - if (!t.IsSubclassOf(m_type_svg_element)) { - continue; - } - if (SvgDocument.RegisterType(((SvgElementAttribute)a).TargetName, t, bOverride)) { - nCounter++; - } - } - } - return nCounter; - } - //======================================================== - public static SvgDocument FromXmlFile(string strFile) { - return SvgDocument.FromXml(File.ReadAllText(strFile)); - } - - public static SvgDocument FromXml(string strXml) { - XmlDocument xml = new XmlDocument(); - xml.LoadXml(strXml); - return SvgDocument.FromXmlDocument(xml); - } - - public static SvgDocument FromXmlDocument(XmlDocument xml) { - // TODO: comment element - var doc = xml.DocumentElement; - if (doc == null || doc.Name != "svg") { - throw new ArgumentException("Invalid svg document"); - } - SvgDocument svg = new SvgDocument(); - svg.InitElement(svg, null, doc); - return svg; - } - - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElement.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElement.cs deleted file mode 100644 index 5306c7a..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElement.cs +++ /dev/null @@ -1,364 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Xml; -using System.Drawing.Drawing2D; -using System.Drawing; - -namespace ST.Library.Drawing.SvgRender -{ - public abstract class SvgElement : IDisposable - { - private static Regex m_reg_url_id = new Regex(@"url\((?:'|"")?#(.*?)(?:'|"")?\)"); - private static Regex m_reg_style = new Regex(@"([a-zA-Z][a-zA-z0-9\-]*)\s?:\s*(.*?)(?:;|$)"); - - public abstract string TargetName { get; } - /// - /// Specifies whether children of the current element are allowed to draw. - /// Such as: [defs] - /// - public abstract bool AllowElementDraw { get; } - public SvgDocument Document { get; private set; } - public string OuterXml { get; private set; } - public string InnerXml { get; private set; } - public string InnerText { get; private set; } - public SvgElement DomParent { get; private set; } - public SvgElement CurrentParent { - get { - if (TempParent != null) { - return this.TempParent; - } - return this.DomParent; - } - } - private SvgElement TempParent { get; set; } - public SvgAttributes Attributes { get; private set; } - public SvgElementCollection Elements { get; private set; } - - public SvgElement() { - this.Attributes = new SvgAttributes(); - this.Elements = new SvgElementCollection(1); - } - - public SvgElement GetElementByID(string strID) { - foreach (var v in this.Elements) { - if (v.Attributes["id"] == strID) { - return v; - } - } - foreach (var v in this.Elements) { - var ret = v.GetElementByID(strID); - if (ret != null) { - return ret; - } - } - return null; - } - - public List GetElementsByClass(string strClassName) { - List lst = new List(); - foreach (var v in this.Elements) { - if (v.Attributes["class"] == strClassName) { - lst.Add(v); - } - foreach (var e in v.GetElementsByClass(strClassName)) { - lst.Add(e); - } - } - return lst; - } - - public List GetElementsByTarget(string strTargetName) { - List lst = new List(); - foreach (var v in this.Elements) { - if (v.TargetName == strTargetName) { - lst.Add(v); - } - foreach (var e in v.GetElementsByTarget(strTargetName)) { - lst.Add(e); - } - } - return lst; - } - - internal void InitElement(SvgDocument doc, SvgElement parent, XmlNode node) { - this.Document = doc; - this.DomParent = parent; - this.OuterXml = node.OuterXml; - this.InnerXml = node.InnerXml; - this.InnerText = node.InnerText; - string strStyle = null; - foreach (XmlAttribute attr in node.Attributes) { - if (attr.Value == "inherit") { - continue; - } - switch (attr.Name) { // TODO: .. - //case "id": - //case "class": - case "style": - strStyle = attr.Value; - continue; - } - this.Attributes.Set(attr.Name, attr.Value); - this.OnInitAttribute(attr.Name, attr.Value); - } - if (!string.IsNullOrEmpty(strStyle)) { - foreach (Match m in m_reg_style.Matches(strStyle)) { - this.Attributes.Set(m.Groups[1].Value, m.Groups[2].Value); - this.OnInitAttribute(m.Groups[1].Value, m.Groups[2].Value); - } - } - foreach (XmlNode n in node.ChildNodes) { - if (n.LocalName[0] == '#') { - continue; - } - var ele = SvgDocument.CreateElement(n.LocalName); - if (ele == null) { - continue; - } - ele.InitElement(doc, this, n); - this.Elements.Add(ele); - } - this.OnInitElementCompleted(); - } - - protected void DrawElement(Graphics g, SvgElement ele, SvgElement tempParent) { - ele.TempParent = tempParent; - ele.DrawElement(g); - ele.TempParent = null; - } - - internal protected virtual void DrawElement(Graphics g) { - GraphicsPath gp = this.GetDrawPath();// this.GetPath(); - if (gp != null) { - using (gp) { - //gp.FillMode = SvgAttributes.GetString(this, "fill-rule") == "evenodd" ? FillMode.Alternate : FillMode.Winding; - string strOrder = SvgAttributes.GetString(this, "paint-order");// this.Attributes["paint-order"]; - if (string.IsNullOrEmpty(strOrder)) { - strOrder = string.Empty; - } - using (var matrix = SvgAttributes.GetTransform(this, "transform", true)) { - gp.Transform(matrix); - bool bStrokeDrawed = false, bFillDrawed = false, bMarkersDrawed = false; - foreach (var v in strOrder.Split(' ')) { - switch (v) { - case "stroke": - this.OnDrawStroke(g, gp); - bStrokeDrawed = true; - break; - case "fill": - this.OnDrawFill(g, gp); - bFillDrawed = true; - break; - case "markers": - this.OnDrawMarkers(g, gp); - bMarkersDrawed = true; - break; - } - } - if (!bFillDrawed) { - this.OnDrawFill(g, gp); - } - if (!bStrokeDrawed) { - this.OnDrawStroke(g, gp); - } - if (!bMarkersDrawed) { - this.OnDrawMarkers(g, gp); - } - } - } - } - if (!this.AllowElementDraw) { - return; - } - foreach (var v in this.Elements) { - v.DrawElement(g); - } - } - - protected virtual Dictionary InitDefaultAttrs() { - return null; - } - - protected virtual void OnInitElementCompleted() { } - internal protected abstract void OnInitAttribute(string strName, string strValue); - - internal protected GraphicsPath GetDrawPath(SvgElement ele) { - this.TempParent = ele; - var gp = this.GetDrawPath(); - this.TempParent = null; - return gp; - } - - internal protected GraphicsPath GetDrawPath() { - GraphicsPath gp = this.GetPath(); - if (gp == null) { - return null; - } - gp.FillMode = SvgAttributes.GetString(this, "fill-rule") == "evenodd" ? FillMode.Alternate : FillMode.Winding; - return gp; - } - - public abstract GraphicsPath GetPath(); - - internal protected abstract void Dispose(); - protected virtual void OnDrawStroke(Graphics g, GraphicsPath gp) { - Pen p = this.GetPen(); - if (p == null) return; - using (p) { - g.DrawPath(p, gp); - } - } - protected virtual void OnDrawFill(Graphics g, GraphicsPath gp) { - Brush brush = this.GetBrush(); - if (brush == null) return; - using (brush) { - g.FillPath(brush, gp); - } - } - protected virtual void OnDrawMarkers(Graphics g, GraphicsPath gp) { } - - public Pen GetPen() { - var p = this.GetPen(this, this.GetStrokeAlpha()); - if (p == null) { - return null; - } - this.SetPen(p); - return p; - } - - public virtual Pen GetPen(SvgElement ele, float fAlpha) { - string strTemp = SvgAttributes.GetString(this, "stroke"); - if (string.IsNullOrEmpty(strTemp)) { - return null; - } - Pen p = null; - Match m = m_reg_url_id.Match(strTemp); - if (m.Success) { - SvgElement svg_obj = this.Document.GetElementByID(m.Groups[1].Value); - if (svg_obj == null) { - return null; - } - p = svg_obj.GetPen(ele, fAlpha); - } else { - Color clr = SvgAttributes.GetColor(this, "stroke"); - p = new Pen(Color.FromArgb((int)(clr.A * fAlpha), clr)); - } - p.Width = SvgAttributes.GetSize(this, "stroke-width"); - return p; - } - - protected float GetStrokeAlpha() { - float fOpacity = SvgAttributes.GetOpacity(this, "opacity", true); - float fStrokeOpacity = SvgAttributes.GetFloat(this, "stroke-opacity"); - fOpacity *= fStrokeOpacity; - if (fOpacity < 0) { - fOpacity = 0; - } else if (fOpacity > 1) { - fOpacity = 1; - } - return fOpacity; - } - - protected float GetFillAlpha() { - float fOpacity = SvgAttributes.GetOpacity(this, "opacity", true); - float fStrokeOpacity = SvgAttributes.GetFloat(this, "fill-opacity"); - return fOpacity * fStrokeOpacity; - } - - protected virtual void SetPen(Pen p) { - switch (SvgAttributes.GetEnum(this, "stroke-linecap", true, new string[] { "round", "square", "butt" }, "butt")) { - case "round": - p.StartCap = LineCap.Round; - p.EndCap = LineCap.Round; - break; - case "square": - p.StartCap = LineCap.Square; - p.EndCap = LineCap.Square; - break; - case "butt": - default: - p.StartCap = LineCap.NoAnchor; - p.EndCap = LineCap.NoAnchor; - break; - } - switch (SvgAttributes.GetEnum(this, "stroke-linejoin", true, new string[] { "miter-clip", "bevel", "round", "miter" }, "miter")) { - case "miter-clip": - p.LineJoin = LineJoin.MiterClipped; - break; - case "bevel": - p.LineJoin = LineJoin.Bevel; - break; - case "round": - p.LineJoin = LineJoin.Round; - p.DashCap = DashCap.Round; - break; - case "miter": - default: - p.LineJoin = LineJoin.Miter; - break; - } - p.MiterLimit = SvgAttributes.GetFloat(this, "stroke-miterlimit");// this.GetFloat("stroke-miterlimit"); - p.DashOffset = SvgAttributes.GetFloat(this, "stroke-dashoffset") / p.Width;// this.GetFloat("stroke-dashoffset"); - float[] arr = SvgAttributes.GetSizeArray(this, "stroke-dasharray", true); - if (arr == null) return; - int nErrorCount = 0; - for (int i = 0; i < arr.Length; i++) { - if (arr[i] <= 0) { - nErrorCount++; - } - arr[i] = arr[i] / p.Width; - } - if (nErrorCount != 0) { - var temp = new float[arr.Length - nErrorCount]; - for (int i = 0, j = 0; i < arr.Length; i++) { - if (arr[i] <= 0) continue; - temp[j++] = arr[i]; - } - arr = temp; - } - if (arr != null) { - if (arr.Length % 2 != 0) { - float[] temp_arr = new float[arr.Length * 2]; - for (int i = 0; i < temp_arr.Length; i++) { - temp_arr[i] = arr[i % arr.Length]; - } - p.DashPattern = temp_arr; - } else { - p.DashPattern = arr; - } - } - } - - public Brush GetBrush() { - return this.GetBrush(this, this.GetFillAlpha()); - } - - public virtual Brush GetBrush(SvgElement ele, float fAlpha) { - string strTemp = SvgAttributes.GetString(this, "fill"); - if (string.IsNullOrEmpty(strTemp)) { - return null; - } - Brush brush = null; - Match m = m_reg_url_id.Match(strTemp); - if (m.Success) { - SvgElement svg_obj = this.Document.GetElementByID(m.Groups[1].Value); - if (svg_obj == null) { - return null; - } - brush = svg_obj.GetBrush(ele, fAlpha); - } else { - Color clr = SvgAttributes.GetColor(this, "fill"); - clr = Color.FromArgb((int)(clr.A * fAlpha), clr); - brush = new SolidBrush(clr); - } - return brush; - } - - void IDisposable.Dispose() { - this.Dispose(); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElementAttribute.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElementAttribute.cs deleted file mode 100644 index 737b355..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElementAttribute.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.Drawing.SvgRender -{ - public class SvgElementAttribute : Attribute - { - public string TargetName { get; private set; } - - public SvgElementAttribute(string strTargetName) { - this.TargetName = strTargetName; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElementCollection.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElementCollection.cs deleted file mode 100644 index e608216..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElementCollection.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Collections; - -namespace ST.Library.Drawing.SvgRender -{ - public sealed class SvgElementCollection : IEnumerable - { - public int Count { get; private set; } - private SvgElement[] m_arr; - - internal SvgElementCollection(int capacity) { - m_arr = new SvgElement[capacity]; - } - - public SvgElement this[int nIndex] { - get { - if (nIndex < 0 || nIndex >= this.Count) { - throw new ArgumentOutOfRangeException("nIndex"); - } - return m_arr[nIndex]; - } - } - - internal void Add(SvgElement ele) { - this.EnsureSpace(1); - m_arr[this.Count++] = ele; - } - - private void EnsureSpace(int nCount) { - if (this.Count + nCount <= m_arr.Length) { - return; - } - SvgElement[] temp = new SvgElement[Math.Max(m_arr.Length << 1, this.Count + nCount)]; - m_arr.CopyTo(temp, 0); - m_arr = temp; - } - - public IEnumerator GetEnumerator() { - for (int i = 0; i < this.Count; i++) { - yield return m_arr[i]; - } - } - - IEnumerator IEnumerable.GetEnumerator() { - return this.GetEnumerator(); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgCircle.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgCircle.cs deleted file mode 100644 index b40fdab..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgCircle.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("circle")] - public class SvgCircle : SvgElement - { - public override string TargetName { - get { return "circle"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - public float CX { get; set; } - public float CY { get; set; } - public float R { get; set; } - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "cx": - this.CX = SvgAttributes.GetSize(this, "cx"); - break; - case "cy": - this.CY = SvgAttributes.GetSize(this, "cy"); - break; - case "r": - this.R = SvgAttributes.GetSize(this, "r"); - break; - } - } - - public override GraphicsPath GetPath() { - GraphicsPath gp = new GraphicsPath(); - RectangleF rectF = new RectangleF( - SvgAttributes.GetSize(this.CurrentParent, "x") + this.CX - this.R, - SvgAttributes.GetSize(this.CurrentParent, "y") + this.CY - this.R, - this.R * 2, - this.R * 2); - gp.AddEllipse(rectF); - return gp; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgDefs.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgDefs.cs deleted file mode 100644 index 632b781..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgDefs.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("defs")] - public class SvgDefs : SvgElement - { - public override string TargetName { - get { return "defs"; } - } - - public override bool AllowElementDraw { - get { return false; } - } - - protected internal override void OnInitAttribute(string strName, string strValue) { } - - public override System.Drawing.Drawing2D.GraphicsPath GetPath() { - return null; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgEllipse.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgEllipse.cs deleted file mode 100644 index e05f774..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgEllipse.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("ellipse")] - public class SvgEllipse : SvgElement - { - public override string TargetName { - get { return "ellipse"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - public float CX { get; set; } - public float CY { get; set; } - public float RX { get; set; } - public float RY { get; set; } - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "cx": - this.CX = SvgAttributes.GetSize(this, "cx"); - break; - case "cy": - this.CY = SvgAttributes.GetSize(this, "cy"); - break; - case "rx": - this.RX = SvgAttributes.GetSize(this, "rx"); - break; - case "ry": - this.RY = SvgAttributes.GetSize(this, "ry"); - break; - } - } - - public override GraphicsPath GetPath() { - GraphicsPath gp = new GraphicsPath(); - gp.AddEllipse( - SvgAttributes.GetSize(this.CurrentParent, "x") + this.CX - this.RX, - SvgAttributes.GetSize(this.CurrentParent, "y") + this.CY - this.RY, - this.RX * 2, - this.RY * 2); - return gp; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgG.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgG.cs deleted file mode 100644 index bea7899..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgG.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("g")] - public class SvgG : SvgElement - { - public override string TargetName { - get { return "g"; } - } - public override bool AllowElementDraw { - get { return true; } - } - protected internal override void OnInitAttribute(string strName, string strValue) { } - - public override GraphicsPath GetPath() { - return null; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgGradientBrush.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgGradientBrush.cs deleted file mode 100644 index 5cf3bf5..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgGradientBrush.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; - -namespace ST.Library.Drawing.SvgRender -{ - public abstract class SvgGradientBrush : SvgElement - { - public override bool AllowElementDraw { - get { return false; } - } - - public override GraphicsPath GetPath() { return null; } - - protected internal override void OnInitAttribute(string strName, string strValue) { } - - protected virtual ColorBlend GetColorBlend(float fAlpha, bool bClear) { - Color clr_start = SvgAttributes.GetColor(this.Elements[0], "stop-color", false, Color.Black); - Color clr_end = SvgAttributes.GetColor(this.Elements[this.Elements.Count - 1], "stop-color", false, Color.Black); - Color[] clr_arr = new Color[this.Elements.Count + 2]; - float[] pos_arr = new float[clr_arr.Length]; - pos_arr[pos_arr.Length - 1] = 1; - clr_arr[0] = Color.FromArgb((int)(clr_start.A * fAlpha), clr_start); - clr_arr[clr_arr.Length - 1] = Color.FromArgb((int)(clr_end.A * fAlpha), clr_end); - for (int i = 0; i < this.Elements.Count; i++) { - string strOffset = this.Elements[i].Attributes["offset"]; - if (string.IsNullOrEmpty(strOffset)) { - pos_arr[i + 1] = pos_arr[i]; - continue; - } - bool bFlag = false; - if (strOffset[strOffset.Length - 1] == '%') { - bFlag = true; - strOffset = strOffset.Substring(0, strOffset.Length - 1); - } - if (!SvgAttributes.CheckIsFloat(strOffset)) { - pos_arr[i + 1] = pos_arr[i]; - continue; - } - pos_arr[i + 1] = float.Parse(strOffset); - if (bFlag) { - pos_arr[i + 1] /= 100; - } - clr_arr[i + 1] = SvgAttributes.GetColor(this.Elements[i], "stop-color", false, Color.Black); - clr_arr[i + 1] = Color.FromArgb((int)(clr_arr[i + 1].A * fAlpha), clr_arr[i + 1]); - } - int nIndex = 0, nLen = pos_arr.Length; - if (bClear) { - if (pos_arr[1] == 0) { - nLen--; - nIndex++; - } - if (pos_arr[pos_arr.Length - 2] == 1) { - nLen--; - } - } - ColorBlend cb = new ColorBlend(nLen); - Array.Copy(clr_arr, nIndex, cb.Colors, 0, nLen); - Array.Copy(pos_arr, nIndex, cb.Positions, 0, nLen); - return cb; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgLine.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgLine.cs deleted file mode 100644 index ebcd7a5..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgLine.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("line")] - public class SvgLine : SvgElement - { - public override string TargetName { - get { return "line"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - public float X1 { get; private set; } - public float Y1 { get; private set; } - public float X2 { get; private set; } - public float Y2 { get; private set; } - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "x1": - this.X1 = SvgAttributes.GetSize(this, "x1"); - break; - case "y1": - this.Y1 = SvgAttributes.GetSize(this, "y1"); - break; - case "x2": - this.X2 = SvgAttributes.GetSize(this, "x2"); - break; - case "y2": - this.Y2 = SvgAttributes.GetSize(this, "y2"); - break; - } - } - - public override GraphicsPath GetPath() { - GraphicsPath gp = new GraphicsPath(); - gp.AddLine( - SvgAttributes.GetSize(this.CurrentParent, "x") + this.X1, - SvgAttributes.GetSize(this.CurrentParent, "y") + this.Y1, - SvgAttributes.GetSize(this.CurrentParent, "x") + this.X2, - SvgAttributes.GetSize(this.CurrentParent, "y") + this.Y2); - return gp; - } - - protected internal override void Dispose() { - - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgLinearGradient.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgLinearGradient.cs deleted file mode 100644 index b7c593a..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgLinearGradient.cs +++ /dev/null @@ -1,351 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; -/* - * Note: This class implementation is not complete. - */ -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("linearGradient")] - public class SvgLinearGradient : SvgGradientBrush - { - public override string TargetName { - get { return "linearGradient"; } - } - - public override Pen GetPen(SvgElement ele, float fAlpha) { - return new Pen(this.GetBrush(ele, fAlpha)); - } - - public override Brush GetBrush(SvgElement ele, float fAlpha) { - PointF ptFStart = PointF.Empty; - PointF ptFEnd = PointF.Empty; - RectangleF rectF = this.Document.ViewBox; - bool bFlag = SvgAttributes.GetString(this, "gradientUnits", true) == "userSpaceOnUse"; - if (!bFlag) { - using (GraphicsPath gp = ele.GetPath()) { - rectF = gp.GetBounds(); - } - } - if (this.Elements.Count <= 1) { - return new SolidBrush(SvgAttributes.GetColor(this.Elements[0], "stop-color", false, Color.Black)); - } - using (Matrix mm = SvgAttributes.GetTransform(ele, "transform")) { - using (Matrix m = SvgAttributes.GetTransform(this, "gradientTransform")) { - mm.Multiply(m); - rectF.Width += Math.Abs(m.Elements[4] * 2); - rectF.Height += Math.Abs(m.Elements[5] * 2); - rectF.X -= Math.Abs(m.Elements[4]); - rectF.Y -= Math.Abs(m.Elements[5]); - ptFStart.X = this.GetX1Size(rectF, bFlag); - ptFStart.Y = this.GetY1Size(rectF, bFlag); - ptFEnd.X = this.GetX2Size(rectF, bFlag); - ptFEnd.Y = this.GetY2Size(rectF, bFlag); - if (ptFStart == ptFEnd) { - return null; - } - BrushInfo bi; - ColorBlend cb = this.GetColorBlend(fAlpha, false); - string strMethod = SvgAttributes.GetString(this, "spreadMethod"); - if (string.IsNullOrEmpty(strMethod) || strMethod == "pad") { - if (ptFStart.X == ptFEnd.X) { - bi = this.SetColorBlendV(rectF, ptFStart, ptFEnd, cb); - } else if (ptFStart.Y == ptFEnd.Y) { - bi = this.SetColorBlendH(rectF, ptFStart, ptFEnd, cb); - } else { - bi = this.SetColorBlendB(rectF, ptFStart, ptFEnd, cb); - } - } else { - bi.Start = ptFStart; - bi.End = ptFEnd; - bi.ColorBlend = cb; - } - LinearGradientBrush brush = new LinearGradientBrush(bi.Start, bi.End, Color.Black, Color.Black); - brush.InterpolationColors = bi.ColorBlend; - if (SvgAttributes.GetString(this, "spreadMethod") != "repeat") { - brush.WrapMode = WrapMode.TileFlipX; - } - brush.MultiplyTransform(mm); - return brush; - } - } - } - - private struct BrushInfo - { - public PointF Start; - public PointF End; - public ColorBlend ColorBlend; - } - - private float GetX1Size(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["x1"]; - if (string.IsNullOrEmpty(strText)) { - return rectF.X; - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "x1", false, 0); - if (!bUserSpace) - fTemp *= rectF.Width; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.X + fTemp; - } - } - - private float GetY1Size(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["y1"]; - if (string.IsNullOrEmpty(strText)) { - return rectF.Y; - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "y1", false, 0); - if (!bUserSpace) - fTemp *= rectF.Width; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.Y + fTemp; - } - } - - private float GetX2Size(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["x2"]; - if (string.IsNullOrEmpty(strText)) { - return rectF.Right; - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "x2", false, 0); - if (!bUserSpace) - fTemp *= rectF.Width; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.X + fTemp; - } - } - - private float GetY2Size(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["y2"]; - if (string.IsNullOrEmpty(strText)) { - return rectF.Y; - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "y2", false, 0); - if (!bUserSpace) - fTemp *= rectF.Width; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.Y + fTemp; - } - } - - private BrushInfo GetColorBlend(RectangleF rectF, PointF ptF1, PointF ptF2) { - BrushInfo bi = new BrushInfo(); - ColorBlend cb = new ColorBlend(this.Elements.Count + 2); - cb.Colors[0] = SvgAttributes.GetColor(this.Elements[0], "stop-color", false, Color.Black); - cb.Positions[this.Elements.Count + 1] = 1; - cb.Colors[this.Elements.Count + 1] = SvgAttributes.GetColor(this.Elements[this.Elements.Count - 1], "stop-color", false, Color.Black); - for (int i = 0; i < this.Elements.Count; i++) { - string strOffset = this.Elements[i].Attributes["offset"]; - if (string.IsNullOrEmpty(strOffset)) { - cb.Positions[i + 1] = cb.Positions[i]; - continue; - } - bool bFlag = false; - if (strOffset[strOffset.Length - 1] == '%') { - bFlag = true; - strOffset = strOffset.Substring(0, strOffset.Length - 1); - } - if (!SvgAttributes.CheckIsFloat(strOffset)) { - cb.Positions[i + 1] = cb.Positions[i]; - continue; - } - cb.Positions[i + 1] = float.Parse(strOffset); - if (bFlag) { - cb.Positions[i + 1] /= 100; - } - cb.Colors[i + 1] = SvgAttributes.GetColor(this.Elements[i], "stop-color", false, Color.Black); - } - // y = ax + b -> a = (y2 - y1)/(x2 - x1) - float a_src = (ptF2.Y - ptF1.Y) / (ptF2.X - ptF1.X); - // b = y - ax; - float b_src = ptF2.Y - a_src * ptF2.X; - - float angle = (float)(Math.PI / 180 * 90); // rotate 90deg - // b.x = a.x * cos (angle) + a.y * sin (angle) - // b.y = a.y * cos (angle) - a.x * sin (angle) - PointF ptF1_new = ptF1; - ptF1_new.X = (float)(ptF1.X * Math.Cos(angle) + ptF1.Y * Math.Sign(angle)); - ptF1_new.Y = (float)(ptF1.Y * Math.Cos(angle) - ptF1.X * Math.Sign(angle)); - - PointF ptF2_new = ptF2; - ptF2_new.X = (float)(ptF2.X * Math.Cos(angle) + ptF2.Y * Math.Sign(angle)); - ptF2_new.Y = (float)(ptF2.Y * Math.Cos(angle) - ptF2.X * Math.Sign(angle)); - - float a_rotate = (ptF2_new.Y - ptF1_new.Y) / (ptF2_new.X - ptF1_new.X); - float b_left = rectF.Y - a_rotate * rectF.X; - float b_right = rectF.Bottom - a_rotate * rectF.Right; - // a1 * x + b1 = a2 * x + b2 => x = (b2 - b1) / (a1 - a2) - float leftX = (b_left - b_src) / (a_src - a_rotate); - float leftY = a_rotate * leftX + b_left; - - float rightX = (b_right - b_src) / (a_src - a_rotate); - float rightY = a_rotate * rightX + b_right; - - float lenOld = (float)Math.Sqrt(Math.Pow(ptF2.X - ptF1.X, 2) + Math.Pow(ptF2.Y - ptF1.Y, 2)); - float lenNew = (float)Math.Sqrt(Math.Pow(rightX - leftX, 2) + Math.Pow(rightY - leftY, 2)); - float lenSeg = 0; - if (ptF1.X < ptF2.X) { - lenSeg = (float)Math.Sqrt(Math.Pow(ptF1.X - leftX, 2) + Math.Pow(ptF1.Y - leftY, 2)); - } else { - lenSeg = (float)Math.Sqrt(Math.Pow(rightX - ptF2.X, 2) + Math.Pow(rightY - ptF2.Y, 2)); - } - float fStart = lenSeg / lenNew; - float fIncrement = lenOld / lenNew; - for (int i = 1; i < cb.Positions.Length - 1; i++) { - cb.Positions[i] = fStart + cb.Positions[i] * fIncrement; - } - bi.Start = new PointF(leftX, leftY); - bi.End = new PointF(rightX, rightY); - bi.ColorBlend = cb; - return bi; - } - - private BrushInfo SetColorBlendV(RectangleF rectF, PointF ptF1, PointF ptF2, ColorBlend cb) { - BrushInfo bi = new BrushInfo() { - ColorBlend = cb - }; - float fMin = Math.Min(Math.Min(rectF.Y, ptF1.Y), ptF2.Y); - float fMax = Math.Max(Math.Max(rectF.Bottom, ptF1.Y), ptF2.Y); - float fLen = fMax - fMin; - float f = (ptF2.Y - ptF1.Y) / fLen; - float fStart = 0; - bi.Start.X = bi.End.X = ptF1.X; - if (f > 0) { - fStart = (ptF1.Y - fMin) / fLen; - bi.Start.Y = fMin; - bi.End.Y = fMax; - } else { - fStart = (fMax - ptF1.Y) / fLen; - bi.Start.Y = fMax; - bi.End.Y = fMin; - f = -f; - } - for (int i = 1; i < cb.Positions.Length - 1; i++) { - cb.Positions[i] = fStart + cb.Positions[i] * f; - } - return bi; - } - - private BrushInfo SetColorBlendH(RectangleF rectF, PointF ptF1, PointF ptF2, ColorBlend cb) { - BrushInfo bi = new BrushInfo() { - ColorBlend = cb - }; - float fMin = Math.Min(Math.Min(rectF.X, ptF1.X), ptF2.X); - float fMax = Math.Max(Math.Max(rectF.Right, ptF1.X), ptF2.X); - float fLen = fMax - fMin; - float f = (ptF2.X - ptF1.X) / fLen; - float fStart = 0; - bi.Start.Y = bi.End.Y = ptF1.Y; - if (f > 0) { - fStart = (ptF1.X - fMin) / fLen; - bi.Start.X = fMin; - bi.End.X = fMax; - } else { - fStart = (fMax - ptF1.X) / fLen; - bi.Start.X = fMax; - bi.End.X = fMin; - f = -f; - } - for (int i = 1; i < cb.Positions.Length - 1; i++) { - cb.Positions[i] = fStart + cb.Positions[i] * f; - } - - return bi; - } - - private BrushInfo SetColorBlendB(RectangleF rectF, PointF ptF1, PointF ptF2, ColorBlend cb) { - BrushInfo bi = new BrushInfo() { - ColorBlend = cb - }; - // y = ax + b -> a = (y2 - y1)/(x2 - x1) - float a_src = (ptF2.Y - ptF1.Y) / (ptF2.X - ptF1.X); - // b = y - ax; - float b_src = ptF2.Y - a_src * ptF2.X; - - float angle = (float)(Math.PI / 180 * 90); // rotate 90deg - // b.x = a.x * cos (angle) + a.y * sin (angle) - // b.y = a.y * cos (angle) - a.x * sin (angle) - float new_x1 = (float)(ptF1.X * Math.Cos(angle) + ptF1.Y * Math.Sign(angle)); - float new_y1 = (float)(ptF1.Y * Math.Cos(angle) - ptF1.X * Math.Sign(angle)); - - float new_x2 = (float)(ptF2.X * Math.Cos(angle) + ptF2.Y * Math.Sign(angle)); - float new_y2 = (float)(ptF2.Y * Math.Cos(angle) - ptF2.X * Math.Sign(angle)); - // y = ax + b -> a = (y2 - y1)/(x2 - x1) - float a_rotate = (new_y2 - new_y1) / (new_x2 - new_x1); - - PointF ptF1_temp = ptF1, ptF2_temp = ptF2; - if (ptF1_temp.X > ptF2_temp.X) { - var temp = ptF1_temp; - ptF1_temp = ptF2_temp; - ptF2_temp = temp; - } - float b_left = 0, b_right = 0; - if (ptF2_temp.Y > ptF1_temp.Y) { // check the boundary - b_left = rectF.Y - a_rotate * rectF.X; - b_right = rectF.Bottom - a_rotate * rectF.Right; - } else { - b_left = rectF.Bottom - a_rotate * rectF.Left; - b_right = rectF.Y - a_rotate * rectF.Right; - } - // Get the line equation focus -> a1 * x + b1 = a2 * x + b2 => x = (b2 - b1) / (a1 - a2) - float leftX = (b_left - b_src) / (a_src - a_rotate); - float leftY = a_rotate * leftX + b_left; // y = ax + b - float rightX = (b_right - b_src) / (a_src - a_rotate); - float rightY = a_rotate * rightX + b_right; // y = ax + b - - float lenOld = (float)Math.Sqrt(Math.Pow(ptF2.X - ptF1.X, 2) + Math.Pow(ptF2.Y - ptF1.Y, 2)); - float lenNew = (float)Math.Sqrt(Math.Pow(rightX - leftX, 2) + Math.Pow(rightY - leftY, 2)); - float fStart = 0; - if (ptF1.X < ptF2.X) { - bi.Start = new PointF(leftX, leftY); - bi.End = new PointF(rightX, rightY); - fStart = (float)Math.Sqrt(Math.Pow(ptF1.X - leftX, 2) + Math.Pow(ptF1.Y - leftY, 2)) / lenNew; - } else { - bi.Start = new PointF(rightX, rightY); - bi.End = new PointF(leftX, leftY); - fStart = (float)Math.Sqrt(Math.Pow(rightX - ptF1.X, 2) + Math.Pow(rightY - ptF1.Y, 2)) / lenNew; - } - float f = lenOld / lenNew; - for (int i = 1; i < cb.Positions.Length - 1; i++) { - cb.Positions[i] = fStart + cb.Positions[i] * f; - } - bi.ColorBlend = cb; - return bi; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPath.A2C.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPath.A2C.cs deleted file mode 100644 index df9bab9..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPath.A2C.cs +++ /dev/null @@ -1,196 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; -/* - * Note: This code was translated from https://github.com/fontello/svgpath/blob/master/lib/a2c.js - * Time: 2022-02-24 - */ -namespace ST.Library.Drawing.SvgRender -{ - partial class SvgPath - { - // Convert an arc to a sequence of cubic bezier curves - private const double TAU = Math.PI * 2; - - /* eslint-disable space-infix-ops */ - // Calculate an angle between two unit vectors - // - // Since we measure angle between radii of circular arcs, - // we can use simplified math (without length normalization) - // - private static double UnitVectorAngle(double x1, double y1, double x2, double y2) { - var sign = (x1 * y2 - y1 * x2 < 0) ? -1 : 1; - var dot = x1 * x2 + y1 * y2; - - // Add this to work with arbitrary vectors: - // dot /= Math.Sqrt(x1 * x1 + y1 * y1) * Math.Sqrt(x2 * x2 + y2 * y2); - - // rounding errors, e.g. -1.0000000000000002 can screw up this - if (dot > 1.0) { dot = 1.0F; } - if (dot < -1.0) { dot = -1.0F; } - - return sign * Math.Acos(dot); - } - // Convert from endpoint to center parameterization, - // see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - // - // Return [cx, cy, theta, delta_theta] - // - private static double[] GetArcCenter(double x1, double y1, double x2, double y2, double rx, double ry, bool isLarge, bool isSweep, double sin_phi, double cos_phi) { - // Step 1. - // - // Moving an ellipse so origin will be the middlepoint between our two - // points. After that, rotate it to line up ellipse axes with coordinate - // axes. - // - var x1p = cos_phi * (x1 - x2) / 2 + sin_phi * (y1 - y2) / 2; - var y1p = -sin_phi * (x1 - x2) / 2 + cos_phi * (y1 - y2) / 2; - - var rx_sq = rx * rx; - var ry_sq = ry * ry; - var x1p_sq = x1p * x1p; - var y1p_sq = y1p * y1p; - - // Step 2. - // - // Compute coordinates of the centre of this ellipse (cx', cy') - // in the new coordinate system. - // - double radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq); - - if (radicant < 0) { - // due to rounding errors it might be e.g. -1.3877787807814457e-17 - radicant = 0; - } - - radicant /= (rx_sq * y1p_sq) + (ry_sq * x1p_sq); - radicant = Math.Sqrt(radicant) * (isLarge == isSweep ? -1 : 1); - - var cxp = radicant * rx / ry * y1p; - var cyp = radicant * -ry / rx * x1p; - - // Step 3. - // - // Transform back to get centre coordinates (cx, cy) in the original - // coordinate system. - // - var cx = cos_phi * cxp - sin_phi * cyp + (x1 + x2) / 2; - var cy = sin_phi * cxp + cos_phi * cyp + (y1 + y2) / 2; - - // Step 4. - // - // Compute angles (theta, delta_theta). - // - var v1x = (x1p - cxp) / rx; - var v1y = (y1p - cyp) / ry; - var v2x = (-x1p - cxp) / rx; - var v2y = (-y1p - cyp) / ry; - - var theta = UnitVectorAngle(1, 0, v1x, v1y); - var delta_theta = UnitVectorAngle(v1x, v1y, v2x, v2y); - - if (!isSweep && delta_theta > 0) { - delta_theta -= TAU; - } - if (isSweep && delta_theta < 0) { - delta_theta += TAU; - } - - return new double[] { cx, cy, theta, delta_theta }; - } - // - // Approximate one unit arc segment with bezier curves, - // see http://math.stackexchange.com/questions/873224 - // - private static double[] ApproximateUnitArc(double theta, double delta_theta) { - var alpha = Math.Tan(delta_theta / 4) * 4 / 3; - var x1 = Math.Cos(theta); - var y1 = Math.Sin(theta); - var x2 = Math.Cos(theta + delta_theta); - var y2 = Math.Sin(theta + delta_theta); - - return new double[] { x1, y1, x1 - y1 * alpha, y1 + x1 * alpha, x2 + y2 * alpha, y2 - x2 * alpha, x2, y2 }; - } - /// - /// Convert an arc to a sequence of cubic bezier curves - /// - /// Start point - /// Ellipse X Radius - /// Ellipse Y Radius - /// xAxisRotate - /// LargeArcFlag - /// SweepFlag - /// End X - /// End Y - /// The cubic bezier curve points list - public static List ArcToBezier(PointF ptF, double rx, double ry, double angle, bool isLarge, bool isSweep, double x, double y) { - List lst = new List(); - var sin_phi = Math.Sin(angle * TAU / 360); - var cos_phi = Math.Cos(angle * TAU / 360); - - // Make sure radii are valid - var x1p = cos_phi * (ptF.X - x) / 2 + sin_phi * (ptF.Y - y) / 2; - var y1p = -sin_phi * (ptF.X - x) / 2 + cos_phi * (ptF.Y - y) / 2; - - if (x1p.Equals(0) && y1p.Equals(0)) { - // we're asked to draw line to itself - return lst; - } - - if (rx.Equals(0) || ry.Equals(0)) { - // one of the radii is zero - return lst; - } - - - // Compensate out-of-range radii - // - rx = Math.Abs(rx); - ry = Math.Abs(ry); - - var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry); - if (lambda > 1) { - rx *= Math.Sqrt(lambda); - ry *= Math.Sqrt(lambda); - } - - - // Get center parameters (cx, cy, theta1, delta_theta) - // - var cc = GetArcCenter(ptF.X, ptF.Y, x, y, rx, ry, isLarge, isSweep, sin_phi, cos_phi); - - var result = lst; - var theta1 = cc[2]; - var delta_theta = cc[3]; - - // Split an arc to multiple segments, so each segment - // will be less than τ/4 (= 90°) - // - var segments = Math.Max(Math.Ceiling(Math.Abs(delta_theta) / (TAU / 4)), 1); - delta_theta /= segments; - - for (var i = 0; i < segments; i++) { - lst.Add(ApproximateUnitArc(theta1, delta_theta)); - theta1 += delta_theta; - } - - // We have a bezier approximation of a unit circle, - // now need to transform back to the original ellipse - foreach (var p in lst) { - for (var i = 0; i < p.Length; i += 2) { - double temp_x = p[i], temp_y = p[i + 1]; - temp_x *= rx; - temp_y *= ry; - - var xp = cos_phi * temp_x - sin_phi * temp_y; - var yp = sin_phi * temp_x + cos_phi * temp_y; - p[i] = xp + cc[0]; - p[i + 1] = yp + cc[1]; - } - } - return lst; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPath.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPath.cs deleted file mode 100644 index 4e2b705..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPath.cs +++ /dev/null @@ -1,289 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; -using System.Text.RegularExpressions; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("path")] - public partial class SvgPath : SvgElement - { - private static Regex m_reg_d = new Regex(@"[a-zA-Z]|[+-]?(\.\d+|\d+(\.\d+)?)([eE]-\d+)?"); - public override string TargetName { - get { return "path"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - private string _D; - public string D { - get { return _D; } - set { - m_strs_d = this.SetD(value); - _D = string.Join(" ", m_strs_d); - } - } - - private string[] m_strs_d; - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "d": - this.D = strValue; - break; - } - } - - private string[] SetD(string strD) { - var ms = m_reg_d.Matches(strD); - string[] str_arr = new string[ms.Count]; - int nIndex = 0; - foreach (Match m in ms) { - str_arr[nIndex++] = m.Value; - } - return str_arr; - } - - public override GraphicsPath GetPath() { - GraphicsPath gp = new GraphicsPath(); - PointF ptf_last = new PointF(); - PointF ptf_last_m = new PointF(); - PointF[] ptfs_bezier = new PointF[4]; - string[] args = m_strs_d; - string strCmd = "l"; - for (int i = 0; i < args.Length; i++) { - if (SvgAttributes.CheckIsFloat(args[i])) { - i--; //use last command - } else { - strCmd = args[i]; - } - switch (strCmd) { - case "m": //moveto - case "M": - ptf_last = this.MoveTo(strCmd == "M", ptf_last, _F(args[i + 1]), _F(args[i + 2])); - i += 2; - strCmd = strCmd == "m" ? "l" : "L"; // set the last command to "l" - if (i > 0) { - gp.CloseFigure(); - } - ptf_last_m = ptf_last; - break; - case "l": //lineto - case "L": - ptf_last = this.LineTo(strCmd == "L", gp, ptf_last, _F(args[i + 1]), _F(args[i + 2])); - i += 2; - break; - case "h": //horizontal lineto - case "H": - ptf_last = this.HorizontalLineTo(strCmd == "H", gp, ptf_last, _F(args[++i])); - //gp.CloseFigure(); - break; - case "v": //vertical lineto - case "V": - ptf_last = this.VerticalLineTo(strCmd == "V", gp, ptf_last, _F(args[++i])); - //gp.CloseFigure(); - break; - case "c": //curveto - case "C": - ptfs_bezier[0] = ptf_last; - i++; - for (int j = 0; j < 3; j++) { - ptfs_bezier[j + 1].X = float.Parse(args[i++]); - ptfs_bezier[j + 1].Y = float.Parse(args[i++]); - } - i--; - ptf_last = this.CurveTo(strCmd == "C", gp, ptfs_bezier); - break; - case "s": //smooth curveto - case "S": - if (ptfs_bezier[3] == ptf_last) { // so .. the last command not a curve command - ptfs_bezier[0] = ptfs_bezier[3]; - ptfs_bezier[1].X = ptfs_bezier[3].X + ptfs_bezier[3].X - ptfs_bezier[2].X; - ptfs_bezier[1].Y = ptfs_bezier[3].Y + ptfs_bezier[3].Y - ptfs_bezier[2].Y; - } else { - ptfs_bezier[0].X = ptfs_bezier[1].X = ptf_last.X; - ptfs_bezier[0].Y = ptfs_bezier[1].Y = ptf_last.Y; - } - i++; - for (int j = 0; j < 2; j++) { - ptfs_bezier[j + 2].X = float.Parse(args[i++]); - ptfs_bezier[j + 2].Y = float.Parse(args[i++]); - } - i--; - ptf_last = this.SmoothCurveTo(strCmd == "S", gp, ptfs_bezier); - break; - case "q": //quadratic bezier curveto - case "Q": - ptfs_bezier[0] = ptf_last; - i++; - for (int j = 0; j < 2; j++) { - ptfs_bezier[j + 2].X = float.Parse(args[i++]); - ptfs_bezier[j + 2].Y = float.Parse(args[i++]); - } - ptfs_bezier[1] = ptfs_bezier[2]; - i--; - ptf_last = this.QuadraticBezierCurveTo(strCmd == "Q", gp, ptfs_bezier); - break; - case "t": //smooth quadratic bezier curveto - case "T": - ptfs_bezier[0] = ptfs_bezier[3]; - ptfs_bezier[1].X = ptfs_bezier[3].X + ptfs_bezier[3].X - ptfs_bezier[2].X; - ptfs_bezier[1].Y = ptfs_bezier[3].Y + ptfs_bezier[3].Y - ptfs_bezier[2].Y; - ptfs_bezier[3].X = _F(args[i + 1]); - ptfs_bezier[3].Y = _F(args[i + 2]); - ptfs_bezier[2] = ptfs_bezier[1]; - ptf_last = this.QuadraticBezierCurveTo(strCmd == "T", gp, ptfs_bezier); - i += 2; - break; - case "a": //elliptical Arc - case "A": - ptf_last = this.EllipticalArc(strCmd == "A", - gp, ptf_last, - _F(args[i + 1]), - _F(args[i + 2]), - _F(args[i + 3]), - args[i + 4] != "0", - args[i + 5] != "0", - _F(args[i + 6]), - _F(args[i + 7])); - i += 7; - break; - case "z": //close path - case "Z": - gp.CloseFigure(); - ptf_last = ptf_last_m; - strCmd = "l"; // set the last command to "l" - break; - } - } - return gp; - } - - protected internal override void Dispose() { } - - private float _F(string strText) { - if (!SvgAttributes.CheckIsFloat(strText)) { - return 0; - } - return float.Parse(strText); - } - - private PointF MoveTo(bool isAbsolute, PointF ptF, float x, float y) { - if (!isAbsolute) { - ptF.X += x; - ptF.Y += y; - } else { - ptF.X = x; - ptF.Y = y; - } - return ptF; - } - - private PointF LineTo(bool isAbsolute, GraphicsPath gp, PointF ptF, float x, float y) { - if (!isAbsolute) { - gp.AddLine(ptF.X, ptF.Y, ptF.X + x, ptF.Y + y); - ptF.X += x; - ptF.Y += y; - } else { - gp.AddLine(ptF.X, ptF.Y, x, y); - ptF.X = x; - ptF.Y = y; - } - return ptF; - } - - private PointF HorizontalLineTo(bool isAbsolute, GraphicsPath gp, PointF ptF, float x) { - if (!isAbsolute) { - gp.AddLine(ptF.X, ptF.Y, ptF.X + x, ptF.Y); - ptF.X += x; - } else { - gp.AddLine(ptF.X, ptF.Y, x, ptF.Y); - ptF.X = x; - } - return ptF; - } - - private PointF VerticalLineTo(bool isAbsolute, GraphicsPath gp, PointF ptF, float y) { - if (!isAbsolute) { - gp.AddLine(ptF.X, ptF.Y, ptF.X, ptF.Y + y); - ptF.Y += y; - } else { - gp.AddLine(ptF.X, ptF.Y, ptF.X, y); - ptF.Y = y; - } - return ptF; - } - - private PointF CurveTo(bool isAbsolute, GraphicsPath gp, PointF[] ptFs) { - if (!isAbsolute) { - ptFs[1].X += ptFs[0].X; - ptFs[1].Y += ptFs[0].Y; - ptFs[2].X += ptFs[0].X; - ptFs[2].Y += ptFs[0].Y; - ptFs[3].X += ptFs[0].X; - ptFs[3].Y += ptFs[0].Y; - } - gp.AddBeziers(ptFs); - return ptFs[3]; - } - - private PointF SmoothCurveTo(bool isAbsolute, GraphicsPath gp, PointF[] ptFs) { - if (!isAbsolute) { - ptFs[2].X += ptFs[0].X; - ptFs[2].Y += ptFs[0].Y; - ptFs[3].X += ptFs[0].X; - ptFs[3].Y += ptFs[0].Y; - } - gp.AddBeziers(ptFs); - return ptFs[3]; - } - - private PointF QuadraticBezierCurveTo(bool isAbsolute, GraphicsPath gp, PointF[] ptFs) { - if (!isAbsolute) { - ptFs[1].X += ptFs[0].X; - ptFs[1].Y += ptFs[0].Y; - ptFs[2].X += ptFs[0].X; - ptFs[2].Y += ptFs[0].Y; - ptFs[3].X += ptFs[0].X; - ptFs[3].Y += ptFs[0].Y; - } - var temp = ptFs[2]; - // from https://stackoverflow.com/questions/3162645/convert-a-quadratic-bezier-to-a-cubic-one - // CP1 = QP0 + 2/3 *(QP1-QP0) - // CP2 = QP2 + 2/3 *(QP1-QP2) - // Note: ptFs -> [P0, P1, P1, P2] -> ptFs[1] == ptFs[2] and ptFs[1,2] need to calc. - ptFs[1].X = ptFs[0].X + (2 / 3F * (ptFs[1].X - ptFs[0].X)); - ptFs[1].Y = ptFs[0].Y + (2 / 3F * (ptFs[1].Y - ptFs[0].Y)); - // --------------------------------------------------------------------------------- - ptFs[2].X = ptFs[3].X + (2 / 3F * (ptFs[2].X - ptFs[3].X)); - ptFs[2].Y = ptFs[3].Y + (2 / 3F * (ptFs[2].Y - ptFs[3].Y)); - gp.AddBeziers(ptFs); - ptFs[2] = temp; - return ptFs[3]; - } - - private PointF EllipticalArc(bool isAbsolute, GraphicsPath gp, PointF ptF, float rx, float ry, float angle, bool isLargArc, bool isSweep, float x, float y) { - if (!isAbsolute) { - x += ptF.X; - y += ptF.Y; - } - // Convert arc to bezier point list - var lst_points = SvgPath.ArcToBezier(ptF, rx, ry, angle, isLargArc, isSweep, x, y); - foreach (var ps in lst_points) { - ptF.X = (float)ps[6]; - ptF.Y = (float)ps[7]; - gp.AddBezier( - (float)ps[0], (float)ps[1], - (float)ps[2], (float)ps[3], - (float)ps[4], (float)ps[5], - ptF.X, ptF.Y); - } - return ptF; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPolygon.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPolygon.cs deleted file mode 100644 index d775e74..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPolygon.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Drawing.Drawing2D; -using System.Drawing; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("polygon")] - public class SvgPolygon : SvgElement - { - private static Regex m_reg_num = new Regex(@"[+-]?(\.\d+|\d+(\.\d+)?)([eE]-\d+)?"); - - public override string TargetName { - get { return "polygon"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - private string _Points; - - public string Points { - get { return _Points; } - private set { - m_points = this.SetPoints(value); - string[] str_arr = new string[m_points.Length]; - for (int i = 0; i < m_points.Length; i++) { - str_arr[i] = m_points[i].X + "," + m_points[i].Y; - } - _Points = string.Join(" ", str_arr); - } - } - - private PointF[] m_points; - - public SvgPolygon() { - this.Attributes.Set("fill", "black"); - } - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "points": - this.Points = strValue; - break; - } - } - - public override GraphicsPath GetPath() { - if (m_points == null || m_points.Length < 1) { - return null; - } - GraphicsPath gp = new GraphicsPath(); - gp.AddPolygon(m_points); - return gp; - } - - private PointF[] SetPoints(string strPoints) { - var ms = m_reg_num.Matches(strPoints); - PointF[] ptFs = new PointF[ms.Count / 2]; - for (int i = 0, j = 0; i < ms.Count; i += 2, j++) { - ptFs[j].X = float.Parse(ms[i].Value); - ptFs[j].Y = float.Parse(ms[i + 1].Value); - } - return ptFs; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPolyline.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPolyline.cs deleted file mode 100644 index d8cf7a5..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgPolyline.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Drawing; -using System.Drawing.Drawing2D; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("polyline")] - public class SvgPolyline : SvgElement - { - private static Regex m_reg_num = new Regex(@"[+-]?(\.\d+|\d+(\.\d+)?)([eE]-\d+)?"); - - public override string TargetName { - get { return "polygon"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - private string _Points; - - public string Points { - get { return _Points; } - private set { - m_points = this.SetPoints(value); - string[] str_arr = new string[m_points.Length]; - for (int i = 0; i < m_points.Length; i++) { - str_arr[i] = m_points[i].X + "," + m_points[i].Y; - } - _Points = string.Join(" ", str_arr); - } - } - - private PointF[] m_points; - - public SvgPolyline() { - this.Attributes.Set("fill", "black"); - } - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "points": - this.Points = strValue; - break; - } - } - - public override GraphicsPath GetPath() { - if (m_points == null || m_points.Length < 1) { - return null; - } - GraphicsPath gp = new GraphicsPath(); - gp.AddLines(m_points); - return gp; - } - - private PointF[] SetPoints(string strPoints) { - var ms = m_reg_num.Matches(strPoints); - PointF[] ptFs = new PointF[ms.Count / 2]; - for (int i = 0, j = 0; i < ms.Count; i += 2, j++) { - ptFs[j].X = float.Parse(ms[i].Value); - ptFs[j].Y = float.Parse(ms[i + 1].Value); - } - return ptFs; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgRadialGradient.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgRadialGradient.cs deleted file mode 100644 index ff758e3..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgRadialGradient.cs +++ /dev/null @@ -1,229 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; -/* - * Note: This class implementation is not complete. - */ -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("radialGradient")] - public class SvgRadialGradient : SvgGradientBrush - { - public override string TargetName { - get { return "radialGradient"; } - } - - public override bool AllowElementDraw { - get { return false; } - } - - public SvgRadialGradient() { - this.Attributes.Set("cx", "50%"); - this.Attributes.Set("cy", "50%"); - this.Attributes.Set("r", "50%"); - this.Attributes.Set("fx", "50%"); - this.Attributes.Set("fy", "50%"); - this.Attributes.Set("fr", "0%"); - } - - protected internal override void OnInitAttribute(string strName, string strValue) { } - - public override GraphicsPath GetPath() { return null; } - - protected internal override void Dispose() { } - - private float m_cx; - private float m_cy; - private float m_r; - private float m_fx; - private float m_fy; - private float m_fr; // not implemented - - public override Pen GetPen(SvgElement ele, float fAlpha) { - return new Pen(this.GetBrush(ele, fAlpha)); - } - - public override Brush GetBrush(SvgElement ele, float fAlpha) { - if (this.Elements.Count <= 1) { - return new SolidBrush(SvgAttributes.GetColor(this.Elements[0], "stop-color", false, Color.Black)); - } - RectangleF rectF = this.Document.ViewBox; - bool bFlag = SvgAttributes.GetString(this, "gradientUnits", true) == "userSpaceOnUse"; - if (!bFlag) { - using (GraphicsPath gp = ele.GetPath()) { - rectF = gp.GetBounds(); - } - } - m_cx = this.GetCXSize(rectF, bFlag); - m_cy = this.GetCYSize(rectF, bFlag); - m_fx = this.GetFXSize(rectF, bFlag); - m_fy = this.GetFYSize(rectF, bFlag); - m_r = this.GetRSize(rectF, bFlag); - if (m_r == 0) { - if (this.Elements.Count != 0) { - return new SolidBrush(SvgAttributes.GetColor(this.Elements[this.Elements.Count - 1], "stop-color", false, Color.Black)); - } - return null; - } - using (Matrix mm = SvgAttributes.GetTransform(ele, "transform")) { - using (Matrix m = SvgAttributes.GetTransform(this, "gradientTransform")) { - mm.Multiply(m); - ColorBlend cb = this.GetColorBlend(fAlpha, true); - this.SetColorBlend(rectF, cb, m.Elements[4], m.Elements[5]); - for (int i = 0; i < cb.Positions.Length / 2; i++) { - var temp = cb.Colors[i]; - cb.Colors[i] = cb.Colors[cb.Colors.Length - 1 - i]; - cb.Colors[cb.Colors.Length - 1 - i] = temp; - - } - if (SvgAttributes.GetString(this, "spreadMethod") == "pad") { - // not implemented - } else { - // not implemented - } - using (GraphicsPath gp_e = new GraphicsPath()) { - gp_e.AddEllipse(new RectangleF(m_cx - m_r, m_cy - m_r, 2 * m_r, 2 * m_r)); - PathGradientBrush brush = new PathGradientBrush(gp_e); - brush.CenterPoint = new PointF(m_fx, m_fy); - brush.InterpolationColors = cb; - float tx = this.Document.XScale < 1 ? mm.Elements[4] * (this.Document.XScale - 1) : 0; - float ty = this.Document.YScale < 1 ? mm.Elements[5] * (this.Document.YScale - 1) : 0; - mm.Translate(tx, ty); - brush.MultiplyTransform(mm); - return brush; - } - } - } - } - - private float GetCXSize(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["cx"]; - if (string.IsNullOrEmpty(strText)) { - return rectF.X + rectF.Width / 2; - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "cx", false, 0); - if (!bUserSpace) - fTemp *= rectF.Width; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.X + fTemp; - } - } - - private float GetCYSize(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["cy"]; - if (string.IsNullOrEmpty(strText)) { - return rectF.Y + rectF.Height / 2; - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "cy", false, 0); - if (!bUserSpace) - fTemp *= rectF.Height; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.Y + fTemp; - } - } - - private float GetRSize(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["r"]; - if (string.IsNullOrEmpty(strText)) { - return rectF.Width / 2; - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "r", false, 0); - if (!bUserSpace) - fTemp *= rectF.Width; - } - return fTemp; - } - - private float GetFXSize(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["fx"]; - if (string.IsNullOrEmpty(strText)) { - return this.GetCXSize(rectF, bUserSpace); - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Width * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "fx", false, 0); - if (!bUserSpace) - fTemp *= rectF.Width; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.X + fTemp; - } - } - - private float GetFYSize(RectangleF rectF, bool bUserSpace) { - string strText = this.Attributes["fy"]; - if (string.IsNullOrEmpty(strText)) { - return this.GetCYSize(rectF, bUserSpace); - } - float fTemp = 0; - if (strText[strText.Length - 1] == '%') { - fTemp = rectF.Height * float.Parse(strText.Substring(0, strText.Length - 1)) / 100; - } else { - fTemp = SvgAttributes.GetSize(this, "fy", false, 0); - if (!bUserSpace) - fTemp *= rectF.Height; - } - if (bUserSpace) { - return fTemp; - } else { - return rectF.Y + fTemp; - } - } - - private void SetColorBlend(RectangleF rectF, ColorBlend cb, float translateX, float translateY) { - float r_new = rectF.Width + rectF.Height + Math.Abs(translateX) + Math.Abs(translateY); - if (m_cx > rectF.Right) r_new += m_cx - rectF.Right; - if (m_cx < rectF.X) r_new += rectF.X - m_cx; - if (m_cy > rectF.Bottom) r_new += m_cy - rectF.Bottom; - if (m_cy < rectF.Y) r_new += rectF.Y - m_cy; - float fStart = (r_new - m_r) / r_new; - for (int i = 0; i < cb.Positions.Length; i++) { - cb.Positions[i] = 1 - cb.Positions[i]; - } - for (int i = 0; i < cb.Positions.Length / 2; i++) { - var temp = cb.Positions[i]; - cb.Positions[i] = cb.Positions[cb.Positions.Length - 1 - i]; - cb.Positions[cb.Positions.Length - 1 - i] = temp; - } - Color[] clr_arr = new Color[cb.Colors.Length + 1]; - float[] pos_arr = new float[cb.Positions.Length + 1]; - - Array.Copy(cb.Colors, 0, clr_arr, 0, cb.Colors.Length); - Array.Copy(cb.Positions, 0, pos_arr, 1, cb.Positions.Length); - clr_arr[clr_arr.Length - 1] = clr_arr[clr_arr.Length - 2]; - cb.Positions = pos_arr; - cb.Colors = clr_arr; - for (int i = 1; i < cb.Positions.Length - 1; i++) { - cb.Positions[i] = fStart + (1 - fStart) * cb.Positions[i]; - } - m_r = r_new; - m_fx = m_cx + (m_fx - m_cx) * (fStart); - m_fy = m_cy + (m_fy - m_cy) * (fStart); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgRect.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgRect.cs deleted file mode 100644 index 06129a9..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgRect.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("rect")] - public class SvgRect : SvgElement - { - public override string TargetName { - get { return "rect"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - public float X { get; private set; } - public float Y { get; private set; } - public float Width { get; private set; } - public float Height { get; private set; } - public float RX { get; private set; } - public float RY { get; private set; } - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "x": - this.X = SvgAttributes.GetSize(this, "x"); - break; - case "y": - this.Y = SvgAttributes.GetSize(this, "y"); - break; - case "width": - this.Width = SvgAttributes.GetSize(this, "width"); - break; - case "height": - this.Height = SvgAttributes.GetSize(this, "height"); - break; - case "rx": - this.RX = SvgAttributes.GetSize(this, "rx"); - break; - case "ry": - this.RY = SvgAttributes.GetSize(this, "ry"); - break; - } - } - - public override GraphicsPath GetPath() { - return this.GetRoundRectPath( - SvgAttributes.GetSize(this.CurrentParent, "x") + this.X, - SvgAttributes.GetSize(this.CurrentParent, "y") + this.Y, - this.Width, - this.Height, - this.RX, - this.RY); - } - - protected internal override void Dispose() { } - - private GraphicsPath GetRoundRectPath(float nX, float nY, float nWidth, float nHeight, float nRX, float nRY) { - GraphicsPath gp = new GraphicsPath(); - if (nRX == 0 || nRY == 0) { - gp.AddRectangle(new RectangleF(nX, nY, nWidth, nHeight)); - } else { - nRX *= 2; - nRY *= 2; - if (nRX > nWidth) { - nRX = nWidth; - } - if (nRY > nHeight) { - nRY = nHeight; - } - gp.AddArc(nX, nY, nRX, nRY, 180, 90); - gp.AddArc(nX + nWidth - nRX, nY, nRX, nRY, 270, 90); - gp.AddArc(nX + nWidth - nRX, nY + nHeight - nRY, nRX, nRY, 0, 90); - gp.AddArc(nX, nY + nHeight - nRY, nRX, nRY, 90, 90); - gp.CloseFigure(); - } - return gp; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgStop.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgStop.cs deleted file mode 100644 index 91b6599..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgStop.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; -using System.Drawing; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("stop")] - public class SvgStop : SvgElement - { - public override string TargetName { - get { return "stop"; } - } - - public override bool AllowElementDraw { - get { return false; } - } - - protected internal override void OnInitAttribute(string strName, string strValue) { } - - public override GraphicsPath GetPath() { - return null; - } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgUse.cs b/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgUse.cs deleted file mode 100644 index 79e6d40..0000000 --- a/CPF/Controls/STTextBox/ST.Library.Drawing/SvgRender/SvgElements/SvgUse.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing.Drawing2D; - -namespace ST.Library.Drawing.SvgRender -{ - [SvgElement("use")] - public class SvgUse : SvgElement - { - public override string TargetName { - get { return "use"; } - } - - public override bool AllowElementDraw { - get { return true; } - } - - public string LinkID { get; private set; } - - protected internal override void OnInitAttribute(string strName, string strValue) { - switch (strName) { - case "href": - case "xlink:href": - if(string.IsNullOrEmpty(strValue) || strValue.Length < 2){ - return; - } - if (strValue[0] != '#') { - return; - } - this.LinkID = strValue.Substring(1); - break; - } - } - - protected internal override void DrawElement(System.Drawing.Graphics g) { - if (string.IsNullOrEmpty(this.LinkID)) { - return; - } - var ele = this.Document.GetElementByID(this.LinkID); - if (ele == null) { - return; - } - this.DrawElement(g, ele, this); - } - - public override GraphicsPath GetPath() { return null; } - - protected internal override void Dispose() { } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/FindInfo.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/FindInfo.cs deleted file mode 100644 index 19e01bf..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/FindInfo.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; - -namespace ST.Library.UI.STTextBox -{ - public struct FindInfo - { - public bool Find; - public int IndexOfLine; - public int IndexOfCharInLine; - public int IndexOfChar { get { return Line.IndexOfFirstChar + IndexOfCharInLine; } } - public TextLine Line; - public Point Location; - - public static FindInfo Empty; - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxCaretInfo.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxCaretInfo.cs deleted file mode 100644 index e71171d..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxCaretInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -using CPF.Drawing; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public class STTextBoxCaretInfo - { - private int _X; - public int X { - get { return _X; } - internal set { - _X = value; - } - } - - private int _Y; - public int Y { - get { return _Y; } - internal set { - _Y = value; - } - } - - private int _Width = 1; - public int Width { - get { return _Width; } - set { _Width = value; } - } - - public bool Visable; - public int IndexOfLine; - public int IndexOfChar; - public TextLine Line; - public Point Location { - get { return new Point(X, Y); } - } - - public bool CopyFromFindInfo(FindInfo fi) { - if (!fi.Find) { - return false; - } - this._X = fi.Location.X; - this._Y = fi.Location.Y; - this.IndexOfChar = fi.IndexOfChar; - this.IndexOfLine = fi.IndexOfLine; - this.Line = fi.Line; - return true; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxScrollInfo.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxScrollInfo.cs deleted file mode 100644 index 2760ec7..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxScrollInfo.cs +++ /dev/null @@ -1,45 +0,0 @@ -using CPF.Drawing; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public class STTextBoxScrollInfo - { - private int _DisplayTime; - public int DisplayTime { - get { return _DisplayTime; } - set { - if (value < 1) { - throw new ArgumentException("The value must be more than 1"); - } - _DisplayTime = value; - } - } - - internal int CountDown { get; set; } - public int XValue { get; internal set; } - public int YValue { get; internal set; } - public int MaxXValue { get; set; } - public int MaxYValue { get; set; } - public int XIncrement { get; set; } - public int XOffset { get { return XValue * XIncrement; } } - public int Size { get; internal set; } - public ScrollBarType HoverScrollBar { get; internal set; } - public ScrollBarType DownScrollBar { get; internal set; } - public Rect VThumbRect { get; internal set; } - public Rect HThumbRect { get; internal set; } - public Rect VBackRect { get; internal set; } - public Rect HBackRect { get; internal set; } - - public enum ScrollBarType { None, V, H } - - public STTextBoxScrollInfo() { - this._DisplayTime = 3; - this.Size = 10; - this.XIncrement = 10; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxSelectionInfo.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxSelectionInfo.cs deleted file mode 100644 index b3bdc31..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/STTextBoxSelectionInfo.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public class STTextBoxSelectionInfo - { - public event EventHandler SelectionChanged; - - private int _StartIndex; - public int StartIndex { - get { return _StartIndex; } - private set { - if (value == _StartIndex) return; - _StartIndex = value; - //this.OnSelectionChanged(EventArgs.Empty); - } - } - private int _EndIndex; - - public int EndIndex { - get { return _EndIndex; } - private set { - if (value == _EndIndex) return; - _EndIndex = value; - //this.OnSelectionChanged(EventArgs.Empty); - } - } - - public bool IsBlock { get; set; } - public int AnchorIndex { get; set; } - public int Length { get { return EndIndex - StartIndex; } } - public bool IsEmptySelection { get { return EndIndex == StartIndex; } } - - public void SetIndex(int nIndex) { this.SetIndex(nIndex, false); } - public void SetSelection(int nCurrentIndex) { this.SetSelection(nCurrentIndex, false); } - public void SetSelection(int nIndexStart, int nIndexEnd) { this.SetSelection(nIndexStart, nIndexEnd, false); } - - public void SetIndex(int nIndex, bool isBlock) { - this.IsBlock = isBlock; - this.AnchorIndex = nIndex; - this.StartIndex = nIndex; - this.EndIndex = nIndex; - this.OnSelectionChanged(EventArgs.Empty); - } - - public void SetSelection(int nCurrentIndex, bool isBlock) { - this.IsBlock = isBlock; - if (nCurrentIndex <= this.AnchorIndex) { - this.StartIndex = nCurrentIndex; - this.EndIndex = this.AnchorIndex; - } else { - this.StartIndex = this.AnchorIndex; - this.EndIndex = nCurrentIndex; - } - this.OnSelectionChanged(EventArgs.Empty); - } - - public void SetSelection(int nIndexStart, int nIndexEnd, bool isBlock) { - this.IsBlock = isBlock; - this.AnchorIndex = nIndexStart; - if (nIndexStart < nIndexEnd) { - this.StartIndex = nIndexStart; - this.EndIndex = nIndexEnd; - } else { - this.StartIndex = nIndexEnd; - this.EndIndex = nIndexStart; - } - this.OnSelectionChanged(EventArgs.Empty); - } - - public void Clear() { - this.StartIndex = 0; - this.EndIndex = 0; - } - - protected virtual void OnSelectionChanged(EventArgs e) { - if (this.SelectionChanged != null) { - this.SelectionChanged(this, e); - } - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/TextStyle.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/TextStyle.cs deleted file mode 100644 index eaf184a..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/DataType/TextStyle.cs +++ /dev/null @@ -1,131 +0,0 @@ -using CPF; -using CPF.Drawing; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public struct TextStyle - { - private string EmptyGUID { get; set; } - public string Name; - public Color ForeColor; - public Color BackColor; - public Color UnderLineColor; - public Color StrikeOutColor; - public FontStyles FontStyle; - public bool RejectMix; - - public static TextStyle Empty = new TextStyle() { - EmptyGUID = Guid.NewGuid().ToString() - }; - - public void Mix(TextStyle style) { - //this.ForeColor = _ColorMix(this.ForeColor, style.ForeColor); - //this.BackColor = _ColorMix(this.BackColor, style.BackColor); - //this.UnderLineColor = _ColorMix(this.UnderLineColor, style.UnderLineColor); - //this.StrikeOutColor = _ColorMix(this.StrikeOutColor, style.StrikeOutColor); - //this.FontStyle |= style.FontStyle; - if (this.ForeColor.A == 0) this.ForeColor = style.ForeColor; - if (this.BackColor.A == 0) this.BackColor = style.BackColor; - if (this.UnderLineColor.A == 0) this.UnderLineColor = style.UnderLineColor; - if (this.StrikeOutColor.A == 0) this.StrikeOutColor = style.StrikeOutColor; - this.FontStyle |= style.FontStyle; - } - - private static Color _ColorMix(Color a, Color b) { - // T = Foreground, B = Background, F = Mixed - // alphaF = alphaT + alphaB * (1 - alphaT); - // colorF = (colorT * alphaT + colorB * alphaB * (1 - alphaT)) / alphaF; - if (a.A == 255) return a; - float aT = (float)a.A / 255; - float aB = (float)b.A / 255; - float aF = aT + aB * (1 - aT); - float temp = aB * (1 - aT); ; - int nA, nR, nG, nB; - nA = (int)(255 * aF); - nR = (int)((a.R * aT + b.R * temp) / aF); - nG = (int)((a.G * aT + b.G * temp) / aF); - nB = (int)((a.B * aT + b.B * temp) / aF); - return Color.FromArgb(_Range(nA, 0, 255), _Range(nR, 0, 255), _Range(nG, 0, 255), _Range(nB, 0, 255)); - } - - private static byte _Range(int num, int nMin, int nMax) { - if (num < nMin) { - num = nMin; - } else if (num > nMax) { - num = nMax; - } - return (byte)num; - } - // [override] ============================================================== - public override string ToString() { - return "[" + this.Name + "]{" + this.ForeColor.ConvertToString(null,null) + "," + this.BackColor.ConvertToString(null, null) + "}"; - } - - public static bool operator ==(TextStyle a, TextStyle b) { - if (a.EmptyGUID != a.EmptyGUID) return false; - if (a.RejectMix != b.RejectMix) return false; - if (a.ForeColor != b.ForeColor) return false; - if (a.BackColor != b.BackColor) return false; - if (a.UnderLineColor != b.UnderLineColor) return false; - if (a.StrikeOutColor != b.StrikeOutColor) return false; - if (a.FontStyle != b.FontStyle) return false; - return true; - } - - public static bool operator !=(TextStyle a, TextStyle b) { - return !(a == b); - } - - public override bool Equals(object obj) { - return base.Equals(obj); - } - - public override int GetHashCode() { - return base.GetHashCode(); - } - } - - public struct TextStyleRange : IComparable - { - private string EmptyGUID { get; set; } - public int Index; - public int Length; - public TextStyle Style; - - public static TextStyleRange Empty = new TextStyleRange() { - EmptyGUID = Guid.NewGuid().ToString() - }; - - public static bool operator ==(TextStyleRange a, TextStyleRange b) { - if (a.EmptyGUID != b.EmptyGUID) return false; - if (a.Index != b.Index) return false; - if (a.Length != b.Length) return false; - if (a.Style != b.Style) return false; - return true; - } - - public static bool operator !=(TextStyleRange a, TextStyleRange b) { - return !(a == b); - } - - public override bool Equals(object obj) { - return base.Equals(obj); - } - - public override int GetHashCode() { - return base.GetHashCode(); - } - - public override string ToString() { - return "(" + this.Index + "," + this.Length + ")" + this.Style; - } - - public int CompareTo(object obj) { - return this.Index - ((TextStyleRange)obj).Index; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/GraphemeSplitter.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/GraphemeSplitter.cs deleted file mode 100644 index 9dc1925..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/GraphemeSplitter.cs +++ /dev/null @@ -1,3080 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Collections; - -namespace ST.Library.UI.STTextBox -{ - public class GraphemeSplitter : TextBoundary - { - // The following variable values do not have a fixed value. Just a FLAG. Just like enumeration. - public const int Other = 0; - public const int CR = 1; - public const int LF = 2; - public const int Control = 3; - public const int Extend = 4; - public const int Regional_Indicator = 5; - public const int SpacingMark = 6; - public const int L = 7; - public const int V = 8; - public const int T = 9; - public const int LV = 10; - public const int LVT = 11; - public const int Prepend = 12; - public const int E_Base = 13; - public const int E_Modifier = 14; - public const int ZWJ = 15; - public const int Glue_After_Zwj = 16; - public const int E_Base_GAZ = 17; - public const int Extended_Pictographic = 18; - - private static int[] m_arr_cache_break_type; - private static Dictionary m_dic_cache_break_type; - private static List m_lst_code_range = new List(); - - static GraphemeSplitter() { - // Cc [10] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x00000, End = 0x00009, Type = Control }); - // Cc [2] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x0000B, End = 0x0000C, Type = Control }); - // Cc [18] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x0000E, End = 0x0001F, Type = Control }); - // Cc [33] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x0007F, End = 0x0009F, Type = Control }); - // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X - m_lst_code_range.Add(new RangeInfo() { Start = 0x00300, End = 0x0036F, Type = Extend }); - // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00483, End = 0x00487, Type = Extend }); - // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x00488, End = 0x00489, Type = Extend }); - // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG - m_lst_code_range.Add(new RangeInfo() { Start = 0x00591, End = 0x005BD, Type = Extend }); - // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT - m_lst_code_range.Add(new RangeInfo() { Start = 0x005C1, End = 0x005C2, Type = Extend }); - // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT - m_lst_code_range.Add(new RangeInfo() { Start = 0x005C4, End = 0x005C5, Type = Extend }); - // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00600, End = 0x00605, Type = Prepend }); - // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00610, End = 0x0061A, Type = Extend }); - // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x0064B, End = 0x0065F, Type = Extend }); - // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN - m_lst_code_range.Add(new RangeInfo() { Start = 0x006D6, End = 0x006DC, Type = Extend }); - // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x006DF, End = 0x006E4, Type = Extend }); - // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON - m_lst_code_range.Add(new RangeInfo() { Start = 0x006E7, End = 0x006E8, Type = Extend }); - // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM - m_lst_code_range.Add(new RangeInfo() { Start = 0x006EA, End = 0x006ED, Type = Extend }); - // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH - m_lst_code_range.Add(new RangeInfo() { Start = 0x00730, End = 0x0074A, Type = Extend }); - // Mn [11] THAANA ABAFILI..THAANA SUKUN - m_lst_code_range.Add(new RangeInfo() { Start = 0x007A6, End = 0x007B0, Type = Extend }); - // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x007EB, End = 0x007F3, Type = Extend }); - // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH - m_lst_code_range.Add(new RangeInfo() { Start = 0x00816, End = 0x00819, Type = Extend }); - // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A - m_lst_code_range.Add(new RangeInfo() { Start = 0x0081B, End = 0x00823, Type = Extend }); - // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x00825, End = 0x00827, Type = Extend }); - // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00829, End = 0x0082D, Type = Extend }); - // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00859, End = 0x0085B, Type = Extend }); - // Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00890, End = 0x00891, Type = Prepend }); - // Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00898, End = 0x0089F, Type = Extend }); - // Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x008CA, End = 0x008E1, Type = Extend }); - // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x008E3, End = 0x00902, Type = Extend }); - // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x0093E, End = 0x00940, Type = SpacingMark }); - // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00941, End = 0x00948, Type = Extend }); - // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00949, End = 0x0094C, Type = SpacingMark }); - // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW - m_lst_code_range.Add(new RangeInfo() { Start = 0x0094E, End = 0x0094F, Type = SpacingMark }); - // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00951, End = 0x00957, Type = Extend }); - // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00962, End = 0x00963, Type = Extend }); - // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00982, End = 0x00983, Type = SpacingMark }); - // Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x009BF, End = 0x009C0, Type = SpacingMark }); - // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x009C1, End = 0x009C4, Type = Extend }); - // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x009C7, End = 0x009C8, Type = SpacingMark }); - // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x009CB, End = 0x009CC, Type = SpacingMark }); - // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x009E2, End = 0x009E3, Type = Extend }); - // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A01, End = 0x00A02, Type = Extend }); - // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A3E, End = 0x00A40, Type = SpacingMark }); - // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A41, End = 0x00A42, Type = Extend }); - // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A47, End = 0x00A48, Type = Extend }); - // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A4B, End = 0x00A4D, Type = Extend }); - // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A70, End = 0x00A71, Type = Extend }); - // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A81, End = 0x00A82, Type = Extend }); - // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00ABE, End = 0x00AC0, Type = SpacingMark }); - // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AC1, End = 0x00AC5, Type = Extend }); - // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AC7, End = 0x00AC8, Type = Extend }); - // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00ACB, End = 0x00ACC, Type = SpacingMark }); - // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AE2, End = 0x00AE3, Type = Extend }); - // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AFA, End = 0x00AFF, Type = Extend }); - // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B02, End = 0x00B03, Type = SpacingMark }); - // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B41, End = 0x00B44, Type = Extend }); - // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B47, End = 0x00B48, Type = SpacingMark }); - // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B4B, End = 0x00B4C, Type = SpacingMark }); - // Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B55, End = 0x00B56, Type = Extend }); - // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B62, End = 0x00B63, Type = Extend }); - // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BC1, End = 0x00BC2, Type = SpacingMark }); - // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BC6, End = 0x00BC8, Type = SpacingMark }); - // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BCA, End = 0x00BCC, Type = SpacingMark }); - // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C01, End = 0x00C03, Type = SpacingMark }); - // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C3E, End = 0x00C40, Type = Extend }); - // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C41, End = 0x00C44, Type = SpacingMark }); - // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C46, End = 0x00C48, Type = Extend }); - // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C4A, End = 0x00C4D, Type = Extend }); - // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C55, End = 0x00C56, Type = Extend }); - // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C62, End = 0x00C63, Type = Extend }); - // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C82, End = 0x00C83, Type = SpacingMark }); - // Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CC0, End = 0x00CC1, Type = SpacingMark }); - // Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CC3, End = 0x00CC4, Type = SpacingMark }); - // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CC7, End = 0x00CC8, Type = SpacingMark }); - // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CCA, End = 0x00CCB, Type = SpacingMark }); - // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CCC, End = 0x00CCD, Type = Extend }); - // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CD5, End = 0x00CD6, Type = Extend }); - // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CE2, End = 0x00CE3, Type = Extend }); - // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D00, End = 0x00D01, Type = Extend }); - // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D02, End = 0x00D03, Type = SpacingMark }); - // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D3B, End = 0x00D3C, Type = Extend }); - // Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D3F, End = 0x00D40, Type = SpacingMark }); - // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D41, End = 0x00D44, Type = Extend }); - // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D46, End = 0x00D48, Type = SpacingMark }); - // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D4A, End = 0x00D4C, Type = SpacingMark }); - // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D62, End = 0x00D63, Type = Extend }); - // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D82, End = 0x00D83, Type = SpacingMark }); - // Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DD0, End = 0x00DD1, Type = SpacingMark }); - // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DD2, End = 0x00DD4, Type = Extend }); - // Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DD8, End = 0x00DDE, Type = SpacingMark }); - // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DF2, End = 0x00DF3, Type = SpacingMark }); - // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00E34, End = 0x00E3A, Type = Extend }); - // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x00E47, End = 0x00E4E, Type = Extend }); - // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - m_lst_code_range.Add(new RangeInfo() { Start = 0x00EB4, End = 0x00EBC, Type = Extend }); - // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00EC8, End = 0x00ECD, Type = Extend }); - // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F18, End = 0x00F19, Type = Extend }); - // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F3E, End = 0x00F3F, Type = SpacingMark }); - // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F71, End = 0x00F7E, Type = Extend }); - // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F80, End = 0x00F84, Type = Extend }); - // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F86, End = 0x00F87, Type = Extend }); - // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F8D, End = 0x00F97, Type = Extend }); - // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F99, End = 0x00FBC, Type = Extend }); - // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0102D, End = 0x01030, Type = Extend }); - // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01032, End = 0x01037, Type = Extend }); - // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT - m_lst_code_range.Add(new RangeInfo() { Start = 0x01039, End = 0x0103A, Type = Extend }); - // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0103B, End = 0x0103C, Type = SpacingMark }); - // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0103D, End = 0x0103E, Type = Extend }); - // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x01056, End = 0x01057, Type = SpacingMark }); - // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x01058, End = 0x01059, Type = Extend }); - // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0105E, End = 0x01060, Type = Extend }); - // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01071, End = 0x01074, Type = Extend }); - // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y - m_lst_code_range.Add(new RangeInfo() { Start = 0x01085, End = 0x01086, Type = Extend }); - // Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER - m_lst_code_range.Add(new RangeInfo() { Start = 0x01100, End = 0x0115F, Type = L }); - // Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01160, End = 0x011A7, Type = V }); - // Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN - m_lst_code_range.Add(new RangeInfo() { Start = 0x011A8, End = 0x011FF, Type = T }); - // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0135D, End = 0x0135F, Type = Extend }); - // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01712, End = 0x01714, Type = Extend }); - // Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01732, End = 0x01733, Type = Extend }); - // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01752, End = 0x01753, Type = Extend }); - // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01772, End = 0x01773, Type = Extend }); - // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA - m_lst_code_range.Add(new RangeInfo() { Start = 0x017B4, End = 0x017B5, Type = Extend }); - // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA - m_lst_code_range.Add(new RangeInfo() { Start = 0x017B7, End = 0x017BD, Type = Extend }); - // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x017BE, End = 0x017C5, Type = SpacingMark }); - // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU - m_lst_code_range.Add(new RangeInfo() { Start = 0x017C7, End = 0x017C8, Type = SpacingMark }); - // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT - m_lst_code_range.Add(new RangeInfo() { Start = 0x017C9, End = 0x017D3, Type = Extend }); - // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0180B, End = 0x0180D, Type = Extend }); - // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01885, End = 0x01886, Type = Extend }); - // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01920, End = 0x01922, Type = Extend }); - // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x01923, End = 0x01926, Type = SpacingMark }); - // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x01927, End = 0x01928, Type = Extend }); - // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01929, End = 0x0192B, Type = SpacingMark }); - // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01930, End = 0x01931, Type = SpacingMark }); - // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01933, End = 0x01938, Type = SpacingMark }); - // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I - m_lst_code_range.Add(new RangeInfo() { Start = 0x01939, End = 0x0193B, Type = Extend }); - // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A17, End = 0x01A18, Type = Extend }); - // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A19, End = 0x01A1A, Type = SpacingMark }); - // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A58, End = 0x01A5E, Type = Extend }); - // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A65, End = 0x01A6C, Type = Extend }); - // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A6D, End = 0x01A72, Type = SpacingMark }); - // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A73, End = 0x01A7C, Type = Extend }); - // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01AB0, End = 0x01ABD, Type = Extend }); - // Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T - m_lst_code_range.Add(new RangeInfo() { Start = 0x01ABF, End = 0x01ACE, Type = Extend }); - // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B00, End = 0x01B03, Type = Extend }); - // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B36, End = 0x01B3A, Type = Extend }); - // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B3D, End = 0x01B41, Type = SpacingMark }); - // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B43, End = 0x01B44, Type = SpacingMark }); - // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B6B, End = 0x01B73, Type = Extend }); - // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B80, End = 0x01B81, Type = Extend }); - // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BA2, End = 0x01BA5, Type = Extend }); - // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BA6, End = 0x01BA7, Type = SpacingMark }); - // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BA8, End = 0x01BA9, Type = Extend }); - // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BAB, End = 0x01BAD, Type = Extend }); - // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BE8, End = 0x01BE9, Type = Extend }); - // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BEA, End = 0x01BEC, Type = SpacingMark }); - // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BEF, End = 0x01BF1, Type = Extend }); - // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BF2, End = 0x01BF3, Type = SpacingMark }); - // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C24, End = 0x01C2B, Type = SpacingMark }); - // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C2C, End = 0x01C33, Type = Extend }); - // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C34, End = 0x01C35, Type = SpacingMark }); - // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C36, End = 0x01C37, Type = Extend }); - // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CD0, End = 0x01CD2, Type = Extend }); - // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CD4, End = 0x01CE0, Type = Extend }); - // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CE2, End = 0x01CE8, Type = Extend }); - // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CF8, End = 0x01CF9, Type = Extend }); - // Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01DC0, End = 0x01DFF, Type = Extend }); - // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0200E, End = 0x0200F, Type = Control }); - // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0202A, End = 0x0202E, Type = Control }); - // Cf [5] WORD JOINER..INVISIBLE PLUS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02060, End = 0x02064, Type = Control }); - // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES - m_lst_code_range.Add(new RangeInfo() { Start = 0x02066, End = 0x0206F, Type = Control }); - // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x020D0, End = 0x020DC, Type = Extend }); - // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH - m_lst_code_range.Add(new RangeInfo() { Start = 0x020DD, End = 0x020E0, Type = Extend }); - // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE - m_lst_code_range.Add(new RangeInfo() { Start = 0x020E2, End = 0x020E4, Type = Extend }); - // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x020E5, End = 0x020F0, Type = Extend }); - // E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow - m_lst_code_range.Add(new RangeInfo() { Start = 0x02194, End = 0x02199, Type = Extended_Pictographic }); - // E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right - m_lst_code_range.Add(new RangeInfo() { Start = 0x021A9, End = 0x021AA, Type = Extended_Pictographic }); - // E0.6 [2] (⌚..⌛) watch..hourglass done - m_lst_code_range.Add(new RangeInfo() { Start = 0x0231A, End = 0x0231B, Type = Extended_Pictographic }); - // E0.6 [4] (⏩..⏬) fast-forward button..fast down button - m_lst_code_range.Add(new RangeInfo() { Start = 0x023E9, End = 0x023EC, Type = Extended_Pictographic }); - // E0.7 [2] (⏭️..⏮️) next track button..last track button - m_lst_code_range.Add(new RangeInfo() { Start = 0x023ED, End = 0x023EE, Type = Extended_Pictographic }); - // E1.0 [2] (⏱️..⏲️) stopwatch..timer clock - m_lst_code_range.Add(new RangeInfo() { Start = 0x023F1, End = 0x023F2, Type = Extended_Pictographic }); - // E0.7 [3] (⏸️..⏺️) pause button..record button - m_lst_code_range.Add(new RangeInfo() { Start = 0x023F8, End = 0x023FA, Type = Extended_Pictographic }); - // E0.6 [2] (▪️..▫️) black small square..white small square - m_lst_code_range.Add(new RangeInfo() { Start = 0x025AA, End = 0x025AB, Type = Extended_Pictographic }); - // E0.6 [4] (◻️..◾) white medium square..black medium-small square - m_lst_code_range.Add(new RangeInfo() { Start = 0x025FB, End = 0x025FE, Type = Extended_Pictographic }); - // E0.6 [2] (☀️..☁️) sun..cloud - m_lst_code_range.Add(new RangeInfo() { Start = 0x02600, End = 0x02601, Type = Extended_Pictographic }); - // E0.7 [2] (☂️..☃️) umbrella..snowman - m_lst_code_range.Add(new RangeInfo() { Start = 0x02602, End = 0x02603, Type = Extended_Pictographic }); - // E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION - m_lst_code_range.Add(new RangeInfo() { Start = 0x02607, End = 0x0260D, Type = Extended_Pictographic }); - // E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX - m_lst_code_range.Add(new RangeInfo() { Start = 0x0260F, End = 0x02610, Type = Extended_Pictographic }); - // E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage - m_lst_code_range.Add(new RangeInfo() { Start = 0x02614, End = 0x02615, Type = Extended_Pictographic }); - // E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE - m_lst_code_range.Add(new RangeInfo() { Start = 0x02616, End = 0x02617, Type = Extended_Pictographic }); - // E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX - m_lst_code_range.Add(new RangeInfo() { Start = 0x02619, End = 0x0261C, Type = Extended_Pictographic }); - // E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX - m_lst_code_range.Add(new RangeInfo() { Start = 0x0261E, End = 0x0261F, Type = Extended_Pictographic }); - // E1.0 [2] (☢️..☣️) radioactive..biohazard - m_lst_code_range.Add(new RangeInfo() { Start = 0x02622, End = 0x02623, Type = Extended_Pictographic }); - // E0.0 [2] (☤..☥) CADUCEUS..ANKH - m_lst_code_range.Add(new RangeInfo() { Start = 0x02624, End = 0x02625, Type = Extended_Pictographic }); - // E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM - m_lst_code_range.Add(new RangeInfo() { Start = 0x02627, End = 0x02629, Type = Extended_Pictographic }); - // E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0262B, End = 0x0262D, Type = Extended_Pictographic }); - // E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH - m_lst_code_range.Add(new RangeInfo() { Start = 0x02630, End = 0x02637, Type = Extended_Pictographic }); - // E0.7 [2] (☸️..☹️) wheel of dharma..frowning face - m_lst_code_range.Add(new RangeInfo() { Start = 0x02638, End = 0x02639, Type = Extended_Pictographic }); - // E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY - m_lst_code_range.Add(new RangeInfo() { Start = 0x0263B, End = 0x0263F, Type = Extended_Pictographic }); - // E0.0 [5] (♃..♇) JUPITER..PLUTO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02643, End = 0x02647, Type = Extended_Pictographic }); - // E0.6 [12] (♈..♓) Aries..Pisces - m_lst_code_range.Add(new RangeInfo() { Start = 0x02648, End = 0x02653, Type = Extended_Pictographic }); - // E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT - m_lst_code_range.Add(new RangeInfo() { Start = 0x02654, End = 0x0265E, Type = Extended_Pictographic }); - // E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT - m_lst_code_range.Add(new RangeInfo() { Start = 0x02661, End = 0x02662, Type = Extended_Pictographic }); - // E0.6 [2] (♥️..♦️) heart suit..diamond suit - m_lst_code_range.Add(new RangeInfo() { Start = 0x02665, End = 0x02666, Type = Extended_Pictographic }); - // E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02669, End = 0x0267A, Type = Extended_Pictographic }); - // E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x0267C, End = 0x0267D, Type = Extended_Pictographic }); - // E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 - m_lst_code_range.Add(new RangeInfo() { Start = 0x02680, End = 0x02685, Type = Extended_Pictographic }); - // E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG - m_lst_code_range.Add(new RangeInfo() { Start = 0x02690, End = 0x02691, Type = Extended_Pictographic }); - // E1.0 [2] (⚖️..⚗️) balance scale..alembic - m_lst_code_range.Add(new RangeInfo() { Start = 0x02696, End = 0x02697, Type = Extended_Pictographic }); - // E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis - m_lst_code_range.Add(new RangeInfo() { Start = 0x0269B, End = 0x0269C, Type = Extended_Pictographic }); - // E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT - m_lst_code_range.Add(new RangeInfo() { Start = 0x0269D, End = 0x0269F, Type = Extended_Pictographic }); - // E0.6 [2] (⚠️..⚡) warning..high voltage - m_lst_code_range.Add(new RangeInfo() { Start = 0x026A0, End = 0x026A1, Type = Extended_Pictographic }); - // E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x026A2, End = 0x026A6, Type = Extended_Pictographic }); - // E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x026A8, End = 0x026A9, Type = Extended_Pictographic }); - // E0.6 [2] (⚪..⚫) white circle..black circle - m_lst_code_range.Add(new RangeInfo() { Start = 0x026AA, End = 0x026AB, Type = Extended_Pictographic }); - // E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x026AC, End = 0x026AF, Type = Extended_Pictographic }); - // E1.0 [2] (⚰️..⚱️) coffin..funeral urn - m_lst_code_range.Add(new RangeInfo() { Start = 0x026B0, End = 0x026B1, Type = Extended_Pictographic }); - // E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE - m_lst_code_range.Add(new RangeInfo() { Start = 0x026B2, End = 0x026BC, Type = Extended_Pictographic }); - // E0.6 [2] (⚽..⚾) soccer ball..baseball - m_lst_code_range.Add(new RangeInfo() { Start = 0x026BD, End = 0x026BE, Type = Extended_Pictographic }); - // E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING - m_lst_code_range.Add(new RangeInfo() { Start = 0x026BF, End = 0x026C3, Type = Extended_Pictographic }); - // E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud - m_lst_code_range.Add(new RangeInfo() { Start = 0x026C4, End = 0x026C5, Type = Extended_Pictographic }); - // E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x026C6, End = 0x026C7, Type = Extended_Pictographic }); - // E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x026C9, End = 0x026CD, Type = Extended_Pictographic }); - // E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD - m_lst_code_range.Add(new RangeInfo() { Start = 0x026D5, End = 0x026E8, Type = Extended_Pictographic }); - // E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE - m_lst_code_range.Add(new RangeInfo() { Start = 0x026EB, End = 0x026EF, Type = Extended_Pictographic }); - // E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground - m_lst_code_range.Add(new RangeInfo() { Start = 0x026F0, End = 0x026F1, Type = Extended_Pictographic }); - // E0.6 [2] (⛲..⛳) fountain..flag in hole - m_lst_code_range.Add(new RangeInfo() { Start = 0x026F2, End = 0x026F3, Type = Extended_Pictographic }); - // E0.7 [3] (⛷️..⛹️) skier..person bouncing ball - m_lst_code_range.Add(new RangeInfo() { Start = 0x026F7, End = 0x026F9, Type = Extended_Pictographic }); - // E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x026FB, End = 0x026FC, Type = Extended_Pictographic }); - // E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS - m_lst_code_range.Add(new RangeInfo() { Start = 0x026FE, End = 0x02701, Type = Extended_Pictographic }); - // E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02703, End = 0x02704, Type = Extended_Pictographic }); - // E0.6 [5] (✈️..✌️) airplane..victory hand - m_lst_code_range.Add(new RangeInfo() { Start = 0x02708, End = 0x0270C, Type = Extended_Pictographic }); - // E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB - m_lst_code_range.Add(new RangeInfo() { Start = 0x02710, End = 0x02711, Type = Extended_Pictographic }); - // E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star - m_lst_code_range.Add(new RangeInfo() { Start = 0x02733, End = 0x02734, Type = Extended_Pictographic }); - // E0.6 [3] (❓..❕) red question mark..white exclamation mark - m_lst_code_range.Add(new RangeInfo() { Start = 0x02753, End = 0x02755, Type = Extended_Pictographic }); - // E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET - m_lst_code_range.Add(new RangeInfo() { Start = 0x02765, End = 0x02767, Type = Extended_Pictographic }); - // E0.6 [3] (➕..➗) plus..divide - m_lst_code_range.Add(new RangeInfo() { Start = 0x02795, End = 0x02797, Type = Extended_Pictographic }); - // E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down - m_lst_code_range.Add(new RangeInfo() { Start = 0x02934, End = 0x02935, Type = Extended_Pictographic }); - // E0.6 [3] (⬅️..⬇️) left arrow..down arrow - m_lst_code_range.Add(new RangeInfo() { Start = 0x02B05, End = 0x02B07, Type = Extended_Pictographic }); - // E0.6 [2] (⬛..⬜) black large square..white large square - m_lst_code_range.Add(new RangeInfo() { Start = 0x02B1B, End = 0x02B1C, Type = Extended_Pictographic }); - // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02CEF, End = 0x02CF1, Type = Extend }); - // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DE0, End = 0x02DFF, Type = Extend }); - // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0302A, End = 0x0302D, Type = Extend }); - // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0302E, End = 0x0302F, Type = Extend }); - // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x03099, End = 0x0309A, Type = Extend }); - // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A670, End = 0x0A672, Type = Extend }); - // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A674, End = 0x0A67D, Type = Extend }); - // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A69E, End = 0x0A69F, Type = Extend }); - // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A6F0, End = 0x0A6F1, Type = Extend }); - // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A823, End = 0x0A824, Type = SpacingMark }); - // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A825, End = 0x0A826, Type = Extend }); - // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A880, End = 0x0A881, Type = SpacingMark }); - // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8B4, End = 0x0A8C3, Type = SpacingMark }); - // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8C4, End = 0x0A8C5, Type = Extend }); - // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8E0, End = 0x0A8F1, Type = Extend }); - // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A926, End = 0x0A92D, Type = Extend }); - // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A947, End = 0x0A951, Type = Extend }); - // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A952, End = 0x0A953, Type = SpacingMark }); - // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A960, End = 0x0A97C, Type = L }); - // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A980, End = 0x0A982, Type = Extend }); - // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9B4, End = 0x0A9B5, Type = SpacingMark }); - // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9B6, End = 0x0A9B9, Type = Extend }); - // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9BA, End = 0x0A9BB, Type = SpacingMark }); - // Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9BC, End = 0x0A9BD, Type = Extend }); - // Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9BE, End = 0x0A9C0, Type = SpacingMark }); - // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA29, End = 0x0AA2E, Type = Extend }); - // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA2F, End = 0x0AA30, Type = SpacingMark }); - // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA31, End = 0x0AA32, Type = Extend }); - // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA33, End = 0x0AA34, Type = SpacingMark }); - // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA35, End = 0x0AA36, Type = Extend }); - // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAB2, End = 0x0AAB4, Type = Extend }); - // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAB7, End = 0x0AAB8, Type = Extend }); - // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AABE, End = 0x0AABF, Type = Extend }); - // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAEC, End = 0x0AAED, Type = Extend }); - // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAEE, End = 0x0AAEF, Type = SpacingMark }); - // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABE3, End = 0x0ABE4, Type = SpacingMark }); - // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABE6, End = 0x0ABE7, Type = SpacingMark }); - // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABE9, End = 0x0ABEA, Type = SpacingMark }); - // Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AC01, End = 0x0AC1B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AC1D, End = 0x0AC37, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AC39, End = 0x0AC53, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AC55, End = 0x0AC6F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AC71, End = 0x0AC8B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AC8D, End = 0x0ACA7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ACA9, End = 0x0ACC3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ACC5, End = 0x0ACDF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ACE1, End = 0x0ACFB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ACFD, End = 0x0AD17, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AD19, End = 0x0AD33, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AD35, End = 0x0AD4F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AD51, End = 0x0AD6B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AD6D, End = 0x0AD87, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AD89, End = 0x0ADA3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ADA5, End = 0x0ADBF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ADC1, End = 0x0ADDB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ADDD, End = 0x0ADF7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ADF9, End = 0x0AE13, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AE15, End = 0x0AE2F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AE31, End = 0x0AE4B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AE4D, End = 0x0AE67, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AE69, End = 0x0AE83, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AE85, End = 0x0AE9F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AEA1, End = 0x0AEBB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AEBD, End = 0x0AED7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AED9, End = 0x0AEF3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AEF5, End = 0x0AF0F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AF11, End = 0x0AF2B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AF2D, End = 0x0AF47, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AF49, End = 0x0AF63, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AF65, End = 0x0AF7F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AF81, End = 0x0AF9B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AF9D, End = 0x0AFB7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AFB9, End = 0x0AFD3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AFD5, End = 0x0AFEF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AFF1, End = 0x0B00B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B00D, End = 0x0B027, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B029, End = 0x0B043, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B045, End = 0x0B05F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B061, End = 0x0B07B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B07D, End = 0x0B097, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B099, End = 0x0B0B3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B0B5, End = 0x0B0CF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B0D1, End = 0x0B0EB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B0ED, End = 0x0B107, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B109, End = 0x0B123, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B125, End = 0x0B13F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B141, End = 0x0B15B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B15D, End = 0x0B177, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B179, End = 0x0B193, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B195, End = 0x0B1AF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B1B1, End = 0x0B1CB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B1CD, End = 0x0B1E7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B1E9, End = 0x0B203, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B205, End = 0x0B21F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B221, End = 0x0B23B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B23D, End = 0x0B257, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B259, End = 0x0B273, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B275, End = 0x0B28F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B291, End = 0x0B2AB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B2AD, End = 0x0B2C7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B2C9, End = 0x0B2E3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B2E5, End = 0x0B2FF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B301, End = 0x0B31B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B31D, End = 0x0B337, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B339, End = 0x0B353, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B355, End = 0x0B36F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B371, End = 0x0B38B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B38D, End = 0x0B3A7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B3A9, End = 0x0B3C3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B3C5, End = 0x0B3DF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B3E1, End = 0x0B3FB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B3FD, End = 0x0B417, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B419, End = 0x0B433, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B435, End = 0x0B44F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B451, End = 0x0B46B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B46D, End = 0x0B487, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B489, End = 0x0B4A3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B4A5, End = 0x0B4BF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B4C1, End = 0x0B4DB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B4DD, End = 0x0B4F7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B4F9, End = 0x0B513, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B515, End = 0x0B52F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B531, End = 0x0B54B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B54D, End = 0x0B567, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B569, End = 0x0B583, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B585, End = 0x0B59F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B5A1, End = 0x0B5BB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B5BD, End = 0x0B5D7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B5D9, End = 0x0B5F3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B5F5, End = 0x0B60F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B611, End = 0x0B62B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B62D, End = 0x0B647, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B649, End = 0x0B663, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B665, End = 0x0B67F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B681, End = 0x0B69B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B69D, End = 0x0B6B7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B6B9, End = 0x0B6D3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B6D5, End = 0x0B6EF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B6F1, End = 0x0B70B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B70D, End = 0x0B727, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B729, End = 0x0B743, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B745, End = 0x0B75F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B761, End = 0x0B77B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B77D, End = 0x0B797, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B799, End = 0x0B7B3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B7B5, End = 0x0B7CF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B7D1, End = 0x0B7EB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B7ED, End = 0x0B807, Type = LVT }); - // Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B809, End = 0x0B823, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B825, End = 0x0B83F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B841, End = 0x0B85B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B85D, End = 0x0B877, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B879, End = 0x0B893, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B895, End = 0x0B8AF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B8B1, End = 0x0B8CB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B8CD, End = 0x0B8E7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B8E9, End = 0x0B903, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B905, End = 0x0B91F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B921, End = 0x0B93B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B93D, End = 0x0B957, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B959, End = 0x0B973, Type = LVT }); - // Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B975, End = 0x0B98F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B991, End = 0x0B9AB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B9AD, End = 0x0B9C7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B9C9, End = 0x0B9E3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0B9E5, End = 0x0B9FF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BA01, End = 0x0BA1B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BA1D, End = 0x0BA37, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BA39, End = 0x0BA53, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BA55, End = 0x0BA6F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BA71, End = 0x0BA8B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BA8D, End = 0x0BAA7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BAA9, End = 0x0BAC3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BAC5, End = 0x0BADF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BAE1, End = 0x0BAFB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BAFD, End = 0x0BB17, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BB19, End = 0x0BB33, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BB35, End = 0x0BB4F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BB51, End = 0x0BB6B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BB6D, End = 0x0BB87, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BB89, End = 0x0BBA3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BBA5, End = 0x0BBBF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BBC1, End = 0x0BBDB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BBDD, End = 0x0BBF7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BBF9, End = 0x0BC13, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BC15, End = 0x0BC2F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BC31, End = 0x0BC4B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BC4D, End = 0x0BC67, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BC69, End = 0x0BC83, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BC85, End = 0x0BC9F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BCA1, End = 0x0BCBB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BCBD, End = 0x0BCD7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BCD9, End = 0x0BCF3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BCF5, End = 0x0BD0F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BD11, End = 0x0BD2B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BD2D, End = 0x0BD47, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BD49, End = 0x0BD63, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BD65, End = 0x0BD7F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BD81, End = 0x0BD9B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BD9D, End = 0x0BDB7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BDB9, End = 0x0BDD3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BDD5, End = 0x0BDEF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BDF1, End = 0x0BE0B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BE0D, End = 0x0BE27, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BE29, End = 0x0BE43, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BE45, End = 0x0BE5F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BE61, End = 0x0BE7B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BE7D, End = 0x0BE97, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BE99, End = 0x0BEB3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BEB5, End = 0x0BECF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BED1, End = 0x0BEEB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BEED, End = 0x0BF07, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BF09, End = 0x0BF23, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BF25, End = 0x0BF3F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BF41, End = 0x0BF5B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BF5D, End = 0x0BF77, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BF79, End = 0x0BF93, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BF95, End = 0x0BFAF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BFB1, End = 0x0BFCB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BFCD, End = 0x0BFE7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0BFE9, End = 0x0C003, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C005, End = 0x0C01F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C021, End = 0x0C03B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C03D, End = 0x0C057, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C059, End = 0x0C073, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C075, End = 0x0C08F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C091, End = 0x0C0AB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C0AD, End = 0x0C0C7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C0C9, End = 0x0C0E3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C0E5, End = 0x0C0FF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C101, End = 0x0C11B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C11D, End = 0x0C137, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C139, End = 0x0C153, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C155, End = 0x0C16F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C171, End = 0x0C18B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C18D, End = 0x0C1A7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C1A9, End = 0x0C1C3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C1C5, End = 0x0C1DF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C1E1, End = 0x0C1FB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C1FD, End = 0x0C217, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C219, End = 0x0C233, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C235, End = 0x0C24F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C251, End = 0x0C26B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C26D, End = 0x0C287, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C289, End = 0x0C2A3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C2A5, End = 0x0C2BF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C2C1, End = 0x0C2DB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C2DD, End = 0x0C2F7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C2F9, End = 0x0C313, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C315, End = 0x0C32F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C331, End = 0x0C34B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C34D, End = 0x0C367, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C369, End = 0x0C383, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C385, End = 0x0C39F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C3A1, End = 0x0C3BB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C3BD, End = 0x0C3D7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C3D9, End = 0x0C3F3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C3F5, End = 0x0C40F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C411, End = 0x0C42B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C42D, End = 0x0C447, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C449, End = 0x0C463, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C465, End = 0x0C47F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C481, End = 0x0C49B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C49D, End = 0x0C4B7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C4B9, End = 0x0C4D3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C4D5, End = 0x0C4EF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C4F1, End = 0x0C50B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C50D, End = 0x0C527, Type = LVT }); - // Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C529, End = 0x0C543, Type = LVT }); - // Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C545, End = 0x0C55F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C561, End = 0x0C57B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C57D, End = 0x0C597, Type = LVT }); - // Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C599, End = 0x0C5B3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C5B5, End = 0x0C5CF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C5D1, End = 0x0C5EB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C5ED, End = 0x0C607, Type = LVT }); - // Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C609, End = 0x0C623, Type = LVT }); - // Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C625, End = 0x0C63F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C641, End = 0x0C65B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C65D, End = 0x0C677, Type = LVT }); - // Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C679, End = 0x0C693, Type = LVT }); - // Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C695, End = 0x0C6AF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C6B1, End = 0x0C6CB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C6CD, End = 0x0C6E7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C6E9, End = 0x0C703, Type = LVT }); - // Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C705, End = 0x0C71F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C721, End = 0x0C73B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C73D, End = 0x0C757, Type = LVT }); - // Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C759, End = 0x0C773, Type = LVT }); - // Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C775, End = 0x0C78F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C791, End = 0x0C7AB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C7AD, End = 0x0C7C7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C7C9, End = 0x0C7E3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C7E5, End = 0x0C7FF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C801, End = 0x0C81B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C81D, End = 0x0C837, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C839, End = 0x0C853, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C855, End = 0x0C86F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C871, End = 0x0C88B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C88D, End = 0x0C8A7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C8A9, End = 0x0C8C3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C8C5, End = 0x0C8DF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C8E1, End = 0x0C8FB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C8FD, End = 0x0C917, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C919, End = 0x0C933, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C935, End = 0x0C94F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C951, End = 0x0C96B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C96D, End = 0x0C987, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C989, End = 0x0C9A3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C9A5, End = 0x0C9BF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C9C1, End = 0x0C9DB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C9DD, End = 0x0C9F7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0C9F9, End = 0x0CA13, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CA15, End = 0x0CA2F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CA31, End = 0x0CA4B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CA4D, End = 0x0CA67, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CA69, End = 0x0CA83, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CA85, End = 0x0CA9F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CAA1, End = 0x0CABB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CABD, End = 0x0CAD7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CAD9, End = 0x0CAF3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CAF5, End = 0x0CB0F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CB11, End = 0x0CB2B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CB2D, End = 0x0CB47, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CB49, End = 0x0CB63, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CB65, End = 0x0CB7F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CB81, End = 0x0CB9B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CB9D, End = 0x0CBB7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CBB9, End = 0x0CBD3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CBD5, End = 0x0CBEF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CBF1, End = 0x0CC0B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CC0D, End = 0x0CC27, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CC29, End = 0x0CC43, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CC45, End = 0x0CC5F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CC61, End = 0x0CC7B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CC7D, End = 0x0CC97, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CC99, End = 0x0CCB3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CCB5, End = 0x0CCCF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CCD1, End = 0x0CCEB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CCED, End = 0x0CD07, Type = LVT }); - // Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CD09, End = 0x0CD23, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CD25, End = 0x0CD3F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CD41, End = 0x0CD5B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CD5D, End = 0x0CD77, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CD79, End = 0x0CD93, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CD95, End = 0x0CDAF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CDB1, End = 0x0CDCB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CDCD, End = 0x0CDE7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CDE9, End = 0x0CE03, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CE05, End = 0x0CE1F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CE21, End = 0x0CE3B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CE3D, End = 0x0CE57, Type = LVT }); - // Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CE59, End = 0x0CE73, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CE75, End = 0x0CE8F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CE91, End = 0x0CEAB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CEAD, End = 0x0CEC7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CEC9, End = 0x0CEE3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CEE5, End = 0x0CEFF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CF01, End = 0x0CF1B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CF1D, End = 0x0CF37, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CF39, End = 0x0CF53, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CF55, End = 0x0CF6F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CF71, End = 0x0CF8B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CF8D, End = 0x0CFA7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CFA9, End = 0x0CFC3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CFC5, End = 0x0CFDF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CFE1, End = 0x0CFFB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0CFFD, End = 0x0D017, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D019, End = 0x0D033, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D035, End = 0x0D04F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D051, End = 0x0D06B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D06D, End = 0x0D087, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D089, End = 0x0D0A3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D0A5, End = 0x0D0BF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D0C1, End = 0x0D0DB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D0DD, End = 0x0D0F7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D0F9, End = 0x0D113, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D115, End = 0x0D12F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D131, End = 0x0D14B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D14D, End = 0x0D167, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D169, End = 0x0D183, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D185, End = 0x0D19F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D1A1, End = 0x0D1BB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D1BD, End = 0x0D1D7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D1D9, End = 0x0D1F3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D1F5, End = 0x0D20F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D211, End = 0x0D22B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D22D, End = 0x0D247, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D249, End = 0x0D263, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D265, End = 0x0D27F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D281, End = 0x0D29B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D29D, End = 0x0D2B7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D2B9, End = 0x0D2D3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D2D5, End = 0x0D2EF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D2F1, End = 0x0D30B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D30D, End = 0x0D327, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D329, End = 0x0D343, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D345, End = 0x0D35F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D361, End = 0x0D37B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D37D, End = 0x0D397, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D399, End = 0x0D3B3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D3B5, End = 0x0D3CF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D3D1, End = 0x0D3EB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D3ED, End = 0x0D407, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D409, End = 0x0D423, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D425, End = 0x0D43F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D441, End = 0x0D45B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D45D, End = 0x0D477, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D479, End = 0x0D493, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D495, End = 0x0D4AF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D4B1, End = 0x0D4CB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D4CD, End = 0x0D4E7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D4E9, End = 0x0D503, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D505, End = 0x0D51F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D521, End = 0x0D53B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D53D, End = 0x0D557, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D559, End = 0x0D573, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D575, End = 0x0D58F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D591, End = 0x0D5AB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D5AD, End = 0x0D5C7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D5C9, End = 0x0D5E3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D5E5, End = 0x0D5FF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D601, End = 0x0D61B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D61D, End = 0x0D637, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D639, End = 0x0D653, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D655, End = 0x0D66F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D671, End = 0x0D68B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D68D, End = 0x0D6A7, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D6A9, End = 0x0D6C3, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D6C5, End = 0x0D6DF, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D6E1, End = 0x0D6FB, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D6FD, End = 0x0D717, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D719, End = 0x0D733, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D735, End = 0x0D74F, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D751, End = 0x0D76B, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D76D, End = 0x0D787, Type = LVT }); - // Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D789, End = 0x0D7A3, Type = LVT }); - // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D7B0, End = 0x0D7C6, Type = V }); - // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D7CB, End = 0x0D7FB, Type = T }); - // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE00, End = 0x0FE0F, Type = Extend }); - // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE20, End = 0x0FE2F, Type = Extend }); - // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FF9E, End = 0x0FF9F, Type = Extend }); - // Cn [9] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFF0, End = 0x0FFF8, Type = Control }); - // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFF9, End = 0x0FFFB, Type = Control }); - // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII - m_lst_code_range.Add(new RangeInfo() { Start = 0x10376, End = 0x1037A, Type = Extend }); - // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A01, End = 0x10A03, Type = Extend }); - // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A05, End = 0x10A06, Type = Extend }); - // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A0C, End = 0x10A0F, Type = Extend }); - // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A38, End = 0x10A3A, Type = Extend }); - // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10AE5, End = 0x10AE6, Type = Extend }); - // Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI - m_lst_code_range.Add(new RangeInfo() { Start = 0x10D24, End = 0x10D27, Type = Extend }); - // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x10EAB, End = 0x10EAC, Type = Extend }); - // Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10F46, End = 0x10F50, Type = Extend }); - // Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10F82, End = 0x10F85, Type = Extend }); - // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11038, End = 0x11046, Type = Extend }); - // Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11073, End = 0x11074, Type = Extend }); - // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1107F, End = 0x11081, Type = Extend }); - // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B0, End = 0x110B2, Type = SpacingMark }); - // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B3, End = 0x110B6, Type = Extend }); - // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B7, End = 0x110B8, Type = SpacingMark }); - // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B9, End = 0x110BA, Type = Extend }); - // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11100, End = 0x11102, Type = Extend }); - // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11127, End = 0x1112B, Type = Extend }); - // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1112D, End = 0x11134, Type = Extend }); - // Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11145, End = 0x11146, Type = SpacingMark }); - // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11180, End = 0x11181, Type = Extend }); - // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x111B3, End = 0x111B5, Type = SpacingMark }); - // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x111B6, End = 0x111BE, Type = Extend }); - // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x111BF, End = 0x111C0, Type = SpacingMark }); - // Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x111C2, End = 0x111C3, Type = Prepend }); - // Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x111C9, End = 0x111CC, Type = Extend }); - // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x1122C, End = 0x1122E, Type = SpacingMark }); - // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x1122F, End = 0x11231, Type = Extend }); - // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11232, End = 0x11233, Type = SpacingMark }); - // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11236, End = 0x11237, Type = Extend }); - // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x112E0, End = 0x112E2, Type = SpacingMark }); - // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x112E3, End = 0x112EA, Type = Extend }); - // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11300, End = 0x11301, Type = Extend }); - // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11302, End = 0x11303, Type = SpacingMark }); - // Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1133B, End = 0x1133C, Type = Extend }); - // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x11341, End = 0x11344, Type = SpacingMark }); - // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11347, End = 0x11348, Type = SpacingMark }); - // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1134B, End = 0x1134D, Type = SpacingMark }); - // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x11362, End = 0x11363, Type = SpacingMark }); - // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX - m_lst_code_range.Add(new RangeInfo() { Start = 0x11366, End = 0x1136C, Type = Extend }); - // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11370, End = 0x11374, Type = Extend }); - // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x11435, End = 0x11437, Type = SpacingMark }); - // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11438, End = 0x1143F, Type = Extend }); - // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11440, End = 0x11441, Type = SpacingMark }); - // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11442, End = 0x11444, Type = Extend }); - // Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x114B1, End = 0x114B2, Type = SpacingMark }); - // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x114B3, End = 0x114B8, Type = Extend }); - // Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x114BB, End = 0x114BC, Type = SpacingMark }); - // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x114BF, End = 0x114C0, Type = Extend }); - // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x114C2, End = 0x114C3, Type = Extend }); - // Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x115B0, End = 0x115B1, Type = SpacingMark }); - // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x115B2, End = 0x115B5, Type = Extend }); - // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x115B8, End = 0x115BB, Type = SpacingMark }); - // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x115BC, End = 0x115BD, Type = Extend }); - // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x115BF, End = 0x115C0, Type = Extend }); - // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x115DC, End = 0x115DD, Type = Extend }); - // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x11630, End = 0x11632, Type = SpacingMark }); - // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11633, End = 0x1163A, Type = Extend }); - // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x1163B, End = 0x1163C, Type = SpacingMark }); - // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1163F, End = 0x11640, Type = Extend }); - // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x116AE, End = 0x116AF, Type = SpacingMark }); - // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x116B0, End = 0x116B5, Type = Extend }); - // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1171D, End = 0x1171F, Type = Extend }); - // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11722, End = 0x11725, Type = Extend }); - // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER - m_lst_code_range.Add(new RangeInfo() { Start = 0x11727, End = 0x1172B, Type = Extend }); - // Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x1182C, End = 0x1182E, Type = SpacingMark }); - // Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1182F, End = 0x11837, Type = Extend }); - // Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11839, End = 0x1183A, Type = Extend }); - // Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E - m_lst_code_range.Add(new RangeInfo() { Start = 0x11931, End = 0x11935, Type = SpacingMark }); - // Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11937, End = 0x11938, Type = SpacingMark }); - // Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x1193B, End = 0x1193C, Type = Extend }); - // Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x119D1, End = 0x119D3, Type = SpacingMark }); - // Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x119D4, End = 0x119D7, Type = Extend }); - // Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x119DA, End = 0x119DB, Type = Extend }); - // Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x119DC, End = 0x119DF, Type = SpacingMark }); - // Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A01, End = 0x11A0A, Type = Extend }); - // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A33, End = 0x11A38, Type = Extend }); - // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A3B, End = 0x11A3E, Type = Extend }); - // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A51, End = 0x11A56, Type = Extend }); - // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A57, End = 0x11A58, Type = SpacingMark }); - // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A59, End = 0x11A5B, Type = Extend }); - // Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A84, End = 0x11A89, Type = Prepend }); - // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A8A, End = 0x11A96, Type = Extend }); - // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A98, End = 0x11A99, Type = Extend }); - // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C30, End = 0x11C36, Type = Extend }); - // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C38, End = 0x11C3D, Type = Extend }); - // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C92, End = 0x11CA7, Type = Extend }); - // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11CAA, End = 0x11CB0, Type = Extend }); - // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E - m_lst_code_range.Add(new RangeInfo() { Start = 0x11CB2, End = 0x11CB3, Type = Extend }); - // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11CB5, End = 0x11CB6, Type = Extend }); - // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D31, End = 0x11D36, Type = Extend }); - // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D3C, End = 0x11D3D, Type = Extend }); - // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D3F, End = 0x11D45, Type = Extend }); - // Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D8A, End = 0x11D8E, Type = SpacingMark }); - // Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D90, End = 0x11D91, Type = Extend }); - // Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D93, End = 0x11D94, Type = SpacingMark }); - // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x11EF3, End = 0x11EF4, Type = Extend }); - // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11EF5, End = 0x11EF6, Type = SpacingMark }); - // Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT - m_lst_code_range.Add(new RangeInfo() { Start = 0x13430, End = 0x13438, Type = Control }); - // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE - m_lst_code_range.Add(new RangeInfo() { Start = 0x16AF0, End = 0x16AF4, Type = Extend }); - // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM - m_lst_code_range.Add(new RangeInfo() { Start = 0x16B30, End = 0x16B36, Type = Extend }); - // Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI - m_lst_code_range.Add(new RangeInfo() { Start = 0x16F51, End = 0x16F87, Type = SpacingMark }); - // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x16F8F, End = 0x16F92, Type = Extend }); - // Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY - m_lst_code_range.Add(new RangeInfo() { Start = 0x16FF0, End = 0x16FF1, Type = SpacingMark }); - // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BC9D, End = 0x1BC9E, Type = Extend }); - // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BCA0, End = 0x1BCA3, Type = Control }); - // Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1CF00, End = 0x1CF2D, Type = Extend }); - // Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG - m_lst_code_range.Add(new RangeInfo() { Start = 0x1CF30, End = 0x1CF46, Type = Extend }); - // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D167, End = 0x1D169, Type = Extend }); - // Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D16E, End = 0x1D172, Type = Extend }); - // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D173, End = 0x1D17A, Type = Control }); - // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D17B, End = 0x1D182, Type = Extend }); - // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D185, End = 0x1D18B, Type = Extend }); - // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D1AA, End = 0x1D1AD, Type = Extend }); - // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D242, End = 0x1D244, Type = Extend }); - // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DA00, End = 0x1DA36, Type = Extend }); - // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DA3B, End = 0x1DA6C, Type = Extend }); - // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DA9B, End = 0x1DA9F, Type = Extend }); - // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DAA1, End = 0x1DAAF, Type = Extend }); - // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E000, End = 0x1E006, Type = Extend }); - // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E008, End = 0x1E018, Type = Extend }); - // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E01B, End = 0x1E021, Type = Extend }); - // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E023, End = 0x1E024, Type = Extend }); - // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E026, End = 0x1E02A, Type = Extend }); - // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E130, End = 0x1E136, Type = Extend }); - // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E2EC, End = 0x1E2EF, Type = Extend }); - // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E8D0, End = 0x1E8D6, Type = Extend }); - // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E944, End = 0x1E94A, Type = Extend }); - // E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F000, End = 0x1F003, Type = Extended_Pictographic }); - // E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F005, End = 0x1F0CE, Type = Extended_Pictographic }); - // E0.0 [48] (🃐..🃿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F0D0, End = 0x1F0FF, Type = Extended_Pictographic }); - // E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F10D, End = 0x1F10F, Type = Extended_Pictographic }); - // E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F16C, End = 0x1F16F, Type = Extended_Pictographic }); - // E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F170, End = 0x1F171, Type = Extended_Pictographic }); - // E0.6 [2] (🅾️..🅿️) O button (blood type)..P button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F17E, End = 0x1F17F, Type = Extended_Pictographic }); - // E0.6 [10] (🆑..🆚) CL button..VS button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F191, End = 0x1F19A, Type = Extended_Pictographic }); - // E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F1AD, End = 0x1F1E5, Type = Extended_Pictographic }); - // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F1E6, End = 0x1F1FF, Type = Regional_Indicator }); - // E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F201, End = 0x1F202, Type = Extended_Pictographic }); - // E0.0 [13] (🈃..🈏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F203, End = 0x1F20F, Type = Extended_Pictographic }); - // E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F232, End = 0x1F23A, Type = Extended_Pictographic }); - // E0.0 [4] (🈼..🈿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F23C, End = 0x1F23F, Type = Extended_Pictographic }); - // E0.0 [7] (🉉..🉏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F249, End = 0x1F24F, Type = Extended_Pictographic }); - // E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F250, End = 0x1F251, Type = Extended_Pictographic }); - // E0.0 [174] (🉒..🋿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F252, End = 0x1F2FF, Type = Extended_Pictographic }); - // E0.6 [13] (🌀..🌌) cyclone..milky way - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F300, End = 0x1F30C, Type = Extended_Pictographic }); - // E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F30D, End = 0x1F30E, Type = Extended_Pictographic }); - // E0.6 [3] (🌓..🌕) first quarter moon..full moon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F313, End = 0x1F315, Type = Extended_Pictographic }); - // E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F316, End = 0x1F318, Type = Extended_Pictographic }); - // E1.0 [2] (🌝..🌞) full moon face..sun with face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F31D, End = 0x1F31E, Type = Extended_Pictographic }); - // E0.6 [2] (🌟..🌠) glowing star..shooting star - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F31F, End = 0x1F320, Type = Extended_Pictographic }); - // E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F322, End = 0x1F323, Type = Extended_Pictographic }); - // E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F324, End = 0x1F32C, Type = Extended_Pictographic }); - // E1.0 [3] (🌭..🌯) hot dog..burrito - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F32D, End = 0x1F32F, Type = Extended_Pictographic }); - // E0.6 [2] (🌰..🌱) chestnut..seedling - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F330, End = 0x1F331, Type = Extended_Pictographic }); - // E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F332, End = 0x1F333, Type = Extended_Pictographic }); - // E0.6 [2] (🌴..🌵) palm tree..cactus - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F334, End = 0x1F335, Type = Extended_Pictographic }); - // E0.6 [20] (🌷..🍊) tulip..tangerine - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F337, End = 0x1F34A, Type = Extended_Pictographic }); - // E0.6 [4] (🍌..🍏) banana..green apple - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F34C, End = 0x1F34F, Type = Extended_Pictographic }); - // E0.6 [43] (🍑..🍻) peach..clinking beer mugs - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F351, End = 0x1F37B, Type = Extended_Pictographic }); - // E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F37E, End = 0x1F37F, Type = Extended_Pictographic }); - // E0.6 [20] (🎀..🎓) ribbon..graduation cap - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F380, End = 0x1F393, Type = Extended_Pictographic }); - // E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F394, End = 0x1F395, Type = Extended_Pictographic }); - // E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F396, End = 0x1F397, Type = Extended_Pictographic }); - // E0.7 [3] (🎙️..🎛️) studio microphone..control knobs - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F399, End = 0x1F39B, Type = Extended_Pictographic }); - // E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F39C, End = 0x1F39D, Type = Extended_Pictographic }); - // E0.7 [2] (🎞️..🎟️) film frames..admission tickets - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F39E, End = 0x1F39F, Type = Extended_Pictographic }); - // E0.6 [37] (🎠..🏄) carousel horse..person surfing - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3A0, End = 0x1F3C4, Type = Extended_Pictographic }); - // E0.7 [4] (🏋️..🏎️) person lifting weights..racing car - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3CB, End = 0x1F3CE, Type = Extended_Pictographic }); - // E1.0 [5] (🏏..🏓) cricket game..ping pong - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3CF, End = 0x1F3D3, Type = Extended_Pictographic }); - // E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3D4, End = 0x1F3DF, Type = Extended_Pictographic }); - // E0.6 [4] (🏠..🏣) house..Japanese post office - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3E0, End = 0x1F3E3, Type = Extended_Pictographic }); - // E0.6 [12] (🏥..🏰) hospital..castle - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3E5, End = 0x1F3F0, Type = Extended_Pictographic }); - // E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3F1, End = 0x1F3F2, Type = Extended_Pictographic }); - // E1.0 [3] (🏸..🏺) badminton..amphora - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3F8, End = 0x1F3FA, Type = Extended_Pictographic }); - // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3FB, End = 0x1F3FF, Type = Extend }); - // E1.0 [8] (🐀..🐇) rat..rabbit - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F400, End = 0x1F407, Type = Extended_Pictographic }); - // E1.0 [3] (🐉..🐋) dragon..whale - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F409, End = 0x1F40B, Type = Extended_Pictographic }); - // E0.6 [3] (🐌..🐎) snail..horse - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F40C, End = 0x1F40E, Type = Extended_Pictographic }); - // E1.0 [2] (🐏..🐐) ram..goat - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F40F, End = 0x1F410, Type = Extended_Pictographic }); - // E0.6 [2] (🐑..🐒) ewe..monkey - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F411, End = 0x1F412, Type = Extended_Pictographic }); - // E0.6 [19] (🐗..🐩) boar..poodle - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F417, End = 0x1F429, Type = Extended_Pictographic }); - // E0.6 [20] (🐫..🐾) two-hump camel..paw prints - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F42B, End = 0x1F43E, Type = Extended_Pictographic }); - // E0.6 [35] (👂..👤) ear..bust in silhouette - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F442, End = 0x1F464, Type = Extended_Pictographic }); - // E0.6 [6] (👦..👫) boy..woman and man holding hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F466, End = 0x1F46B, Type = Extended_Pictographic }); - // E1.0 [2] (👬..👭) men holding hands..women holding hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F46C, End = 0x1F46D, Type = Extended_Pictographic }); - // E0.6 [63] (👮..💬) police officer..speech balloon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F46E, End = 0x1F4AC, Type = Extended_Pictographic }); - // E0.6 [8] (💮..💵) white flower..dollar banknote - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4AE, End = 0x1F4B5, Type = Extended_Pictographic }); - // E1.0 [2] (💶..💷) euro banknote..pound banknote - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4B6, End = 0x1F4B7, Type = Extended_Pictographic }); - // E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4B8, End = 0x1F4EB, Type = Extended_Pictographic }); - // E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4EC, End = 0x1F4ED, Type = Extended_Pictographic }); - // E0.6 [5] (📰..📴) newspaper..mobile phone off - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4F0, End = 0x1F4F4, Type = Extended_Pictographic }); - // E0.6 [2] (📶..📷) antenna bars..camera - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4F6, End = 0x1F4F7, Type = Extended_Pictographic }); - // E0.6 [4] (📹..📼) video camera..videocassette - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4F9, End = 0x1F4FC, Type = Extended_Pictographic }); - // E1.0 [4] (📿..🔂) prayer beads..repeat single button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4FF, End = 0x1F502, Type = Extended_Pictographic }); - // E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F504, End = 0x1F507, Type = Extended_Pictographic }); - // E0.6 [11] (🔊..🔔) speaker high volume..bell - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F50A, End = 0x1F514, Type = Extended_Pictographic }); - // E0.6 [22] (🔖..🔫) bookmark..water pistol - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F516, End = 0x1F52B, Type = Extended_Pictographic }); - // E1.0 [2] (🔬..🔭) microscope..telescope - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F52C, End = 0x1F52D, Type = Extended_Pictographic }); - // E0.6 [16] (🔮..🔽) crystal ball..downwards button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F52E, End = 0x1F53D, Type = Extended_Pictographic }); - // E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F546, End = 0x1F548, Type = Extended_Pictographic }); - // E0.7 [2] (🕉️..🕊️) om..dove - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F549, End = 0x1F54A, Type = Extended_Pictographic }); - // E1.0 [4] (🕋..🕎) kaaba..menorah - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F54B, End = 0x1F54E, Type = Extended_Pictographic }); - // E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F550, End = 0x1F55B, Type = Extended_Pictographic }); - // E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F55C, End = 0x1F567, Type = Extended_Pictographic }); - // E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F568, End = 0x1F56E, Type = Extended_Pictographic }); - // E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F56F, End = 0x1F570, Type = Extended_Pictographic }); - // E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F571, End = 0x1F572, Type = Extended_Pictographic }); - // E0.7 [7] (🕳️..🕹️) hole..joystick - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F573, End = 0x1F579, Type = Extended_Pictographic }); - // E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F57B, End = 0x1F586, Type = Extended_Pictographic }); - // E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F588, End = 0x1F589, Type = Extended_Pictographic }); - // E0.7 [4] (🖊️..🖍️) pen..crayon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F58A, End = 0x1F58D, Type = Extended_Pictographic }); - // E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F58E, End = 0x1F58F, Type = Extended_Pictographic }); - // E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F591, End = 0x1F594, Type = Extended_Pictographic }); - // E1.0 [2] (🖕..🖖) middle finger..vulcan salute - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F595, End = 0x1F596, Type = Extended_Pictographic }); - // E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F597, End = 0x1F5A3, Type = Extended_Pictographic }); - // E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5A6, End = 0x1F5A7, Type = Extended_Pictographic }); - // E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5A9, End = 0x1F5B0, Type = Extended_Pictographic }); - // E0.7 [2] (🖱️..🖲️) computer mouse..trackball - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5B1, End = 0x1F5B2, Type = Extended_Pictographic }); - // E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5B3, End = 0x1F5BB, Type = Extended_Pictographic }); - // E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5BD, End = 0x1F5C1, Type = Extended_Pictographic }); - // E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5C2, End = 0x1F5C4, Type = Extended_Pictographic }); - // E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5C5, End = 0x1F5D0, Type = Extended_Pictographic }); - // E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5D1, End = 0x1F5D3, Type = Extended_Pictographic }); - // E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5D4, End = 0x1F5DB, Type = Extended_Pictographic }); - // E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5DC, End = 0x1F5DE, Type = Extended_Pictographic }); - // E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5DF, End = 0x1F5E0, Type = Extended_Pictographic }); - // E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5E4, End = 0x1F5E7, Type = Extended_Pictographic }); - // E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5E9, End = 0x1F5EE, Type = Extended_Pictographic }); - // E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5F0, End = 0x1F5F2, Type = Extended_Pictographic }); - // E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5F4, End = 0x1F5F9, Type = Extended_Pictographic }); - // E0.6 [5] (🗻..🗿) mount fuji..moai - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5FB, End = 0x1F5FF, Type = Extended_Pictographic }); - // E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F601, End = 0x1F606, Type = Extended_Pictographic }); - // E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F607, End = 0x1F608, Type = Extended_Pictographic }); - // E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F609, End = 0x1F60D, Type = Extended_Pictographic }); - // E0.6 [3] (😒..😔) unamused face..pensive face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F612, End = 0x1F614, Type = Extended_Pictographic }); - // E0.6 [3] (😜..😞) winking face with tongue..disappointed face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F61C, End = 0x1F61E, Type = Extended_Pictographic }); - // E0.6 [6] (😠..😥) angry face..sad but relieved face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F620, End = 0x1F625, Type = Extended_Pictographic }); - // E1.0 [2] (😦..😧) frowning face with open mouth..anguished face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F626, End = 0x1F627, Type = Extended_Pictographic }); - // E0.6 [4] (😨..😫) fearful face..tired face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F628, End = 0x1F62B, Type = Extended_Pictographic }); - // E1.0 [2] (😮..😯) face with open mouth..hushed face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F62E, End = 0x1F62F, Type = Extended_Pictographic }); - // E0.6 [4] (😰..😳) anxious face with sweat..flushed face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F630, End = 0x1F633, Type = Extended_Pictographic }); - // E0.6 [10] (😷..🙀) face with medical mask..weary cat - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F637, End = 0x1F640, Type = Extended_Pictographic }); - // E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F641, End = 0x1F644, Type = Extended_Pictographic }); - // E0.6 [11] (🙅..🙏) person gesturing NO..folded hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F645, End = 0x1F64F, Type = Extended_Pictographic }); - // E1.0 [2] (🚁..🚂) helicopter..locomotive - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F681, End = 0x1F682, Type = Extended_Pictographic }); - // E0.6 [3] (🚃..🚅) railway car..bullet train - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F683, End = 0x1F685, Type = Extended_Pictographic }); - // E1.0 [2] (🚊..🚋) tram..tram car - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F68A, End = 0x1F68B, Type = Extended_Pictographic }); - // E0.6 [3] (🚑..🚓) ambulance..police car - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F691, End = 0x1F693, Type = Extended_Pictographic }); - // E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F699, End = 0x1F69A, Type = Extended_Pictographic }); - // E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F69B, End = 0x1F6A1, Type = Extended_Pictographic }); - // E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6A4, End = 0x1F6A5, Type = Extended_Pictographic }); - // E0.6 [7] (🚧..🚭) construction..no smoking - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6A7, End = 0x1F6AD, Type = Extended_Pictographic }); - // E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6AE, End = 0x1F6B1, Type = Extended_Pictographic }); - // E1.0 [3] (🚳..🚵) no bicycles..person mountain biking - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6B3, End = 0x1F6B5, Type = Extended_Pictographic }); - // E1.0 [2] (🚷..🚸) no pedestrians..children crossing - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6B7, End = 0x1F6B8, Type = Extended_Pictographic }); - // E0.6 [6] (🚹..🚾) men’s room..water closet - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6B9, End = 0x1F6BE, Type = Extended_Pictographic }); - // E1.0 [5] (🛁..🛅) bathtub..left luggage - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6C1, End = 0x1F6C5, Type = Extended_Pictographic }); - // E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6C6, End = 0x1F6CA, Type = Extended_Pictographic }); - // E0.7 [3] (🛍️..🛏️) shopping bags..bed - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6CD, End = 0x1F6CF, Type = Extended_Pictographic }); - // E3.0 [2] (🛑..🛒) stop sign..shopping cart - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D1, End = 0x1F6D2, Type = Extended_Pictographic }); - // E0.0 [2] (🛓..🛔) STUPA..PAGODA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D3, End = 0x1F6D4, Type = Extended_Pictographic }); - // E13.0 [2] (🛖..🛗) hut..elevator - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D6, End = 0x1F6D7, Type = Extended_Pictographic }); - // E0.0 [5] (🛘..🛜) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D8, End = 0x1F6DC, Type = Extended_Pictographic }); - // E14.0 [3] (🛝..🛟) playground slide..ring buoy - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6DD, End = 0x1F6DF, Type = Extended_Pictographic }); - // E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6E0, End = 0x1F6E5, Type = Extended_Pictographic }); - // E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6E6, End = 0x1F6E8, Type = Extended_Pictographic }); - // E1.0 [2] (🛫..🛬) airplane departure..airplane arrival - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6EB, End = 0x1F6EC, Type = Extended_Pictographic }); - // E0.0 [3] (🛭..🛯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6ED, End = 0x1F6EF, Type = Extended_Pictographic }); - // E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6F1, End = 0x1F6F2, Type = Extended_Pictographic }); - // E3.0 [3] (🛴..🛶) kick scooter..canoe - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6F4, End = 0x1F6F6, Type = Extended_Pictographic }); - // E5.0 [2] (🛷..🛸) sled..flying saucer - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6F7, End = 0x1F6F8, Type = Extended_Pictographic }); - // E13.0 [2] (🛻..🛼) pickup truck..roller skate - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6FB, End = 0x1F6FC, Type = Extended_Pictographic }); - // E0.0 [3] (🛽..🛿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6FD, End = 0x1F6FF, Type = Extended_Pictographic }); - // E0.0 [12] (🝴..🝿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F774, End = 0x1F77F, Type = Extended_Pictographic }); - // E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7D5, End = 0x1F7DF, Type = Extended_Pictographic }); - // E12.0 [12] (🟠..🟫) orange circle..brown square - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7E0, End = 0x1F7EB, Type = Extended_Pictographic }); - // E0.0 [4] (🟬..🟯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7EC, End = 0x1F7EF, Type = Extended_Pictographic }); - // E0.0 [15] (🟱..🟿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7F1, End = 0x1F7FF, Type = Extended_Pictographic }); - // E0.0 [4] (🠌..🠏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F80C, End = 0x1F80F, Type = Extended_Pictographic }); - // E0.0 [8] (🡈..🡏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F848, End = 0x1F84F, Type = Extended_Pictographic }); - // E0.0 [6] (🡚..🡟) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F85A, End = 0x1F85F, Type = Extended_Pictographic }); - // E0.0 [8] (🢈..🢏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F888, End = 0x1F88F, Type = Extended_Pictographic }); - // E0.0 [82] (🢮..🣿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F8AE, End = 0x1F8FF, Type = Extended_Pictographic }); - // E12.0 [3] (🤍..🤏) white heart..pinching hand - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F90D, End = 0x1F90F, Type = Extended_Pictographic }); - // E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F910, End = 0x1F918, Type = Extended_Pictographic }); - // E3.0 [6] (🤙..🤞) call me hand..crossed fingers - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F919, End = 0x1F91E, Type = Extended_Pictographic }); - // E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F920, End = 0x1F927, Type = Extended_Pictographic }); - // E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F928, End = 0x1F92F, Type = Extended_Pictographic }); - // E5.0 [2] (🤱..🤲) breast-feeding..palms up together - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F931, End = 0x1F932, Type = Extended_Pictographic }); - // E3.0 [8] (🤳..🤺) selfie..person fencing - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F933, End = 0x1F93A, Type = Extended_Pictographic }); - // E3.0 [3] (🤼..🤾) people wrestling..person playing handball - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F93C, End = 0x1F93E, Type = Extended_Pictographic }); - // E3.0 [6] (🥀..🥅) wilted flower..goal net - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F940, End = 0x1F945, Type = Extended_Pictographic }); - // E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F947, End = 0x1F94B, Type = Extended_Pictographic }); - // E11.0 [3] (🥍..🥏) lacrosse..flying disc - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F94D, End = 0x1F94F, Type = Extended_Pictographic }); - // E3.0 [15] (🥐..🥞) croissant..pancakes - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F950, End = 0x1F95E, Type = Extended_Pictographic }); - // E5.0 [13] (🥟..🥫) dumpling..canned food - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F95F, End = 0x1F96B, Type = Extended_Pictographic }); - // E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F96C, End = 0x1F970, Type = Extended_Pictographic }); - // E11.0 [4] (🥳..🥶) partying face..cold face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F973, End = 0x1F976, Type = Extended_Pictographic }); - // E13.0 [2] (🥷..🥸) ninja..disguised face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F977, End = 0x1F978, Type = Extended_Pictographic }); - // E11.0 [4] (🥼..🥿) lab coat..flat shoe - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F97C, End = 0x1F97F, Type = Extended_Pictographic }); - // E1.0 [5] (🦀..🦄) crab..unicorn - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F980, End = 0x1F984, Type = Extended_Pictographic }); - // E3.0 [13] (🦅..🦑) eagle..squid - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F985, End = 0x1F991, Type = Extended_Pictographic }); - // E5.0 [6] (🦒..🦗) giraffe..cricket - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F992, End = 0x1F997, Type = Extended_Pictographic }); - // E11.0 [11] (🦘..🦢) kangaroo..swan - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F998, End = 0x1F9A2, Type = Extended_Pictographic }); - // E13.0 [2] (🦣..🦤) mammoth..dodo - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9A3, End = 0x1F9A4, Type = Extended_Pictographic }); - // E12.0 [6] (🦥..🦪) sloth..oyster - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9A5, End = 0x1F9AA, Type = Extended_Pictographic }); - // E13.0 [3] (🦫..🦭) beaver..seal - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9AB, End = 0x1F9AD, Type = Extended_Pictographic }); - // E12.0 [2] (🦮..🦯) guide dog..white cane - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9AE, End = 0x1F9AF, Type = Extended_Pictographic }); - // E11.0 [10] (🦰..🦹) red hair..supervillain - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9B0, End = 0x1F9B9, Type = Extended_Pictographic }); - // E12.0 [6] (🦺..🦿) safety vest..mechanical leg - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9BA, End = 0x1F9BF, Type = Extended_Pictographic }); - // E11.0 [2] (🧁..🧂) cupcake..salt - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9C1, End = 0x1F9C2, Type = Extended_Pictographic }); - // E12.0 [8] (🧃..🧊) beverage box..ice - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9C3, End = 0x1F9CA, Type = Extended_Pictographic }); - // E12.0 [3] (🧍..🧏) person standing..deaf person - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9CD, End = 0x1F9CF, Type = Extended_Pictographic }); - // E5.0 [23] (🧐..🧦) face with monocle..socks - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9D0, End = 0x1F9E6, Type = Extended_Pictographic }); - // E11.0 [25] (🧧..🧿) red envelope..nazar amulet - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9E7, End = 0x1F9FF, Type = Extended_Pictographic }); - // E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA00, End = 0x1FA6F, Type = Extended_Pictographic }); - // E12.0 [4] (🩰..🩳) ballet shoes..shorts - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA70, End = 0x1FA73, Type = Extended_Pictographic }); - // E0.0 [3] (🩵..🩷) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA75, End = 0x1FA77, Type = Extended_Pictographic }); - // E12.0 [3] (🩸..🩺) drop of blood..stethoscope - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA78, End = 0x1FA7A, Type = Extended_Pictographic }); - // E14.0 [2] (🩻..🩼) x-ray..crutch - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA7B, End = 0x1FA7C, Type = Extended_Pictographic }); - // E0.0 [3] (🩽..🩿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA7D, End = 0x1FA7F, Type = Extended_Pictographic }); - // E12.0 [3] (🪀..🪂) yo-yo..parachute - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA80, End = 0x1FA82, Type = Extended_Pictographic }); - // E13.0 [4] (🪃..🪆) boomerang..nesting dolls - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA83, End = 0x1FA86, Type = Extended_Pictographic }); - // E0.0 [9] (🪇..🪏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA87, End = 0x1FA8F, Type = Extended_Pictographic }); - // E12.0 [6] (🪐..🪕) ringed planet..banjo - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA90, End = 0x1FA95, Type = Extended_Pictographic }); - // E13.0 [19] (🪖..🪨) military helmet..rock - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA96, End = 0x1FAA8, Type = Extended_Pictographic }); - // E14.0 [4] (🪩..🪬) mirror ball..hamsa - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAA9, End = 0x1FAAC, Type = Extended_Pictographic }); - // E0.0 [3] (🪭..🪯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAAD, End = 0x1FAAF, Type = Extended_Pictographic }); - // E13.0 [7] (🪰..🪶) fly..feather - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAB0, End = 0x1FAB6, Type = Extended_Pictographic }); - // E14.0 [4] (🪷..🪺) lotus..nest with eggs - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAB7, End = 0x1FABA, Type = Extended_Pictographic }); - // E0.0 [5] (🪻..🪿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FABB, End = 0x1FABF, Type = Extended_Pictographic }); - // E13.0 [3] (🫀..🫂) anatomical heart..people hugging - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAC0, End = 0x1FAC2, Type = Extended_Pictographic }); - // E14.0 [3] (🫃..🫅) pregnant man..person with crown - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAC3, End = 0x1FAC5, Type = Extended_Pictographic }); - // E0.0 [10] (🫆..🫏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAC6, End = 0x1FACF, Type = Extended_Pictographic }); - // E13.0 [7] (🫐..🫖) blueberries..teapot - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAD0, End = 0x1FAD6, Type = Extended_Pictographic }); - // E14.0 [3] (🫗..🫙) pouring liquid..jar - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAD7, End = 0x1FAD9, Type = Extended_Pictographic }); - // E0.0 [6] (🫚..🫟) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FADA, End = 0x1FADF, Type = Extended_Pictographic }); - // E14.0 [8] (🫠..🫧) melting face..bubbles - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAE0, End = 0x1FAE7, Type = Extended_Pictographic }); - // E0.0 [8] (🫨..🫯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAE8, End = 0x1FAEF, Type = Extended_Pictographic }); - // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAF0, End = 0x1FAF6, Type = Extended_Pictographic }); - // E0.0 [9] (🫷..🫿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAF7, End = 0x1FAFF, Type = Extended_Pictographic }); - // E0.0[1022] (🰀..🿽) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FC00, End = 0x1FFFD, Type = Extended_Pictographic }); - // Cn [30] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0xE0002, End = 0xE001F, Type = Control }); - // Cf [96] TAG SPACE..CANCEL TAG - m_lst_code_range.Add(new RangeInfo() { Start = 0xE0020, End = 0xE007F, Type = Extend }); - // Cn [128] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0xE0080, End = 0xE00FF, Type = Control }); - // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - m_lst_code_range.Add(new RangeInfo() { Start = 0xE0100, End = 0xE01EF, Type = Extend }); - // Cn [3600] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0xE01F0, End = 0xE0FFF, Type = Control }); - } - - /// - /// Create cache from [m_lst_code_range] to int[]; - /// - /// The array length - public static int CreateArrayCache() { - if (m_arr_cache_break_type != null) { - return m_arr_cache_break_type.Length; - } - int[] arr = new int[m_lst_code_range[m_lst_code_range.Count - 1].End + 1]; - foreach (var v in m_lst_code_range) { - for (int i = v.Start; i <= v.End; i++) - arr[i] = v.Type; - } - m_arr_cache_break_type = arr; - return arr.Length; - } - /// - /// Create cache from [m_lst_code_range] to Dictionary(int,int) - /// - /// Dictionary.Count - public static int CreateDictionaryCache() { - if (m_dic_cache_break_type != null) { - return m_dic_cache_break_type.Count; - } - Dictionary dic = new Dictionary(); - foreach (var v in m_lst_code_range) { - for (int i = v.Start; i <= v.End; i++) - dic.Add(i, v.Type); - } - m_dic_cache_break_type = dic; - return dic.Count; - } - /// - /// Clear all cache - /// - public static void ClearCache() { - if (m_dic_cache_break_type != null) { - m_dic_cache_break_type.Clear(); - } - m_dic_cache_break_type = null; - m_arr_cache_break_type = null; - } - - protected override bool ShouldBreak(int nRightType, List lstHistoryBreakType) { - int nLeftType = lstHistoryBreakType[lstHistoryBreakType.Count - 1]; - // The urles from: https://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundary_Rules - // ÷ Boundary (allow break here) - // × No boundary(do not allow break here) - // GB* LeftChar_Property (÷ | ×) RightChar_Property - - // Break at the start and end of text, unless the text is empty. - // GB1 sot ÷ Any - // GB2 Any ÷ eot - // for GB1 and GB2 not need code - - // Do not break between a CR and LF. Otherwise, break before and after controls. - // GB3 CR × LF - // GB4 (Control | CR | LF) ÷ - // GB5 ÷ (Control | CR | LF) - if (nLeftType == CR && nRightType == LF) return false; - if (nLeftType == Control || nLeftType == CR || nLeftType == LF) return true; - if (nRightType == Control || nRightType == CR || nRightType == LF) return true; - - // Do not break Hangul syllable sequences. - // GB6 L × (L | V | LV | LVT) - // GB7 (LV | V) × (V | T) - // GB8 (LVT | T) × T - if (nLeftType == L && (nRightType == L || nRightType == V || nRightType == LV || nRightType == LVT)) return false; - if ((nLeftType == LV || nLeftType == V) && (nRightType == V || nRightType == T)) return false; - if ((nLeftType == LVT || nLeftType == T) && (nRightType == T)) return false; - - // Do not break before extending characters or ZWJ. - // GB9 × (Extend | ZWJ) - if (nRightType == Extend || nRightType == ZWJ) return false; - - // Do not break before SpacingMarks, or after Prepend characters. - // GB9a × SpacingMark - // GB9b Prepend × - if (nRightType == SpacingMark) return false; - if (nLeftType == Prepend) return false; - - // Do not break within emoji modifier sequences or emoji zwj sequences. - // GB11 \p{Extended_Pictographic} Extend* ZWJ × \p{Extended_Pictographic} - if (nRightType == Extended_Pictographic) { - if (lstHistoryBreakType.Count >= 2 && lstHistoryBreakType[lstHistoryBreakType.Count - 1] == ZWJ) { - for (int i = lstHistoryBreakType.Count - 2; i >= 0; i--) { - switch (lstHistoryBreakType[i]) { - case Extend: continue; // Extend* - case Extended_Pictographic: return false; // \p{Extended_Pictographic} - default: i = -1; break; - } - } - } - } - // Do not break within emoji flag sequences. That is, - // do not break between regional indicator (RI) symbols if there is an odd number of RI characters before the break point. - // GB12 sot (RI RI)* RI × RI - // GB13 [^RI] (RI RI)* RI × RI - //if (nLeftRICount % 2 == 1 && nRightType == Regional_Indicator) return false; - if (nRightType == Regional_Indicator) { - int nLeftRICount = 0; - for (int i = lstHistoryBreakType.Count - 1; i >= 0; i--) { - if (lstHistoryBreakType[i] != Regional_Indicator) { - break; - } - nLeftRICount++; - } - if (nLeftRICount % 2 == 1) return false; - } - return true; - } - - protected override int GetBreakProperty(int nCodePoint) { - switch (nCodePoint) { - case 0x006DD: return Prepend; // Cf ARABIC END OF AYAH - case 0x0070F: return Prepend; // Cf SYRIAC ABBREVIATION MARK - case 0x008E2: return Prepend; // Cf ARABIC DISPUTED END OF AYAH - case 0x00D4E: return Prepend; // Lo MALAYALAM LETTER DOT REPH - case 0x110BD: return Prepend; // Cf KAITHI NUMBER SIGN - case 0x110CD: return Prepend; // Cf KAITHI NUMBER SIGN ABOVE - case 0x1193F: return Prepend; // Lo DIVES AKURU PREFIXED NASAL SIGN - case 0x11941: return Prepend; // Lo DIVES AKURU INITIAL RA - case 0x11A3A: return Prepend; // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA - case 0x11D46: return Prepend; // Lo MASARAM GONDI REPHA - case 0x0000D: return CR; // Cc - case 0x0000A: return LF; // Cc - case 0x000AD: return Control; // Cf SOFT HYPHEN - case 0x0061C: return Control; // Cf ARABIC LETTER MARK - case 0x0180E: return Control; // Cf MONGOLIAN VOWEL SEPARATOR - case 0x0200B: return Control; // Cf ZERO WIDTH SPACE - case 0x02028: return Control; // Zl LINE SEPARATOR - case 0x02029: return Control; // Zp PARAGRAPH SEPARATOR - case 0x02065: return Control; // Cn - case 0x0FEFF: return Control; // Cf ZERO WIDTH NO-BREAK SPACE - case 0xE0000: return Control; // Cn - case 0xE0001: return Control; // Cf LANGUAGE TAG - case 0x005BF: return Extend; // Mn HEBREW POINT RAFE - case 0x005C7: return Extend; // Mn HEBREW POINT QAMATS QATAN - case 0x00670: return Extend; // Mn ARABIC LETTER SUPERSCRIPT ALEF - case 0x00711: return Extend; // Mn SYRIAC LETTER SUPERSCRIPT ALAPH - case 0x007FD: return Extend; // Mn NKO DANTAYALAN - case 0x0093A: return Extend; // Mn DEVANAGARI VOWEL SIGN OE - case 0x0093C: return Extend; // Mn DEVANAGARI SIGN NUKTA - case 0x0094D: return Extend; // Mn DEVANAGARI SIGN VIRAMA - case 0x00981: return Extend; // Mn BENGALI SIGN CANDRABINDU - case 0x009BC: return Extend; // Mn BENGALI SIGN NUKTA - case 0x009BE: return Extend; // Mc BENGALI VOWEL SIGN AA - case 0x009CD: return Extend; // Mn BENGALI SIGN VIRAMA - case 0x009D7: return Extend; // Mc BENGALI AU LENGTH MARK - case 0x009FE: return Extend; // Mn BENGALI SANDHI MARK - case 0x00A3C: return Extend; // Mn GURMUKHI SIGN NUKTA - case 0x00A51: return Extend; // Mn GURMUKHI SIGN UDAAT - case 0x00A75: return Extend; // Mn GURMUKHI SIGN YAKASH - case 0x00ABC: return Extend; // Mn GUJARATI SIGN NUKTA - case 0x00ACD: return Extend; // Mn GUJARATI SIGN VIRAMA - case 0x00B01: return Extend; // Mn ORIYA SIGN CANDRABINDU - case 0x00B3C: return Extend; // Mn ORIYA SIGN NUKTA - case 0x00B3E: return Extend; // Mc ORIYA VOWEL SIGN AA - case 0x00B3F: return Extend; // Mn ORIYA VOWEL SIGN I - case 0x00B4D: return Extend; // Mn ORIYA SIGN VIRAMA - case 0x00B57: return Extend; // Mc ORIYA AU LENGTH MARK - case 0x00B82: return Extend; // Mn TAMIL SIGN ANUSVARA - case 0x00BBE: return Extend; // Mc TAMIL VOWEL SIGN AA - case 0x00BC0: return Extend; // Mn TAMIL VOWEL SIGN II - case 0x00BCD: return Extend; // Mn TAMIL SIGN VIRAMA - case 0x00BD7: return Extend; // Mc TAMIL AU LENGTH MARK - case 0x00C00: return Extend; // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE - case 0x00C04: return Extend; // Mn TELUGU SIGN COMBINING ANUSVARA ABOVE - case 0x00C3C: return Extend; // Mn TELUGU SIGN NUKTA - case 0x00C81: return Extend; // Mn KANNADA SIGN CANDRABINDU - case 0x00CBC: return Extend; // Mn KANNADA SIGN NUKTA - case 0x00CBF: return Extend; // Mn KANNADA VOWEL SIGN I - case 0x00CC2: return Extend; // Mc KANNADA VOWEL SIGN UU - case 0x00CC6: return Extend; // Mn KANNADA VOWEL SIGN E - case 0x00D3E: return Extend; // Mc MALAYALAM VOWEL SIGN AA - case 0x00D4D: return Extend; // Mn MALAYALAM SIGN VIRAMA - case 0x00D57: return Extend; // Mc MALAYALAM AU LENGTH MARK - case 0x00D81: return Extend; // Mn SINHALA SIGN CANDRABINDU - case 0x00DCA: return Extend; // Mn SINHALA SIGN AL-LAKUNA - case 0x00DCF: return Extend; // Mc SINHALA VOWEL SIGN AELA-PILLA - case 0x00DD6: return Extend; // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA - case 0x00DDF: return Extend; // Mc SINHALA VOWEL SIGN GAYANUKITTA - case 0x00E31: return Extend; // Mn THAI CHARACTER MAI HAN-AKAT - case 0x00EB1: return Extend; // Mn LAO VOWEL SIGN MAI KAN - case 0x00F35: return Extend; // Mn TIBETAN MARK NGAS BZUNG NYI ZLA - case 0x00F37: return Extend; // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS - case 0x00F39: return Extend; // Mn TIBETAN MARK TSA -PHRU - case 0x00FC6: return Extend; // Mn TIBETAN SYMBOL PADMA GDAN - case 0x01082: return Extend; // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA - case 0x0108D: return Extend; // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE - case 0x0109D: return Extend; // Mn MYANMAR VOWEL SIGN AITON AI - case 0x017C6: return Extend; // Mn KHMER SIGN NIKAHIT - case 0x017DD: return Extend; // Mn KHMER SIGN ATTHACAN - case 0x0180F: return Extend; // Mn MONGOLIAN FREE VARIATION SELECTOR FOUR - case 0x018A9: return Extend; // Mn MONGOLIAN LETTER ALI GALI DAGALGA - case 0x01932: return Extend; // Mn LIMBU SMALL LETTER ANUSVARA - case 0x01A1B: return Extend; // Mn BUGINESE VOWEL SIGN AE - case 0x01A56: return Extend; // Mn TAI THAM CONSONANT SIGN MEDIAL LA - case 0x01A60: return Extend; // Mn TAI THAM SIGN SAKOT - case 0x01A62: return Extend; // Mn TAI THAM VOWEL SIGN MAI SAT - case 0x01A7F: return Extend; // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT - case 0x01ABE: return Extend; // Me COMBINING PARENTHESES OVERLAY - case 0x01B34: return Extend; // Mn BALINESE SIGN REREKAN - case 0x01B35: return Extend; // Mc BALINESE VOWEL SIGN TEDUNG - case 0x01B3C: return Extend; // Mn BALINESE VOWEL SIGN LA LENGA - case 0x01B42: return Extend; // Mn BALINESE VOWEL SIGN PEPET - case 0x01BE6: return Extend; // Mn BATAK SIGN TOMPI - case 0x01BED: return Extend; // Mn BATAK VOWEL SIGN KARO O - case 0x01CED: return Extend; // Mn VEDIC SIGN TIRYAK - case 0x01CF4: return Extend; // Mn VEDIC TONE CANDRA ABOVE - case 0x0200C: return Extend; // Cf ZERO WIDTH NON-JOINER - case 0x020E1: return Extend; // Mn COMBINING LEFT RIGHT ARROW ABOVE - case 0x02D7F: return Extend; // Mn TIFINAGH CONSONANT JOINER - case 0x0A66F: return Extend; // Mn COMBINING CYRILLIC VZMET - case 0x0A802: return Extend; // Mn SYLOTI NAGRI SIGN DVISVARA - case 0x0A806: return Extend; // Mn SYLOTI NAGRI SIGN HASANTA - case 0x0A80B: return Extend; // Mn SYLOTI NAGRI SIGN ANUSVARA - case 0x0A82C: return Extend; // Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA - case 0x0A8FF: return Extend; // Mn DEVANAGARI VOWEL SIGN AY - case 0x0A9B3: return Extend; // Mn JAVANESE SIGN CECAK TELU - case 0x0A9E5: return Extend; // Mn MYANMAR SIGN SHAN SAW - case 0x0AA43: return Extend; // Mn CHAM CONSONANT SIGN FINAL NG - case 0x0AA4C: return Extend; // Mn CHAM CONSONANT SIGN FINAL M - case 0x0AA7C: return Extend; // Mn MYANMAR SIGN TAI LAING TONE-2 - case 0x0AAB0: return Extend; // Mn TAI VIET MAI KANG - case 0x0AAC1: return Extend; // Mn TAI VIET TONE MAI THO - case 0x0AAF6: return Extend; // Mn MEETEI MAYEK VIRAMA - case 0x0ABE5: return Extend; // Mn MEETEI MAYEK VOWEL SIGN ANAP - case 0x0ABE8: return Extend; // Mn MEETEI MAYEK VOWEL SIGN UNAP - case 0x0ABED: return Extend; // Mn MEETEI MAYEK APUN IYEK - case 0x0FB1E: return Extend; // Mn HEBREW POINT JUDEO-SPANISH VARIKA - case 0x101FD: return Extend; // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE - case 0x102E0: return Extend; // Mn COPTIC EPACT THOUSANDS MARK - case 0x10A3F: return Extend; // Mn KHAROSHTHI VIRAMA - case 0x11001: return Extend; // Mn BRAHMI SIGN ANUSVARA - case 0x11070: return Extend; // Mn BRAHMI SIGN OLD TAMIL VIRAMA - case 0x110C2: return Extend; // Mn KAITHI VOWEL SIGN VOCALIC R - case 0x11173: return Extend; // Mn MAHAJANI SIGN NUKTA - case 0x111CF: return Extend; // Mn SHARADA SIGN INVERTED CANDRABINDU - case 0x11234: return Extend; // Mn KHOJKI SIGN ANUSVARA - case 0x1123E: return Extend; // Mn KHOJKI SIGN SUKUN - case 0x112DF: return Extend; // Mn KHUDAWADI SIGN ANUSVARA - case 0x1133E: return Extend; // Mc GRANTHA VOWEL SIGN AA - case 0x11340: return Extend; // Mn GRANTHA VOWEL SIGN II - case 0x11357: return Extend; // Mc GRANTHA AU LENGTH MARK - case 0x11446: return Extend; // Mn NEWA SIGN NUKTA - case 0x1145E: return Extend; // Mn NEWA SANDHI MARK - case 0x114B0: return Extend; // Mc TIRHUTA VOWEL SIGN AA - case 0x114BA: return Extend; // Mn TIRHUTA VOWEL SIGN SHORT E - case 0x114BD: return Extend; // Mc TIRHUTA VOWEL SIGN SHORT O - case 0x115AF: return Extend; // Mc SIDDHAM VOWEL SIGN AA - case 0x1163D: return Extend; // Mn MODI SIGN ANUSVARA - case 0x116AB: return Extend; // Mn TAKRI SIGN ANUSVARA - case 0x116AD: return Extend; // Mn TAKRI VOWEL SIGN AA - case 0x116B7: return Extend; // Mn TAKRI SIGN NUKTA - case 0x11930: return Extend; // Mc DIVES AKURU VOWEL SIGN AA - case 0x1193E: return Extend; // Mn DIVES AKURU VIRAMA - case 0x11943: return Extend; // Mn DIVES AKURU SIGN NUKTA - case 0x119E0: return Extend; // Mn NANDINAGARI SIGN VIRAMA - case 0x11A47: return Extend; // Mn ZANABAZAR SQUARE SUBJOINER - case 0x11C3F: return Extend; // Mn BHAIKSUKI SIGN VIRAMA - case 0x11D3A: return Extend; // Mn MASARAM GONDI VOWEL SIGN E - case 0x11D47: return Extend; // Mn MASARAM GONDI RA-KARA - case 0x11D95: return Extend; // Mn GUNJALA GONDI SIGN ANUSVARA - case 0x11D97: return Extend; // Mn GUNJALA GONDI VIRAMA - case 0x16F4F: return Extend; // Mn MIAO SIGN CONSONANT MODIFIER BAR - case 0x16FE4: return Extend; // Mn KHITAN SMALL SCRIPT FILLER - case 0x1D165: return Extend; // Mc MUSICAL SYMBOL COMBINING STEM - case 0x1DA75: return Extend; // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS - case 0x1DA84: return Extend; // Mn SIGNWRITING LOCATION HEAD NECK - case 0x1E2AE: return Extend; // Mn TOTO SIGN RISING TONE - case 0x00903: return SpacingMark; // Mc DEVANAGARI SIGN VISARGA - case 0x0093B: return SpacingMark; // Mc DEVANAGARI VOWEL SIGN OOE - case 0x00A03: return SpacingMark; // Mc GURMUKHI SIGN VISARGA - case 0x00A83: return SpacingMark; // Mc GUJARATI SIGN VISARGA - case 0x00AC9: return SpacingMark; // Mc GUJARATI VOWEL SIGN CANDRA O - case 0x00B40: return SpacingMark; // Mc ORIYA VOWEL SIGN II - case 0x00BBF: return SpacingMark; // Mc TAMIL VOWEL SIGN I - case 0x00CBE: return SpacingMark; // Mc KANNADA VOWEL SIGN AA - case 0x00E33: return SpacingMark; // Lo THAI CHARACTER SARA AM - case 0x00EB3: return SpacingMark; // Lo LAO VOWEL SIGN AM - case 0x00F7F: return SpacingMark; // Mc TIBETAN SIGN RNAM BCAD - case 0x01031: return SpacingMark; // Mc MYANMAR VOWEL SIGN E - case 0x01084: return SpacingMark; // Mc MYANMAR VOWEL SIGN SHAN E - case 0x01715: return SpacingMark; // Mc TAGALOG SIGN PAMUDPOD - case 0x01734: return SpacingMark; // Mc HANUNOO SIGN PAMUDPOD - case 0x017B6: return SpacingMark; // Mc KHMER VOWEL SIGN AA - case 0x01A55: return SpacingMark; // Mc TAI THAM CONSONANT SIGN MEDIAL RA - case 0x01A57: return SpacingMark; // Mc TAI THAM CONSONANT SIGN LA TANG LAI - case 0x01B04: return SpacingMark; // Mc BALINESE SIGN BISAH - case 0x01B3B: return SpacingMark; // Mc BALINESE VOWEL SIGN RA REPA TEDUNG - case 0x01B82: return SpacingMark; // Mc SUNDANESE SIGN PANGWISAD - case 0x01BA1: return SpacingMark; // Mc SUNDANESE CONSONANT SIGN PAMINGKAL - case 0x01BAA: return SpacingMark; // Mc SUNDANESE SIGN PAMAAEH - case 0x01BE7: return SpacingMark; // Mc BATAK VOWEL SIGN E - case 0x01BEE: return SpacingMark; // Mc BATAK VOWEL SIGN U - case 0x01CE1: return SpacingMark; // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA - case 0x01CF7: return SpacingMark; // Mc VEDIC SIGN ATIKRAMA - case 0x0A827: return SpacingMark; // Mc SYLOTI NAGRI VOWEL SIGN OO - case 0x0A983: return SpacingMark; // Mc JAVANESE SIGN WIGNYAN - case 0x0AA4D: return SpacingMark; // Mc CHAM CONSONANT SIGN FINAL H - case 0x0AAEB: return SpacingMark; // Mc MEETEI MAYEK VOWEL SIGN II - case 0x0AAF5: return SpacingMark; // Mc MEETEI MAYEK VOWEL SIGN VISARGA - case 0x0ABEC: return SpacingMark; // Mc MEETEI MAYEK LUM IYEK - case 0x11000: return SpacingMark; // Mc BRAHMI SIGN CANDRABINDU - case 0x11002: return SpacingMark; // Mc BRAHMI SIGN VISARGA - case 0x11082: return SpacingMark; // Mc KAITHI SIGN VISARGA - case 0x1112C: return SpacingMark; // Mc CHAKMA VOWEL SIGN E - case 0x11182: return SpacingMark; // Mc SHARADA SIGN VISARGA - case 0x111CE: return SpacingMark; // Mc SHARADA VOWEL SIGN PRISHTHAMATRA E - case 0x11235: return SpacingMark; // Mc KHOJKI SIGN VIRAMA - case 0x1133F: return SpacingMark; // Mc GRANTHA VOWEL SIGN I - case 0x11445: return SpacingMark; // Mc NEWA SIGN VISARGA - case 0x114B9: return SpacingMark; // Mc TIRHUTA VOWEL SIGN E - case 0x114BE: return SpacingMark; // Mc TIRHUTA VOWEL SIGN AU - case 0x114C1: return SpacingMark; // Mc TIRHUTA SIGN VISARGA - case 0x115BE: return SpacingMark; // Mc SIDDHAM SIGN VISARGA - case 0x1163E: return SpacingMark; // Mc MODI SIGN VISARGA - case 0x116AC: return SpacingMark; // Mc TAKRI SIGN VISARGA - case 0x116B6: return SpacingMark; // Mc TAKRI SIGN VIRAMA - case 0x11726: return SpacingMark; // Mc AHOM VOWEL SIGN E - case 0x11838: return SpacingMark; // Mc DOGRA SIGN VISARGA - case 0x1193D: return SpacingMark; // Mc DIVES AKURU SIGN HALANTA - case 0x11940: return SpacingMark; // Mc DIVES AKURU MEDIAL YA - case 0x11942: return SpacingMark; // Mc DIVES AKURU MEDIAL RA - case 0x119E4: return SpacingMark; // Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E - case 0x11A39: return SpacingMark; // Mc ZANABAZAR SQUARE SIGN VISARGA - case 0x11A97: return SpacingMark; // Mc SOYOMBO SIGN VISARGA - case 0x11C2F: return SpacingMark; // Mc BHAIKSUKI VOWEL SIGN AA - case 0x11C3E: return SpacingMark; // Mc BHAIKSUKI SIGN VISARGA - case 0x11CA9: return SpacingMark; // Mc MARCHEN SUBJOINED LETTER YA - case 0x11CB1: return SpacingMark; // Mc MARCHEN VOWEL SIGN I - case 0x11CB4: return SpacingMark; // Mc MARCHEN VOWEL SIGN O - case 0x11D96: return SpacingMark; // Mc GUNJALA GONDI SIGN VISARGA - case 0x1D166: return SpacingMark; // Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM - case 0x1D16D: return SpacingMark; // Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT - case 0x0AC00: return LV; // Lo HANGUL SYLLABLE GA - case 0x0AC1C: return LV; // Lo HANGUL SYLLABLE GAE - case 0x0AC38: return LV; // Lo HANGUL SYLLABLE GYA - case 0x0AC54: return LV; // Lo HANGUL SYLLABLE GYAE - case 0x0AC70: return LV; // Lo HANGUL SYLLABLE GEO - case 0x0AC8C: return LV; // Lo HANGUL SYLLABLE GE - case 0x0ACA8: return LV; // Lo HANGUL SYLLABLE GYEO - case 0x0ACC4: return LV; // Lo HANGUL SYLLABLE GYE - case 0x0ACE0: return LV; // Lo HANGUL SYLLABLE GO - case 0x0ACFC: return LV; // Lo HANGUL SYLLABLE GWA - case 0x0AD18: return LV; // Lo HANGUL SYLLABLE GWAE - case 0x0AD34: return LV; // Lo HANGUL SYLLABLE GOE - case 0x0AD50: return LV; // Lo HANGUL SYLLABLE GYO - case 0x0AD6C: return LV; // Lo HANGUL SYLLABLE GU - case 0x0AD88: return LV; // Lo HANGUL SYLLABLE GWEO - case 0x0ADA4: return LV; // Lo HANGUL SYLLABLE GWE - case 0x0ADC0: return LV; // Lo HANGUL SYLLABLE GWI - case 0x0ADDC: return LV; // Lo HANGUL SYLLABLE GYU - case 0x0ADF8: return LV; // Lo HANGUL SYLLABLE GEU - case 0x0AE14: return LV; // Lo HANGUL SYLLABLE GYI - case 0x0AE30: return LV; // Lo HANGUL SYLLABLE GI - case 0x0AE4C: return LV; // Lo HANGUL SYLLABLE GGA - case 0x0AE68: return LV; // Lo HANGUL SYLLABLE GGAE - case 0x0AE84: return LV; // Lo HANGUL SYLLABLE GGYA - case 0x0AEA0: return LV; // Lo HANGUL SYLLABLE GGYAE - case 0x0AEBC: return LV; // Lo HANGUL SYLLABLE GGEO - case 0x0AED8: return LV; // Lo HANGUL SYLLABLE GGE - case 0x0AEF4: return LV; // Lo HANGUL SYLLABLE GGYEO - case 0x0AF10: return LV; // Lo HANGUL SYLLABLE GGYE - case 0x0AF2C: return LV; // Lo HANGUL SYLLABLE GGO - case 0x0AF48: return LV; // Lo HANGUL SYLLABLE GGWA - case 0x0AF64: return LV; // Lo HANGUL SYLLABLE GGWAE - case 0x0AF80: return LV; // Lo HANGUL SYLLABLE GGOE - case 0x0AF9C: return LV; // Lo HANGUL SYLLABLE GGYO - case 0x0AFB8: return LV; // Lo HANGUL SYLLABLE GGU - case 0x0AFD4: return LV; // Lo HANGUL SYLLABLE GGWEO - case 0x0AFF0: return LV; // Lo HANGUL SYLLABLE GGWE - case 0x0B00C: return LV; // Lo HANGUL SYLLABLE GGWI - case 0x0B028: return LV; // Lo HANGUL SYLLABLE GGYU - case 0x0B044: return LV; // Lo HANGUL SYLLABLE GGEU - case 0x0B060: return LV; // Lo HANGUL SYLLABLE GGYI - case 0x0B07C: return LV; // Lo HANGUL SYLLABLE GGI - case 0x0B098: return LV; // Lo HANGUL SYLLABLE NA - case 0x0B0B4: return LV; // Lo HANGUL SYLLABLE NAE - case 0x0B0D0: return LV; // Lo HANGUL SYLLABLE NYA - case 0x0B0EC: return LV; // Lo HANGUL SYLLABLE NYAE - case 0x0B108: return LV; // Lo HANGUL SYLLABLE NEO - case 0x0B124: return LV; // Lo HANGUL SYLLABLE NE - case 0x0B140: return LV; // Lo HANGUL SYLLABLE NYEO - case 0x0B15C: return LV; // Lo HANGUL SYLLABLE NYE - case 0x0B178: return LV; // Lo HANGUL SYLLABLE NO - case 0x0B194: return LV; // Lo HANGUL SYLLABLE NWA - case 0x0B1B0: return LV; // Lo HANGUL SYLLABLE NWAE - case 0x0B1CC: return LV; // Lo HANGUL SYLLABLE NOE - case 0x0B1E8: return LV; // Lo HANGUL SYLLABLE NYO - case 0x0B204: return LV; // Lo HANGUL SYLLABLE NU - case 0x0B220: return LV; // Lo HANGUL SYLLABLE NWEO - case 0x0B23C: return LV; // Lo HANGUL SYLLABLE NWE - case 0x0B258: return LV; // Lo HANGUL SYLLABLE NWI - case 0x0B274: return LV; // Lo HANGUL SYLLABLE NYU - case 0x0B290: return LV; // Lo HANGUL SYLLABLE NEU - case 0x0B2AC: return LV; // Lo HANGUL SYLLABLE NYI - case 0x0B2C8: return LV; // Lo HANGUL SYLLABLE NI - case 0x0B2E4: return LV; // Lo HANGUL SYLLABLE DA - case 0x0B300: return LV; // Lo HANGUL SYLLABLE DAE - case 0x0B31C: return LV; // Lo HANGUL SYLLABLE DYA - case 0x0B338: return LV; // Lo HANGUL SYLLABLE DYAE - case 0x0B354: return LV; // Lo HANGUL SYLLABLE DEO - case 0x0B370: return LV; // Lo HANGUL SYLLABLE DE - case 0x0B38C: return LV; // Lo HANGUL SYLLABLE DYEO - case 0x0B3A8: return LV; // Lo HANGUL SYLLABLE DYE - case 0x0B3C4: return LV; // Lo HANGUL SYLLABLE DO - case 0x0B3E0: return LV; // Lo HANGUL SYLLABLE DWA - case 0x0B3FC: return LV; // Lo HANGUL SYLLABLE DWAE - case 0x0B418: return LV; // Lo HANGUL SYLLABLE DOE - case 0x0B434: return LV; // Lo HANGUL SYLLABLE DYO - case 0x0B450: return LV; // Lo HANGUL SYLLABLE DU - case 0x0B46C: return LV; // Lo HANGUL SYLLABLE DWEO - case 0x0B488: return LV; // Lo HANGUL SYLLABLE DWE - case 0x0B4A4: return LV; // Lo HANGUL SYLLABLE DWI - case 0x0B4C0: return LV; // Lo HANGUL SYLLABLE DYU - case 0x0B4DC: return LV; // Lo HANGUL SYLLABLE DEU - case 0x0B4F8: return LV; // Lo HANGUL SYLLABLE DYI - case 0x0B514: return LV; // Lo HANGUL SYLLABLE DI - case 0x0B530: return LV; // Lo HANGUL SYLLABLE DDA - case 0x0B54C: return LV; // Lo HANGUL SYLLABLE DDAE - case 0x0B568: return LV; // Lo HANGUL SYLLABLE DDYA - case 0x0B584: return LV; // Lo HANGUL SYLLABLE DDYAE - case 0x0B5A0: return LV; // Lo HANGUL SYLLABLE DDEO - case 0x0B5BC: return LV; // Lo HANGUL SYLLABLE DDE - case 0x0B5D8: return LV; // Lo HANGUL SYLLABLE DDYEO - case 0x0B5F4: return LV; // Lo HANGUL SYLLABLE DDYE - case 0x0B610: return LV; // Lo HANGUL SYLLABLE DDO - case 0x0B62C: return LV; // Lo HANGUL SYLLABLE DDWA - case 0x0B648: return LV; // Lo HANGUL SYLLABLE DDWAE - case 0x0B664: return LV; // Lo HANGUL SYLLABLE DDOE - case 0x0B680: return LV; // Lo HANGUL SYLLABLE DDYO - case 0x0B69C: return LV; // Lo HANGUL SYLLABLE DDU - case 0x0B6B8: return LV; // Lo HANGUL SYLLABLE DDWEO - case 0x0B6D4: return LV; // Lo HANGUL SYLLABLE DDWE - case 0x0B6F0: return LV; // Lo HANGUL SYLLABLE DDWI - case 0x0B70C: return LV; // Lo HANGUL SYLLABLE DDYU - case 0x0B728: return LV; // Lo HANGUL SYLLABLE DDEU - case 0x0B744: return LV; // Lo HANGUL SYLLABLE DDYI - case 0x0B760: return LV; // Lo HANGUL SYLLABLE DDI - case 0x0B77C: return LV; // Lo HANGUL SYLLABLE RA - case 0x0B798: return LV; // Lo HANGUL SYLLABLE RAE - case 0x0B7B4: return LV; // Lo HANGUL SYLLABLE RYA - case 0x0B7D0: return LV; // Lo HANGUL SYLLABLE RYAE - case 0x0B7EC: return LV; // Lo HANGUL SYLLABLE REO - case 0x0B808: return LV; // Lo HANGUL SYLLABLE RE - case 0x0B824: return LV; // Lo HANGUL SYLLABLE RYEO - case 0x0B840: return LV; // Lo HANGUL SYLLABLE RYE - case 0x0B85C: return LV; // Lo HANGUL SYLLABLE RO - case 0x0B878: return LV; // Lo HANGUL SYLLABLE RWA - case 0x0B894: return LV; // Lo HANGUL SYLLABLE RWAE - case 0x0B8B0: return LV; // Lo HANGUL SYLLABLE ROE - case 0x0B8CC: return LV; // Lo HANGUL SYLLABLE RYO - case 0x0B8E8: return LV; // Lo HANGUL SYLLABLE RU - case 0x0B904: return LV; // Lo HANGUL SYLLABLE RWEO - case 0x0B920: return LV; // Lo HANGUL SYLLABLE RWE - case 0x0B93C: return LV; // Lo HANGUL SYLLABLE RWI - case 0x0B958: return LV; // Lo HANGUL SYLLABLE RYU - case 0x0B974: return LV; // Lo HANGUL SYLLABLE REU - case 0x0B990: return LV; // Lo HANGUL SYLLABLE RYI - case 0x0B9AC: return LV; // Lo HANGUL SYLLABLE RI - case 0x0B9C8: return LV; // Lo HANGUL SYLLABLE MA - case 0x0B9E4: return LV; // Lo HANGUL SYLLABLE MAE - case 0x0BA00: return LV; // Lo HANGUL SYLLABLE MYA - case 0x0BA1C: return LV; // Lo HANGUL SYLLABLE MYAE - case 0x0BA38: return LV; // Lo HANGUL SYLLABLE MEO - case 0x0BA54: return LV; // Lo HANGUL SYLLABLE ME - case 0x0BA70: return LV; // Lo HANGUL SYLLABLE MYEO - case 0x0BA8C: return LV; // Lo HANGUL SYLLABLE MYE - case 0x0BAA8: return LV; // Lo HANGUL SYLLABLE MO - case 0x0BAC4: return LV; // Lo HANGUL SYLLABLE MWA - case 0x0BAE0: return LV; // Lo HANGUL SYLLABLE MWAE - case 0x0BAFC: return LV; // Lo HANGUL SYLLABLE MOE - case 0x0BB18: return LV; // Lo HANGUL SYLLABLE MYO - case 0x0BB34: return LV; // Lo HANGUL SYLLABLE MU - case 0x0BB50: return LV; // Lo HANGUL SYLLABLE MWEO - case 0x0BB6C: return LV; // Lo HANGUL SYLLABLE MWE - case 0x0BB88: return LV; // Lo HANGUL SYLLABLE MWI - case 0x0BBA4: return LV; // Lo HANGUL SYLLABLE MYU - case 0x0BBC0: return LV; // Lo HANGUL SYLLABLE MEU - case 0x0BBDC: return LV; // Lo HANGUL SYLLABLE MYI - case 0x0BBF8: return LV; // Lo HANGUL SYLLABLE MI - case 0x0BC14: return LV; // Lo HANGUL SYLLABLE BA - case 0x0BC30: return LV; // Lo HANGUL SYLLABLE BAE - case 0x0BC4C: return LV; // Lo HANGUL SYLLABLE BYA - case 0x0BC68: return LV; // Lo HANGUL SYLLABLE BYAE - case 0x0BC84: return LV; // Lo HANGUL SYLLABLE BEO - case 0x0BCA0: return LV; // Lo HANGUL SYLLABLE BE - case 0x0BCBC: return LV; // Lo HANGUL SYLLABLE BYEO - case 0x0BCD8: return LV; // Lo HANGUL SYLLABLE BYE - case 0x0BCF4: return LV; // Lo HANGUL SYLLABLE BO - case 0x0BD10: return LV; // Lo HANGUL SYLLABLE BWA - case 0x0BD2C: return LV; // Lo HANGUL SYLLABLE BWAE - case 0x0BD48: return LV; // Lo HANGUL SYLLABLE BOE - case 0x0BD64: return LV; // Lo HANGUL SYLLABLE BYO - case 0x0BD80: return LV; // Lo HANGUL SYLLABLE BU - case 0x0BD9C: return LV; // Lo HANGUL SYLLABLE BWEO - case 0x0BDB8: return LV; // Lo HANGUL SYLLABLE BWE - case 0x0BDD4: return LV; // Lo HANGUL SYLLABLE BWI - case 0x0BDF0: return LV; // Lo HANGUL SYLLABLE BYU - case 0x0BE0C: return LV; // Lo HANGUL SYLLABLE BEU - case 0x0BE28: return LV; // Lo HANGUL SYLLABLE BYI - case 0x0BE44: return LV; // Lo HANGUL SYLLABLE BI - case 0x0BE60: return LV; // Lo HANGUL SYLLABLE BBA - case 0x0BE7C: return LV; // Lo HANGUL SYLLABLE BBAE - case 0x0BE98: return LV; // Lo HANGUL SYLLABLE BBYA - case 0x0BEB4: return LV; // Lo HANGUL SYLLABLE BBYAE - case 0x0BED0: return LV; // Lo HANGUL SYLLABLE BBEO - case 0x0BEEC: return LV; // Lo HANGUL SYLLABLE BBE - case 0x0BF08: return LV; // Lo HANGUL SYLLABLE BBYEO - case 0x0BF24: return LV; // Lo HANGUL SYLLABLE BBYE - case 0x0BF40: return LV; // Lo HANGUL SYLLABLE BBO - case 0x0BF5C: return LV; // Lo HANGUL SYLLABLE BBWA - case 0x0BF78: return LV; // Lo HANGUL SYLLABLE BBWAE - case 0x0BF94: return LV; // Lo HANGUL SYLLABLE BBOE - case 0x0BFB0: return LV; // Lo HANGUL SYLLABLE BBYO - case 0x0BFCC: return LV; // Lo HANGUL SYLLABLE BBU - case 0x0BFE8: return LV; // Lo HANGUL SYLLABLE BBWEO - case 0x0C004: return LV; // Lo HANGUL SYLLABLE BBWE - case 0x0C020: return LV; // Lo HANGUL SYLLABLE BBWI - case 0x0C03C: return LV; // Lo HANGUL SYLLABLE BBYU - case 0x0C058: return LV; // Lo HANGUL SYLLABLE BBEU - case 0x0C074: return LV; // Lo HANGUL SYLLABLE BBYI - case 0x0C090: return LV; // Lo HANGUL SYLLABLE BBI - case 0x0C0AC: return LV; // Lo HANGUL SYLLABLE SA - case 0x0C0C8: return LV; // Lo HANGUL SYLLABLE SAE - case 0x0C0E4: return LV; // Lo HANGUL SYLLABLE SYA - case 0x0C100: return LV; // Lo HANGUL SYLLABLE SYAE - case 0x0C11C: return LV; // Lo HANGUL SYLLABLE SEO - case 0x0C138: return LV; // Lo HANGUL SYLLABLE SE - case 0x0C154: return LV; // Lo HANGUL SYLLABLE SYEO - case 0x0C170: return LV; // Lo HANGUL SYLLABLE SYE - case 0x0C18C: return LV; // Lo HANGUL SYLLABLE SO - case 0x0C1A8: return LV; // Lo HANGUL SYLLABLE SWA - case 0x0C1C4: return LV; // Lo HANGUL SYLLABLE SWAE - case 0x0C1E0: return LV; // Lo HANGUL SYLLABLE SOE - case 0x0C1FC: return LV; // Lo HANGUL SYLLABLE SYO - case 0x0C218: return LV; // Lo HANGUL SYLLABLE SU - case 0x0C234: return LV; // Lo HANGUL SYLLABLE SWEO - case 0x0C250: return LV; // Lo HANGUL SYLLABLE SWE - case 0x0C26C: return LV; // Lo HANGUL SYLLABLE SWI - case 0x0C288: return LV; // Lo HANGUL SYLLABLE SYU - case 0x0C2A4: return LV; // Lo HANGUL SYLLABLE SEU - case 0x0C2C0: return LV; // Lo HANGUL SYLLABLE SYI - case 0x0C2DC: return LV; // Lo HANGUL SYLLABLE SI - case 0x0C2F8: return LV; // Lo HANGUL SYLLABLE SSA - case 0x0C314: return LV; // Lo HANGUL SYLLABLE SSAE - case 0x0C330: return LV; // Lo HANGUL SYLLABLE SSYA - case 0x0C34C: return LV; // Lo HANGUL SYLLABLE SSYAE - case 0x0C368: return LV; // Lo HANGUL SYLLABLE SSEO - case 0x0C384: return LV; // Lo HANGUL SYLLABLE SSE - case 0x0C3A0: return LV; // Lo HANGUL SYLLABLE SSYEO - case 0x0C3BC: return LV; // Lo HANGUL SYLLABLE SSYE - case 0x0C3D8: return LV; // Lo HANGUL SYLLABLE SSO - case 0x0C3F4: return LV; // Lo HANGUL SYLLABLE SSWA - case 0x0C410: return LV; // Lo HANGUL SYLLABLE SSWAE - case 0x0C42C: return LV; // Lo HANGUL SYLLABLE SSOE - case 0x0C448: return LV; // Lo HANGUL SYLLABLE SSYO - case 0x0C464: return LV; // Lo HANGUL SYLLABLE SSU - case 0x0C480: return LV; // Lo HANGUL SYLLABLE SSWEO - case 0x0C49C: return LV; // Lo HANGUL SYLLABLE SSWE - case 0x0C4B8: return LV; // Lo HANGUL SYLLABLE SSWI - case 0x0C4D4: return LV; // Lo HANGUL SYLLABLE SSYU - case 0x0C4F0: return LV; // Lo HANGUL SYLLABLE SSEU - case 0x0C50C: return LV; // Lo HANGUL SYLLABLE SSYI - case 0x0C528: return LV; // Lo HANGUL SYLLABLE SSI - case 0x0C544: return LV; // Lo HANGUL SYLLABLE A - case 0x0C560: return LV; // Lo HANGUL SYLLABLE AE - case 0x0C57C: return LV; // Lo HANGUL SYLLABLE YA - case 0x0C598: return LV; // Lo HANGUL SYLLABLE YAE - case 0x0C5B4: return LV; // Lo HANGUL SYLLABLE EO - case 0x0C5D0: return LV; // Lo HANGUL SYLLABLE E - case 0x0C5EC: return LV; // Lo HANGUL SYLLABLE YEO - case 0x0C608: return LV; // Lo HANGUL SYLLABLE YE - case 0x0C624: return LV; // Lo HANGUL SYLLABLE O - case 0x0C640: return LV; // Lo HANGUL SYLLABLE WA - case 0x0C65C: return LV; // Lo HANGUL SYLLABLE WAE - case 0x0C678: return LV; // Lo HANGUL SYLLABLE OE - case 0x0C694: return LV; // Lo HANGUL SYLLABLE YO - case 0x0C6B0: return LV; // Lo HANGUL SYLLABLE U - case 0x0C6CC: return LV; // Lo HANGUL SYLLABLE WEO - case 0x0C6E8: return LV; // Lo HANGUL SYLLABLE WE - case 0x0C704: return LV; // Lo HANGUL SYLLABLE WI - case 0x0C720: return LV; // Lo HANGUL SYLLABLE YU - case 0x0C73C: return LV; // Lo HANGUL SYLLABLE EU - case 0x0C758: return LV; // Lo HANGUL SYLLABLE YI - case 0x0C774: return LV; // Lo HANGUL SYLLABLE I - case 0x0C790: return LV; // Lo HANGUL SYLLABLE JA - case 0x0C7AC: return LV; // Lo HANGUL SYLLABLE JAE - case 0x0C7C8: return LV; // Lo HANGUL SYLLABLE JYA - case 0x0C7E4: return LV; // Lo HANGUL SYLLABLE JYAE - case 0x0C800: return LV; // Lo HANGUL SYLLABLE JEO - case 0x0C81C: return LV; // Lo HANGUL SYLLABLE JE - case 0x0C838: return LV; // Lo HANGUL SYLLABLE JYEO - case 0x0C854: return LV; // Lo HANGUL SYLLABLE JYE - case 0x0C870: return LV; // Lo HANGUL SYLLABLE JO - case 0x0C88C: return LV; // Lo HANGUL SYLLABLE JWA - case 0x0C8A8: return LV; // Lo HANGUL SYLLABLE JWAE - case 0x0C8C4: return LV; // Lo HANGUL SYLLABLE JOE - case 0x0C8E0: return LV; // Lo HANGUL SYLLABLE JYO - case 0x0C8FC: return LV; // Lo HANGUL SYLLABLE JU - case 0x0C918: return LV; // Lo HANGUL SYLLABLE JWEO - case 0x0C934: return LV; // Lo HANGUL SYLLABLE JWE - case 0x0C950: return LV; // Lo HANGUL SYLLABLE JWI - case 0x0C96C: return LV; // Lo HANGUL SYLLABLE JYU - case 0x0C988: return LV; // Lo HANGUL SYLLABLE JEU - case 0x0C9A4: return LV; // Lo HANGUL SYLLABLE JYI - case 0x0C9C0: return LV; // Lo HANGUL SYLLABLE JI - case 0x0C9DC: return LV; // Lo HANGUL SYLLABLE JJA - case 0x0C9F8: return LV; // Lo HANGUL SYLLABLE JJAE - case 0x0CA14: return LV; // Lo HANGUL SYLLABLE JJYA - case 0x0CA30: return LV; // Lo HANGUL SYLLABLE JJYAE - case 0x0CA4C: return LV; // Lo HANGUL SYLLABLE JJEO - case 0x0CA68: return LV; // Lo HANGUL SYLLABLE JJE - case 0x0CA84: return LV; // Lo HANGUL SYLLABLE JJYEO - case 0x0CAA0: return LV; // Lo HANGUL SYLLABLE JJYE - case 0x0CABC: return LV; // Lo HANGUL SYLLABLE JJO - case 0x0CAD8: return LV; // Lo HANGUL SYLLABLE JJWA - case 0x0CAF4: return LV; // Lo HANGUL SYLLABLE JJWAE - case 0x0CB10: return LV; // Lo HANGUL SYLLABLE JJOE - case 0x0CB2C: return LV; // Lo HANGUL SYLLABLE JJYO - case 0x0CB48: return LV; // Lo HANGUL SYLLABLE JJU - case 0x0CB64: return LV; // Lo HANGUL SYLLABLE JJWEO - case 0x0CB80: return LV; // Lo HANGUL SYLLABLE JJWE - case 0x0CB9C: return LV; // Lo HANGUL SYLLABLE JJWI - case 0x0CBB8: return LV; // Lo HANGUL SYLLABLE JJYU - case 0x0CBD4: return LV; // Lo HANGUL SYLLABLE JJEU - case 0x0CBF0: return LV; // Lo HANGUL SYLLABLE JJYI - case 0x0CC0C: return LV; // Lo HANGUL SYLLABLE JJI - case 0x0CC28: return LV; // Lo HANGUL SYLLABLE CA - case 0x0CC44: return LV; // Lo HANGUL SYLLABLE CAE - case 0x0CC60: return LV; // Lo HANGUL SYLLABLE CYA - case 0x0CC7C: return LV; // Lo HANGUL SYLLABLE CYAE - case 0x0CC98: return LV; // Lo HANGUL SYLLABLE CEO - case 0x0CCB4: return LV; // Lo HANGUL SYLLABLE CE - case 0x0CCD0: return LV; // Lo HANGUL SYLLABLE CYEO - case 0x0CCEC: return LV; // Lo HANGUL SYLLABLE CYE - case 0x0CD08: return LV; // Lo HANGUL SYLLABLE CO - case 0x0CD24: return LV; // Lo HANGUL SYLLABLE CWA - case 0x0CD40: return LV; // Lo HANGUL SYLLABLE CWAE - case 0x0CD5C: return LV; // Lo HANGUL SYLLABLE COE - case 0x0CD78: return LV; // Lo HANGUL SYLLABLE CYO - case 0x0CD94: return LV; // Lo HANGUL SYLLABLE CU - case 0x0CDB0: return LV; // Lo HANGUL SYLLABLE CWEO - case 0x0CDCC: return LV; // Lo HANGUL SYLLABLE CWE - case 0x0CDE8: return LV; // Lo HANGUL SYLLABLE CWI - case 0x0CE04: return LV; // Lo HANGUL SYLLABLE CYU - case 0x0CE20: return LV; // Lo HANGUL SYLLABLE CEU - case 0x0CE3C: return LV; // Lo HANGUL SYLLABLE CYI - case 0x0CE58: return LV; // Lo HANGUL SYLLABLE CI - case 0x0CE74: return LV; // Lo HANGUL SYLLABLE KA - case 0x0CE90: return LV; // Lo HANGUL SYLLABLE KAE - case 0x0CEAC: return LV; // Lo HANGUL SYLLABLE KYA - case 0x0CEC8: return LV; // Lo HANGUL SYLLABLE KYAE - case 0x0CEE4: return LV; // Lo HANGUL SYLLABLE KEO - case 0x0CF00: return LV; // Lo HANGUL SYLLABLE KE - case 0x0CF1C: return LV; // Lo HANGUL SYLLABLE KYEO - case 0x0CF38: return LV; // Lo HANGUL SYLLABLE KYE - case 0x0CF54: return LV; // Lo HANGUL SYLLABLE KO - case 0x0CF70: return LV; // Lo HANGUL SYLLABLE KWA - case 0x0CF8C: return LV; // Lo HANGUL SYLLABLE KWAE - case 0x0CFA8: return LV; // Lo HANGUL SYLLABLE KOE - case 0x0CFC4: return LV; // Lo HANGUL SYLLABLE KYO - case 0x0CFE0: return LV; // Lo HANGUL SYLLABLE KU - case 0x0CFFC: return LV; // Lo HANGUL SYLLABLE KWEO - case 0x0D018: return LV; // Lo HANGUL SYLLABLE KWE - case 0x0D034: return LV; // Lo HANGUL SYLLABLE KWI - case 0x0D050: return LV; // Lo HANGUL SYLLABLE KYU - case 0x0D06C: return LV; // Lo HANGUL SYLLABLE KEU - case 0x0D088: return LV; // Lo HANGUL SYLLABLE KYI - case 0x0D0A4: return LV; // Lo HANGUL SYLLABLE KI - case 0x0D0C0: return LV; // Lo HANGUL SYLLABLE TA - case 0x0D0DC: return LV; // Lo HANGUL SYLLABLE TAE - case 0x0D0F8: return LV; // Lo HANGUL SYLLABLE TYA - case 0x0D114: return LV; // Lo HANGUL SYLLABLE TYAE - case 0x0D130: return LV; // Lo HANGUL SYLLABLE TEO - case 0x0D14C: return LV; // Lo HANGUL SYLLABLE TE - case 0x0D168: return LV; // Lo HANGUL SYLLABLE TYEO - case 0x0D184: return LV; // Lo HANGUL SYLLABLE TYE - case 0x0D1A0: return LV; // Lo HANGUL SYLLABLE TO - case 0x0D1BC: return LV; // Lo HANGUL SYLLABLE TWA - case 0x0D1D8: return LV; // Lo HANGUL SYLLABLE TWAE - case 0x0D1F4: return LV; // Lo HANGUL SYLLABLE TOE - case 0x0D210: return LV; // Lo HANGUL SYLLABLE TYO - case 0x0D22C: return LV; // Lo HANGUL SYLLABLE TU - case 0x0D248: return LV; // Lo HANGUL SYLLABLE TWEO - case 0x0D264: return LV; // Lo HANGUL SYLLABLE TWE - case 0x0D280: return LV; // Lo HANGUL SYLLABLE TWI - case 0x0D29C: return LV; // Lo HANGUL SYLLABLE TYU - case 0x0D2B8: return LV; // Lo HANGUL SYLLABLE TEU - case 0x0D2D4: return LV; // Lo HANGUL SYLLABLE TYI - case 0x0D2F0: return LV; // Lo HANGUL SYLLABLE TI - case 0x0D30C: return LV; // Lo HANGUL SYLLABLE PA - case 0x0D328: return LV; // Lo HANGUL SYLLABLE PAE - case 0x0D344: return LV; // Lo HANGUL SYLLABLE PYA - case 0x0D360: return LV; // Lo HANGUL SYLLABLE PYAE - case 0x0D37C: return LV; // Lo HANGUL SYLLABLE PEO - case 0x0D398: return LV; // Lo HANGUL SYLLABLE PE - case 0x0D3B4: return LV; // Lo HANGUL SYLLABLE PYEO - case 0x0D3D0: return LV; // Lo HANGUL SYLLABLE PYE - case 0x0D3EC: return LV; // Lo HANGUL SYLLABLE PO - case 0x0D408: return LV; // Lo HANGUL SYLLABLE PWA - case 0x0D424: return LV; // Lo HANGUL SYLLABLE PWAE - case 0x0D440: return LV; // Lo HANGUL SYLLABLE POE - case 0x0D45C: return LV; // Lo HANGUL SYLLABLE PYO - case 0x0D478: return LV; // Lo HANGUL SYLLABLE PU - case 0x0D494: return LV; // Lo HANGUL SYLLABLE PWEO - case 0x0D4B0: return LV; // Lo HANGUL SYLLABLE PWE - case 0x0D4CC: return LV; // Lo HANGUL SYLLABLE PWI - case 0x0D4E8: return LV; // Lo HANGUL SYLLABLE PYU - case 0x0D504: return LV; // Lo HANGUL SYLLABLE PEU - case 0x0D520: return LV; // Lo HANGUL SYLLABLE PYI - case 0x0D53C: return LV; // Lo HANGUL SYLLABLE PI - case 0x0D558: return LV; // Lo HANGUL SYLLABLE HA - case 0x0D574: return LV; // Lo HANGUL SYLLABLE HAE - case 0x0D590: return LV; // Lo HANGUL SYLLABLE HYA - case 0x0D5AC: return LV; // Lo HANGUL SYLLABLE HYAE - case 0x0D5C8: return LV; // Lo HANGUL SYLLABLE HEO - case 0x0D5E4: return LV; // Lo HANGUL SYLLABLE HE - case 0x0D600: return LV; // Lo HANGUL SYLLABLE HYEO - case 0x0D61C: return LV; // Lo HANGUL SYLLABLE HYE - case 0x0D638: return LV; // Lo HANGUL SYLLABLE HO - case 0x0D654: return LV; // Lo HANGUL SYLLABLE HWA - case 0x0D670: return LV; // Lo HANGUL SYLLABLE HWAE - case 0x0D68C: return LV; // Lo HANGUL SYLLABLE HOE - case 0x0D6A8: return LV; // Lo HANGUL SYLLABLE HYO - case 0x0D6C4: return LV; // Lo HANGUL SYLLABLE HU - case 0x0D6E0: return LV; // Lo HANGUL SYLLABLE HWEO - case 0x0D6FC: return LV; // Lo HANGUL SYLLABLE HWE - case 0x0D718: return LV; // Lo HANGUL SYLLABLE HWI - case 0x0D734: return LV; // Lo HANGUL SYLLABLE HYU - case 0x0D750: return LV; // Lo HANGUL SYLLABLE HEU - case 0x0D76C: return LV; // Lo HANGUL SYLLABLE HYI - case 0x0D788: return LV; // Lo HANGUL SYLLABLE HI - case 0x0200D: return ZWJ; // Cf ZERO WIDTH JOINER - case 0x000A9: return Extended_Pictographic; // E0.6 [1] (©️) copyright - case 0x000AE: return Extended_Pictographic; // E0.6 [1] (®️) registered - case 0x0203C: return Extended_Pictographic; // E0.6 [1] (‼️) double exclamation mark - case 0x02049: return Extended_Pictographic; // E0.6 [1] (⁉️) exclamation question mark - case 0x02122: return Extended_Pictographic; // E0.6 [1] (™️) trade mark - case 0x02139: return Extended_Pictographic; // E0.6 [1] (ℹ️) information - case 0x02328: return Extended_Pictographic; // E1.0 [1] (⌨️) keyboard - case 0x02388: return Extended_Pictographic; // E0.0 [1] (⎈) HELM SYMBOL - case 0x023CF: return Extended_Pictographic; // E1.0 [1] (⏏️) eject button - case 0x023EF: return Extended_Pictographic; // E1.0 [1] (⏯️) play or pause button - case 0x023F0: return Extended_Pictographic; // E0.6 [1] (⏰) alarm clock - case 0x023F3: return Extended_Pictographic; // E0.6 [1] (⏳) hourglass not done - case 0x024C2: return Extended_Pictographic; // E0.6 [1] (Ⓜ️) circled M - case 0x025B6: return Extended_Pictographic; // E0.6 [1] (▶️) play button - case 0x025C0: return Extended_Pictographic; // E0.6 [1] (◀️) reverse button - case 0x02604: return Extended_Pictographic; // E1.0 [1] (☄️) comet - case 0x02605: return Extended_Pictographic; // E0.0 [1] (★) BLACK STAR - case 0x0260E: return Extended_Pictographic; // E0.6 [1] (☎️) telephone - case 0x02611: return Extended_Pictographic; // E0.6 [1] (☑️) check box with check - case 0x02612: return Extended_Pictographic; // E0.0 [1] (☒) BALLOT BOX WITH X - case 0x02618: return Extended_Pictographic; // E1.0 [1] (☘️) shamrock - case 0x0261D: return Extended_Pictographic; // E0.6 [1] (☝️) index pointing up - case 0x02620: return Extended_Pictographic; // E1.0 [1] (☠️) skull and crossbones - case 0x02621: return Extended_Pictographic; // E0.0 [1] (☡) CAUTION SIGN - case 0x02626: return Extended_Pictographic; // E1.0 [1] (☦️) orthodox cross - case 0x0262A: return Extended_Pictographic; // E0.7 [1] (☪️) star and crescent - case 0x0262E: return Extended_Pictographic; // E1.0 [1] (☮️) peace symbol - case 0x0262F: return Extended_Pictographic; // E0.7 [1] (☯️) yin yang - case 0x0263A: return Extended_Pictographic; // E0.6 [1] (☺️) smiling face - case 0x02640: return Extended_Pictographic; // E4.0 [1] (♀️) female sign - case 0x02641: return Extended_Pictographic; // E0.0 [1] (♁) EARTH - case 0x02642: return Extended_Pictographic; // E4.0 [1] (♂️) male sign - case 0x0265F: return Extended_Pictographic; // E11.0 [1] (♟️) chess pawn - case 0x02660: return Extended_Pictographic; // E0.6 [1] (♠️) spade suit - case 0x02663: return Extended_Pictographic; // E0.6 [1] (♣️) club suit - case 0x02664: return Extended_Pictographic; // E0.0 [1] (♤) WHITE SPADE SUIT - case 0x02667: return Extended_Pictographic; // E0.0 [1] (♧) WHITE CLUB SUIT - case 0x02668: return Extended_Pictographic; // E0.6 [1] (♨️) hot springs - case 0x0267B: return Extended_Pictographic; // E0.6 [1] (♻️) recycling symbol - case 0x0267E: return Extended_Pictographic; // E11.0 [1] (♾️) infinity - case 0x0267F: return Extended_Pictographic; // E0.6 [1] (♿) wheelchair symbol - case 0x02692: return Extended_Pictographic; // E1.0 [1] (⚒️) hammer and pick - case 0x02693: return Extended_Pictographic; // E0.6 [1] (⚓) anchor - case 0x02694: return Extended_Pictographic; // E1.0 [1] (⚔️) crossed swords - case 0x02695: return Extended_Pictographic; // E4.0 [1] (⚕️) medical symbol - case 0x02698: return Extended_Pictographic; // E0.0 [1] (⚘) FLOWER - case 0x02699: return Extended_Pictographic; // E1.0 [1] (⚙️) gear - case 0x0269A: return Extended_Pictographic; // E0.0 [1] (⚚) STAFF OF HERMES - case 0x026A7: return Extended_Pictographic; // E13.0 [1] (⚧️) transgender symbol - case 0x026C8: return Extended_Pictographic; // E0.7 [1] (⛈️) cloud with lightning and rain - case 0x026CE: return Extended_Pictographic; // E0.6 [1] (⛎) Ophiuchus - case 0x026CF: return Extended_Pictographic; // E0.7 [1] (⛏️) pick - case 0x026D0: return Extended_Pictographic; // E0.0 [1] (⛐) CAR SLIDING - case 0x026D1: return Extended_Pictographic; // E0.7 [1] (⛑️) rescue worker’s helmet - case 0x026D2: return Extended_Pictographic; // E0.0 [1] (⛒) CIRCLED CROSSING LANES - case 0x026D3: return Extended_Pictographic; // E0.7 [1] (⛓️) chains - case 0x026D4: return Extended_Pictographic; // E0.6 [1] (⛔) no entry - case 0x026E9: return Extended_Pictographic; // E0.7 [1] (⛩️) shinto shrine - case 0x026EA: return Extended_Pictographic; // E0.6 [1] (⛪) church - case 0x026F4: return Extended_Pictographic; // E0.7 [1] (⛴️) ferry - case 0x026F5: return Extended_Pictographic; // E0.6 [1] (⛵) sailboat - case 0x026F6: return Extended_Pictographic; // E0.0 [1] (⛶) SQUARE FOUR CORNERS - case 0x026FA: return Extended_Pictographic; // E0.6 [1] (⛺) tent - case 0x026FD: return Extended_Pictographic; // E0.6 [1] (⛽) fuel pump - case 0x02702: return Extended_Pictographic; // E0.6 [1] (✂️) scissors - case 0x02705: return Extended_Pictographic; // E0.6 [1] (✅) check mark button - case 0x0270D: return Extended_Pictographic; // E0.7 [1] (✍️) writing hand - case 0x0270E: return Extended_Pictographic; // E0.0 [1] (✎) LOWER RIGHT PENCIL - case 0x0270F: return Extended_Pictographic; // E0.6 [1] (✏️) pencil - case 0x02712: return Extended_Pictographic; // E0.6 [1] (✒️) black nib - case 0x02714: return Extended_Pictographic; // E0.6 [1] (✔️) check mark - case 0x02716: return Extended_Pictographic; // E0.6 [1] (✖️) multiply - case 0x0271D: return Extended_Pictographic; // E0.7 [1] (✝️) latin cross - case 0x02721: return Extended_Pictographic; // E0.7 [1] (✡️) star of David - case 0x02728: return Extended_Pictographic; // E0.6 [1] (✨) sparkles - case 0x02744: return Extended_Pictographic; // E0.6 [1] (❄️) snowflake - case 0x02747: return Extended_Pictographic; // E0.6 [1] (❇️) sparkle - case 0x0274C: return Extended_Pictographic; // E0.6 [1] (❌) cross mark - case 0x0274E: return Extended_Pictographic; // E0.6 [1] (❎) cross mark button - case 0x02757: return Extended_Pictographic; // E0.6 [1] (❗) red exclamation mark - case 0x02763: return Extended_Pictographic; // E1.0 [1] (❣️) heart exclamation - case 0x02764: return Extended_Pictographic; // E0.6 [1] (❤️) red heart - case 0x027A1: return Extended_Pictographic; // E0.6 [1] (➡️) right arrow - case 0x027B0: return Extended_Pictographic; // E0.6 [1] (➰) curly loop - case 0x027BF: return Extended_Pictographic; // E1.0 [1] (➿) double curly loop - case 0x02B50: return Extended_Pictographic; // E0.6 [1] (⭐) star - case 0x02B55: return Extended_Pictographic; // E0.6 [1] (⭕) hollow red circle - case 0x03030: return Extended_Pictographic; // E0.6 [1] (〰️) wavy dash - case 0x0303D: return Extended_Pictographic; // E0.6 [1] (〽️) part alternation mark - case 0x03297: return Extended_Pictographic; // E0.6 [1] (㊗️) Japanese “congratulations” button - case 0x03299: return Extended_Pictographic; // E0.6 [1] (㊙️) Japanese “secret” button - case 0x1F004: return Extended_Pictographic; // E0.6 [1] (🀄) mahjong red dragon - case 0x1F0CF: return Extended_Pictographic; // E0.6 [1] (🃏) joker - case 0x1F12F: return Extended_Pictographic; // E0.0 [1] (🄯) COPYLEFT SYMBOL - case 0x1F18E: return Extended_Pictographic; // E0.6 [1] (🆎) AB button (blood type) - case 0x1F21A: return Extended_Pictographic; // E0.6 [1] (🈚) Japanese “free of charge” button - case 0x1F22F: return Extended_Pictographic; // E0.6 [1] (🈯) Japanese “reserved” button - case 0x1F30F: return Extended_Pictographic; // E0.6 [1] (🌏) globe showing Asia-Australia - case 0x1F310: return Extended_Pictographic; // E1.0 [1] (🌐) globe with meridians - case 0x1F311: return Extended_Pictographic; // E0.6 [1] (🌑) new moon - case 0x1F312: return Extended_Pictographic; // E1.0 [1] (🌒) waxing crescent moon - case 0x1F319: return Extended_Pictographic; // E0.6 [1] (🌙) crescent moon - case 0x1F31A: return Extended_Pictographic; // E1.0 [1] (🌚) new moon face - case 0x1F31B: return Extended_Pictographic; // E0.6 [1] (🌛) first quarter moon face - case 0x1F31C: return Extended_Pictographic; // E0.7 [1] (🌜) last quarter moon face - case 0x1F321: return Extended_Pictographic; // E0.7 [1] (🌡️) thermometer - case 0x1F336: return Extended_Pictographic; // E0.7 [1] (🌶️) hot pepper - case 0x1F34B: return Extended_Pictographic; // E1.0 [1] (🍋) lemon - case 0x1F350: return Extended_Pictographic; // E1.0 [1] (🍐) pear - case 0x1F37C: return Extended_Pictographic; // E1.0 [1] (🍼) baby bottle - case 0x1F37D: return Extended_Pictographic; // E0.7 [1] (🍽️) fork and knife with plate - case 0x1F398: return Extended_Pictographic; // E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS - case 0x1F3C5: return Extended_Pictographic; // E1.0 [1] (🏅) sports medal - case 0x1F3C6: return Extended_Pictographic; // E0.6 [1] (🏆) trophy - case 0x1F3C7: return Extended_Pictographic; // E1.0 [1] (🏇) horse racing - case 0x1F3C8: return Extended_Pictographic; // E0.6 [1] (🏈) american football - case 0x1F3C9: return Extended_Pictographic; // E1.0 [1] (🏉) rugby football - case 0x1F3CA: return Extended_Pictographic; // E0.6 [1] (🏊) person swimming - case 0x1F3E4: return Extended_Pictographic; // E1.0 [1] (🏤) post office - case 0x1F3F3: return Extended_Pictographic; // E0.7 [1] (🏳️) white flag - case 0x1F3F4: return Extended_Pictographic; // E1.0 [1] (🏴) black flag - case 0x1F3F5: return Extended_Pictographic; // E0.7 [1] (🏵️) rosette - case 0x1F3F6: return Extended_Pictographic; // E0.0 [1] (🏶) BLACK ROSETTE - case 0x1F3F7: return Extended_Pictographic; // E0.7 [1] (🏷️) label - case 0x1F408: return Extended_Pictographic; // E0.7 [1] (🐈) cat - case 0x1F413: return Extended_Pictographic; // E1.0 [1] (🐓) rooster - case 0x1F414: return Extended_Pictographic; // E0.6 [1] (🐔) chicken - case 0x1F415: return Extended_Pictographic; // E0.7 [1] (🐕) dog - case 0x1F416: return Extended_Pictographic; // E1.0 [1] (🐖) pig - case 0x1F42A: return Extended_Pictographic; // E1.0 [1] (🐪) camel - case 0x1F43F: return Extended_Pictographic; // E0.7 [1] (🐿️) chipmunk - case 0x1F440: return Extended_Pictographic; // E0.6 [1] (👀) eyes - case 0x1F441: return Extended_Pictographic; // E0.7 [1] (👁️) eye - case 0x1F465: return Extended_Pictographic; // E1.0 [1] (👥) busts in silhouette - case 0x1F4AD: return Extended_Pictographic; // E1.0 [1] (💭) thought balloon - case 0x1F4EE: return Extended_Pictographic; // E0.6 [1] (📮) postbox - case 0x1F4EF: return Extended_Pictographic; // E1.0 [1] (📯) postal horn - case 0x1F4F5: return Extended_Pictographic; // E1.0 [1] (📵) no mobile phones - case 0x1F4F8: return Extended_Pictographic; // E1.0 [1] (📸) camera with flash - case 0x1F4FD: return Extended_Pictographic; // E0.7 [1] (📽️) film projector - case 0x1F4FE: return Extended_Pictographic; // E0.0 [1] (📾) PORTABLE STEREO - case 0x1F503: return Extended_Pictographic; // E0.6 [1] (🔃) clockwise vertical arrows - case 0x1F508: return Extended_Pictographic; // E0.7 [1] (🔈) speaker low volume - case 0x1F509: return Extended_Pictographic; // E1.0 [1] (🔉) speaker medium volume - case 0x1F515: return Extended_Pictographic; // E1.0 [1] (🔕) bell with slash - case 0x1F54F: return Extended_Pictographic; // E0.0 [1] (🕏) BOWL OF HYGIEIA - case 0x1F57A: return Extended_Pictographic; // E3.0 [1] (🕺) man dancing - case 0x1F587: return Extended_Pictographic; // E0.7 [1] (🖇️) linked paperclips - case 0x1F590: return Extended_Pictographic; // E0.7 [1] (🖐️) hand with fingers splayed - case 0x1F5A4: return Extended_Pictographic; // E3.0 [1] (🖤) black heart - case 0x1F5A5: return Extended_Pictographic; // E0.7 [1] (🖥️) desktop computer - case 0x1F5A8: return Extended_Pictographic; // E0.7 [1] (🖨️) printer - case 0x1F5BC: return Extended_Pictographic; // E0.7 [1] (🖼️) framed picture - case 0x1F5E1: return Extended_Pictographic; // E0.7 [1] (🗡️) dagger - case 0x1F5E2: return Extended_Pictographic; // E0.0 [1] (🗢) LIPS - case 0x1F5E3: return Extended_Pictographic; // E0.7 [1] (🗣️) speaking head - case 0x1F5E8: return Extended_Pictographic; // E2.0 [1] (🗨️) left speech bubble - case 0x1F5EF: return Extended_Pictographic; // E0.7 [1] (🗯️) right anger bubble - case 0x1F5F3: return Extended_Pictographic; // E0.7 [1] (🗳️) ballot box with ballot - case 0x1F5FA: return Extended_Pictographic; // E0.7 [1] (🗺️) world map - case 0x1F600: return Extended_Pictographic; // E1.0 [1] (😀) grinning face - case 0x1F60E: return Extended_Pictographic; // E1.0 [1] (😎) smiling face with sunglasses - case 0x1F60F: return Extended_Pictographic; // E0.6 [1] (😏) smirking face - case 0x1F610: return Extended_Pictographic; // E0.7 [1] (😐) neutral face - case 0x1F611: return Extended_Pictographic; // E1.0 [1] (😑) expressionless face - case 0x1F615: return Extended_Pictographic; // E1.0 [1] (😕) confused face - case 0x1F616: return Extended_Pictographic; // E0.6 [1] (😖) confounded face - case 0x1F617: return Extended_Pictographic; // E1.0 [1] (😗) kissing face - case 0x1F618: return Extended_Pictographic; // E0.6 [1] (😘) face blowing a kiss - case 0x1F619: return Extended_Pictographic; // E1.0 [1] (😙) kissing face with smiling eyes - case 0x1F61A: return Extended_Pictographic; // E0.6 [1] (😚) kissing face with closed eyes - case 0x1F61B: return Extended_Pictographic; // E1.0 [1] (😛) face with tongue - case 0x1F61F: return Extended_Pictographic; // E1.0 [1] (😟) worried face - case 0x1F62C: return Extended_Pictographic; // E1.0 [1] (😬) grimacing face - case 0x1F62D: return Extended_Pictographic; // E0.6 [1] (😭) loudly crying face - case 0x1F634: return Extended_Pictographic; // E1.0 [1] (😴) sleeping face - case 0x1F635: return Extended_Pictographic; // E0.6 [1] (😵) face with crossed-out eyes - case 0x1F636: return Extended_Pictographic; // E1.0 [1] (😶) face without mouth - case 0x1F680: return Extended_Pictographic; // E0.6 [1] (🚀) rocket - case 0x1F686: return Extended_Pictographic; // E1.0 [1] (🚆) train - case 0x1F687: return Extended_Pictographic; // E0.6 [1] (🚇) metro - case 0x1F688: return Extended_Pictographic; // E1.0 [1] (🚈) light rail - case 0x1F689: return Extended_Pictographic; // E0.6 [1] (🚉) station - case 0x1F68C: return Extended_Pictographic; // E0.6 [1] (🚌) bus - case 0x1F68D: return Extended_Pictographic; // E0.7 [1] (🚍) oncoming bus - case 0x1F68E: return Extended_Pictographic; // E1.0 [1] (🚎) trolleybus - case 0x1F68F: return Extended_Pictographic; // E0.6 [1] (🚏) bus stop - case 0x1F690: return Extended_Pictographic; // E1.0 [1] (🚐) minibus - case 0x1F694: return Extended_Pictographic; // E0.7 [1] (🚔) oncoming police car - case 0x1F695: return Extended_Pictographic; // E0.6 [1] (🚕) taxi - case 0x1F696: return Extended_Pictographic; // E1.0 [1] (🚖) oncoming taxi - case 0x1F697: return Extended_Pictographic; // E0.6 [1] (🚗) automobile - case 0x1F698: return Extended_Pictographic; // E0.7 [1] (🚘) oncoming automobile - case 0x1F6A2: return Extended_Pictographic; // E0.6 [1] (🚢) ship - case 0x1F6A3: return Extended_Pictographic; // E1.0 [1] (🚣) person rowing boat - case 0x1F6A6: return Extended_Pictographic; // E1.0 [1] (🚦) vertical traffic light - case 0x1F6B2: return Extended_Pictographic; // E0.6 [1] (🚲) bicycle - case 0x1F6B6: return Extended_Pictographic; // E0.6 [1] (🚶) person walking - case 0x1F6BF: return Extended_Pictographic; // E1.0 [1] (🚿) shower - case 0x1F6C0: return Extended_Pictographic; // E0.6 [1] (🛀) person taking bath - case 0x1F6CB: return Extended_Pictographic; // E0.7 [1] (🛋️) couch and lamp - case 0x1F6CC: return Extended_Pictographic; // E1.0 [1] (🛌) person in bed - case 0x1F6D0: return Extended_Pictographic; // E1.0 [1] (🛐) place of worship - case 0x1F6D5: return Extended_Pictographic; // E12.0 [1] (🛕) hindu temple - case 0x1F6E9: return Extended_Pictographic; // E0.7 [1] (🛩️) small airplane - case 0x1F6EA: return Extended_Pictographic; // E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE - case 0x1F6F0: return Extended_Pictographic; // E0.7 [1] (🛰️) satellite - case 0x1F6F3: return Extended_Pictographic; // E0.7 [1] (🛳️) passenger ship - case 0x1F6F9: return Extended_Pictographic; // E11.0 [1] (🛹) skateboard - case 0x1F6FA: return Extended_Pictographic; // E12.0 [1] (🛺) auto rickshaw - case 0x1F7F0: return Extended_Pictographic; // E14.0 [1] (🟰) heavy equals sign - case 0x1F90C: return Extended_Pictographic; // E13.0 [1] (🤌) pinched fingers - case 0x1F91F: return Extended_Pictographic; // E5.0 [1] (🤟) love-you gesture - case 0x1F930: return Extended_Pictographic; // E3.0 [1] (🤰) pregnant woman - case 0x1F93F: return Extended_Pictographic; // E12.0 [1] (🤿) diving mask - case 0x1F94C: return Extended_Pictographic; // E5.0 [1] (🥌) curling stone - case 0x1F971: return Extended_Pictographic; // E12.0 [1] (🥱) yawning face - case 0x1F972: return Extended_Pictographic; // E13.0 [1] (🥲) smiling face with tear - case 0x1F979: return Extended_Pictographic; // E14.0 [1] (🥹) face holding back tears - case 0x1F97A: return Extended_Pictographic; // E11.0 [1] (🥺) pleading face - case 0x1F97B: return Extended_Pictographic; // E12.0 [1] (🥻) sari - case 0x1F9C0: return Extended_Pictographic; // E1.0 [1] (🧀) cheese wedge - case 0x1F9CB: return Extended_Pictographic; // E13.0 [1] (🧋) bubble tea - case 0x1F9CC: return Extended_Pictographic; // E14.0 [1] (🧌) troll - case 0x1FA74: return Extended_Pictographic; // E13.0 [1] (🩴) thong sandal - } - if (m_dic_cache_break_type != null) { - if (m_dic_cache_break_type.ContainsKey(nCodePoint)) { - return m_dic_cache_break_type[nCodePoint]; - } else { - return Other; - } - } - if (m_arr_cache_break_type != null) { - if (nCodePoint >= m_arr_cache_break_type.Length) { - return Other; - } else { - return m_arr_cache_break_type[nCodePoint]; - } - } - return TextBoundary.BinarySearchRangeFromList(0, m_lst_code_range.Count - 1, nCodePoint, m_lst_code_range); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/STTextBoxGDIPRender.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/STTextBoxGDIPRender.cs deleted file mode 100644 index 4b9e79f..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/STTextBoxGDIPRender.cs +++ /dev/null @@ -1,373 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using CPF.Controls; -using CPF.Drawing; - -namespace ST.Library.UI.STTextBox -{ - public class STTextBoxSkiaFPRender : ISTTextBoxRender, IDisposable - { - - - public bool ShowInVisableChar { get; set; } - public Color InVisableCharColor { get; set; } - - public int TabSize { get; private set; } - public int SpaceWidth { get; private set; } - public float FontHeight { get; private set; } - public bool IsMonospaced { get; private set; } - - private Font m_ft_normal; - private Font m_ft_bold; - private Font m_ft_italic; - private Font m_ft_bold_italic; - private StringFormat m_sf; - private Brush m_brush;//Solid - private Graphics m_g_onpaint; - private Graphics m_g_private; - private float m_italic_width; - - private Rect m_rect_temp; - private Rect m_rect_line; - private Dictionary m_dic_width_cache; - - - private Control m_ctrl; - private int m_nCounter; - - public STTextBoxSkiaFPRender() { - this.TabSize = 4; - m_dic_width_cache = new Dictionary(); - m_sf = new StringFormat() { - Alignment = TextAlignment.Center//GenericTypographic - }; - //m_sf.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces; - //m_sf.Alignment = StringAlignment.Center; - //m_sf.LineAlignment = StringAlignment.Center; - m_brush = new SolidColorBrush(Color.Black);//SolidBrush - this.InVisableCharColor = Color.FromArgb(50, Color.Magenta.R, Color.Magenta.G, Color.Magenta.B); - this.ShowInVisableChar = false; - } - public float DPIZoom; - public void BindControl(Control ctrl,View Root) { - DPIZoom = Root.RenderScaling; - if (ctrl == null) { - throw new ArgumentNullException("ctrl"); - } - m_ctrl = ctrl; - //m_ctrl.FontChanged += m_ctrl_FontChanged; - //hmbb 字体变更 - this.InitData(new Font(m_ctrl.FontFamily, m_ctrl.FontSize, m_ctrl.FontStyle)); - } - - public void UnbindControl() { - //m_ctrl.FontChanged -= m_ctrl_FontChanged; - } - - public void OnBeginPaint(Graphics g) { - //m_g_onpaint = g; - //m_b_onpaint = true; - /*this.XDPIZoom = g.DpiX / 96; - this.YDPIZoom = g.DpiY / 96; - if (this.XDPIZoom < 1) this.XDPIZoom = 1; - if (this.YDPIZoom < 1) this.YDPIZoom = 1;*/ - m_g_onpaint = g; - } - - public int SetTabSize(int nSize) { - if (nSize < 0) { - throw new ArgumentOutOfRangeException("nSize", "The value must be more than 0"); - } - if (nSize > 10) { - throw new ArgumentOutOfRangeException("nSize", "The value must be less than 10"); - } - int nRet = this.TabSize; - this.TabSize = nSize; - return nRet; - } - - public int GetTabSize() { - return this.TabSize; - } - - public int GetTabWidth(int nLeftWidth) { - return (int)Math.Round(this.GetSpaceWidth() * this.GetTabSpaceCount(nLeftWidth, this.TabSize)); - } - - public int GetFontHeight() { return this.FontHeight; } - - public int GetSpaceWidth() { return this.SpaceWidth; } - - public float GetTabSpaceCount(int nLeftWidth, int nTabSize) { - if (nTabSize < 0) { - throw new ArgumentOutOfRangeException("nTabSize", "The value must be more than 0"); - } - int nSpaceWidth = this.GetSpaceWidth(); - if (nTabSize == 1) { //If the TAB size just one SPACE,return the SPACE width; - return nSpaceWidth; - } - int nTabFullWidth = nSpaceWidth * nTabSize; - float nSpaceCount = (nTabFullWidth - (nLeftWidth % nTabFullWidth)) / (float)nSpaceWidth; - return nSpaceCount < 1 ? nSpaceCount + nTabSize : nSpaceCount; - } - - public int GetStringWidth(string strText, TextStyle style, int nLeftWidth) { - return this.GetStringWidth(strText, style, nLeftWidth, true); - } - - public int GetStringWidth(string strText, TextStyle style, int nLeftWidth, bool bCache) { - if (string.IsNullOrEmpty(strText)/* || m_ft_normal == null*/) { - return 0; - } - Graphics g = this.GetGraphics(); - string strKey = this.GetFontFlag(style); - Font ft = this.GetFontFromFlag(strKey); - strKey += ":" + strText; - if (m_dic_width_cache.ContainsKey(strKey)) { - return m_dic_width_cache[strKey]; - } - if (strText == "\t") { - return this.GetTabWidth(nLeftWidth); - } - float fWidth = g.MeasureString(strText, ft, 10000, m_sf).Width; - if ((ft.FontStyle & FontStyles.Italic) == FontStyles.Italic) { - fWidth += m_italic_width; - } - int nWidth = (int)Math.Ceiling(fWidth); - if (bCache) { - m_dic_width_cache.Add(strKey, nWidth); - } - return nWidth; - } - public void DrawString(string strText, Font ft, Color color, Rect rect, StringFormat sf) { - m_brush = new SolidColorBrush(color); - this.GetGraphics().DrawString(strText, ft, m_brush, rect, sf); - } - /// - /// - /// - /// - /// - /// - /// - /// 下划线 - public void DrawString(string strText, TextStyle style, Rect rect, TextDecorationLocation Underline = TextDecorationLocation.None) { - Graphics g = this.GetGraphics(); - m_rect_line.X = rect.X; - m_rect_line.Width = rect.Width; - if (style.BackColor.A > 0) { - m_brush = new SolidColorBrush(style.BackColor); - g.FillRectangle(m_brush, rect); - } - if (Underline == TextDecorationLocation.Underline && style.UnderLineColor.A > 0) { - m_rect_line.Y = rect.Bottom - m_rect_line.Height; - m_brush = new SolidColorBrush(style.UnderLineColor); - g.FillRectangle(m_brush, m_rect_line); - } - if (style.ForeColor.A > 0) { - m_brush = new SolidColorBrush(style.ForeColor); - switch (strText[0]) { - case ' ': - if (this.ShowInVisableChar) this.OnDrawSpaceChar(rect); - return; - case '\t': - if (this.ShowInVisableChar) this.OnDrawTabChar(rect); - return; - case '\r': - case '\n': - if (this.ShowInVisableChar) this.OnDrawNewLineChar(rect); - return; - default: - g.DrawString(strText, this.GetFontFromFlag(this.GetFontFlag(style)), m_brush, rect, m_sf); - break; - } - } - if (Underline == TextDecorationLocation.Strikethrough && style.StrikeOutColor.A > 0) { - m_rect_line.Y = rect.Y + rect.Height / 2; - m_brush = new SolidColorBrush(style.StrikeOutColor); - g.FillRectangle(m_brush, m_rect_line); - } - } - - public void DrawImage(Image image, Rect rect) { - this.GetGraphics().DrawImage(image, rect); - } - - public void FillRectangle(Color backColor, Rect rect) { - m_brush = new SolidColorBrush(backColor) ; - this.GetGraphics().FillRectangle(m_brush, rect); - } - - public void FillRectangle(Color backColor, float nX, float nY, float nWidth, float nHeight) { - m_brush = new SolidColorBrush(backColor); - this.GetGraphics().FillRectangle(m_brush, nX, nY, (float)nWidth, (float)nHeight); - } - //hmbb 下面这两个我也不知道干嘛的 - public void SetClip(Rect rect) { - //this.GetGraphics().SetClip(rect); - } - - public void ResetClip() { - //this.GetGraphics().ResetClip(); - } - - // [protected] ========================================== - - protected virtual void OnDrawNewLineChar(Rect rect) { - Graphics g = this.GetGraphics(); - m_brush = new SolidColorBrush(this.InVisableCharColor); - m_rect_temp.X = rect.X + (int)Math.Round(this.DPIZoom); - m_rect_temp.Y = rect.Y + rect.Height / 2 - (int)Math.Round(this.DPIZoom); - m_rect_temp.Height = (int)Math.Round(this.DPIZoom * 3); - m_rect_temp.Width = (int)Math.Round(this.DPIZoom); - g.FillRectangle(m_brush, m_rect_temp); // draw -> | - m_rect_temp.X += (int)Math.Round(this.DPIZoom); - m_rect_temp.Y += (int)Math.Round(this.DPIZoom); - m_rect_temp.Height = (int)Math.Round(this.DPIZoom); - m_rect_temp.Width = rect.Width - (int)Math.Round(this.DPIZoom * 4); - g.FillRectangle(m_brush, m_rect_temp); // draw -> - - m_rect_temp.X = m_rect_temp.Right; - m_rect_temp.Width = (int)Math.Round(this.DPIZoom); - m_rect_temp.Height = (int)Math.Round(this.DPIZoom * 5); - m_rect_temp.Y -= (int)Math.Round(this.DPIZoom * 4); - g.FillRectangle(m_brush, m_rect_temp); // draw -> | - } - - protected virtual void OnDrawTabChar(Rect rect) { - Graphics g = this.GetGraphics(); - m_brush = new SolidColorBrush(this.InVisableCharColor); - m_rect_temp.Height = (int)Math.Round(this.DPIZoom * 3); - m_rect_temp.Width = (int)Math.Round(this.DPIZoom);// *2; - m_rect_temp.Y = rect.Y + rect.Height / 2 - (int)Math.Round(this.DPIZoom); - m_rect_temp.X = rect.X + (int)Math.Round(this.DPIZoom); - g.FillRectangle(m_brush, m_rect_temp); - m_rect_temp.X = rect.Right - (int)Math.Round(this.DPIZoom * 2); - g.FillRectangle(m_brush, m_rect_temp); - m_rect_temp.Y += (int)Math.Round(this.DPIZoom); - m_rect_temp.Height = (int)Math.Round(this.DPIZoom); - m_rect_temp.X = rect.X + (int)Math.Round(this.DPIZoom * 2); - m_rect_temp.Width = rect.Width - (int)Math.Round(this.DPIZoom * 4); - g.FillRectangle(m_brush, m_rect_temp); - } - - protected virtual void OnDrawSpaceChar(Rect rect) { - Graphics g = this.GetGraphics(); - m_brush = new SolidColorBrush(this.InVisableCharColor); - m_rect_temp.Height = (int)Math.Round(this.DPIZoom); - m_rect_temp.Width = rect.Width - (int)Math.Round(this.DPIZoom * 2);// *2; - m_rect_temp.X = rect.X + (int)Math.Round(this.DPIZoom); - m_rect_temp.Y = rect.Bottom - (int)Math.Round(this.DPIZoom * 2); - g.FillRectangle(m_brush, m_rect_temp); - m_rect_temp.Width = m_rect_temp.Height; - m_rect_temp.X = rect.X + m_rect_temp.Width; - m_rect_temp.Y -= m_rect_temp.Height; - g.FillRectangle(m_brush, m_rect_temp); - m_rect_temp.X = rect.Right - (int)Math.Round(this.DPIZoom * 2); - g.FillRectangle(m_brush, m_rect_temp); - } - - // [private] ============================================ - - private void m_ctrl_FontChanged(object sender, EventArgs e) { - this.InitData(new Font(m_ctrl.FontFamily, m_ctrl.FontSize, m_ctrl.FontStyle)); - } - - private void InitData(Font ft) { - /*if (m_ft_normal == ft) { - return; - }*/ - //this.BeginPaint(); - m_rect_line.Height = (int)Math.Round(this.DPIZoom * 1); - if (m_rect_line.Height == 0) m_rect_line.Height = 1; - m_ft_normal = ft; - if (!m_ft_bold.IsNull) m_ft_bold.Dispose(); - m_ft_bold = new Font(ft.FontFamily, ft.FontSize, FontStyles.Bold); - if (!m_ft_italic.IsNull) m_ft_italic.Dispose(); - m_ft_italic = new Font(ft.FontFamily, ft.FontSize, FontStyles.Italic); - if (!m_ft_bold_italic.IsNull) m_ft_bold_italic.Dispose(); - m_ft_bold_italic = new Font(ft.FontFamily,ft.FontSize, FontStyles.Bold | FontStyles.Italic); - this.FontHeight = ft.FontSize;////hmbb - m_dic_width_cache.Clear(); - //SPACE are used to calculate TAB width. - int nWidth = this.GetStringWidth(" ", TextStyle.Empty, 0); - m_dic_width_cache.Add(" ", nWidth); - m_dic_width_cache.Add("\r", nWidth); - m_dic_width_cache.Add("\n", nWidth); - m_dic_width_cache.Add("\r\n", nWidth); - this.SpaceWidth = nWidth; - this.IsMonospaced = this.GetStringWidth("i", TextStyle.Empty, 0) == this.GetStringWidth("W", TextStyle.Empty, 0); - if (!this.IsMonospaced) { - m_italic_width = (float)(this.FontHeight * Math.Tan(12 * Math.PI / 180)); - } else { - m_italic_width = 0; - } - } - - private Graphics GetGraphics() { - if (m_g_onpaint != null) return m_g_onpaint; - if (m_g_private != null) return m_g_private; - throw new InvalidOperationException("The Graphics is null, please call BeginPaint() to init it."); - } - - private string GetFontFlag(TextStyle style) { - string strKey = "N"; - if ((style.FontStyle & FontStyles.Bold) == FontStyles.Bold) { - strKey += "B"; - } - if ((style.FontStyle & FontStyles.Italic) == FontStyles.Italic) { - strKey += "I"; - } - return strKey; - } - - private Font GetFontFromFlag(string strFlag) { - switch (strFlag) { - case "NBI": - return m_ft_bold_italic; - case "NB": - return m_ft_bold; - case "NI": - return m_ft_italic; - } - return m_ft_normal; - } - - // [interface] ========================================== - - public void Dispose() { - //if (m_g_private != null) m_g_private.Dispose(); - if (!m_ft_bold.IsNull) m_ft_bold.Dispose(); - if (!m_ft_italic.IsNull) m_ft_italic.Dispose(); - if (!m_ft_bold_italic.IsNull) m_ft_bold_italic.Dispose(); - if (m_brush != null) m_brush.Dispose(); - //if (m_sf != null) m_sf.Dispose(); - if (m_dic_width_cache != null) m_dic_width_cache.Clear(); - } - - public void BindControl(Control ctrl) - { - //throw new NotImplementedException(); - } - - public void OnEndPaint(Graphics g) - { - //throw new NotImplementedException(); - } - - public void BeginPaint() - { - //throw new NotImplementedException(); - } - - public void EndPaint() - { - //throw new NotImplementedException(); - } - - - - - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/CSharpStyleMonitor.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/CSharpStyleMonitor.cs deleted file mode 100644 index 26dc4cc..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/CSharpStyleMonitor.cs +++ /dev/null @@ -1,973 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; -using System.Text.RegularExpressions; - -namespace ST.Library.UI.STTextBox -{ - public class CSharpStyleMonitor : TextStyleMonitor - { - public TextStyle DefaultStyle { get; set; } - public TextStyle CommentStyle { get; set; } - public TextStyle DocCommentStyle { get; set; } - public TextStyle KeyWordStyle { get; set; } - public TextStyle StringStyle { get; set; } - public TextStyle OperatorStyle { get; set; } - public TextStyle DelimiterStyle { get; set; } - public TextStyle NumberStyle { get; set; } - public TextStyle BuiltInTypeStyle { get; set; } - public TextStyle PropertyStyle { get; set; } - public TextStyle CustomTypeStyle { get; set; } - public TextStyle FunctionDeclStyle { get; set; } - public TextStyle FunctionCallStyle { get; set; } - public TextStyle FunctionBuiltInStyle { get; set; } - - private enum SymbolType - { - Comment, - DocComment, - KeyWord, - String, - Operator, - Delimiter, - Number, - BuiltInType, - CustomType, - Property, - FunctionDecl, - FunctionCall, - FunctionBuiltIn, - None - } - - private class Symbol : IComparable - { - public SymbolType Type; - public string Value; - public int Index; - public int Length; - - public Symbol(SymbolType type, string value, int nIndex, int nLen) { - this.Type = type; - this.Value = value; - this.Index = nIndex; - this.Length = nLen; - } - public override string ToString() { - return "[" + this.Type + "] - (" + this.Index + "," + this.Length + ") - " + this.Value; - } - - public int CompareTo(object obj) { - return this.Index - ((Symbol)obj).Index; - } - } - - private static string m_str_type = "void,var,object,dynamic,long,ulong,int,uint,short,ushort,byte,sbyte,float,double,decimal,bool,char,string,params"; - private static string m_str_modifier = "private,public,internal,protected,partial,sealed,abstract,static,extern,virtual,override,fixed,unsafe,readonly,const"; - private static string m_str_object = "event,enum,struct,class,new"; - private static string m_str_flow = "for,foreach,if,else,do,while,switch,case,default,break,continue,goto,return"; - private static string m_str_value = "null,true,false"; - private static string m_str_other = "try,catch,finally,throw,using,namespace,this,base,in,is,as,get,set,ref,out,value,stackalloc,unchecked,lock"; - private static string m_str_func = "sizeof,typeof,nameof"; - private static string m_str_linq = "let,select,from,group,into,where,join,orderby,ascending,descending"; - private static string m_str_operator = "+-*/<>!=&|~^?:"; - private static string m_str_delimiter = "[](){},;"; - private static Regex m_reg_w = new Regex(@"\w+"); - private static Regex m_reg_W = new Regex(@"\W"); - - private static HashSet m_hs_all_key; - private static HashSet m_hs_type; - private static HashSet m_hs_object; - private static HashSet m_hs_modifier; - private static HashSet m_hs_function; - private static HashSet m_hs_operator; - private static HashSet m_hs_delimiter; - - private List m_lst_smb; - private List m_lst_range; - - static CSharpStyleMonitor() { - m_hs_all_key = new HashSet(); - string[] strs = { m_str_type, m_str_modifier, m_str_object, m_str_flow, m_str_value, m_str_other, m_str_func, m_str_linq }; - foreach (var v in strs) { - foreach (var s in v.Split(',')) { - m_hs_all_key.Add(s); - } - } - m_hs_type = new HashSet(); - foreach (var v in m_str_type.Split(',')) { - m_hs_type.Add(v); - } - m_hs_modifier = new HashSet(); - foreach (var v in m_str_modifier.Split(',')) { - m_hs_modifier.Add(v); - } - m_hs_object = new HashSet(); - foreach (var v in m_str_object.Split(',')) { - m_hs_object.Add(v); - } - m_hs_function = new HashSet(); - foreach (var v in m_str_func.Split(',')) { - m_hs_function.Add(v); - } - m_hs_operator = new HashSet(); - foreach (var v in m_str_operator) { - m_hs_operator.Add(v.ToString()); - } - m_hs_delimiter = new HashSet(); - foreach (var v in m_str_delimiter) { - m_hs_delimiter.Add(v.ToString()); - } - } - - public CSharpStyleMonitor() { - m_lst_smb = new List(); - m_lst_range = new List(); - this.DefaultStyle = new TextStyle() { ForeColor = Color.Black }; - this.CommentStyle = new TextStyle() { ForeColor = Color.Green }; - this.DocCommentStyle = new TextStyle() { ForeColor = Color.Gray }; - this.KeyWordStyle = new TextStyle() { ForeColor = Color.Blue }; - this.StringStyle = new TextStyle() { ForeColor = Color.Brown }; - this.OperatorStyle = new TextStyle() { ForeColor = Color.DarkMagenta }; - this.DelimiterStyle = new TextStyle() { ForeColor = Color.Gray }; - this.NumberStyle = new TextStyle() { ForeColor = Color.Orange }; - this.BuiltInTypeStyle = new TextStyle() { ForeColor = Color.CornflowerBlue }; - this.PropertyStyle = new TextStyle() { ForeColor = Color.SlateGray }; - this.CustomTypeStyle = new TextStyle() { ForeColor = Color.DarkCyan }; - this.FunctionDeclStyle = new TextStyle() { ForeColor = Color.DarkViolet }; - this.FunctionCallStyle = new TextStyle() { ForeColor = Color.PaleVioletRed }; - this.FunctionBuiltInStyle = new TextStyle() { ForeColor = Color.CornflowerBlue }; - } - - public override void Init(string strText) { - m_lst_smb.Clear(); - int nIndex = 0; - //bool bFlag = false; - string strTemp = string.Empty; - StringBuilder sb = new StringBuilder(); - List lst = new List(); - for (int i = 0; i < strText.Length; i++) { - char ch = strText[i]; - //====== symbol ====== - //bFlag = (ch >= '0' && ch <= '9'); - //bFlag |= (ch >= 'a' && ch <= 'z'); - //bFlag |= (ch >= 'A' && ch <= 'Z'); - //bFlag |= (ch == '_'); - if (this.CheckIsIdentifierChar(ch)) { - sb.Append(ch); - continue; - } - //==================== - if (sb.Length != 0) { - lst.Add(new Symbol(SymbolType.None, sb.ToString(), i - sb.Length, sb.Length)); - sb.Remove(0, sb.Length); - } - switch (ch) { - case ' ': - case '\t': - case '\r': - case '\n': - continue; - } - if (ch == '/' && i + 1 < strText.Length) { - switch (strText[i + 1]) { - case '*': - strTemp = this.GetComment1(strText, i); - m_lst_smb.Add(new Symbol(SymbolType.Comment, strTemp, i, strTemp.Length)); - i += strTemp.Length; - nIndex = i; - continue; - case '/': - strTemp = this.GetComment2(strText, i); - nIndex = i; - if (strTemp.StartsWith("///")) { - Regex reg = new Regex(@"<.*?>"); - foreach (Match m in reg.Matches(strTemp)) { - if (nIndex < i + m.Index) { - m_lst_smb.Add(new Symbol(SymbolType.Comment, strText.Substring(nIndex, i + m.Index - nIndex), nIndex, i + m.Index - nIndex)); - nIndex = i + m.Index; - } - m_lst_smb.Add(new Symbol(SymbolType.DocComment, m.Value, i + m.Index, m.Length)); - nIndex = i + m.Index + m.Length; - } - if (nIndex < i + strTemp.Length) { - m_lst_smb.Add(new Symbol(SymbolType.Comment, strText.Substring(nIndex - i, strTemp.Length - nIndex + i), nIndex, strTemp.Length - nIndex + i)); - } - } else { - m_lst_smb.Add(new Symbol(SymbolType.Comment, strTemp, i, strTemp.Length)); - } - i += strTemp.Length; - nIndex = i; - continue; - } - } - if (ch == '@' && i + 1 < strText.Length && strText[i + 1] == '"') { - string strString = this.GetString1(strText, i); - lst.Add(new Symbol(SymbolType.String, strString, i, strString.Length)); - i += strString.Length - 1; - nIndex = i; - continue; - } - if (ch == '"' || ch == '\'') { - string strString = ch == '\'' ? this.GetChar(strText, i) : this.GetString2(strText, i); - lst.Add(new Symbol(SymbolType.String, strString, i, strString.Length)); - i += strString.Length - 1; - nIndex = i; - continue; - } - lst.Add(new Symbol(SymbolType.None, ch.ToString(), i, 1)); - } - if (sb.Length != 0) { - lst.Add(new Symbol(SymbolType.None, sb.ToString(), strText.Length - sb.Length, sb.Length)); - } - this.ProcessSymbol(lst); - m_lst_smb.AddRange(lst); - m_lst_smb.Sort(); - var aa = this.Clear(m_lst_smb); - //m_lst_smb.AddRange(aa); - //m_lst_smb.Sort(); - m_lst_range = this.SymbolToRange(aa); - } - - private List Clear(List lst) { - List ret = new List(); - if (lst == null || lst.Count == 0) { - return ret; - } - Symbol last = lst[0]; - if (last.Type != SymbolType.None) { - ret.Add(last); - } - for (int i = 1; i < lst.Count; i++) { - if (m_hs_operator.Contains(lst[i].Value)) { - lst[i].Type = SymbolType.Operator; - } - if (char.IsNumber(lst[i].Value[0])) { - lst[i].Type = SymbolType.Number; - } - if (m_hs_delimiter.Contains(lst[i].Value)) { - lst[i].Type = SymbolType.Delimiter; - } - switch (lst[i].Value) { - case "<": // like -> List - case ">": - if (lst[i - 1].Type == SymbolType.BuiltInType || lst[i - 1].Type == SymbolType.CustomType) { - lst[i].Type = SymbolType.None; - } - break; - } - if (lst[i].Value == "." && i + 1 < lst.Count) { - lst[i].Type = lst[i + 1].Type; - } - if (lst[i].Type == SymbolType.None) { - last = lst[i]; - continue; - } - if (last.Type == lst[i].Type) { - last.Length = lst[i].Index + lst[i].Length - last.Index; - continue; - } - last = lst[i]; - ret.Add(lst[i]); - } - return ret; - } - - private List SymbolToRange(List lst) { - List lst_ret = new List(); - foreach (var v in lst) { - lst_ret.Add(new TextStyleRange() { - Index = v.Index, - Length = v.Length, - Style = this.GetColorFromSymbolType(v.Type) - }); - } - return lst_ret; - } - - private void ProcessSymbol(List lst) { - for (int i = 0; i < lst.Count; i++) { - //if (m_hs_operators.Contains(lst[i].Value)) { - // lst[i].Type = SymbolType.Operator; - //} - //if (char.IsNumber(lst[i].Value[0])) { - // lst[i].Type = SymbolType.Number; - //} - if (lst[i].Value == "." && i + 1 < lst.Count && this.CheckIsIdentifier(lst[i + 1].Value)) { - lst[i + 1].Type = SymbolType.Property; - } - if (m_hs_modifier.Contains(lst[i].Value)) { - lst[i].Type = SymbolType.KeyWord; - if (!this.CheckIsDeclare(lst, i)) { - continue; - } - i += this.CheckDeclare(lst, i); - continue; - } - if (m_hs_object.Contains(lst[i].Value)) { - lst[i].Type = SymbolType.KeyWord; - i += this.CheckObject(lst, i); - continue; - } - if (m_hs_all_key.Contains(lst[i].Value)) { - lst[i].Type = m_hs_type.Contains(lst[i].Value) ? SymbolType.BuiltInType : SymbolType.KeyWord; - if (m_hs_function.Contains(lst[i].Value)) lst[i].Type = SymbolType.FunctionBuiltIn; - switch (lst[i].Value) { - case "sizeof": - case "typeof": - case "foreach": - case "catch": - if (i + 2 < lst.Count && this.CheckIsIdentifier(lst[i + 2].Value)) { - i += this.CheckDataType(lst, i + 2); - continue; - } - i += 2; - break; - } - continue; - } - switch (lst[i].Value) { // A new sentence after these. - case ";": - case "{": - case "}": - case "]": - if (i + 1 >= lst.Count) break; - if (lst[i + 1].Value == "[") { - i += this.CheckAttribute(lst, i + 1); - break; - } - if (!this.CheckIsIdentifier(lst[i + 1].Value)) break; - // If can not match a key word, maybe is a custom type (such as: {CustomType a = null;}) - if (m_hs_type.Contains(lst[i + 1].Value) && this.CheckIsDeclare(lst, i + 1)) { - i += this.CheckDataType(lst, i + 1) + 1; - } - break; - case "=": - this.ProcessEqual(lst, i); - break; - case "[": - if (i - 1 < 0) break; - switch (lst[i - 1].Value) { - case ";": - case "{": - case "}": - case "]": - i += this.CheckAttribute(lst, i) - 1; - break; - } - break; - case "(": - i += this.CheckFunction(lst, i); - break; - } - } - } - - private int CheckObject(List lst, int nIndex) { - // after [class enum struct new] - for (int i = nIndex + 1; i < lst.Count; i++) { - i = this.GetNextSymbolIndex(lst, i); - switch (lst[i].Value) { - case ":": // Extened - case "<": // Generic - case ",": - case ">": - continue; - default: - if (!this.CheckIsIdentifier(lst[i].Value)) { - return i - nIndex; - } - break; - } - lst[i].Type = m_hs_type.Contains(lst[i].Value) ? SymbolType.BuiltInType : SymbolType.CustomType; - } - return lst.Count - nIndex; - } - - private int CheckDeclare(List lst, int nIndex) { - // Rule: MODIFIER? DATA_TYPE NAME [( or <] - int nTemp = nIndex; - while (nTemp < lst.Count && m_hs_modifier.Contains(lst[nTemp].Value)) { - lst[nTemp++].Type = SymbolType.KeyWord; //Igonre the modifier - } - if (nTemp >= lst.Count) return nTemp - nIndex; - if (!this.CheckIsIdentifier(lst[nTemp].Value)) { - return nTemp - nIndex; - } - if (m_hs_object.Contains(lst[nTemp].Value)) { - // if is [class struce enum .. ], so it's a declaration of an object - lst[nTemp].Type = SymbolType.KeyWord; - nTemp += this.CheckObject(lst, nTemp); - return nTemp - nIndex; - } - // now lst[nTemp] is a DATA_TYPE - if (nTemp + 1 >= lst.Count || lst[nTemp + 1].Value != "(") { // if is end or next char is not '(' - // if lst[nTemp + 1] is "(". maybe like this "MODIFIER? DATA_TYPE(" - // maybe is a Constructor like this "public ClassName(" - nTemp += this.CheckDataType(lst, nTemp); - } - if (nTemp >= lst.Count) return nTemp - nIndex; - // now lst[nTemp] is NAME - if (lst[nTemp].Value == "operator") { // Overloaded operator functions are special. So deal with it independently. - lst[nTemp].Type = SymbolType.KeyWord; - if (nTemp + 2 < lst.Count && lst[++nTemp + 1].Value != "(") { - nTemp++; - } - if (lst[nTemp + 1].Value != "(") { - return nTemp - nIndex; - } - } - if (++nTemp >= lst.Count) return nTemp - nIndex; - // now -> "MODIFIER? DATA_TYPE NAME<". maybe is a generic function - if (lst[nTemp].Value == "<") { - int n = nTemp; - nTemp += this.CheckDataType(lst, nTemp - 1) - 1; - lst[n - 1].Type = SymbolType.FunctionDecl; - if (nTemp >= lst.Count) return nTemp - nIndex; - } - // now -> "MODIFIER? DATA_TYPE NAME(". so it's a function - if (lst[nTemp].Value == "(") { - if (this.CheckIsIdentifier(lst[nTemp - 1].Value)) { - lst[nTemp - 1].Type = SymbolType.FunctionDecl; - } - nTemp += this.CheckFunctionParam(lst, nTemp) - 1; - } - // The other case is the declaration of a variable. - return nTemp - nIndex; - } - - private int CheckFunction(List lst, int nIndex) { - // lst[nIndex] is "(" - if (nIndex - 1 >= 0 && lst[nIndex - 1].Type != SymbolType.None && lst[nIndex - 1].Type != SymbolType.Property) { - return 0; - } - // first check if is convert like -> (xxx)xx or (xxx[])xxx - for (int i = nIndex + 1; i < lst.Count; i++) { - switch (lst[i].Value) { - case ".": // xxx.xxx - case "<": // generic - case ",": - case ">": - case "[": // array - case "]": - continue; - case ")": - if (i + 1 < lst.Count && this.CheckIsIdentifier(lst[i + 1].Value)) { - return this.CheckDataType(lst, nIndex + 1); - } - break; - default: - if (!this.CheckIsIdentifier(lst[i].Value)) { - break; - } - continue; - } - break; - } - // Note: On the left of "(" can be a function or a constructor of an object - // But if is "new xxx(" will not run this function. will run CheckObject() - int nTemp = nIndex - 1; - if (nTemp < 0) return 0; - // if last char is '>', maybe is a generic function - if (lst[nTemp].Value == ">") { // maybe is a generic, find the '<' - nTemp -= this.GetGenericLength(lst, nTemp); - this.CheckDataType(lst, nTemp); - } - if (nTemp < 0) return 0; - // new -> list[nTemp] is NAME - if (!this.CheckIsIdentifier(lst[nTemp].Value)) return 0; - if (nTemp - 1 >= 0 && this.CheckIsBoundary(lst[nTemp - 1].Value[0])) { - lst[nTemp].Type = SymbolType.FunctionCall; - } else { - lst[nTemp].Type = SymbolType.FunctionDecl; - } - //this.CheckFunctionName(lst, nTemp); - //if (lst[nTemp].Value == "catch") { - // return this.CheckFunctionParam(lst, nTemp + 1); - //} - if (--nTemp < 0) return 0; - // now -> lst[nTemp] maybe is DATA_TYPE - if (lst[nTemp].Value == "]") { // maybe is a array, find the '[' - nTemp -= this.GetArrayLength(lst, nTemp); - } - if (nTemp < 0) return 0; - if (lst[nTemp].Value == ">") { // maybe is a generic, find the '<' - nTemp -= this.GetGenericLength(lst, nTemp); - this.CheckDataType(lst, nTemp); - } - if (nTemp < 0) return 0; - // now -> lst[nTemp] maybe is DATA_TYPE; - if (this.CheckIsBoundary(lst[nTemp].Value[0])) { // It's a function call like ".XXX(" or ";XXX(" - return 0; - } - // other cases, it's a function declaration - if (lst[nTemp].Type == SymbolType.None) { // if none ,so it's not generic - lst[nTemp].Type = m_hs_type.Contains(lst[nTemp].Value) ? SymbolType.BuiltInType : SymbolType.CustomType; - } - return this.CheckFunctionParam(lst, nIndex) - 1; - } - - private int CheckFunctionParam(List lst, int nIndex) { - // lst[nIndex] is '(' or '(' right char - int nTemp = nIndex; - for (int i = nIndex; i < lst.Count; i++) { - nTemp = nIndex; - switch (lst[i].Value) { - case "(": - case ",": - continue; - case "[": - i += this.CheckAttribute(lst, i) - 1; - continue; - case ")": - return i - nIndex + 1; - case "params": - lst[i].Type = SymbolType.KeyWord; - continue; - default: - if (!this.CheckIsIdentifier(lst[i].Value)) { - nTemp = i; - break; - } - i += this.CheckDataType(lst, i); - if (i < lst.Count && !this.CheckIsIdentifier(lst[i].Value)) { - nTemp = i; - break; - } - continue; - } - break; - } - return nTemp - nIndex + 1; - } - - private int CheckAttribute(List lst, int nIndex) { - // Attribute -> [attr(value)] or [attr(value),attr(vule)] - // lst[nIndex] is '[' and left char is [';', '{', '}', ']' ] - if (nIndex + 2 >= lst.Count) { - return 1; - } - if (lst[nIndex + 1].Value == "]") { // maybe just a array like -> new int[][](); - return 2; - } - if (lst[nIndex + 2].Value == "]") { // maybe just a array like -> new int[2][2](); - return 3; // Note: new int[][GetLength(x)](); will run this - } - int nTemp = this.GetNextSymbolIndex(lst, nIndex + 1); - lst[nTemp].Type = SymbolType.CustomType; - for (int i = nIndex + 2; i < lst.Count; i++) { - if (lst[i].Value == "." && i + 1 < lst.Count && this.CheckIsIdentifier(lst[i + 1].Value)) { - lst[i + 1].Type = SymbolType.Property; - } - if ((lst[i].Value == ")" || lst[i].Value == ",") && i - 3 >= 0) { - if (lst[i - 2].Value == ".") { // like this [attr(XXX.xx, xx.XXX.xx)] - lst[i - 3].Type = SymbolType.CustomType; // XXX will be set as custom type - } - } - if (lst[i].Value == "(" && lst[i - 1].Type == SymbolType.None) { - lst[i - 1].Type = SymbolType.CustomType; - } - if (m_hs_all_key.Contains(lst[i].Value) && lst[i - 1].Value != ".") { - lst[i].Type = SymbolType.KeyWord; - switch (lst[i].Value) { - case "sizeof": - case "typeof": - if (i + 2 < lst.Count && lst[i + 1].Value == "(" && this.CheckIsIdentifier(lst[i + 2].Value)) { - lst[i + 2].Type = m_hs_type.Contains(lst[i + 2].Value) ? SymbolType.BuiltInType : SymbolType.CustomType; - } - i += 2; - break; - } - } - if (lst[i].Value == "]") { - return i - nIndex + 1; - } - } - return 1; - } - - private int CheckDataType(List lst, int nIndex) { - // Note: This function will not check if the lst[nIndex] is valid data type - // The current function treats lst[nIndex] directly as a data type. - int nTemp = this.GetNextSymbolIndex(lst, nIndex); - // Rule: DATA_TYPE NAME - //if (nTemp + 1 < lst.Count) { - if (m_hs_object.Contains(lst[nTemp].Value)) { - lst[nTemp].Type = SymbolType.KeyWord; - nTemp += this.CheckObject(lst, nTemp); - return nTemp - nIndex; - } else if (m_hs_type.Contains(lst[nTemp].Value)) { - lst[nTemp].Type = SymbolType.BuiltInType; - } else { // -> like "public int XXX{get; private set;}" - lst[nTemp].Type = m_hs_all_key.Contains(lst[nTemp].Value) ? SymbolType.KeyWord : SymbolType.CustomType; - } - if (nTemp + 1 < lst.Count && lst[nTemp + 1].Value == "<") { // so it's generic type like -> "xxx" - for (int j = nTemp + 2; j < lst.Count; j++) { - switch (lst[j].Value) { - case ".": - case ",": - continue; - case ">": - nTemp = j; - break; - default: - j += this.CheckDataType(lst, j) - 1; - continue; - } - break; - } - } - // so it's array like -> "xxx[]" - if (nTemp + 1 < lst.Count && lst[nTemp + 1].Value == "[") { - nTemp += this.GetArrayLength(lst, nTemp + 1); - } - //} - return nTemp - nIndex + 1; - } - - private void ProcessEqual(List lst, int nIndex) { - if (lst[nIndex].Value != "=") { - return; - } - if (nIndex + 1 < lst.Count && lst[nIndex + 1].Value == "=") { // == return - return; - } - if (--nIndex < 0) return; - // now lst[nIndex] is variable - if (this.CheckIsIdentifier(lst[nIndex].Value)) { // it's a variable -> "xxx =" - //lst[nIndex].Type = SymbolType.None; - } else { - return; - } - if (--nIndex < 0) return; - // now lst[nIndex] is data type - if (this.CheckIsIdentifier(lst[nIndex].Value)) { - lst[nIndex].Type = m_hs_type.Contains(lst[nIndex].Value) ? SymbolType.BuiltInType : SymbolType.CustomType; - return; - } - if (lst[nIndex].Value == "]") { // maybe is array -> "] xxx =" -> "xxx[] xxx =" - nIndex -= this.GetArrayLength(lst, nIndex); - } - if (lst[nIndex].Value == ">") { - nIndex -= this.GetGenericLength(lst, nIndex); - this.CheckDataType(lst, nIndex); - } - } - - private bool CheckIsIdentifier(string strText) { - return m_reg_w.Match(strText).Value.Length == strText.Length; - //char ch = strText[0]; - //bool bFlag = ch == '_'; - //bFlag |= ch >= 'a' && ch <= 'z'; - //bFlag |= ch >= 'A' && ch <= 'Z'; - //return bFlag; - } - - private bool CheckIsIdentifierChar(char ch) { - return !m_reg_W.IsMatch(ch.ToString()); - //if (this.CheckIsBoundary(ch)) return false; - //if (ch < '0') return false; - //if (ch > 'z' && ch < 256) return false; - //return true; - //switch (ch) { - // case ' ': - // case '\t': - // case '\r': - // case '\n': - // case - //} - } - - private bool CheckIsBoundary(char ch) { - switch (ch) { - case '.': - case ';': - case ',': - case '!': - case '=': - case '(': - case ')': - case '<': - case '>': - case '{': - case '}': - case '[': - case ']': - case '+': - case '-': - case '*': - case '/': - case '\\': - case '&': - case '|': - case '^': - case '~': - case '%': - case '?': - case ':': - return true; - } - return false; - } - - private bool CheckIsDeclare(List lst, int nIndex) { - // Rule: MODIFIER? DATA_TYPE NAME - int nTemp = nIndex; - while (nTemp < lst.Count && m_hs_modifier.Contains(lst[nTemp].Value)) { - nTemp++; //Igonre the modifier - } - nTemp = this.GetNextSymbolIndex(lst, nIndex); - // now lst[nTemp] is DATA_TYPE - if (!this.CheckIsIdentifier(lst[nTemp].Value)) { - return false; - } - if (nTemp + 1 < lst.Count && lst[nTemp + 1].Value == "<") { // generic - int nLen = this.GetGenericLength(lst, nTemp + 1); - if (nLen == 0) { - return false; - } - nTemp += nLen; - } - if (nTemp + 1 < lst.Count && lst[nTemp + 1].Value == "[") { // array - int nLen = this.GetArrayLength(lst, nTemp + 1); - if (nLen == 0) { - return false; - } - nTemp += nLen; - } - if (nTemp + 1 < lst.Count) { - return this.CheckIsIdentifier(lst[nTemp + 1].Value); // check the NAME - } - return true; - } - - private int GetNextSymbolIndex(List lst, int nIndex) { - // "xxx.xxx.xxx.xxx.XXX" - // will return XXX's index - int nTemp = nIndex; - while (nIndex + 1 < lst.Count && lst[nIndex + 1].Value == ".") { - if (nIndex + 2 < lst.Count && this.CheckIsIdentifier(lst[nIndex + 2].Value)) { - lst[nIndex + 2].Type = SymbolType.Property; - } - nIndex += 2; - } - if (nIndex >= lst.Count) nIndex -= 2; - if (nIndex < 0) nIndex = 0; - return nIndex; - } - - private int GetGenericLength(List lst, int nIndex) { - // such as: XXX or XXX> - int nCounter = 0; - if (lst[nIndex].Value == "<") { - for (int i = nIndex; i < lst.Count; i++) { - switch (lst[i].Value) { - case ".": - case ",": - continue; - case "<": - nCounter++; - continue; - case ">": - if (--nCounter == 0) { - return i - nIndex + 1; - } - continue; - default: - if (!this.CheckIsIdentifier(lst[i].Value)) { - return 0; - } - continue; - } - } - } else if (lst[nIndex].Value == ">") { - for (int i = nIndex; i >= 0; i--) { - switch (lst[i].Value) { - case ".": - case ",": - continue; - case ">": - nCounter++; - continue; - case "<": - if (--nCounter == 0) { - return nIndex - i + 1; - } - continue; - default: - if (!this.CheckIsIdentifier(lst[i].Value)) { - return 0; - } - continue; - } - } - } - return 0; - } - - private int GetArrayLength(List lst, int nIndex) { - // such as: [] or [,] or [,,,] or [][] - if (lst[nIndex].Value == "[") { - for (int i = nIndex; i < lst.Count; i++) { - switch (lst[i].Value) { - case ",": - continue; - case "]": - if (i + 1 < lst.Count && lst[i + 1].Value == "[") { - continue; - } - return i - nIndex + 1; - } - } - } else if (lst[nIndex].Value == "]") { - for (int i = nIndex; i >= 0; i--) { - switch (lst[i].Value) { - case ",": - continue; - case "[": - if (i - 1 >= 0 && lst[i - 1].Value == "]") { - continue; - } - return nIndex - i + 1; - } - } - } - return 0; - } - - private string GetComment1(string strText, int nIndex) { - for (int i = nIndex + 3; i < strText.Length; i++) { - if (strText[i] == '/' && strText[i - 1] == '*') { - return strText.Substring(nIndex, i - nIndex + 1); - } - } - return strText.Substring(nIndex); - } - - private string GetComment2(string strText, int nIndex) { - for (int i = nIndex + 2; i < strText.Length; i++) { - switch (strText[i]) { - case '\r': - case '\n': - return strText.Substring(nIndex, i - nIndex); - } - } - return strText.Substring(nIndex); - } - - private string GetString1(string strText, int nIndex) { - for (int i = nIndex + 2; i < strText.Length; i++) { - if (strText[i] == '"') { - if (i + 1 < strText.Length && strText[i + 1] == '"') { - i++; - continue; - } - return strText.Substring(nIndex, i - nIndex + 1); - } - } - return strText.Substring(nIndex); - } - - public string GetString2(string strText, int nIndex) { - for (int i = nIndex + 1; i < strText.Length; i++) { - if (strText[i] == '\\') { - i++; - continue; - } - if (strText[i] == '"') { - return strText.Substring(nIndex, i - nIndex + 1); - } - switch (strText[i]) { - case '\r': - case '\n': - return strText.Substring(nIndex, i - nIndex); - } - } - return strText.Substring(nIndex); - } - - public string GetChar(string strText, int nIndex) { - for (int i = nIndex + 1; i < strText.Length; i++) { - if (strText[i] == '\\') { - i++; - continue; - } - if (strText[i] == '\'') { - return strText.Substring(nIndex, i - nIndex + 1); - } - switch (strText[i]) { - case '\r': - case '\n': - return strText.Substring(nIndex, i - nIndex); - } - } - return strText.Substring(nIndex); - } - - public override void OnSelectionChanged(TextManager textManager, int nStart, int nLen) { } - - public override void OnTextChanged(TextManager textManager, List thrs) { - this.Init(textManager.GetText()); - } - - public override TextStyleRange GetStyleFromCharIndex(int nIndex) { - return TextStyleMonitor.GetStyleFromCharIndex(nIndex, m_lst_range); - //int nLeft = 0, nRight = m_lst_smb.Count - 1, nMid = 0; - //bool bFind = false; - //while (nLeft <= nRight) { - // nMid = (nLeft + nRight) >> 1; - // if (m_lst_smb[nMid].Index > nIndex) { - // nRight = nMid - 1; - // } else if (m_lst_smb[nMid].Index + m_lst_smb[nMid].Length <= nIndex) { - // nLeft = nMid + 1; - // } else { - // bFind = true; - // break; - // } - //} - //if (!bFind) { - // //return new TextStyleRange() { Index = nIndex, Length = 1, Style = new TextStyle() { ForeColor = this.DefaultColor } }; - //} - //var ret = new TextStyleRange() { - // Index = m_lst_smb[nMid].Index, - // Length = m_lst_smb[nMid].Length - //}; - //ret.Style.ForeColor = this.GetColorFromSymbolType(m_lst_smb[nMid].Type); - //return ret; - } - - private TextStyle GetColorFromSymbolType(SymbolType smbType) { - switch (smbType) { - case SymbolType.Comment: - return this.CommentStyle; - case SymbolType.DocComment: - return this.DocCommentStyle; - case SymbolType.KeyWord: - return this.KeyWordStyle; - case SymbolType.String: - return this.StringStyle; - case SymbolType.Operator: - return this.OperatorStyle; - case SymbolType.Delimiter: - return this.DelimiterStyle; - case SymbolType.Number: - return this.NumberStyle; - case SymbolType.BuiltInType: - return this.BuiltInTypeStyle; - case SymbolType.Property: - return this.PropertyStyle; - case SymbolType.CustomType: - return this.CustomTypeStyle; - case SymbolType.FunctionDecl: - return this.FunctionDeclStyle; - case SymbolType.FunctionCall: - return this.FunctionCallStyle; - case SymbolType.FunctionBuiltIn: - return this.FunctionBuiltInStyle; - } - return this.DefaultStyle; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/KeyWordStyleMonitor.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/KeyWordStyleMonitor.cs deleted file mode 100644 index 0305f09..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/KeyWordStyleMonitor.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; -using System.Text.RegularExpressions; - -namespace ST.Library.UI.STTextBox -{ - public class KeyWordStyleMonitor : TextStyleMonitor - { - private Regex m_reg_keywords; - private Regex m_reg_escape = new Regex(@"([\|\[\]\(\)\.\*\+\?\{\}\^\$\\])"); - - private Dictionary m_dic = new Dictionary(); - private List m_lst = new List(); - - public override void Init(string strText) { - m_lst.Clear(); - int nIndex = 0; - var ms = m_reg_keywords.Matches(strText); - foreach (Match m in ms) { - if (nIndex != m.Index) { - m_lst.Add(new TextStyleRange() { - Index = nIndex, - Length = m.Index - nIndex - }); - } - m_lst.Add(new TextStyleRange() { - Index = m.Index, - Length = m.Length, - Style = m_dic[m.Value] - }); - nIndex = m.Index + m.Length; - } - if (nIndex < strText.Length) { - m_lst.Add(new TextStyleRange() { - Index = nIndex, - Length = strText.Length - nIndex - }); - } - } - - public void Add(string strKeyWord, TextStyle style) { - if (m_dic.ContainsKey(strKeyWord)) { - m_dic[strKeyWord] = style; - } else { - m_dic.Add(strKeyWord, style); - } - this.InitRegex(); - } - - public void AddRangle(string[] strKeyWords, TextStyle style) { - foreach (var v in strKeyWords) { - if (m_dic.ContainsKey(v)) { - m_dic[v] = style; - } else { - m_dic.Add(v, style); - } - } - this.InitRegex(); - } - - public TextStyle Get(string strKeyWord) { - if (m_dic.ContainsKey(strKeyWord)) { - return m_dic[strKeyWord]; - } - return TextStyle.Empty; - } - - public bool Remove(string strKeyWord) { - if (!m_dic.ContainsKey(strKeyWord)) { - return false; - } - m_dic.Remove(strKeyWord); - this.InitRegex(); - return true; - } - - private void InitRegex() { - var arr = m_dic.Keys.ToArray(); - for (int i = 0; i < arr.Length; i++) { - arr[i] = m_reg_escape.Replace(arr[i], "\\$1"); - } - m_reg_keywords = new Regex("\\b(" + string.Join("|", arr) + ")\\b"); - } - - public override void OnSelectionChanged(TextManager textManager, int nStart, int nLen) { } - - public override void OnTextChanged(TextManager textManager, List thrs) { - this.Init(textManager.GetText()); - } - - public override TextStyleRange GetStyleFromCharIndex(int nIndex) { - return TextStyleMonitor.GetStyleFromCharIndex(nIndex, m_lst); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/LinkStyleMonitor.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/LinkStyleMonitor.cs deleted file mode 100644 index 4f3a27c..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/LinkStyleMonitor.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; - -using System.Drawing; - -namespace ST.Library.UI.STTextBox -{ - public class LinkStyleMonitor : ITextStyleMonitor - { - private Regex LinkRegex { get; set; } - public TextStyle Style { get; set; } - - private List m_lst; - - public LinkStyleMonitor() { - this.LinkRegex = new Regex(@"https?://[a-zA-Z0-9-./#?&%+_]+"); - this.Style = new TextStyle() { - ForeColor = Color.Blue, - UnderLineColor = Color.Blue, - FontStyle = FontStyle.Underline - }; - } - - public void Init(string strText) { - List lst = new List(); - foreach (Match m in this.LinkRegex.Matches(strText)) { - lst.Add(new TextStyleRange() { - Index = m.Index, - Length = m.Length, - Style = this.Style - }); - } - m_lst = TextStyleMonitor.FillDefaultStyle(lst, strText.Length, TextStyle.Empty); - } - - public void OnSelectionChanged(TextManager textManager, int nStart, int nLen) { } - - public void OnTextChanged(TextManager textManager, List thrs) { - this.Init(textManager.GetText()); - } - - public TextStyleRange GetStyleFromCharIndex(int nIndex) { - return TextStyleMonitor.GetStyleFromCharIndex(nIndex, m_lst); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/SelectionStyleMonitor.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/SelectionStyleMonitor.cs deleted file mode 100644 index 443d8dd..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/StyleMonitor/SelectionStyleMonitor.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Drawing; - -namespace ST.Library.UI.STTextBox -{ - public class SelectionStyleMonitor : ITextStyleMonitor - { - public TextStyle Style { get; set; } - - private static WordSplitter m_spliter = new WordSplitter(); - private List m_lst = new List(); - - public SelectionStyleMonitor() { - this.Style = new TextStyle() { - BackColor = Color.FromArgb(50, 255, 0, 0) - }; - } - - public void Init(string strText) { - //throw new NotImplementedException(); - } - - public void OnSelectionChanged(TextManager textManager, int nStart, int nLen) { - //throw new NotImplementedException() - m_lst.Clear(); - m_lst.Add(new TextStyleRange() { - Index = 0, - Length = textManager.TextLength, - Style = TextStyle.Empty - }); - if (nLen == 0) return; - var line = textManager.GetLineFromCharIndex(nStart); - string strKey = string.Empty; - m_spliter.Each(line.RawString, nStart - line.IndexOfFirstChar, (str, ns, nl) => { - if (ns + line.IndexOfFirstChar == nStart && nLen == nl) { - strKey = str.Substring(ns, nl); - } - return false; - }); - if (!string.IsNullOrEmpty(strKey)) { - string strText = textManager.GetText(); - List lst = new List(); - foreach (Match m in Regex.Matches(strText, "\\b" + strKey + "\\b")) { - lst.Add(new TextStyleRange() { - Index = m.Index, - Length = m.Length, - Style = this.Style - }); - } - m_lst = TextStyleMonitor.FillDefaultStyle(lst, strText.Length, TextStyle.Empty); - } - } - - public void OnTextChanged(TextManager textManager, List thrs) { - //throw new NotImplementedException(); - } - - public TextStyleRange GetStyleFromCharIndex(int nIndex) { - return TextStyleMonitor.GetStyleFromCharIndex(nIndex, m_lst); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextBoundary.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextBoundary.cs deleted file mode 100644 index 0817faf..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextBoundary.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public abstract class TextBoundary : ITextBoundary - { - public enum Type - { - Other, - Double_Quote, - Single_Quote, - Hebrew_Letter, - CR, - LF, - Newline, - Extend, - Regional_Indicator, - Format, - Katakana, - ALetter, - MidLetter, - MidNum, - MidNumLet, - Numeric, - ExtendNumLet, - ZWJ, - WSegSpace, - Extended_Pictographic, - Control, - SpacingMark, - L, - V, - T, - LV, - LVT, - Prepend, - E_Base, - E_Modifier, - Glue_After_Zwj, - E_Base_GAZ, - Custom_Property_Ascii - } - - protected struct RangeInfo - { - public int Start; - public int End; - public int Type; - } - - public List Split(string strText) { - List lst_result = new List(strText.Length); - this.SplitPrivate(strText, lst_result, 0, null, null); - return lst_result; - } - - public int GetCount(string strText) { - int nLen = this.SplitPrivate(strText, null, 0, null, null); - return nLen; - } - - public void Each(string strText, EachVoidCallBack cb) { - this.SplitPrivate(strText, null, 0, cb, null); - } - - public void Each(string strText, int nIndex, EachVoidCallBack cb) { - this.SplitPrivate(strText, null, nIndex, cb, null); - } - - public void Each(string strText, EachBoolCallBack cb) { - this.SplitPrivate(strText, null, 0, null, cb); - } - - public void Each(string strText, int nIndex, EachBoolCallBack cb) { - this.SplitPrivate(strText, null, nIndex, null, cb); - } - - public static int GetCodePoint(string strText, int nIndex) { - if (strText[nIndex] < '\uD800' || strText[nIndex] > '\uDFFF') { - return strText[nIndex]; - } - if (char.IsHighSurrogate(strText, nIndex)) { - if (nIndex + 1 >= strText.Length) { - return 0; - } - } else { - if (--nIndex < 0) { - return 0; - } - } - return ((strText[nIndex] & 0x03FF) << 10) + (strText[nIndex + 1] & 0x03FF) + 0x10000; - } - - private int SplitPrivate(string strText, List lst_result, int nIndexCurrent, EachVoidCallBack cb_void, EachBoolCallBack cb_bool) { - int nCounter = 0; - List lst_history_break_type = new List(); - if (string.IsNullOrEmpty(strText) || nIndexCurrent >= strText.Length) { - return 0; - } - int nIndexCharStart = 0, nCharLen = 0, nLastCharLen = 0; - int nCodePoint = 0; - int nLeftBreakType = 0, nRightBreakType = 0; - - while (nIndexCurrent < strText.Length && char.IsLowSurrogate(strText, nIndexCurrent)) { - nIndexCurrent++; - nCharLen++; - } - if (nCharLen != 0) { - nCounter++; - if (!this.CharCompleted(strText, nIndexCurrent - nCharLen, nCharLen, lst_result, cb_void, cb_bool)) { - return nCounter; - } - } - nIndexCharStart = nIndexCurrent; - nCodePoint = TextBoundary.GetCodePoint(strText, nIndexCurrent); - nLastCharLen = nCodePoint >= 0x10000 ? 2 : 1; // >= 0x10000 is double char - nLeftBreakType = this.GetBreakProperty(nCodePoint); - nIndexCurrent += nLastCharLen; - nCharLen = nLastCharLen; - lst_history_break_type.Add(nLeftBreakType); - while (nIndexCurrent < strText.Length) { - nCodePoint = TextBoundary.GetCodePoint(strText, nIndexCurrent); - nLastCharLen = nCodePoint >= 0x10000 ? 2 : 1; // >= 0x10000 is double char - nRightBreakType = this.GetBreakProperty(nCodePoint); - if (this.ShouldBreak(nRightBreakType, lst_history_break_type)) { - nCounter++; - if (!this.CharCompleted(strText, nIndexCharStart, nCharLen, lst_result, cb_void, cb_bool)) { - return nCounter; - } - nIndexCharStart = nIndexCurrent; - nCharLen = nLastCharLen; - lst_history_break_type.Clear(); - } else { - nCharLen += nLastCharLen; - } - lst_history_break_type.Add(nRightBreakType); - nIndexCurrent += nLastCharLen; - nLeftBreakType = nRightBreakType; - } - if (nCharLen != 0) { - nCounter++; - this.CharCompleted(strText, nIndexCharStart, nCharLen, lst_result, cb_void, cb_bool); - } - return nCounter; - } - - private bool CharCompleted(string strText, int nIndex, int nLen, List lst_result, EachVoidCallBack cb_void, EachBoolCallBack cb_bool) { - //return value...[true:continue]...[false:break] - if (lst_result != null) { - lst_result.Add(strText.Substring(nIndex, nLen)); - } - if (cb_void != null) { - cb_void(strText, nIndex, nLen); - } else if (cb_bool != null && !cb_bool(strText, nIndex, nLen)) { - return false; - } - return true; - } - - protected abstract bool ShouldBreak(int nRightBreakType, List lstHistoryBreakType); - - protected abstract int GetBreakProperty(int nCodePoint); - - protected static int BinarySearchRangeFromList(int nStart, int nEnd, int nValue, List lst) { - if (nEnd < nStart) { - return 0; - } - int nMid = nStart + (nEnd - nStart) / 2; - if (lst[nMid].Start > nValue) { - return TextBoundary.BinarySearchRangeFromList(nStart, nMid - 1, nValue, lst); - } else if (lst[nMid].End < nValue) { - return TextBoundary.BinarySearchRangeFromList(nMid + 1, nEnd, nValue, lst); - } else { - return lst[nMid].Type; - } - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextHistory.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextHistory.cs deleted file mode 100644 index 63a95e4..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextHistory.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public class TextHistory : ITextHistory - { - private int m_nIndex; - private int m_nCount; - private int m_nMax; - private TextHistoryRecord[][] m_arr; - - public TextHistory(int nCount) { - m_nMax = nCount; - m_arr = new TextHistoryRecord[nCount][]; - } - - public void SetHistory(TextHistoryRecord[] histories) { - if (m_nIndex == m_nMax) { - for (int i = 1; i < m_arr.Length; i++) { - m_arr[i - 1] = m_arr[i]; - } - m_nIndex--; - } - m_arr[m_nIndex++] = histories; - m_nCount = m_nIndex; - } - - public TextHistoryRecord[] GetUndo() { - if (m_nIndex == 0) { //not have history - return null; - } - return m_arr[--m_nIndex]; - } - - public TextHistoryRecord[] GetRedo() { - if (m_nIndex == m_nCount) { - return null; - } - return m_arr[m_nIndex++]; - } - - public void Clear() { - m_nIndex = m_nCount = 0; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextStyleMonitor.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextStyleMonitor.cs deleted file mode 100644 index 2e14fc5..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextStyleMonitor.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public abstract class TextStyleMonitor : ITextStyleMonitor - { - public static List FillDefaultStyle(List lst, int nTextLength, TextStyle style) { - List lstRet = new List(); - int nIndex = 0; - foreach (var tsr in lst) { - if (nIndex != tsr.Index) { - lstRet.Add(new TextStyleRange() { - Index = nIndex, - Length = tsr.Index - nIndex, - Style = style - }); - } - lstRet.Add(new TextStyleRange() { - Index = tsr.Index, - Length = tsr.Length, - Style = tsr.Style - }); - nIndex = tsr.Index + tsr.Length; - } - if (nIndex < nTextLength) { - lstRet.Add(new TextStyleRange() { - Index = nIndex, - Length = nTextLength - nIndex - }); - } - return lstRet; - } - - public static TextStyleRange GetStyleFromCharIndex(int nIndex, List lst) { - if (lst == null || lst.Count == 0) { - return TextStyleRange.Empty; - } - int nLeft = 0, nRight = lst.Count - 1, nMid = 0; - while (nLeft <= nRight) { - nMid = (nLeft + nRight) >> 1; - if (lst[nMid].Index > nIndex) { - nRight = nMid - 1; - } else if (lst[nMid].Index + lst[nMid].Length <= nIndex) { - nLeft = nMid + 1; - } else { - return lst[nMid]; - } - } - if (nIndex < lst[nMid].Index) { - if (nMid == 0) return new TextStyleRange() { Index = 0, Length = lst[0].Index }; - return new TextStyleRange() { - Index = lst[nMid - 1].Index + lst[nMid - 1].Length, - Length = lst[nMid].Index - lst[nMid - 1].Index - lst[nMid - 1].Length - }; - } - if (nMid == lst.Count - 1) return new TextStyleRange() { - Index = lst[nMid].Index + lst[nMid].Length, Length = int.MaxValue - }; - return new TextStyleRange() { - Index = lst[nMid].Index + lst[nMid].Length, - Length = lst[nMid + 1].Index - lst[nMid].Index - lst[nMid].Length - }; - } - - public abstract void Init(string strText); - public abstract void OnSelectionChanged(TextManager textManager, int nStart, int nLen); - public abstract void OnTextChanged(TextManager textManager, List thrs); - public abstract TextStyleRange GetStyleFromCharIndex(int nIndex); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/NoWrapTextView.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/NoWrapTextView.cs deleted file mode 100644 index 8d36c5e..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/NoWrapTextView.cs +++ /dev/null @@ -1,408 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; - -namespace ST.Library.UI.STTextBox -{ - public class NoWrapTextView : TextView - { - private struct NoWrapLineCache - { - public int Index; - public int Offset; - public override string ToString() { - return "[" + this.Index + "," + this.Offset + "]"; - } - } - - private int m_nMaxLineWidth; - //private HashSet m_hs_changed = new HashSet(); - private Dictionary> m_dic_nowrap_line = new Dictionary>(); - private StringFormat m_sf = new StringFormat(StringFormat.GenericTypographic) { - Alignment = StringAlignment.Far, - LineAlignment = StringAlignment.Center - }; - - public override void OnInitAllText() { - //m_hs_changed.Clear(); - m_dic_nowrap_line.Clear(); - var c = base.Core; - foreach (var line in c.TextManager) { - this.AddLine(line, c.ITextBoxRender); - } - } - - public override void OnLineAdded(ISTTextBoxRender render, TextManagerLineEventArgs e) { - this.AddLine(e.Line, render); - } - - public override void OnLineRemoved(ISTTextBoxRender render, TextManagerLineEventArgs e) { - //m_hs_changed.Remove(e.Line); - m_dic_nowrap_line.Remove(e.Line); - } - - public override void OnLineChanged(ISTTextBoxRender render, TextManagerLineEventArgs e) { - //m_hs_changed.Add(e.Line); - var c = base.Core; - int nElementIndex = 0; - var li = this.GetLineCacheFromIndex(e.Line, e.History.Index - e.Line.IndexOfFirstChar, out nElementIndex); - int nEachIndex = li.Index; - e.Line.Tag = li.Offset; - int nCounter = 0; - List lst = null; - if (m_dic_nowrap_line.ContainsKey(e.Line)) { - lst = m_dic_nowrap_line[e.Line]; - lst.RemoveRange(nElementIndex, lst.Count - nElementIndex); - } else { - lst = new List(); - } - c.IGraphemeSplitter.Each(e.Line.RawString, nEachIndex, (str, nStart, nLen) => { - string strChar = str.Substring(nStart, nLen); - if (nCounter++ % 500 == 0) { - lst.Add(new NoWrapLineCache() { - Offset = _LineWidth(e.Line), - Index = nStart - }); - } - e.Line.Tag = _LineWidth(e.Line) + c.GetStringWidth(strChar, c.GetStyleFromCharIndex(e.Line.IndexOfFirstChar + nStart), _LineWidth(e.Line)); - if (_LineWidth(e.Line) > m_nMaxLineWidth) { - m_nMaxLineWidth = _LineWidth(e.Line); - } - return true; - }); - if (lst.Count > 1) { - if (!m_dic_nowrap_line.ContainsKey(e.Line)) { - m_dic_nowrap_line.Add(e.Line, lst); - } - } - } - - public override int GetCurrentCharOffset() { - var c = base.Core; - return c.Caret.X - base.TextRectangle.X + c.Scroll.XOffset; - //throw new NotImplementedException(); - } - - public override FindInfo FindFromPoint(Point pt) { - var c = base.Core; - FindInfo fi = new FindInfo(); - int nXStart = base.TextRectangle.X; - int nX = nXStart - c.Scroll.XOffset, nIndexChar = 0, nCharWidth = 0; - - int nIndexLine = c.Scroll.YValue + ((pt.Y - base.TextRectangle.Y) / c.LineHeight);// c.ITextRender.GetFontHeight()); - if (nIndexLine >= c.TextManager.LineCount) {//Note: Count = 0;outofrange... - nIndexLine = c.TextManager.LineCount - 1; - } else if (nIndexLine < 0) { - nIndexLine = 0; - } - - TextLine line = c.TextManager[nIndexLine]; - fi.Line = line; - fi.IndexOfLine = nIndexLine; - int nElementIndex = 0; - var li = this.GetLineCacheFromOffset(line, c.Scroll.XOffset + (pt.X - base.TextRectangle.Left), out nElementIndex); - nIndexChar = li.Index; - nX += li.Offset; - //using (var dt = c.GetDrawingTools()) { - c.ITextBoxRender.BeginPaint(); - c.IGraphemeSplitter.Each(line.RawString, nIndexChar, (str, nStart, nLen) => { - if (str[nStart] == '\r') return false; - if (str[nStart] == '\n') return false; - string strChar = str.Substring(nStart, nLen); - nCharWidth = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), nX - base.TextRectangle.X + c.Scroll.XOffset); - if (nX + nCharWidth > pt.X) { - fi.Find = true; - if (pt.X - nX >= nCharWidth / 2) { - fi.IndexOfCharInLine = nIndexChar + nLen; - fi.Location = new Point(nX + nCharWidth, base.TextRectangle.Y + (nIndexLine - c.Scroll.YValue) * c.LineHeight); - } else { - fi.IndexOfCharInLine = nIndexChar; - fi.Location = new Point(nX, base.TextRectangle.Y + (nIndexLine - c.Scroll.YValue) * c.LineHeight); - } - return false; - } - nX += nCharWidth; - nIndexChar += nLen; - return true; - }); - c.ITextBoxRender.EndPaint(); - //} - if (!fi.Find) { - fi.IndexOfCharInLine = nIndexChar; - fi.Location = new Point(nX, base.TextRectangle.Y + (nIndexLine - c.Scroll.YValue) * c.LineHeight); - } - fi.Find = true; - return fi; - } - - public override FindInfo FindFromCharIndex(int nIndex) { - var c = base.Core; - int nIndexOfLine = c.TextManager.GetLineIndexFromCharIndex(nIndex); - TextLine stLine = c.TextManager[nIndexOfLine]; - if (stLine == null) { - return new FindInfo(); - } - return this.FindFromCharIndex(nIndexOfLine, nIndex - stLine.IndexOfFirstChar); - } - - private FindInfo FindFromCharIndex(int nIndexOfLine, int nIndex) { - var c = base.Core; - //using (var dt = base.Core.GetDrawingTools()) { - return this.FindFromCharIndex(c.ITextBoxRender, nIndexOfLine, nIndex); - //} - } - /// - /// - /// - /// - /// - /// Index of stLine - /// - private FindInfo FindFromCharIndex(ISTTextBoxRender render, int nIndexOfLine, int nIndex) { - var c = base.Core; - TextLine line = c.TextManager[nIndexOfLine]; - int nX = 0, nIndexEach = 0, nCharWidth; - int nXStart = base.TextRectangle.X; - nX = nXStart - c.Scroll.XOffset; - int nElementIndex = 0; - var li = this.GetLineCacheFromIndex(line, nIndex, out nElementIndex); - nIndexEach = li.Index; - nX += li.Offset; - c.IGraphemeSplitter.Each(line.RawString, nIndexEach, (str, nStart, nLen) => { - if (nStart >= nIndex) { - return false; - } - string strChar = str.Substring(nStart, nLen); - nCharWidth = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), nX - base.TextRectangle.X + c.Scroll.XOffset); - nX += nCharWidth; - return true; - }); - return new FindInfo() { - Line = line, - IndexOfLine = nIndexOfLine, - IndexOfCharInLine = nIndex, - Location = new Point(nX, base.TextRectangle.Y + (nIndexOfLine - c.Scroll.YValue) * c.LineHeight)// c.ITextRender.GetFontHeight()) - }; - } - - protected override void OnDrawLineSelectionBackground(ISTTextBoxRender render, TextLine line, int nLineIndex, STTextBoxSelectionInfo selection, int nY) { - var c = base.Core; - if (line.IndexOfFirstChar >= selection.EndIndex) { - return; - } - if (line.IndexOfFirstChar + line.RawString.Length <= selection.StartIndex) { - return; - } - int nLeft = base.TextRectangle.Left, nWidth = _LineWidth(line) - c.Scroll.XOffset; - if (line.IndexOfFirstChar < selection.StartIndex) { - nLeft = this.FindFromCharIndex(render, nLineIndex, c.Selection.StartIndex - line.IndexOfFirstChar).Location.X; - nWidth -= nLeft - base.TextRectangle.X; - } - if (selection.EndIndex <= line.IndexOfFirstChar + line.RawString.Length) { - nWidth = this.FindFromCharIndex(render, nLineIndex, c.Selection.EndIndex - line.IndexOfFirstChar).Location.X; - nWidth -= nLeft; - } - if (nLeft + nWidth > base.TextRectangle.Right) { - nWidth -= nLeft + nWidth - base.TextRectangle.Right; - } - render.FillRectangle(c.TextBox.SelectionColor, nLeft, nY, nWidth, c.LineHeight); - } - - protected override int OnDrawLine(ISTTextBoxRender render, TextLine line, int nX, int nY) { - var c = base.Core; - int nLineSpacing = c.TextBox.GetIntYSize(c.TextBox.LineSpacing) / 2; - int nIndexEach = 0; - Rectangle rect_char = new Rectangle(nX - c.Scroll.XOffset, nY, 0, c.LineHeight); - if (string.IsNullOrEmpty(line.RawString)) { - return c.LineHeight; - } - int nElementIndex = 0, nCharSpacing = c.TextBox.GetIntXSize(c.TextBox.CharSpacing);// / 2; - var li = this.GetLineCacheFromOffset(line, c.Scroll.XOffset, out nElementIndex); - nIndexEach = li.Index; - rect_char.X += li.Offset; - int nCurrentCharIndex = line.IndexOfFirstChar + nIndexEach; - - bool bIsEmoji = false; - c.IGraphemeSplitter.Each(line.RawString, nIndexEach, (str, nStart, nLen) => { - string strChar = str.Substring(nStart, nLen); - if (c.IsEmoji(strChar)) { - bIsEmoji = true; - rect_char.Width = c.FontHeight; - } else { - if (nLen > 1 && strChar[nLen - 1] >= '\uFE00' && strChar[nLen - 1] <= '\uFE0F') { - strChar = str.Substring(nStart, nLen - 1); - } - bIsEmoji = false; - rect_char.Width = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), rect_char.X - base.TextRectangle.X + c.Scroll.XOffset) + nCharSpacing; - } - nCurrentCharIndex = line.IndexOfFirstChar + nStart; - if (rect_char.Right <= base.TextRectangle.Left) { - rect_char.X += rect_char.Width; - return true; - } - if (bIsEmoji) { - bool bSelected = nCurrentCharIndex >= c.Selection.StartIndex && nCurrentCharIndex < c.Selection.EndIndex; - c.IEmojiRender.DrawEmoji(render, strChar, rect_char.X + (nCharSpacing >> 1), nY + nLineSpacing, c.FontHeight, bSelected); - } else { - c.ITextBoxRender.DrawString(strChar, c.GetStyleFromCharIndex(nCurrentCharIndex), rect_char); - } - if (rect_char.Right > base.TextRectangle.Right) { - return false; - } - rect_char.X += rect_char.Width; - return true; - }); - return c.LineHeight; - } - - protected override void OnDrawHead(ISTTextBoxRender render, int nStartLineIndex) { - render.FillRectangle(base.HeadBackgroundColor, base.HeadRectangle); - var c = base.Core; - Rectangle rect_linenumber = new Rectangle(base.HeadRectangle.X, base.HeadRectangle.Y, base.LineNumberWidth - c.TextBox.GetIntXSize(10), c.LineHeight); - //Rectangle rect_status = new Rectangle(base.HeadRectangle.Right - c.TextBox.GetIntXSize(base.LineStatusWidth), rect_linenumber.Y, c.TextBox.GetIntXSize(base.LineStatusWidth), c.LineHeight); - for (int i = nStartLineIndex; i < c.TextManager.LineCount; i++) { - if (base.ShowLineNumber) { - render.DrawString((i + 1).ToString(), c.TextBox.Font, base.LineNumberColor, rect_linenumber, m_sf); - } - //if (base.ShowLineStatus) { - // if (m_hs_changed.Contains(c.TextManager[i])) { - // render.FillRectangle(base.LineStatusColor, rect_status); - // } - //} - rect_linenumber.Y += c.LineHeight; - //rect_status.Y += c.LineHeight; - if (rect_linenumber.Y >= base.HeadRectangle.Bottom) break; - } - } - - public override int GetLineIndexFromYScroll(int nYValue) { - //if (nYValue > base.Core.Scroll.MaxYValue) { - // return base.Core.Scroll.MaxYValue; - //} - //if (nYValue < 0) { - // return 0; - //} - return nYValue; - } - - private int _LineWidth(TextLine line) { - if (line.Tag == null) { - return 0; - } - if (line.Tag is int) { - return (int)line.Tag; - } - return 0; - } - - private void AddLine(TextLine line, ISTTextBoxRender render) { - //m_hs_changed.Add(line); - var c = base.Core; - int nCounter = 0; - List lst = new List(); - c.IGraphemeSplitter.Each(line.RawString, (str, nStart, nLen) => { - string strChar = str.Substring(nStart, nLen); - if (nCounter++ % 500 == 0) { - lst.Add(new NoWrapLineCache() { - Offset = _LineWidth(line), - Index = nStart - }); - } - line.Tag = _LineWidth(line) + c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), _LineWidth(line)); - if (_LineWidth(line) > m_nMaxLineWidth) { - m_nMaxLineWidth = _LineWidth(line); - } - return true; - }); - if (lst.Count > 1) { - m_dic_nowrap_line.Add(line, lst); - } - } - - private NoWrapLineCache GetLineCacheFromOffset(TextLine line, int nOffset) { - int n = 0; - return this.GetLineCacheFromOffset(line, nOffset, out n); - } - - private NoWrapLineCache GetLineCacheFromOffset(TextLine line, int nOffset, out int nElementIndex) { - nElementIndex = 0; - if (!m_dic_nowrap_line.ContainsKey(line)) { - return new NoWrapLineCache(); - } - var lst = m_dic_nowrap_line[line]; - int nLeft = 0, nRight = lst.Count - 1; - while (nLeft <= nRight) { - nElementIndex = (nLeft + nRight) >> 1; - if (nOffset >= lst[nElementIndex].Offset) { - if (nElementIndex + 1 >= lst.Count || nOffset < lst[nElementIndex + 1].Offset) { - return lst[nElementIndex]; - } - nLeft = nElementIndex + 1; - } else { - nRight = nElementIndex - 1; - } - } - return lst[nElementIndex]; - } - - private NoWrapLineCache GetLineCacheFromIndex(TextLine line, int nIndex) { - int n = 0; - return this.GetLineCacheFromIndex(line, nIndex, out n); - } - - private NoWrapLineCache GetLineCacheFromIndex(TextLine line, int nIndex, out int nElementIndex) { - nElementIndex = 0; - if (!m_dic_nowrap_line.ContainsKey(line)) { - return new NoWrapLineCache(); - } - var lst = m_dic_nowrap_line[line]; - int nLeft = 0, nRight = lst.Count - 1; - while (nLeft <= nRight) { - nElementIndex = (nLeft + nRight) >> 1; - if (nIndex >= lst[nElementIndex].Index) { - if (nElementIndex + 1 >= lst.Count || nIndex < lst[nElementIndex + 1].Index) { - return lst[nElementIndex]; - } - nLeft = nElementIndex + 1; - } else { - nRight = nElementIndex - 1; - } - } - return lst[nElementIndex]; - } - - public override void SetCaretPostion(int nCharIndex) { - var c = this.Core; - int nLineIndex = c.TextManager.GetLineIndexFromCharIndex(nCharIndex); - var line = c.TextManager[nLineIndex]; - var cache = this.GetLineCacheFromIndex(line, nCharIndex - line.IndexOfFirstChar); - int nWidth = cache.Offset, nIndexTemp = line.IndexOfFirstChar + cache.Index; - c.ITextBoxRender.BeginPaint(); - c.IGraphemeSplitter.Each(line.RawString, cache.Index, (str, nStart, nLen) => { - if (nStart >= nCharIndex - line.IndexOfFirstChar) return false; - string strChar = str.Substring(nStart, nLen); - nWidth += c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), nWidth); - nIndexTemp = line.IndexOfFirstChar + nStart + nLen; - return true; - }); - c.ITextBoxRender.EndPaint(); - c.Caret.IndexOfLine = nLineIndex; - c.Caret.IndexOfChar = nIndexTemp; - this.SetCaretPostion(nWidth - c.Scroll.XOffset + this.TextRectangle.X, this.TextRectangle.Y + (nLineIndex - c.Scroll.YValue) * c.LineHeight); - } - - public override void OnCalcScroll(STTextBoxScrollInfo scrollInfo) { - var c = base.Core; - c.Scroll.MaxYValue = c.TextManager.LineCount - base.TextRectangle.Height / c.LineHeight + 2; - if (c.Scroll.MaxYValue < 0) { - c.Scroll.MaxYValue = 0; - } - c.Scroll.MaxXValue = (m_nMaxLineWidth - base.TextRectangle.Width) / c.Scroll.XIncrement + 2; - if (c.Scroll.MaxXValue < 0) { - c.Scroll.MaxXValue = 0; - } - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/SingleTextView.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/SingleTextView.cs deleted file mode 100644 index e4c0739..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/SingleTextView.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; - -namespace ST.Library.UI.STTextBox -{ - public class SingleTextView : NoWrapTextView - { - public SingleTextView() { - base.ShowLineNumber = false; - } - - public override void OnTextStartChange(ISTTextBoxRender render, TextManagerTextEventArgs e) { - base.OnTextStartChange(render, e); - for (int i = 0; i < e.TextHistoryRecord.Count; i++) { - var r = e.TextHistoryRecord[i]; - r.NewText = r.NewText.Replace("\r", "").Replace("\n", ""); - e.TextHistoryRecord[i] = r; - } - } - - public override void OnCalcTextRectangle() { - base.OnCalcTextRectangle(); - Rectangle rect_text = base.TextRectangle; - Rectangle rect_head = base.HeadRectangle; - rect_text.Height = base.Core.LineHeight + base.Core.TextBox.LineSpacing; - rect_text.Y = (base.Core.TextBox.Height - rect_text.Height) / 2; - rect_head.Height = rect_text.Height; - rect_head.Y = rect_text.Y; - base.TextRectangle = rect_text; - base.HeadRectangle = rect_head; - } - - public override void OnCalcScroll(STTextBoxScrollInfo scrollInfo) { - base.OnCalcScroll(scrollInfo); - var c = base.Core; - c.Scroll.MaxYValue = c.TextManager.LineCount - base.TextRectangle.Height / c.LineHeight; - if (c.Scroll.MaxYValue < 0) { - c.Scroll.MaxYValue = 0; - } - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/TextView.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/TextView.cs deleted file mode 100644 index 26717a1..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/TextView.cs +++ /dev/null @@ -1,261 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using CPF; - -namespace ST.Library.UI.STTextBox -{ - public abstract class TextView : ITextView - { - private bool _ShowLineNumber = true; - - public bool ShowLineNumber { - get { return _ShowLineNumber; } - set { - if (value == _ShowLineNumber) return; - _ShowLineNumber = value; - if (this.Core == null) return; - this.OnCalcTextRectangle(); - this.OnCalcScroll(this.Core.Scroll); - this.SetCaretPostion(this.Core.Caret.IndexOfChar); - this.Invalidate(); - } - } - - private Color _HeadBackgroundColor = Color.FromArgb(120, Color.LightGray); - - public Color HeadBackgroundColor { - get { return _HeadBackgroundColor; } - set { _HeadBackgroundColor = value; } - } - - private Color _TextViewBackgroundColor = Color.Transparent; - - public Color TextViewBackgroundColor { - get { return _TextViewBackgroundColor; } - set { _TextViewBackgroundColor = value; } - } - - private Color _LineNumberColor = Color.Black; - - public Color LineNumberColor { - get { return _LineNumberColor; } - set { _LineNumberColor = value; } - } - - public int LineNumberWidth { get; private set; } - - public Rectangle HeadRectangle { get; protected set; } - public Rectangle TextRectangle { get; protected set; } - - protected STTextBox.Core Core { get; private set; } - - public abstract int GetCurrentCharOffset(); - - public void Init(STTextBox.Core textBoxCore) { - this.Core = textBoxCore; - this.OnInitAllText(); - } - - public abstract void SetCaretPostion(int nCharIndex); - public virtual FindInfo SetCaretPostion(Point pt) { - var fi = this.FindFromPoint(pt); - if (!fi.Find) { - return fi; - } - this.Core.Caret.CopyFromFindInfo(fi); - this.SetCaretPostion(fi.Location.X, fi.Location.Y); - return fi; - } - - protected virtual void SetCaretPostion(int nX, int nY) { - var caret = this.Core.Caret; - caret.X = nX; - caret.Y = nY; - if (!this.TextRectangle.Contains(new Point(nX, nY))) { - if (!caret.Visable) return; - Win32.HideCaret(this.Core.TextBox.Handle); - caret.Visable = false; - } else { - Win32.SetCaretPos(nX, nY); - if (!caret.Visable) { - caret.Visable = true; - Win32.ShowCaret(this.Core.TextBox.Handle); - } - } - } - - public virtual void ScrollXToMuosePoint(int nX) { - var c = this.Core; - nX -= c.ViewRectangle.X; - nX -= c.Scroll.HThumbRect.Width / 2; - if (nX < 0) { - nX = 0; - } else if (nX + c.Scroll.HThumbRect.Width > c.Scroll.HBackRect.Width) { - nX = c.Scroll.HBackRect.Width - c.Scroll.HThumbRect.Width; - } - int nTemp = (int)((float)nX / (c.Scroll.HBackRect.Width - c.Scroll.HThumbRect.Width) * c.Scroll.MaxXValue); - c.Scroll.XValue = nTemp; - this.SetCaretPostion(c.Caret.IndexOfChar); - } - - public virtual void ScrollYToMousePoint(int nY) { - var c = this.Core; - nY -= c.ViewRectangle.Y; - nY -= c.Scroll.VThumbRect.Height / 2; - if (nY < 0) { - nY = 0; - } else if (nY + c.Scroll.VThumbRect.Height > c.Scroll.VBackRect.Height) { - nY = c.Scroll.VBackRect.Height - c.Scroll.VThumbRect.Height; - } - int nTemp = (int)((float)nY / (c.Scroll.VBackRect.Height - c.Scroll.VThumbRect.Height) * c.Scroll.MaxYValue); - c.Scroll.YValue = nTemp; - this.SetCaretPostion(c.Caret.IndexOfChar); - } - - public virtual bool ScrollToCaret() { - var c = this.Core; - bool flag = false; - Point pt = c.Caret.Location; - if (pt.Y < this.TextRectangle.Y) { - c.Scroll.YValue += (pt.Y - this.TextRectangle.Y) / c.LineHeight; - flag = true; - } else if (pt.Y + c.LineHeight > this.TextRectangle.Bottom) { - int nIncrement = (int)Math.Ceiling((pt.Y + c.LineHeight - this.TextRectangle.Bottom) / (float)c.LineHeight); - c.Scroll.YValue += nIncrement; - flag = true; - } - if (pt.X >= this.TextRectangle.Right) { - int nIncrement = (int)Math.Ceiling((pt.X - this.TextRectangle.Right + 1) / (float)c.Scroll.XIncrement); - c.Scroll.XValue += nIncrement; - flag = true; - } else if (pt.X < this.TextRectangle.X) { - int nIncrement = ((int)Math.Ceiling((this.TextRectangle.X - pt.X) / (float)c.Scroll.XIncrement)); - c.Scroll.XValue -= nIncrement; - flag = true; - } - if (flag) { - this.SetCaretPostion(c.Caret.IndexOfChar); - } - return flag; - } - - public Point ControlToView(Point pt) { - var c = this.Core; - pt.X = pt.X - this.TextRectangle.X + this.Core.Scroll.XOffset; - pt.Y = pt.Y - c.TextBox.GetIntYSize(c.ViewRectangle.Y) + c.Scroll.YValue * c.LineHeight; - return pt; - } - - public Point ViewToControl(Point pt) { - var c = this.Core; - pt.X = pt.X - c.Scroll.XOffset + this.TextRectangle.X; - pt.Y = pt.Y - c.Scroll.YValue * c.LineHeight + c.TextBox.GetIntYSize(c.ViewRectangle.Y); - return pt; - } - - public void Invalidate() { - if (this.Core != null && this.Core.TextBox != null) { - this.Core.TextBox.Invalidate(); - } - } - - public void OnDrawView(ISTTextBoxRender render) { - var c = this.Core; - int nXStart = this.TextRectangle.X; - if (this._TextViewBackgroundColor.A > 0) { // fill background - Rectangle rect = c.ViewRectangle; - rect.X = this.HeadRectangle.Right; - rect.Width -= this.HeadRectangle.Width; - this.OnFillTextViewBackground(render, rect); - } - render.SetClip(this.TextRectangle); - //this.OnDrawSelectionBackground(dt, c.Selection); // fill selection background - // start draw line - int nY = this.TextRectangle.Y; - int nStartLineIndex = this.GetLineIndexFromYScroll(c.Scroll.YValue); - for (int i = nStartLineIndex; i < c.TextManager.LineCount; i++) { - TextLine line = c.TextManager[i]; - if (!c.Selection.IsEmptySelection) { - this.OnDrawLineSelectionBackground(render, line, i, c.Selection, nY); - } - nY += this.OnDrawLine(render, line, nXStart, nY); - if (nY > c.ViewRectangle.Bottom) break; - } - // start draw line number - render.SetClip(this.HeadRectangle); - this.OnDrawHead(render, nStartLineIndex); - render.ResetClip(); - } - - protected virtual void OnFillTextViewBackground(ISTTextBoxRender render, Rectangle rect) { - render.FillRectangle(this.TextViewBackgroundColor, rect); - } - - protected virtual void OnFillHeadBackground(ISTTextBoxRender render, Rectangle rect) { - render.FillRectangle(this._HeadBackgroundColor, rect); - } - - protected abstract void OnDrawLineSelectionBackground(ISTTextBoxRender render, TextLine line, int nLineIndex, STTextBoxSelectionInfo selection, int nY); - protected abstract void OnDrawHead(ISTTextBoxRender render, int nStartLineIndex); - protected abstract int OnDrawLine(ISTTextBoxRender render, TextLine line, int nX, int nY); - - public virtual void OnResize(EventArgs e) { } - - public virtual void OnTextStartChange(ISTTextBoxRender render, TextManagerTextEventArgs e) { } - public virtual void OnTextChanged(ISTTextBoxRender render, TextManagerTextEventArgs e) { } - public virtual void OnLineCountChanged(ISTTextBoxRender render, EventArgs e) { } - public abstract void OnInitAllText(); - public abstract void OnLineAdded(ISTTextBoxRender render, TextManagerLineEventArgs e); - public abstract void OnLineRemoved(ISTTextBoxRender render, TextManagerLineEventArgs e); - public abstract void OnLineChanged(ISTTextBoxRender render, TextManagerLineEventArgs e); - public abstract int GetLineIndexFromYScroll(int nYValue); - public abstract FindInfo FindFromPoint(Point pt); - public abstract FindInfo FindFromCharIndex(int nIndex); - - public void OnSetCursor(MouseEventArgs e) { - var c = this.Core; - if (c.ViewRectangle.Contains(e.Location) && e.X < this.TextRectangle.X) { - c.Scroll.HoverScrollBar = STTextBoxScrollInfo.ScrollBarType.None; - this.SetCursor(Cursors.Arrow); - } else { - c.Scroll.HoverScrollBar = STTextBoxScrollInfo.ScrollBarType.None; - this.SetCursor(Cursors.IBeam); - } - } - - private bool SetCursor(Cursor c) { - if (this.Core.TextBox.Cursor == c) { - return false; - } - this.Core.TextBox.Cursor = c; - return true; - } - - public virtual void OnCalcTextRectangle() { - var c = this.Core; - - string strLineCount = c.TextManager.LineCount.ToString(); - this.Core.ITextBoxRender.BeginPaint(); - this.LineNumberWidth = c.GetStringWidth("".PadLeft(strLineCount.Length, '8'), TextStyle.Empty, 0) + c.TextBox.GetIntXSize(20); - c.ITextBoxRender.EndPaint(); - - Rectangle rect = c.ViewRectangle; - Rectangle rect_temp = new Rectangle() { - X = rect.X, - Y = rect.Y, - Height = rect.Height - }; - if (this._ShowLineNumber) { - rect_temp.Width += this.LineNumberWidth; - } - this.HeadRectangle = rect_temp; - rect_temp.X = this.HeadRectangle.Right + this.Core.TextBox.GetIntXSize(2); - rect_temp.Width = rect.Width - rect_temp.X - this.Core.TextBox.GetIntXSize(2) + rect.X; - this.TextRectangle = rect_temp; - } - - public abstract void OnCalcScroll(STTextBoxScrollInfo scrollInfo); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/WrapTextView.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/WrapTextView.cs deleted file mode 100644 index c554257..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/TextView/WrapTextView.cs +++ /dev/null @@ -1,720 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; - -namespace ST.Library.UI.STTextBox -{ - public class WrapTextView : TextView - { - public Color LineNumberGuideColor { get; set; } - public bool ShowLineNumberGuide { get; set; } - - public enum Method { Char, Word }; - public enum Alignment { Left, Center, Right/*, Justify*/ } - private enum SubLineStatus - { - Start, - Middle, - End, - None - } - private class WrapLineInfo - { - public int ScreenLineOffset { get; set; } - public List SubLines { get; set; } - - public override string ToString() { - return "(" /*+ this.IndexOfLine + "," +*/ + this.ScreenLineOffset + "," + this.SubLines.Count + ")"; - } - } - - private struct WordInfo - { - public int Width; - public int CharCount; - } - - private struct SubLineInfo - { - public int Index; // The first char index of sub-line - public int Length; // The text length - public int CharCount; // Grapheme count - public int Width; // Sub-Line width - public int X; // The X position to draw - //public float ExtraWidth; // The char space width - } - - public Method WrapMethod { get; private set; } - public Alignment WrapAlignment { get; private set; } - - private int m_n_line_count_start_change = 0; - private HashSet m_hs_changed_temp = new HashSet(); - private StringFormat m_sf = new StringFormat(StringFormat.GenericTypographic) { - Alignment = StringAlignment.Far, - LineAlignment = StringAlignment.Center - }; - - public WrapTextView() : this(Method.Word, Alignment.Left) { } - public WrapTextView(Method method, Alignment alignment) { - this.WrapMethod = method; - this.WrapAlignment = alignment; - this.ShowLineNumberGuide = true; - this.LineNumberGuideColor = Color.Magenta; - } - - public void SetWrap(Method method, Alignment alignment) { - this.WrapMethod = method; - this.WrapAlignment = alignment; - if (this.Core == null) return; - this.OnInitAllText(); - } - - public override int GetCurrentCharOffset() { - var c = base.Core; - TextLine line = c.Caret.Line; - var tag = _Tag(line); - int nSubIndex = 0; - int nCharIndex = c.Caret.IndexOfChar - line.IndexOfFirstChar; - foreach (var sub in tag.SubLines) { - if (nCharIndex >= sub.Index && nCharIndex <= sub.Index + sub.Length) { - break; - } - nSubIndex++; - } - var subLine = tag.SubLines[nSubIndex]; - return c.Caret.X - base.TextRectangle.X - subLine.X; - } - - public override void OnInitAllText() { - var c = base.Core; - c.ITextBoxRender.BeginPaint(); - foreach (var line in base.Core.TextManager) { - this.CacheLine(line, base.Core.ITextBoxRender); - } - c.ITextBoxRender.EndPaint(); - c.TextBox.Invalidate(); - } - - public override void OnLineAdded(ISTTextBoxRender render, TextManagerLineEventArgs e) { - this.CacheLine(e.Line, render); - m_hs_changed_temp.Add(e.Line); - } - - private WrapLineInfo _Tag(TextLine line) { - WrapLineInfo ret = null; - if (line.Tag == null || !(line.Tag is WrapLineInfo)) { - line.Tag = ret = new WrapLineInfo(); - return ret; - } - return (WrapLineInfo)line.Tag; - } - - private void CacheLine(TextLine line, ISTTextBoxRender render) { - var tag = _Tag(line); - tag.SubLines = this.GetCache(line, render); - } - - public override void OnLineRemoved(ISTTextBoxRender render, TextManagerLineEventArgs e) { - //m_hs_changed.Remove(e.Line); - m_hs_changed_temp.Remove(e.Line); - } - - public override void OnLineChanged(ISTTextBoxRender render, TextManagerLineEventArgs e) { - //m_hs_changed.Add(e.Line); - m_hs_changed_temp.Add(e.Line); - } - - private List GetCache(TextLine line, ISTTextBoxRender render) { - var c = base.Core; - List lst = null; - if (this.WrapMethod == Method.Char) { - lst = new List(); - this.GetCacheByChar(line, render, lst, 0, 0); - } else { - lst = this.GetCacheByWord(line, render); - } - for (int i = 0; i < lst.Count; i++) { - var sub = lst[i]; - switch (this.WrapAlignment) { - case Alignment.Center: - sub.X = (base.TextRectangle.Width - sub.Width) >> 1; - if (sub.Length > 0) { - switch (line.RawString[sub.Index + sub.Length - 1]) { - case '\r': - case '\n': - sub.X += c.ITextBoxRender.GetSpaceWidth() / 2; - break; - } - } - break; - case Alignment.Right: - sub.X = base.TextRectangle.Width - sub.Width - c.ITextBoxRender.GetSpaceWidth(); - if (sub.Length > 0) { - switch (line.RawString[sub.Index]) { - case '\r': - case '\n': - if (i == 0) break; - var temp = lst[i - 1]; - temp.Width += sub.Width; - temp.Length += sub.Length; - temp.CharCount += 1; - lst[i - 1] = temp; - lst.RemoveAt(i); - return lst; - - } - switch (line.RawString[sub.Index + sub.Length - 1]) { - case '\r': - case '\n': - sub.X += c.ITextBoxRender.GetSpaceWidth(); - break; - } - break; - } - break; - } - lst[i] = sub; - } - return lst; - } - - private int GetCacheByChar(TextLine line, ISTTextBoxRender render, List lst, int nStartIndex, int nWidth) { - var c = base.Core; - int nLineWidth = nWidth, nCharWidth = 0; - int nSubStrLen = 0; - int nCharCount = 0; - int nTextViewLineWidth = base.TextRectangle.Width; - if (this.WrapAlignment != Alignment.Left) { - nTextViewLineWidth -= c.ITextBoxRender.GetSpaceWidth(); - } - c.IGraphemeSplitter.Each(line.RawString, nStartIndex, (str, nStart, nLen) => { - string strChar = str.Substring(nStart, nLen); - if (c.IsEmoji(strChar)) { - nCharWidth = c.FontHeight; - } else { - nCharWidth = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), nLineWidth); - } - if (nLineWidth + nCharWidth >= nTextViewLineWidth) { - lst.Add(new SubLineInfo() { - Index = nStartIndex, - Length = nSubStrLen, - CharCount = nCharCount, - Width = nLineWidth - }); - nCharCount = 1; - nStartIndex += nSubStrLen; - nSubStrLen = nLen; - nLineWidth = nCharWidth; - } else { - nSubStrLen += nLen; - nLineWidth += nCharWidth; - nCharCount++; - } - return true; - }); - lst.Add(new SubLineInfo() { - Index = nStartIndex, - Length = nSubStrLen, - CharCount = nCharCount, - Width = nLineWidth - }); - return nLineWidth; - } - - private List GetCacheByWord(TextLine line, ISTTextBoxRender render) { - var c = base.Core; - int nCharCount = 0, nCharCountTemp = 0; - int nLineWidth = 0; - int nSubStrLen = 0, nIndexStart = 0; - List lst = new List(); - int nTextViewLineWidth = base.TextRectangle.Width; - if (this.WrapAlignment != Alignment.Left) { - nTextViewLineWidth -= c.ITextBoxRender.GetSpaceWidth(); - } - //if (this.Alignment == UI.STTextBox.Alignment.Justify) { - // nTextViewLineWidth -= c.ITextRender.GetSpaceWidth(); - //} - c.IWordSplitter.Each(line.RawString, (str, nStart, nLen) => { - string strWord = str.Substring(nStart, nLen); - nCharCountTemp = 0; - var wi = this.GetWordInfo(line, render, strWord, nStart, nLineWidth); - if (wi.Width >= nTextViewLineWidth) { - int nCharWidth = 0; - c.IGraphemeSplitter.Each(strWord, (s, ns, nl) => { - string strChar = s.Substring(ns, nl); - if (c.IsEmoji(strChar)) { - nCharWidth = c.FontHeight; - } else { - nCharWidth = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), nLineWidth); - } - nCharCountTemp++; - if (nLineWidth + nCharWidth >= nTextViewLineWidth) { - lst.Add(new SubLineInfo() { - Index = nIndexStart, - Length = nSubStrLen, - CharCount = nCharCount, - Width = nLineWidth - }); - nIndexStart += nSubStrLen; - nSubStrLen = nl; - nLineWidth = nCharWidth; - nCharCount = nCharCountTemp; - } else { - nSubStrLen += nl; - nLineWidth += nCharWidth; - nCharCount += nCharCountTemp; - } - }); - return true; - } - nCharCountTemp += wi.CharCount; - if (nLineWidth + wi.Width >= nTextViewLineWidth) { - lst.Add(new SubLineInfo() { - Index = nIndexStart, - Length = nSubStrLen, - CharCount = nCharCount, - Width = nLineWidth - }); - nIndexStart += nSubStrLen; - nSubStrLen = nLen; - nLineWidth = wi.Width; - nCharCount = nCharCountTemp; - } else { - nSubStrLen += nLen; - nLineWidth += wi.Width; - nCharCount += nCharCountTemp; - } - return true; - }); - lst.Add(new SubLineInfo() { - Index = nIndexStart, - Length = nSubStrLen, - CharCount = nCharCount, - Width = nLineWidth - }); - return lst; - } - - private WordInfo GetWordInfo(TextLine line, ISTTextBoxRender render, string strWord, int nIndex, int nLeftWidth) { - var c = base.Core; - int nWordWidth = 0; - int nCharCount = 0; - c.IGraphemeSplitter.Each(strWord, (s, ns, nl) => { - string strChar = s.Substring(ns, nl); - if (c.IsEmoji(strChar)) { - nWordWidth += c.FontHeight; - } else { - nWordWidth += c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nIndex), nLeftWidth + nWordWidth); - } - nCharCount++; - }); - return new WordInfo() { Width = nWordWidth, CharCount = nCharCount }; - } - - public override void OnTextChanged(ISTTextBoxRender render, TextManagerTextEventArgs e) { - base.OnTextChanged(render, e); - var c = base.Core; - var m = c.TextManager; - int nIndexMin = int.MaxValue, nLineIndex = 0; - if (m.LineCount.ToString().Length != m_n_line_count_start_change.ToString().Length) { - foreach (var line in m) this.CacheLine(line, render); - m_hs_changed_temp.Clear(); - nIndexMin = 0; - } else { - foreach (var v in e.TextHistoryRecord) { - if (v.Index < nIndexMin) nIndexMin = v.Index; - nLineIndex = m.GetLineIndexFromCharIndex(v.Index); - var line = m[nLineIndex]; - if (m_hs_changed_temp.Contains(line)) { - this.CacheLine(line, render); - m_hs_changed_temp.Remove(line); - } - } - } - foreach (var line in m_hs_changed_temp) this.CacheLine(line, render); - nLineIndex = m.GetLineIndexFromCharIndex(nIndexMin); - for (int i = nLineIndex + 1; i < m.LineCount; i++) { - var tag_prev = _Tag(m[i - 1]); - _Tag(m[i]).ScreenLineOffset = tag_prev.ScreenLineOffset + tag_prev.SubLines.Count; - } - } - - public override void OnTextStartChange(ISTTextBoxRender render, TextManagerTextEventArgs e) { - m_hs_changed_temp.Clear(); - m_n_line_count_start_change = base.Core.TextManager.LineCount; - } - - public override FindInfo FindFromPoint(Point pt) { - var c = base.Core; - FindInfo fi = new FindInfo(); - int nXStart = base.TextRectangle.X; - float nX = 0;// nXStart - c.Scroll.XOffset; - int nIndexChar = 0, nCharWidth = 0; - int nYOffset = ((pt.Y - base.TextRectangle.Y) / c.LineHeight); - int nYValue = c.Scroll.YValue + nYOffset; - if (nYValue < 0) nYValue = 0; - int nIndexLine = this.GetLineIndexFromYScroll(nYValue); - TextLine line = c.TextManager[nIndexLine]; - var tag = _Tag(line); - //SubLineInfo subLine = tag.SubLines[0]; - if (nYValue >= tag.ScreenLineOffset + tag.SubLines.Count) { - nYOffset -= nYValue - tag.ScreenLineOffset - tag.SubLines.Count + 1; - } - //if (tag.ScreenLineOffset < nYValue) { - var temp = nYValue - tag.ScreenLineOffset; - if (temp >= tag.SubLines.Count) { - temp = tag.SubLines.Count - 1; - } - var subLine = tag.SubLines[temp]; - //} - //nX += subLine.X; - fi.Line = line; - fi.IndexOfLine = nIndexLine; - //var nXXX = subLine.ExtraWidth * 2; - c.ITextBoxRender.BeginPaint(); - c.IGraphemeSplitter.Each(line.RawString.Substring(subLine.Index, subLine.Length), nIndexChar, (str, nStart, nLen) => { - if (str[nStart] == '\r') return false; - if (str[nStart] == '\n') return false; - string strChar = str.Substring(nStart, nLen); - nCharWidth = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), (int)nX/* - base.TextRectangle.X + c.Scroll.XOffset*/); - //nCharWidth += (int)nXXX; - if (nX + subLine.X + base.TextRectangle.X + nCharWidth > pt.X) { - fi.Find = true; - if (pt.X - base.TextRectangle.X - subLine.X - nX >= nCharWidth / 2) { - fi.IndexOfCharInLine = subLine.Index + nIndexChar + nLen; - fi.Location = new Point((int)nX + nCharWidth + base.TextRectangle.X + subLine.X, base.TextRectangle.Y + nYOffset * c.LineHeight); - } else { - fi.IndexOfCharInLine = subLine.Index + nIndexChar; - fi.Location = new Point((int)nX + base.TextRectangle.X + subLine.X, base.TextRectangle.Y + nYOffset * c.LineHeight); - } - return false; - } - nX += nCharWidth; - nIndexChar += nLen; - return true; - }); - c.ITextBoxRender.EndPaint(); - if (!fi.Find) { - fi.IndexOfCharInLine = subLine.Index + nIndexChar; - fi.Location = new Point((int)nX + base.TextRectangle.X + subLine.X, base.TextRectangle.Y + nYOffset * c.LineHeight); - } - fi.Find = true; - //Console.WriteLine("->>>>>>>>>>>>>>>>>>>>>" + line.RawString.Substring(subLine.Index, subLine.Length) + " -- " + fi.IndexOfChar); - return fi; - } - - public override FindInfo FindFromCharIndex(int nIndex) { - var c = base.Core; - int nIndexOfLine = c.TextManager.GetLineIndexFromCharIndex(nIndex); - TextLine stLine = c.TextManager[nIndexOfLine]; - if (stLine == null) {// TODO: stLine will not be null - return new FindInfo(); - } - return this.FindFromCharIndex(nIndexOfLine, nIndex - stLine.IndexOfFirstChar); - } - - private FindInfo FindFromCharIndex(int nIndexOfLine, int nIndex) { - var c = base.Core; - return this.FindFromCharIndex(c.ITextBoxRender, nIndexOfLine, nIndex); - } - /// - /// - /// - /// - /// - /// Index of stLine - /// - private FindInfo FindFromCharIndex(ISTTextBoxRender render, int nIndexOfLine, int nIndex) { - var c = base.Core; - TextLine line = c.TextManager[nIndexOfLine]; - int nX = base.TextRectangle.X; - int nCharWidth = 0; - var tag = _Tag(line); - int nSubIndex = 0; - foreach (var sub in tag.SubLines) { - if (nIndex >= sub.Index && nIndex < sub.Index + sub.Length) { - break; - } - nSubIndex++; - } - var subLine = tag.SubLines[nSubIndex]; - c.IGraphemeSplitter.Each(line.RawString.Substring(subLine.Index, subLine.Length), (str, nStart, nLen) => { - if (subLine.Index + nStart >= nIndex) { - return false; - } - string strChar = str.Substring(nStart, nLen); - nCharWidth = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + subLine.Index + nStart), nX - base.TextRectangle.X + c.Scroll.XOffset); - nX += nCharWidth; - return true; - }); - return new FindInfo() { - Line = line, - IndexOfLine = nIndexOfLine, - IndexOfCharInLine = nIndex, - Location = new Point((int)nX + subLine.X, base.TextRectangle.Y + (tag.ScreenLineOffset + nSubIndex - c.Scroll.YValue) * c.LineHeight) - }; - } - - protected override int OnDrawLine(ISTTextBoxRender render, TextLine line, int nX, int nY) { - var c = base.Core; - int nRet = 0; - int nLineSpacing = c.TextBox.GetIntYSize(c.TextBox.LineSpacing) / 2; - //nY += c.TextBox.GetIntYSize(c.TextBox.LineSpacing) / 2; - float nXStart = 0; - int nIndexEach = 0, nCharWidth; - if (string.IsNullOrEmpty(line.RawString)) { - return c.LineHeight; - } - int nCharSpacing = c.TextBox.GetIntXSize(c.TextBox.CharSpacing) / 2; - int nCurrentCharIndex = line.IndexOfFirstChar + nIndexEach; - Rectangle rect_char = new Rectangle(0, nY, 0, c.LineHeight); - var tag = _Tag(line); - var temp = tag.ScreenLineOffset < c.Scroll.YValue ? c.Scroll.YValue - tag.ScreenLineOffset : 0; - for (int i = temp; i < tag.SubLines.Count; i++) { - var subLine = tag.SubLines[i]; - nXStart = nX + subLine.X; - rect_char.Y = nY; - rect_char.X = nX + subLine.X; - bool bIsEmoji = false; - TextStyleRange tsi = TextStyleRange.Empty; - c.IGraphemeSplitter.Each(line.RawString.Substring(subLine.Index, subLine.Length), nIndexEach, (str, nStart, nLen) => { - nCurrentCharIndex = line.IndexOfFirstChar + subLine.Index + nStart; - string strChar = str.Substring(nStart, nLen); - if (c.IsEmoji(strChar)) { - bIsEmoji = true; - nCharWidth = c.FontHeight; - } else { - if (nLen > 1 && strChar[nLen - 1] >= '\uFE00' && strChar[nLen - 1] <= '\uFE0F') { - strChar = str.Substring(nStart, nLen - 1); - } - bIsEmoji = false; - nCharWidth = c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), rect_char.X - subLine.X - base.TextRectangle.X) + nCharSpacing; - } - if (nXStart + nCharWidth <= base.TextRectangle.Left) { - nXStart += nCharWidth; - return true; - } - rect_char.Width = nCharWidth; - if (bIsEmoji) { - bool bSelected = nCurrentCharIndex >= c.Selection.StartIndex && nCurrentCharIndex < c.Selection.EndIndex; - c.IEmojiRender.DrawEmoji(render, strChar, rect_char.X + (nCharSpacing >> 1), nY + nLineSpacing, c.FontHeight, bSelected); - } else { - c.ITextBoxRender.DrawString(strChar, c.GetStyleFromCharIndex(nCurrentCharIndex), rect_char); - } - rect_char.X += rect_char.Width; - nXStart += nCharWidth; - if (rect_char.X >= base.TextRectangle.Right) { - return false; - } - return true; - }); - nY += c.LineHeight; - nRet += c.LineHeight; - if (nY >= base.TextRectangle.Bottom) break; - } - return nRet; - } - - protected override void OnDrawHead(ISTTextBoxRender render, int nStartLineIndex) { - var c = base.Core; - TextLine line = c.TextManager[nStartLineIndex]; - var tag = _Tag(line); - var temp = tag.ScreenLineOffset < c.Scroll.YValue ? c.Scroll.YValue - tag.ScreenLineOffset : 0; - - render.FillRectangle(base.HeadBackgroundColor, base.HeadRectangle); - - var clr_temp = Color.FromArgb(base.LineNumberColor.A / 3, base.LineNumberColor); - int nY = base.HeadRectangle.Y; - this.DrawHeadLine(render, line, this.GetSubLineStatus(tag.SubLines.Count, temp), nStartLineIndex + 1, base.LineNumberColor, nY); - nY += c.LineHeight; - for (int i = temp + 1; i < tag.SubLines.Count; i++) { - if (nY >= base.HeadRectangle.Bottom) return; - this.DrawHeadLine(render, line, this.GetSubLineStatus(tag.SubLines.Count, i), nStartLineIndex + 1, clr_temp, nY); - nY += c.LineHeight; - } - - for (int i = nStartLineIndex + 1; i < c.TextManager.LineCount; i++) { - line = c.TextManager[i]; - tag = _Tag(line); - this.DrawHeadLine(render, line, this.GetSubLineStatus(tag.SubLines.Count, 0), i + 1, base.LineNumberColor, nY); - nY += c.LineHeight; - for (int j = 1; j < tag.SubLines.Count; j++) { - if (nY >= base.HeadRectangle.Bottom) return; - this.DrawHeadLine(render, line, this.GetSubLineStatus(tag.SubLines.Count, j), i + 1, clr_temp, nY); - nY += c.LineHeight; - } - } - } - - private void DrawHeadLine(ISTTextBoxRender render, TextLine line, SubLineStatus status, int nShowNumber, Color clr, int nY) { - var c = base.Core; - //int nStatusWidth = c.TextBox.GetIntXSize(base.LineStatusWidth); - Rectangle rect_linenumber = new Rectangle(base.HeadRectangle.X, nY, base.LineNumberWidth - c.TextBox.GetIntXSize(10), c.LineHeight); - //Rectangle rect_status = new Rectangle(base.HeadRectangle.Right - nStatusWidth, nY, nStatusWidth, c.LineHeight); - Rectangle rect_temp = new Rectangle(base.HeadRectangle.X + c.TextBox.GetIntXSize(5), nY, c.TextBox.GetIntXSize(1), c.LineHeight); - if (this.ShowLineNumberGuide) { - var clr_temp = this.LineNumberGuideColor; - switch (status) { - case SubLineStatus.Start: - rect_temp.Y += c.LineHeight / 2; - rect_temp.Height -= rect_temp.Y - nY; - render.FillRectangle(clr_temp, rect_temp.Right, rect_temp.Y, rect_temp.Width * 3, rect_temp.Width); - break; - //case SubLineStatus.Middle: - case SubLineStatus.End: - rect_temp.Height -= c.LineHeight / 2; - render.FillRectangle(clr_temp, rect_temp.Right, rect_temp.Bottom - rect_temp.Width, rect_temp.Width * 3, rect_temp.Width); - break; - case SubLineStatus.None: - rect_temp.Y += rect_temp.Width; - rect_temp.Height -= rect_temp.Width * 2; - rect_temp.Width = c.TextBox.GetIntXSize(4); - clr_temp = Color.FromArgb(clr_temp.A / 3, clr_temp); - break; - } - render.FillRectangle(clr_temp, rect_temp); - } - render.DrawString(nShowNumber.ToString(), c.TextBox.Font, clr, rect_linenumber, m_sf); - //if (base.ShowLineStatus) { - // if (m_hs_changed.Contains(line)) { - // render.FillRectangle(base.LineStatusColor, rect_status); - // } - //} - } - - private SubLineStatus GetSubLineStatus(int nSubLineCount, int nIndex) { - if (nSubLineCount == 1) { - return SubLineStatus.None; - } else if (nIndex == 0) { - return SubLineStatus.Start; - } else if (nIndex == nSubLineCount - 1) { - return SubLineStatus.End; - } else { - return SubLineStatus.Middle; - } - } - - public override int GetLineIndexFromYScroll(int nYValue) { - var m = base.Core.TextManager; - int nLeft = 0, nRight = m.LineCount - 1, nMid = 0; - while (nLeft <= nRight) { - nMid = (nLeft + nRight) >> 1; - var tag = _Tag(m[nMid]); - if (nYValue < tag.ScreenLineOffset) { - nRight = nMid - 1; - } else if (nYValue >= tag.ScreenLineOffset + tag.SubLines.Count) { - nLeft = nMid + 1; - } else { - return nMid; - } - } - if (nMid < 0) return 0; - if (nMid >= m.LineCount) return m.LineCount - 1; - return nMid; - } - - public override void SetCaretPostion(int nCharIndex) { - var c = this.Core; - int nLineIndex = c.TextManager.GetLineIndexFromCharIndex(nCharIndex); - var line = c.TextManager[nLineIndex]; - int nWidth = 0, nTempCharIndex = 0, nSubLineIndex = 0; - var tag = _Tag(line); - - foreach (var v in tag.SubLines) { - nTempCharIndex = line.IndexOfFirstChar + v.Index; - if (nCharIndex >= nTempCharIndex && nCharIndex < nTempCharIndex + v.Length) { - break; - } - nSubLineIndex++; - } - if (nSubLineIndex >= tag.SubLines.Count) { - nSubLineIndex = tag.SubLines.Count - 1; - } - nTempCharIndex = nCharIndex; - var subLine = tag.SubLines[nSubLineIndex]; - c.ITextBoxRender.BeginPaint(); - c.IGraphemeSplitter.Each(line.RawString, subLine.Index, (str, nStart, nLen) => { - if (nStart >= nCharIndex - line.IndexOfFirstChar) return false; - string strChar = str.Substring(nStart, nLen); - nWidth += c.GetStringWidth(strChar, c.GetStyleFromCharIndex(line.IndexOfFirstChar + nStart), nWidth); - nTempCharIndex = line.IndexOfFirstChar + nStart + nLen; - return true; - }); - c.ITextBoxRender.EndPaint(); - c.Caret.Line = line; - c.Caret.IndexOfLine = nLineIndex; - c.Caret.IndexOfChar = nTempCharIndex; - this.SetCaretPostion((int)nWidth + this.TextRectangle.X + subLine.X, this.TextRectangle.Y + (tag.ScreenLineOffset + nSubLineIndex - c.Scroll.YValue) * c.LineHeight); - } - - protected override void OnDrawLineSelectionBackground(ISTTextBoxRender render, TextLine line, int nLineIndex, STTextBoxSelectionInfo selection, int nY) { - var c = base.Core; - int nRet = 0; - //nY += c.TextBox.GetIntYSize(c.TextBox.LineSpacing) / 2; - if (string.IsNullOrEmpty(line.RawString)) { - return; - } - int nCharSpacing = c.TextBox.GetIntXSize(c.TextBox.CharSpacing) / 2; - var tag = _Tag(line); - var temp = tag.ScreenLineOffset < c.Scroll.YValue ? c.Scroll.YValue - tag.ScreenLineOffset : 0; - for (int i = temp; i < tag.SubLines.Count; i++) { - var subLine = tag.SubLines[i]; - if (line.IndexOfFirstChar + subLine.Index >= selection.EndIndex) { - return; - } - if (line.IndexOfFirstChar + subLine.Index + subLine.Length <= selection.StartIndex) { - if (nY >= base.TextRectangle.Bottom) break; - nY += c.LineHeight; - nRet += c.LineHeight; - continue; - } - int nLeft = base.TextRectangle.X + subLine.X, nWidth = subLine.Width; - if (selection.StartIndex > line.IndexOfFirstChar + subLine.Index) { - nLeft = this.FindFromCharIndex(render, nLineIndex, selection.StartIndex - line.IndexOfFirstChar).Location.X; - nWidth -= nLeft - base.TextRectangle.X - subLine.X; - } - if (selection.EndIndex < line.IndexOfFirstChar + subLine.Index + subLine.Length) { - int nCurrentIndex = line.IndexOfFirstChar + subLine.Index; - nWidth = this.FindFromCharIndex(render, nLineIndex, selection.EndIndex - line.IndexOfFirstChar).Location.X; - nWidth -= nLeft; - } - render.FillRectangle(c.TextBox.SelectionColor, nLeft, nY, nWidth, c.LineHeight); - nY += c.LineHeight; - nRet += c.LineHeight; - if (nY >= base.TextRectangle.Bottom) break; - } - } - - public override void OnResize(EventArgs e) { - base.OnResize(e); - var c = base.Core; - int nLineOffset = 0; - c.ITextBoxRender.BeginPaint(); - foreach (TextLine line in c.TextManager) { - var tag = _Tag(line); - tag.ScreenLineOffset = nLineOffset; - tag.SubLines = this.GetCache(line, c.ITextBoxRender); - nLineOffset += tag.SubLines.Count; - } - c.ITextBoxRender.EndPaint(); - //this.ResizeScroll(); - //this.SetCaretPostion(c.Caret.IndexOfChar); - } - - public override void OnCalcScroll(STTextBoxScrollInfo scrollInfo) { - var c = base.Core; - var m = c.TextManager; - var tag = _Tag(m[m.LineCount - 1]); - c.Scroll.MaxYValue = tag.ScreenLineOffset + tag.SubLines.Count - base.TextRectangle.Height / c.LineHeight + 2; - if (c.Scroll.MaxYValue < 0) { - c.Scroll.MaxYValue = 0; - } - if (c.Scroll.YValue > c.Scroll.MaxYValue) { - c.Scroll.YValue = c.Scroll.MaxYValue; - } - //this.SetCaretPostion(c.Caret.IndexOfChar); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/WordSplitter.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/WordSplitter.cs deleted file mode 100644 index 0ea19f4..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Implementation/WordSplitter.cs +++ /dev/null @@ -1,3323 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public class WordSplitter : TextBoundary - { - // The following variable values do not have a fixed value. Just a FLAG. Just like enumeration. - public const int Other = 0; - public const int Double_Quote = 1; - public const int Single_Quote = 2; - public const int Hebrew_Letter = 3; - public const int CR = 4; - public const int LF = 5; - public const int Newline = 6; - public const int Extend = 7; - public const int Regional_Indicator = 8; - public const int Format = 9; - public const int Katakana = 10; - public const int ALetter = 11; - public const int MidLetter = 12; - public const int MidNum = 13; - public const int MidNumLet = 14; - public const int Numeric = 15; - public const int ExtendNumLet = 16; - public const int ZWJ = 17; - public const int WSegSpace = 18; - public const int Extended_Pictographic = 19; - public const int Custom_Property_Ascii = 20; - - private static int[] m_arr_cache_break_type; - private static Dictionary m_dic_cache_break_type; - private static List m_lst_code_range = new List(); - - static WordSplitter() { - // Cc [2] .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x0000B, End = 0x0000C, Type = Newline }); - // Nd [10] DIGIT ZERO..DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00030, End = 0x00039, Type = Numeric }); - // L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x00041, End = 0x0005A, Type = ALetter }); - // L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x00061, End = 0x0007A, Type = ALetter }); - // L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS - m_lst_code_range.Add(new RangeInfo() { Start = 0x000C0, End = 0x000D6, Type = ALetter }); - // L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS - m_lst_code_range.Add(new RangeInfo() { Start = 0x000D8, End = 0x000F6, Type = ALetter }); - // L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x000F8, End = 0x001BA, Type = ALetter }); - // L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN - m_lst_code_range.Add(new RangeInfo() { Start = 0x001BC, End = 0x001BF, Type = ALetter }); - // Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK - m_lst_code_range.Add(new RangeInfo() { Start = 0x001C0, End = 0x001C3, Type = ALetter }); - // L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL - m_lst_code_range.Add(new RangeInfo() { Start = 0x001C4, End = 0x00293, Type = ALetter }); - // L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00295, End = 0x002AF, Type = ALetter }); - // Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP - m_lst_code_range.Add(new RangeInfo() { Start = 0x002B0, End = 0x002C1, Type = ALetter }); - // Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD - m_lst_code_range.Add(new RangeInfo() { Start = 0x002C2, End = 0x002C5, Type = ALetter }); - // Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON - m_lst_code_range.Add(new RangeInfo() { Start = 0x002C6, End = 0x002D1, Type = ALetter }); - // Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x002D2, End = 0x002D7, Type = ALetter }); - // Sk [2] MODIFIER LETTER RHOTIC HOOK..MODIFIER LETTER CROSS ACCENT - m_lst_code_range.Add(new RangeInfo() { Start = 0x002DE, End = 0x002DF, Type = ALetter }); - // Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP - m_lst_code_range.Add(new RangeInfo() { Start = 0x002E0, End = 0x002E4, Type = ALetter }); - // Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x002E5, End = 0x002EB, Type = ALetter }); - // Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW - m_lst_code_range.Add(new RangeInfo() { Start = 0x002EF, End = 0x002FF, Type = ALetter }); - // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X - m_lst_code_range.Add(new RangeInfo() { Start = 0x00300, End = 0x0036F, Type = Extend }); - // L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00370, End = 0x00373, Type = ALetter }); - // L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00376, End = 0x00377, Type = ALetter }); - // L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x0037B, End = 0x0037D, Type = ALetter }); - // L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS - m_lst_code_range.Add(new RangeInfo() { Start = 0x00388, End = 0x0038A, Type = ALetter }); - // L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0038E, End = 0x003A1, Type = ALetter }); - // L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x003A3, End = 0x003F5, Type = ALetter }); - // L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA - m_lst_code_range.Add(new RangeInfo() { Start = 0x003F7, End = 0x00481, Type = ALetter }); - // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00483, End = 0x00487, Type = Extend }); - // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x00488, End = 0x00489, Type = Extend }); - // L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER - m_lst_code_range.Add(new RangeInfo() { Start = 0x0048A, End = 0x0052F, Type = ALetter }); - // L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x00531, End = 0x00556, Type = ALetter }); - // Po [3] ARMENIAN APOSTROPHE..ARMENIAN EXCLAMATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0055A, End = 0x0055C, Type = ALetter }); - // L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00560, End = 0x00588, Type = ALetter }); - // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG - m_lst_code_range.Add(new RangeInfo() { Start = 0x00591, End = 0x005BD, Type = Extend }); - // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT - m_lst_code_range.Add(new RangeInfo() { Start = 0x005C1, End = 0x005C2, Type = Extend }); - // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT - m_lst_code_range.Add(new RangeInfo() { Start = 0x005C4, End = 0x005C5, Type = Extend }); - // Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV - m_lst_code_range.Add(new RangeInfo() { Start = 0x005D0, End = 0x005EA, Type = Hebrew_Letter }); - // Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD - m_lst_code_range.Add(new RangeInfo() { Start = 0x005EF, End = 0x005F2, Type = Hebrew_Letter }); - // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00600, End = 0x00605, Type = Format }); - // Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR - m_lst_code_range.Add(new RangeInfo() { Start = 0x0060C, End = 0x0060D, Type = MidNum }); - // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00610, End = 0x0061A, Type = Extend }); - // Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00620, End = 0x0063F, Type = ALetter }); - // Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x00641, End = 0x0064A, Type = ALetter }); - // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x0064B, End = 0x0065F, Type = Extend }); - // Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00660, End = 0x00669, Type = Numeric }); - // Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x0066E, End = 0x0066F, Type = ALetter }); - // Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00671, End = 0x006D3, Type = ALetter }); - // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN - m_lst_code_range.Add(new RangeInfo() { Start = 0x006D6, End = 0x006DC, Type = Extend }); - // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x006DF, End = 0x006E4, Type = Extend }); - // Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x006E5, End = 0x006E6, Type = ALetter }); - // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON - m_lst_code_range.Add(new RangeInfo() { Start = 0x006E7, End = 0x006E8, Type = Extend }); - // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM - m_lst_code_range.Add(new RangeInfo() { Start = 0x006EA, End = 0x006ED, Type = Extend }); - // Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V - m_lst_code_range.Add(new RangeInfo() { Start = 0x006EE, End = 0x006EF, Type = ALetter }); - // Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x006F0, End = 0x006F9, Type = Numeric }); - // Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x006FA, End = 0x006FC, Type = ALetter }); - // Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH - m_lst_code_range.Add(new RangeInfo() { Start = 0x00712, End = 0x0072F, Type = ALetter }); - // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH - m_lst_code_range.Add(new RangeInfo() { Start = 0x00730, End = 0x0074A, Type = Extend }); - // Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0074D, End = 0x007A5, Type = ALetter }); - // Mn [11] THAANA ABAFILI..THAANA SUKUN - m_lst_code_range.Add(new RangeInfo() { Start = 0x007A6, End = 0x007B0, Type = Extend }); - // Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x007C0, End = 0x007C9, Type = Numeric }); - // Lo [33] NKO LETTER A..NKO LETTER JONA RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x007CA, End = 0x007EA, Type = ALetter }); - // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x007EB, End = 0x007F3, Type = Extend }); - // Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE - m_lst_code_range.Add(new RangeInfo() { Start = 0x007F4, End = 0x007F5, Type = ALetter }); - // Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x00800, End = 0x00815, Type = ALetter }); - // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH - m_lst_code_range.Add(new RangeInfo() { Start = 0x00816, End = 0x00819, Type = Extend }); - // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A - m_lst_code_range.Add(new RangeInfo() { Start = 0x0081B, End = 0x00823, Type = Extend }); - // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x00825, End = 0x00827, Type = Extend }); - // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00829, End = 0x0082D, Type = Extend }); - // Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN - m_lst_code_range.Add(new RangeInfo() { Start = 0x00840, End = 0x00858, Type = ALetter }); - // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00859, End = 0x0085B, Type = Extend }); - // Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00860, End = 0x0086A, Type = ALetter }); - // Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT - m_lst_code_range.Add(new RangeInfo() { Start = 0x00870, End = 0x00887, Type = ALetter }); - // Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00889, End = 0x0088E, Type = ALetter }); - // Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00890, End = 0x00891, Type = Format }); - // Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00898, End = 0x0089F, Type = Extend }); - // Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x008A0, End = 0x008C8, Type = ALetter }); - // Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x008CA, End = 0x008E1, Type = Extend }); - // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x008E3, End = 0x00902, Type = Extend }); - // Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00904, End = 0x00939, Type = ALetter }); - // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x0093E, End = 0x00940, Type = Extend }); - // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00941, End = 0x00948, Type = Extend }); - // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00949, End = 0x0094C, Type = Extend }); - // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW - m_lst_code_range.Add(new RangeInfo() { Start = 0x0094E, End = 0x0094F, Type = Extend }); - // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00951, End = 0x00957, Type = Extend }); - // Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00958, End = 0x00961, Type = ALetter }); - // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00962, End = 0x00963, Type = Extend }); - // Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00966, End = 0x0096F, Type = Numeric }); - // Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00972, End = 0x00980, Type = ALetter }); - // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00982, End = 0x00983, Type = Extend }); - // Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x00985, End = 0x0098C, Type = ALetter }); - // Lo [2] BENGALI LETTER E..BENGALI LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x0098F, End = 0x00990, Type = ALetter }); - // Lo [22] BENGALI LETTER O..BENGALI LETTER NA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00993, End = 0x009A8, Type = ALetter }); - // Lo [7] BENGALI LETTER PA..BENGALI LETTER RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x009AA, End = 0x009B0, Type = ALetter }); - // Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x009B6, End = 0x009B9, Type = ALetter }); - // Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x009BE, End = 0x009C0, Type = Extend }); - // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x009C1, End = 0x009C4, Type = Extend }); - // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x009C7, End = 0x009C8, Type = Extend }); - // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x009CB, End = 0x009CC, Type = Extend }); - // Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x009DC, End = 0x009DD, Type = ALetter }); - // Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x009DF, End = 0x009E1, Type = ALetter }); - // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x009E2, End = 0x009E3, Type = Extend }); - // Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x009E6, End = 0x009EF, Type = Numeric }); - // Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL - m_lst_code_range.Add(new RangeInfo() { Start = 0x009F0, End = 0x009F1, Type = ALetter }); - // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A01, End = 0x00A02, Type = Extend }); - // Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A05, End = 0x00A0A, Type = ALetter }); - // Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A0F, End = 0x00A10, Type = ALetter }); - // Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A13, End = 0x00A28, Type = ALetter }); - // Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A2A, End = 0x00A30, Type = ALetter }); - // Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A32, End = 0x00A33, Type = ALetter }); - // Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A35, End = 0x00A36, Type = ALetter }); - // Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A38, End = 0x00A39, Type = ALetter }); - // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A3E, End = 0x00A40, Type = Extend }); - // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A41, End = 0x00A42, Type = Extend }); - // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A47, End = 0x00A48, Type = Extend }); - // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A4B, End = 0x00A4D, Type = Extend }); - // Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A59, End = 0x00A5C, Type = ALetter }); - // Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A66, End = 0x00A6F, Type = Numeric }); - // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A70, End = 0x00A71, Type = Extend }); - // Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A72, End = 0x00A74, Type = ALetter }); - // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A81, End = 0x00A82, Type = Extend }); - // Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A85, End = 0x00A8D, Type = ALetter }); - // Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A8F, End = 0x00A91, Type = ALetter }); - // Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00A93, End = 0x00AA8, Type = ALetter }); - // Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AAA, End = 0x00AB0, Type = ALetter }); - // Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AB2, End = 0x00AB3, Type = ALetter }); - // Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AB5, End = 0x00AB9, Type = ALetter }); - // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00ABE, End = 0x00AC0, Type = Extend }); - // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AC1, End = 0x00AC5, Type = Extend }); - // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AC7, End = 0x00AC8, Type = Extend }); - // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00ACB, End = 0x00ACC, Type = Extend }); - // Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AE0, End = 0x00AE1, Type = ALetter }); - // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AE2, End = 0x00AE3, Type = Extend }); - // Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AE6, End = 0x00AEF, Type = Numeric }); - // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00AFA, End = 0x00AFF, Type = Extend }); - // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B02, End = 0x00B03, Type = Extend }); - // Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B05, End = 0x00B0C, Type = ALetter }); - // Lo [2] ORIYA LETTER E..ORIYA LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B0F, End = 0x00B10, Type = ALetter }); - // Lo [22] ORIYA LETTER O..ORIYA LETTER NA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B13, End = 0x00B28, Type = ALetter }); - // Lo [7] ORIYA LETTER PA..ORIYA LETTER RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B2A, End = 0x00B30, Type = ALetter }); - // Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B32, End = 0x00B33, Type = ALetter }); - // Lo [5] ORIYA LETTER VA..ORIYA LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B35, End = 0x00B39, Type = ALetter }); - // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B41, End = 0x00B44, Type = Extend }); - // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B47, End = 0x00B48, Type = Extend }); - // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B4B, End = 0x00B4C, Type = Extend }); - // Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B55, End = 0x00B56, Type = Extend }); - // Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B5C, End = 0x00B5D, Type = ALetter }); - // Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B5F, End = 0x00B61, Type = ALetter }); - // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B62, End = 0x00B63, Type = Extend }); - // Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B66, End = 0x00B6F, Type = Numeric }); - // Lo [6] TAMIL LETTER A..TAMIL LETTER UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B85, End = 0x00B8A, Type = ALetter }); - // Lo [3] TAMIL LETTER E..TAMIL LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B8E, End = 0x00B90, Type = ALetter }); - // Lo [4] TAMIL LETTER O..TAMIL LETTER KA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B92, End = 0x00B95, Type = ALetter }); - // Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B99, End = 0x00B9A, Type = ALetter }); - // Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00B9E, End = 0x00B9F, Type = ALetter }); - // Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BA3, End = 0x00BA4, Type = ALetter }); - // Lo [3] TAMIL LETTER NA..TAMIL LETTER PA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BA8, End = 0x00BAA, Type = ALetter }); - // Lo [12] TAMIL LETTER MA..TAMIL LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BAE, End = 0x00BB9, Type = ALetter }); - // Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BBE, End = 0x00BBF, Type = Extend }); - // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BC1, End = 0x00BC2, Type = Extend }); - // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BC6, End = 0x00BC8, Type = Extend }); - // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BCA, End = 0x00BCC, Type = Extend }); - // Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00BE6, End = 0x00BEF, Type = Numeric }); - // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C01, End = 0x00C03, Type = Extend }); - // Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C05, End = 0x00C0C, Type = ALetter }); - // Lo [3] TELUGU LETTER E..TELUGU LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C0E, End = 0x00C10, Type = ALetter }); - // Lo [23] TELUGU LETTER O..TELUGU LETTER NA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C12, End = 0x00C28, Type = ALetter }); - // Lo [16] TELUGU LETTER PA..TELUGU LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C2A, End = 0x00C39, Type = ALetter }); - // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C3E, End = 0x00C40, Type = Extend }); - // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C41, End = 0x00C44, Type = Extend }); - // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C46, End = 0x00C48, Type = Extend }); - // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C4A, End = 0x00C4D, Type = Extend }); - // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C55, End = 0x00C56, Type = Extend }); - // Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C58, End = 0x00C5A, Type = ALetter }); - // Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C60, End = 0x00C61, Type = ALetter }); - // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C62, End = 0x00C63, Type = Extend }); - // Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C66, End = 0x00C6F, Type = Numeric }); - // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C82, End = 0x00C83, Type = Extend }); - // Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C85, End = 0x00C8C, Type = ALetter }); - // Lo [3] KANNADA LETTER E..KANNADA LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C8E, End = 0x00C90, Type = ALetter }); - // Lo [23] KANNADA LETTER O..KANNADA LETTER NA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00C92, End = 0x00CA8, Type = ALetter }); - // Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CAA, End = 0x00CB3, Type = ALetter }); - // Lo [5] KANNADA LETTER VA..KANNADA LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CB5, End = 0x00CB9, Type = ALetter }); - // Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CC0, End = 0x00CC4, Type = Extend }); - // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CC7, End = 0x00CC8, Type = Extend }); - // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CCA, End = 0x00CCB, Type = Extend }); - // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CCC, End = 0x00CCD, Type = Extend }); - // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CD5, End = 0x00CD6, Type = Extend }); - // Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CDD, End = 0x00CDE, Type = ALetter }); - // Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CE0, End = 0x00CE1, Type = ALetter }); - // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CE2, End = 0x00CE3, Type = Extend }); - // Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CE6, End = 0x00CEF, Type = Numeric }); - // Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00CF1, End = 0x00CF2, Type = ALetter }); - // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D00, End = 0x00D01, Type = Extend }); - // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D02, End = 0x00D03, Type = Extend }); - // Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D04, End = 0x00D0C, Type = ALetter }); - // Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D0E, End = 0x00D10, Type = ALetter }); - // Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D12, End = 0x00D3A, Type = ALetter }); - // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D3B, End = 0x00D3C, Type = Extend }); - // Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D3E, End = 0x00D40, Type = Extend }); - // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D41, End = 0x00D44, Type = Extend }); - // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D46, End = 0x00D48, Type = Extend }); - // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D4A, End = 0x00D4C, Type = Extend }); - // Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D54, End = 0x00D56, Type = ALetter }); - // Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D5F, End = 0x00D61, Type = ALetter }); - // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D62, End = 0x00D63, Type = Extend }); - // Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D66, End = 0x00D6F, Type = Numeric }); - // Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D7A, End = 0x00D7F, Type = ALetter }); - // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D82, End = 0x00D83, Type = Extend }); - // Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D85, End = 0x00D96, Type = ALetter }); - // Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00D9A, End = 0x00DB1, Type = ALetter }); - // Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DB3, End = 0x00DBB, Type = ALetter }); - // Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DC0, End = 0x00DC6, Type = ALetter }); - // Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DCF, End = 0x00DD1, Type = Extend }); - // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DD2, End = 0x00DD4, Type = Extend }); - // Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DD8, End = 0x00DDF, Type = Extend }); - // Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DE6, End = 0x00DEF, Type = Numeric }); - // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00DF2, End = 0x00DF3, Type = Extend }); - // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU - m_lst_code_range.Add(new RangeInfo() { Start = 0x00E34, End = 0x00E3A, Type = Extend }); - // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x00E47, End = 0x00E4E, Type = Extend }); - // Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00E50, End = 0x00E59, Type = Numeric }); - // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - m_lst_code_range.Add(new RangeInfo() { Start = 0x00EB4, End = 0x00EBC, Type = Extend }); - // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00EC8, End = 0x00ECD, Type = Extend }); - // Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00ED0, End = 0x00ED9, Type = Numeric }); - // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F18, End = 0x00F19, Type = Extend }); - // Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F20, End = 0x00F29, Type = Numeric }); - // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F3E, End = 0x00F3F, Type = Extend }); - // Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F40, End = 0x00F47, Type = ALetter }); - // Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F49, End = 0x00F6C, Type = ALetter }); - // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F71, End = 0x00F7E, Type = Extend }); - // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F80, End = 0x00F84, Type = Extend }); - // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F86, End = 0x00F87, Type = Extend }); - // Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F88, End = 0x00F8C, Type = ALetter }); - // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F8D, End = 0x00F97, Type = Extend }); - // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x00F99, End = 0x00FBC, Type = Extend }); - // Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0102B, End = 0x0102C, Type = Extend }); - // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0102D, End = 0x01030, Type = Extend }); - // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01032, End = 0x01037, Type = Extend }); - // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT - m_lst_code_range.Add(new RangeInfo() { Start = 0x01039, End = 0x0103A, Type = Extend }); - // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0103B, End = 0x0103C, Type = Extend }); - // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0103D, End = 0x0103E, Type = Extend }); - // Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01040, End = 0x01049, Type = Numeric }); - // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x01056, End = 0x01057, Type = Extend }); - // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x01058, End = 0x01059, Type = Extend }); - // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0105E, End = 0x01060, Type = Extend }); - // Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x01062, End = 0x01064, Type = Extend }); - // Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 - m_lst_code_range.Add(new RangeInfo() { Start = 0x01067, End = 0x0106D, Type = Extend }); - // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01071, End = 0x01074, Type = Extend }); - // Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E - m_lst_code_range.Add(new RangeInfo() { Start = 0x01083, End = 0x01084, Type = Extend }); - // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y - m_lst_code_range.Add(new RangeInfo() { Start = 0x01085, End = 0x01086, Type = Extend }); - // Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 - m_lst_code_range.Add(new RangeInfo() { Start = 0x01087, End = 0x0108C, Type = Extend }); - // Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01090, End = 0x01099, Type = Numeric }); - // Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A - m_lst_code_range.Add(new RangeInfo() { Start = 0x0109A, End = 0x0109C, Type = Extend }); - // L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE - m_lst_code_range.Add(new RangeInfo() { Start = 0x010A0, End = 0x010C5, Type = ALetter }); - // L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN - m_lst_code_range.Add(new RangeInfo() { Start = 0x010D0, End = 0x010FA, Type = ALetter }); - // L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x010FD, End = 0x010FF, Type = ALetter }); - // Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01100, End = 0x01248, Type = ALetter }); - // Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0124A, End = 0x0124D, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x01250, End = 0x01256, Type = ALetter }); - // Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0125A, End = 0x0125D, Type = ALetter }); - // Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01260, End = 0x01288, Type = ALetter }); - // Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0128A, End = 0x0128D, Type = ALetter }); - // Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01290, End = 0x012B0, Type = ALetter }); - // Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x012B2, End = 0x012B5, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO - m_lst_code_range.Add(new RangeInfo() { Start = 0x012B8, End = 0x012BE, Type = ALetter }); - // Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x012C2, End = 0x012C5, Type = ALetter }); - // Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O - m_lst_code_range.Add(new RangeInfo() { Start = 0x012C8, End = 0x012D6, Type = ALetter }); - // Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA - m_lst_code_range.Add(new RangeInfo() { Start = 0x012D8, End = 0x01310, Type = ALetter }); - // Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01312, End = 0x01315, Type = ALetter }); - // Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01318, End = 0x0135A, Type = ALetter }); - // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0135D, End = 0x0135F, Type = Extend }); - // Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01380, End = 0x0138F, Type = ALetter }); - // L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV - m_lst_code_range.Add(new RangeInfo() { Start = 0x013A0, End = 0x013F5, Type = ALetter }); - // L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV - m_lst_code_range.Add(new RangeInfo() { Start = 0x013F8, End = 0x013FD, Type = ALetter }); - // Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01401, End = 0x0166C, Type = ALetter }); - // Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W - m_lst_code_range.Add(new RangeInfo() { Start = 0x0166F, End = 0x0167F, Type = ALetter }); - // Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH - m_lst_code_range.Add(new RangeInfo() { Start = 0x01681, End = 0x0169A, Type = ALetter }); - // Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X - m_lst_code_range.Add(new RangeInfo() { Start = 0x016A0, End = 0x016EA, Type = ALetter }); - // Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x016EE, End = 0x016F0, Type = ALetter }); - // Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC - m_lst_code_range.Add(new RangeInfo() { Start = 0x016F1, End = 0x016F8, Type = ALetter }); - // Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01700, End = 0x01711, Type = ALetter }); - // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01712, End = 0x01714, Type = Extend }); - // Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0171F, End = 0x01731, Type = ALetter }); - // Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01732, End = 0x01733, Type = Extend }); - // Lo [18] BUHID LETTER A..BUHID LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01740, End = 0x01751, Type = ALetter }); - // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01752, End = 0x01753, Type = Extend }); - // Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01760, End = 0x0176C, Type = ALetter }); - // Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0176E, End = 0x01770, Type = ALetter }); - // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01772, End = 0x01773, Type = Extend }); - // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA - m_lst_code_range.Add(new RangeInfo() { Start = 0x017B4, End = 0x017B5, Type = Extend }); - // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA - m_lst_code_range.Add(new RangeInfo() { Start = 0x017B7, End = 0x017BD, Type = Extend }); - // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x017BE, End = 0x017C5, Type = Extend }); - // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU - m_lst_code_range.Add(new RangeInfo() { Start = 0x017C7, End = 0x017C8, Type = Extend }); - // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT - m_lst_code_range.Add(new RangeInfo() { Start = 0x017C9, End = 0x017D3, Type = Extend }); - // Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x017E0, End = 0x017E9, Type = Numeric }); - // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0180B, End = 0x0180D, Type = Extend }); - // Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01810, End = 0x01819, Type = Numeric }); - // Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01820, End = 0x01842, Type = ALetter }); - // Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS - m_lst_code_range.Add(new RangeInfo() { Start = 0x01844, End = 0x01878, Type = ALetter }); - // Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01880, End = 0x01884, Type = ALetter }); - // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01885, End = 0x01886, Type = Extend }); - // Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01887, End = 0x018A8, Type = ALetter }); - // Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S - m_lst_code_range.Add(new RangeInfo() { Start = 0x018B0, End = 0x018F5, Type = ALetter }); - // Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01900, End = 0x0191E, Type = ALetter }); - // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01920, End = 0x01922, Type = Extend }); - // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x01923, End = 0x01926, Type = Extend }); - // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x01927, End = 0x01928, Type = Extend }); - // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01929, End = 0x0192B, Type = Extend }); - // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01930, End = 0x01931, Type = Extend }); - // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01933, End = 0x01938, Type = Extend }); - // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I - m_lst_code_range.Add(new RangeInfo() { Start = 0x01939, End = 0x0193B, Type = Extend }); - // Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01946, End = 0x0194F, Type = Numeric }); - // Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x019D0, End = 0x019D9, Type = Numeric }); - // Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A00, End = 0x01A16, Type = ALetter }); - // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A17, End = 0x01A18, Type = Extend }); - // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A19, End = 0x01A1A, Type = Extend }); - // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A58, End = 0x01A5E, Type = Extend }); - // Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A63, End = 0x01A64, Type = Extend }); - // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A65, End = 0x01A6C, Type = Extend }); - // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A6D, End = 0x01A72, Type = Extend }); - // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A73, End = 0x01A7C, Type = Extend }); - // Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A80, End = 0x01A89, Type = Numeric }); - // Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01A90, End = 0x01A99, Type = Numeric }); - // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01AB0, End = 0x01ABD, Type = Extend }); - // Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T - m_lst_code_range.Add(new RangeInfo() { Start = 0x01ABF, End = 0x01ACE, Type = Extend }); - // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B00, End = 0x01B03, Type = Extend }); - // Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B05, End = 0x01B33, Type = ALetter }); - // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B36, End = 0x01B3A, Type = Extend }); - // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B3D, End = 0x01B41, Type = Extend }); - // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B43, End = 0x01B44, Type = Extend }); - // Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B45, End = 0x01B4C, Type = ALetter }); - // Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B50, End = 0x01B59, Type = Numeric }); - // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B6B, End = 0x01B73, Type = Extend }); - // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B80, End = 0x01B81, Type = Extend }); - // Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01B83, End = 0x01BA0, Type = ALetter }); - // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BA2, End = 0x01BA5, Type = Extend }); - // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BA6, End = 0x01BA7, Type = Extend }); - // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BA8, End = 0x01BA9, Type = Extend }); - // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BAB, End = 0x01BAD, Type = Extend }); - // Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BAE, End = 0x01BAF, Type = ALetter }); - // Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BB0, End = 0x01BB9, Type = Numeric }); - // Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BBA, End = 0x01BE5, Type = ALetter }); - // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BE8, End = 0x01BE9, Type = Extend }); - // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BEA, End = 0x01BEC, Type = Extend }); - // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BEF, End = 0x01BF1, Type = Extend }); - // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x01BF2, End = 0x01BF3, Type = Extend }); - // Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C00, End = 0x01C23, Type = ALetter }); - // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C24, End = 0x01C2B, Type = Extend }); - // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C2C, End = 0x01C33, Type = Extend }); - // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C34, End = 0x01C35, Type = Extend }); - // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C36, End = 0x01C37, Type = Extend }); - // Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C40, End = 0x01C49, Type = Numeric }); - // Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C4D, End = 0x01C4F, Type = ALetter }); - // Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C50, End = 0x01C59, Type = Numeric }); - // Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C5A, End = 0x01C77, Type = ALetter }); - // Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C78, End = 0x01C7D, Type = ALetter }); - // L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C80, End = 0x01C88, Type = ALetter }); - // L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN - m_lst_code_range.Add(new RangeInfo() { Start = 0x01C90, End = 0x01CBA, Type = ALetter }); - // L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CBD, End = 0x01CBF, Type = ALetter }); - // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CD0, End = 0x01CD2, Type = Extend }); - // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CD4, End = 0x01CE0, Type = Extend }); - // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CE2, End = 0x01CE8, Type = Extend }); - // Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CE9, End = 0x01CEC, Type = ALetter }); - // Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CEE, End = 0x01CF3, Type = ALetter }); - // Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CF5, End = 0x01CF6, Type = ALetter }); - // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x01CF8, End = 0x01CF9, Type = Extend }); - // L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL - m_lst_code_range.Add(new RangeInfo() { Start = 0x01D00, End = 0x01D2B, Type = ALetter }); - // Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01D2C, End = 0x01D6A, Type = ALetter }); - // L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G - m_lst_code_range.Add(new RangeInfo() { Start = 0x01D6B, End = 0x01D77, Type = ALetter }); - // L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x01D79, End = 0x01D9A, Type = ALetter }); - // Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01D9B, End = 0x01DBF, Type = ALetter }); - // Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x01DC0, End = 0x01DFF, Type = Extend }); - // L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01E00, End = 0x01F15, Type = ALetter }); - // L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01F18, End = 0x01F1D, Type = ALetter }); - // L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01F20, End = 0x01F45, Type = ALetter }); - // L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01F48, End = 0x01F4D, Type = ALetter }); - // L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01F50, End = 0x01F57, Type = ALetter }); - // L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01F5F, End = 0x01F7D, Type = ALetter }); - // L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01F80, End = 0x01FB4, Type = ALetter }); - // L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FB6, End = 0x01FBC, Type = ALetter }); - // L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FC2, End = 0x01FC4, Type = ALetter }); - // L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FC6, End = 0x01FCC, Type = ALetter }); - // L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FD0, End = 0x01FD3, Type = ALetter }); - // L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FD6, End = 0x01FDB, Type = ALetter }); - // L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FE0, End = 0x01FEC, Type = ALetter }); - // L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FF2, End = 0x01FF4, Type = ALetter }); - // L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI - m_lst_code_range.Add(new RangeInfo() { Start = 0x01FF6, End = 0x01FFC, Type = ALetter }); - // Zs [7] EN QUAD..SIX-PER-EM SPACE - m_lst_code_range.Add(new RangeInfo() { Start = 0x02000, End = 0x02006, Type = WSegSpace }); - // Zs [3] PUNCTUATION SPACE..HAIR SPACE - m_lst_code_range.Add(new RangeInfo() { Start = 0x02008, End = 0x0200A, Type = WSegSpace }); - // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0200E, End = 0x0200F, Type = Format }); - // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0202A, End = 0x0202E, Type = Format }); - // Pc [2] UNDERTIE..CHARACTER TIE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0203F, End = 0x02040, Type = ExtendNumLet }); - // Cf [5] WORD JOINER..INVISIBLE PLUS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02060, End = 0x02064, Type = Format }); - // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES - m_lst_code_range.Add(new RangeInfo() { Start = 0x02066, End = 0x0206F, Type = Format }); - // Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T - m_lst_code_range.Add(new RangeInfo() { Start = 0x02090, End = 0x0209C, Type = ALetter }); - // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x020D0, End = 0x020DC, Type = Extend }); - // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH - m_lst_code_range.Add(new RangeInfo() { Start = 0x020DD, End = 0x020E0, Type = Extend }); - // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE - m_lst_code_range.Add(new RangeInfo() { Start = 0x020E2, End = 0x020E4, Type = Extend }); - // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x020E5, End = 0x020F0, Type = Extend }); - // L& [10] SCRIPT SMALL G..SCRIPT SMALL L - m_lst_code_range.Add(new RangeInfo() { Start = 0x0210A, End = 0x02113, Type = ALetter }); - // L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R - m_lst_code_range.Add(new RangeInfo() { Start = 0x02119, End = 0x0211D, Type = ALetter }); - // L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C - m_lst_code_range.Add(new RangeInfo() { Start = 0x0212A, End = 0x0212D, Type = ALetter }); - // L& [6] SCRIPT SMALL E..SCRIPT SMALL O - m_lst_code_range.Add(new RangeInfo() { Start = 0x0212F, End = 0x02134, Type = ALetter }); - // Lo [4] ALEF SYMBOL..DALET SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x02135, End = 0x02138, Type = ALetter }); - // L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI - m_lst_code_range.Add(new RangeInfo() { Start = 0x0213C, End = 0x0213F, Type = ALetter }); - // L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J - m_lst_code_range.Add(new RangeInfo() { Start = 0x02145, End = 0x02149, Type = ALetter }); - // Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND - m_lst_code_range.Add(new RangeInfo() { Start = 0x02160, End = 0x02182, Type = ALetter }); - // L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C - m_lst_code_range.Add(new RangeInfo() { Start = 0x02183, End = 0x02184, Type = ALetter }); - // Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND - m_lst_code_range.Add(new RangeInfo() { Start = 0x02185, End = 0x02188, Type = ALetter }); - // E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow - m_lst_code_range.Add(new RangeInfo() { Start = 0x02194, End = 0x02199, Type = Extended_Pictographic }); - // E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right - m_lst_code_range.Add(new RangeInfo() { Start = 0x021A9, End = 0x021AA, Type = Extended_Pictographic }); - // E0.6 [2] (⌚..⌛) watch..hourglass done - m_lst_code_range.Add(new RangeInfo() { Start = 0x0231A, End = 0x0231B, Type = Extended_Pictographic }); - // E0.6 [4] (⏩..⏬) fast-forward button..fast down button - m_lst_code_range.Add(new RangeInfo() { Start = 0x023E9, End = 0x023EC, Type = Extended_Pictographic }); - // E0.7 [2] (⏭️..⏮️) next track button..last track button - m_lst_code_range.Add(new RangeInfo() { Start = 0x023ED, End = 0x023EE, Type = Extended_Pictographic }); - // E1.0 [2] (⏱️..⏲️) stopwatch..timer clock - m_lst_code_range.Add(new RangeInfo() { Start = 0x023F1, End = 0x023F2, Type = Extended_Pictographic }); - // E0.7 [3] (⏸️..⏺️) pause button..record button - m_lst_code_range.Add(new RangeInfo() { Start = 0x023F8, End = 0x023FA, Type = Extended_Pictographic }); - // So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x024B6, End = 0x024E9, Type = ALetter }); - // E0.6 [2] (▪️..▫️) black small square..white small square - m_lst_code_range.Add(new RangeInfo() { Start = 0x025AA, End = 0x025AB, Type = Extended_Pictographic }); - // E0.6 [4] (◻️..◾) white medium square..black medium-small square - m_lst_code_range.Add(new RangeInfo() { Start = 0x025FB, End = 0x025FE, Type = Extended_Pictographic }); - // E0.6 [2] (☀️..☁️) sun..cloud - m_lst_code_range.Add(new RangeInfo() { Start = 0x02600, End = 0x02601, Type = Extended_Pictographic }); - // E0.7 [2] (☂️..☃️) umbrella..snowman - m_lst_code_range.Add(new RangeInfo() { Start = 0x02602, End = 0x02603, Type = Extended_Pictographic }); - // E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION - m_lst_code_range.Add(new RangeInfo() { Start = 0x02607, End = 0x0260D, Type = Extended_Pictographic }); - // E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX - m_lst_code_range.Add(new RangeInfo() { Start = 0x0260F, End = 0x02610, Type = Extended_Pictographic }); - // E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage - m_lst_code_range.Add(new RangeInfo() { Start = 0x02614, End = 0x02615, Type = Extended_Pictographic }); - // E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE - m_lst_code_range.Add(new RangeInfo() { Start = 0x02616, End = 0x02617, Type = Extended_Pictographic }); - // E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX - m_lst_code_range.Add(new RangeInfo() { Start = 0x02619, End = 0x0261C, Type = Extended_Pictographic }); - // E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX - m_lst_code_range.Add(new RangeInfo() { Start = 0x0261E, End = 0x0261F, Type = Extended_Pictographic }); - // E1.0 [2] (☢️..☣️) radioactive..biohazard - m_lst_code_range.Add(new RangeInfo() { Start = 0x02622, End = 0x02623, Type = Extended_Pictographic }); - // E0.0 [2] (☤..☥) CADUCEUS..ANKH - m_lst_code_range.Add(new RangeInfo() { Start = 0x02624, End = 0x02625, Type = Extended_Pictographic }); - // E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM - m_lst_code_range.Add(new RangeInfo() { Start = 0x02627, End = 0x02629, Type = Extended_Pictographic }); - // E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0262B, End = 0x0262D, Type = Extended_Pictographic }); - // E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH - m_lst_code_range.Add(new RangeInfo() { Start = 0x02630, End = 0x02637, Type = Extended_Pictographic }); - // E0.7 [2] (☸️..☹️) wheel of dharma..frowning face - m_lst_code_range.Add(new RangeInfo() { Start = 0x02638, End = 0x02639, Type = Extended_Pictographic }); - // E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY - m_lst_code_range.Add(new RangeInfo() { Start = 0x0263B, End = 0x0263F, Type = Extended_Pictographic }); - // E0.0 [5] (♃..♇) JUPITER..PLUTO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02643, End = 0x02647, Type = Extended_Pictographic }); - // E0.6 [12] (♈..♓) Aries..Pisces - m_lst_code_range.Add(new RangeInfo() { Start = 0x02648, End = 0x02653, Type = Extended_Pictographic }); - // E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT - m_lst_code_range.Add(new RangeInfo() { Start = 0x02654, End = 0x0265E, Type = Extended_Pictographic }); - // E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT - m_lst_code_range.Add(new RangeInfo() { Start = 0x02661, End = 0x02662, Type = Extended_Pictographic }); - // E0.6 [2] (♥️..♦️) heart suit..diamond suit - m_lst_code_range.Add(new RangeInfo() { Start = 0x02665, End = 0x02666, Type = Extended_Pictographic }); - // E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02669, End = 0x0267A, Type = Extended_Pictographic }); - // E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x0267C, End = 0x0267D, Type = Extended_Pictographic }); - // E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 - m_lst_code_range.Add(new RangeInfo() { Start = 0x02680, End = 0x02685, Type = Extended_Pictographic }); - // E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG - m_lst_code_range.Add(new RangeInfo() { Start = 0x02690, End = 0x02691, Type = Extended_Pictographic }); - // E1.0 [2] (⚖️..⚗️) balance scale..alembic - m_lst_code_range.Add(new RangeInfo() { Start = 0x02696, End = 0x02697, Type = Extended_Pictographic }); - // E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis - m_lst_code_range.Add(new RangeInfo() { Start = 0x0269B, End = 0x0269C, Type = Extended_Pictographic }); - // E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT - m_lst_code_range.Add(new RangeInfo() { Start = 0x0269D, End = 0x0269F, Type = Extended_Pictographic }); - // E0.6 [2] (⚠️..⚡) warning..high voltage - m_lst_code_range.Add(new RangeInfo() { Start = 0x026A0, End = 0x026A1, Type = Extended_Pictographic }); - // E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x026A2, End = 0x026A6, Type = Extended_Pictographic }); - // E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x026A8, End = 0x026A9, Type = Extended_Pictographic }); - // E0.6 [2] (⚪..⚫) white circle..black circle - m_lst_code_range.Add(new RangeInfo() { Start = 0x026AA, End = 0x026AB, Type = Extended_Pictographic }); - // E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x026AC, End = 0x026AF, Type = Extended_Pictographic }); - // E1.0 [2] (⚰️..⚱️) coffin..funeral urn - m_lst_code_range.Add(new RangeInfo() { Start = 0x026B0, End = 0x026B1, Type = Extended_Pictographic }); - // E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE - m_lst_code_range.Add(new RangeInfo() { Start = 0x026B2, End = 0x026BC, Type = Extended_Pictographic }); - // E0.6 [2] (⚽..⚾) soccer ball..baseball - m_lst_code_range.Add(new RangeInfo() { Start = 0x026BD, End = 0x026BE, Type = Extended_Pictographic }); - // E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING - m_lst_code_range.Add(new RangeInfo() { Start = 0x026BF, End = 0x026C3, Type = Extended_Pictographic }); - // E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud - m_lst_code_range.Add(new RangeInfo() { Start = 0x026C4, End = 0x026C5, Type = Extended_Pictographic }); - // E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN - m_lst_code_range.Add(new RangeInfo() { Start = 0x026C6, End = 0x026C7, Type = Extended_Pictographic }); - // E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x026C9, End = 0x026CD, Type = Extended_Pictographic }); - // E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD - m_lst_code_range.Add(new RangeInfo() { Start = 0x026D5, End = 0x026E8, Type = Extended_Pictographic }); - // E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE - m_lst_code_range.Add(new RangeInfo() { Start = 0x026EB, End = 0x026EF, Type = Extended_Pictographic }); - // E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground - m_lst_code_range.Add(new RangeInfo() { Start = 0x026F0, End = 0x026F1, Type = Extended_Pictographic }); - // E0.6 [2] (⛲..⛳) fountain..flag in hole - m_lst_code_range.Add(new RangeInfo() { Start = 0x026F2, End = 0x026F3, Type = Extended_Pictographic }); - // E0.7 [3] (⛷️..⛹️) skier..person bouncing ball - m_lst_code_range.Add(new RangeInfo() { Start = 0x026F7, End = 0x026F9, Type = Extended_Pictographic }); - // E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x026FB, End = 0x026FC, Type = Extended_Pictographic }); - // E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS - m_lst_code_range.Add(new RangeInfo() { Start = 0x026FE, End = 0x02701, Type = Extended_Pictographic }); - // E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02703, End = 0x02704, Type = Extended_Pictographic }); - // E0.6 [5] (✈️..✌️) airplane..victory hand - m_lst_code_range.Add(new RangeInfo() { Start = 0x02708, End = 0x0270C, Type = Extended_Pictographic }); - // E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB - m_lst_code_range.Add(new RangeInfo() { Start = 0x02710, End = 0x02711, Type = Extended_Pictographic }); - // E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star - m_lst_code_range.Add(new RangeInfo() { Start = 0x02733, End = 0x02734, Type = Extended_Pictographic }); - // E0.6 [3] (❓..❕) red question mark..white exclamation mark - m_lst_code_range.Add(new RangeInfo() { Start = 0x02753, End = 0x02755, Type = Extended_Pictographic }); - // E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET - m_lst_code_range.Add(new RangeInfo() { Start = 0x02765, End = 0x02767, Type = Extended_Pictographic }); - // E0.6 [3] (➕..➗) plus..divide - m_lst_code_range.Add(new RangeInfo() { Start = 0x02795, End = 0x02797, Type = Extended_Pictographic }); - // E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down - m_lst_code_range.Add(new RangeInfo() { Start = 0x02934, End = 0x02935, Type = Extended_Pictographic }); - // E0.6 [3] (⬅️..⬇️) left arrow..down arrow - m_lst_code_range.Add(new RangeInfo() { Start = 0x02B05, End = 0x02B07, Type = Extended_Pictographic }); - // E0.6 [2] (⬛..⬜) black large square..white large square - m_lst_code_range.Add(new RangeInfo() { Start = 0x02B1B, End = 0x02B1C, Type = Extended_Pictographic }); - // L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E - m_lst_code_range.Add(new RangeInfo() { Start = 0x02C00, End = 0x02C7B, Type = ALetter }); - // Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V - m_lst_code_range.Add(new RangeInfo() { Start = 0x02C7C, End = 0x02C7D, Type = ALetter }); - // L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI - m_lst_code_range.Add(new RangeInfo() { Start = 0x02C7E, End = 0x02CE4, Type = ALetter }); - // L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA - m_lst_code_range.Add(new RangeInfo() { Start = 0x02CEB, End = 0x02CEE, Type = ALetter }); - // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02CEF, End = 0x02CF1, Type = Extend }); - // L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI - m_lst_code_range.Add(new RangeInfo() { Start = 0x02CF2, End = 0x02CF3, Type = ALetter }); - // L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE - m_lst_code_range.Add(new RangeInfo() { Start = 0x02D00, End = 0x02D25, Type = ALetter }); - // Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02D30, End = 0x02D67, Type = ALetter }); - // Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x02D80, End = 0x02D96, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DA0, End = 0x02DA6, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DA8, End = 0x02DAE, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DB0, End = 0x02DB6, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DB8, End = 0x02DBE, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DC0, End = 0x02DC6, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DC8, End = 0x02DCE, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DD0, End = 0x02DD6, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DD8, End = 0x02DDE, Type = ALetter }); - // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS - m_lst_code_range.Add(new RangeInfo() { Start = 0x02DE0, End = 0x02DFF, Type = Extend }); - // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0302A, End = 0x0302D, Type = Extend }); - // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0302E, End = 0x0302F, Type = Extend }); - // Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF - m_lst_code_range.Add(new RangeInfo() { Start = 0x03031, End = 0x03035, Type = Katakana }); - // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x03099, End = 0x0309A, Type = Extend }); - // Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0309B, End = 0x0309C, Type = Katakana }); - // Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO - m_lst_code_range.Add(new RangeInfo() { Start = 0x030A1, End = 0x030FA, Type = Katakana }); - // Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x030FC, End = 0x030FE, Type = Katakana }); - // Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN - m_lst_code_range.Add(new RangeInfo() { Start = 0x03105, End = 0x0312F, Type = ALetter }); - // Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE - m_lst_code_range.Add(new RangeInfo() { Start = 0x03131, End = 0x0318E, Type = ALetter }); - // Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH - m_lst_code_range.Add(new RangeInfo() { Start = 0x031A0, End = 0x031BF, Type = ALetter }); - // Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO - m_lst_code_range.Add(new RangeInfo() { Start = 0x031F0, End = 0x031FF, Type = Katakana }); - // So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO - m_lst_code_range.Add(new RangeInfo() { Start = 0x032D0, End = 0x032FE, Type = Katakana }); - // So [88] SQUARE APAATO..SQUARE WATTO - m_lst_code_range.Add(new RangeInfo() { Start = 0x03300, End = 0x03357, Type = Katakana }); - // Lo [21] YI SYLLABLE IT..YI SYLLABLE E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A000, End = 0x0A014, Type = ALetter }); - // Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A016, End = 0x0A48C, Type = ALetter }); - // Lo [40] LISU LETTER BA..LISU LETTER OE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A4D0, End = 0x0A4F7, Type = ALetter }); - // Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A4F8, End = 0x0A4FD, Type = ALetter }); - // Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A500, End = 0x0A60B, Type = ALetter }); - // Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A610, End = 0x0A61F, Type = ALetter }); - // Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A620, End = 0x0A629, Type = Numeric }); - // Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A62A, End = 0x0A62B, Type = ALetter }); - // L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A640, End = 0x0A66D, Type = ALetter }); - // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A670, End = 0x0A672, Type = Extend }); - // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A674, End = 0x0A67D, Type = Extend }); - // L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A680, End = 0x0A69B, Type = ALetter }); - // Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A69C, End = 0x0A69D, Type = ALetter }); - // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A69E, End = 0x0A69F, Type = Extend }); - // Lo [70] BAMUM LETTER A..BAMUM LETTER KI - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A6A0, End = 0x0A6E5, Type = ALetter }); - // Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A6E6, End = 0x0A6EF, Type = ALetter }); - // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A6F0, End = 0x0A6F1, Type = Extend }); - // Sk [15] MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A708, End = 0x0A716, Type = ALetter }); - // Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A717, End = 0x0A71F, Type = ALetter }); - // Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A720, End = 0x0A721, Type = ALetter }); - // L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A722, End = 0x0A76F, Type = ALetter }); - // L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A771, End = 0x0A787, Type = ALetter }); - // Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A789, End = 0x0A78A, Type = ALetter }); - // L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A78B, End = 0x0A78E, Type = ALetter }); - // L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A790, End = 0x0A7CA, Type = ALetter }); - // L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A7D0, End = 0x0A7D1, Type = ALetter }); - // L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A7D5, End = 0x0A7D9, Type = ALetter }); - // Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A7F2, End = 0x0A7F4, Type = ALetter }); - // L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A7F5, End = 0x0A7F6, Type = ALetter }); - // Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A7F8, End = 0x0A7F9, Type = ALetter }); - // Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A7FB, End = 0x0A801, Type = ALetter }); - // Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A803, End = 0x0A805, Type = ALetter }); - // Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A807, End = 0x0A80A, Type = ALetter }); - // Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A80C, End = 0x0A822, Type = ALetter }); - // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A823, End = 0x0A824, Type = Extend }); - // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A825, End = 0x0A826, Type = Extend }); - // Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A840, End = 0x0A873, Type = ALetter }); - // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A880, End = 0x0A881, Type = Extend }); - // Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A882, End = 0x0A8B3, Type = ALetter }); - // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8B4, End = 0x0A8C3, Type = Extend }); - // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8C4, End = 0x0A8C5, Type = Extend }); - // Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8D0, End = 0x0A8D9, Type = Numeric }); - // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8E0, End = 0x0A8F1, Type = Extend }); - // Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8F2, End = 0x0A8F7, Type = ALetter }); - // Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A8FD, End = 0x0A8FE, Type = ALetter }); - // Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A900, End = 0x0A909, Type = Numeric }); - // Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A90A, End = 0x0A925, Type = ALetter }); - // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A926, End = 0x0A92D, Type = Extend }); - // Lo [23] REJANG LETTER KA..REJANG LETTER A - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A930, End = 0x0A946, Type = ALetter }); - // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A947, End = 0x0A951, Type = Extend }); - // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A952, End = 0x0A953, Type = Extend }); - // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A960, End = 0x0A97C, Type = ALetter }); - // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A980, End = 0x0A982, Type = Extend }); - // Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A984, End = 0x0A9B2, Type = ALetter }); - // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9B4, End = 0x0A9B5, Type = Extend }); - // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9B6, End = 0x0A9B9, Type = Extend }); - // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9BA, End = 0x0A9BB, Type = Extend }); - // Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9BC, End = 0x0A9BD, Type = Extend }); - // Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9BE, End = 0x0A9C0, Type = Extend }); - // Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9D0, End = 0x0A9D9, Type = Numeric }); - // Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0A9F0, End = 0x0A9F9, Type = Numeric }); - // Lo [41] CHAM LETTER A..CHAM LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA00, End = 0x0AA28, Type = ALetter }); - // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA29, End = 0x0AA2E, Type = Extend }); - // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA2F, End = 0x0AA30, Type = Extend }); - // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA31, End = 0x0AA32, Type = Extend }); - // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA33, End = 0x0AA34, Type = Extend }); - // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA35, End = 0x0AA36, Type = Extend }); - // Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA40, End = 0x0AA42, Type = ALetter }); - // Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA44, End = 0x0AA4B, Type = ALetter }); - // Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AA50, End = 0x0AA59, Type = Numeric }); - // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAB2, End = 0x0AAB4, Type = Extend }); - // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAB7, End = 0x0AAB8, Type = Extend }); - // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AABE, End = 0x0AABF, Type = Extend }); - // Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAE0, End = 0x0AAEA, Type = ALetter }); - // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAEC, End = 0x0AAED, Type = Extend }); - // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAEE, End = 0x0AAEF, Type = Extend }); - // Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AAF3, End = 0x0AAF4, Type = ALetter }); - // Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB01, End = 0x0AB06, Type = ALetter }); - // Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB09, End = 0x0AB0E, Type = ALetter }); - // Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB11, End = 0x0AB16, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB20, End = 0x0AB26, Type = ALetter }); - // Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB28, End = 0x0AB2E, Type = ALetter }); - // L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB30, End = 0x0AB5A, Type = ALetter }); - // Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB5C, End = 0x0AB5F, Type = ALetter }); - // L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB60, End = 0x0AB68, Type = ALetter }); - // L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AB70, End = 0x0ABBF, Type = ALetter }); - // Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABC0, End = 0x0ABE2, Type = ALetter }); - // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABE3, End = 0x0ABE4, Type = Extend }); - // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABE6, End = 0x0ABE7, Type = Extend }); - // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABE9, End = 0x0ABEA, Type = Extend }); - // Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0ABF0, End = 0x0ABF9, Type = Numeric }); - // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0AC00, End = 0x0D7A3, Type = ALetter }); - // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D7B0, End = 0x0D7C6, Type = ALetter }); - // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0D7CB, End = 0x0D7FB, Type = ALetter }); - // L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB00, End = 0x0FB06, Type = ALetter }); - // L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB13, End = 0x0FB17, Type = ALetter }); - // Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB1F, End = 0x0FB28, Type = Hebrew_Letter }); - // Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB2A, End = 0x0FB36, Type = Hebrew_Letter }); - // Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB38, End = 0x0FB3C, Type = Hebrew_Letter }); - // Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB40, End = 0x0FB41, Type = Hebrew_Letter }); - // Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB43, End = 0x0FB44, Type = Hebrew_Letter }); - // Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB46, End = 0x0FB4F, Type = Hebrew_Letter }); - // Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FB50, End = 0x0FBB1, Type = ALetter }); - // Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FBD3, End = 0x0FD3D, Type = ALetter }); - // Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FD50, End = 0x0FD8F, Type = ALetter }); - // Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FD92, End = 0x0FDC7, Type = ALetter }); - // Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FDF0, End = 0x0FDFB, Type = ALetter }); - // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE00, End = 0x0FE0F, Type = Extend }); - // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE20, End = 0x0FE2F, Type = Extend }); - // Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE33, End = 0x0FE34, Type = ExtendNumLet }); - // Pc [3] DASHED LOW LINE..WAVY LOW LINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE4D, End = 0x0FE4F, Type = ExtendNumLet }); - // Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE70, End = 0x0FE74, Type = ALetter }); - // Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FE76, End = 0x0FEFC, Type = ALetter }); - // Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FF10, End = 0x0FF19, Type = Numeric }); - // L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FF21, End = 0x0FF3A, Type = ALetter }); - // L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FF41, End = 0x0FF5A, Type = ALetter }); - // Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FF66, End = 0x0FF6F, Type = Katakana }); - // Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FF71, End = 0x0FF9D, Type = Katakana }); - // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FF9E, End = 0x0FF9F, Type = Extend }); - // Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFA0, End = 0x0FFBE, Type = ALetter }); - // Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFC2, End = 0x0FFC7, Type = ALetter }); - // Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFCA, End = 0x0FFCF, Type = ALetter }); - // Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFD2, End = 0x0FFD7, Type = ALetter }); - // Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFDA, End = 0x0FFDC, Type = ALetter }); - // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR - m_lst_code_range.Add(new RangeInfo() { Start = 0x0FFF9, End = 0x0FFFB, Type = Format }); - // Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10000, End = 0x1000B, Type = ALetter }); - // Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO - m_lst_code_range.Add(new RangeInfo() { Start = 0x1000D, End = 0x10026, Type = ALetter }); - // Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO - m_lst_code_range.Add(new RangeInfo() { Start = 0x10028, End = 0x1003A, Type = ALetter }); - // Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1003C, End = 0x1003D, Type = ALetter }); - // Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO - m_lst_code_range.Add(new RangeInfo() { Start = 0x1003F, End = 0x1004D, Type = ALetter }); - // Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 - m_lst_code_range.Add(new RangeInfo() { Start = 0x10050, End = 0x1005D, Type = ALetter }); - // Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 - m_lst_code_range.Add(new RangeInfo() { Start = 0x10080, End = 0x100FA, Type = ALetter }); - // Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS - m_lst_code_range.Add(new RangeInfo() { Start = 0x10140, End = 0x10174, Type = ALetter }); - // Lo [29] LYCIAN LETTER A..LYCIAN LETTER X - m_lst_code_range.Add(new RangeInfo() { Start = 0x10280, End = 0x1029C, Type = ALetter }); - // Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 - m_lst_code_range.Add(new RangeInfo() { Start = 0x102A0, End = 0x102D0, Type = ALetter }); - // Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS - m_lst_code_range.Add(new RangeInfo() { Start = 0x10300, End = 0x1031F, Type = ALetter }); - // Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1032D, End = 0x10340, Type = ALetter }); - // Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL - m_lst_code_range.Add(new RangeInfo() { Start = 0x10342, End = 0x10349, Type = ALetter }); - // Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10350, End = 0x10375, Type = ALetter }); - // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII - m_lst_code_range.Add(new RangeInfo() { Start = 0x10376, End = 0x1037A, Type = Extend }); - // Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU - m_lst_code_range.Add(new RangeInfo() { Start = 0x10380, End = 0x1039D, Type = ALetter }); - // Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x103A0, End = 0x103C3, Type = ALetter }); - // Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH - m_lst_code_range.Add(new RangeInfo() { Start = 0x103C8, End = 0x103CF, Type = ALetter }); - // Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED - m_lst_code_range.Add(new RangeInfo() { Start = 0x103D1, End = 0x103D5, Type = ALetter }); - // L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10400, End = 0x1044F, Type = ALetter }); - // Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO - m_lst_code_range.Add(new RangeInfo() { Start = 0x10450, End = 0x1049D, Type = ALetter }); - // Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x104A0, End = 0x104A9, Type = Numeric }); - // L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x104B0, End = 0x104D3, Type = ALetter }); - // L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x104D8, End = 0x104FB, Type = ALetter }); - // Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10500, End = 0x10527, Type = ALetter }); - // Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10530, End = 0x10563, Type = ALetter }); - // L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10570, End = 0x1057A, Type = ALetter }); - // L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1057C, End = 0x1058A, Type = ALetter }); - // L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1058C, End = 0x10592, Type = ALetter }); - // L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10594, End = 0x10595, Type = ALetter }); - // L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10597, End = 0x105A1, Type = ALetter }); - // L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE - m_lst_code_range.Add(new RangeInfo() { Start = 0x105A3, End = 0x105B1, Type = ALetter }); - // L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE - m_lst_code_range.Add(new RangeInfo() { Start = 0x105B3, End = 0x105B9, Type = ALetter }); - // L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE - m_lst_code_range.Add(new RangeInfo() { Start = 0x105BB, End = 0x105BC, Type = ALetter }); - // Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 - m_lst_code_range.Add(new RangeInfo() { Start = 0x10600, End = 0x10736, Type = ALetter }); - // Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10740, End = 0x10755, Type = ALetter }); - // Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 - m_lst_code_range.Add(new RangeInfo() { Start = 0x10760, End = 0x10767, Type = ALetter }); - // Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x10780, End = 0x10785, Type = ALetter }); - // Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x10787, End = 0x107B0, Type = ALetter }); - // Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL - m_lst_code_range.Add(new RangeInfo() { Start = 0x107B2, End = 0x107BA, Type = ALetter }); - // Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10800, End = 0x10805, Type = ALetter }); - // Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO - m_lst_code_range.Add(new RangeInfo() { Start = 0x1080A, End = 0x10835, Type = ALetter }); - // Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10837, End = 0x10838, Type = ALetter }); - // Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x1083F, End = 0x10855, Type = ALetter }); - // Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10860, End = 0x10876, Type = ALetter }); - // Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10880, End = 0x1089E, Type = ALetter }); - // Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH - m_lst_code_range.Add(new RangeInfo() { Start = 0x108E0, End = 0x108F2, Type = ALetter }); - // Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x108F4, End = 0x108F5, Type = ALetter }); - // Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU - m_lst_code_range.Add(new RangeInfo() { Start = 0x10900, End = 0x10915, Type = ALetter }); - // Lo [26] LYDIAN LETTER A..LYDIAN LETTER C - m_lst_code_range.Add(new RangeInfo() { Start = 0x10920, End = 0x10939, Type = ALetter }); - // Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10980, End = 0x109B7, Type = ALetter }); - // Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN - m_lst_code_range.Add(new RangeInfo() { Start = 0x109BE, End = 0x109BF, Type = ALetter }); - // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A01, End = 0x10A03, Type = Extend }); - // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A05, End = 0x10A06, Type = Extend }); - // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A0C, End = 0x10A0F, Type = Extend }); - // Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A10, End = 0x10A13, Type = ALetter }); - // Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A15, End = 0x10A17, Type = ALetter }); - // Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A19, End = 0x10A35, Type = ALetter }); - // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A38, End = 0x10A3A, Type = Extend }); - // Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A60, End = 0x10A7C, Type = ALetter }); - // Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x10A80, End = 0x10A9C, Type = ALetter }); - // Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10AC0, End = 0x10AC7, Type = ALetter }); - // Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10AC9, End = 0x10AE4, Type = ALetter }); - // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10AE5, End = 0x10AE6, Type = Extend }); - // Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10B00, End = 0x10B35, Type = ALetter }); - // Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10B40, End = 0x10B55, Type = ALetter }); - // Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10B60, End = 0x10B72, Type = ALetter }); - // Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10B80, End = 0x10B91, Type = ALetter }); - // Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH - m_lst_code_range.Add(new RangeInfo() { Start = 0x10C00, End = 0x10C48, Type = ALetter }); - // L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US - m_lst_code_range.Add(new RangeInfo() { Start = 0x10C80, End = 0x10CB2, Type = ALetter }); - // L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US - m_lst_code_range.Add(new RangeInfo() { Start = 0x10CC0, End = 0x10CF2, Type = ALetter }); - // Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA - m_lst_code_range.Add(new RangeInfo() { Start = 0x10D00, End = 0x10D23, Type = ALetter }); - // Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI - m_lst_code_range.Add(new RangeInfo() { Start = 0x10D24, End = 0x10D27, Type = Extend }); - // Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10D30, End = 0x10D39, Type = Numeric }); - // Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET - m_lst_code_range.Add(new RangeInfo() { Start = 0x10E80, End = 0x10EA9, Type = ALetter }); - // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x10EAB, End = 0x10EAC, Type = Extend }); - // Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x10EB0, End = 0x10EB1, Type = ALetter }); - // Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x10F00, End = 0x10F1C, Type = ALetter }); - // Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN - m_lst_code_range.Add(new RangeInfo() { Start = 0x10F30, End = 0x10F45, Type = ALetter }); - // Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10F46, End = 0x10F50, Type = Extend }); - // Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH - m_lst_code_range.Add(new RangeInfo() { Start = 0x10F70, End = 0x10F81, Type = ALetter }); - // Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10F82, End = 0x10F85, Type = Extend }); - // Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW - m_lst_code_range.Add(new RangeInfo() { Start = 0x10FB0, End = 0x10FC4, Type = ALetter }); - // Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH - m_lst_code_range.Add(new RangeInfo() { Start = 0x10FE0, End = 0x10FF6, Type = ALetter }); - // Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11003, End = 0x11037, Type = ALetter }); - // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11038, End = 0x11046, Type = Extend }); - // Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11066, End = 0x1106F, Type = Numeric }); - // Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11071, End = 0x11072, Type = ALetter }); - // Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11073, End = 0x11074, Type = Extend }); - // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1107F, End = 0x11081, Type = Extend }); - // Lo [45] KAITHI LETTER A..KAITHI LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11083, End = 0x110AF, Type = ALetter }); - // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B0, End = 0x110B2, Type = Extend }); - // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B3, End = 0x110B6, Type = Extend }); - // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B7, End = 0x110B8, Type = Extend }); - // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x110B9, End = 0x110BA, Type = Extend }); - // Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE - m_lst_code_range.Add(new RangeInfo() { Start = 0x110D0, End = 0x110E8, Type = ALetter }); - // Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x110F0, End = 0x110F9, Type = Numeric }); - // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11100, End = 0x11102, Type = Extend }); - // Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11103, End = 0x11126, Type = ALetter }); - // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11127, End = 0x1112B, Type = Extend }); - // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1112D, End = 0x11134, Type = Extend }); - // Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11136, End = 0x1113F, Type = Numeric }); - // Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11145, End = 0x11146, Type = Extend }); - // Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11150, End = 0x11172, Type = ALetter }); - // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11180, End = 0x11181, Type = Extend }); - // Lo [48] SHARADA LETTER A..SHARADA LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11183, End = 0x111B2, Type = ALetter }); - // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x111B3, End = 0x111B5, Type = Extend }); - // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x111B6, End = 0x111BE, Type = Extend }); - // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x111BF, End = 0x111C0, Type = Extend }); - // Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM - m_lst_code_range.Add(new RangeInfo() { Start = 0x111C1, End = 0x111C4, Type = ALetter }); - // Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x111C9, End = 0x111CC, Type = Extend }); - // Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x111D0, End = 0x111D9, Type = Numeric }); - // Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11200, End = 0x11211, Type = ALetter }); - // Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11213, End = 0x1122B, Type = ALetter }); - // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x1122C, End = 0x1122E, Type = Extend }); - // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x1122F, End = 0x11231, Type = Extend }); - // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11232, End = 0x11233, Type = Extend }); - // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11236, End = 0x11237, Type = Extend }); - // Lo [7] MULTANI LETTER A..MULTANI LETTER GA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11280, End = 0x11286, Type = ALetter }); - // Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1128A, End = 0x1128D, Type = ALetter }); - // Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1128F, End = 0x1129D, Type = ALetter }); - // Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1129F, End = 0x112A8, Type = ALetter }); - // Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x112B0, End = 0x112DE, Type = ALetter }); - // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x112E0, End = 0x112E2, Type = Extend }); - // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x112E3, End = 0x112EA, Type = Extend }); - // Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x112F0, End = 0x112F9, Type = Numeric }); - // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11300, End = 0x11301, Type = Extend }); - // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11302, End = 0x11303, Type = Extend }); - // Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x11305, End = 0x1130C, Type = ALetter }); - // Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x1130F, End = 0x11310, Type = ALetter }); - // Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11313, End = 0x11328, Type = ALetter }); - // Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1132A, End = 0x11330, Type = ALetter }); - // Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11332, End = 0x11333, Type = ALetter }); - // Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11335, End = 0x11339, Type = ALetter }); - // Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1133B, End = 0x1133C, Type = Extend }); - // Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I - m_lst_code_range.Add(new RangeInfo() { Start = 0x1133E, End = 0x1133F, Type = Extend }); - // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x11341, End = 0x11344, Type = Extend }); - // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11347, End = 0x11348, Type = Extend }); - // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1134B, End = 0x1134D, Type = Extend }); - // Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1135D, End = 0x11361, Type = ALetter }); - // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x11362, End = 0x11363, Type = Extend }); - // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX - m_lst_code_range.Add(new RangeInfo() { Start = 0x11366, End = 0x1136C, Type = Extend }); - // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11370, End = 0x11374, Type = Extend }); - // Lo [53] NEWA LETTER A..NEWA LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11400, End = 0x11434, Type = ALetter }); - // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x11435, End = 0x11437, Type = Extend }); - // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11438, End = 0x1143F, Type = Extend }); - // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11440, End = 0x11441, Type = Extend }); - // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11442, End = 0x11444, Type = Extend }); - // Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11447, End = 0x1144A, Type = ALetter }); - // Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11450, End = 0x11459, Type = Numeric }); - // Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1145F, End = 0x11461, Type = ALetter }); - // Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11480, End = 0x114AF, Type = ALetter }); - // Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x114B0, End = 0x114B2, Type = Extend }); - // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL - m_lst_code_range.Add(new RangeInfo() { Start = 0x114B3, End = 0x114B8, Type = Extend }); - // Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x114BB, End = 0x114BE, Type = Extend }); - // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x114BF, End = 0x114C0, Type = Extend }); - // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x114C2, End = 0x114C3, Type = Extend }); - // Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG - m_lst_code_range.Add(new RangeInfo() { Start = 0x114C4, End = 0x114C5, Type = ALetter }); - // Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x114D0, End = 0x114D9, Type = Numeric }); - // Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11580, End = 0x115AE, Type = ALetter }); - // Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x115AF, End = 0x115B1, Type = Extend }); - // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x115B2, End = 0x115B5, Type = Extend }); - // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x115B8, End = 0x115BB, Type = Extend }); - // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x115BC, End = 0x115BD, Type = Extend }); - // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x115BF, End = 0x115C0, Type = Extend }); - // Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U - m_lst_code_range.Add(new RangeInfo() { Start = 0x115D8, End = 0x115DB, Type = ALetter }); - // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x115DC, End = 0x115DD, Type = Extend }); - // Lo [48] MODI LETTER A..MODI LETTER LLA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11600, End = 0x1162F, Type = ALetter }); - // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x11630, End = 0x11632, Type = Extend }); - // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11633, End = 0x1163A, Type = Extend }); - // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x1163B, End = 0x1163C, Type = Extend }); - // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1163F, End = 0x11640, Type = Extend }); - // Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11650, End = 0x11659, Type = Numeric }); - // Lo [43] TAKRI LETTER A..TAKRI LETTER RRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11680, End = 0x116AA, Type = ALetter }); - // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x116AE, End = 0x116AF, Type = Extend }); - // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x116B0, End = 0x116B5, Type = Extend }); - // Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x116C0, End = 0x116C9, Type = Numeric }); - // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1171D, End = 0x1171F, Type = Extend }); - // Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11720, End = 0x11721, Type = Extend }); - // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11722, End = 0x11725, Type = Extend }); - // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER - m_lst_code_range.Add(new RangeInfo() { Start = 0x11727, End = 0x1172B, Type = Extend }); - // Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11730, End = 0x11739, Type = Numeric }); - // Lo [44] DOGRA LETTER A..DOGRA LETTER RRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11800, End = 0x1182B, Type = ALetter }); - // Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x1182C, End = 0x1182E, Type = Extend }); - // Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1182F, End = 0x11837, Type = Extend }); - // Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11839, End = 0x1183A, Type = Extend }); - // L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO - m_lst_code_range.Add(new RangeInfo() { Start = 0x118A0, End = 0x118DF, Type = ALetter }); - // Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x118E0, End = 0x118E9, Type = Numeric }); - // Lo [8] WARANG CITI OM..DIVES AKURU LETTER E - m_lst_code_range.Add(new RangeInfo() { Start = 0x118FF, End = 0x11906, Type = ALetter }); - // Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1190C, End = 0x11913, Type = ALetter }); - // Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11915, End = 0x11916, Type = ALetter }); - // Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11918, End = 0x1192F, Type = ALetter }); - // Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E - m_lst_code_range.Add(new RangeInfo() { Start = 0x11930, End = 0x11935, Type = Extend }); - // Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11937, End = 0x11938, Type = Extend }); - // Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x1193B, End = 0x1193C, Type = Extend }); - // Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11950, End = 0x11959, Type = Numeric }); - // Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x119A0, End = 0x119A7, Type = ALetter }); - // Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x119AA, End = 0x119D0, Type = ALetter }); - // Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II - m_lst_code_range.Add(new RangeInfo() { Start = 0x119D1, End = 0x119D3, Type = Extend }); - // Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR - m_lst_code_range.Add(new RangeInfo() { Start = 0x119D4, End = 0x119D7, Type = Extend }); - // Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x119DA, End = 0x119DB, Type = Extend }); - // Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x119DC, End = 0x119DF, Type = Extend }); - // Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A01, End = 0x11A0A, Type = Extend }); - // Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A0B, End = 0x11A32, Type = ALetter }); - // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A33, End = 0x11A38, Type = Extend }); - // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A3B, End = 0x11A3E, Type = Extend }); - // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A51, End = 0x11A56, Type = Extend }); - // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A57, End = 0x11A58, Type = Extend }); - // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A59, End = 0x11A5B, Type = Extend }); - // Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A5C, End = 0x11A89, Type = ALetter }); - // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A8A, End = 0x11A96, Type = Extend }); - // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER - m_lst_code_range.Add(new RangeInfo() { Start = 0x11A98, End = 0x11A99, Type = Extend }); - // Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL - m_lst_code_range.Add(new RangeInfo() { Start = 0x11AB0, End = 0x11AF8, Type = ALetter }); - // Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C00, End = 0x11C08, Type = ALetter }); - // Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C0A, End = 0x11C2E, Type = ALetter }); - // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C30, End = 0x11C36, Type = Extend }); - // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C38, End = 0x11C3D, Type = Extend }); - // Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C50, End = 0x11C59, Type = Numeric }); - // Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C72, End = 0x11C8F, Type = ALetter }); - // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11C92, End = 0x11CA7, Type = Extend }); - // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11CAA, End = 0x11CB0, Type = Extend }); - // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E - m_lst_code_range.Add(new RangeInfo() { Start = 0x11CB2, End = 0x11CB3, Type = Extend }); - // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11CB5, End = 0x11CB6, Type = Extend }); - // Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D00, End = 0x11D06, Type = ALetter }); - // Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D08, End = 0x11D09, Type = ALetter }); - // Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D0B, End = 0x11D30, Type = ALetter }); - // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D31, End = 0x11D36, Type = Extend }); - // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D3C, End = 0x11D3D, Type = Extend }); - // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D3F, End = 0x11D45, Type = Extend }); - // Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D50, End = 0x11D59, Type = Numeric }); - // Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D60, End = 0x11D65, Type = ALetter }); - // Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D67, End = 0x11D68, Type = ALetter }); - // Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D6A, End = 0x11D89, Type = ALetter }); - // Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D8A, End = 0x11D8E, Type = Extend }); - // Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D90, End = 0x11D91, Type = Extend }); - // Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU - m_lst_code_range.Add(new RangeInfo() { Start = 0x11D93, End = 0x11D94, Type = Extend }); - // Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x11DA0, End = 0x11DA9, Type = Numeric }); - // Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA - m_lst_code_range.Add(new RangeInfo() { Start = 0x11EE0, End = 0x11EF2, Type = ALetter }); - // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U - m_lst_code_range.Add(new RangeInfo() { Start = 0x11EF3, End = 0x11EF4, Type = Extend }); - // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - m_lst_code_range.Add(new RangeInfo() { Start = 0x11EF5, End = 0x11EF6, Type = Extend }); - // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U - m_lst_code_range.Add(new RangeInfo() { Start = 0x12000, End = 0x12399, Type = ALetter }); - // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM - m_lst_code_range.Add(new RangeInfo() { Start = 0x12400, End = 0x1246E, Type = ALetter }); - // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU - m_lst_code_range.Add(new RangeInfo() { Start = 0x12480, End = 0x12543, Type = ALetter }); - // Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 - m_lst_code_range.Add(new RangeInfo() { Start = 0x12F90, End = 0x12FF0, Type = ALetter }); - // Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 - m_lst_code_range.Add(new RangeInfo() { Start = 0x13000, End = 0x1342E, Type = ALetter }); - // Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT - m_lst_code_range.Add(new RangeInfo() { Start = 0x13430, End = 0x13438, Type = Format }); - // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 - m_lst_code_range.Add(new RangeInfo() { Start = 0x14400, End = 0x14646, Type = ALetter }); - // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ - m_lst_code_range.Add(new RangeInfo() { Start = 0x16800, End = 0x16A38, Type = ALetter }); - // Lo [31] MRO LETTER TA..MRO LETTER TEK - m_lst_code_range.Add(new RangeInfo() { Start = 0x16A40, End = 0x16A5E, Type = ALetter }); - // Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x16A60, End = 0x16A69, Type = Numeric }); - // Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA - m_lst_code_range.Add(new RangeInfo() { Start = 0x16A70, End = 0x16ABE, Type = ALetter }); - // Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x16AC0, End = 0x16AC9, Type = Numeric }); - // Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I - m_lst_code_range.Add(new RangeInfo() { Start = 0x16AD0, End = 0x16AED, Type = ALetter }); - // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE - m_lst_code_range.Add(new RangeInfo() { Start = 0x16AF0, End = 0x16AF4, Type = Extend }); - // Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU - m_lst_code_range.Add(new RangeInfo() { Start = 0x16B00, End = 0x16B2F, Type = ALetter }); - // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM - m_lst_code_range.Add(new RangeInfo() { Start = 0x16B30, End = 0x16B36, Type = Extend }); - // Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM - m_lst_code_range.Add(new RangeInfo() { Start = 0x16B40, End = 0x16B43, Type = ALetter }); - // Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x16B50, End = 0x16B59, Type = Numeric }); - // Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS - m_lst_code_range.Add(new RangeInfo() { Start = 0x16B63, End = 0x16B77, Type = ALetter }); - // Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ - m_lst_code_range.Add(new RangeInfo() { Start = 0x16B7D, End = 0x16B8F, Type = ALetter }); - // L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y - m_lst_code_range.Add(new RangeInfo() { Start = 0x16E40, End = 0x16E7F, Type = ALetter }); - // Lo [75] MIAO LETTER PA..MIAO LETTER RTE - m_lst_code_range.Add(new RangeInfo() { Start = 0x16F00, End = 0x16F4A, Type = ALetter }); - // Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI - m_lst_code_range.Add(new RangeInfo() { Start = 0x16F51, End = 0x16F87, Type = Extend }); - // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW - m_lst_code_range.Add(new RangeInfo() { Start = 0x16F8F, End = 0x16F92, Type = Extend }); - // Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 - m_lst_code_range.Add(new RangeInfo() { Start = 0x16F93, End = 0x16F9F, Type = ALetter }); - // Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x16FE0, End = 0x16FE1, Type = ALetter }); - // Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY - m_lst_code_range.Add(new RangeInfo() { Start = 0x16FF0, End = 0x16FF1, Type = Extend }); - // Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1AFF0, End = 0x1AFF3, Type = Katakana }); - // Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1AFF5, End = 0x1AFFB, Type = Katakana }); - // Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1AFFD, End = 0x1AFFE, Type = Katakana }); - // Lo [3] KATAKANA LETTER ARCHAIC YI..KATAKANA LETTER ARCHAIC WU - m_lst_code_range.Add(new RangeInfo() { Start = 0x1B120, End = 0x1B122, Type = Katakana }); - // Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N - m_lst_code_range.Add(new RangeInfo() { Start = 0x1B164, End = 0x1B167, Type = Katakana }); - // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BC00, End = 0x1BC6A, Type = ALetter }); - // Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BC70, End = 0x1BC7C, Type = ALetter }); - // Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BC80, End = 0x1BC88, Type = ALetter }); - // Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BC90, End = 0x1BC99, Type = ALetter }); - // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BC9D, End = 0x1BC9E, Type = Extend }); - // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP - m_lst_code_range.Add(new RangeInfo() { Start = 0x1BCA0, End = 0x1BCA3, Type = Format }); - // Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1CF00, End = 0x1CF2D, Type = Extend }); - // Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG - m_lst_code_range.Add(new RangeInfo() { Start = 0x1CF30, End = 0x1CF46, Type = Extend }); - // Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D165, End = 0x1D166, Type = Extend }); - // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D167, End = 0x1D169, Type = Extend }); - // Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D16D, End = 0x1D172, Type = Extend }); - // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D173, End = 0x1D17A, Type = Format }); - // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D17B, End = 0x1D182, Type = Extend }); - // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D185, End = 0x1D18B, Type = Extend }); - // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D1AA, End = 0x1D1AD, Type = Extend }); - // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D242, End = 0x1D244, Type = Extend }); - // L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D400, End = 0x1D454, Type = ALetter }); - // L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D456, End = 0x1D49C, Type = ALetter }); - // L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D49E, End = 0x1D49F, Type = ALetter }); - // L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D4A5, End = 0x1D4A6, Type = ALetter }); - // L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D4A9, End = 0x1D4AC, Type = ALetter }); - // L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D4AE, End = 0x1D4B9, Type = ALetter }); - // L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D4BD, End = 0x1D4C3, Type = ALetter }); - // L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D4C5, End = 0x1D505, Type = ALetter }); - // L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D507, End = 0x1D50A, Type = ALetter }); - // L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D50D, End = 0x1D514, Type = ALetter }); - // L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D516, End = 0x1D51C, Type = ALetter }); - // L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D51E, End = 0x1D539, Type = ALetter }); - // L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D53B, End = 0x1D53E, Type = ALetter }); - // L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D540, End = 0x1D544, Type = ALetter }); - // L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D54A, End = 0x1D550, Type = ALetter }); - // L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D552, End = 0x1D6A5, Type = ALetter }); - // L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D6A8, End = 0x1D6C0, Type = ALetter }); - // L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D6C2, End = 0x1D6DA, Type = ALetter }); - // L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D6DC, End = 0x1D6FA, Type = ALetter }); - // L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D6FC, End = 0x1D714, Type = ALetter }); - // L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D716, End = 0x1D734, Type = ALetter }); - // L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D736, End = 0x1D74E, Type = ALetter }); - // L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D750, End = 0x1D76E, Type = ALetter }); - // L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D770, End = 0x1D788, Type = ALetter }); - // L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D78A, End = 0x1D7A8, Type = ALetter }); - // L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D7AA, End = 0x1D7C2, Type = ALetter }); - // L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D7C4, End = 0x1D7CB, Type = ALetter }); - // Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1D7CE, End = 0x1D7FF, Type = Numeric }); - // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DA00, End = 0x1DA36, Type = Extend }); - // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DA3B, End = 0x1DA6C, Type = Extend }); - // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DA9B, End = 0x1DA9F, Type = Extend }); - // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DAA1, End = 0x1DAAF, Type = Extend }); - // L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DF00, End = 0x1DF09, Type = ALetter }); - // L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1DF0B, End = 0x1DF1E, Type = ALetter }); - // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E000, End = 0x1E006, Type = Extend }); - // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E008, End = 0x1E018, Type = Extend }); - // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E01B, End = 0x1E021, Type = Extend }); - // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E023, End = 0x1E024, Type = Extend }); - // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E026, End = 0x1E02A, Type = Extend }); - // Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E100, End = 0x1E12C, Type = ALetter }); - // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E130, End = 0x1E136, Type = Extend }); - // Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E137, End = 0x1E13D, Type = ALetter }); - // Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E140, End = 0x1E149, Type = Numeric }); - // Lo [30] TOTO LETTER PA..TOTO LETTER A - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E290, End = 0x1E2AD, Type = ALetter }); - // Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E2C0, End = 0x1E2EB, Type = ALetter }); - // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E2EC, End = 0x1E2EF, Type = Extend }); - // Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E2F0, End = 0x1E2F9, Type = Numeric }); - // Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E7E0, End = 0x1E7E6, Type = ALetter }); - // Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E7E8, End = 0x1E7EB, Type = ALetter }); - // Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E7ED, End = 0x1E7EE, Type = ALetter }); - // Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E7F0, End = 0x1E7FE, Type = ALetter }); - // Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E800, End = 0x1E8C4, Type = ALetter }); - // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E8D0, End = 0x1E8D6, Type = Extend }); - // L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E900, End = 0x1E943, Type = ALetter }); - // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E944, End = 0x1E94A, Type = Extend }); - // Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1E950, End = 0x1E959, Type = Numeric }); - // Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE00, End = 0x1EE03, Type = ALetter }); - // Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE05, End = 0x1EE1F, Type = ALetter }); - // Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE21, End = 0x1EE22, Type = ALetter }); - // Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE29, End = 0x1EE32, Type = ALetter }); - // Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE34, End = 0x1EE37, Type = ALetter }); - // Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE4D, End = 0x1EE4F, Type = ALetter }); - // Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE51, End = 0x1EE52, Type = ALetter }); - // Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE61, End = 0x1EE62, Type = ALetter }); - // Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE67, End = 0x1EE6A, Type = ALetter }); - // Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE6C, End = 0x1EE72, Type = ALetter }); - // Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE74, End = 0x1EE77, Type = ALetter }); - // Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE79, End = 0x1EE7C, Type = ALetter }); - // Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE80, End = 0x1EE89, Type = ALetter }); - // Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EE8B, End = 0x1EE9B, Type = ALetter }); - // Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EEA1, End = 0x1EEA3, Type = ALetter }); - // Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EEA5, End = 0x1EEA9, Type = ALetter }); - // Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1EEAB, End = 0x1EEBB, Type = ALetter }); - // E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F000, End = 0x1F003, Type = Extended_Pictographic }); - // E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F005, End = 0x1F0CE, Type = Extended_Pictographic }); - // E0.0 [48] (🃐..🃿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F0D0, End = 0x1F0FF, Type = Extended_Pictographic }); - // E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F10D, End = 0x1F10F, Type = Extended_Pictographic }); - // So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F130, End = 0x1F149, Type = ALetter }); - // So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F150, End = 0x1F169, Type = ALetter }); - // E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F16C, End = 0x1F16F, Type = Extended_Pictographic }); - // So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F170, End = 0x1F189, Type = ALetter }); - // E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F170, End = 0x1F171, Type = Extended_Pictographic }); - // E0.6 [2] (🅾️..🅿️) O button (blood type)..P button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F17E, End = 0x1F17F, Type = Extended_Pictographic }); - // E0.6 [10] (🆑..🆚) CL button..VS button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F191, End = 0x1F19A, Type = Extended_Pictographic }); - // E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F1AD, End = 0x1F1E5, Type = Extended_Pictographic }); - // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F1E6, End = 0x1F1FF, Type = Regional_Indicator }); - // E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F201, End = 0x1F202, Type = Extended_Pictographic }); - // E0.0 [13] (🈃..🈏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F203, End = 0x1F20F, Type = Extended_Pictographic }); - // E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F232, End = 0x1F23A, Type = Extended_Pictographic }); - // E0.0 [4] (🈼..🈿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F23C, End = 0x1F23F, Type = Extended_Pictographic }); - // E0.0 [7] (🉉..🉏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F249, End = 0x1F24F, Type = Extended_Pictographic }); - // E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F250, End = 0x1F251, Type = Extended_Pictographic }); - // E0.0 [174] (🉒..🋿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F252, End = 0x1F2FF, Type = Extended_Pictographic }); - // E0.6 [13] (🌀..🌌) cyclone..milky way - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F300, End = 0x1F30C, Type = Extended_Pictographic }); - // E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F30D, End = 0x1F30E, Type = Extended_Pictographic }); - // E0.6 [3] (🌓..🌕) first quarter moon..full moon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F313, End = 0x1F315, Type = Extended_Pictographic }); - // E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F316, End = 0x1F318, Type = Extended_Pictographic }); - // E1.0 [2] (🌝..🌞) full moon face..sun with face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F31D, End = 0x1F31E, Type = Extended_Pictographic }); - // E0.6 [2] (🌟..🌠) glowing star..shooting star - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F31F, End = 0x1F320, Type = Extended_Pictographic }); - // E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F322, End = 0x1F323, Type = Extended_Pictographic }); - // E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F324, End = 0x1F32C, Type = Extended_Pictographic }); - // E1.0 [3] (🌭..🌯) hot dog..burrito - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F32D, End = 0x1F32F, Type = Extended_Pictographic }); - // E0.6 [2] (🌰..🌱) chestnut..seedling - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F330, End = 0x1F331, Type = Extended_Pictographic }); - // E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F332, End = 0x1F333, Type = Extended_Pictographic }); - // E0.6 [2] (🌴..🌵) palm tree..cactus - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F334, End = 0x1F335, Type = Extended_Pictographic }); - // E0.6 [20] (🌷..🍊) tulip..tangerine - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F337, End = 0x1F34A, Type = Extended_Pictographic }); - // E0.6 [4] (🍌..🍏) banana..green apple - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F34C, End = 0x1F34F, Type = Extended_Pictographic }); - // E0.6 [43] (🍑..🍻) peach..clinking beer mugs - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F351, End = 0x1F37B, Type = Extended_Pictographic }); - // E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F37E, End = 0x1F37F, Type = Extended_Pictographic }); - // E0.6 [20] (🎀..🎓) ribbon..graduation cap - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F380, End = 0x1F393, Type = Extended_Pictographic }); - // E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F394, End = 0x1F395, Type = Extended_Pictographic }); - // E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F396, End = 0x1F397, Type = Extended_Pictographic }); - // E0.7 [3] (🎙️..🎛️) studio microphone..control knobs - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F399, End = 0x1F39B, Type = Extended_Pictographic }); - // E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F39C, End = 0x1F39D, Type = Extended_Pictographic }); - // E0.7 [2] (🎞️..🎟️) film frames..admission tickets - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F39E, End = 0x1F39F, Type = Extended_Pictographic }); - // E0.6 [37] (🎠..🏄) carousel horse..person surfing - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3A0, End = 0x1F3C4, Type = Extended_Pictographic }); - // E0.7 [4] (🏋️..🏎️) person lifting weights..racing car - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3CB, End = 0x1F3CE, Type = Extended_Pictographic }); - // E1.0 [5] (🏏..🏓) cricket game..ping pong - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3CF, End = 0x1F3D3, Type = Extended_Pictographic }); - // E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3D4, End = 0x1F3DF, Type = Extended_Pictographic }); - // E0.6 [4] (🏠..🏣) house..Japanese post office - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3E0, End = 0x1F3E3, Type = Extended_Pictographic }); - // E0.6 [12] (🏥..🏰) hospital..castle - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3E5, End = 0x1F3F0, Type = Extended_Pictographic }); - // E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3F1, End = 0x1F3F2, Type = Extended_Pictographic }); - // E1.0 [3] (🏸..🏺) badminton..amphora - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3F8, End = 0x1F3FA, Type = Extended_Pictographic }); - // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F3FB, End = 0x1F3FF, Type = Extend }); - // E1.0 [8] (🐀..🐇) rat..rabbit - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F400, End = 0x1F407, Type = Extended_Pictographic }); - // E1.0 [3] (🐉..🐋) dragon..whale - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F409, End = 0x1F40B, Type = Extended_Pictographic }); - // E0.6 [3] (🐌..🐎) snail..horse - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F40C, End = 0x1F40E, Type = Extended_Pictographic }); - // E1.0 [2] (🐏..🐐) ram..goat - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F40F, End = 0x1F410, Type = Extended_Pictographic }); - // E0.6 [2] (🐑..🐒) ewe..monkey - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F411, End = 0x1F412, Type = Extended_Pictographic }); - // E0.6 [19] (🐗..🐩) boar..poodle - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F417, End = 0x1F429, Type = Extended_Pictographic }); - // E0.6 [20] (🐫..🐾) two-hump camel..paw prints - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F42B, End = 0x1F43E, Type = Extended_Pictographic }); - // E0.6 [35] (👂..👤) ear..bust in silhouette - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F442, End = 0x1F464, Type = Extended_Pictographic }); - // E0.6 [6] (👦..👫) boy..woman and man holding hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F466, End = 0x1F46B, Type = Extended_Pictographic }); - // E1.0 [2] (👬..👭) men holding hands..women holding hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F46C, End = 0x1F46D, Type = Extended_Pictographic }); - // E0.6 [63] (👮..💬) police officer..speech balloon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F46E, End = 0x1F4AC, Type = Extended_Pictographic }); - // E0.6 [8] (💮..💵) white flower..dollar banknote - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4AE, End = 0x1F4B5, Type = Extended_Pictographic }); - // E1.0 [2] (💶..💷) euro banknote..pound banknote - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4B6, End = 0x1F4B7, Type = Extended_Pictographic }); - // E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4B8, End = 0x1F4EB, Type = Extended_Pictographic }); - // E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4EC, End = 0x1F4ED, Type = Extended_Pictographic }); - // E0.6 [5] (📰..📴) newspaper..mobile phone off - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4F0, End = 0x1F4F4, Type = Extended_Pictographic }); - // E0.6 [2] (📶..📷) antenna bars..camera - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4F6, End = 0x1F4F7, Type = Extended_Pictographic }); - // E0.6 [4] (📹..📼) video camera..videocassette - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4F9, End = 0x1F4FC, Type = Extended_Pictographic }); - // E1.0 [4] (📿..🔂) prayer beads..repeat single button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F4FF, End = 0x1F502, Type = Extended_Pictographic }); - // E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F504, End = 0x1F507, Type = Extended_Pictographic }); - // E0.6 [11] (🔊..🔔) speaker high volume..bell - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F50A, End = 0x1F514, Type = Extended_Pictographic }); - // E0.6 [22] (🔖..🔫) bookmark..water pistol - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F516, End = 0x1F52B, Type = Extended_Pictographic }); - // E1.0 [2] (🔬..🔭) microscope..telescope - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F52C, End = 0x1F52D, Type = Extended_Pictographic }); - // E0.6 [16] (🔮..🔽) crystal ball..downwards button - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F52E, End = 0x1F53D, Type = Extended_Pictographic }); - // E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F546, End = 0x1F548, Type = Extended_Pictographic }); - // E0.7 [2] (🕉️..🕊️) om..dove - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F549, End = 0x1F54A, Type = Extended_Pictographic }); - // E1.0 [4] (🕋..🕎) kaaba..menorah - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F54B, End = 0x1F54E, Type = Extended_Pictographic }); - // E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F550, End = 0x1F55B, Type = Extended_Pictographic }); - // E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F55C, End = 0x1F567, Type = Extended_Pictographic }); - // E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F568, End = 0x1F56E, Type = Extended_Pictographic }); - // E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F56F, End = 0x1F570, Type = Extended_Pictographic }); - // E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F571, End = 0x1F572, Type = Extended_Pictographic }); - // E0.7 [7] (🕳️..🕹️) hole..joystick - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F573, End = 0x1F579, Type = Extended_Pictographic }); - // E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F57B, End = 0x1F586, Type = Extended_Pictographic }); - // E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F588, End = 0x1F589, Type = Extended_Pictographic }); - // E0.7 [4] (🖊️..🖍️) pen..crayon - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F58A, End = 0x1F58D, Type = Extended_Pictographic }); - // E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F58E, End = 0x1F58F, Type = Extended_Pictographic }); - // E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F591, End = 0x1F594, Type = Extended_Pictographic }); - // E1.0 [2] (🖕..🖖) middle finger..vulcan salute - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F595, End = 0x1F596, Type = Extended_Pictographic }); - // E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F597, End = 0x1F5A3, Type = Extended_Pictographic }); - // E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5A6, End = 0x1F5A7, Type = Extended_Pictographic }); - // E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5A9, End = 0x1F5B0, Type = Extended_Pictographic }); - // E0.7 [2] (🖱️..🖲️) computer mouse..trackball - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5B1, End = 0x1F5B2, Type = Extended_Pictographic }); - // E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5B3, End = 0x1F5BB, Type = Extended_Pictographic }); - // E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5BD, End = 0x1F5C1, Type = Extended_Pictographic }); - // E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5C2, End = 0x1F5C4, Type = Extended_Pictographic }); - // E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5C5, End = 0x1F5D0, Type = Extended_Pictographic }); - // E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5D1, End = 0x1F5D3, Type = Extended_Pictographic }); - // E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5D4, End = 0x1F5DB, Type = Extended_Pictographic }); - // E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5DC, End = 0x1F5DE, Type = Extended_Pictographic }); - // E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5DF, End = 0x1F5E0, Type = Extended_Pictographic }); - // E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5E4, End = 0x1F5E7, Type = Extended_Pictographic }); - // E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5E9, End = 0x1F5EE, Type = Extended_Pictographic }); - // E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5F0, End = 0x1F5F2, Type = Extended_Pictographic }); - // E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5F4, End = 0x1F5F9, Type = Extended_Pictographic }); - // E0.6 [5] (🗻..🗿) mount fuji..moai - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F5FB, End = 0x1F5FF, Type = Extended_Pictographic }); - // E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F601, End = 0x1F606, Type = Extended_Pictographic }); - // E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F607, End = 0x1F608, Type = Extended_Pictographic }); - // E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F609, End = 0x1F60D, Type = Extended_Pictographic }); - // E0.6 [3] (😒..😔) unamused face..pensive face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F612, End = 0x1F614, Type = Extended_Pictographic }); - // E0.6 [3] (😜..😞) winking face with tongue..disappointed face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F61C, End = 0x1F61E, Type = Extended_Pictographic }); - // E0.6 [6] (😠..😥) angry face..sad but relieved face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F620, End = 0x1F625, Type = Extended_Pictographic }); - // E1.0 [2] (😦..😧) frowning face with open mouth..anguished face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F626, End = 0x1F627, Type = Extended_Pictographic }); - // E0.6 [4] (😨..😫) fearful face..tired face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F628, End = 0x1F62B, Type = Extended_Pictographic }); - // E1.0 [2] (😮..😯) face with open mouth..hushed face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F62E, End = 0x1F62F, Type = Extended_Pictographic }); - // E0.6 [4] (😰..😳) anxious face with sweat..flushed face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F630, End = 0x1F633, Type = Extended_Pictographic }); - // E0.6 [10] (😷..🙀) face with medical mask..weary cat - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F637, End = 0x1F640, Type = Extended_Pictographic }); - // E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F641, End = 0x1F644, Type = Extended_Pictographic }); - // E0.6 [11] (🙅..🙏) person gesturing NO..folded hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F645, End = 0x1F64F, Type = Extended_Pictographic }); - // E1.0 [2] (🚁..🚂) helicopter..locomotive - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F681, End = 0x1F682, Type = Extended_Pictographic }); - // E0.6 [3] (🚃..🚅) railway car..bullet train - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F683, End = 0x1F685, Type = Extended_Pictographic }); - // E1.0 [2] (🚊..🚋) tram..tram car - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F68A, End = 0x1F68B, Type = Extended_Pictographic }); - // E0.6 [3] (🚑..🚓) ambulance..police car - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F691, End = 0x1F693, Type = Extended_Pictographic }); - // E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F699, End = 0x1F69A, Type = Extended_Pictographic }); - // E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F69B, End = 0x1F6A1, Type = Extended_Pictographic }); - // E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6A4, End = 0x1F6A5, Type = Extended_Pictographic }); - // E0.6 [7] (🚧..🚭) construction..no smoking - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6A7, End = 0x1F6AD, Type = Extended_Pictographic }); - // E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6AE, End = 0x1F6B1, Type = Extended_Pictographic }); - // E1.0 [3] (🚳..🚵) no bicycles..person mountain biking - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6B3, End = 0x1F6B5, Type = Extended_Pictographic }); - // E1.0 [2] (🚷..🚸) no pedestrians..children crossing - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6B7, End = 0x1F6B8, Type = Extended_Pictographic }); - // E0.6 [6] (🚹..🚾) men’s room..water closet - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6B9, End = 0x1F6BE, Type = Extended_Pictographic }); - // E1.0 [5] (🛁..🛅) bathtub..left luggage - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6C1, End = 0x1F6C5, Type = Extended_Pictographic }); - // E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6C6, End = 0x1F6CA, Type = Extended_Pictographic }); - // E0.7 [3] (🛍️..🛏️) shopping bags..bed - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6CD, End = 0x1F6CF, Type = Extended_Pictographic }); - // E3.0 [2] (🛑..🛒) stop sign..shopping cart - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D1, End = 0x1F6D2, Type = Extended_Pictographic }); - // E0.0 [2] (🛓..🛔) STUPA..PAGODA - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D3, End = 0x1F6D4, Type = Extended_Pictographic }); - // E13.0 [2] (🛖..🛗) hut..elevator - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D6, End = 0x1F6D7, Type = Extended_Pictographic }); - // E0.0 [5] (🛘..🛜) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6D8, End = 0x1F6DC, Type = Extended_Pictographic }); - // E14.0 [3] (🛝..🛟) playground slide..ring buoy - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6DD, End = 0x1F6DF, Type = Extended_Pictographic }); - // E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6E0, End = 0x1F6E5, Type = Extended_Pictographic }); - // E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6E6, End = 0x1F6E8, Type = Extended_Pictographic }); - // E1.0 [2] (🛫..🛬) airplane departure..airplane arrival - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6EB, End = 0x1F6EC, Type = Extended_Pictographic }); - // E0.0 [3] (🛭..🛯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6ED, End = 0x1F6EF, Type = Extended_Pictographic }); - // E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6F1, End = 0x1F6F2, Type = Extended_Pictographic }); - // E3.0 [3] (🛴..🛶) kick scooter..canoe - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6F4, End = 0x1F6F6, Type = Extended_Pictographic }); - // E5.0 [2] (🛷..🛸) sled..flying saucer - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6F7, End = 0x1F6F8, Type = Extended_Pictographic }); - // E13.0 [2] (🛻..🛼) pickup truck..roller skate - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6FB, End = 0x1F6FC, Type = Extended_Pictographic }); - // E0.0 [3] (🛽..🛿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F6FD, End = 0x1F6FF, Type = Extended_Pictographic }); - // E0.0 [12] (🝴..🝿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F774, End = 0x1F77F, Type = Extended_Pictographic }); - // E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7D5, End = 0x1F7DF, Type = Extended_Pictographic }); - // E12.0 [12] (🟠..🟫) orange circle..brown square - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7E0, End = 0x1F7EB, Type = Extended_Pictographic }); - // E0.0 [4] (🟬..🟯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7EC, End = 0x1F7EF, Type = Extended_Pictographic }); - // E0.0 [15] (🟱..🟿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F7F1, End = 0x1F7FF, Type = Extended_Pictographic }); - // E0.0 [4] (🠌..🠏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F80C, End = 0x1F80F, Type = Extended_Pictographic }); - // E0.0 [8] (🡈..🡏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F848, End = 0x1F84F, Type = Extended_Pictographic }); - // E0.0 [6] (🡚..🡟) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F85A, End = 0x1F85F, Type = Extended_Pictographic }); - // E0.0 [8] (🢈..🢏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F888, End = 0x1F88F, Type = Extended_Pictographic }); - // E0.0 [82] (🢮..🣿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F8AE, End = 0x1F8FF, Type = Extended_Pictographic }); - // E12.0 [3] (🤍..🤏) white heart..pinching hand - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F90D, End = 0x1F90F, Type = Extended_Pictographic }); - // E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F910, End = 0x1F918, Type = Extended_Pictographic }); - // E3.0 [6] (🤙..🤞) call me hand..crossed fingers - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F919, End = 0x1F91E, Type = Extended_Pictographic }); - // E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F920, End = 0x1F927, Type = Extended_Pictographic }); - // E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F928, End = 0x1F92F, Type = Extended_Pictographic }); - // E5.0 [2] (🤱..🤲) breast-feeding..palms up together - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F931, End = 0x1F932, Type = Extended_Pictographic }); - // E3.0 [8] (🤳..🤺) selfie..person fencing - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F933, End = 0x1F93A, Type = Extended_Pictographic }); - // E3.0 [3] (🤼..🤾) people wrestling..person playing handball - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F93C, End = 0x1F93E, Type = Extended_Pictographic }); - // E3.0 [6] (🥀..🥅) wilted flower..goal net - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F940, End = 0x1F945, Type = Extended_Pictographic }); - // E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F947, End = 0x1F94B, Type = Extended_Pictographic }); - // E11.0 [3] (🥍..🥏) lacrosse..flying disc - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F94D, End = 0x1F94F, Type = Extended_Pictographic }); - // E3.0 [15] (🥐..🥞) croissant..pancakes - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F950, End = 0x1F95E, Type = Extended_Pictographic }); - // E5.0 [13] (🥟..🥫) dumpling..canned food - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F95F, End = 0x1F96B, Type = Extended_Pictographic }); - // E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F96C, End = 0x1F970, Type = Extended_Pictographic }); - // E11.0 [4] (🥳..🥶) partying face..cold face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F973, End = 0x1F976, Type = Extended_Pictographic }); - // E13.0 [2] (🥷..🥸) ninja..disguised face - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F977, End = 0x1F978, Type = Extended_Pictographic }); - // E11.0 [4] (🥼..🥿) lab coat..flat shoe - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F97C, End = 0x1F97F, Type = Extended_Pictographic }); - // E1.0 [5] (🦀..🦄) crab..unicorn - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F980, End = 0x1F984, Type = Extended_Pictographic }); - // E3.0 [13] (🦅..🦑) eagle..squid - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F985, End = 0x1F991, Type = Extended_Pictographic }); - // E5.0 [6] (🦒..🦗) giraffe..cricket - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F992, End = 0x1F997, Type = Extended_Pictographic }); - // E11.0 [11] (🦘..🦢) kangaroo..swan - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F998, End = 0x1F9A2, Type = Extended_Pictographic }); - // E13.0 [2] (🦣..🦤) mammoth..dodo - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9A3, End = 0x1F9A4, Type = Extended_Pictographic }); - // E12.0 [6] (🦥..🦪) sloth..oyster - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9A5, End = 0x1F9AA, Type = Extended_Pictographic }); - // E13.0 [3] (🦫..🦭) beaver..seal - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9AB, End = 0x1F9AD, Type = Extended_Pictographic }); - // E12.0 [2] (🦮..🦯) guide dog..white cane - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9AE, End = 0x1F9AF, Type = Extended_Pictographic }); - // E11.0 [10] (🦰..🦹) red hair..supervillain - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9B0, End = 0x1F9B9, Type = Extended_Pictographic }); - // E12.0 [6] (🦺..🦿) safety vest..mechanical leg - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9BA, End = 0x1F9BF, Type = Extended_Pictographic }); - // E11.0 [2] (🧁..🧂) cupcake..salt - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9C1, End = 0x1F9C2, Type = Extended_Pictographic }); - // E12.0 [8] (🧃..🧊) beverage box..ice - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9C3, End = 0x1F9CA, Type = Extended_Pictographic }); - // E12.0 [3] (🧍..🧏) person standing..deaf person - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9CD, End = 0x1F9CF, Type = Extended_Pictographic }); - // E5.0 [23] (🧐..🧦) face with monocle..socks - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9D0, End = 0x1F9E6, Type = Extended_Pictographic }); - // E11.0 [25] (🧧..🧿) red envelope..nazar amulet - m_lst_code_range.Add(new RangeInfo() { Start = 0x1F9E7, End = 0x1F9FF, Type = Extended_Pictographic }); - // E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA00, End = 0x1FA6F, Type = Extended_Pictographic }); - // E12.0 [4] (🩰..🩳) ballet shoes..shorts - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA70, End = 0x1FA73, Type = Extended_Pictographic }); - // E0.0 [3] (🩵..🩷) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA75, End = 0x1FA77, Type = Extended_Pictographic }); - // E12.0 [3] (🩸..🩺) drop of blood..stethoscope - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA78, End = 0x1FA7A, Type = Extended_Pictographic }); - // E14.0 [2] (🩻..🩼) x-ray..crutch - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA7B, End = 0x1FA7C, Type = Extended_Pictographic }); - // E0.0 [3] (🩽..🩿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA7D, End = 0x1FA7F, Type = Extended_Pictographic }); - // E12.0 [3] (🪀..🪂) yo-yo..parachute - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA80, End = 0x1FA82, Type = Extended_Pictographic }); - // E13.0 [4] (🪃..🪆) boomerang..nesting dolls - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA83, End = 0x1FA86, Type = Extended_Pictographic }); - // E0.0 [9] (🪇..🪏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA87, End = 0x1FA8F, Type = Extended_Pictographic }); - // E12.0 [6] (🪐..🪕) ringed planet..banjo - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA90, End = 0x1FA95, Type = Extended_Pictographic }); - // E13.0 [19] (🪖..🪨) military helmet..rock - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FA96, End = 0x1FAA8, Type = Extended_Pictographic }); - // E14.0 [4] (🪩..🪬) mirror ball..hamsa - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAA9, End = 0x1FAAC, Type = Extended_Pictographic }); - // E0.0 [3] (🪭..🪯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAAD, End = 0x1FAAF, Type = Extended_Pictographic }); - // E13.0 [7] (🪰..🪶) fly..feather - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAB0, End = 0x1FAB6, Type = Extended_Pictographic }); - // E14.0 [4] (🪷..🪺) lotus..nest with eggs - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAB7, End = 0x1FABA, Type = Extended_Pictographic }); - // E0.0 [5] (🪻..🪿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FABB, End = 0x1FABF, Type = Extended_Pictographic }); - // E13.0 [3] (🫀..🫂) anatomical heart..people hugging - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAC0, End = 0x1FAC2, Type = Extended_Pictographic }); - // E14.0 [3] (🫃..🫅) pregnant man..person with crown - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAC3, End = 0x1FAC5, Type = Extended_Pictographic }); - // E0.0 [10] (🫆..🫏) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAC6, End = 0x1FACF, Type = Extended_Pictographic }); - // E13.0 [7] (🫐..🫖) blueberries..teapot - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAD0, End = 0x1FAD6, Type = Extended_Pictographic }); - // E14.0 [3] (🫗..🫙) pouring liquid..jar - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAD7, End = 0x1FAD9, Type = Extended_Pictographic }); - // E0.0 [6] (🫚..🫟) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FADA, End = 0x1FADF, Type = Extended_Pictographic }); - // E14.0 [8] (🫠..🫧) melting face..bubbles - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAE0, End = 0x1FAE7, Type = Extended_Pictographic }); - // E0.0 [8] (🫨..🫯) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAE8, End = 0x1FAEF, Type = Extended_Pictographic }); - // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAF0, End = 0x1FAF6, Type = Extended_Pictographic }); - // E0.0 [9] (🫷..🫿) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FAF7, End = 0x1FAFF, Type = Extended_Pictographic }); - // Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FBF0, End = 0x1FBF9, Type = Numeric }); - // E0.0[1022] (🰀..🿽) .. - m_lst_code_range.Add(new RangeInfo() { Start = 0x1FC00, End = 0x1FFFD, Type = Extended_Pictographic }); - // Cf [96] TAG SPACE..CANCEL TAG - m_lst_code_range.Add(new RangeInfo() { Start = 0xE0020, End = 0xE007F, Type = Extend }); - // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - m_lst_code_range.Add(new RangeInfo() { Start = 0xE0100, End = 0xE01EF, Type = Extend }); - } - - /// - /// Create cache from [m_lst_code_range] to int[]; - /// - /// The array length - public static int CreateArrayCache() { - if (m_arr_cache_break_type != null) { - return m_arr_cache_break_type.Length; - } - int[] arr = new int[m_lst_code_range[m_lst_code_range.Count - 1].End + 1]; - foreach (var v in m_lst_code_range) { - for (int i = v.Start; i <= v.End; i++) - arr[i] = v.Type; - } - m_arr_cache_break_type = arr; - return arr.Length; - } - /// - /// Create cache from [m_lst_code_range] to Dictionary(int,int) - /// - /// Dictionary.Count - public static int CreateDictionaryCache() { - if (m_dic_cache_break_type != null) { - return m_dic_cache_break_type.Count; - } - Dictionary dic = new Dictionary(); - foreach (var v in m_lst_code_range) { - for (int i = v.Start; i <= v.End; i++) - dic.Add(i, v.Type); - } - m_dic_cache_break_type = dic; - return dic.Count; - } - /// - /// Clear all cache - /// - public static void ClearCache() { - if (m_dic_cache_break_type != null) { - m_dic_cache_break_type.Clear(); - } - m_dic_cache_break_type = null; - m_arr_cache_break_type = null; - } - - protected override bool ShouldBreak(int nRightBreakType, List lstHistoryBreakType) { - int nLeftBreakType = lstHistoryBreakType[lstHistoryBreakType.Count - 1]; - // The urles from: https://unicode.org/reports/tr29/#Word_Boundary_Rules - // AHLetter (ALetter | Hebrew_Letter) - // MidNumLetQ (MidNumLet | Single_Quote) - // ÷ Boundary (allow break here) - // × No boundary(do not allow break here) - // → Treat whatever on the left side as if it were what is on the right side - // WB* LeftChar_Property (÷ | × | →) RightChar_Property - - // Break at the start and end of text, unless the text is empty. - // WB1 sot ÷ Any - // WB2 Any ÷ eot - // for WB1 and WB2 not need code - - // Do not break within CRLF. - // WB3 CR × LF - if (nLeftBreakType == CR && nRightBreakType == LF) { - return false; - } - - // Otherwise break before and after Newlines (including CR and LF) - // WB3a (Newline | CR | LF) ÷ - // WB3b ÷ (Newline | CR | LF) - switch (nLeftBreakType) { - case Newline: - case CR: - case LF: - return true; - } - switch (nRightBreakType) { - case Newline: - case CR: - case LF: - return true; - } - - // Do not break within emoji zwj sequences. - // WB3c ZWJ × \p{Extended_Pictographic} - if (nLeftBreakType == ZWJ && nRightBreakType == Extended_Pictographic) { - return false; - } - - // Keep horizontal whitespace together. - // WB3d WSegSpace × WSegSpace - if (nLeftBreakType == WSegSpace && nRightBreakType == WSegSpace) { - return false; - } - - // Ignore Format and Extend characters, except after sot, CR, LF, and Newline. (See Section 6.2, Replacing Ignore Rules.) This also has the effect of: Any × (Format | Extend | ZWJ) - // WB4 X (Extend | Format | ZWJ)* → X - // Note: sorry.. I don't what's mean .. so ... - if (nRightBreakType == Format || nRightBreakType == Extend || nRightBreakType == ZWJ) { - return false; - } - - // Do not break between most letters. - // WB5 AHLetter × AHLetter - if ((nLeftBreakType == ALetter || nLeftBreakType == Hebrew_Letter) && (nRightBreakType == ALetter || nRightBreakType == Hebrew_Letter)) { - return false; - } - - // Do not break letters across certain punctuation. - // WB6 AHLetter × (MidLetter | MidNumLetQ) AHLetter - // WB7 AHLetter (MidLetter | MidNumLetQ) × AHLetter - // WB7a Hebrew_Letter × Single_Quote - // WB7b Hebrew_Letter × Double_Quote Hebrew_Letter - // WB7c Hebrew_Letter Double_Quote × Hebrew_Letter - if (nRightBreakType == ALetter || nRightBreakType == Hebrew_Letter) { // WB6 WB7 - if (lstHistoryBreakType.Count > 1) { - int a = lstHistoryBreakType[lstHistoryBreakType.Count - 2]; - int b = lstHistoryBreakType[lstHistoryBreakType.Count - 1]; - if ((a == ALetter || a == Hebrew_Letter) && (b == MidLetter || b == MidNumLet || b == Single_Quote)) { - return false; - } - } - } - if (nLeftBreakType == Hebrew_Letter && nRightBreakType == Single_Quote) { - return false; - } - if (nRightBreakType == Hebrew_Letter) { //WB7b WB7c - if (lstHistoryBreakType.Count > 1) { - int a = lstHistoryBreakType[lstHistoryBreakType.Count - 2]; - int b = lstHistoryBreakType[lstHistoryBreakType.Count - 1]; - if (a == Hebrew_Letter && b == Double_Quote) { - return false; - } - } - } - - // Do not break within sequences of digits, or digits adjacent to letters (“3a”, or “A3”). - // WB8 Numeric × Numeric - // WB9 AHLetter × Numeric - // WB10 Numeric × AHLetter - if (nLeftBreakType == Numeric && nRightBreakType == Numeric) { - return false; - } - if ((nLeftBreakType == ALetter || nLeftBreakType == Hebrew_Letter) && nRightBreakType == Numeric) { - return false; - } - if (nLeftBreakType == Numeric && (nRightBreakType == ALetter || nRightBreakType == Hebrew_Letter)) { - return false; - } - - // Do not break within sequences, such as “3.2” or “3,456.789”. - // WB11 Numeric (MidNum | MidNumLetQ) × Numeric - // WB12 Numeric × (MidNum | MidNumLetQ) Numeric - if (nRightBreakType == Numeric) { - if (lstHistoryBreakType.Count > 1) { - int a = lstHistoryBreakType[lstHistoryBreakType.Count - 2]; - int b = lstHistoryBreakType[lstHistoryBreakType.Count - 1]; - if (a == Numeric && (b == MidNum || b == MidNumLet || b == Single_Quote)) { - return false; - } - } - } - - // Do not break between Katakana. - // WB13 Katakana × Katakana - if (nLeftBreakType == Katakana && nRightBreakType == Katakana) { - return false; - } - - // Do not break from extenders. - // WB13a (AHLetter | Numeric | Katakana | ExtendNumLet) × ExtendNumLet - // WB13b ExtendNumLet × (AHLetter | Numeric | Katakana) - if (nRightBreakType == ExtendNumLet) { - switch (nLeftBreakType) { - case ALetter: - case Hebrew_Letter: - case Numeric: - case Katakana: - case ExtendNumLet: - return false; - } - } - if (nLeftBreakType == ExtendNumLet) { - switch (nRightBreakType) { - case ALetter: - case Hebrew_Letter: - case Numeric: - case Katakana: - return false; - } - } - - // Do not break within emoji flag sequences. That is, - // do not break between regional indicator (RI) symbols if there is an odd number of RI characters before the break point. - // GB12 sot (RI RI)* RI × RI - // GB13 [^RI] (RI RI)* RI × RI - if (nRightBreakType == Regional_Indicator) { - int nRICount = 0; - for (int i = lstHistoryBreakType.Count - 1; i >= 0; i--) { - if (lstHistoryBreakType[i] != Regional_Indicator) { - break; - } - nRICount++; - } - if (nRICount % 2 == 1) return false; - } - - // The rule not in unicode document. just by myself. - if (nLeftBreakType == nRightBreakType) return false; - return true; - } - - protected override int GetBreakProperty(int nCodePoint) { - switch (nCodePoint) { - case 0x00022: return Double_Quote; // Po QUOTATION MARK - case 0x00027: return Single_Quote; // Po APOSTROPHE - case 0x0FB1D: return Hebrew_Letter; // Lo HEBREW LETTER YOD WITH HIRIQ - case 0x0FB3E: return Hebrew_Letter; // Lo HEBREW LETTER MEM WITH DAGESH - case 0x0000D: return CR; // Cc - case 0x0000A: return LF; // Cc - case 0x00085: return Newline; // Cc - case 0x02028: return Newline; // Zl LINE SEPARATOR - case 0x02029: return Newline; // Zp PARAGRAPH SEPARATOR - case 0x005BF: return Extend; // Mn HEBREW POINT RAFE - case 0x005C7: return Extend; // Mn HEBREW POINT QAMATS QATAN - case 0x00670: return Extend; // Mn ARABIC LETTER SUPERSCRIPT ALEF - case 0x00711: return Extend; // Mn SYRIAC LETTER SUPERSCRIPT ALAPH - case 0x007FD: return Extend; // Mn NKO DANTAYALAN - case 0x00903: return Extend; // Mc DEVANAGARI SIGN VISARGA - case 0x0093A: return Extend; // Mn DEVANAGARI VOWEL SIGN OE - case 0x0093B: return Extend; // Mc DEVANAGARI VOWEL SIGN OOE - case 0x0093C: return Extend; // Mn DEVANAGARI SIGN NUKTA - case 0x0094D: return Extend; // Mn DEVANAGARI SIGN VIRAMA - case 0x00981: return Extend; // Mn BENGALI SIGN CANDRABINDU - case 0x009BC: return Extend; // Mn BENGALI SIGN NUKTA - case 0x009CD: return Extend; // Mn BENGALI SIGN VIRAMA - case 0x009D7: return Extend; // Mc BENGALI AU LENGTH MARK - case 0x009FE: return Extend; // Mn BENGALI SANDHI MARK - case 0x00A03: return Extend; // Mc GURMUKHI SIGN VISARGA - case 0x00A3C: return Extend; // Mn GURMUKHI SIGN NUKTA - case 0x00A51: return Extend; // Mn GURMUKHI SIGN UDAAT - case 0x00A75: return Extend; // Mn GURMUKHI SIGN YAKASH - case 0x00A83: return Extend; // Mc GUJARATI SIGN VISARGA - case 0x00ABC: return Extend; // Mn GUJARATI SIGN NUKTA - case 0x00AC9: return Extend; // Mc GUJARATI VOWEL SIGN CANDRA O - case 0x00ACD: return Extend; // Mn GUJARATI SIGN VIRAMA - case 0x00B01: return Extend; // Mn ORIYA SIGN CANDRABINDU - case 0x00B3C: return Extend; // Mn ORIYA SIGN NUKTA - case 0x00B3E: return Extend; // Mc ORIYA VOWEL SIGN AA - case 0x00B3F: return Extend; // Mn ORIYA VOWEL SIGN I - case 0x00B40: return Extend; // Mc ORIYA VOWEL SIGN II - case 0x00B4D: return Extend; // Mn ORIYA SIGN VIRAMA - case 0x00B57: return Extend; // Mc ORIYA AU LENGTH MARK - case 0x00B82: return Extend; // Mn TAMIL SIGN ANUSVARA - case 0x00BC0: return Extend; // Mn TAMIL VOWEL SIGN II - case 0x00BCD: return Extend; // Mn TAMIL SIGN VIRAMA - case 0x00BD7: return Extend; // Mc TAMIL AU LENGTH MARK - case 0x00C00: return Extend; // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE - case 0x00C04: return Extend; // Mn TELUGU SIGN COMBINING ANUSVARA ABOVE - case 0x00C3C: return Extend; // Mn TELUGU SIGN NUKTA - case 0x00C81: return Extend; // Mn KANNADA SIGN CANDRABINDU - case 0x00CBC: return Extend; // Mn KANNADA SIGN NUKTA - case 0x00CBE: return Extend; // Mc KANNADA VOWEL SIGN AA - case 0x00CBF: return Extend; // Mn KANNADA VOWEL SIGN I - case 0x00CC6: return Extend; // Mn KANNADA VOWEL SIGN E - case 0x00D4D: return Extend; // Mn MALAYALAM SIGN VIRAMA - case 0x00D57: return Extend; // Mc MALAYALAM AU LENGTH MARK - case 0x00D81: return Extend; // Mn SINHALA SIGN CANDRABINDU - case 0x00DCA: return Extend; // Mn SINHALA SIGN AL-LAKUNA - case 0x00DD6: return Extend; // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA - case 0x00E31: return Extend; // Mn THAI CHARACTER MAI HAN-AKAT - case 0x00EB1: return Extend; // Mn LAO VOWEL SIGN MAI KAN - case 0x00F35: return Extend; // Mn TIBETAN MARK NGAS BZUNG NYI ZLA - case 0x00F37: return Extend; // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS - case 0x00F39: return Extend; // Mn TIBETAN MARK TSA -PHRU - case 0x00F7F: return Extend; // Mc TIBETAN SIGN RNAM BCAD - case 0x00FC6: return Extend; // Mn TIBETAN SYMBOL PADMA GDAN - case 0x01031: return Extend; // Mc MYANMAR VOWEL SIGN E - case 0x01038: return Extend; // Mc MYANMAR SIGN VISARGA - case 0x01082: return Extend; // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA - case 0x0108D: return Extend; // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE - case 0x0108F: return Extend; // Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 - case 0x0109D: return Extend; // Mn MYANMAR VOWEL SIGN AITON AI - case 0x01715: return Extend; // Mc TAGALOG SIGN PAMUDPOD - case 0x01734: return Extend; // Mc HANUNOO SIGN PAMUDPOD - case 0x017B6: return Extend; // Mc KHMER VOWEL SIGN AA - case 0x017C6: return Extend; // Mn KHMER SIGN NIKAHIT - case 0x017DD: return Extend; // Mn KHMER SIGN ATTHACAN - case 0x0180F: return Extend; // Mn MONGOLIAN FREE VARIATION SELECTOR FOUR - case 0x018A9: return Extend; // Mn MONGOLIAN LETTER ALI GALI DAGALGA - case 0x01932: return Extend; // Mn LIMBU SMALL LETTER ANUSVARA - case 0x01A1B: return Extend; // Mn BUGINESE VOWEL SIGN AE - case 0x01A55: return Extend; // Mc TAI THAM CONSONANT SIGN MEDIAL RA - case 0x01A56: return Extend; // Mn TAI THAM CONSONANT SIGN MEDIAL LA - case 0x01A57: return Extend; // Mc TAI THAM CONSONANT SIGN LA TANG LAI - case 0x01A60: return Extend; // Mn TAI THAM SIGN SAKOT - case 0x01A61: return Extend; // Mc TAI THAM VOWEL SIGN A - case 0x01A62: return Extend; // Mn TAI THAM VOWEL SIGN MAI SAT - case 0x01A7F: return Extend; // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT - case 0x01ABE: return Extend; // Me COMBINING PARENTHESES OVERLAY - case 0x01B04: return Extend; // Mc BALINESE SIGN BISAH - case 0x01B34: return Extend; // Mn BALINESE SIGN REREKAN - case 0x01B35: return Extend; // Mc BALINESE VOWEL SIGN TEDUNG - case 0x01B3B: return Extend; // Mc BALINESE VOWEL SIGN RA REPA TEDUNG - case 0x01B3C: return Extend; // Mn BALINESE VOWEL SIGN LA LENGA - case 0x01B42: return Extend; // Mn BALINESE VOWEL SIGN PEPET - case 0x01B82: return Extend; // Mc SUNDANESE SIGN PANGWISAD - case 0x01BA1: return Extend; // Mc SUNDANESE CONSONANT SIGN PAMINGKAL - case 0x01BAA: return Extend; // Mc SUNDANESE SIGN PAMAAEH - case 0x01BE6: return Extend; // Mn BATAK SIGN TOMPI - case 0x01BE7: return Extend; // Mc BATAK VOWEL SIGN E - case 0x01BED: return Extend; // Mn BATAK VOWEL SIGN KARO O - case 0x01BEE: return Extend; // Mc BATAK VOWEL SIGN U - case 0x01CE1: return Extend; // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA - case 0x01CED: return Extend; // Mn VEDIC SIGN TIRYAK - case 0x01CF4: return Extend; // Mn VEDIC TONE CANDRA ABOVE - case 0x01CF7: return Extend; // Mc VEDIC SIGN ATIKRAMA - case 0x0200C: return Extend; // Cf ZERO WIDTH NON-JOINER - case 0x020E1: return Extend; // Mn COMBINING LEFT RIGHT ARROW ABOVE - case 0x02D7F: return Extend; // Mn TIFINAGH CONSONANT JOINER - case 0x0A66F: return Extend; // Mn COMBINING CYRILLIC VZMET - case 0x0A802: return Extend; // Mn SYLOTI NAGRI SIGN DVISVARA - case 0x0A806: return Extend; // Mn SYLOTI NAGRI SIGN HASANTA - case 0x0A80B: return Extend; // Mn SYLOTI NAGRI SIGN ANUSVARA - case 0x0A827: return Extend; // Mc SYLOTI NAGRI VOWEL SIGN OO - case 0x0A82C: return Extend; // Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA - case 0x0A8FF: return Extend; // Mn DEVANAGARI VOWEL SIGN AY - case 0x0A983: return Extend; // Mc JAVANESE SIGN WIGNYAN - case 0x0A9B3: return Extend; // Mn JAVANESE SIGN CECAK TELU - case 0x0A9E5: return Extend; // Mn MYANMAR SIGN SHAN SAW - case 0x0AA43: return Extend; // Mn CHAM CONSONANT SIGN FINAL NG - case 0x0AA4C: return Extend; // Mn CHAM CONSONANT SIGN FINAL M - case 0x0AA4D: return Extend; // Mc CHAM CONSONANT SIGN FINAL H - case 0x0AA7B: return Extend; // Mc MYANMAR SIGN PAO KAREN TONE - case 0x0AA7C: return Extend; // Mn MYANMAR SIGN TAI LAING TONE-2 - case 0x0AA7D: return Extend; // Mc MYANMAR SIGN TAI LAING TONE-5 - case 0x0AAB0: return Extend; // Mn TAI VIET MAI KANG - case 0x0AAC1: return Extend; // Mn TAI VIET TONE MAI THO - case 0x0AAEB: return Extend; // Mc MEETEI MAYEK VOWEL SIGN II - case 0x0AAF5: return Extend; // Mc MEETEI MAYEK VOWEL SIGN VISARGA - case 0x0AAF6: return Extend; // Mn MEETEI MAYEK VIRAMA - case 0x0ABE5: return Extend; // Mn MEETEI MAYEK VOWEL SIGN ANAP - case 0x0ABE8: return Extend; // Mn MEETEI MAYEK VOWEL SIGN UNAP - case 0x0ABEC: return Extend; // Mc MEETEI MAYEK LUM IYEK - case 0x0ABED: return Extend; // Mn MEETEI MAYEK APUN IYEK - case 0x0FB1E: return Extend; // Mn HEBREW POINT JUDEO-SPANISH VARIKA - case 0x101FD: return Extend; // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE - case 0x102E0: return Extend; // Mn COPTIC EPACT THOUSANDS MARK - case 0x10A3F: return Extend; // Mn KHAROSHTHI VIRAMA - case 0x11000: return Extend; // Mc BRAHMI SIGN CANDRABINDU - case 0x11001: return Extend; // Mn BRAHMI SIGN ANUSVARA - case 0x11002: return Extend; // Mc BRAHMI SIGN VISARGA - case 0x11070: return Extend; // Mn BRAHMI SIGN OLD TAMIL VIRAMA - case 0x11082: return Extend; // Mc KAITHI SIGN VISARGA - case 0x110C2: return Extend; // Mn KAITHI VOWEL SIGN VOCALIC R - case 0x1112C: return Extend; // Mc CHAKMA VOWEL SIGN E - case 0x11173: return Extend; // Mn MAHAJANI SIGN NUKTA - case 0x11182: return Extend; // Mc SHARADA SIGN VISARGA - case 0x111CE: return Extend; // Mc SHARADA VOWEL SIGN PRISHTHAMATRA E - case 0x111CF: return Extend; // Mn SHARADA SIGN INVERTED CANDRABINDU - case 0x11234: return Extend; // Mn KHOJKI SIGN ANUSVARA - case 0x11235: return Extend; // Mc KHOJKI SIGN VIRAMA - case 0x1123E: return Extend; // Mn KHOJKI SIGN SUKUN - case 0x112DF: return Extend; // Mn KHUDAWADI SIGN ANUSVARA - case 0x11340: return Extend; // Mn GRANTHA VOWEL SIGN II - case 0x11357: return Extend; // Mc GRANTHA AU LENGTH MARK - case 0x11445: return Extend; // Mc NEWA SIGN VISARGA - case 0x11446: return Extend; // Mn NEWA SIGN NUKTA - case 0x1145E: return Extend; // Mn NEWA SANDHI MARK - case 0x114B9: return Extend; // Mc TIRHUTA VOWEL SIGN E - case 0x114BA: return Extend; // Mn TIRHUTA VOWEL SIGN SHORT E - case 0x114C1: return Extend; // Mc TIRHUTA SIGN VISARGA - case 0x115BE: return Extend; // Mc SIDDHAM SIGN VISARGA - case 0x1163D: return Extend; // Mn MODI SIGN ANUSVARA - case 0x1163E: return Extend; // Mc MODI SIGN VISARGA - case 0x116AB: return Extend; // Mn TAKRI SIGN ANUSVARA - case 0x116AC: return Extend; // Mc TAKRI SIGN VISARGA - case 0x116AD: return Extend; // Mn TAKRI VOWEL SIGN AA - case 0x116B6: return Extend; // Mc TAKRI SIGN VIRAMA - case 0x116B7: return Extend; // Mn TAKRI SIGN NUKTA - case 0x11726: return Extend; // Mc AHOM VOWEL SIGN E - case 0x11838: return Extend; // Mc DOGRA SIGN VISARGA - case 0x1193D: return Extend; // Mc DIVES AKURU SIGN HALANTA - case 0x1193E: return Extend; // Mn DIVES AKURU VIRAMA - case 0x11940: return Extend; // Mc DIVES AKURU MEDIAL YA - case 0x11942: return Extend; // Mc DIVES AKURU MEDIAL RA - case 0x11943: return Extend; // Mn DIVES AKURU SIGN NUKTA - case 0x119E0: return Extend; // Mn NANDINAGARI SIGN VIRAMA - case 0x119E4: return Extend; // Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E - case 0x11A39: return Extend; // Mc ZANABAZAR SQUARE SIGN VISARGA - case 0x11A47: return Extend; // Mn ZANABAZAR SQUARE SUBJOINER - case 0x11A97: return Extend; // Mc SOYOMBO SIGN VISARGA - case 0x11C2F: return Extend; // Mc BHAIKSUKI VOWEL SIGN AA - case 0x11C3E: return Extend; // Mc BHAIKSUKI SIGN VISARGA - case 0x11C3F: return Extend; // Mn BHAIKSUKI SIGN VIRAMA - case 0x11CA9: return Extend; // Mc MARCHEN SUBJOINED LETTER YA - case 0x11CB1: return Extend; // Mc MARCHEN VOWEL SIGN I - case 0x11CB4: return Extend; // Mc MARCHEN VOWEL SIGN O - case 0x11D3A: return Extend; // Mn MASARAM GONDI VOWEL SIGN E - case 0x11D47: return Extend; // Mn MASARAM GONDI RA-KARA - case 0x11D95: return Extend; // Mn GUNJALA GONDI SIGN ANUSVARA - case 0x11D96: return Extend; // Mc GUNJALA GONDI SIGN VISARGA - case 0x11D97: return Extend; // Mn GUNJALA GONDI VIRAMA - case 0x16F4F: return Extend; // Mn MIAO SIGN CONSONANT MODIFIER BAR - case 0x16FE4: return Extend; // Mn KHITAN SMALL SCRIPT FILLER - case 0x1DA75: return Extend; // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS - case 0x1DA84: return Extend; // Mn SIGNWRITING LOCATION HEAD NECK - case 0x1E2AE: return Extend; // Mn TOTO SIGN RISING TONE - case 0x000AD: return Format; // Cf SOFT HYPHEN - case 0x0061C: return Format; // Cf ARABIC LETTER MARK - case 0x006DD: return Format; // Cf ARABIC END OF AYAH - case 0x0070F: return Format; // Cf SYRIAC ABBREVIATION MARK - case 0x008E2: return Format; // Cf ARABIC DISPUTED END OF AYAH - case 0x0180E: return Format; // Cf MONGOLIAN VOWEL SEPARATOR - case 0x0FEFF: return Format; // Cf ZERO WIDTH NO-BREAK SPACE - case 0x110BD: return Format; // Cf KAITHI NUMBER SIGN - case 0x110CD: return Format; // Cf KAITHI NUMBER SIGN ABOVE - case 0xE0001: return Format; // Cf LANGUAGE TAG - case 0x030A0: return Katakana; // Pd KATAKANA-HIRAGANA DOUBLE HYPHEN - case 0x030FF: return Katakana; // Lo KATAKANA DIGRAPH KOTO - case 0x0FF70: return Katakana; // Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - case 0x1B000: return Katakana; // Lo KATAKANA LETTER ARCHAIC E - case 0x000AA: return ALetter; // Lo FEMININE ORDINAL INDICATOR - case 0x000B5: return ALetter; // L& MICRO SIGN - case 0x000BA: return ALetter; // Lo MASCULINE ORDINAL INDICATOR - case 0x001BB: return ALetter; // Lo LATIN LETTER TWO WITH STROKE - case 0x00294: return ALetter; // Lo LATIN LETTER GLOTTAL STOP - case 0x002EC: return ALetter; // Lm MODIFIER LETTER VOICING - case 0x002ED: return ALetter; // Sk MODIFIER LETTER UNASPIRATED - case 0x002EE: return ALetter; // Lm MODIFIER LETTER DOUBLE APOSTROPHE - case 0x00374: return ALetter; // Lm GREEK NUMERAL SIGN - case 0x0037A: return ALetter; // Lm GREEK YPOGEGRAMMENI - case 0x0037F: return ALetter; // L& GREEK CAPITAL LETTER YOT - case 0x00386: return ALetter; // L& GREEK CAPITAL LETTER ALPHA WITH TONOS - case 0x0038C: return ALetter; // L& GREEK CAPITAL LETTER OMICRON WITH TONOS - case 0x00559: return ALetter; // Lm ARMENIAN MODIFIER LETTER LEFT HALF RING - case 0x0055E: return ALetter; // Po ARMENIAN QUESTION MARK - case 0x0058A: return ALetter; // Pd ARMENIAN HYPHEN - case 0x005F3: return ALetter; // Po HEBREW PUNCTUATION GERESH - case 0x00640: return ALetter; // Lm ARABIC TATWEEL - case 0x006D5: return ALetter; // Lo ARABIC LETTER AE - case 0x006FF: return ALetter; // Lo ARABIC LETTER HEH WITH INVERTED V - case 0x00710: return ALetter; // Lo SYRIAC LETTER ALAPH - case 0x007B1: return ALetter; // Lo THAANA LETTER NAA - case 0x007FA: return ALetter; // Lm NKO LAJANYALAN - case 0x0081A: return ALetter; // Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT - case 0x00824: return ALetter; // Lm SAMARITAN MODIFIER LETTER SHORT A - case 0x00828: return ALetter; // Lm SAMARITAN MODIFIER LETTER I - case 0x008C9: return ALetter; // Lm ARABIC SMALL FARSI YEH - case 0x0093D: return ALetter; // Lo DEVANAGARI SIGN AVAGRAHA - case 0x00950: return ALetter; // Lo DEVANAGARI OM - case 0x00971: return ALetter; // Lm DEVANAGARI SIGN HIGH SPACING DOT - case 0x009B2: return ALetter; // Lo BENGALI LETTER LA - case 0x009BD: return ALetter; // Lo BENGALI SIGN AVAGRAHA - case 0x009CE: return ALetter; // Lo BENGALI LETTER KHANDA TA - case 0x009FC: return ALetter; // Lo BENGALI LETTER VEDIC ANUSVARA - case 0x00A5E: return ALetter; // Lo GURMUKHI LETTER FA - case 0x00ABD: return ALetter; // Lo GUJARATI SIGN AVAGRAHA - case 0x00AD0: return ALetter; // Lo GUJARATI OM - case 0x00AF9: return ALetter; // Lo GUJARATI LETTER ZHA - case 0x00B3D: return ALetter; // Lo ORIYA SIGN AVAGRAHA - case 0x00B71: return ALetter; // Lo ORIYA LETTER WA - case 0x00B83: return ALetter; // Lo TAMIL SIGN VISARGA - case 0x00B9C: return ALetter; // Lo TAMIL LETTER JA - case 0x00BD0: return ALetter; // Lo TAMIL OM - case 0x00C3D: return ALetter; // Lo TELUGU SIGN AVAGRAHA - case 0x00C5D: return ALetter; // Lo TELUGU LETTER NAKAARA POLLU - case 0x00C80: return ALetter; // Lo KANNADA SIGN SPACING CANDRABINDU - case 0x00CBD: return ALetter; // Lo KANNADA SIGN AVAGRAHA - case 0x00D3D: return ALetter; // Lo MALAYALAM SIGN AVAGRAHA - case 0x00D4E: return ALetter; // Lo MALAYALAM LETTER DOT REPH - case 0x00DBD: return ALetter; // Lo SINHALA LETTER DANTAJA LAYANNA - case 0x00F00: return ALetter; // Lo TIBETAN SYLLABLE OM - case 0x010C7: return ALetter; // L& GEORGIAN CAPITAL LETTER YN - case 0x010CD: return ALetter; // L& GEORGIAN CAPITAL LETTER AEN - case 0x010FC: return ALetter; // Lm MODIFIER LETTER GEORGIAN NAR - case 0x01258: return ALetter; // Lo ETHIOPIC SYLLABLE QHWA - case 0x012C0: return ALetter; // Lo ETHIOPIC SYLLABLE KXWA - case 0x01843: return ALetter; // Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN - case 0x018AA: return ALetter; // Lo MONGOLIAN LETTER MANCHU ALI GALI LHA - case 0x01CFA: return ALetter; // Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA - case 0x01D78: return ALetter; // Lm MODIFIER LETTER CYRILLIC EN - case 0x01F59: return ALetter; // L& GREEK CAPITAL LETTER UPSILON WITH DASIA - case 0x01F5B: return ALetter; // L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA - case 0x01F5D: return ALetter; // L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA - case 0x01FBE: return ALetter; // L& GREEK PROSGEGRAMMENI - case 0x02071: return ALetter; // Lm SUPERSCRIPT LATIN SMALL LETTER I - case 0x0207F: return ALetter; // Lm SUPERSCRIPT LATIN SMALL LETTER N - case 0x02102: return ALetter; // L& DOUBLE-STRUCK CAPITAL C - case 0x02107: return ALetter; // L& EULER CONSTANT - case 0x02115: return ALetter; // L& DOUBLE-STRUCK CAPITAL N - case 0x02124: return ALetter; // L& DOUBLE-STRUCK CAPITAL Z - case 0x02126: return ALetter; // L& OHM SIGN - case 0x02128: return ALetter; // L& BLACK-LETTER CAPITAL Z - case 0x02139: return ALetter; // L& INFORMATION SOURCE - case 0x0214E: return ALetter; // L& TURNED SMALL F - case 0x02D27: return ALetter; // L& GEORGIAN SMALL LETTER YN - case 0x02D2D: return ALetter; // L& GEORGIAN SMALL LETTER AEN - case 0x02D6F: return ALetter; // Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK - case 0x02E2F: return ALetter; // Lm VERTICAL TILDE - case 0x03005: return ALetter; // Lm IDEOGRAPHIC ITERATION MARK - case 0x0303B: return ALetter; // Lm VERTICAL IDEOGRAPHIC ITERATION MARK - case 0x0303C: return ALetter; // Lo MASU MARK - case 0x0A015: return ALetter; // Lm YI SYLLABLE WU - case 0x0A60C: return ALetter; // Lm VAI SYLLABLE LENGTHENER - case 0x0A66E: return ALetter; // Lo CYRILLIC LETTER MULTIOCULAR O - case 0x0A67F: return ALetter; // Lm CYRILLIC PAYEROK - case 0x0A770: return ALetter; // Lm MODIFIER LETTER US - case 0x0A788: return ALetter; // Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT - case 0x0A78F: return ALetter; // Lo LATIN LETTER SINOLOGICAL DOT - case 0x0A7D3: return ALetter; // L& LATIN SMALL LETTER DOUBLE THORN - case 0x0A7F7: return ALetter; // Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I - case 0x0A7FA: return ALetter; // L& LATIN LETTER SMALL CAPITAL TURNED M - case 0x0A8FB: return ALetter; // Lo DEVANAGARI HEADSTROKE - case 0x0A9CF: return ALetter; // Lm JAVANESE PANGRANGKEP - case 0x0AAF2: return ALetter; // Lo MEETEI MAYEK ANJI - case 0x0AB5B: return ALetter; // Sk MODIFIER BREVE WITH INVERTED BREVE - case 0x0AB69: return ALetter; // Lm MODIFIER LETTER SMALL TURNED W - case 0x10341: return ALetter; // Nl GOTHIC LETTER NINETY - case 0x1034A: return ALetter; // Nl GOTHIC LETTER NINE HUNDRED - case 0x10808: return ALetter; // Lo CYPRIOT SYLLABLE JO - case 0x1083C: return ALetter; // Lo CYPRIOT SYLLABLE ZA - case 0x10A00: return ALetter; // Lo KHAROSHTHI LETTER A - case 0x10F27: return ALetter; // Lo OLD SOGDIAN LIGATURE AYIN-DALETH - case 0x11075: return ALetter; // Lo BRAHMI LETTER OLD TAMIL LLA - case 0x11144: return ALetter; // Lo CHAKMA LETTER LHAA - case 0x11147: return ALetter; // Lo CHAKMA LETTER VAA - case 0x11176: return ALetter; // Lo MAHAJANI LIGATURE SHRI - case 0x111DA: return ALetter; // Lo SHARADA EKAM - case 0x111DC: return ALetter; // Lo SHARADA HEADSTROKE - case 0x11288: return ALetter; // Lo MULTANI LETTER GHA - case 0x1133D: return ALetter; // Lo GRANTHA SIGN AVAGRAHA - case 0x11350: return ALetter; // Lo GRANTHA OM - case 0x114C7: return ALetter; // Lo TIRHUTA OM - case 0x11644: return ALetter; // Lo MODI SIGN HUVA - case 0x116B8: return ALetter; // Lo TAKRI LETTER ARCHAIC KHA - case 0x11909: return ALetter; // Lo DIVES AKURU LETTER O - case 0x1193F: return ALetter; // Lo DIVES AKURU PREFIXED NASAL SIGN - case 0x11941: return ALetter; // Lo DIVES AKURU INITIAL RA - case 0x119E1: return ALetter; // Lo NANDINAGARI SIGN AVAGRAHA - case 0x119E3: return ALetter; // Lo NANDINAGARI HEADSTROKE - case 0x11A00: return ALetter; // Lo ZANABAZAR SQUARE LETTER A - case 0x11A3A: return ALetter; // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA - case 0x11A50: return ALetter; // Lo SOYOMBO LETTER A - case 0x11A9D: return ALetter; // Lo SOYOMBO MARK PLUTA - case 0x11C40: return ALetter; // Lo BHAIKSUKI SIGN AVAGRAHA - case 0x11D46: return ALetter; // Lo MASARAM GONDI REPHA - case 0x11D98: return ALetter; // Lo GUNJALA GONDI OM - case 0x11FB0: return ALetter; // Lo LISU LETTER YHA - case 0x16F50: return ALetter; // Lo MIAO LETTER NASALIZATION - case 0x16FE3: return ALetter; // Lm OLD CHINESE ITERATION MARK - case 0x1D4A2: return ALetter; // L& MATHEMATICAL SCRIPT CAPITAL G - case 0x1D4BB: return ALetter; // L& MATHEMATICAL SCRIPT SMALL F - case 0x1D546: return ALetter; // L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O - case 0x1DF0A: return ALetter; // Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK - case 0x1E14E: return ALetter; // Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ - case 0x1E94B: return ALetter; // Lm ADLAM NASALIZATION MARK - case 0x1EE24: return ALetter; // Lo ARABIC MATHEMATICAL INITIAL HEH - case 0x1EE27: return ALetter; // Lo ARABIC MATHEMATICAL INITIAL HAH - case 0x1EE39: return ALetter; // Lo ARABIC MATHEMATICAL INITIAL DAD - case 0x1EE3B: return ALetter; // Lo ARABIC MATHEMATICAL INITIAL GHAIN - case 0x1EE42: return ALetter; // Lo ARABIC MATHEMATICAL TAILED JEEM - case 0x1EE47: return ALetter; // Lo ARABIC MATHEMATICAL TAILED HAH - case 0x1EE49: return ALetter; // Lo ARABIC MATHEMATICAL TAILED YEH - case 0x1EE4B: return ALetter; // Lo ARABIC MATHEMATICAL TAILED LAM - case 0x1EE54: return ALetter; // Lo ARABIC MATHEMATICAL TAILED SHEEN - case 0x1EE57: return ALetter; // Lo ARABIC MATHEMATICAL TAILED KHAH - case 0x1EE59: return ALetter; // Lo ARABIC MATHEMATICAL TAILED DAD - case 0x1EE5B: return ALetter; // Lo ARABIC MATHEMATICAL TAILED GHAIN - case 0x1EE5D: return ALetter; // Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON - case 0x1EE5F: return ALetter; // Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF - case 0x1EE64: return ALetter; // Lo ARABIC MATHEMATICAL STRETCHED HEH - case 0x1EE7E: return ALetter; // Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH - case 0x0003A: return MidLetter; // Po COLON - case 0x000B7: return MidLetter; // Po MIDDLE DOT - case 0x00387: return MidLetter; // Po GREEK ANO TELEIA - case 0x0055F: return MidLetter; // Po ARMENIAN ABBREVIATION MARK - case 0x005F4: return MidLetter; // Po HEBREW PUNCTUATION GERSHAYIM - case 0x02027: return MidLetter; // Po HYPHENATION POINT - case 0x0FE13: return MidLetter; // Po PRESENTATION FORM FOR VERTICAL COLON - case 0x0FE55: return MidLetter; // Po SMALL COLON - case 0x0FF1A: return MidLetter; // Po FULLWIDTH COLON - case 0x0002C: return MidNum; // Po COMMA - case 0x0003B: return MidNum; // Po SEMICOLON - case 0x0037E: return MidNum; // Po GREEK QUESTION MARK - case 0x00589: return MidNum; // Po ARMENIAN FULL STOP - case 0x0066C: return MidNum; // Po ARABIC THOUSANDS SEPARATOR - case 0x007F8: return MidNum; // Po NKO COMMA - case 0x02044: return MidNum; // Sm FRACTION SLASH - case 0x0FE10: return MidNum; // Po PRESENTATION FORM FOR VERTICAL COMMA - case 0x0FE14: return MidNum; // Po PRESENTATION FORM FOR VERTICAL SEMICOLON - case 0x0FE50: return MidNum; // Po SMALL COMMA - case 0x0FE54: return MidNum; // Po SMALL SEMICOLON - case 0x0FF0C: return MidNum; // Po FULLWIDTH COMMA - case 0x0FF1B: return MidNum; // Po FULLWIDTH SEMICOLON - case 0x0002E: return MidNumLet; // Po FULL STOP - case 0x02018: return MidNumLet; // Pi LEFT SINGLE QUOTATION MARK - case 0x02019: return MidNumLet; // Pf RIGHT SINGLE QUOTATION MARK - case 0x02024: return MidNumLet; // Po ONE DOT LEADER - case 0x0FE52: return MidNumLet; // Po SMALL FULL STOP - case 0x0FF07: return MidNumLet; // Po FULLWIDTH APOSTROPHE - case 0x0FF0E: return MidNumLet; // Po FULLWIDTH FULL STOP - case 0x0066B: return Numeric; // Po ARABIC DECIMAL SEPARATOR - case 0x0005F: return ExtendNumLet; // Pc LOW LINE - case 0x0202F: return ExtendNumLet; // Zs NARROW NO-BREAK SPACE - case 0x02054: return ExtendNumLet; // Pc INVERTED UNDERTIE - case 0x0FF3F: return ExtendNumLet; // Pc FULLWIDTH LOW LINE - case 0x0200D: return ZWJ; // Cf ZERO WIDTH JOINER - case 0x00020: return WSegSpace; // Zs SPACE - case 0x01680: return WSegSpace; // Zs OGHAM SPACE MARK - case 0x0205F: return WSegSpace; // Zs MEDIUM MATHEMATICAL SPACE - case 0x03000: return WSegSpace; // Zs IDEOGRAPHIC SPACE - case 0x000A9: return Extended_Pictographic; // E0.6 [1] (©️) copyright - case 0x000AE: return Extended_Pictographic; // E0.6 [1] (®️) registered - case 0x0203C: return Extended_Pictographic; // E0.6 [1] (‼️) double exclamation mark - case 0x02049: return Extended_Pictographic; // E0.6 [1] (⁉️) exclamation question mark - case 0x02122: return Extended_Pictographic; // E0.6 [1] (™️) trade mark - //case 0x02139: return Extended_Pictographic; // E0.6 [1] (ℹ️) information - case 0x02328: return Extended_Pictographic; // E1.0 [1] (⌨️) keyboard - case 0x02388: return Extended_Pictographic; // E0.0 [1] (⎈) HELM SYMBOL - case 0x023CF: return Extended_Pictographic; // E1.0 [1] (⏏️) eject button - case 0x023EF: return Extended_Pictographic; // E1.0 [1] (⏯️) play or pause button - case 0x023F0: return Extended_Pictographic; // E0.6 [1] (⏰) alarm clock - case 0x023F3: return Extended_Pictographic; // E0.6 [1] (⏳) hourglass not done - case 0x024C2: return Extended_Pictographic; // E0.6 [1] (Ⓜ️) circled M - case 0x025B6: return Extended_Pictographic; // E0.6 [1] (▶️) play button - case 0x025C0: return Extended_Pictographic; // E0.6 [1] (◀️) reverse button - case 0x02604: return Extended_Pictographic; // E1.0 [1] (☄️) comet - case 0x02605: return Extended_Pictographic; // E0.0 [1] (★) BLACK STAR - case 0x0260E: return Extended_Pictographic; // E0.6 [1] (☎️) telephone - case 0x02611: return Extended_Pictographic; // E0.6 [1] (☑️) check box with check - case 0x02612: return Extended_Pictographic; // E0.0 [1] (☒) BALLOT BOX WITH X - case 0x02618: return Extended_Pictographic; // E1.0 [1] (☘️) shamrock - case 0x0261D: return Extended_Pictographic; // E0.6 [1] (☝️) index pointing up - case 0x02620: return Extended_Pictographic; // E1.0 [1] (☠️) skull and crossbones - case 0x02621: return Extended_Pictographic; // E0.0 [1] (☡) CAUTION SIGN - case 0x02626: return Extended_Pictographic; // E1.0 [1] (☦️) orthodox cross - case 0x0262A: return Extended_Pictographic; // E0.7 [1] (☪️) star and crescent - case 0x0262E: return Extended_Pictographic; // E1.0 [1] (☮️) peace symbol - case 0x0262F: return Extended_Pictographic; // E0.7 [1] (☯️) yin yang - case 0x0263A: return Extended_Pictographic; // E0.6 [1] (☺️) smiling face - case 0x02640: return Extended_Pictographic; // E4.0 [1] (♀️) female sign - case 0x02641: return Extended_Pictographic; // E0.0 [1] (♁) EARTH - case 0x02642: return Extended_Pictographic; // E4.0 [1] (♂️) male sign - case 0x0265F: return Extended_Pictographic; // E11.0 [1] (♟️) chess pawn - case 0x02660: return Extended_Pictographic; // E0.6 [1] (♠️) spade suit - case 0x02663: return Extended_Pictographic; // E0.6 [1] (♣️) club suit - case 0x02664: return Extended_Pictographic; // E0.0 [1] (♤) WHITE SPADE SUIT - case 0x02667: return Extended_Pictographic; // E0.0 [1] (♧) WHITE CLUB SUIT - case 0x02668: return Extended_Pictographic; // E0.6 [1] (♨️) hot springs - case 0x0267B: return Extended_Pictographic; // E0.6 [1] (♻️) recycling symbol - case 0x0267E: return Extended_Pictographic; // E11.0 [1] (♾️) infinity - case 0x0267F: return Extended_Pictographic; // E0.6 [1] (♿) wheelchair symbol - case 0x02692: return Extended_Pictographic; // E1.0 [1] (⚒️) hammer and pick - case 0x02693: return Extended_Pictographic; // E0.6 [1] (⚓) anchor - case 0x02694: return Extended_Pictographic; // E1.0 [1] (⚔️) crossed swords - case 0x02695: return Extended_Pictographic; // E4.0 [1] (⚕️) medical symbol - case 0x02698: return Extended_Pictographic; // E0.0 [1] (⚘) FLOWER - case 0x02699: return Extended_Pictographic; // E1.0 [1] (⚙️) gear - case 0x0269A: return Extended_Pictographic; // E0.0 [1] (⚚) STAFF OF HERMES - case 0x026A7: return Extended_Pictographic; // E13.0 [1] (⚧️) transgender symbol - case 0x026C8: return Extended_Pictographic; // E0.7 [1] (⛈️) cloud with lightning and rain - case 0x026CE: return Extended_Pictographic; // E0.6 [1] (⛎) Ophiuchus - case 0x026CF: return Extended_Pictographic; // E0.7 [1] (⛏️) pick - case 0x026D0: return Extended_Pictographic; // E0.0 [1] (⛐) CAR SLIDING - case 0x026D1: return Extended_Pictographic; // E0.7 [1] (⛑️) rescue worker’s helmet - case 0x026D2: return Extended_Pictographic; // E0.0 [1] (⛒) CIRCLED CROSSING LANES - case 0x026D3: return Extended_Pictographic; // E0.7 [1] (⛓️) chains - case 0x026D4: return Extended_Pictographic; // E0.6 [1] (⛔) no entry - case 0x026E9: return Extended_Pictographic; // E0.7 [1] (⛩️) shinto shrine - case 0x026EA: return Extended_Pictographic; // E0.6 [1] (⛪) church - case 0x026F4: return Extended_Pictographic; // E0.7 [1] (⛴️) ferry - case 0x026F5: return Extended_Pictographic; // E0.6 [1] (⛵) sailboat - case 0x026F6: return Extended_Pictographic; // E0.0 [1] (⛶) SQUARE FOUR CORNERS - case 0x026FA: return Extended_Pictographic; // E0.6 [1] (⛺) tent - case 0x026FD: return Extended_Pictographic; // E0.6 [1] (⛽) fuel pump - case 0x02702: return Extended_Pictographic; // E0.6 [1] (✂️) scissors - case 0x02705: return Extended_Pictographic; // E0.6 [1] (✅) check mark button - case 0x0270D: return Extended_Pictographic; // E0.7 [1] (✍️) writing hand - case 0x0270E: return Extended_Pictographic; // E0.0 [1] (✎) LOWER RIGHT PENCIL - case 0x0270F: return Extended_Pictographic; // E0.6 [1] (✏️) pencil - case 0x02712: return Extended_Pictographic; // E0.6 [1] (✒️) black nib - case 0x02714: return Extended_Pictographic; // E0.6 [1] (✔️) check mark - case 0x02716: return Extended_Pictographic; // E0.6 [1] (✖️) multiply - case 0x0271D: return Extended_Pictographic; // E0.7 [1] (✝️) latin cross - case 0x02721: return Extended_Pictographic; // E0.7 [1] (✡️) star of David - case 0x02728: return Extended_Pictographic; // E0.6 [1] (✨) sparkles - case 0x02744: return Extended_Pictographic; // E0.6 [1] (❄️) snowflake - case 0x02747: return Extended_Pictographic; // E0.6 [1] (❇️) sparkle - case 0x0274C: return Extended_Pictographic; // E0.6 [1] (❌) cross mark - case 0x0274E: return Extended_Pictographic; // E0.6 [1] (❎) cross mark button - case 0x02757: return Extended_Pictographic; // E0.6 [1] (❗) red exclamation mark - case 0x02763: return Extended_Pictographic; // E1.0 [1] (❣️) heart exclamation - case 0x02764: return Extended_Pictographic; // E0.6 [1] (❤️) red heart - case 0x027A1: return Extended_Pictographic; // E0.6 [1] (➡️) right arrow - case 0x027B0: return Extended_Pictographic; // E0.6 [1] (➰) curly loop - case 0x027BF: return Extended_Pictographic; // E1.0 [1] (➿) double curly loop - case 0x02B50: return Extended_Pictographic; // E0.6 [1] (⭐) star - case 0x02B55: return Extended_Pictographic; // E0.6 [1] (⭕) hollow red circle - case 0x03030: return Extended_Pictographic; // E0.6 [1] (〰️) wavy dash - case 0x0303D: return Extended_Pictographic; // E0.6 [1] (〽️) part alternation mark - case 0x03297: return Extended_Pictographic; // E0.6 [1] (㊗️) Japanese “congratulations” button - case 0x03299: return Extended_Pictographic; // E0.6 [1] (㊙️) Japanese “secret” button - case 0x1F004: return Extended_Pictographic; // E0.6 [1] (🀄) mahjong red dragon - case 0x1F0CF: return Extended_Pictographic; // E0.6 [1] (🃏) joker - case 0x1F12F: return Extended_Pictographic; // E0.0 [1] (🄯) COPYLEFT SYMBOL - case 0x1F18E: return Extended_Pictographic; // E0.6 [1] (🆎) AB button (blood type) - case 0x1F21A: return Extended_Pictographic; // E0.6 [1] (🈚) Japanese “free of charge” button - case 0x1F22F: return Extended_Pictographic; // E0.6 [1] (🈯) Japanese “reserved” button - case 0x1F30F: return Extended_Pictographic; // E0.6 [1] (🌏) globe showing Asia-Australia - case 0x1F310: return Extended_Pictographic; // E1.0 [1] (🌐) globe with meridians - case 0x1F311: return Extended_Pictographic; // E0.6 [1] (🌑) new moon - case 0x1F312: return Extended_Pictographic; // E1.0 [1] (🌒) waxing crescent moon - case 0x1F319: return Extended_Pictographic; // E0.6 [1] (🌙) crescent moon - case 0x1F31A: return Extended_Pictographic; // E1.0 [1] (🌚) new moon face - case 0x1F31B: return Extended_Pictographic; // E0.6 [1] (🌛) first quarter moon face - case 0x1F31C: return Extended_Pictographic; // E0.7 [1] (🌜) last quarter moon face - case 0x1F321: return Extended_Pictographic; // E0.7 [1] (🌡️) thermometer - case 0x1F336: return Extended_Pictographic; // E0.7 [1] (🌶️) hot pepper - case 0x1F34B: return Extended_Pictographic; // E1.0 [1] (🍋) lemon - case 0x1F350: return Extended_Pictographic; // E1.0 [1] (🍐) pear - case 0x1F37C: return Extended_Pictographic; // E1.0 [1] (🍼) baby bottle - case 0x1F37D: return Extended_Pictographic; // E0.7 [1] (🍽️) fork and knife with plate - case 0x1F398: return Extended_Pictographic; // E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS - case 0x1F3C5: return Extended_Pictographic; // E1.0 [1] (🏅) sports medal - case 0x1F3C6: return Extended_Pictographic; // E0.6 [1] (🏆) trophy - case 0x1F3C7: return Extended_Pictographic; // E1.0 [1] (🏇) horse racing - case 0x1F3C8: return Extended_Pictographic; // E0.6 [1] (🏈) american football - case 0x1F3C9: return Extended_Pictographic; // E1.0 [1] (🏉) rugby football - case 0x1F3CA: return Extended_Pictographic; // E0.6 [1] (🏊) person swimming - case 0x1F3E4: return Extended_Pictographic; // E1.0 [1] (🏤) post office - case 0x1F3F3: return Extended_Pictographic; // E0.7 [1] (🏳️) white flag - case 0x1F3F4: return Extended_Pictographic; // E1.0 [1] (🏴) black flag - case 0x1F3F5: return Extended_Pictographic; // E0.7 [1] (🏵️) rosette - case 0x1F3F6: return Extended_Pictographic; // E0.0 [1] (🏶) BLACK ROSETTE - case 0x1F3F7: return Extended_Pictographic; // E0.7 [1] (🏷️) label - case 0x1F408: return Extended_Pictographic; // E0.7 [1] (🐈) cat - case 0x1F413: return Extended_Pictographic; // E1.0 [1] (🐓) rooster - case 0x1F414: return Extended_Pictographic; // E0.6 [1] (🐔) chicken - case 0x1F415: return Extended_Pictographic; // E0.7 [1] (🐕) dog - case 0x1F416: return Extended_Pictographic; // E1.0 [1] (🐖) pig - case 0x1F42A: return Extended_Pictographic; // E1.0 [1] (🐪) camel - case 0x1F43F: return Extended_Pictographic; // E0.7 [1] (🐿️) chipmunk - case 0x1F440: return Extended_Pictographic; // E0.6 [1] (👀) eyes - case 0x1F441: return Extended_Pictographic; // E0.7 [1] (👁️) eye - case 0x1F465: return Extended_Pictographic; // E1.0 [1] (👥) busts in silhouette - case 0x1F4AD: return Extended_Pictographic; // E1.0 [1] (💭) thought balloon - case 0x1F4EE: return Extended_Pictographic; // E0.6 [1] (📮) postbox - case 0x1F4EF: return Extended_Pictographic; // E1.0 [1] (📯) postal horn - case 0x1F4F5: return Extended_Pictographic; // E1.0 [1] (📵) no mobile phones - case 0x1F4F8: return Extended_Pictographic; // E1.0 [1] (📸) camera with flash - case 0x1F4FD: return Extended_Pictographic; // E0.7 [1] (📽️) film projector - case 0x1F4FE: return Extended_Pictographic; // E0.0 [1] (📾) PORTABLE STEREO - case 0x1F503: return Extended_Pictographic; // E0.6 [1] (🔃) clockwise vertical arrows - case 0x1F508: return Extended_Pictographic; // E0.7 [1] (🔈) speaker low volume - case 0x1F509: return Extended_Pictographic; // E1.0 [1] (🔉) speaker medium volume - case 0x1F515: return Extended_Pictographic; // E1.0 [1] (🔕) bell with slash - case 0x1F54F: return Extended_Pictographic; // E0.0 [1] (🕏) BOWL OF HYGIEIA - case 0x1F57A: return Extended_Pictographic; // E3.0 [1] (🕺) man dancing - case 0x1F587: return Extended_Pictographic; // E0.7 [1] (🖇️) linked paperclips - case 0x1F590: return Extended_Pictographic; // E0.7 [1] (🖐️) hand with fingers splayed - case 0x1F5A4: return Extended_Pictographic; // E3.0 [1] (🖤) black heart - case 0x1F5A5: return Extended_Pictographic; // E0.7 [1] (🖥️) desktop computer - case 0x1F5A8: return Extended_Pictographic; // E0.7 [1] (🖨️) printer - case 0x1F5BC: return Extended_Pictographic; // E0.7 [1] (🖼️) framed picture - case 0x1F5E1: return Extended_Pictographic; // E0.7 [1] (🗡️) dagger - case 0x1F5E2: return Extended_Pictographic; // E0.0 [1] (🗢) LIPS - case 0x1F5E3: return Extended_Pictographic; // E0.7 [1] (🗣️) speaking head - case 0x1F5E8: return Extended_Pictographic; // E2.0 [1] (🗨️) left speech bubble - case 0x1F5EF: return Extended_Pictographic; // E0.7 [1] (🗯️) right anger bubble - case 0x1F5F3: return Extended_Pictographic; // E0.7 [1] (🗳️) ballot box with ballot - case 0x1F5FA: return Extended_Pictographic; // E0.7 [1] (🗺️) world map - case 0x1F600: return Extended_Pictographic; // E1.0 [1] (😀) grinning face - case 0x1F60E: return Extended_Pictographic; // E1.0 [1] (😎) smiling face with sunglasses - case 0x1F60F: return Extended_Pictographic; // E0.6 [1] (😏) smirking face - case 0x1F610: return Extended_Pictographic; // E0.7 [1] (😐) neutral face - case 0x1F611: return Extended_Pictographic; // E1.0 [1] (😑) expressionless face - case 0x1F615: return Extended_Pictographic; // E1.0 [1] (😕) confused face - case 0x1F616: return Extended_Pictographic; // E0.6 [1] (😖) confounded face - case 0x1F617: return Extended_Pictographic; // E1.0 [1] (😗) kissing face - case 0x1F618: return Extended_Pictographic; // E0.6 [1] (😘) face blowing a kiss - case 0x1F619: return Extended_Pictographic; // E1.0 [1] (😙) kissing face with smiling eyes - case 0x1F61A: return Extended_Pictographic; // E0.6 [1] (😚) kissing face with closed eyes - case 0x1F61B: return Extended_Pictographic; // E1.0 [1] (😛) face with tongue - case 0x1F61F: return Extended_Pictographic; // E1.0 [1] (😟) worried face - case 0x1F62C: return Extended_Pictographic; // E1.0 [1] (😬) grimacing face - case 0x1F62D: return Extended_Pictographic; // E0.6 [1] (😭) loudly crying face - case 0x1F634: return Extended_Pictographic; // E1.0 [1] (😴) sleeping face - case 0x1F635: return Extended_Pictographic; // E0.6 [1] (😵) face with crossed-out eyes - case 0x1F636: return Extended_Pictographic; // E1.0 [1] (😶) face without mouth - case 0x1F680: return Extended_Pictographic; // E0.6 [1] (🚀) rocket - case 0x1F686: return Extended_Pictographic; // E1.0 [1] (🚆) train - case 0x1F687: return Extended_Pictographic; // E0.6 [1] (🚇) metro - case 0x1F688: return Extended_Pictographic; // E1.0 [1] (🚈) light rail - case 0x1F689: return Extended_Pictographic; // E0.6 [1] (🚉) station - case 0x1F68C: return Extended_Pictographic; // E0.6 [1] (🚌) bus - case 0x1F68D: return Extended_Pictographic; // E0.7 [1] (🚍) oncoming bus - case 0x1F68E: return Extended_Pictographic; // E1.0 [1] (🚎) trolleybus - case 0x1F68F: return Extended_Pictographic; // E0.6 [1] (🚏) bus stop - case 0x1F690: return Extended_Pictographic; // E1.0 [1] (🚐) minibus - case 0x1F694: return Extended_Pictographic; // E0.7 [1] (🚔) oncoming police car - case 0x1F695: return Extended_Pictographic; // E0.6 [1] (🚕) taxi - case 0x1F696: return Extended_Pictographic; // E1.0 [1] (🚖) oncoming taxi - case 0x1F697: return Extended_Pictographic; // E0.6 [1] (🚗) automobile - case 0x1F698: return Extended_Pictographic; // E0.7 [1] (🚘) oncoming automobile - case 0x1F6A2: return Extended_Pictographic; // E0.6 [1] (🚢) ship - case 0x1F6A3: return Extended_Pictographic; // E1.0 [1] (🚣) person rowing boat - case 0x1F6A6: return Extended_Pictographic; // E1.0 [1] (🚦) vertical traffic light - case 0x1F6B2: return Extended_Pictographic; // E0.6 [1] (🚲) bicycle - case 0x1F6B6: return Extended_Pictographic; // E0.6 [1] (🚶) person walking - case 0x1F6BF: return Extended_Pictographic; // E1.0 [1] (🚿) shower - case 0x1F6C0: return Extended_Pictographic; // E0.6 [1] (🛀) person taking bath - case 0x1F6CB: return Extended_Pictographic; // E0.7 [1] (🛋️) couch and lamp - case 0x1F6CC: return Extended_Pictographic; // E1.0 [1] (🛌) person in bed - case 0x1F6D0: return Extended_Pictographic; // E1.0 [1] (🛐) place of worship - case 0x1F6D5: return Extended_Pictographic; // E12.0 [1] (🛕) hindu temple - case 0x1F6E9: return Extended_Pictographic; // E0.7 [1] (🛩️) small airplane - case 0x1F6EA: return Extended_Pictographic; // E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE - case 0x1F6F0: return Extended_Pictographic; // E0.7 [1] (🛰️) satellite - case 0x1F6F3: return Extended_Pictographic; // E0.7 [1] (🛳️) passenger ship - case 0x1F6F9: return Extended_Pictographic; // E11.0 [1] (🛹) skateboard - case 0x1F6FA: return Extended_Pictographic; // E12.0 [1] (🛺) auto rickshaw - case 0x1F7F0: return Extended_Pictographic; // E14.0 [1] (🟰) heavy equals sign - case 0x1F90C: return Extended_Pictographic; // E13.0 [1] (🤌) pinched fingers - case 0x1F91F: return Extended_Pictographic; // E5.0 [1] (🤟) love-you gesture - case 0x1F930: return Extended_Pictographic; // E3.0 [1] (🤰) pregnant woman - case 0x1F93F: return Extended_Pictographic; // E12.0 [1] (🤿) diving mask - case 0x1F94C: return Extended_Pictographic; // E5.0 [1] (🥌) curling stone - case 0x1F971: return Extended_Pictographic; // E12.0 [1] (🥱) yawning face - case 0x1F972: return Extended_Pictographic; // E13.0 [1] (🥲) smiling face with tear - case 0x1F979: return Extended_Pictographic; // E14.0 [1] (🥹) face holding back tears - case 0x1F97A: return Extended_Pictographic; // E11.0 [1] (🥺) pleading face - case 0x1F97B: return Extended_Pictographic; // E12.0 [1] (🥻) sari - case 0x1F9C0: return Extended_Pictographic; // E1.0 [1] (🧀) cheese wedge - case 0x1F9CB: return Extended_Pictographic; // E13.0 [1] (🧋) bubble tea - case 0x1F9CC: return Extended_Pictographic; // E14.0 [1] (🧌) troll - case 0x1FA74: return Extended_Pictographic; // E13.0 [1] (🩴) thong sandal - } - if (m_dic_cache_break_type != null) { - if (m_dic_cache_break_type.ContainsKey(nCodePoint)) { - return m_dic_cache_break_type[nCodePoint]; - } else { - return Other; - } - } - if (m_arr_cache_break_type != null) { - if (nCodePoint >= m_arr_cache_break_type.Length) { - return Other; - } else { - return m_arr_cache_break_type[nCodePoint]; - } - } - return TextBoundary.BinarySearchRangeFromList(0, m_lst_code_range.Count, nCodePoint, m_lst_code_range); - } - - private static int GetCustomWordBreakProperty(int nCodePoint) { - if (nCodePoint >= 32 && nCodePoint <= 126) { - return Custom_Property_Ascii; - } - return Other; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/IEmojiRender.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/IEmojiRender.cs deleted file mode 100644 index 9ec3361..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/IEmojiRender.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public interface IEmojiRender - { - bool IsEmoji(string strChar); - void DrawEmoji(ISTTextBoxRender dt, string strChar, int nX, int nY, int nWidth, bool bSelected); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ISTTextBoxRender.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ISTTextBoxRender.cs deleted file mode 100644 index 78c9403..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ISTTextBoxRender.cs +++ /dev/null @@ -1,94 +0,0 @@ -using CPF.Controls; -using CPF.Drawing; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - /// - /// All drawing of STTextBox comes from this interface. - /// Calling rules: - /// STTextBox guarantees that OnBeginPaint(Graphics) or BeginPaint() - /// must be called before calling all drawing functions in this interface. - /// And call OnEndPaint(Graphics) or EndPaint() at the end of drawing. - /// During the OnPaint of the control, OnBegin/EndPaint is called for initialization. - /// Otherwise call Begin/EndPaint. - /// - /// * However, if you rewrite some functions in TextView or ITextView. - /// * It needs to be called by the developer himself. - /// - /// The STTextBox release uses GDI+ for rendering by default. - /// - public interface ISTTextBoxRender - { - /// - /// Bind the control - /// - /// the STTextBox control - void BindControl(Control ctrl); - void UnbindControl(); - /// - /// This function will be called at the start of the STTextBox.Paint event. - /// - /// PaintEventArgs.Graphics - void OnBeginPaint(Graphics g); - /// - /// This function will be called at the end of the STTextBox.Paint event. - /// * The destruction of [g] should not be done in this function, it should be handled by STTextBox.Paint. - /// - /// PaintEventArgs.Graphics - void OnEndPaint(Graphics g); - /// - /// Developers should call this method instead of OnBegin(Graphics) when initializing drawing is required. - /// - void BeginPaint(); - /// - /// This function corresponds to BeginPaint(). - /// - void EndPaint(); - /// - /// Set how many spaces are required for a tab. - /// - /// Number of spaces - /// The old size - int SetTabSize(int nSize); - /// - /// Get how many spaces are required for a tab. - /// - /// Number of spaces - int GetSpaceWidth(); - int GetFontHeight(); - int GetTabSize(); - /// - /// Get how much width the tab character needs at the current position. - /// - /// The position relative to the start of the text - /// Width - int GetTabWidth(int nLeftWidth); - /// - /// How many spaces are needed to get tabs. - /// - /// The position relative to the start of the text - /// How many spaces are required for a tab - /// Space count - float GetTabSpaceCount(int nLeftWidth, int nTabSize); - /// - /// Get the string width - /// - /// text - /// Text style - /// The position relative to the start of the text - /// Width - int GetStringWidth(string strText, TextStyle style, int nLeftWidth); - - void SetClip(Rect rect); - void ResetClip(); - void DrawImage(Image img, Rect rect); - void DrawString(string strText, Font ft, CPF.Drawing.Color color, Rect rect, StringFormat sf); - void DrawString(string strText, TextStyle style, Rect rect, TextDecorationLocation Underline = TextDecorationLocation.None); - void FillRectangle(CPF.Drawing.Color backColor, Rect rect); - void FillRectangle(CPF.Drawing.Color backColor, float nX, float nY, float nWidth, float nHeight); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextBoundary.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextBoundary.cs deleted file mode 100644 index 9597ccf..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextBoundary.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public delegate void EachVoidCallBack(string strText, int nIndex, int nLen); - public delegate bool EachBoolCallBack(string strText, int nIndex, int nLen); - - public interface ITextBoundary - { - List Split(string strText); - int GetCount(string strText); - void Each(string strText, EachVoidCallBack callBack); - void Each(string strText, int nIndex, EachVoidCallBack callBack); - void Each(string strText, EachBoolCallBack callBack); - void Each(string strText, int nIndex, EachBoolCallBack callBack); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextHistory.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextHistory.cs deleted file mode 100644 index b97bc55..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextHistory.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public interface ITextHistory - { - void SetHistory(TextHistoryRecord[] histories); - TextHistoryRecord[] GetUndo(); - TextHistoryRecord[] GetRedo(); - void Clear(); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextStyleMonitor.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextStyleMonitor.cs deleted file mode 100644 index a155b55..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextStyleMonitor.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public interface ITextStyleMonitor - { - void Init(string strText); - void OnSelectionChanged(TextManager textManager, int nStart, int nLen); - void OnTextChanged(TextManager textManager, List thrs); - TextStyleRange GetStyleFromCharIndex(int nIndex); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextView.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextView.cs deleted file mode 100644 index 48151b7..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Interface/ITextView.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using CPF.Drawing; -using CPF.Input; - -namespace ST.Library.UI.STTextBox -{ - public interface ITextView - { - void Init(STTextBox.Core textBoxCore); - - void OnTextStartChange(ISTTextBoxRender render, TextManagerTextEventArgs e); - void OnLineChanged(ISTTextBoxRender render, TextManagerLineEventArgs e); - void OnLineRemoved(ISTTextBoxRender render, TextManagerLineEventArgs e); - void OnLineAdded(ISTTextBoxRender render, TextManagerLineEventArgs e); - void OnLineCountChanged(ISTTextBoxRender render, EventArgs e); - void OnTextChanged(ISTTextBoxRender render, TextManagerTextEventArgs e); - - void OnSetCursor(MouseEventArgs e); - void OnResize(EventArgs e); - void OnDrawView(ISTTextBoxRender render); - - void OnCalcTextRectangle(); - void OnCalcScroll(STTextBoxScrollInfo scrollInfo); - - int GetCurrentCharOffset(); - - Point ControlToView(Point pt); - Point ViewToControl(Point pt); - FindInfo FindFromPoint(Point pt); - FindInfo FindFromCharIndex(int nIndex); - - void SetCaretPostion(int nCharIndex); - FindInfo SetCaretPostion(Point pt); - void ScrollXToMuosePoint( float nX); - void ScrollYToMousePoint(float nY); - bool ScrollToCaret(); - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.Interface.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.Interface.cs deleted file mode 100644 index ecb3033..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.Interface.cs +++ /dev/null @@ -1,235 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; -using System.ComponentModel; -using CPF.Drawing; -using CPF; - -namespace ST.Library.UI.STTextBox -{ - partial class STTextBox - { - public class Core - { - private Dictionary m_dic_cache_style; - - public int FontHeight { get { return this.ITextBoxRender.GetFontHeight(); } } - public int LineHeight { get { return this.ITextBoxRender.GetFontHeight() + this.TextBox.GetIntYSize(this.TextBox.LineSpacing); } } - public ITextBoundary IGraphemeSplitter { get; internal set; } - public ITextBoundary IWordSplitter { get; internal set; } - public ISTTextBoxRender ITextBoxRender { get; internal set; } - public IEmojiRender IEmojiRender { get; internal set; } - public ITextView ITextView { get; internal set; } - public ITextHistory ITextHistory { get; internal set; } - public ITextStyleMonitor[] ITextStyleMonitors { get; internal set; } - - public Rect ViewRectangle { get; internal set; } - - public STTextBox TextBox { get; private set; } - public TextManager TextManager { get; private set; } - public STTextBoxCaretInfo Caret { get; private set; } - public STTextBoxScrollInfo Scroll { get; private set; } - public STTextBoxSelectionInfo Selection { get; private set; } - - internal Core(STTextBox textBox) { - if (textBox == null) { - throw new ArgumentNullException("textBox"); - } - this.TextBox = textBox; - m_dic_cache_style = new Dictionary(); - //GraphemeSplitter.CreateArrayCache(); - //WordSplitter.CreateArrayCache(); - this.IGraphemeSplitter = new GraphemeSplitter(); - this.IWordSplitter = new WordSplitter(); - this.ITextBoxRender = new STTextBoxGDIPRender(); - this.ITextHistory = new TextHistory(10); - this.ITextView = new NoWrapTextView(); - - this.TextManager = new TextManager(); - this.Caret = new STTextBoxCaretInfo(); - this.Scroll = new STTextBoxScrollInfo(); - this.Selection = new STTextBoxSelectionInfo(); - var textManager = this.TextManager; - textManager.TextStartChange += (s, e) => { - this.ITextBoxRender.BeginPaint(); - this.ITextView.OnTextStartChange(this.ITextBoxRender, e); - }; - textManager.LineAdded += (s, e) => this.ITextView.OnLineAdded(this.ITextBoxRender, e); - textManager.LineChanged += (s, e) => this.ITextView.OnLineChanged(this.ITextBoxRender, e); - textManager.LineRemoved += (s, e) => this.ITextView.OnLineRemoved(this.ITextBoxRender, e); - textManager.LineCountChanged += (s, e) => { - this.ITextView.OnLineCountChanged(this.ITextBoxRender, e); - this.ITextView.OnCalcTextRectangle(); - }; - textManager.TextChanged += (s, e) => { - m_dic_cache_style.Clear(); - if (this.ITextStyleMonitors != null) { - foreach (var m in this.ITextStyleMonitors) { - m.OnTextChanged(textManager, e.TextHistoryRecord); - } - } - this.ITextView.OnTextChanged(this.ITextBoxRender, e); - this.ITextBoxRender.EndPaint(); - this.ITextView.OnCalcScroll(this.Scroll); - this.TextBox.Invalidate(); - }; - - this.ITextBoxRender.BindControl(textBox); - this.ITextView.Init(this); - this.Selection.SelectionChanged += (s, e) => { - if (this.ITextStyleMonitors == null || this.ITextStyleMonitors.Length == 0) { - return; - } - m_dic_cache_style.Clear(); - foreach (var m in this.ITextStyleMonitors) { - m.OnSelectionChanged(textManager, this.Selection.StartIndex, this.Selection.Length); - } - }; - } - - public ISTTextBoxRender SetTextBoxRender(ISTTextBoxRender render) { - //TODO: move out - var old = this.ITextBoxRender; - if (old == render) return old; - old.UnbindControl(); - render.BindControl(this.TextBox); - this.ITextBoxRender = render; - return old; - } - - public ITextStyleMonitor[] SetTextStyleMonitors(params ITextStyleMonitor[] monitors) { - var old = this.ITextStyleMonitors; - string strText = this.TextManager.GetText(); - List lst = new List(); - foreach (var m in monitors) { - if (m == null) { - continue; - } - lst.Add(m); - m.Init(strText); - } - this.ITextStyleMonitors = lst.ToArray(); - m_dic_cache_style.Clear(); - return old; - } - - public bool IsEmoji(string strChar) { - if (this.IEmojiRender == null) return false; - return this.IEmojiRender.IsEmoji(strChar); - } - - public int GetStringWidth(string strText, TextStyle textStyle, int nLeftWidth) { - if (this.IsEmoji(strText)) { - return this.FontHeight; - } - if (strText.Length > 1 && strText[strText.Length - 1] >= '\uFE00' && strText[strText.Length - 1] <= '\uFE0F') { - strText = strText.Substring(0, strText.Length - 1); - } - return this.ITextBoxRender.GetStringWidth(strText, textStyle, nLeftWidth) + this.TextBox.GetIntXSize(this.TextBox.CharSpacing); - } - - public TextStyle GetStyleFromCharIndex(int nIndex) { - TextStyle style = new TextStyle(); - if (this.ITextStyleMonitors == null || this.ITextStyleMonitors.Length == 0) { - style.ForeColor = (this.TextBox.Foreground as SolidColorFill).Color; - return style; - } - var range = TextStyleRange.Empty; - foreach (var m in this.ITextStyleMonitors) { - if (m_dic_cache_style.ContainsKey(m)) { - range = m_dic_cache_style[m]; - if (nIndex >= range.Index && nIndex < range.Index + range.Length) { - if (range.Style.RejectMix) return range.Style; - style.Mix(range.Style); - continue; - } - } - range = m.GetStyleFromCharIndex(nIndex); - if (range == TextStyleRange.Empty) continue; - if (m_dic_cache_style.ContainsKey(m)) { - m_dic_cache_style[m] = range; - } else { - m_dic_cache_style.Add(m, range); - } - if (range.Style.RejectMix) return range.Style; - style.Mix(range.Style); - } - if (style.ForeColor.A == 0) { - style.ForeColor = (this.TextBox.Foreground as SolidColorFill).Color; - } - return style; - } - } - - public ISTTextBoxRender SetTextBoxRender(ISTTextBoxRender render) { - if (render == null) { - throw new ArgumentNullException("render"); - } - return m_core.SetTextBoxRender(render); - } - - public ITextBoundary SetGraphemeSplitter(ITextBoundary textBoundary) { - if (textBoundary == null) { - throw new ArgumentNullException("textBoundary"); - } - if (m_core.IGraphemeSplitter == textBoundary) { - return textBoundary; - } - var old = m_core.IGraphemeSplitter; - m_core.IGraphemeSplitter = textBoundary; - return old; - } - - public ITextBoundary SetWordSplitter(ITextBoundary textBoundary) { - if (textBoundary == null) { - throw new ArgumentNullException("textBoundary"); - } - if (m_core.IWordSplitter == textBoundary) { - return textBoundary; - } - var old = m_core.IWordSplitter; - m_core.IWordSplitter = textBoundary; - return old; - } - - public IEmojiRender SetEmojiRender(IEmojiRender emojiRender) { - if (emojiRender == null) { - throw new ArgumentNullException("emojiRender"); - } - if (m_core.IEmojiRender == emojiRender) { - return emojiRender; - } - var old = m_core.IEmojiRender; - m_core.IEmojiRender = emojiRender; - return old; - } - - public ITextHistory SetTextHistory(ITextHistory textHistory) { - if (m_core.ITextHistory == textHistory) { - return textHistory; - } - var old = m_core.ITextHistory; - m_core.ITextHistory = textHistory; - return old; - } - - public ITextView SetTextView(ITextView textView) { - if (textView == null) { - throw new ArgumentNullException("textView"); - } - if (m_core.ITextView == textView) { - return textView; - } - var old = m_core.ITextView; - m_core.ITextView = textView; - textView.Init(m_core); - return old; - } - - public ITextStyleMonitor[] SetTextStyleMonitors(params ITextStyleMonitor[] monitors) { - return m_core.SetTextStyleMonitors(monitors); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.KeyEvent.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.KeyEvent.cs deleted file mode 100644 index 66dad06..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.KeyEvent.cs +++ /dev/null @@ -1,524 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Text.RegularExpressions; - -namespace ST.Library.UI.STTextBox -{ - public partial class STTextBox - { - protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { - switch (keyData) { - case Keys.Back: - this.ProcessBackSpaceKey(); - return true; - case Keys.Tab: - this.ProcessTabKey(); - return true; - case Keys.Enter: - this.ProcessEnter(); - return true; - //======================================================== - case Keys.Left: - this.ProcessLeftKey(false); - return true; - case Keys.Right: - this.ProcessRightKey(false); - return true; - case Keys.Up: - this.ProcessUpKey(false); - return true; - case Keys.Down: - this.ProcessDownKey(false); - return true; - case Keys.Home: - this.ProcessHomeKey(false); - return true; - case Keys.End: - this.ProcessEndKey(false); - return true; - case Keys.PageUp: - this.ProcessPageUpKey(false); - return true; - case Keys.PageDown: - this.ProcessPageDownKey(false); - return true; - //======================================================== - case Keys.Shift | Keys.Tab: - this.ProcessShiftTabKey(); - return true; - case Keys.Shift | Keys.Up: - this.ProcessUpKey(true); - return true; - case Keys.Shift | Keys.Down: - this.ProcessDownKey(true); - return true; - case Keys.Shift | Keys.Left: - this.ProcessLeftKey(true); - return true; - case Keys.Shift | Keys.Right: - this.ProcessRightKey(true); - return true; - case Keys.Shift | Keys.Home: - this.ProcessHomeKey(true); - return true; - case Keys.Shift | Keys.End: - this.ProcessEndKey(true); - return true; - case Keys.Shift | Keys.PageUp: - this.ProcessPageUpKey(true); - return true; - case Keys.Shift | Keys.PageDown: - this.ProcessPageDownKey(true); - return true; - //======================================================== - case Keys.Control | Keys.A: - this.SelectAll(); - return true; - case Keys.Control | Keys.C: - this.Copy(); - return true; - case Keys.Control | Keys.X: - this.Cut(); - return true; - case Keys.Control | Keys.V: - this.Paste(); - return true; - case Keys.Control | Keys.Z: - this.Undo(); - return true; - case Keys.Control | Keys.Y: - this.Redo(); - return true; - } - return base.ProcessCmdKey(ref msg, keyData); - } - - protected override void OnKeyPress(KeyPressEventArgs e) { - base.OnKeyPress(e); - if (e.KeyChar < 32/* || e.KeyChar > 126*/) { - return; - } - this.EnterText(e.KeyChar.ToString()); - } - //================================================================================== - private void ProcessEnter() { - var c = m_core; - string strText = "\r\n"; - if (this._AutoIndent) { - strText += Regex.Match( - c.TextManager[c.TextManager.GetLineIndexFromCharIndex(c.Caret.IndexOfChar)].RawString, - @"^[ \t]+" //Space,TAB - ).Value; - } - this.EnterText(strText); - } - - private void ProcessTabKey() { - var c = m_core; - int nIndexStartLine = 0, nIndexEndLine = 0; - if (!c.Selection.IsEmptySelection) { - nIndexStartLine = c.TextManager.GetLineIndexFromCharIndex(c.Selection.StartIndex); - nIndexEndLine = c.TextManager.GetLineIndexFromCharIndex(c.Selection.EndIndex); - } - if (nIndexStartLine == nIndexEndLine) { - if (!this._TabToSpace) { - this.EnterText("\t"); - } else { - float fSpaceCount = c.ITextBoxRender.GetTabSpaceCount(c.ITextView.GetCurrentCharOffset(), this._TabSize); - this.EnterText("".PadLeft((int)Math.Ceiling(fSpaceCount))); - } - } else { - string strInsert = this._TabToSpace ? "".PadLeft(this._TabSize) : "\t"; - var histories = c.TextManager.InsertAtStart(nIndexStartLine, nIndexEndLine - nIndexStartLine + 1, strInsert); - c.ITextHistory.SetHistory(histories); - var lineStart = c.TextManager[nIndexStartLine]; - var lineEnd = c.TextManager[nIndexEndLine]; - c.Selection.SetSelection(lineStart.IndexOfFirstChar, lineEnd.IndexOfFirstChar + lineEnd.GetLengthWithoutNewline()); - c.Caret.IndexOfChar = c.Selection.EndIndex; - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - } - } - - private void ProcessShiftTabKey() { - var c = m_core; - int nIndexStartLine = 0, nIndexEndLine = 0; - nIndexStartLine = c.TextManager.GetLineIndexFromCharIndex(c.Selection.StartIndex); - nIndexEndLine = c.TextManager.GetLineIndexFromCharIndex(c.Selection.EndIndex); - if (nIndexStartLine == nIndexEndLine) { - var line = c.TextManager[nIndexStartLine]; - for (int i = 0; i < line.RawString.Length; i++) { - switch (line.RawString[i]) { - case ' ': - case '\t': - continue; - default: - break; - } - if (i == 0 || i + line.IndexOfFirstChar < c.Selection.StartIndex) { - return; - } - } - } - var histories = c.TextManager.TrimStartTab(nIndexStartLine, nIndexEndLine - nIndexStartLine + 1, this._TabSize); - c.ITextHistory.SetHistory(histories.ToArray()); - var lineStart = c.TextManager[nIndexStartLine]; - var lineEnd = c.TextManager[nIndexEndLine]; - c.Selection.SetSelection(lineStart.IndexOfFirstChar, lineEnd.IndexOfFirstChar + lineEnd.GetLengthWithoutNewline()); - c.Caret.IndexOfChar = c.Selection.EndIndex; - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - } - - private void ProcessBackSpaceKey() { - var c = m_core; - if (c.Caret.IndexOfChar == 0 && c.Selection.IsEmptySelection) { - return; - } - if (c.Selection.IsEmptySelection) { - //c.Selection.SetIndex(c.Caret.IndexOfChar); - int nLineIndex = c.TextManager.GetLineIndexFromCharIndex(c.Caret.IndexOfChar); - TextLine stLine = c.TextManager[nLineIndex]; - if (c.Caret.IndexOfChar == stLine.IndexOfFirstChar) {//if the index is the line start index - stLine = c.TextManager[nLineIndex - 1]; - //c.Selection.StartIndex -= stLine.RawString.Length - stLine.GetLengthWithoutNewline(); - c.Selection.SetSelection(c.Caret.IndexOfChar, c.Caret.IndexOfChar - (stLine.RawString.Length - stLine.GetLengthWithoutNewline())); - } else { - int nIndex = stLine.IndexOfFirstChar; - c.IGraphemeSplitter.Each(stLine.RawString, (str, nStart, nLen) => { - if (nIndex + nLen >= c.Caret.IndexOfChar) { - return false; - } - nIndex += nLen; - return true; - }); - //c.Selection.StartIndex = nIndex; - c.Selection.SetSelection(nIndex, c.Caret.IndexOfChar); - } - } - this.EnterText(""); - } - - private void ProcessUpKey(bool bShiftDown) { - var c = m_core; - if (c.Scroll.YValue == 0 && c.Caret.Y - m_core.ViewRectangle.Y < m_core.LineHeight) { - return; - } - c.Caret.Y -= c.LineHeight;// c.ITextRender.GetFontHeight(); - var fi = c.ITextView.FindFromPoint(c.Caret.Location); - if (!c.Caret.CopyFromFindInfo(fi)) { - return; - } - bool bRedraw = false; - if (bShiftDown) { - c.Selection.SetSelection(c.Caret.IndexOfChar); - bRedraw = true; - } else { - if (!c.Selection.IsEmptySelection) { - bRedraw = true; - c.Caret.IndexOfChar = c.Selection.StartIndex; - } - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - if (c.ITextView.ScrollToCaret() || bRedraw) { - this.Invalidate(); - } - } - - private void ProcessDownKey(bool bShiftDown) { - var c = m_core; - if (c.Caret.IndexOfLine >= c.TextManager.LineCount - 1) { - //return; - } - c.Caret.Y += c.LineHeight;// c.ITextRender.GetFontHeight(); - var fi = c.ITextView.FindFromPoint(c.Caret.Location); - if (!c.Caret.CopyFromFindInfo(fi)) { - return; - } - bool bRedraw = false; - if (bShiftDown) { - c.Selection.SetSelection(c.Caret.IndexOfChar); - bRedraw = true; - } else { - if (!c.Selection.IsEmptySelection) { - bRedraw = true; - c.Caret.IndexOfChar = c.Selection.EndIndex; - } - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - if (c.ITextView.ScrollToCaret() || bRedraw) { - this.Invalidate(); - } - } - - private void ProcessLeftKey(bool bShiftDown) { - var c = m_core; - bool bRedraw = false; - if (bShiftDown) { - var nIndex = c.TextBox.FindLeftIndex(c.Caret.IndexOfChar); - if (nIndex == c.Caret.IndexOfChar) { - return; - } - c.Caret.IndexOfChar = nIndex; - c.Selection.SetSelection(c.Caret.IndexOfChar); - bRedraw = true; - } else { - if (!c.Selection.IsEmptySelection) { - bRedraw = true; - c.Caret.IndexOfChar = c.Selection.StartIndex; - } else { - var nIndex = c.TextBox.FindLeftIndex(c.Caret.IndexOfChar); - if (nIndex == c.Caret.IndexOfChar) { - return; - } - c.Caret.IndexOfChar = nIndex; - } - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - if (c.ITextView.ScrollToCaret() || bRedraw) { - this.Invalidate(); - } - } - - private void ProcessRightKey(bool bShiftDown) { - var c = m_core; - bool bRedraw = false; - if (bShiftDown) { - var nIndex = c.TextBox.FindRightIndex(c.Caret.IndexOfChar); - if (nIndex == c.Caret.IndexOfChar) { - return; - } - c.Caret.IndexOfChar = nIndex; - c.Selection.SetSelection(nIndex); - bRedraw = true; - } else { - if (!c.Selection.IsEmptySelection) { - bRedraw = true; - c.Caret.IndexOfChar = c.Selection.EndIndex; - } else { - var nIndex = c.TextBox.FindRightIndex(c.Caret.IndexOfChar); - if (nIndex == c.Caret.IndexOfChar) { - return; - } - c.Caret.IndexOfChar = nIndex; - } - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - if (c.ITextView.ScrollToCaret() || bRedraw) { - this.Invalidate(); - } - } - - private void ProcessHomeKey(bool bShiftDown) { - var c = m_core; - bool bRedraw = false; - var stLine = c.TextManager.GetLineFromCharIndex(c.Caret.IndexOfChar); - c.Caret.IndexOfChar = stLine.IndexOfFirstChar; - if (bShiftDown) { - c.Selection.SetSelection(c.Caret.IndexOfChar); - bRedraw = true; - } else { - if (!c.Selection.IsEmptySelection) { - bRedraw = true; - } - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - if (c.ITextView.ScrollToCaret() || bRedraw) { - this.Invalidate(); - } - } - - private void ProcessEndKey(bool bShiftDown) { - var c = m_core; - bool bRedraw = false; - var stLine = c.TextManager.GetLineFromCharIndex(c.Caret.IndexOfChar); - //c.Caret.IndexOfChar = stLine.IndexOfFirstChar + stLine.RawString.Length; - c.Caret.IndexOfChar = stLine.IndexOfFirstChar + stLine.GetLengthWithoutNewline(); - if (bShiftDown) { - c.Selection.SetSelection(c.Caret.IndexOfChar); - bRedraw = true; - } else { - if (!c.Selection.IsEmptySelection) { - bRedraw = true; - } - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - if (c.ITextView.ScrollToCaret() || bRedraw) { - this.Invalidate(); - } - } - - private void ProcessPageUpKey(bool bShiftDown) { - var c = m_core; - if (c.Scroll.YValue == 0) { - return; - } - int nCurrentLineCount = this.Height / c.LineHeight; - c.Scroll.YValue -= nCurrentLineCount; - if (c.Scroll.YValue < 0) { - c.Scroll.YValue = 0; - c.Caret.Y = 0; - } - var fi = c.ITextView.SetCaretPostion(c.Caret.Location);// c.ITextView.FindFromPoint(c.Caret.Location); - if (!fi.Find) { - return; - } - //c.Caret.CopyFromFindInfo(fi); - if (bShiftDown) { - c.Selection.SetSelection(c.Caret.IndexOfChar); - } else { - if (!c.Selection.IsEmptySelection) { - c.Selection.SetIndex(c.Caret.IndexOfChar); - this.Invalidate(); - } else { - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - } - //c.ITextView.SetCaretPostion(c.Caret.X, c.Caret.Y); - this.Invalidate(); - } - - private void ProcessPageDownKey(bool bShiftDown) { - var c = m_core; - if (c.Scroll.YValue == c.Scroll.MaxYValue) { - return; - } - int nCurrentLineCount = this.Height / c.LineHeight; - c.Scroll.YValue += nCurrentLineCount; - if (c.Scroll.YValue > c.Scroll.MaxYValue) { - c.Scroll.YValue = c.Scroll.MaxYValue; - } - var fi = c.ITextView.SetCaretPostion(c.Caret.Location);// c.ITextView.FindFromPoint(c.Caret.Location); - if (!fi.Find) { - return; - } - //c.Caret.CopyFromFindInfo(fi); - if (bShiftDown) { - c.Selection.SetSelection(c.Caret.IndexOfChar); - } else { - if (!c.Selection.IsEmptySelection) { - c.Selection.SetIndex(c.Caret.IndexOfChar); - this.Invalidate(); - } else { - c.Selection.SetIndex(c.Caret.IndexOfChar); - } - } - //c.ITextView.SetCaretPostion(c.Caret.X, c.Caret.Y); - this.Invalidate(); - } - - private void EnterText(string strText) { - var c = m_core; - var history = c.TextManager.SetText(c.Selection.StartIndex, c.Selection.Length, strText); - if (history != TextHistoryRecord.Empty) { - c.ITextHistory.SetHistory(new TextHistoryRecord[] { history }); - } - c.Caret.IndexOfChar = c.Selection.StartIndex + strText.Length; - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - c.Selection.SetIndex(c.Caret.IndexOfChar); - c.ITextView.ScrollToCaret(); - //this.Invalidate(); - } - //================================================== - private int FindRightIndex(int nIndex) { - var c = m_core; - if (nIndex >= c.TextManager.TextLength) { - return c.TextManager.TextLength; - } - int nLineIndex = c.TextManager.GetLineIndexFromCharIndex(nIndex); - var line = c.TextManager[nLineIndex]; - c.IGraphemeSplitter.Each(line.RawString, nIndex - line.IndexOfFirstChar, (str, nStart, nLen) => { - nIndex += nLen; - return false; - }); - return nIndex; - } - //private FindInfo FindRightChar(int nIndex) { - // //TODO: add location for return; - // var c = m_core; - // if (nIndex >= c.TextManager.TextLength) { - // return FindInfo.Empty; - // } - // int nLineIndex = c.TextManager.GetLineIndexFromCharIndex(nIndex); - // var line = c.TextManager[nLineIndex]; - // c.IGraphemeSplitter.Each(line.RawString, nIndex - line.IndexOfFirstChar, (str, nStart, nLen) => { - // nIndex += nLen; - // return false; - // }); - // return new FindInfo() { - // Find = true, - // Line = line, - // IndexOfCharInLine = nIndex - line.IndexOfFirstChar, - // IndexOfLine = nLineIndex, - // }; - //} - - public int FindLeftIndex(int nIndex) { - var c = m_core; - if (nIndex <= 1) return 0; - int nLineIndex = c.TextManager.GetLineIndexFromCharIndex(nIndex); - TextLine line = c.TextManager[nLineIndex]; - if (nIndex == line.IndexOfFirstChar) { - line = c.TextManager[--nLineIndex]; - if (line.RawString.Length > 1 && line.RawString[line.RawString.Length - 2] == '\r') { - nIndex -= 2; - } else { - nIndex -= 1; - } - } else { - int nIndexRet = line.IndexOfFirstChar; - c.IGraphemeSplitter.Each(line.RawString, (str, nStart, nLen) => { - if (nIndexRet + nLen >= nIndex) { - return false; - } - nIndexRet += nLen; - return true; - }); - nIndex = nIndexRet; - } - return nIndex; - } - - //private FindInfo FindLeftChar(int nIndex) { - // //TODO: add location for return; - // var c = m_core; - // if (nIndex <= 1) return new FindInfo() { - // Find = true, - // Line = c.TextManager[0] - // }; - // int nLineIndex = c.TextManager.GetLineIndexFromCharIndex(nIndex); - // TextLine line = c.TextManager[nLineIndex]; - // if (nIndex == line.IndexOfFirstChar) { - // line = c.TextManager[--nLineIndex]; - // if (line.RawString.Length > 1 && line.RawString[line.RawString.Length - 2] == '\r') { - // nIndex -= 2; - // } else { - // nIndex -= 1; - // } - // } else { - // int nIndexRet = line.IndexOfFirstChar; - // c.IGraphemeSplitter.Each(line.RawString, (str, nStart, nLen) => { - // if (nIndexRet + nLen >= nIndex) { - // return false; - // } - // nIndexRet += nLen; - // return true; - // }); - // nIndex = nIndexRet; - // } - // return new FindInfo() { - // Find = true, - // Line = line, - // IndexOfCharInLine = nIndex - line.IndexOfFirstChar, - // IndexOfLine = nLineIndex - // }; - //} - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.MouseEvent.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.MouseEvent.cs deleted file mode 100644 index c5fb662..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.MouseEvent.cs +++ /dev/null @@ -1,245 +0,0 @@ -using CPF; -using CPF.Input; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - partial class STTextBox - { - private struct ScrollIncrement - { - public int Time; - public int Value; - - public ScrollIncrement(int nTime, int nValue) { - this.Time = nTime; - this.Value = nValue; - } - } - - private DateTime m_dt_last_scroll_h = DateTime.Now; - private DateTime m_dt_last_scroll_v = DateTime.Now; - private ScrollIncrement[] m_arr_si = new ScrollIncrement[]{ - new ScrollIncrement(20, 6), - new ScrollIncrement(30, 5), - new ScrollIncrement(40, 4), - new ScrollIncrement(50, 3), - new ScrollIncrement(60, 2), - }; - - protected override void OnMouseDown(MouseButtonEventArgs e) { - base.OnMouseDown(e); - var c = m_core; - this.Focus();//设置焦点 - if (c.Scroll.HoverScrollBar != STTextBoxScrollInfo.ScrollBarType.None) { - if (c.Scroll.HBackRect.Contains(e.Location)) { - c.Scroll.DownScrollBar = STTextBoxScrollInfo.ScrollBarType.H; - c.ITextView.ScrollXToMuosePoint(e.Location.X); - this.Invalidate(); - } else if (c.Scroll.VBackRect.Contains(e.Location)) { - c.Scroll.DownScrollBar = STTextBoxScrollInfo.ScrollBarType.V; - c.ITextView.ScrollYToMousePoint(e.Location.Y); - this.Invalidate(); - } - return; - } - - var fi = c.ITextView.SetCaretPostion(e.Location);// c.ITextView.FindFromPoint(e.Location); - //c.Caret.CopyFromFindInfo(fi); - var key = Root.InputManager.KeyboardDevice.Modifiers; - if (key != InputModifiers.Shift) { - c.Selection.SetIndex(c.Caret.IndexOfChar); - } else { - //if (c.Caret.IndexOfChar < c.Selection.AnchorIndex) { - // //c.Selection.StartIndex = c.Caret.IndexOfChar; - // //c.Selection.EndIndex = c.Selection.AnchorIndex; - // c.Selection.SetSelection(c.Selection.AnchorIndex, c.Caret.IndexOfChar); - //} else { - // c.Selection.StartIndex = c.Selection.AnchorIndex; - // c.Selection.EndIndex = c.Caret.IndexOfChar; - //} - c.Selection.SetSelection(c.Selection.AnchorIndex, c.Caret.IndexOfChar); - } - //c.ITextView.SetCaretPostion(c.Caret.X, c.Caret.Y); - this.Invalidate(); - } - - protected override void OnMouseMove(MouseEventArgs e) { - base.OnMouseMove(e); - var c = m_core; - switch (c.Scroll.DownScrollBar) { - case STTextBoxScrollInfo.ScrollBarType.V: - c.ITextView.ScrollYToMousePoint(e.Location.Y); - this.Invalidate(); - return; - case STTextBoxScrollInfo.ScrollBarType.H: - c.ITextView.ScrollXToMuosePoint(e.Location.X); - this.Invalidate(); - return; - } - if (e.LeftButton == MouseButtonState.Pressed) { - //var sw = new System.Diagnostics.Stopwatch(); - //sw.Start(); - var fi = c.ITextView.FindFromPoint(e.Location); - if (!fi.Find) return; - c.Caret.CopyFromFindInfo(fi); - int nIndex = c.Caret.IndexOfChar; - //if (nIndex > c.Selection.AnchorIndex) { - // c.Selection.SetSelection(c.Selection.AnchorIndex, nIndex); - // //c.Selection.StartIndex = c.Selection.AnchorIndex; - // //c.Selection.EndIndex = nIndex; - //} else { - // c.Selection.SetSelection(nIndex, c.Selection.AnchorIndex); - // //c.Selection.StartIndex = nIndex; - // //c.Selection.EndIndex = c.Selection.AnchorIndex; - //} - c.Selection.SetSelection(c.Selection.AnchorIndex, nIndex); - c.ITextView.SetCaretPostion(fi.IndexOfChar); - c.ITextView.ScrollToCaret(); - //sw.Stop(); - //Console.WriteLine("CheckSelection: - " + sw.ElapsedMilliseconds); - this.Invalidate(); - return; - } - //没有鼠标点击 - if (e.LeftButton == MouseButtonState.Released&& e.RightButton == MouseButtonState.Released && c.Scroll.CountDown != 0) { - if (c.Scroll.VBackRect.Contains(e.Location)) { - c.Scroll.HoverScrollBar = STTextBoxScrollInfo.ScrollBarType.V; - } else if (c.Scroll.HBackRect.Contains(e.Location)) { - c.Scroll.HoverScrollBar = STTextBoxScrollInfo.ScrollBarType.H; - } else { - c.Scroll.HoverScrollBar = STTextBoxScrollInfo.ScrollBarType.None; - } - if (c.Scroll.HoverScrollBar != STTextBoxScrollInfo.ScrollBarType.None) { - this.ShowScrollBar(c.Scroll.DisplayTime); - if (this.SetCursor(Cursors.Arrow)) { - this.Invalidate(); - } - } else { - if (this.SetCursor(Cursors.Ibeam)) { - this.Invalidate(); - } - } - } else { - c.ITextView.OnSetCursor(e); - } - } - protected override void OnMouseUp(MouseButtonEventArgs e) { - base.OnMouseUp(e); - var c = m_core; - c.Scroll.DownScrollBar = STTextBoxScrollInfo.ScrollBarType.None; - this.Invalidate(); - } - protected override void OnMouseLeave(MouseEventArgs e) { - base.OnMouseLeave(e); - var c = m_core; - c.Scroll.HoverScrollBar = STTextBoxScrollInfo.ScrollBarType.None; - } - - protected override void OnMouseWheel(MouseWheelEventArgs e) { - base.OnMouseWheel(e); - DateTime dt_now = DateTime.Now; - //Console.WriteLine("Scroll: --------------------- " + dt_now.Subtract(m_dt_last_scroll_v).TotalMilliseconds); - int nIncrement = 1; - int nTemp = (int)dt_now.Subtract(m_dt_last_scroll_v).TotalMilliseconds; - foreach (var v in m_arr_si) { - if (nTemp < v.Time) { - nIncrement = v.Value; - break; - } - } - m_dt_last_scroll_v = dt_now; - var c = m_core; - if (e.Delta.Length > 0) {//应该是滚动距离判断 - if (c.Scroll.YValue <= 0) return; - if (c.Scroll.YValue - nIncrement < 0) { - nIncrement = c.Scroll.YValue; - } - c.Scroll.YValue -= nIncrement; - c.Caret.Y += nIncrement * c.LineHeight;// this.Font.Height; - } else { - if (c.Scroll.YValue >= c.Scroll.MaxYValue) { - return; - } - if (c.Scroll.YValue + nIncrement > c.Scroll.MaxYValue) { - nIncrement = c.Scroll.MaxYValue - c.Scroll.YValue; - } - c.Scroll.YValue += nIncrement; - c.Caret.Y -= c.LineHeight * nIncrement;// c.ITextRender.GetFontHeight(); - } - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - //c.ITextView.SetCaretPostion(c.Caret.X, c.Caret.Y); - this.ShowScrollBar(c.Scroll.DisplayTime); - this.Invalidate(); - //c.Scroll.Timer = 5; - } - /*protected virtual void OnMouseHWheel(MouseEventArgs e) { - DateTime dt_now = DateTime.Now; - //Console.WriteLine("Scroll: --------------------- " + dt_now.Subtract(m_dt_last_scroll_h).TotalMilliseconds); - int nIncrement = 1; - int nTemp = (int)dt_now.Subtract(m_dt_last_scroll_h).TotalMilliseconds; - foreach (var v in m_arr_si) { - if (nTemp < v.Time) { - nIncrement = v.Value; - break; - } - } - m_dt_last_scroll_h = dt_now; - var c = m_core; - if (e.Delta < 0) { - if (c.Scroll.XValue <= 0) return; - if (c.Scroll.XValue - nIncrement < 0) { - nIncrement = c.Scroll.XValue; - } - c.Scroll.XValue -= nIncrement; - c.Caret.X += c.Scroll.XIncrement * nIncrement; - } else { - if (c.Scroll.XValue >= c.Scroll.MaxXValue) { - return; - } - if (c.Scroll.XValue + nIncrement > c.Scroll.MaxXValue) { - nIncrement = c.Scroll.MaxXValue - c.Scroll.XValue; - } - c.Scroll.XValue += nIncrement; - c.Caret.X -= c.Scroll.XIncrement * nIncrement; - } - //c.ITextView.SetCaretPostion(c.Caret.X, c.Caret.Y); - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - this.ShowScrollBar(c.Scroll.DisplayTime); - this.Invalidate(); - //c.Scroll.Timer = 5; - }*/ - protected override void OnDoubleClick(RoutedEventArgs e) - { - base.OnDoubleClick(e); - var c = m_core; - var fi = c.ITextView.FindFromPoint(e.Location); - int nIndex = fi.IndexOfChar - fi.Line.IndexOfFirstChar; - int nSelectionStart = fi.IndexOfChar, nSelectionLen = 0; - c.IWordSplitter.Each(fi.Line.RawString, (str, nStart, nLen) => { - if (nIndex >= nStart && nIndex < nStart + nLen) - { - switch (str[nStart]) - { - case '\r': - case '\n': - return false; - } - nSelectionStart = fi.Line.IndexOfFirstChar + nStart; - nSelectionLen = nLen; - return false; - } - nSelectionStart = fi.Line.IndexOfFirstChar + nStart; - nSelectionLen = nLen; - return true; - }); - c.Selection.SetSelection(nSelectionStart, nSelectionStart + nSelectionLen); - c.Caret.IndexOfChar = c.Selection.EndIndex; - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - this.Invalidate(); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.cs deleted file mode 100644 index e910caf..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/STTextBox.cs +++ /dev/null @@ -1,497 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.ComponentModel; -using CPF.Controls; -using CPF.Drawing; -using System.Timers; -using CPF; -using CPF.Input; - -namespace ST.Library.UI.STTextBox -{ - public partial class STTextBox : Control - { - //var dpi = Root.LayoutScaling; - public Font Font { - set { - this.FontFamily = value.FontFamily; - this.FontSize = value.FontSize; - this.FontStyle = value.FontStyle; - } - get { - return new Font(this.FontFamily, this.FontSize, this.FontStyle); - } - } - public float DPIZoom { get { return Root.RenderScaling; } } - - private int _BorderWidth = 1; - - public int BorderWidth { - get { return _BorderWidth; } - set { _BorderWidth = value; } - } - - private int _LineSpacing = 0; - - public int LineSpacing { - get { return _LineSpacing; } - set { - if (value < 0) { - throw new ArgumentException("The value must be more than zero"); - } - _LineSpacing = value; - this.Invalidate(); - } - } - - private int _CharSpacing = 0; - - public int CharSpacing { - get { return _CharSpacing; } - set { - if (value < 0) { - throw new ArgumentException("The value must be more than zero"); - } - _CharSpacing = value; - this.Invalidate(); - } - } - - private Color _BorderColor = Color.FromArgb(125, 0, 0, 0); - - public Color BorderColor { - get { return _BorderColor; } - set { - if (_BorderColor == value) { - return; - } - _BorderColor = value; - this.Invalidate(); - } - } - - private Color _SelectionColor = Color.FromArgb(125, Color.DarkGray.R, Color.DarkGray.G, Color.DarkGray.B); - - public Color SelectionColor { - get { return _SelectionColor; } - set { - if (value == _SelectionColor) { - return; - } - _SelectionColor = value; - if (!m_core.Selection.IsEmptySelection) { - this.Invalidate(); - } - } - } - - private bool _AllowScrollBar = true; - - public bool AllowScrollBar { - get { return _AllowScrollBar; } - set { _AllowScrollBar = value; } - } - - private Color _ScrollbarBackColor = Color.FromArgb(40, Color.Gray.R, Color.Gray.G, Color.Gray.B); - - public Color ScrollbarBackColor { - get { return _ScrollbarBackColor; } - set { _ScrollbarBackColor = value; } - } - - private Color _ScrollBarCornerColor =Color.FromArgb(80, Color.Gray.R, Color.Gray.G, Color.Gray.B); - - public Color ScrollBarCornerColor { - get { return _ScrollBarCornerColor; } - set { _ScrollBarCornerColor = value; } - } - - private Color _ScrollbarThumbHoverColor = Color.FromArgb(80, Color.Gray.R, Color.Gray.G, Color.Gray.B); - - public Color ScrollbarThumbHoverColor { - get { return _ScrollbarThumbHoverColor; } - set { _ScrollbarThumbHoverColor = value; } - } - - private Color _ScrollbarThumbBackColor = Color.FromArgb(80, Color.Black.R, Color.Black.G, Color.Black.B); - - public Color ScrollbarThumbBackColor { - get { return _ScrollbarThumbBackColor; } - set { _ScrollbarThumbBackColor = value; } - } - - private int _TabSize = 4; - - private bool _AutoIndent = true; - - private bool _TabToSpace = false; - - private const int WM_MOUSEHWHEEL = 0x020E; - private object m_obj_sync = new object(); - private Timer m_timer; - private IntPtr m_hIMC; - protected Core m_core; - - - public STTextBox() { - //this.SetStyle(ControlStyles.UserPaint, true); - //this.SetStyle(ControlStyles.ResizeRedraw, true); - //this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); - //this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); - //this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); - - this.Background = Color.White; - m_timer = new Timer(); - m_timer.Interval = 1000; - m_timer.Elapsed += m_timer_Tick; - m_core = new Core(this); - } - - #region override - - - - protected override void OnRender(DrawingContext e) { - base.OnRender(e); - //System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); - //sw.Start(); - var render = m_core.ITextBoxRender; - //try { - render.OnBeginPaint(new Graphics(e)); - m_core.ITextView.OnDrawView(render); - if (this._AllowScrollBar && m_core.Scroll.CountDown != 0) { - this.OnCalcScrollRectangle(m_core.Scroll); - bool bFlag = true; - if (m_core.Scroll.HBackRect != m_core.Scroll.HThumbRect) { - this.OnDrawHScrollBar(render, m_core.Scroll); - } else { bFlag = false; } - if (m_core.Scroll.VBackRect != m_core.Scroll.VThumbRect) { - this.OnDrawVScrollBar(render, m_core.Scroll); - } else { bFlag = false; } - if (bFlag) this.OnDrawScrollBarCorner(render, m_core.Scroll); - } - this.OnDrawBorder(render); - render.OnEndPaint(new Graphics(e)); - //} catch (Exception ex) { - // MessageBox.Show(ex.Message + "\r\n\r\n" + ex.StackTrace); - //} - //sw.Stop(); - //Console.WriteLine("OnPaint - " + sw.ElapsedMilliseconds + "ms"); - } - - protected virtual void OnDrawBorder(ISTTextBoxRender render) { - if (this._BorderWidth <= 0) { - return; - } - int nWidth = this.GetIntXSize(this._BorderWidth); - int nHeight = this.GetIntYSize(this._BorderWidth); - if (nWidth == 0) nWidth = 1; - if (nHeight == 0) nHeight = 1; - - render.FillRectangle(this._BorderColor, 0, 0, nWidth, this.Height.Value); - render.FillRectangle(this._BorderColor, this.Width.Value - nWidth, 0, nWidth, this.Height.Value); - render.FillRectangle(this._BorderColor, nWidth, 0, this.Width.Value - nWidth * 2, nHeight); - render.FillRectangle(this._BorderColor, nWidth, this.Height.Value - nHeight, this.Width.Value - nWidth * 2, nHeight); - } - - /*protected override void OnResize(EventArgs e) { - base.OnResize(e); - int nX = this.GetIntXSize(this._BorderWidth); - int nY = this.GetIntYSize(this._BorderWidth); - var rect = new Rect(nX, nY, this.Width.Value - nX * 2, this.Height.Value - nY * 2); - if (rect.Height < 1 || rect.Width < 1 || rect == m_core.ViewRectangle) { - return; - } - m_core.ViewRectangle = rect; - m_core.ITextView.OnCalcTextRectangle(); - m_core.ITextView.OnResize(e); - m_core.ITextView.OnCalcScroll(m_core.Scroll); - }*/ - protected override void OnLayoutUpdated() - { - base.OnLayoutUpdated(); - int nX = this.GetIntXSize(this._BorderWidth); - int nY = this.GetIntYSize(this._BorderWidth); - var rect = new Rect(nX, nY, this.Width.Value - nX * 2, this.Height.Value - nY * 2); - if (rect.Height < 1 || rect.Width < 1 || rect == m_core.ViewRectangle) - { - return; - } - m_core.ViewRectangle = rect; - m_core.ITextView.OnCalcTextRectangle(); - m_core.ITextView.OnResize(null);//hmbb - m_core.ITextView.OnCalcScroll(m_core.Scroll); - } - //hmbb 光标 暂时先不用 - /*protected override void OnGotFocus(GotFocusEventArgs e) { - base.OnGotFocus(e); - Win32.CreateCaret(this.Handle, IntPtr.Zero, this.GetIntXSize(1), m_core.LineHeight); - Win32.ShowCaret(this.Handle); - } - - protected override void OnLostFocus(EventArgs e) { - base.OnLostFocus(e); - Win32.HideCaret(this.Handle); - Win32.DestroyCaret(); - }*/ - - #endregion - - #region public - - public float GetFloatXSize(int nSize) { return nSize * this.DPIZoom; } - public float GetFloatXSize(float fSize) { return fSize * this.DPIZoom; } - public int GetIntXSize(int nSize) { return (int)Math.Round(nSize * this.DPIZoom); } - public int GetIntXSize(float fSize) { return (int)Math.Round(fSize * this.DPIZoom); } - - public float GetFloatYSize(int nSize) { return nSize * this.DPIZoom; } - public float GetFloatYSize(float fSize) { return fSize * this.DPIZoom; } - public int GetIntYSize(int nSize) { return (int)Math.Round(nSize * this.DPIZoom); } - public int GetIntYSize(float fSize) { return (int)Math.Round(fSize * this.DPIZoom); } - - public void ShowScrollBar(int nSecond) { - lock (m_obj_sync) { - m_core.Scroll.CountDown = nSecond; - } - m_timer.Start(); - } - - public TextHistoryRecord SetText(string strText) { - return m_core.TextManager.SetText(strText); - } - - public TextHistoryRecord SetText(int nIndex, string strText) { - return m_core.TextManager.SetText(nIndex, strText); - } - - public TextHistoryRecord SetText(int nIndex, int nLen, string strText) { - return m_core.TextManager.SetText(nIndex, nLen, strText); - } - - public void SelectAll() { - m_core.Selection.SetSelection(0, m_core.TextManager.TextLength); - m_core.Caret.IndexOfChar = m_core.Selection.EndIndex; - m_core.ITextView.SetCaretPostion(m_core.Caret.IndexOfChar); - this.Invalidate(); - } - - public void Copy() { - this.Copy(false); - } - - public void Cut() { - this.Copy(true); - } - - private void Copy(bool bCut) { - var c = m_core; - if (c.Selection.IsEmptySelection) { - return; - } - var data = c.TextManager.GetText(c.Selection.StartIndex, c.Selection.Length); - Clipboard.SetData((DataFormat.Text, data)); - if (bCut) { - this.EnterText(""); - } - } - - public void Paste() { - string strText = Clipboard.GetData(DataFormat.Text).ToString(); - if (string.IsNullOrEmpty(strText)) { - return; - } - this.EnterText(strText); - } - - public void Undo() { - this.RunHistory(true); - } - - public void Redo() { - this.RunHistory(false); - } - - private void RunHistory(bool isUndo) { - var c = m_core; - if (c.ITextHistory == null) { - return; - } - var histories = isUndo ? c.ITextHistory.GetUndo() : c.ITextHistory.GetRedo(); - if (histories == null || histories.Length == 0) { - return; - } - if (isUndo) { - var temp = new TextHistoryRecord[histories.Length]; - for (int i = 0; i < histories.Length; i++) { - temp[i] = histories[i]; - temp[i].NewText = histories[i].OldText; - temp[i].OldText = histories[i].NewText; - } - histories = temp; - } - histories = c.TextManager.RunHistory(histories); - var last = histories[histories.Length - 1]; - c.Selection.SetSelection(last.Index, last.Index + last.NewText.Length); - c.Caret.IndexOfChar = m_core.Selection.EndIndex; - c.ITextView.SetCaretPostion(c.Caret.IndexOfChar); - c.ITextView.ScrollToCaret(); - this.Invalidate(); - } - - #endregion - - #region protected - - protected virtual void OnImeStart(IntPtr hIMC) { } - protected virtual void OnImeResultStr(IntPtr hIMC, string strResult) { this.EnterText(strResult); } - protected virtual void OnImeCompStr(IntPtr hIMC, string strComp) { } - protected virtual void OnImeEnd(IntPtr hIMC) { } - - protected virtual void OnCalcScrollRectangle(STTextBoxScrollInfo scroll) { - int nSW = this.GetIntXSize(scroll.Size); - int nSH = this.GetIntYSize(scroll.Size); - var c = m_core; - Rect rectV = c.ViewRectangle; - scroll.HBackRect = new Rect(rectV.X, rectV.Bottom - nSH, rectV.Width - nSW, nSH); - scroll.VBackRect = new Rect(rectV.Right - nSW, rectV.Y, nSW, rectV.Height - nSH); - Rect rect_h_thumb = scroll.HBackRect; - Rect rect_v_thumb = scroll.VBackRect; - - float fScale = ((float)rectV.Width / scroll.XIncrement) / (rectV.Width / scroll.XIncrement + scroll.MaxXValue); - rect_h_thumb.Width = (int)(rectV.Width * fScale); - if (rect_h_thumb.Width > scroll.HBackRect.Width) { - rect_h_thumb.Width = scroll.HBackRect.Width; - } else if (rect_h_thumb.Width < this.GetIntXSize(4)) { - rect_h_thumb.Width = this.GetIntXSize(4); - } - - fScale = ((float)rectV.Height / c.LineHeight) / (rectV.Height / c.LineHeight + scroll.MaxYValue); - rect_v_thumb.Height = (int)(rectV.Height * fScale); - if (rect_v_thumb.Height > scroll.VBackRect.Height) { - rect_v_thumb.Height = scroll.VBackRect.Height; - } else if (rect_v_thumb.Height < this.GetIntYSize(4)) { - rect_v_thumb.Height = this.GetIntYSize(4); - } - - rect_h_thumb.X = rectV.X; - if (scroll.MaxXValue > 0) { - fScale = (float)scroll.XValue / scroll.MaxXValue; - rect_h_thumb.X += (int)((scroll.HBackRect.Width - rect_h_thumb.Width) * fScale); - } - - rect_v_thumb.Y = rectV.Y; - if (scroll.MaxYValue > 0) { - fScale = (float)scroll.YValue / scroll.MaxYValue; - rect_v_thumb.Y += (int)((scroll.VBackRect.Height - rect_v_thumb.Height) * fScale); - } - scroll.HThumbRect = rect_h_thumb; - scroll.VThumbRect = rect_v_thumb; - if (scroll.VBackRect == rect_v_thumb) { - rect_h_thumb.Width += nSW; - scroll.HThumbRect = rect_h_thumb; - var temp = scroll.HBackRect; - temp.Width += nSW; - scroll.HBackRect = temp; - } else if (scroll.HBackRect == rect_h_thumb) { - rect_v_thumb.Height += nSH; - scroll.VThumbRect = rect_v_thumb; - var temp = scroll.VBackRect; - temp.Height += nSH; - scroll.VBackRect = temp; - } else { - } - //scroll.HThumbRect = rect_h_thumb; - //scroll.VThumbRect = rect_v_thumb; - } - - protected virtual void OnDrawVScrollBar(ISTTextBoxRender render, STTextBoxScrollInfo scroll) { - var clr = scroll.HoverScrollBar == STTextBoxScrollInfo.ScrollBarType.V ? this._ScrollbarThumbHoverColor : this._ScrollbarBackColor; - render.FillRectangle(clr, scroll.VBackRect); - render.FillRectangle(clr, scroll.VBackRect.X, scroll.VBackRect.Y, this.GetIntXSize(1), scroll.VBackRect.Height); - render.FillRectangle(this._ScrollbarThumbBackColor, scroll.VThumbRect); - } - - protected virtual void OnDrawHScrollBar(ISTTextBoxRender render, STTextBoxScrollInfo scroll) { - var clr = scroll.HoverScrollBar == STTextBoxScrollInfo.ScrollBarType.H ? this._ScrollbarThumbHoverColor : this._ScrollbarBackColor; - render.FillRectangle(clr, scroll.HBackRect); - render.FillRectangle(clr, scroll.HBackRect.X, scroll.HBackRect.Y, scroll.HBackRect.Width, this.GetIntYSize(1)); - render.FillRectangle(this._ScrollbarThumbBackColor, scroll.HThumbRect); - } - - protected virtual void OnDrawScrollBarCorner(ISTTextBoxRender render, STTextBoxScrollInfo scroll) { - int nWidth = this.GetIntXSize(scroll.Size); - int nHeight = this.GetIntYSize(scroll.Size); - render.FillRectangle( - this._ScrollBarCornerColor, m_core.ViewRectangle.Right - nWidth, - m_core.ViewRectangle.Bottom - nHeight, - nWidth, - nHeight); - } - - #endregion - - #region private - - private bool SetCursor(Cursor c) { - if (this.Cursor == c) { - return false; - } - this.Cursor = c; - return true; - } - //hmbb 输入法获取输入 - /*private void OnImeStartPrivate(IntPtr hIMC) { - var CandidateForm = new Win32.CANDIDATEFORM() { - dwStyle = Win32.CFS_CANDIDATEPOS, - ptCurrentPos = m_core.Caret.Location - }; - Win32.ImmSetCandidateWindow(hIMC, ref CandidateForm); - var CompositionForm = new Win32.COMPOSITIONFORM() { - dwStyle = Win32.CFS_FORCE_POSITION, - ptCurrentPos = m_core.Caret.Location - }; - Win32.ImmSetCompositionWindow(hIMC, ref CompositionForm); - var logFont = new Win32.LOGFONT() { - lfHeight = m_core.FontHeight, - lfFaceName = this.Font.FontFamily + "\0" - }; - Win32.ImmSetCompositionFont(hIMC, ref logFont); - this.OnImeStart(hIMC); - } - - private void OnImeEndPrivate(IntPtr hIMC) { - Win32.ImmReleaseContext(this.Handle, hIMC); - this.OnImeEnd(hIMC); - } - - private void OnImeResultStrPrivate(IntPtr hIMC, string strResult) { - var CompositionForm = new Win32.COMPOSITIONFORM() { - dwStyle = Win32.CFS_FORCE_POSITION, - ptCurrentPos = m_core.Caret.Location - }; - Win32.ImmSetCompositionWindow(hIMC, ref CompositionForm); - this.OnImeResultStr(hIMC, strResult); - }*/ - - private void m_timer_Tick(object sender, EventArgs e) { - if (m_core.Scroll.HoverScrollBar != STTextBoxScrollInfo.ScrollBarType.None) { - return; - } - lock (m_obj_sync) { - m_core.Scroll.CountDown--; - } - if (m_core.Scroll.CountDown <= 0) { - m_timer.Stop(); - this.Invalidate(); - } - //设置输入法位置 - var point = m_core.Caret.Location; - var p = this.PointToView(point); - Root?.ViewImpl.SetIMEPosition(p); - } - - #endregion - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/EventObject.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/EventObject.cs deleted file mode 100644 index b575fa3..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/EventObject.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public delegate void TextManagerTextEventHandler(object sender, TextManagerTextEventArgs e); - public delegate void TextManagerLineEventHandler(object sender, TextManagerLineEventArgs e); - - - public class TextManagerTextEventArgs : EventArgs - { - public List TextHistoryRecord { get; private set; } - - public TextManagerTextEventArgs(List thrs) { - this.TextHistoryRecord = thrs; - } - } - - public class TextManagerLineEventArgs : EventArgs - { - public int IndexOfLine { get; private set; } - public TextLine Line { get; private set; } - public TextHistoryRecord History { get; private set; } - - public TextManagerLineEventArgs(int nLineIndex, TextLine stLine, TextHistoryRecord history) { - this.IndexOfLine = nLineIndex; - this.History = history; - this.Line = stLine; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextHistoryRecord.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextHistoryRecord.cs deleted file mode 100644 index 84624aa..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextHistoryRecord.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public struct TextHistoryRecord - { - public int Index; - public string OldText; - public string NewText; - - public static TextHistoryRecord Empty; - - public override string ToString() { - return "[" + Index + "," + OldText + "," + NewText + "]"; - } - - public static bool operator ==(TextHistoryRecord a, TextHistoryRecord b) { - if (a.Index != b.Index) return false; - if (a.OldText != b.OldText) return false; - if (a.NewText != b.NewText) return false; - return true; - } - - public static bool operator !=(TextHistoryRecord a, TextHistoryRecord b) { - return !(a == b); - } - - public override bool Equals(object obj) { - return base.Equals(obj); - } - - public override int GetHashCode() { - return base.GetHashCode(); - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextLine.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextLine.cs deleted file mode 100644 index 5122361..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextLine.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ST.Library.UI.STTextBox -{ - public class TextLine - { - public int IndexOfFirstChar { get; internal set; } - public string RawString { get; internal set; } - public object Tag { get; set; } - - internal TextLine() { - this.RawString = string.Empty; - } - - public int GetLengthWithoutNewline() { - for (int i = this.RawString.Length - 1; i >= 0; i--) { - switch (this.RawString[i]) { - case '\r': - case '\n': - continue; - default: - return i + 1; - } - } - return 0; - } - - public override string ToString() { - return "[" + IndexOfFirstChar + "]" + this.RawString; - } - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextManager.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextManager.cs deleted file mode 100644 index 95d7f97..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/TextManager/TextManager.cs +++ /dev/null @@ -1,454 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Collections; - -namespace ST.Library.UI.STTextBox -{ - public class TextManager : IEnumerable - { - public int LineCount { - get { return m_nLineCount; } - } - - public int TextLength { - get { return m_nTextLength; } - } - - public TextLine this[int nIndex] { - get { - if (nIndex < 0 || nIndex >= m_nLineCount) { - throw new ArgumentOutOfRangeException("nIndex"); - } - return m_lines[nIndex]; - } - } - - private int m_nLineCount; - private int m_nTextLength; - private TextLine[] m_lines; - - public TextManager() { - m_lines = new TextLine[2]; - m_lines[0] = new TextLine(); - m_nLineCount++; - } - - public event TextManagerLineEventHandler LineAdded; - public event TextManagerLineEventHandler LineRemoved; - public event TextManagerLineEventHandler LineChanged; - public event TextManagerTextEventHandler TextChanged; - public event TextManagerTextEventHandler TextStartChange; - public event EventHandler LineCountChanged; - - #region Event - - protected virtual void OnTextStartChange(TextManagerTextEventArgs e) { - if (this.TextStartChange != null) { - this.TextStartChange(this, e); - } - } - - protected virtual void OnLineAdded(TextManagerLineEventArgs e) { - if (this.LineAdded != null) { - this.LineAdded(this, e); - } - } - - protected virtual void OnRemoveLine(TextManagerLineEventArgs e) { - if (this.LineRemoved != null) { - this.LineRemoved(this, e); - } - } - - protected virtual void OnTextChanged(TextManagerTextEventArgs e) { - if (this.TextChanged != null) { - this.TextChanged(this, e); - } - } - - protected virtual void OnLineChanged(TextManagerLineEventArgs e) { - if (this.LineChanged != null) { - this.LineChanged(this, e); - } - } - - protected virtual void OnLineCountChanged(EventArgs e) { - if (this.LineCountChanged != null) { - this.LineCountChanged(this, e); - } - } - - #endregion - - public string GetText() { - return this.GetStringBuilder(0, m_nTextLength).ToString(); - } - - public string GetText(int nIndex, int nLen) { - return this.GetStringBuilder(nIndex, nLen).ToString(); - } - - public StringBuilder GetStringBuilder() { - return this.GetStringBuilder(0, m_nTextLength); - } - - public StringBuilder GetStringBuilder(int nIndex, int nLen) { - StringBuilder sb = new StringBuilder(); - if (nLen == 0) { - return sb; - } - int nIndexStart = this.GetLineIndexFromCharIndex(nIndex); - int nIndexEnd = this.GetLineIndexFromCharIndex(nIndex + nLen); - TextLine stLineStart = this[nIndexStart]; - TextLine stLineEnd = this[nIndexEnd]; - if (stLineStart == stLineEnd) { - sb.Append(stLineStart.RawString.Substring(nIndex - stLineStart.IndexOfFirstChar, nLen)); - return sb; - } - int nLenAdded = 0; - sb.Append(stLineStart.RawString.Substring(nIndex - stLineStart.IndexOfFirstChar)); - nLenAdded += sb.Length; - for (int i = nIndexStart + 1; i < nIndexEnd; i++) { - sb.Append(this[i].RawString); - nLenAdded += this[i].RawString.Length; - } - sb.Append(stLineEnd.RawString.Substring(0, nLen - nLenAdded)); - return sb; - } - - public TextHistoryRecord SetText(string strText) { - return this.SetText(0, m_nTextLength, strText); - } - - public TextHistoryRecord SetText(int nIndex, string strText) { - return this.SetText(nIndex, 0, strText); - } - /// - /// Modify the source text - /// - /// The index from source string - /// The length of the text to be deleted - /// The text that will be add - public TextHistoryRecord SetText(int nIndex, int nLen, string strText) { - return this.SetText(nIndex, nLen, strText, false); - } - - public TextHistoryRecord[] RunHistory(TextHistoryRecord[] histories) { - if (histories == null || histories.Length == 0) { - return new TextHistoryRecord[0]; - } - int nLineCount = m_nLineCount; - this.OnTextStartChange(new TextManagerTextEventArgs(new List(histories))); - var ret = new TextHistoryRecord[histories.Length]; - for (int i = 0; i < histories.Length; i++) { - var h = histories[i]; - ret[i] = this.SetText(h.Index, h.OldText.Length, h.NewText, true); - } - if (m_nLineCount != nLineCount) { - this.OnLineCountChanged(EventArgs.Empty); - } - this.OnTextChanged(new TextManagerTextEventArgs(new List(ret))); - return ret; - } - - public int Clear() { - int nRet = m_nTextLength; - m_lines = new TextLine[2]; - m_lines[0] = new TextLine(); - m_nLineCount = 1; - m_nTextLength = 0; - return nRet; - } - - public TextLine GetLineFromCharIndex(int nIndex) { - nIndex = this.GetLineIndexFromCharIndex(nIndex); - return m_lines[nIndex]; - } - - public int GetLineIndexFromCharIndex(int nIndex) { - if (m_nLineCount == 0) { - return -1; - } - if (nIndex <= 0) { - return 0; - } - if (nIndex >= m_lines[m_nLineCount - 1].IndexOfFirstChar + m_lines[m_nLineCount - 1].RawString.Length) { - return m_nLineCount - 1; - } - int nLeft = 0, nRight = m_nLineCount - 1, nMid = 0; - while (nLeft <= nRight) { - nMid = (nRight + nLeft) >> 1; - if (nIndex >= m_lines[nMid].IndexOfFirstChar + m_lines[nMid].RawString.Length) { - nLeft = nMid + 1; - } else if (nIndex < m_lines[nMid].IndexOfFirstChar) { - nRight = nMid - 1; - } else { - return nMid; - } - } - return -1; - } - - public int GetLineIndexFromLine(TextLine line) { - int nLeft = 0, nRight = m_nLineCount - 1, nMid = 0; - while (nLeft <= nRight) { - nMid = (nLeft + nRight) >> 1; - if (line.IndexOfFirstChar < m_lines[nMid].IndexOfFirstChar) { - nRight = nMid - 1; - } else if (line.IndexOfFirstChar > m_lines[nMid].IndexOfFirstChar) { - nLeft = nMid + 1; - } else { - if (m_lines[nMid] == line) { - return nMid; - } - return -1; - } - } - return -1; - } - - public TextHistoryRecord[] InsertAtStart(int nLineIndex, int nLineCount, string strText) { - if (nLineIndex < 0) { - nLineCount += nLineCount; - nLineIndex = 0; - } - if (nLineIndex >= m_nLineCount) { - return new TextHistoryRecord[0]; - } - if (nLineIndex + nLineCount > m_nLineCount) { - nLineCount = m_nLineCount - nLineIndex; - } - TextHistoryRecord[] lst = new TextHistoryRecord[nLineCount]; - this.OnTextStartChange(new TextManagerTextEventArgs(new List(lst))); - int nAddCounter = 0; - for (int i = 0; i < nLineCount; i++) { - var line = m_lines[nLineIndex + i]; - line.RawString = strText + line.RawString; - line.IndexOfFirstChar += nAddCounter; - var thr = new TextHistoryRecord() { - Index = line.IndexOfFirstChar, - OldText = string.Empty, - NewText = strText - }; - lst[i] = thr; - this.OnLineChanged(new TextManagerLineEventArgs(nLineIndex + i, line, thr)); - nAddCounter += strText.Length; - } - for (int i = nLineIndex + nLineCount; i < m_nLineCount; i++) { - m_lines[i].IndexOfFirstChar += nAddCounter; - } - m_nTextLength += nAddCounter; - this.OnTextChanged(new TextManagerTextEventArgs(new List(lst))); - return lst; - } - - public List TrimStartTab(int nLineIndex, int nLineCount, int nTabSize) { - List lst = new List(); - if (nLineIndex < 0) { - nLineCount += nLineCount; - nLineIndex = 0; - } - if (nLineIndex >= m_nLineCount) { - return lst; - } - if (nLineIndex + nLineCount > m_nLineCount) { - nLineCount = m_nLineCount - nLineIndex; - } - bool bStarted = false; - int nRemoveCounter = 0, nRemoveLen = 0; - for (int i = 0; i < nLineCount; i++) { - nRemoveLen = 0; - var thr = new TextHistoryRecord(); - var line = m_lines[nLineIndex + i]; - if (line.RawString[0] == '\t') { - nRemoveLen = 1; - } else { - while (nRemoveLen < nTabSize) { - switch (line.RawString[nRemoveLen]) { - case ' ': - nRemoveLen++; - continue; - case '\t': - nRemoveLen++; - continue; - default: - break; - } - break; - } - } - line.IndexOfFirstChar -= nRemoveCounter; - if (nRemoveLen == 0) continue; - if (!bStarted) { - this.OnTextStartChange(new TextManagerTextEventArgs(lst)); - bStarted = true; - } - thr.OldText = line.RawString.Substring(0, nRemoveLen); - thr.Index = line.IndexOfFirstChar; - thr.NewText = ""; - line.RawString = line.RawString.Substring(nRemoveLen); - nRemoveCounter += nRemoveLen; - this.OnLineChanged(new TextManagerLineEventArgs(nLineIndex + i, line, thr)); - lst.Add(thr); - } - if (lst.Count == 0) return lst; - for (int i = nLineIndex + nLineCount; i < m_nLineCount; i++) { - m_lines[i].IndexOfFirstChar -= nRemoveCounter; - } - m_nTextLength -= nRemoveCounter; - this.OnTextChanged(new TextManagerTextEventArgs(lst)); - return lst; - } - - #region Private - - private TextHistoryRecord SetText(int nIndex, int nLen, string strText, bool isHistory) { - if (strText == null) { - strText = ""; - } - string strOld = string.Empty; - if (nLen != 0) { - strOld = this.GetText(nIndex, nLen); - } - if (strOld == strText) { - return TextHistoryRecord.Empty; - } - var historyRecord = new TextHistoryRecord() { - Index = nIndex, - OldText = strOld, - NewText = strText - }; - if (!isHistory) { - var lstHistory = new List() { historyRecord }; - this.OnTextStartChange(new TextManagerTextEventArgs(lstHistory)); - historyRecord = lstHistory[0]; - } - List lst = this.GetTexLines(historyRecord.NewText); - int nIndexStartLine = this.GetLineIndexFromCharIndex(nIndex); - int nIndexEndLine = this.GetLineIndexFromCharIndex(nIndex + nLen); - var line_start = m_lines[nIndexStartLine]; - var line_end = m_lines[nIndexEndLine]; - string strLeft = line_start.RawString.Substring(0, nIndex - line_start.IndexOfFirstChar); - string strRight = line_end.RawString.Substring(nIndex + nLen - line_end.IndexOfFirstChar); - - lst[0].RawString = strLeft + lst[0].RawString; - lst[0].IndexOfFirstChar = line_start.IndexOfFirstChar; - lst[lst.Count - 1].RawString += strRight; - int nIncrement = historyRecord.NewText.Length - nLen; - m_nTextLength += nIncrement; - - line_start.RawString = lst[0].RawString; - this.OnLineChanged(new TextManagerLineEventArgs(strLeft.Length, line_start, historyRecord)); - - int nShouldRemoveLines = nIndexEndLine - nIndexStartLine; - int nShouldAddLines = lst.Count - 1 - nShouldRemoveLines; - for (int i = nIndexStartLine + 1; i <= nIndexEndLine; i++) { - this.OnRemoveLine(new TextManagerLineEventArgs(i, m_lines[i], historyRecord)); - } - if (nShouldAddLines > 0) { - this.InsertEmptyLines(nIndexStartLine, nShouldAddLines, nIncrement); - } else { - this.RemoveLines(nIndexStartLine + 1, -nShouldAddLines, nIncrement, historyRecord); - } - for (int i = 1, j = nIndexStartLine + 1; i < lst.Count; i++, j++) { - var prev_line = m_lines[j - 1]; - m_lines[j] = lst[i]; - m_lines[j].IndexOfFirstChar = prev_line.IndexOfFirstChar + prev_line.RawString.Length; - this.OnLineAdded(new TextManagerLineEventArgs(j, m_lines[j], historyRecord)); - } - if (nShouldAddLines == 0) { - for (int i = nIndexStartLine + 1; i < m_nLineCount; i++) { - TextLine prve_line = m_lines[i - 1]; - m_lines[i].IndexOfFirstChar = prve_line.IndexOfFirstChar + prve_line.RawString.Length; - } - } else { - m_nLineCount += nShouldAddLines; - if (!isHistory) { - this.OnLineCountChanged(EventArgs.Empty); - } - } - if (!isHistory) { - this.OnTextChanged(new TextManagerTextEventArgs(new List() { historyRecord })); - } - return historyRecord; - } - - private List GetTexLines(string strText) { - int nIndexStart = 0, nLen = 0; - TextLine line = new TextLine(); - List lst = new List(); - lst.Add(line); - for (int i = 0; i < strText.Length; i++) { - char c = strText[i]; - nLen++; - if (c == '\n' || c == '\r') { - if (c == '\r' && i + 1 < strText.Length && strText[i + 1] == '\n') { - nLen++; - i++; - } - line.RawString = strText.Substring(nIndexStart, nLen); - line = new TextLine(); - lst.Add(line); - nIndexStart = i + 1; - nLen = 0; - } - } - if (nLen != 0) { - line.RawString = strText.Substring(nIndexStart, nLen); - } - return lst; - } - - private void InsertEmptyLines(int nIndex, int nCount, int nOffsetIncrement) { - if (nCount == 0) return; - this.EnsureSpace(nCount); - for (int i = m_nLineCount + nCount - 1; i > nIndex + nCount; i--) { - m_lines[i] = m_lines[i - nCount]; - if (m_lines[i] == null) { - m_lines[i] = new TextLine(); - } - m_lines[i].IndexOfFirstChar += nOffsetIncrement; - } - } - - private void RemoveLines(int nIndex, int nCount, int nOffsetIncrement, TextHistoryRecord history) { - if (nCount == 0) return; - int nCounter = nCount; - for (int i = nIndex; i < m_nLineCount - nCount; i++) { - if (nCounter > 0) { - nCounter--; - } - m_lines[i] = m_lines[i + nCount]; - m_lines[i].IndexOfFirstChar += nOffsetIncrement; - } - } - - private void EnsureSpace(int nCount) { - if (m_nLineCount + nCount <= m_lines.Length) { - return; - } - int nLen = m_nLineCount + nCount; - TextLine[] new_arr = new TextLine[Math.Max(m_nLineCount + nCount, m_lines.Length << 1)]; - Array.Copy(m_lines, new_arr, m_lines.Length); - m_lines = new_arr; - } - - #endregion - - #region Interface - - public IEnumerator GetEnumerator() { - for (int i = 0; i < m_nLineCount; i++) { - yield return m_lines[i]; - } - } - - IEnumerator IEnumerable.GetEnumerator() { - return this.GetEnumerator(); - } - - #endregion - } -} diff --git a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Win32.cs b/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Win32.cs deleted file mode 100644 index 52f9c1f..0000000 --- a/CPF/Controls/STTextBox/ST.Library.UI.STTextBox/Win32.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Runtime.InteropServices; -using System.Drawing; - -namespace ST.Library.UI.STTextBox -{ - internal class Win32 - { - //[DllImport("user32.dll")] - //public static extern IntPtr GetDC(IntPtr hWnd); - //[DllImport("user32.dll")] - //public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); - //[DllImport("gdi32.dll")] - //public static extern IntPtr CreateCompatibleDC(IntPtr hDC); - //[DllImport("gdi32.dll")] - //public static extern bool DeleteDC(IntPtr hDC); - //[DllImport("gdi32.dll")] - //public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth, int nHeight); - //[DllImport("gdi32.dll")] - //public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject); - //[DllImport("gdi32.dll")] - //public static extern bool DeleteObject(IntPtr hObject); - //[DllImport("gdi32.dll")] - //public static extern int SetBkMode(IntPtr hDC, int iBkMode); - //[DllImport("gdi32.dll")] - //public static extern int SetTextCharacterExtra(IntPtr hDC, int nCharExtra); - //[DllImport("gdi32.dll")] - //public static extern uint SetTextColor(IntPtr hdc, int color); - //[DllImport("gdi32.dll", CharSet = CharSet.Unicode)] - //public static extern bool TextOut(IntPtr hdc, int nXStart, int nYStart, string lpString, int cbString); - //[DllImport("gdi32.dll", CharSet = CharSet.Auto)] - //public static extern bool GetTextExtentPoint32(IntPtr hdc, string lpString, int cbString, ref Size lpSize); - - [DllImport("user32.dll")] - public static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight); - [DllImport("user32.dll")] - public static extern bool ShowCaret(IntPtr hWnd); - [DllImport("User32.dll")] - public static extern bool HideCaret(IntPtr hWnd); - [DllImport("User32.dll")] - public static extern bool SetCaretPos(int x, int y); - [DllImport("user32.dll")] - public static extern bool DestroyCaret(); - [DllImport("imm32.dll")] - public static extern IntPtr ImmGetContext(IntPtr hWnd); - [DllImport("Imm32.dll")] - public static extern bool ImmReleaseContext(IntPtr hWnd, IntPtr hIMC); - [DllImport("Imm32.dll", CharSet = CharSet.Unicode)] - public static extern int ImmGetCompositionString(IntPtr hIMC, int dwIndex, byte[] lpBuf, int dwBufLen); - [DllImport("imm32.dll")] - public static extern bool ImmSetCandidateWindow(IntPtr hImc, ref CANDIDATEFORM fuck); - [DllImport("imm32.dll")] - public static extern bool ImmSetCompositionWindow(IntPtr hIMC, ref COMPOSITIONFORM lpCompForm); - [DllImport("imm32.dll")] - public static extern bool ImmSetCompositionFont(IntPtr hIMC, ref LOGFONT logFont); - - public const int SRCCOPY = 0x00CC0020; - - public const int GCS_COMPSTR = 0x0008; - public const int GCS_RESULTSTR = 0x0800; - public const int WM_IME_REQUEST = 0x0288; - public const int WM_IME_COMPOSITION = 0x010F; - public const int WM_IME_ENDCOMPOSITION = 0x010E; - public const int WM_IME_STARTCOMPOSITION = 0x010D; - // bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW - public const int CFS_DEFAULT = 0x0000; - public const int CFS_RECT = 0x0001; - public const int CFS_POINT = 0x0002; - public const int CFS_FORCE_POSITION = 0x0020; - public const int CFS_CANDIDATEPOS = 0x0040; - public const int CFS_EXCLUDE = 0x0080; - - public struct CANDIDATEFORM - { - public int dwIndex; - public int dwStyle; - public Point ptCurrentPos; - public Rectangle rcArea; - } - - public struct COMPOSITIONFORM - { - public int dwStyle; - public Point ptCurrentPos; - public Rectangle rcArea; - } - - public struct LOGFONT - { - public int lfHeight; - public int lfWidth; - public int lfEscapement; - public int lfOrientation; - public int lfWeight; - public byte lfItalic; - public byte lfUnderline; - public byte lfStrikeOut; - public byte lfCharSet; - public byte lfOutPrecision; - public byte lfClipPrecision; - public byte lfQuality; - public byte lfPitchAndFamily; - public string lfFaceName; - } - - private static byte[] m_byString = new byte[1024]; - - public static string ImmGetCompositionString(IntPtr hIMC, int dwIndex) { - if (hIMC == IntPtr.Zero) { - return null; - } - int nLen = Win32.ImmGetCompositionString(hIMC, dwIndex, m_byString, m_byString.Length); - return Encoding.Unicode.GetString(m_byString, 0, nLen); - } - } -} diff --git a/CPF/Controls/STTextBox/StringFormat.cs b/CPF/Controls/STTextBox/StringFormat.cs deleted file mode 100644 index a664569..0000000 --- a/CPF/Controls/STTextBox/StringFormat.cs +++ /dev/null @@ -1,12 +0,0 @@ -using CPF.Drawing; -using System; -using System.Collections.Generic; -using System.Text; - -namespace CPF.Drawing -{ - public class StringFormat - { - public TextAlignment Alignment { get; internal set; } - } -} diff --git a/CPF/Controls/TextBlock.cs b/CPF/Controls/TextBlock.cs index 996c79d..0a25ab2 100644 --- a/CPF/Controls/TextBlock.cs +++ b/CPF/Controls/TextBlock.cs @@ -185,7 +185,7 @@ namespace CPF.Controls s = DrawingFactory.Default.MeasureString(text, font, size.Width); if (TextTrimming == TextTrimming.CharacterEllipsis) { - var fh = font.DefaultLineHeight; + var fh = font.LineHeight; if (size.Height > fh && s.Height > size.Height && size.Height % fh > 0.001) { s.Height = (int)(size.Height / fh) * fh; @@ -197,7 +197,7 @@ namespace CPF.Controls s = DrawingFactory.Default.MeasureString(text, font, size.Width); if (TextTrimming == TextTrimming.CharacterEllipsis) { - var fh = font.DefaultLineHeight; + var fh = font.LineHeight; if (size.Height > fh && s.Height > size.Height && size.Height % fh > 0.001) { s.Height = (int)(size.Height / fh) * fh; diff --git a/CPF/Controls/TextBox.cs b/CPF/Controls/TextBox.cs index 2299b16..1358f18 100644 --- a/CPF/Controls/TextBox.cs +++ b/CPF/Controls/TextBox.cs @@ -842,6 +842,42 @@ namespace CPF.Controls TextBoxView.UpdateCaretPosition(); } + public void Undo() + { + if (!IsReadOnly && IsUndoEnabled) + { + if (undoRedoStates.Count > 1 && undoIndex > 0) + { + isRedo = true; + undoIndex--; + Document.Children.Clear(); + document.Children.AddRange(undoRedoStates[undoIndex].Items); + caretIndex.Clear(); + caretIndex.Add(undoRedoStates[undoIndex].CaretPosition); + selectionEnd.Clear(); + //isRedo = false; + } + } + } + + public void Redo() + { + if (!IsReadOnly && IsUndoEnabled) + { + if (undoIndex < undoRedoStates.Count - 1) + { + isRedo = true; + undoIndex++; + Document.Children.Clear(); + document.Children.AddRange(undoRedoStates[undoIndex].Items); + caretIndex.Clear(); + caretIndex.Add(undoRedoStates[undoIndex].CaretPosition); + selectionEnd.Clear(); + //isRedo = false; + } + } + } + protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); @@ -993,36 +1029,10 @@ namespace CPF.Controls } break; case PlatformHotkey.Undo: - if (!IsReadOnly && IsUndoEnabled) - { - if (undoRedoStates.Count > 1 && undoIndex > 0) - { - isRedo = true; - undoIndex--; - Document.Children.Clear(); - document.Children.AddRange(undoRedoStates[undoIndex].Items); - caretIndex.Clear(); - caretIndex.Add(undoRedoStates[undoIndex].CaretPosition); - selectionEnd.Clear(); - //isRedo = false; - } - } + Undo(); break; case PlatformHotkey.Redo: - if (!IsReadOnly && IsUndoEnabled) - { - if (undoIndex < undoRedoStates.Count - 1) - { - isRedo = true; - undoIndex++; - Document.Children.Clear(); - document.Children.AddRange(undoRedoStates[undoIndex].Items); - caretIndex.Clear(); - caretIndex.Add(undoRedoStates[undoIndex].CaretPosition); - selectionEnd.Clear(); - //isRedo = false; - } - } + Redo(); break; default: break; diff --git a/CPF/Controls/TextBoxView.cs b/CPF/Controls/TextBoxView.cs index e0eeb5f..0f3fff9 100644 --- a/CPF/Controls/TextBoxView.cs +++ b/CPF/Controls/TextBoxView.cs @@ -323,7 +323,7 @@ namespace CPF.Controls line.Measure(availableSize); if (document.Children.Count == 0) { - return new Size(1, font.DefaultLineHeight); + return new Size(1, font.LineHeight); } return new Size(((IDocumentElement)document).Width, document.Height); } @@ -350,7 +350,7 @@ namespace CPF.Controls //return finalSize; if (document.Children.Count == 0) { - return new Size(1, font.DefaultLineHeight); + return new Size(1, font.LineHeight); } return new Size(((IDocumentElement)document).Width, document.Height); } diff --git a/CPF/Controls/View.cs b/CPF/Controls/View.cs index 876fba9..583ffd5 100644 --- a/CPF/Controls/View.cs +++ b/CPF/Controls/View.cs @@ -66,7 +66,7 @@ namespace CPF.Controls } public View() { - views.TryAdd(this,this); + views.TryAdd(this, this); IsRoot = true; Root = this; viewImpl = CreateView(); @@ -187,6 +187,14 @@ namespace CPF.Controls list.Add(new CPFPropertyInfo { Name = item.Name, Value = e.ToString(), IsReadOnly = true, TypeName = item.PropertyType.FullName, GCHandle = ele.GetIntPtr().ToInt64() }); } } + if (ele.attachedValues != null) + { + foreach (var item in ele.attachedValues) + { + list.Add(new CPFPropertyInfo { Name = item.Key, Value = item.Value == null ? "" : item.Value.ToString(), IsReadOnly = true, TypeName = item.Value != null ? item.Value.GetType().FullName : "", GCHandle = ele.GetIntPtr().ToInt64() }); + } + } + SendData(new CommandMessage> { MessageType = MessageType.Properties, Data = list }); } SetDrawRenderRectangle(ele); @@ -330,8 +338,12 @@ namespace CPF.Controls { info += "\n" + "普通属性"; } - SendData(new CommandMessage { MessageType = MessageType.GetPropertyInfo, Data = info }); } + else if (p.PropertyName.Contains(".")) + { + info += "\n附加属性"; + } + SendData(new CommandMessage { MessageType = MessageType.GetPropertyInfo, Data = info }); } catch (Exception e) { diff --git a/CPF/CpfObject.cs b/CPF/CpfObject.cs index aaab87d..121e386 100644 --- a/CPF/CpfObject.cs +++ b/CPF/CpfObject.cs @@ -1995,6 +1995,14 @@ namespace CPF { return objInfo.ContainsKey(propertyName); } + /// + /// 获取所有注册了的属性元数据 + /// + /// + public virtual IEnumerable GetProperties() + { + return propertyInfos; + } #region IDisposable Support private bool disposedValue = false; diff --git a/CPF/Drawing/Color.cs b/CPF/Drawing/Color.cs index 44d1cc9..7ae96ae 100644 --- a/CPF/Drawing/Color.cs +++ b/CPF/Drawing/Color.cs @@ -1587,6 +1587,42 @@ namespace CPF.Drawing return c1; } + public static Color FromArgb(int argb) + { + return FromArgb((byte)(argb >> 24), + (byte)((argb >> 16) & 0xff), + (byte)((argb >> 8) & 0xff), + (byte)(argb & 0xff)); + } + + /// + /// Construct color value with merged RGB int value. + /// + /// Merged RGB value to create color object. + public static Color FromRgb(int rgb) + { + return FromRgb( + (byte)((rgb >> 16) & 0xff), + (byte)((rgb >> 8) & 0xff), + (byte)(rgb & 0xff)); + } + + public static Color FromColor(byte alpha, Color rgb) + { + return FromArgb(alpha, rgb.R, rgb.G, rgb.B); + } + + private static Random rand; + /// + /// Randomly generate a color. + /// + /// New random solid color. + public static Color Randomly() + { + if (rand == null) rand = new Random(); + return FromRgb((byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)); + } + /// /// FromScRgb /// @@ -1856,6 +1892,24 @@ namespace CPF.Drawing return false; } + /// + /// Convert color value to 4 bytes integer value. + /// + /// Converted 4 bytes integer value. + public int ToArgb() + { + return (this.A << 24) | (this.R << 16) | (this.G << 8) | (this.B << 0); + } + + /// + /// Check whether or not this color is transparent. + /// + public bool IsTransparent + { + get { return this.A == 0; } + } + + /// /// Parses a color string. #ffffff、r,g,b、r,g,b,a /// diff --git a/CPF/Drawing/DrawingFactory.cs b/CPF/Drawing/DrawingFactory.cs index 0fa01d1..8d5b826 100644 --- a/CPF/Drawing/DrawingFactory.cs +++ b/CPF/Drawing/DrawingFactory.cs @@ -170,7 +170,19 @@ namespace CPF.Drawing /// /// /// - public abstract float GetDefaultLineHeight(in Font font); + public abstract float GetLineHeight(in Font font); + /// + /// 获取从字样的基线到英语大写字母顶部的距离。 + /// + /// + /// + public abstract float GetAscent(in Font font); + /// + /// 获取从字样的基线到行底部的距离。 + /// + /// + /// + public abstract float GetDescent(in Font font); public abstract void Dispose(); /// diff --git a/CPF/Drawing/Font.cs b/CPF/Drawing/Font.cs index ba77683..cc859bc 100644 --- a/CPF/Drawing/Font.cs +++ b/CPF/Drawing/Font.cs @@ -22,6 +22,9 @@ namespace CPF.Drawing this.FontFamily = fontfamily; this.FontSize = size; this.FontStyle = fontstyle; + ascent = 0; + descent = 0; + lineHeight = 0; } //public Font(IDisposable font, string fontfamily, float size, FontStyles fontstyle) @@ -76,13 +79,54 @@ namespace CPF.Drawing } //GC.SuppressFinalize(this); } + float lineHeight; /// /// 字体默认行高 /// - public float DefaultLineHeight + public float LineHeight { - get { return Platform.Application.GetDrawingFactory().GetDefaultLineHeight(this); } + get + { + if (lineHeight == 0) + { + lineHeight = Platform.Application.GetDrawingFactory().GetLineHeight(this); + } + return lineHeight; + } } + + float ascent; + /// + /// 获取从字样的基线到英语大写字母顶部的距离。 + /// + public float Ascent + { + get + { + if (ascent == 0) + { + ascent = Platform.Application.GetDrawingFactory().GetAscent(this); + } + return ascent; + } + } + + float descent; + /// + /// 获取从字样的基线到行底部的距离 + /// + public float Descent + { + get + { + if (descent == 0) + { + descent = Platform.Application.GetDrawingFactory().GetDescent(this); + } + return descent; + } + } + //~Font() //{ // Dispose(); diff --git a/CPF/Drawing/IPathImpl.cs b/CPF/Drawing/IPathImpl.cs index 825b4e9..af98495 100644 --- a/CPF/Drawing/IPathImpl.cs +++ b/CPF/Drawing/IPathImpl.cs @@ -26,5 +26,7 @@ namespace CPF.Drawing bool Contains(float x, float y); IPathImpl CreateStrokePath(float strokeWidth); + + void Reset(); } } diff --git a/CPF/Drawing/LinearGradientBrush.cs b/CPF/Drawing/LinearGradientBrush.cs index 69654aa..e4c950d 100644 --- a/CPF/Drawing/LinearGradientBrush.cs +++ b/CPF/Drawing/LinearGradientBrush.cs @@ -17,13 +17,28 @@ namespace CPF.Drawing // blendColors = new GradientStop[] { new GradientStop(color1, 0), new GradientStop(color2, 1) }; //} - public LinearGradientBrush(GradientStop[] blendColors, Point startPoint, Point endPoint,Matrix matrix) + public LinearGradientBrush(GradientStop[] blendColors, Point startPoint, Point endPoint, Matrix matrix) { this.StartPoint = startPoint; this.EndPoint = endPoint; this.blendColors = blendColors; Matrix = matrix; } + //public LinearGradientBrush(GradientStop[] blendColors, float angle, Matrix matrix) + //{ + // this.StartPoint = new Point(); + // this.EndPoint = EndPointFromAngle(angle); + // this.blendColors = blendColors; + // Matrix = matrix; + //} + + private Point EndPointFromAngle(float angle) + { + // Convert the angle from degrees to radians + angle = (float)(angle * (1.0 / 180.0) * System.Math.PI); + return (new Point((float)System.Math.Cos(angle), (float)System.Math.Sin(angle))); + } + GradientStop[] blendColors; diff --git a/CPF/Drawing/PathGeometry.cs b/CPF/Drawing/PathGeometry.cs index 38025a2..f876fec 100644 --- a/CPF/Drawing/PathGeometry.cs +++ b/CPF/Drawing/PathGeometry.cs @@ -247,6 +247,11 @@ namespace CPF.Drawing return base.ToString(); } + public void Reset() + { + PathIml.Reset(); + } + #region IDisposable Support protected virtual void Dispose(bool disposing) diff --git a/CPF/Drawing/TextDecoration.cs b/CPF/Drawing/TextDecoration.cs index 24b2cc5..d0a7052 100644 --- a/CPF/Drawing/TextDecoration.cs +++ b/CPF/Drawing/TextDecoration.cs @@ -69,18 +69,19 @@ namespace CPF.Drawing public enum TextDecorationLocation : byte { + None, /// - /// 下划线的垂直位置。 这是默认值。 + /// 下划线的垂直位置。 /// - Underline = 0, + Underline = 1, /// /// 上划线的垂直位置。 /// - OverLine = 1, + OverLine = 2, /// /// 删除线的垂直位置。 /// - Strikethrough = 2, + Strikethrough = 4, } } diff --git a/CPF/ObjectExtenstions.cs b/CPF/ObjectExtenstions.cs index e68ecec..b9f87f9 100644 --- a/CPF/ObjectExtenstions.cs +++ b/CPF/ObjectExtenstions.cs @@ -28,7 +28,7 @@ namespace CPF /// /// /// - public static T Assign(this T o,out T v) + public static T Assign(this T o, out T v) { v = o; return o; @@ -984,5 +984,15 @@ namespace CPF //return base.GetPropertyMetadata(propertyName); return new PropertyMetadataAttribute() { PropertyName = propertyName, PropertyType = row.Table.Columns[propertyName].DataType }; } + + public override IEnumerable GetProperties() + { + List list = new List(); + foreach (DataColumn item in row.Table.Columns) + { + list.Add(new PropertyMetadataAttribute { PropertyName = item.ColumnName, PropertyType = item.DataType, }); + } + return list; + } } } \ No newline at end of file