protected override void ReadTopLevelSpecialElement(XmlReader reader, WritingSystemDefinition ws)
{
if (reader.GetAttribute("xmlns:fw") != null)
{
reader.ReadStartElement("special");
var fwWs = (PalasoWritingSystem)ws;
fwWs.DefaultFontFeatures = GetSpecialValue(reader, "fw", "defaultFontFeatures");
bool graphiteEnabled;
if (bool.TryParse(GetSpecialValue(reader, "fw", "graphiteEnabled"), out graphiteEnabled))
fwWs.IsGraphiteEnabled = graphiteEnabled;
fwWs.LegacyMapping = GetSpecialValue(reader, "fw", "legacyMapping");
fwWs.MatchedPairs = GetSpecialValue(reader, "fw", "matchedPairs");
fwWs.PunctuationPatterns = GetSpecialValue(reader, "fw", "punctuationPatterns");
fwWs.QuotationMarks = GetSpecialValue(reader, "fw", "quotationMarks");
fwWs.RegionName = GetSpecialValue(reader, "fw", "regionName");
fwWs.ScriptName = GetSpecialValue(reader, "fw", "scriptName");
fwWs.ValidChars = GetSpecialValue(reader, "fw", "validChars");
fwWs.VariantName = GetSpecialValue(reader, "fw", "variantName");
if (fwWs.VariantName == null)
{
var variant = fwWs.VariantSubtag;
if (variant != null)
{
var stdVariant = LangTagUtils.GetVariantSubtag(variant.Code);
if (stdVariant.Name != null)
fwWs.VariantName = stdVariant.Name;
else
{
var variantName = variant.ToString();
if (variantName.StartsWith("x-", StringComparison.OrdinalIgnoreCase))
variantName = variantName.Substring(2);
fwWs.VariantName = variantName;
}
}
}
if (fwWs.RegionName == null)
{
var region = fwWs.RegionSubtag;
if (region != null)
{
var stdRegion = LangTagUtils.GetRegionSubtag(region.Code);
if (stdRegion.Name != null)
fwWs.RegionName = stdRegion.Name;
else
{
var regionName = region.ToString();
if (regionName.StartsWith("x-", StringComparison.OrdinalIgnoreCase))
regionName = regionName.Substring(2);
fwWs.RegionName = regionName;
}
}
}
if (fwWs.ScriptName == null)
{
var script = fwWs.ScriptSubtag;
if (script != null)
{
var stdScript = LangTagUtils.GetScriptSubtag(script.Code);
if (stdScript.Name != null)
fwWs.ScriptName = stdScript.Name;
else
{
var scriptName = script.ToString();
if (scriptName.StartsWith("x-", StringComparison.OrdinalIgnoreCase))
scriptName = scriptName.Substring(2);
fwWs.ScriptName = scriptName;
}
}
}
var lcidString = GetSpecialValue(reader, "fw", "windowsLCID");
((ILegacyWritingSystemDefinition)fwWs).WindowsLcid = lcidString;
ReadSpecialEndElement(reader);
}
else
{
base.ReadTopLevelSpecialElement(reader, ws);
}
}