Skip to content

Commit 58d80b4

Browse files
jhaygood86eXpl0it3r
authored andcommitted
CSS engine: sync enumerations, tokens and leaf value types
Brings the vendored CSS engine's name tables and leaf value types up to PeachPDF v0.9.6 (669ec1e), from the e5842c3 snapshot the port was taken at. - PropertyNames: grid, logical box-model, aspect-ratio, font-palette and the `@property`/`@font-palette-values` descriptors - FunctionNames: basic shapes, grid functions, lab/oklab/lch/oklch/color-mix, image-set/cross-fade/element - Keywords, FeatureNames (the prefers-* set), PseudoClassNames (:where), RuleNames and RuleType (`@property`, `@layer`, `@font-palette-values`) - Combinators: static readonly -> const so they can be used as constant patterns in switch statements - RangeToken: drop the eagerly-expanded SelectedRange in favour of a ToValue() override that re-emits the "U+" prefix - Resolution: accept `x` as the alias for `dppx` - Length: reject arbitrary non-length input parsing as zero in TryParse Length also gets an HTML-Renderer-specific adaptation rather than the upstream change. Upstream resolves absolute units against points (its layout unit); this renderer's layout unit is the CSS pixel, and CssValueParser.ParseLength already resolves 1in as 96px. The vendored table disagreed - `calc(1in)` gave 72 where `width: 1in` gave 96 - so the absolute-unit arms of ToPixels and the inverse arms of To(Unit) are now 96dpi (CSS Values & Units 5.2), matching ParseLength exactly. The fontAdjust px->pt hook is kept, since it mirrors ParseLength's own font-size output flag.
1 parent 5cf3d6b commit 58d80b4

11 files changed

Lines changed: 175 additions & 72 deletions

File tree

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/Combinators.cs‎

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@ namespace TheArtOfDev.HtmlRenderer.Core.CssEngine
22
{
33
internal static class Combinators
44
{
5-
public static readonly string Exactly = "=";
6-
public static readonly string Unlike = "!=";
7-
public static readonly string InList = "~=";
8-
public static readonly string InToken = "|=";
9-
public static readonly string Begins = "^=";
10-
public static readonly string Ends = "$=";
11-
public static readonly string InText = "*=";
12-
public static readonly string Column = "||";
13-
public static readonly string Pipe = "|";
14-
public static readonly string Adjacent = "+";
15-
public static readonly string Descendent = " ";
16-
public static readonly string Deep = ">>>";
17-
public static readonly string Child = ">";
18-
public static readonly string Sibling = "~";
5+
// const (not static readonly) so these can be used as constant patterns in switch statements
6+
// (e.g. AttributeSelectorFactory's reflection-free dispatch). String literals are interned, so
7+
// reference/value equality behaviour is unchanged.
8+
public const string Exactly = "=";
9+
public const string Unlike = "!=";
10+
public const string InList = "~=";
11+
public const string InToken = "|=";
12+
public const string Begins = "^=";
13+
public const string Ends = "$=";
14+
public const string InText = "*=";
15+
public const string Column = "||";
16+
public const string Pipe = "|";
17+
public const string Adjacent = "+";
18+
public const string Descendent = " ";
19+
public const string Deep = ">>>";
20+
public const string Child = ">";
21+
public const string Sibling = "~";
1922
}
2023
}

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/FeatureNames.cs‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,12 @@ internal static class FeatureNames
4444
public static readonly string Hover = "hover";
4545
public static readonly string BlockSize = "block-size";
4646
public static readonly string InlineSize = "inline-size";
47+
public static readonly string PrefersColorScheme = "prefers-color-scheme";
48+
public static readonly string PrefersReducedMotion = "prefers-reduced-motion";
49+
public static readonly string PrefersContrast = "prefers-contrast";
50+
public static readonly string PrefersReducedTransparency = "prefers-reduced-transparency";
51+
public static readonly string Update = "update";
52+
public static readonly string AnyHover = "any-hover";
53+
public static readonly string AnyPointer = "any-pointer";
4754
}
4855
}

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/FunctionNames.cs‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ internal static class FunctionNames
1111
public static readonly string Hsl = "hsl";
1212
public static readonly string Hsla = "hsla";
1313
public static readonly string Rect = "rect";
14+
public static readonly string Polygon = "polygon";
15+
public static readonly string Circle = "circle";
16+
public static readonly string Ellipse = "ellipse";
17+
public static readonly string Inset = "inset";
18+
public static readonly string Repeat = "repeat";
19+
public static readonly string Minmax = "minmax";
20+
public static readonly string FitContent = "fit-content";
1421
public static readonly string Attr = "attr";
1522
public static readonly string LinearGradient = "linear-gradient";
1623
public static readonly string RadialGradient = "radial-gradient";
@@ -50,8 +57,16 @@ internal static class FunctionNames
5057
public static readonly string Perspective = "perspective";
5158
public static readonly string Gray = "gray";
5259
public static readonly string Hwb = "hwb";
60+
public static readonly string Lab = "lab";
61+
public static readonly string Oklab = "oklab";
62+
public static readonly string Lch = "lch";
63+
public static readonly string Oklch = "oklch";
64+
public static readonly string ColorMix = "color-mix";
5365
public static readonly string ConicGradient = "conic-gradient";
5466
public static readonly string RepeatingConicGradient = "repeating-conic-gradient";
5567
public static readonly string Var = "var";
68+
public static readonly string ImageSet = "image-set";
69+
public static readonly string CrossFade = "cross-fade";
70+
public static readonly string Element = "element";
5671
}
5772
}

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/Keywords.cs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,11 @@ internal static class Keywords
299299
public static readonly string MaxContent = "max-content";
300300
public static readonly string MinContent = "min-content";
301301
public static readonly string FitContent = "fit-content";
302+
public static readonly string AutoFill = "auto-fill";
303+
public static readonly string AutoFit = "auto-fit";
304+
public static readonly string AutoFlow = "auto-flow";
305+
public static readonly string Subgrid = "subgrid";
306+
public static readonly string Dense = "dense";
302307
public static readonly string Content = "content";
303308
public static readonly string Revert = "revert";
304309
public static readonly string RevertLayer = "revert-layer";

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/PropertyNames.cs‎

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ internal static class PropertyNames
4040
public static readonly string BorderBottomRightRadius = "border-bottom-right-radius";
4141
public static readonly string BoxShadow = "box-shadow";
4242
public static readonly string BoxSizing = "box-sizing";
43+
public static readonly string AspectRatio = "aspect-ratio";
4344
public static readonly string BoxDecorationBreak = "box-decoration-break";
4445
public static readonly string BreakAfter = "break-after";
4546
public static readonly string BreakBefore = "break-before";
@@ -116,6 +117,7 @@ internal static class PropertyNames
116117
public static readonly string Float = "float";
117118
public static readonly string FontFamily = "font-family";
118119
public static readonly string FontFeatureSettings = "font-feature-settings";
120+
public static readonly string FontPalette = "font-palette";
119121
public static readonly string FontSize = "font-size";
120122
public static readonly string FontSizeAdjust = "font-size-adjust";
121123
public static readonly string FontStyle = "font-style";
@@ -124,6 +126,26 @@ internal static class PropertyNames
124126
public static readonly string FontWeight = "font-weight";
125127
public static readonly string Font = "font";
126128
public static readonly string Gap = "gap";
129+
public static readonly string Grid = "grid";
130+
public static readonly string GridTemplate = "grid-template";
131+
public static readonly string GridTemplateColumns = "grid-template-columns";
132+
public static readonly string GridTemplateRows = "grid-template-rows";
133+
public static readonly string GridTemplateAreas = "grid-template-areas";
134+
public static readonly string GridAutoColumns = "grid-auto-columns";
135+
public static readonly string GridAutoRows = "grid-auto-rows";
136+
public static readonly string GridAutoFlow = "grid-auto-flow";
137+
public static readonly string GridColumn = "grid-column";
138+
public static readonly string GridColumnStart = "grid-column-start";
139+
public static readonly string GridColumnEnd = "grid-column-end";
140+
public static readonly string GridRow = "grid-row";
141+
public static readonly string GridRowStart = "grid-row-start";
142+
public static readonly string GridRowEnd = "grid-row-end";
143+
public static readonly string GridArea = "grid-area";
144+
public static readonly string JustifyItems = "justify-items";
145+
public static readonly string JustifySelf = "justify-self";
146+
public static readonly string PlaceItems = "place-items";
147+
public static readonly string PlaceContent = "place-content";
148+
public static readonly string PlaceSelf = "place-self";
127149
public static readonly string GlyphOrientationHorizontal = "glyph-orientation-horizontal";
128150
public static readonly string GlyphOrientationVertical = "glyph-orientation-vertical";
129151
public static readonly string Height = "height";
@@ -241,8 +263,67 @@ internal static class PropertyNames
241263
public static readonly string Zoom = "zoom";
242264
public static readonly string UnicodeRange = "unicode-range";
243265
public static readonly string Src = "src";
266+
// @property descriptors (CSS Properties & Values API Level 1 §3)
267+
public static readonly string Syntax = "syntax";
268+
public static readonly string InitialValue = "initial-value";
269+
public static readonly string Inherits = "inherits";
270+
public static readonly string BasePalette = "base-palette";
271+
public static readonly string OverrideColors = "override-colors";
244272
public static readonly string ObjectFit = "object-fit";
245273
public static readonly string ObjectPosition = "object-position";
246274
public static readonly string Size = "size";
275+
276+
// CSS Logical Properties and Values Level 1. Layout here is always LTR / horizontal-tb,
277+
// so each logical property maps 1:1 to a physical one (block-start = top,
278+
// block-end = bottom, inline-start = left, inline-end = right) and is registered to
279+
// produce/export the existing physical longhands.
280+
public static readonly string MarginBlock = "margin-block";
281+
public static readonly string MarginBlockStart = "margin-block-start";
282+
public static readonly string MarginBlockEnd = "margin-block-end";
283+
public static readonly string MarginInline = "margin-inline";
284+
public static readonly string MarginInlineStart = "margin-inline-start";
285+
public static readonly string MarginInlineEnd = "margin-inline-end";
286+
287+
public static readonly string PaddingBlock = "padding-block";
288+
public static readonly string PaddingBlockStart = "padding-block-start";
289+
public static readonly string PaddingBlockEnd = "padding-block-end";
290+
public static readonly string PaddingInline = "padding-inline";
291+
public static readonly string PaddingInlineStart = "padding-inline-start";
292+
public static readonly string PaddingInlineEnd = "padding-inline-end";
293+
294+
public static readonly string Inset = "inset";
295+
public static readonly string InsetBlock = "inset-block";
296+
public static readonly string InsetBlockStart = "inset-block-start";
297+
public static readonly string InsetBlockEnd = "inset-block-end";
298+
public static readonly string InsetInline = "inset-inline";
299+
public static readonly string InsetInlineStart = "inset-inline-start";
300+
public static readonly string InsetInlineEnd = "inset-inline-end";
301+
302+
public static readonly string BorderBlock = "border-block";
303+
public static readonly string BorderBlockStart = "border-block-start";
304+
public static readonly string BorderBlockEnd = "border-block-end";
305+
public static readonly string BorderInline = "border-inline";
306+
public static readonly string BorderInlineStart = "border-inline-start";
307+
public static readonly string BorderInlineEnd = "border-inline-end";
308+
309+
public static readonly string BorderBlockWidth = "border-block-width";
310+
public static readonly string BorderBlockStyle = "border-block-style";
311+
public static readonly string BorderBlockColor = "border-block-color";
312+
public static readonly string BorderInlineWidth = "border-inline-width";
313+
public static readonly string BorderInlineStyle = "border-inline-style";
314+
public static readonly string BorderInlineColor = "border-inline-color";
315+
316+
public static readonly string BorderBlockStartWidth = "border-block-start-width";
317+
public static readonly string BorderBlockStartStyle = "border-block-start-style";
318+
public static readonly string BorderBlockStartColor = "border-block-start-color";
319+
public static readonly string BorderBlockEndWidth = "border-block-end-width";
320+
public static readonly string BorderBlockEndStyle = "border-block-end-style";
321+
public static readonly string BorderBlockEndColor = "border-block-end-color";
322+
public static readonly string BorderInlineStartWidth = "border-inline-start-width";
323+
public static readonly string BorderInlineStartStyle = "border-inline-start-style";
324+
public static readonly string BorderInlineStartColor = "border-inline-start-color";
325+
public static readonly string BorderInlineEndWidth = "border-inline-end-width";
326+
public static readonly string BorderInlineEndStyle = "border-inline-end-style";
327+
public static readonly string BorderInlineEndColor = "border-inline-end-color";
247328
}
248329
}

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/PseudoClassNames.cs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ internal static class PseudoClassNames
4040
public static readonly string Has = "has";
4141
public static readonly string Matches = "matches";
4242
public static readonly string Is = "is";
43+
public static readonly string Where = "where";
4344
public static readonly string NthChild = "nth-child";
4445
public static readonly string NthLastChild = "nth-last-child";
4546
public static readonly string NthOfType = "nth-of-type";

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/RuleNames.cs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,8 @@ internal static class RuleNames
1313
public static readonly string Namespace = "namespace";
1414
public static readonly string Page = "page";
1515
public static readonly string Container = "container";
16+
public static readonly string Property = "property";
17+
public static readonly string Layer = "layer";
18+
public static readonly string FontPaletteValues = "font-palette-values";
1619
}
1720
}

‎Source/HtmlRenderer/Core/CssEngine/Enumerations/RuleType.cs‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ internal enum RuleType : byte
1919
FontFeatureValues,
2020
Viewport,
2121
RegionStyle,
22-
Container
22+
Container,
23+
Property,
24+
Layer,
25+
LayerStatement,
26+
FontPaletteValues
2327
}
2428
}
Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,29 @@
1-
using System.Collections.Generic;
2-
using System.Globalization;
3-
41
namespace TheArtOfDev.HtmlRenderer.Core.CssEngine
52
{
63
internal sealed class RangeToken : Token
74
{
8-
private string[] GetRange()
9-
{
10-
var index = int.Parse(Start, NumberStyles.HexNumber);
11-
12-
if (index > Symbols.MaximumCodepoint) return null;
13-
14-
if (End == null) return new[] { index.ConvertFromUtf32() };
15-
16-
var list = new List<string>();
17-
var f = int.Parse(End, NumberStyles.HexNumber);
18-
19-
if (f > Symbols.MaximumCodepoint) f = Symbols.MaximumCodepoint;
20-
21-
while (index <= f)
22-
{
23-
list.Add(index.ConvertFromUtf32());
24-
index++;
25-
}
26-
27-
return list.ToArray();
28-
}
29-
305
public RangeToken(string range, TextPosition position)
316
: base(TokenType.Range, range, position)
327
{
338
Start = range.Replace(Symbols.QuestionMark, '0');
349
End = range.Replace(Symbols.QuestionMark, 'F');
35-
SelectedRange = GetRange();
3610
}
3711

3812
public RangeToken(string start, string end, TextPosition position)
3913
: base(TokenType.Range, string.Concat(start, "-", end), position)
4014
{
4115
Start = start;
4216
End = end;
43-
SelectedRange = GetRange();
4417
}
4518

46-
//public bool IsEmpty => (SelectedRange == null) || (SelectedRange.Length == 0);
19+
// Data holds the range without its "U+" prefix, so serializing it bare would emit "41-5A" - not a
20+
// valid <urange> and not what was authored.
21+
public override string ToValue()
22+
{
23+
return string.Concat("U+", Data);
24+
}
25+
4726
public string Start { get; }
4827
public string End { get; }
49-
public string[] SelectedRange { get; }
5028
}
51-
}
29+
}

0 commit comments

Comments
 (0)