@@ -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
0 commit comments