void ApplySyntaxColoring(ProcessedSourceLine processedLine) { mSourceBox.SelectionStart = (processedLine.LineTextIndex - lineNumberSeparator.Length) - mLineNumberLength; mSourceBox.SelectionLength = mLineNumberLength; mSourceBox.SelectionColor = mLineNumberColor; mSourceBox.SelectionStart += mLineNumberLength; mSourceBox.SelectionLength = lineNumberSeparator.Length; mSourceBox.SelectionColor = mLineNumberSeparatorColor; if (!processedLine.SourceLine.IsCommentLine) { if (processedLine.SourceLine.LocationField.Length > 0) { mSourceBox.SelectionStart = processedLine.LocTextIndex; mSourceBox.SelectionLength = processedLine.SourceLine.LocationField.Length; mSourceBox.SelectionColor = mLocColor; } if (processedLine.SourceLine.OpField.Length > 0) { mSourceBox.SelectionStart = processedLine.OpTextIndex; mSourceBox.SelectionLength = processedLine.SourceLine.OpField.Length; mSourceBox.SelectionColor = mOpColor; } if (processedLine.SourceLine.AddressField.Length > 0) { mSourceBox.SelectionStart = processedLine.AddressTextIndex; mSourceBox.SelectionLength = processedLine.SourceLine.AddressField.Length; mSourceBox.SelectionColor = mAddressColor; } } if (processedLine.SourceLine.Comment.Length > 0) { mSourceBox.SelectionStart = processedLine.CommentTextIndex; mSourceBox.SelectionLength = processedLine.SourceLine.Comment.Length; mSourceBox.SelectionColor = mCommentColor; } }
void AddLine(ParsedSourceLine sourceLine) { int count = mInstructions.Count; if (mSourceBox.TextLength != 0) { mSourceBox.AppendText(Environment.NewLine); } var lineNumberText = (count + 1).ToString(); mSourceBox.AppendText(new string(' ', mLineNumberLength - lineNumberText.Length) + lineNumberText + lineNumberSeparator); var processedLine = new ProcessedSourceLine(sourceLine, mSourceBox.TextLength); mInstructions.Add(processedLine); if (sourceLine.IsCommentLine) { if (sourceLine.Comment.Length > 0) { mSourceBox.AppendText(sourceLine.Comment); } } else { mSourceBox.AppendText(sourceLine.LocationField + new string(' ', (processedLine.LocTextLength - sourceLine.LocationField.Length) + Parser.FieldSpacing)); mSourceBox.AppendText(sourceLine.OpField + new string(' ', (processedLine.OpTextLength - sourceLine.OpField.Length) + Parser.FieldSpacing)); mSourceBox.AppendText(sourceLine.AddressField + new string(' ', (processedLine.AddressTextLength - sourceLine.AddressField.Length) + Parser.FieldSpacing)); if (sourceLine.Comment.Length > 0) { mSourceBox.AppendText(sourceLine.Comment); } } ApplySyntaxColoring(processedLine); }
void ApplyFindingColoring(AssemblyFinding finding, MarkOperation mark) { if (finding != null && finding.LineNumber != int.MinValue && finding.LineNumber >= 0 && finding.LineNumber < mInstructions.Count) { ProcessedSourceLine processedLine = mInstructions[finding.LineNumber]; int lineTextIndex = processedLine.LineTextIndex; int length = 0; switch (finding.LineSection) { case LineSection.LocationField: if (finding.Length <= 0) { lineTextIndex = processedLine.LocTextIndex; length = processedLine.SourceLine.LocationField.Length; break; } lineTextIndex = processedLine.LocTextIndex + finding.StartCharIndex; length = finding.Length; break; case LineSection.OpField: if (finding.Length <= 0) { lineTextIndex = processedLine.OpTextIndex; length = processedLine.SourceLine.OpField.Length; break; } lineTextIndex = processedLine.OpTextIndex + finding.StartCharIndex; length = finding.Length; break; case LineSection.AddressField: if (finding.Length <= 0) { lineTextIndex = processedLine.AddressTextIndex; length = processedLine.SourceLine.AddressField.Length; break; } lineTextIndex = processedLine.AddressTextIndex + finding.StartCharIndex; length = finding.Length; break; case LineSection.CommentField: if (finding.Length <= 0) { lineTextIndex = processedLine.CommentTextIndex; length = processedLine.SourceLine.Comment.Length; break; } lineTextIndex = processedLine.CommentTextIndex + finding.StartCharIndex; length = finding.Length; break; case LineSection.EntireLine: length = processedLine.LineTextLength; break; } mSourceBox.Select(lineTextIndex, length); if (length != 0) { if (mark == MarkOperation.Mark) { Font font = mSourceBox.Font; mSourceBox.SelectionFont = new Font(font.Name, font.Size, FontStyle.Underline, font.Unit, font.GdiCharSet); mSourceBox.Focus(); mSourceBox.ScrollToCaret(); } else if (mark == MarkOperation.Unmark) { mSourceBox.SelectionFont = mSourceBox.Font; } mSourceBox.SelectionColor = findingColors[(int)finding.Severity]; mSourceBox.SelectionLength = 0; } } }