Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LT-21672: Add styles to table cells #17

Merged
merged 5 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Src/xWorks/ConfiguredLcmGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2807,8 +2807,8 @@ private static void GenerateRunWithPossibleLink(GeneratorSettings settings, stri
var cssStyle = CssGenerator.GenerateCssStyleFromLcmStyleSheet(style,
settings.Cache.WritingSystemFactory.GetWsFromStr(writingSystem), settings.PropertyTable);
var css = cssStyle.ToString();
if (!String.IsNullOrEmpty(css))
settings.ContentGenerator.SetRunStyle(writer, config, css);

settings.ContentGenerator.SetRunStyle(writer, config, writingSystem, css, style);
}
if (linkDestination != Guid.Empty)
{
Expand Down Expand Up @@ -3031,7 +3031,7 @@ private static void GenerateError(string text, IFragmentWriter writer, Generator
new ExCSS.Property("color") { Term = new HtmlColor(222, 0, 0) },
new ExCSS.Property("font-size") { Term = new PrimitiveTerm(UnitType.Ems, 1.5f) }
};
settings.ContentGenerator.SetRunStyle(writer, null, css.ToString());
settings.ContentGenerator.SetRunStyle(writer, null, writingSystem, css.ToString(), null);
if (text.Contains(TxtLineSplit))
{
var txtContents = text.Split(TxtLineSplit);
Expand Down
2 changes: 1 addition & 1 deletion Src/xWorks/ILcmContentGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ IFragment GenerateGroupingNode(object field, string className, ConfigurableDicti
void EndBiDiWrapper(IFragmentWriter writer);
void StartRun(IFragmentWriter writer, string writingSystem);
void EndRun(IFragmentWriter writer);
void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string css);
void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string writingSystem, string css, string runStyle);
void StartLink(IFragmentWriter writer, ConfigurableDictionaryNode config, Guid destination);
void StartLink(IFragmentWriter writer, ConfigurableDictionaryNode config, string externalDestination);
void EndLink(IFragmentWriter writer);
Expand Down
2 changes: 1 addition & 1 deletion Src/xWorks/LcmJsonGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ public void EndRun(IFragmentWriter writer)
m_runBuilder.Value.Clear();
}

public void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string css)
public void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string writingSystem, string css, string runStyle)
{
if(!string.IsNullOrEmpty(css))
((JsonFragmentWriter)writer).InsertJsonProperty("style", css);
Expand Down
42 changes: 33 additions & 9 deletions Src/xWorks/LcmWordGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -677,14 +677,27 @@ public void EndRun(IFragmentWriter writer)
// Beginning a new run is sufficient to end the old run
// and to ensure new styles/content are applied to the new run.
}
public void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string css)
{
// TODO: Many runs don't ever call this function; this is not where we want to set the character styles.

/*if (config != null && !string.IsNullOrEmpty(config.Style))
/// <summary>
/// Set the style for a specific run.
/// This is needed to set the specific style for any field that allows the
/// default style to be overridden (Table Cell, Custom Field, Note...).
/// </summary>
public void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string writingSystem, string _, string runStyle)
{
if (!string.IsNullOrEmpty(runStyle))
{
((WordFragmentWriter)writer).WordFragment.AddStyleLink(config.Style, ConfigurableDictionaryNode.StyleTypes.Character);
}*/
// Add the style link.
((WordFragmentWriter)writer).WordFragment.AddStyleLink(runStyle, ConfigurableDictionaryNode.StyleTypes.Character);

// Only add the style to the styleSheet if not already there.
if (!_styleSheet.ChildElements.Any(p => ((Style)p).StyleId == runStyle))
{
int ws = Cache.WritingSystemFactory.GetWsFromStr(writingSystem);
var wpStyle = WordStylesGenerator.GenerateWordStyleFromLcmStyleSheet(runStyle, ws, _propertyTable);
_styleSheet.Append(wpStyle);
}
}
}
public void StartLink(IFragmentWriter writer, ConfigurableDictionaryNode config, Guid destination)
{
Expand Down Expand Up @@ -751,9 +764,20 @@ public void StartTableRow(IFragmentWriter writer)
}
public void AddTableCell(IFragmentWriter writer, bool isHead, int colSpan, HorizontalAlign alignment, IFragment content)
{
WP.TableCell tableCell = new WP.TableCell();
tableCell.Append(new WP.Paragraph(new WP.Run(new WP.Text(content.ToString()))));
((WordFragmentWriter)writer).CurrentTableRow.Append(tableCell);
// The runs contain the text and any cell-specific styling (in the run properties).
// Note: multiple runs will exist if the cell contains multiple styles.
WP.Paragraph paragraph = new WP.Paragraph();
foreach (WP.Run run in ((DocFragment)content).DocBody.Elements<WP.Run>())
{
paragraph.Append(run.CloneNode(true));
}

if (paragraph.HasChildren)
{
WP.TableCell tableCell = new WP.TableCell();
tableCell.Append(paragraph);
((WordFragmentWriter)writer).CurrentTableRow.Append(tableCell);
}
}
public void EndTableRow(IFragmentWriter writer)
{
Expand Down
5 changes: 3 additions & 2 deletions Src/xWorks/LcmXhtmlGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -732,9 +732,10 @@ public void EndRun(IFragmentWriter writer)
((XmlFragmentWriter)writer).Writer.WriteEndElement(); // span
}

public void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string css)
public void SetRunStyle(IFragmentWriter writer, ConfigurableDictionaryNode config, string writingSystem, string css, string runStyle)
{
((XmlFragmentWriter)writer).Writer.WriteAttributeString("style", css);
if (!String.IsNullOrEmpty(css))
((XmlFragmentWriter)writer).Writer.WriteAttributeString("style", css);
}

public void StartLink(IFragmentWriter writer, ConfigurableDictionaryNode config, Guid destination)
Expand Down
Loading