示例#1
0
 private static void ColorRange(BfsSourceRange range, Color color, Font font)
 {
     textBox.Select(range.Begin, range.Length);
     textBox.SelectionColor = color;
     textBox.SelectionFont = font;
 }
示例#2
0
        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);
                    }
                }
            }
        }
示例#3
0
 public SourceError(BfsSourceRange range, string message )
 {
     Message = message;
     SourceRange = range;
 }
示例#4
0
 private static void ColorRange(BfsSourceRange range, int length, Color color)
 {
     textBox.Select(range.Begin,length);
     textBox.SelectionColor = color;
 }
示例#5
0
 private static void StoreSourceRange(PegNode node, IBfsSourceNode source_node)
 {
     BfsSourceRange range = new BfsSourceRange();
     range.Begin = node.match_.posBeg_;
     range.Length = node.match_.Length;
     source_node.SourceRange = range;
 }
示例#6
0
        private void ConvertActionList(PegNode node, IList<IBfsAction> actions)
        {
            if (GetNodeId(node) != EBinaryFileSchemaParser.action_list)
                throw new AstConvertException("Wasn't an action list node!");

            for (node = node.child_; node != null; node = node.next_)
            {
                switch(GetNodeId(node))
                {
                    case EBinaryFileSchemaParser.output:
                        BfsActionOutput output = new BfsActionOutput();
                        StoreSourceRange(node, output);

                        BfsSourceRange range = new BfsSourceRange();
                        range.Begin = node.child_.next_.match_.posBeg_;
                        range.Length = node.child_.next_.match_.Length;
                        output.ArgumentSourceRange = range;

                        output.FunctionName = GetNodeText(node.child_);
                        output.Argument = GetNodeText(node.child_.next_);
                        actions.Add(output);
                        break;

                    case EBinaryFileSchemaParser.assignment:
                        BfsActionUnresolvedAssignment assignment = new BfsActionUnresolvedAssignment();
                        StoreSourceRange(node, assignment);
                        assignment.UnresolvedVariableName = GetNodeText(node.child_);
                        assignment.Expression = ConvertExpression(node.child_.next_);
                        actions.Add(assignment);
                        break;
                }
            }
        }
示例#7
0
 private static BfsSourceRange GetSourceRange(PegNode node)
 {
     BfsSourceRange range = new BfsSourceRange();
     range.Begin = node.match_.posBeg_;
     range.Length = node.match_.Length;
     return range;
 }
示例#8
0
 public static void ReportWarning( BfsSourceRange range, string message )
 {
     if (handler != null)
         handler.HandleWarning(new SourceError(range, "Warning: " + message));
 }
示例#9
0
 public static void ReportError( BfsSourceRange range, string message )
 {
     gotError = true;
     if (handler != null)
         handler.HandleError(new SourceError(range, "Error: " + message));
 }
示例#10
0
 public bool Equals(BfsSourceRange range)
 {
     return range.Begin == Begin && range.Length == Length;
 }
示例#11
0
 private void CheckAssignment(BfsSourceRange range, BfsPrimitiveTypeEnum target, BfsPrimitiveTypeEnum newvar)
 {
     if (target < newvar)
         BfsCompiler.ReportError(range,"The type '"+newvar+"' could not be stored into the type '"+target+"'");
 }