Skip to content
This repository was archived by the owner on Nov 9, 2023. It is now read-only.

Commit bae6caa

Browse files
committed
Added color conversion methods overloads to CssColor without ref. Added CssValue.CalculatedColor property.
1 parent c3e323d commit bae6caa

File tree

5 files changed

+65
-5
lines changed

5 files changed

+65
-5
lines changed

.nuget/Upload.cmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
NuGet Push Alba.CsCss.1.0.0.3.nupkg
1+
NuGet Push Alba.CsCss.1.0.1.0.nupkg
22
Pause

Alba.CsCss.Tests/Style/CssLoaderTests.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class CssLoaderTests
1515
private static readonly Uri SheetUri = new Uri("http://example.com/sheet.css"), BaseUri = new Uri("http://example.com/");
1616

1717
[TestMethod]
18-
public void ParseSheet_Simple ()
18+
public void ParseSheet_Simple_ColorHex ()
1919
{
2020
var loader = new CssLoader();
2121
var css = loader.ParseSheet("h1 { color: #123; }", SheetUri, BaseUri);
@@ -35,6 +35,29 @@ public void ParseSheet_Simple ()
3535
Assert.AreEqual(CssColor.RGB(0x11, 0x22, 0x33), css.StyleRules.Single().Declaration.Color.Color);
3636
}
3737

38+
[TestMethod]
39+
public void ParseSheet_Simple_ColorName ()
40+
{
41+
var loader = new CssLoader();
42+
var css = loader.ParseSheet("h1 { color: red; }", SheetUri, BaseUri);
43+
44+
Assert.AreEqual(SheetUri, css.SheetUri);
45+
Assert.AreEqual(BaseUri, css.BaseUri);
46+
Assert.AreEqual(1, css.Rules.Count());
47+
Assert.AreEqual(1, css.AllRules.Count());
48+
Assert.AreEqual(1, css.StyleRules.Count());
49+
Assert.AreEqual(1, css.AllStyleRules.Count());
50+
var h1 = css.StyleRules.Single();
51+
var h1sel = h1.SelectorGroups.Single().Selectors.Single();
52+
Assert.AreEqual("h1", h1sel.Tag);
53+
var h1color = h1.Declaration.Data.Single();
54+
Assert.AreEqual(CssProperty.Color, h1color.Property);
55+
Assert.AreEqual(CssColor.RGB(0xFF, 0x00, 0x00), CssColor.ColorNameToRGB(h1color.Value.String));
56+
Assert.AreEqual(CssColor.RGB(0xFF, 0x00, 0x00), CssColor.ColorNameToRGB(css.StyleRules.Single().Declaration.Color.String));
57+
Assert.AreEqual(CssColor.RGB(0xFF, 0x00, 0x00), h1color.Value.CalculatedColor);
58+
Assert.AreEqual(CssColor.RGB(0xFF, 0x00, 0x00), css.StyleRules.Single().Declaration.Color.CalculatedColor);
59+
}
60+
3861
[TestMethod]
3962
public void ParseSheet_ParseErrorEvent ()
4063
{

Alba.CsCss/Gfx/CssColor.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ public static bool HexToRGB (string aColorSpec, ref CssColor aResult)
8585
return false;
8686
}
8787

88+
public static CssColor? HexToRGB (string aColorSpec)
89+
{
90+
var aResult = new CssColor();
91+
return HexToRGB(aColorSpec, ref aResult) ? aResult : (CssColor?)null;
92+
}
93+
8894
public static bool LooseHexToRGB (string aColorSpec, ref CssColor aResult)
8995
{
9096
if (aColorSpec.EqualsLiteral("transparent")) {
@@ -146,6 +152,12 @@ public static bool LooseHexToRGB (string aColorSpec, ref CssColor aResult)
146152
return true;
147153
}
148154

155+
public static CssColor? LooseHexToRGB (string aColorSpec)
156+
{
157+
var aResult = new CssColor();
158+
return LooseHexToRGB(aColorSpec, ref aResult) ? aResult : (CssColor?)null;
159+
}
160+
149161
public static bool ColorNameToRGB (string aColorName, ref CssColor aResult)
150162
{
151163
if (gColorTable == null)
@@ -159,6 +171,12 @@ public static bool ColorNameToRGB (string aColorName, ref CssColor aResult)
159171
return false;
160172
}
161173

174+
public static CssColor? ColorNameToRGB (string aColorName)
175+
{
176+
var aResult = new CssColor();
177+
return ColorNameToRGB(aColorName, ref aResult) ? aResult : (CssColor?)null;
178+
}
179+
162180
public static CssColor HSL2RGB (float h, float s, float l)
163181
{
164182
float m2 = l <= 0.5f ? (l * (s + 1)) : (l + s - l * s);
@@ -207,7 +225,7 @@ private static byte ComponentValue (string aColorSpec, int aLen, int color, int
207225
component = (component * 16) + (ch - '0');
208226
}
209227
else if ((('a' <= ch) && (ch <= 'f')) ||
210-
(('A' <= ch) && (ch <= 'F'))) {
228+
(('A' <= ch) && (ch <= 'F'))) {
211229
// "ch&7" handles lower and uppercase hex alphabetics
212230
component = (component * 16) + (ch & 7) + 9;
213231
}

Alba.CsCss/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
// You can specify all the values or you can default the Build and Revision Numbers
3434
// by using the '*' as shown below:
3535
// [assembly: AssemblyVersion("1.0.*")]
36-
[assembly: AssemblyVersion("1.0.0.3")]
37-
[assembly: AssemblyFileVersion("1.0.0.3")]
36+
[assembly: AssemblyVersion("1.0.1.0")]
37+
[assembly: AssemblyFileVersion("1.0.1.0")]
3838

3939
[assembly: InternalsVisibleTo("Alba.CsCss.Tests")]

Alba.CsCss/Style/Values/CssValue.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,25 @@ public CssColor Color
505505
get { return GetColorValue(); }
506506
}
507507

508+
public CssColor CalculatedColor
509+
{
510+
get
511+
{
512+
switch (GetUnit()) {
513+
case CssUnit.Color:
514+
return Color;
515+
case CssUnit.Ident:
516+
var result = new CssColor();
517+
if (CssColor.ColorNameToRGB(String, ref result))
518+
return result;
519+
else
520+
throw new InvalidOperationException(string.Format("Unknown color name: {0}", String));
521+
default:
522+
throw new InvalidOperationException(string.Format("Cannot convert {0} value to color.", GetUnit()));
523+
}
524+
}
525+
}
526+
508527
public CssValueGradient Gradient
509528
{
510529
get { return GetGradientValue(); }

0 commit comments

Comments
 (0)