private void HandleEscSeq2(PegNode node, StyleContext context, StructuralGlyph parent) { int posBeg = node.match_.posBeg_; var childNode = node.child_; if (childNode == null) { throw new ArgumentNullException("childNode"); } string escHeader = _sourceText.Substring(posBeg, childNode.match_.posBeg_ - posBeg); switch (escHeader.ToLowerInvariant()) { case @"\=(": { var newParent = new SubSuperScript { Style = context }; parent.Add(newParent); var newContext = context.Clone(); newContext.ScaleFont(0.65); VisitNode(childNode, newContext, newParent); } break; case @"\p(": { double val; string s1 = GetText(childNode).Trim(); var newContext = context.Clone(); string numberString; if (s1.EndsWith("%")) { numberString = s1.Substring(0, s1.Length - 1); if (double.TryParse(numberString, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out val)) { newContext.BaseFontId = context.BaseFontId.WithSize(context.BaseFontId.Size * val / 100); newContext.ScaleFont(val / 100); } } else if (Altaxo.Serialization.LengthUnit.TryParse(s1, out var lengthUnit, out numberString) && double.TryParse(numberString, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out val) ) { double newSize = val * (double)(lengthUnit.UnitInMeter / Altaxo.Serialization.LengthUnit.Point.UnitInMeter); newContext.BaseFontId = context.BaseFontId.WithSize(newSize); newContext.FontId = context.FontId.WithSize(newSize); }
private void HandleEscSeq2(PegNode node, StyleContext context, StructuralGlyph parent) { int posBeg = node.match_.posBeg_; var childNode = node.child_; if (childNode == null) throw new ArgumentNullException("childNode"); string escHeader = _sourceText.Substring(posBeg, childNode.match_.posBeg_ - posBeg); switch (escHeader.ToLowerInvariant()) { case @"\=(": { var newParent = new SubSuperScript(); newParent.Style = context; parent.Add(newParent); var newContext = context.Clone(); newContext.ScaleFont(0.65); VisitNode(childNode, newContext, newParent); } break; case @"\p(": { double val; string s1 = GetText(childNode).Trim(); var newContext = context.Clone(); string numberString; Altaxo.Serialization.LengthUnit lengthUnit; if (s1.EndsWith("%")) { numberString = s1.Substring(0, s1.Length - 1); if (double.TryParse(numberString, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out val)) { newContext.BaseFontId = context.BaseFontId.WithSize(context.BaseFontId.Size * val / 100); newContext.ScaleFont(val / 100); } } else if (Altaxo.Serialization.LengthUnit.TryParse(s1, out lengthUnit, out numberString) && double.TryParse(numberString, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out val) ) { double newSize = val * (double)(lengthUnit.UnitInMeter / Altaxo.Serialization.LengthUnit.Point.UnitInMeter); newContext.BaseFontId = context.BaseFontId.WithSize(newSize); newContext.FontId = context.FontId.WithSize(newSize); } else if (double.TryParse(s1, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out val) ) { double newSize = val; newContext.BaseFontId = context.BaseFontId.WithSize(newSize); newContext.FontId = context.FontId.WithSize(newSize); } VisitNode(childNode.next_, newContext, parent); } break; case @"\c(": { string s1 = GetText(childNode).Trim(); var newContext = context.Clone(); var conv = new ColorConverter(); try { object result = conv.ConvertFromInvariantString(s1); newContext.brush = new SolidBrush((Color)result); } catch (Exception) { } VisitNode(childNode.next_, newContext, parent); } break; case @"\l(": { string s1 = GetText(childNode); string s2 = GetText(childNode.next_); int plotNumber, plotLayer; if (int.TryParse(s1, out plotLayer) && int.TryParse(s2, out plotNumber)) { parent.Add(new PlotSymbol(context, plotNumber, plotLayer)); } } break; case @"\%(": { string s1 = GetText(childNode); string s2 = GetText(childNode.next_); int plotNumber, plotLayer; if (int.TryParse(s1, out plotLayer) && int.TryParse(s2, out plotNumber)) { parent.Add(new PlotName(context, plotNumber, plotLayer)); } else if (int.TryParse(s1, out plotNumber)) { var label = new PlotName(context, plotNumber); label.SetPropertyColumnName(s2); parent.Add(label); } } break; } }