Skip to content

Commit

Permalink
Merge pull request stevencohn#530 from stevencohn/529-fix-html-paste-…
Browse files Browse the repository at this point in the history
…as-richtext

replace &stevencohn#32; with proper spaces
  • Loading branch information
stevencohn committed Jun 28, 2022
2 parents 3339ab2 + a2b340c commit 8ac481a
Showing 1 changed file with 34 additions and 74 deletions.
108 changes: 34 additions & 74 deletions OneMore/Commands/Edit/PasteRtfCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
// Copyright © 2020 Steven M Cohn. All rights reserved.
//************************************************************************************************

#define Hx
#define Zx

namespace River.OneMoreAddIn.Commands
{
using System;
Expand All @@ -24,40 +21,6 @@ namespace River.OneMoreAddIn.Commands
using Resx = River.OneMoreAddIn.Properties.Resources;


/*
using River.OneMoreAddIn.Helpers.Office;
using River.OneMoreAddIn.Models;
using System.Linq;
using System.Xml.Linq;
if (Office.IsWordInstalled())
{
using (var word = new Word())
{
//var html = word.ConvertFileToHtml(@"C:\users\steven\downloads\foo.docx");
var html = word.ConvertClipboardToHtml();
logger.WriteLine(html);
logger.WriteLine("Adding HTML blcok");
using (var manager = new ApplicationManager())
{
var page = new Page(manager.CurrentPage(PageInfo.piBasic));
var ns = page.Namespace;
var outline = page.Root.Elements(ns + "Outline").Elements(ns + "OEChildren").FirstOrDefault();
outline.Add(new XElement(ns + "HTMLBlock",
new XElement(ns + "Data", new XCData(html))
));
manager.UpdatePageContent(page.Root);
return;
}
}
}
*/

internal class PasteRtfCommand : Command
{
private const double DeltaSize = 0.75;
Expand Down Expand Up @@ -88,30 +51,9 @@ public override async Task Execute(params object[] args)

// transform RTF and Xaml data on clipboard to HTML

var html = PrepareClipboard();
_ = PrepareClipboard();
//logger.WriteLine(html);
#if H
if (html != null)
{
// TODO: find and replace selected region

logger.WriteLine("Adding HTML blcok");
using (var manager = new ApplicationManager())
{
var page = new OM.Page(manager.CurrentPage(PageInfo.piBasic));
var ns = page.Namespace;

var outline = page.Root.Elements(ns + "Outline").Elements(ns + "OEChildren").FirstOrDefault();

outline.Add(new XElement(ns + "HTMLBlock",
new XElement(ns + "Data", new XCData(html))
));

manager.UpdatePageContent(page.Root);
return;
}
}
#endif
// paste what's remaining from clipboard, letting OneNote do the
// heavy lifting of converting the HTML into one:xml schema

Expand Down Expand Up @@ -140,26 +82,24 @@ private string PrepareClipboard()
if (Clipboard.ContainsText(TextDataFormat.Html))
{
var text = Clipboard.GetText(TextDataFormat.Html);
html = text.Substring(text.IndexOf("<html>"));
html = TranslateWhitespace(text.Substring(text.IndexOf("<html>")));
RebuildClipboard(AddHtmlPreamble(html));
}
else if (Clipboard.ContainsText(TextDataFormat.Rtf))
{
html = ConvertXamlToHtml(
ConvertRtfToXaml(Clipboard.GetText(TextDataFormat.Rtf)));
var text = AddHtmlPreamble(html);
RebuildClipboard(text);
RebuildClipboard(AddHtmlPreamble(html));
//logger.WriteLine("PasteRtf Rtf -> Html");
}
else if (Clipboard.ContainsText(TextDataFormat.Xaml))
{
html = ConvertXamlToHtml(
Clipboard.GetText(TextDataFormat.Xaml));
var text = AddHtmlPreamble(html);
RebuildClipboard(text);
RebuildClipboard(AddHtmlPreamble(html));
//logger.WriteLine("PasteRtf Xaml -> Html");
}
else
Expand All @@ -177,6 +117,33 @@ private string PrepareClipboard()
}


private string TranslateWhitespace(string html)
{
html = html.Replace("&#32;", " ");

/*
* This is a theory but as of yet untested...
* It strips whitespace occurring in between two SPAN elements and appends it
* to the first SPAN element. But so far, seems unnecessary.
*
var matches = Regex.Matches(html, @"</span>([ ]+)<span");
if (matches.Count > 0)
{
var builder = new StringBuilder(html);
for (int i = matches.Count - 1; i >= 0; i--)
{
builder.Remove(matches[i].Groups[1].Captures[0].Index, matches[i].Groups[1].Captures[0].Length);
builder.Insert(matches[i].Groups[0].Index, matches[i].Groups[1].Captures[0].Value);
}
html = builder.ToString();
}
*/

return html;
}


private void RebuildClipboard(string text)
{
var dob = new DataObject();
Expand Down Expand Up @@ -404,15 +371,8 @@ private string Untabify(string text)
return text;

var builder = new StringBuilder();

int i = 0;
#if Z
while ((i < text.Length) && text[i] == '\t')
{
builder.Append(Zpace);
i++;
}
#endif

zindents = zindents || i > 0;

while ((i < text.Length) && (text[i] == ' ' || text[i] == '\t'))
Expand Down

0 comments on commit 8ac481a

Please sign in to comment.