Feedback

C# - Konvertiert Code nach Example für XML-Kommentar

Veröffentlicht von am 24.09.2009
(1 Bewertungen)
Dokumentiert ihr euren Code? Klar! Geht es euch auch auf den Zeiger wenn ihr jede Zeile eines BeispielCodes mit /// versehen müßt?
Dann ist dieses Snippet für euch!
Die Klasse hat nur zwei öffentliche Methoden: ConvertTextToXmlExample und CopyToClipboard. Dem entsprechend einfach ist sie zu handhaben. Hier ist ein Beispiel für das was passiert:

Vorher:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Console.WriteLine("Hello world");
}
}
}


Nachher:

/// <example>
/// <code>
/// <![CDATA[
/// using System;
/// using System.Collections.Generic;
/// using System.Linq;
/// using System.Text;
///
/// namespace ConsoleApplication1
/// {
/// class Program
/// {
/// static void Main()
/// {
/// Console.WriteLine("Hello world");
/// }
/// }
/// }
/// ]]>
/// </code>
/// </example>


Mit einer kleinen Windows Forms Anwendung heißt es nur noch Copy, Button Click und Paste. Fertig ist die Laube!
Hier noch eine Beispielapplikation:

using System;
using System.Windows.Forms;

namespace ConvertCode2HelpExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.Fixed3D;
MaximizeBox = false;
SizeGripStyle = SizeGripStyle.Hide;
}

private void Button_Convert_Click(object sender, EventArgs e)
{
if(!Clipboard.ContainsText())
MessageBox.Show(
"Das Clipboard enthält keinen Text.",
"Fehler",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
else
{
CodeConverter.CopyToClipboard(
CodeConverter.ConvertTextToXmlExample(
Clipboard.GetText()));
}
}
}
}
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using DotNetExpansions.Forms; // For the fading MessageBox.
// You can get the code at
// http://dotnet-snippets.de/dns/fading-messagebox-ohne-buttons-SID694.aspx
// Or check out a copy of my DotNetExpansions project at // http://cyrons.svn.beanstalkapp.com/general/DotNetExpansions/trunk

namespace ConvertCode2HelpExample
{
   public static class CodeConverter
   {
      // Facade      
      public static string ConvertTextToXmlExample(string text)
      {
         var lines = SplitText2LinesOf(text);
         lines = PrependXmlCommentSignsTo(lines);
         var result = Concatenate(lines);
         result = PrependExampleHeaderTo(result);
         return AppendExampleFooterTo(result);
      }

      private static IEnumerable<string> SplitText2LinesOf(string text)
      {
         char[] splitCharacters = { '\n' };
         if(text == null)
            return null;
         string[] lines = text.Split(splitCharacters);
         var query = lines.Select(value => value.TrimEnd('\r'));
         return query;
      }

      public static void CopyToClipboard(string result)
      {
         try
         {
            Clipboard.SetDataObject(result, true);
            IFadingMessageBox fmb = new FadingMessageBox();
            fmb.ShowAndFade("Das Ergebnis wurde im Clipboard gespeichert.",
            "Hinweis", 1.0, FadingMessageBox.FadingMessageBoxIcon.Information);
         }
         catch(Exception)
         {
            if(DialogResult.Retry ==
               MessageBox.Show("Das System ist zur Zeit überlastet." +
                " Der Clip wurde nicht gespeichert. Bitte noch einmal probieren.",
                "FEHLER!", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning))
            {
               CopyToClipboard(result);
            }
         }
      }

      private static IEnumerable<string> PrependXmlCommentSignsTo(IEnumerable<string> lines)
      {
         if(lines == null)
            return null;
         if(lines.Count() == 0)
            return null;
         var query = lines.Select(value => "/// " + value);
         return query;
      }

      private static string Concatenate(IEnumerable<string> lines)
      {
         if(lines == null)
            return null;
         if(lines.Count() == 0)
            return null;
         string query = lines.Aggregate((build, line) => build + "\r\n" + line);
         query += "\r\n";
         return query;
      }

      private static string PrependExampleHeaderTo(string text)
      {
         const string exampleHeader = "/// <example>\r\n"
                                      + "/// <code>\r\n"
                                      + "/// <![CDATA[\r\n";

         return exampleHeader + text;
      }

      private static string AppendExampleFooterTo(string text)
      {
         const string exampleFooter = "/// ]]>\r\n"
                                      + "/// </code>\r\n"
                                      + "/// </example>";
         return text + exampleFooter;
      }
   }
}
Abgelegt unter XML Kommentar, Dokumentation, XML.

1 Kommentare zum Snippet

Rainer Hilmer schrieb am 30.09.2009:
Die DB hat dieses Snippet leider zweimal verloren und als ich es zuletzt wieder einstellte, war einiges an Müll dabei, den ich jetzt bereinigt habe. Ich bitte um Entschuldigung.
 

Logge dich ein, um hier zu kommentieren!