private static void ColorRange(BfsSourceRange range, Color color, Font font) { textBox.Select(range.Begin, range.Length); textBox.SelectionColor = color; textBox.SelectionFont = font; }
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); } } } }
public SourceError(BfsSourceRange range, string message ) { Message = message; SourceRange = range; }
private static void ColorRange(BfsSourceRange range, int length, Color color) { textBox.Select(range.Begin,length); textBox.SelectionColor = color; }
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; }
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; } } }
private static BfsSourceRange GetSourceRange(PegNode node) { BfsSourceRange range = new BfsSourceRange(); range.Begin = node.match_.posBeg_; range.Length = node.match_.Length; return range; }
public static void ReportWarning( BfsSourceRange range, string message ) { if (handler != null) handler.HandleWarning(new SourceError(range, "Warning: " + message)); }
public static void ReportError( BfsSourceRange range, string message ) { gotError = true; if (handler != null) handler.HandleError(new SourceError(range, "Error: " + message)); }
public bool Equals(BfsSourceRange range) { return range.Begin == Begin && range.Length == Length; }
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+"'"); }