Skip to content

Commit

Permalink
LT-21633: Improve Bidi handling in Word Export (#15)
Browse files Browse the repository at this point in the history
- Remove unneeded TextDirection property.
- Create Writing System styles so that they are based on styles that
they should inherit from.
  • Loading branch information
aror92 authored Apr 3, 2024
1 parent 3a4f3ba commit f4470b0
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions Src/xWorks/WordStylesGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ internal static Style GenerateWordStyleFromLcmStyleSheet(

if (exportStyleInfo.HasTrailingIndent)
{
// Check bidirectional flag to determine correct orientation for indent
if (exportStyleInfo.DirectionIsRightToLeft == TriStateBool.triTrue)
parProps.Append(new Indentation() { Left = MilliPtToTwentiPt(exportStyleInfo.TrailingIndent).ToString() });
else
Expand All @@ -279,23 +280,18 @@ internal static Style GenerateWordStyleFromLcmStyleSheet(
ancestorIndents = CalculateParagraphIndentsFromAncestors(ancestorIndents.Ancestor, styleSheet, new AncestorIndents(0f, 0f));
var leadingIndent = CalculateMarginLeft(exportStyleInfo, ancestorIndents, hangingIndent);

// Check bidirectional flag to determine correct orientation for indent
if (exportStyleInfo.DirectionIsRightToLeft == TriStateBool.triTrue)
parProps.Append(new Indentation() { Right = leadingIndent.ToString() });
else
parProps.Append(new Indentation() { Left = leadingIndent.ToString() });
}
}

// If text direction is specified, add specification to paragraph properties
if (exportStyleInfo.DirectionIsRightToLeft != TriStateBool.triNotSet)
// If text direction is right to left, add BiDi property to the paragraph.
if (exportStyleInfo.DirectionIsRightToLeft == TriStateBool.triTrue)
{
parProps.Append(new BiDi());

if (exportStyleInfo.DirectionIsRightToLeft == TriStateBool.triTrue)
parProps.Append(new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft });

else
parProps.Append(new TextDirection() { Val = TextDirectionValues.LefToRightTopToBottom });
}
exportStyle.Append(parProps);
}
Expand Down Expand Up @@ -441,12 +437,18 @@ private static Style GenerateWordStyleFromWsOptions(ConfigurableDictionaryNode c
// if the writing system isn't a magic name just use it otherwise find the right one from the magic list
var wsIdString = possiblyMagic == 0 ? ws.Id : WritingSystemServices.GetWritingSystemList(cache, possiblyMagic, true).First().Id;
var wsId = cache.LanguageWritingSystemFactoryAccessor.GetWsFromStr(wsIdString);
var wsString = String.Format("[lang=\'{0}\']", wsIdString).Trim('.');

var wsStyle = new Style();

if (!string.IsNullOrEmpty(configNode.Style))
wsStyle = GenerateWordStyleFromLcmStyleSheet(configNode.Style, wsId, propertyTable);

wsStyle.StyleId = configNode.Style + (String.Format("[lang=\'{0}\']", wsIdString)).Trim('.');
//style should be based on the span for the current ws as well as the style info for the current node that is independent from the ws
wsStyle.Append(new BasedOn() { Val = "span" + wsString });
wsStyle.Append(new BasedOn() { Val = configNode.Style });

wsStyle.StyleId = configNode.Style + wsString;

if (!IsEmptyStyle(wsStyle))
return wsStyle;
Expand Down

0 comments on commit f4470b0

Please sign in to comment.