################################################################################
##
##  Licensed to the Apache Software Foundation (ASF) under one or more
##  contributor license agreements.  See the NOTICE file distributed with
##  this work for additional information regarding copyright ownership.
##  The ASF licenses this file to You under the Apache License, Version 2.0
##  (the "License"); you may not use this file except in compliance with
##  the License.  You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
##  Unless required by applicable law or agreed to in writing, software
##  distributed under the License is distributed on an "AS IS" BASIS,
##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
##  See the License for the specific language governing permissions and
##  limitations under the License.
##
################################################################################

Descriptor.ColorNotSupported= the color '${color}' is not supported.
Descriptor.FunctionNotSupported= the function '${function}' is not supported.
Descriptor.InvalidFormat= invalid format.
Descriptor.ValueNotSupported= CSS Value for '${value}' not supported.
Descriptor.UnparsableCSS= characters within CSS could not be parsed.
FontFaceRule.IgnoredDescriptor= '${descriptor}' is ignored inside @font-face.
FontFaceRule.UnicodeRangeNotSupported = unicode range cannot be specified for prebuilt SWF fonts.
StyleParser.DeprecatedWarning='${var}' has been deprecated since ${since}. Please use '${replacement}'.
StyleParser.StyleSheetInvalidCharset=@charset rule contains an invalid or unsupported charset encoding, ${charsetName}. Problem found in stylesheet ${stylePath}
StyleParserErrorTranslator.UnableToParse=Unable to parse CSS file.
StyleParserErrorTranslator.InvalidIdentifierStartChar=Invalid character found in CSS. Use quotes to surround font family names such as '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Invalid CSS syntax(Unexpected ${token}).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Invalid CSS syntax(Unexpected token: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Invalid CSS syntax(Unexpected ${token} units).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Invalid CSS syntax(Unexpected token: '${token}'). To set styles of type Array, use a comma delimited list.  For example, { foo: red, blue, green }.



