Skip to content

Commit ce49edf

Browse files
committed
Map deprecated system colours
Current CSS color module level 4 has deprecated several system colours and replaced them with alternatives. This performs the mapping before asking the client to map the colour names to actual colours
1 parent 869bcd5 commit ce49edf

File tree

3 files changed

+114
-9
lines changed

3 files changed

+114
-9
lines changed

src/parse/properties/utils.c

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -834,22 +834,58 @@ css_error css__parse_named_colour(css_language *c, lwc_string *data,
834834
0xffffff00, /* YELLOW */
835835
0xff9acd32 /* YELLOWGREEN */
836836
};
837+
/** Legacy system colour mapping */
838+
static const int deprecatedmap[LAST_DEPRECATEDCOLOUR + 1 - FIRST_DEPRECATEDCOLOUR] = {
839+
BUTTONBORDER, /* ACTIVEBORDER */
840+
CANVAS, /* ACTIVECAPTION */
841+
CANVAS, /* APPWORKSPACE */
842+
CANVAS, /* BACKGROUND */
843+
BUTTONFACE, /* BUTTONHIGHLIGHT */
844+
BUTTONFACE, /* BUTTONSHADOW */
845+
CANVASTEXT, /* CAPTIONTEXT */
846+
BUTTONBORDER, /* INACTIVEBORDER */
847+
CANVAS, /* INACTIVECAPTION */
848+
GRAYTEXT, /* INACTIVECAPTIONTEXT */
849+
CANVAS, /* INFOBACKGROUND */
850+
CANVASTEXT, /* INFOTEXT */
851+
CANVAS, /* MENU */
852+
CANVASTEXT, /* MENUTEXT */
853+
CANVAS, /* SCROLLBAR */
854+
BUTTONBORDER, /* THREEDDARKSHADOW */
855+
BUTTONFACE, /* THREEDFACE */
856+
BUTTONBORDER, /* THREEDHIGHLIGHT */
857+
BUTTONBORDER, /* THREEDLIGHTSHADOW */
858+
BUTTONBORDER, /* THREEDSHADOW */
859+
CANVAS, /* WINDOW */
860+
BUTTONBORDER, /* WINDOWFRAME */
861+
CANVASTEXT, /* WINDOWTEXT */
862+
};
837863
int i;
838864
bool match;
839865

866+
/* try to match a named colour */
840867
for (i = FIRST_COLOUR; i <= LAST_COLOUR; i++) {
841-
if (lwc_string_caseless_isequal(data, c->strings[i],
842-
&match) == lwc_error_ok && match)
843-
break;
868+
if (lwc_string_caseless_isequal(data, c->strings[i], &match) ==
869+
lwc_error_ok &&
870+
match) {
871+
/* Known named colour */
872+
*result = colourmap[i - FIRST_COLOUR];
873+
return CSS_OK;
874+
}
844875
}
845876

846-
if (i <= LAST_COLOUR) {
847-
/* Known named colour */
848-
*result = colourmap[i - FIRST_COLOUR];
849-
return CSS_OK;
877+
/* map deprecated system colours to current system colours */
878+
for (i = FIRST_DEPRECATEDCOLOUR; i <= LAST_DEPRECATEDCOLOUR; i++) {
879+
if (lwc_string_caseless_isequal(data, c->strings[i], &match) ==
880+
lwc_error_ok &&
881+
match) {
882+
/* Known legacy system named colour */
883+
data = c->strings[deprecatedmap[i - FIRST_DEPRECATEDCOLOUR]];
884+
break;
885+
}
850886
}
851887

852-
/* We don't know this colour name; ask the client */
888+
/* attempt to get client to map colour */
853889
if (c->sheet->color != NULL)
854890
return c->sheet->color(c->sheet->color_pw, data, result);
855891

src/parse/propstrings.c

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ const stringmap_entry stringmap[LAST_KNOWN] = {
493493
SMAP("sticky"),
494494
SMAP("calc"),
495495

496+
/* Named colours */
496497
SMAP("aliceblue"),
497498
SMAP("antiquewhite"),
498499
SMAP("aqua"),
@@ -642,7 +643,53 @@ const stringmap_entry stringmap[LAST_KNOWN] = {
642643
SMAP("white"),
643644
SMAP("whitesmoke"),
644645
SMAP("yellow"),
645-
SMAP("yellowgreen")
646+
SMAP("yellowgreen"),
647+
648+
/* CSS Color Module Level 4 system colors */
649+
SMAP("accentcolor"),
650+
SMAP("accentcolortext"),
651+
SMAP("activetext"),
652+
SMAP("buttonborder"),
653+
SMAP("buttonface"),
654+
SMAP("buttontext"),
655+
SMAP("canvas"),
656+
SMAP("canvastext"),
657+
SMAP("field"),
658+
SMAP("fieldtext"),
659+
SMAP("graytext"),
660+
SMAP("highlight"),
661+
SMAP("highlighttext"),
662+
SMAP("linktext"),
663+
SMAP("mark"),
664+
SMAP("marktext"),
665+
SMAP("selecteditem"),
666+
SMAP("selecteditemtext"),
667+
SMAP("visitedtext"),
668+
669+
/* CSS Color Module Level 4 deprecated system colors */
670+
SMAP("activeborder"),
671+
SMAP("activecaption"),
672+
SMAP("appworkspace"),
673+
SMAP("background"),
674+
SMAP("buttonhighlight"),
675+
SMAP("buttonshadow"),
676+
SMAP("captiontext"),
677+
SMAP("inactiveborder"),
678+
SMAP("inactivecaption"),
679+
SMAP("inactivecaptiontext"),
680+
SMAP("infobackground"),
681+
SMAP("infotext"),
682+
SMAP("menu"),
683+
SMAP("menutext"),
684+
SMAP("scrollbar"),
685+
SMAP("threeddarkshadow"),
686+
SMAP("threedface"),
687+
SMAP("threedhighlight"),
688+
SMAP("threedlightshadow"),
689+
SMAP("threedshadow"),
690+
SMAP("window"),
691+
SMAP("windowframe"),
692+
SMAP("windowtext")
646693
};
647694

648695

src/parse/propstrings.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,28 @@ enum {
143143

144144
LAST_COLOUR = YELLOWGREEN,
145145

146+
/* CSS Color Module Level 4 system colors */
147+
FIRST_SYSTEMCOLOUR,
148+
149+
ACCENTCOLOR = FIRST_SYSTEMCOLOUR, ACCENTCOLORTEXT, ACTIVETEXT,
150+
BUTTONBORDER, BUTTONFACE, BUTTONTEXT, CANVAS, CANVASTEXT, FIELD,
151+
FIELDTEXT, GRAYTEXT, HIGHLIGHT, HIGHLIGHTTEXT, LINKTEXT, MARK,
152+
MARKTEXT, SELECTEDITEM, SELECTEDITEMTEXT, VISITEDTEXT,
153+
154+
LAST_SYSTEMCOLOUR = VISITEDTEXT,
155+
156+
/* CSS Color Module Level 4 deprecated system colors */
157+
FIRST_DEPRECATEDCOLOUR,
158+
159+
ACTIVEBORDER = FIRST_DEPRECATEDCOLOUR, ACTIVECAPTION, APPWORKSPACE,
160+
DCBACKGROUND, BUTTONHIGHLIGHT, BUTTONSHADOW, CAPTIONTEXT, INACTIVEBORDER,
161+
INACTIVECAPTION, INACTIVECAPTIONTEXT, INFOBACKGROUND, INFOTEXT,
162+
MENU, MENUTEXT, SCROLLBAR, THREEDDARKSHADOW, THREEDFACE,
163+
THREEDHIGHLIGHT, THREEDLIGHTSHADOW, THREEDSHADOW, WINDOW, WINDOWFRAME,
164+
WINDOWTEXT,
165+
166+
LAST_DEPRECATEDCOLOUR = WINDOWTEXT,
167+
146168
LAST_KNOWN
147169
};
148170

0 commit comments

Comments
 (0)