Implements a formatter that renders text into a TextViewModel that can be used with a TextView.
Наследование: Reko.Core.Output.Formatter
Пример #1
0
 public void TSF_Link()
 {
     var tsf = new TextSpanFormatter();
     tsf.Write("go to ");
     tsf.WriteHyperlink("Hell", "Aitch-ee-double-hockeysticks");
     Assert.AreEqual("go to _Hell_" + nl, Flatten(tsf));
 }
Пример #2
0
        private void CreateNestedTextModel()
        {
            this.nestedTextModel = new NestedTextModel();

            var mixedCodeDataModel = combinedCodeView.MixedCodeDataView.Model as MixedCodeDataModel;

            if (mixedCodeDataModel == null)
            {
                return;
            }

            var dataItemNodes = mixedCodeDataModel.GetDataItemNodes();

            this.nodeByAddress = new SortedList <Address, MixedCodeDataModel.DataItemNode>();
            foreach (var dataItemNode in dataItemNodes)
            {
                var curAddr = dataItemNode.StartAddress;

                bool         nodeCreated = false;
                ImageMapItem item;
                Procedure    proc = dataItemNode.Proc;
                if (ShowItem(dataItemNode))
                {
                    if (proc != null)
                    {
                        var model = new ProcedureCodeModel(proc);
                        //$TODO: make spacing between globals / procedures user adjustable
                        model.NumEmptyLinesAfter = 2;
                        nestedTextModel.Nodes.Add(model);
                        nodeCreated = true;
                    }
                    else if (program.ImageMap.TryFindItem(curAddr, out item) &&
                             item.DataType != null &&
                             !(item.DataType is UnknownType))
                    {
                        var dt   = item.DataType;
                        var name = item.Name ?? "<unnamed>";

                        var tsf = new TextSpanFormatter();
                        var fmt = new AbsynCodeFormatter(tsf);
                        fmt.InnerFormatter.UseTabs = false;
                        var gdw = new GlobalDataWriter(program, services);
                        gdw.WriteGlobalVariable(curAddr, dt, name, tsf);
                        //$TODO: make spacing between globals / procedures user adjustable
                        tsf.WriteLine("");
                        nestedTextModel.Nodes.Add(tsf.GetModel());
                        nodeCreated = true;
                    }
                }

                if (nodeCreated)
                {
                    dataItemNode.ModelNode      = nestedTextModel.Nodes.Last();
                    this.nodeByAddress[curAddr] = dataItemNode;
                }
            }

            combinedCodeView.CodeView.Model = nestedTextModel;
        }
Пример #3
0
 private TextViewModel CreateNode(params string[] lines)
 {
     var fmt = new TextSpanFormatter();
     foreach (var line in lines)
     {
         fmt.WriteLine(line);
     }
     return fmt.GetModel();
 }
Пример #4
0
        private void SetTextView(Procedure proc)
        {
            var tsf = new TextSpanFormatter();
            var fmt = new AbsynCodeFormatter(tsf);

            fmt.InnerFormatter.UseTabs = false;
            fmt.Write(proc);
            this.TextView.Model = tsf.GetModel();
        }
Пример #5
0
        private TextViewModel GenerateTextModel(Block b)
        {
            var tsf   = new TextSpanFormatter();
            var fmt   = new AbsynCodeFormatter(tsf);
            var procf = new ProcedureFormatter(b.Procedure, fmt);

            fmt.InnerFormatter.UseTabs = false;
            procf.WriteBlock(b, fmt);
            return(tsf.GetModel());
        }
Пример #6
0
        public void DisplayProcedure(Procedure proc)
        {
            if (codeView == null || proc == null)
                return;

            this.proc = proc;
            var tsf = new TextSpanFormatter();
            var fmt = new CodeFormatter(tsf);
            fmt.InnerFormatter.UseTabs = false;
            fmt.Write(proc);
            this.TextView.Model = tsf.GetModel();
        }
Пример #7
0
        public void DisplayProcedure(Procedure proc)
        {
            if (codeView == null || proc == null)
            {
                return;
            }

            this.proc = proc;
            var tsf = new TextSpanFormatter();
            var fmt = new CodeFormatter(tsf);

            fmt.InnerFormatter.UseTabs = false;
            fmt.Write(proc);
            this.TextView.Model = tsf.GetModel();
        }
Пример #8
0
 private string Flatten(TextSpanFormatter tsf)
 {
     var model = tsf.GetModel();
     var sb= new StringBuilder();
     var lines = model.GetLineSpans(model.LineCount);
     foreach (var line in lines)
     {
         foreach (var span in line.TextSpans)
         {
             EmitSpanWrapper(span, sb);
             sb.Append(span.GetText());
             EmitSpanWrapper(span, sb);
         }
         sb.AppendLine();
     }
     return sb.ToString();
 }
Пример #9
0
        public void DisplaySegment(ImageSegment segment, Program program)
        {
            try
            {
                if (segmentView == null ||
                    segment == null ||
                    segment.Designer == null)
                    return;
                this.program = program;
                var tsf = new TextSpanFormatter();
                segment.Designer.Render(
                    segment,
                    program,
                    tsf);
                this.segmentView.TextView.Model = tsf.GetModel();
            }
            catch
            {

            }
        }
Пример #10
0
 public void DisplaySegment(ImageSegment segment, Program program)
 {
     try
     {
         if (segmentView == null ||
             segment == null ||
             segment.Designer == null)
         {
             return;
         }
         this.program = program;
         var tsf = new TextSpanFormatter();
         segment.Designer.Render(
             segment,
             program,
             tsf);
         this.segmentView.TextView.Model = tsf.GetModel();
     }
     catch
     {
     }
 }
Пример #11
0
 private void SetTextView(Procedure proc)
 {
     var tsf = new TextSpanFormatter();
     var fmt = new AbsynCodeFormatter(tsf);
     fmt.InnerFormatter.UseTabs = false;
     fmt.Write(proc);
     this.TextView.Model = tsf.GetModel();
 }
Пример #12
0
 private TextViewModel GenerateTextModel(Block b)
 {
     var tsf = new TextSpanFormatter();
     var fmt = new AbsynCodeFormatter(tsf);
     var procf = new ProcedureFormatter(b.Procedure, fmt);
     fmt.InnerFormatter.UseTabs = false;
     procf.WriteBlock(b, fmt);
     return tsf.GetModel();
 }
Пример #13
0
 public void TSF_Text()
 {
     var tsf = new TextSpanFormatter();
     tsf.Write("hello");
     Assert.AreEqual("hello"+ nl, Flatten(tsf));
 }
Пример #14
0
 public void TSF_Empty()
 {
     var tsf = new TextSpanFormatter();
     Assert.AreEqual("", Flatten(tsf));
 }
Пример #15
0
        private void CreateNestedTextModel()
        {
            this.nestedTextModel = new NestedTextModel();

            var mixedCodeDataModel = combinedCodeView.MixedCodeDataView.Model as MixedCodeDataModel;
            if (mixedCodeDataModel == null)
                return;

            var dataItemNodes = mixedCodeDataModel.GetDataItemNodes();

            this.nodeByAddress = new SortedList<Address, MixedCodeDataModel.DataItemNode>();

            foreach (var dataItemNode in dataItemNodes)
            {
                var curAddr = dataItemNode.StartAddress;

                bool nodeCreated = false;

                ImageMapItem item;
                Procedure proc = dataItemNode.Proc;
                if (ShowItem(dataItemNode))
                {
                    if (proc != null)
                    {
                        var tsf = new TextSpanFormatter();
                        var fmt = new AbsynCodeFormatter(tsf);
                        fmt.InnerFormatter.UseTabs = false;
                        fmt.Write(proc);
                        //$TODO: make spacing between globals / procedures user adjustable
                        tsf.WriteLine("");
                        tsf.WriteLine("");
                        nestedTextModel.Nodes.Add(tsf.GetModel());
                        nodeCreated = true;
                    }
                    else if (program.ImageMap.TryFindItem(curAddr, out item) &&
                              item.DataType != null &&
                            !(item.DataType is UnknownType))
                    {
                        var dt = item.DataType;
                        var name = item.Name ?? "<unnamed>";

                        var tsf = new TextSpanFormatter();
                        var fmt = new AbsynCodeFormatter(tsf);
                        fmt.InnerFormatter.UseTabs = false;
                        var gdw = new GlobalDataWriter(program, services);
                        gdw.WriteGlobalVariable(curAddr, dt, name, tsf);
                        //$TODO: make spacing between globals / procedures user adjustable
                        tsf.WriteLine("");
                        nestedTextModel.Nodes.Add(tsf.GetModel());
                        nodeCreated = true;
                    }
                }

                if (nodeCreated)
                {
                    dataItemNode.ModelNode = nestedTextModel.Nodes.Last();
                    this.nodeByAddress[curAddr] = dataItemNode;
                }
            }

            combinedCodeView.CodeView.Model = nestedTextModel;
        }
Пример #16
0
 private void SetTextView(DataType dt)
 {
     var tsf = new TextSpanFormatter() { Indentation = 0 };
     var fmt = new TypeFormatter(tsf, false);
     tsf.UseTabs = false;
     fmt.Write(dt, "");
     this.TextView.Model = tsf.GetModel();
 }