Skip to content

Commit

Permalink
Csharpier fixes.
Browse files Browse the repository at this point in the history
  • Loading branch information
MalcolmJohnston committed Nov 26, 2024
1 parent 5c013d8 commit 761ec97
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 20 deletions.
2 changes: 1 addition & 1 deletion Clippit/Html/HtmlToWmlConverterCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3048,7 +3048,7 @@ internal static XElement GetRunProperties(XText textNode, HtmlToWmlConverterSett
{
return GetRunProperties(parent, settings);
}

return new XElement(W.rPr);
}

Expand Down
42 changes: 26 additions & 16 deletions Clippit/Word/Assembler/HtmlConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,17 @@
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;

using Clippit.Html;
using Clippit.Internal;
using DocumentFormat.OpenXml.Packaging;

using NextExpected = Clippit.Html.HtmlToWmlConverterCore.NextExpected;

namespace Clippit.Word.Assembler
{
internal static class HtmlConverter
{
private static readonly HtmlToWmlConverterSettings htmlConverterSettings = HtmlToWmlConverter.GetDefaultSettings();
private static readonly HtmlToWmlConverterSettings htmlConverterSettings =
HtmlToWmlConverter.GetDefaultSettings();

private static readonly Regex detectEntityRegEx = new Regex("^&(?:#([0-9]+)|#x([0-9a-fA-F]+)|([0-9a-zA-Z]+));");

Expand Down Expand Up @@ -48,17 +47,25 @@ ref OpenXmlPart part
}

// otherwise split the values if there are new line characters
values = values.SelectMany(x => x.Replace("\r\n", "\n", StringComparison.OrdinalIgnoreCase)
.Split('\n'))
.ToArray();
values = values
.SelectMany(x => x.Replace("\r\n", "\n", StringComparison.OrdinalIgnoreCase).Split('\n'))
.ToArray();

List<object> results = new List<object>();
for(int i = 0; i < values.Length; i++)
for (int i = 0; i < values.Length; i++)
{
// try processing as XML
XElement parsedElement = XElement.Parse($"<xhtml>{EscapeAmpersands(values[i])}</xhtml>");

results.Add(Transform(parsedElement, htmlConverterSettings, part, i == 0 ? NextExpected.Run : NextExpected.Paragraph, true));
results.Add(
Transform(
parsedElement,
htmlConverterSettings,
part,
i == 0 ? NextExpected.Run : NextExpected.Paragraph,
true
)
);
}

results = FlattenResults(results);
Expand Down Expand Up @@ -168,7 +175,7 @@ bool preserveWhiteSpace
{
return new XElement(W.p, hyperlink);
}

return new[] { hyperlink };
}
}
Expand All @@ -185,10 +192,7 @@ bool preserveWhiteSpace
if (
element
.Descendants()
.Any(d =>
d.Name == XhtmlNoNamespace.li ||
d.Name == XhtmlNoNamespace.p
)
.Any(d => d.Name == XhtmlNoNamespace.li || d.Name == XhtmlNoNamespace.p)
)
{
return element
Expand Down Expand Up @@ -302,7 +306,11 @@ bool preserveWhiteSpace
new XElement(
W.r,
HtmlToWmlConverterCore.GetRunProperties(xTextNode, settings),
new XElement(W.t, HtmlToWmlConverterCore.GetXmlSpaceAttribute(textNodeString), textNodeString)
new XElement(
W.t,
HtmlToWmlConverterCore.GetXmlSpaceAttribute(textNodeString),
textNodeString
)
)
);
return p;
Expand All @@ -315,7 +323,10 @@ bool preserveWhiteSpace
var element = node as XElement;
if (element != null)
{
return element.Nodes().Select(n => Transform(n, settings, part, nextExpected, preserveWhiteSpace)).AsEnumerable();
return element
.Nodes()
.Select(n => Transform(n, settings, part, nextExpected, preserveWhiteSpace))
.AsEnumerable();
}
else
{
Expand All @@ -331,7 +342,6 @@ bool preserveWhiteSpace
}
}


private static string EscapeAmpersands(string value)
{
// check whether we have any processing to do
Expand Down
4 changes: 1 addition & 3 deletions Clippit/Word/DocumentAssembler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -846,8 +846,6 @@ private static string ValidatePerSchema(XElement element)

private static Dictionary<XName, PASchemaSet> s_paSchemaSets;



/// <summary>
/// Calculates the maximum docPr id. The identifier is
/// unique throughout the document. This method
Expand Down Expand Up @@ -1300,7 +1298,7 @@ OpenXmlPart part
return element.CreateContextErrorMessage($"Content: {ex.Message}", templateError);
}

// get XElements and ensure all but the first element is in a
// get XElements and ensure all but the first element is in a
List<XElement> elements = new List<XElement>();
for (int i = 0; i < content.Count; i++)
{
Expand Down

0 comments on commit 761ec97

Please sign in to comment.