Skip to content

Commit

Permalink
Add \colorbox support
Browse files Browse the repository at this point in the history
  • Loading branch information
Happypig375 committed Apr 3, 2020
1 parent f2f84db commit f68e56a
Show file tree
Hide file tree
Showing 41 changed files with 643 additions and 545 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ public void DrawGlyphRunWithOffset(AttributedGlyphRun<TFont, TGlyph> run, PointF
textLine.Draw(CgContext);
}

public void FillRect(RectangleF rect, Color color) {
CgContext.SetFillColor(color.ToCGColor());
CgContext.FillRect(new CGRect(rect.X, rect.Y, rect.Width, rect.Height));
}

public void RestoreState() {
CgContext.RestoreState();
}
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
22 changes: 11 additions & 11 deletions CSharpMath.Apple/CSharpMath.Apple.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,24 @@
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)AppleMathView.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\AppleGraphicsContext.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\AppleGraphicsContext.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\Color.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Resources\AssemblyExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Resources\ManifestResources.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Resources\ManifestResourceProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\AppleGlyphBoundsProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\AppleFontMeasurer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\AppleGlyphNameProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\AppleMathFont.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\CtFontGlyphFinder.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\AppleGlyphBoundsProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\AppleFontMeasurer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\AppleGlyphNameProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\AppleMathFont.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\CtFontGlyphFinder.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\AttributedGlyphRun.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\AppleTypesetters.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\JsonMathTable.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\IFontMeasurer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FrontEnd\IGlyphNameProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\AppleTypesetters.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\JsonMathTable.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\IFontMeasurer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)BackEnd\IGlyphNameProvider.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="$(MSBuildThisFileDirectory)FrontEnd\" />
<Folder Include="$(MSBuildThisFileDirectory)BackEnd\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\latinmodern-math.json" />
Expand Down
6 changes: 3 additions & 3 deletions CSharpMath.CoreTests/CSharpMath.CoreTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
</PropertyGroup>

<ItemGroup>
<Compile Include="..\CSharpMath.Apple\FrontEnd\JsonMathTable.cs" Link="_Helpers\FrontEnd\JsonMathTable.cs" />
<Compile Include="..\CSharpMath.Apple\FrontEnd\IFontMeasurer.cs" Link="_Helpers\FrontEnd\IFontMeasurer.cs" />
<Compile Include="..\CSharpMath.Apple\FrontEnd\IGlyphNameProvider.cs" Link="_Helpers\FrontEnd\IGlyphNameProvider.cs" />
<Compile Include="..\CSharpMath.Apple\BackEnd\JsonMathTable.cs" Link="_Helpers\BackEnd\JsonMathTable.cs" />
<Compile Include="..\CSharpMath.Apple\BackEnd\IFontMeasurer.cs" Link="_Helpers\BackEnd\IFontMeasurer.cs" />
<Compile Include="..\CSharpMath.Apple\BackEnd\IGlyphNameProvider.cs" Link="_Helpers\BackEnd\IGlyphNameProvider.cs" />
<Compile Include="..\CSharpMath.Apple\Resources\AssemblyExtensions.cs" Link="_Helpers\Resources\AssemblyExtensions.cs" />
<Compile Include="..\CSharpMath.Apple\Resources\ManifestResources.cs" Link="_Helpers\Resources\ManifestResources.cs" />
<Compile Include="..\CSharpMath.Apple\Resources\ManifestResourceProvider.cs" Link="_Helpers\Resources\ManifestResourceProvider.cs" />
Expand Down
29 changes: 26 additions & 3 deletions CSharpMath.CoreTests/LaTeXParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -915,11 +915,25 @@ public void TestColor(string inColor, string outColor, byte r, byte g, byte b, b
CheckAtom<Variable>("b")
);
Assert.Equal($@"\color{{{outColor}}}{{a}}b", LaTeXParser.MathListToLaTeX(list).ToString());

list = ParseLaTeX($@"\colorbox{{{inColor}}}ab");
Assert.Collection(list,
CheckAtom<ColorBox>("", color => {
Assert.Equal(r, color.Colour.R);
Assert.Equal(g, color.Colour.G);
Assert.Equal(b, color.Colour.B);
Assert.Equal(a, color.Colour.A);
Assert.False(color.ScriptsAllowed);
Assert.Collection(color.InnerList, CheckAtom<Variable>("a"));
}),
CheckAtom<Variable>("b")
);
Assert.Equal($@"\colorbox{{{outColor}}}{{a}}b", LaTeXParser.MathListToLaTeX(list).ToString());
}

[Fact]
public void TestColorScripts() {
var list = ParseLaTeX(@"\color{red}12");
var list = ParseLaTeX(@"\color{red}1\colorbox{blue}2");
Assert.Collection(list,
CheckAtom<Color>("", color => {
Assert.Equal("red", color.Colour.ToString());
Expand All @@ -931,9 +945,18 @@ public void TestColorScripts() {
Assert.Throws<InvalidOperationException>(() => color.Subscript.Append(new MathList(new Variable("b"))));
Assert.Collection(color.InnerList, CheckAtom<Number>("1"));
}),
CheckAtom<Number>("2")
CheckAtom<ColorBox>("", colorBox => {
Assert.Equal("blue", colorBox.Colour.ToString());
Assert.Empty(colorBox.Superscript);
Assert.Throws<InvalidOperationException>(() => colorBox.Superscript.Add(new Variable("a")));
Assert.Throws<InvalidOperationException>(() => colorBox.Superscript.Append(new MathList(new Variable("a"))));
Assert.Empty(colorBox.Subscript);
Assert.Throws<InvalidOperationException>(() => colorBox.Subscript.Add(new Variable("b")));
Assert.Throws<InvalidOperationException>(() => colorBox.Subscript.Append(new MathList(new Variable("b"))));
Assert.Collection(colorBox.InnerList, CheckAtom<Number>("2"));
})
);
Assert.Equal(@"\color{red}{1}2", LaTeXParser.MathListToLaTeX(list).ToString());
Assert.Equal(@"\color{red}{1}\colorbox{blue}{2}", LaTeXParser.MathListToLaTeX(list).ToString());
}
}
}
14 changes: 14 additions & 0 deletions CSharpMath.CoreTests/MathAtomTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,20 @@ public void TestCopyOpen() {
CheckClone(open.Subscript, clone.Subscript);
}
[Fact]
public void TestCopyColor() {
var color = new Color(new Structures.Color(255, 0, 0), new MathList(new Open("(")));
var clone = color.Clone(false);
Assert.Equal(new Structures.Color(255, 0, 0), clone.Colour);
CheckClone(color, clone);
CheckClone(color.InnerList, clone.InnerList);

var colorBox = new ColorBox(new Structures.Color(128, 0, 0), new MathList(new Close(")")));
var cloneBox = colorBox.Clone(false);
Assert.Equal(new Structures.Color(128, 0, 0), cloneBox.Colour);
CheckClone(colorBox, cloneBox);
CheckClone(colorBox.InnerList, cloneBox.InnerList);
}
[Fact]
public void TestCreateMathTable() {
var table = new Table();
Assert.IsType<Table>(table);
Expand Down
48 changes: 48 additions & 0 deletions CSharpMath.CoreTests/TypesetterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -449,5 +449,53 @@ public void TestAccent() =>
Assert.False(line.HasScript);
})(accent.Accentee);
});
[Fact]
public void TestColor() =>
TestOuter(@"\color{red}\color{blue}x\colorbox{yellow}\colorbox{green}yz", 3, 14, 4, 30,
l1 => {
Assert.Null(l1.BackColor);
Assert.Equal(Structures.Color.PredefinedColors["red"], l1.TextColor);
TestList(1, 14, 4, 10, 0, 0, LinePosition.Regular, Range.UndefinedInt,
l2 => {
Assert.Null(l2.BackColor);
Assert.Equal(Structures.Color.PredefinedColors["blue"], l2.TextColor);
TestList(1, 14, 4, 10, 0, 0, LinePosition.Regular, Range.UndefinedInt, d => {
var line = Assert.IsType<TextLineDisplay<TFont, TGlyph>>(d);
Assert.Single(line.Atoms);
AssertText("x", line);
Assert.Equal(new PointF(), line.Position);
Assert.False(line.HasScript);
Assert.Null(line.BackColor);
Assert.Equal(Structures.Color.PredefinedColors["blue"], line.TextColor);
})(l2);
})(l1);
},
l1 => {
Assert.Equal(Structures.Color.PredefinedColors["yellow"], l1.BackColor);
Assert.Null(l1.TextColor);
TestList(1, 14, 4, 10, 10, 0, LinePosition.Regular, Range.UndefinedInt,
l2 => {
Assert.Equal(Structures.Color.PredefinedColors["green"], l2.BackColor);
Assert.Null(l2.TextColor);
TestList(1, 14, 4, 10, 0, 0, LinePosition.Regular, Range.UndefinedInt, d => {
var line = Assert.IsType<TextLineDisplay<TFont, TGlyph>>(d);
Assert.Single(line.Atoms);
AssertText("y", line);
Assert.Equal(new PointF(), line.Position);
Assert.False(line.HasScript);
Assert.Null(line.BackColor);
Assert.Null(line.TextColor);
})(l2);
})(l1);
}, d => {
var line = Assert.IsType<TextLineDisplay<TFont, TGlyph>>(d);
Assert.Single(line.Atoms);
AssertText("z", line);
Assert.Equal(new PointF(20, 0), line.Position);
Assert.False(line.HasScript);
Assert.Null(line.BackColor);
Assert.Null(line.TextColor);
}
);
}
}
6 changes: 3 additions & 3 deletions CSharpMath.Editor.Tests/CSharpMath.Editor.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
</PropertyGroup>

<ItemGroup>
<Compile Include="..\CSharpMath.Apple\FrontEnd\IFontMeasurer.cs" Link="_Helpers\FrontEnd\IFontMeasurer.cs" />
<Compile Include="..\CSharpMath.Apple\FrontEnd\IGlyphNameProvider.cs" Link="_Helpers\FrontEnd\IGlyphNameProvider.cs" />
<Compile Include="..\CSharpMath.Apple\FrontEnd\JsonMathTable.cs" Link="_Helpers\FrontEnd\JsonMathTable.cs" />
<Compile Include="..\CSharpMath.Apple\BackEnd\IFontMeasurer.cs" Link="_Helpers\BackEnd\IFontMeasurer.cs" />
<Compile Include="..\CSharpMath.Apple\BackEnd\IGlyphNameProvider.cs" Link="_Helpers\BackEnd\IGlyphNameProvider.cs" />
<Compile Include="..\CSharpMath.Apple\BackEnd\JsonMathTable.cs" Link="_Helpers\BackEnd\JsonMathTable.cs" />
<Compile Include="..\CSharpMath.Apple\Resources\AssemblyExtensions.cs" Link="_Helpers\Resources\AssemblyExtensions.cs" />
<Compile Include="..\CSharpMath.Apple\Resources\ManifestResources.cs" Link="_Helpers\Resources\ManifestResources.cs" />
<Compile Include="..\CSharpMath.Apple\Resources\ManifestResourceProvider.cs" Link="_Helpers\Resources\ManifestResourceProvider.cs" />
Expand Down
Loading

0 comments on commit f68e56a

Please sign in to comment.