Support an5 alignment for SMPTE-TT 2052 - thx Steve :)

This commit is contained in:
niksedk 2023-11-21 19:47:01 +01:00
parent 92916bcfd4
commit 5d90b816c9
2 changed files with 17 additions and 5 deletions

View File

@ -120,6 +120,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
</styling>
<layout>
<region xml:id='bottom' tts:backgroundColor='transparent' tts:showBackground='whenActive' tts:origin='10% 55%' tts:extent='80% 80%' tts:displayAlign='after' />
<region xml:id='centerCenter' tts:backgroundColor='transparent' tts:showBackground='whenActive' tts:origin='10% 32%' tts:extent='80% 80%' tts:displayAlign='center ' />
<region xml:id='top' tts:backgroundColor='transparent' tts:showBackground='whenActive' tts:origin='10% 10%' tts:extent='80% 80%' tts:displayAlign='before' />
</layout>
</head>
@ -149,8 +150,9 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
}
}
var div = xml.DocumentElement.SelectSingleNode("//ttml:body", nsmgr).SelectSingleNode("ttml:div", nsmgr);
bool hasBottomCenterRegion = false;
bool hasTopCenterRegion = false;
var hasBottomCenterRegion = false;
var hasTopCenterRegion = false;
var hasMiddleRegion = false;
foreach (XmlNode node in xml.DocumentElement.SelectNodes("//ttml:head/ttml:layout/ttml:region", nsmgr))
{
string id = null;
@ -172,6 +174,11 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
{
hasTopCenterRegion = true;
}
if (id != null && (id == "centerCenter" || id == "center"))
{
hasMiddleRegion = true;
}
}
foreach (var p in subtitle.Paragraphs)
@ -204,6 +211,11 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
paragraph.Attributes.Append(regionP);
}
}
else if (hasMiddleRegion && (text.StartsWith("{\\an5}", StringComparison.Ordinal) || text.StartsWith("{\\an6}", StringComparison.Ordinal) || text.StartsWith("{\\an7}", StringComparison.Ordinal)))
{
regionP.InnerText = "centerCenter";
paragraph.Attributes.Append(regionP);
}
else if (hasBottomCenterRegion)
{
regionP.InnerText = "bottom";

View File

@ -201,7 +201,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
" <region tts:extent=\"80% 40%\" tts:origin=\"10% 50%\" tts:displayAlign=\"after\" tts:textAlign=\"start\" xml:id=\"bottomLeft\" />" + Environment.NewLine +
// Middle column
" <region tts:extent=\"80% 40%\" tts:origin=\"10% 10%\" tts:displayAlign=\"before\" tts:textAlign=\"center\" xml:id=\"topCenter\" />" + Environment.NewLine +
" <region tts:extent=\"80% 40%\" tts:origin=\"10% 30%\" tts:displayAlign=\"center\" tts:textAlign=\"center\" xml:id=\"centerСenter\" />" + Environment.NewLine +
" <region tts:extent=\"80% 40%\" tts:origin=\"10% 30%\" tts:displayAlign=\"center\" tts:textAlign=\"center\" xml:id=\"centerCenter\" />" + Environment.NewLine +
" <region tts:extent=\"80% 40%\" tts:origin=\"10% 50%\" tts:displayAlign=\"after\" tts:textAlign=\"center\" xml:id=\"bottomCenter\" />" + Environment.NewLine +
// Right column
" <region tts:extent=\"80% 40%\" tts:origin=\"10% 10%\" tts:displayAlign=\"before\" tts:textAlign=\"end\" xml:id=\"topRight\" />" + Environment.NewLine +
@ -448,7 +448,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
region = "centerLeft";
}
if (text.StartsWith("{\\an5}", StringComparison.Ordinal) && AddDefaultRegionIfNotExists(xml, "centerСenter"))
if (text.StartsWith("{\\an5}", StringComparison.Ordinal) && AddDefaultRegionIfNotExists(xml, "centerCenter"))
{
region = "centerСenter";
}
@ -882,7 +882,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
new KeyValuePair<string, string>("bottomCenter", "{\\an2}"),
new KeyValuePair<string, string>("bottomRight", "{\\an3}"),
new KeyValuePair<string, string>("centerLeft", "{\\an4}"),
new KeyValuePair<string, string>("centerСenter", "{\\an5}"),
new KeyValuePair<string, string>("centerCenter", "{\\an5}"),
new KeyValuePair<string, string>("centerRight", "{\\an6}"),
new KeyValuePair<string, string>("topLeft", "{\\an7}"),
new KeyValuePair<string, string>("topCenter", "{\\an8}"),