private RelativeFont ParseStyleItem(OrdinaryFormParser.RelativeFontContext context) { var fontStyle = context.fontStyle(); var style = _tokens.GetNumber(fontStyle.Value); RelativeFont font = style switch { 0 => ParseFontFromConfiguration(fontStyle), _ => ParseStandardFont(style), }; FillRelativeFont(font, context); return(font); }
public void FontListener_FillRelativeFont_FillsRelativeFontOptionalValues(string input, RelativeFont expected) { // Given. var font = new AutoFont(); var parser = CreateParser(input); var tree = parser.font(); WalkParseTree(tree); // When. TestSubject.FillRelativeFont(font, tree.relativeFont()); // Then. font.Should().BeEquivalentTo(expected, opt => opt .Excluding(x => x.Type)); }
internal virtual void FillRelativeFont( RelativeFont font, OrdinaryFormParser.RelativeFontContext context) { var mask = (FontMask)_tokens.GetNumber(context.Mask); var optionalValueSequence = new[] { FontMask.Size, FontMask.Bold, FontMask.Italic, FontMask.Underline, FontMask.Strikeout, }; var offset = 3; foreach (var flag in optionalValueSequence) { if ((mask & flag) == 0) { continue; } var node = context.NUMBER(offset); var value = _tokens.GetNumber(node); switch (flag) { case FontMask.Size: font.Size = ParseSize(value); break; case FontMask.Bold: font.Bold = ParseBold(value); break; case FontMask.Italic: font.Italic = ParseBoolean(value); break; case FontMask.Underline: font.Underline = ParseBoolean(value); break; case FontMask.Strikeout: font.Strikeout = ParseBoolean(value); break; default: break; } offset++; } if ((mask & FontMask.FaceName) != 0) { font.FaceName = _tokens.GetString(context.FaceName); } font.Scale = (ushort)_tokens.GetNumber(context.Scale); }