diff --git a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj index 7bc89fe..059f02a 100644 --- a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj +++ b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj @@ -162,6 +162,8 @@ + + diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/IXLRichString.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/IXLRichString.cs new file mode 100644 index 0000000..7425c22 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/IXLRichString.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel.RichText +{ + public interface IXLRichString + { + IXLRichText AddText(String text); + IXLRichString Clear(); + IXLRichText Characters(Int32 index, Int32 length); + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichString.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichString.cs new file mode 100644 index 0000000..dc4f987 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichString.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel.RichText +{ + internal class XLRichString: IXLRichString + { + List richTexts = new List(); + public IXLRichText AddText(String text) + { + var richText = new XLRichText(text); + richTexts.Add(richText); + return richText; + } + public IXLRichString Clear() + { + richTexts.Clear(); + return this; + } + + public override string ToString() + { + var sb = new StringBuilder(richTexts.Count); + richTexts.ForEach(rt => sb.Append(rt.Text)); + return sb.ToString(); + } + + public IXLRichText Characters(Int32 index, Int32 length) + { + List newRichTexts = new List(); + Int32 runningLength = 0; + foreach (var rt in richTexts) + { + if (runningLength + rt.Text.Length > index + 1) + { + Int32 startIndex = index - runningLength + 1; + if (startIndex > 0) + { + var newRT = new XLRichText(rt.Text.Substring(0, startIndex + 1), rt); + newRichTexts.Add(newRT); + } + } + else + { + newRichTexts.Add(rt); + runningLength += rt.Text.Length; + } + } + richTexts = newRichTexts; + } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs index 700ca98..8e93ec2 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs @@ -9,6 +9,10 @@ { public XLRichText(String text) { + } + + public XLRichText(String text, IXLRichText defaultRichText) + { Text = text; var defaultFont = XLWorkbook.DefaultStyle.Font;