BinaryFileSchemaGUI.SchemaColorizer.ColorizeSchema C# (CSharp) Method

ColorizeSchema() public static method

public static ColorizeSchema ( BinaryFileSchema schema, System.Windows.Forms.RichTextBox richTextBox ) : void
schema BFSchema.BinaryFileSchema
richTextBox System.Windows.Forms.RichTextBox
return void
        public static void ColorizeSchema(BinaryFileSchema schema, RichTextBox richTextBox)
        {
            textBox = richTextBox;
            richTextBox.SelectAll();
            richTextBox.SelectionColor = Color.Black;
            richTextBox.SelectionFont = normalfont;

            //Colorize the byte-order
            if ( schema.ByteOrder != null && schema.ByteOrder.ByteOrder != BfsByteOrderEnum.LanguageDefault)
            {
                richTextBox.Select(schema.ByteOrder.SourceRange.Begin, schema.ByteOrder.SourceRange.Length);
                richTextBox.SelectionColor = keywordcolor;
            }

            foreach (IBfsDataBlock block in schema.DatablockList)
            {
                ColorRange(block.SourceRange, normalcolor, boldfont);
                ColorRange(block.BlockTypeSourceRange, keywordcolor, boldfont);

                if (block.IsFormat)
                    ColorRange(block.FormatSourceRange, keywordcolor, boldfont);

                if (block is IBfsConsumptionType)
                {
                    IBfsConsumptionType special = block as IBfsConsumptionType;
                    ColorRange(special.PrimitiveType.SourceRange, typecolor);
                }

                foreach (BfsLocalField lfield in block.LocalFields.Values)
                {
                    ColorRange(lfield.SourceRange, 5, keywordcolor);
                    ColorRange(lfield.PrimitiveType.SourceRange, typecolor);

                    if (lfield.AssignmentExpression != null)
                        ColorExpression(lfield.AssignmentExpression.ExpressionGroup);
                }

                if (block is IBfsStructType)
                {
                    IBfsStructType structtype = block as IBfsStructType;

                    if (structtype.CompressionMethod != null)
                        ColorRange(structtype.CompressionRange, compressioncolor);

                    foreach (BfsStructField field in structtype.StructFields.Values)
                    {
                        ColorRange(field.FieldType.SourceRange, typecolor);
                        if (field.FieldType is BfsFunctionType)
                            ColorRange((field.FieldType as BfsFunctionType).ArgumentSourceRange, stringcolor);

                        if (field.Conditional != null)
                        {
                            ColorRange(field.ConditionalSourceRange, 2, keywordcolor);
                            ColorExpression(field.Conditional.ExpressionGroup);
                        }

                        if (field.Skip)
                            ColorRange(field.SkipSourceRange, skipcolor);

                        if (field.FieldType.ArrayExtension != null && field.FieldType.ArrayExtension is BfsKnownArray)
                            ColorExpression((field.FieldType.ArrayExtension as BfsKnownArray).Expression.ExpressionGroup);
                        else if (field.FieldType.ArrayExtension != null && field.FieldType.ArrayExtension is BfsUnknownArray)
                        {
                            BfsUnknownArray array = field.FieldType.ArrayExtension as BfsUnknownArray;

                            ColorRange(array.UntilSourceRange, keywordcolor);

                            foreach (BfsSourceRange range in array.OrWords)
                                ColorRange(range, keywordcolor);

                            foreach (IBfsStopCase stopcase in array.StopCases)
                            {
                                if (stopcase is BfsStopCaseString)
                                    ColorRange(stopcase.SourceRange, stringcolor);
                                else if (stopcase is BfsStopCaseEndOfFile)
                                    ColorRange(stopcase.SourceRange, enumaliascolor);
                                else if (stopcase is BfsStopCaseHex)
                                    ColorRange(stopcase.SourceRange, numbercolor);

                                BfsSourceRange zerorange = new BfsSourceRange();
                                if (stopcase.InclusionSourceRange != zerorange)
                                    ColorRange(stopcase.InclusionSourceRange, keywordcolor);
                            }

                        }
                    }
                }
                else if (block is BfsEnum)
                    foreach (BfsEnumField field in (block as BfsEnum).EnumFields)
                    {
                        if (field.Alias != null)
                            ColorRange(field.AliasSourceRange, enumaliascolor);

                        if (field.EnumMatch is BfsEnumValue)
                            ColorRange(field.EnumMatch.SourceRange, numbercolor);
                        else if (field.EnumMatch is BfsEnumRange)
                            ColorRange(field.EnumMatch.SourceRange.Begin + 1, field.EnumMatch.SourceRange.Length - 2, numbercolor);
                        else if (field.EnumMatch is BfsEnumElse)
                            ColorRange(field.EnumMatch.SourceRange, keywordcolor);

                        ColorActionList(field.Actions);
                    }
                else if (block is BfsBitfield)
                {
                    foreach (BfsBitfieldField field in (block as BfsBitfield).BitFieldFields)
                    {
                        ColorRange(field.SourceRange, numbercolor);
                        ColorActionList(field.Actions);
                    }
                }
            }
        }