コード例 #1
0
        public void CopyHtml(string text, BufferType buffer_type)
        {
            text = HelperFunctions.TrimTrailingSpace(text);

            string formattedText =
                (buffer_type == BufferType.Logic)   ? _colorizer.LogicToHtml(text) :
                (buffer_type == BufferType.Message) ? _colorizer.MessageToHtml(text) :
                (buffer_type == BufferType.Report)  ? _colorizer.HtmlReportToHtml(text) :
                _pffColorizer.Colorize(new PffColorizerHtml(), text);

            // html to clipboard code from: http://blogs.msdn.com/b/jmstall/archive/2007/01/21/sample-code-html-clipboard.aspx
            string htmlCopyText = "Format:HTML Format Version:1.0\nStartHTML:<<<<<<<1\nEndHTML:<<<<<<<2\nStartFragment:<<<<<<<3\nEndFragment:<<<<<<<4\n";
            int    startHTML    = htmlCopyText.Length;

            int beginChunkPos = formattedText.IndexOf("<div");
            int endChunkPos   = formattedText.IndexOf("</div>") + 6; // 6 is length if </div>

            htmlCopyText += formattedText.Substring(0, beginChunkPos) + "<!--StartFragment-->";
            int startFragment = htmlCopyText.Length;

            htmlCopyText += formattedText.Substring(beginChunkPos, endChunkPos - beginChunkPos);
            int endFragment = htmlCopyText.Length;

            htmlCopyText += "<!--EndFragment-->" + formattedText.Substring(endChunkPos);
            int endHTML = htmlCopyText.Length;

            htmlCopyText = htmlCopyText.Replace("<<<<<<<1", String.Format("{0,8}", startHTML));
            htmlCopyText = htmlCopyText.Replace("<<<<<<<2", String.Format("{0,8}", endHTML));
            htmlCopyText = htmlCopyText.Replace("<<<<<<<3", String.Format("{0,8}", startFragment));
            htmlCopyText = htmlCopyText.Replace("<<<<<<<4", String.Format("{0,8}", endFragment));

            Clipboard.Clear();
            Clipboard.SetText(htmlCopyText, TextDataFormat.Html);
        }