diff --git a/src/vs/languages/css/common/buildscripts/css-schema.xml b/src/vs/languages/css/common/buildscripts/css-schema.xml index be668f47976..ed821a23f9d 100644 --- a/src/vs/languages/css/common/buildscripts/css-schema.xml +++ b/src/vs/languages/css/common/buildscripts/css-schema.xml @@ -1561,14 +1561,14 @@ - + Indicates the algorithm which is to be used to determine what parts of the canvas are included inside the shape. - Determines the 'insideness' of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses. + Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses. - Determines the 'insideness' of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray. + Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray. @@ -1586,12 +1586,18 @@ - + Specifies the color space for gradient interpolations, color animations and alpha compositing. - - - + + Color operations are not required to occur in a particular color space. + + + Color operations should occur in the linearized RGB color space. + + + Color operations should occur in the sRGB color space. + @@ -1608,19 +1614,16 @@ - - Specifies the color profile to be used. + + Provides a hint to the SVG user agent about how to optimize its color interpolation and compositing operations. - - - - - The creator of SVG content might want to provide a hint to the implementation about how to make speed vs. quality tradeoffs as it performs color interpolation and compositing. The ‘color-rendering’ property provides a hint to the SVG user agent about how to optimize its color interpolation and compositing operations. - - - - + + Indicates that the user agent shall emphasize quality over rendering speed. + + + Indicates that the user agent shall emphasize rendering speed over quality. + @@ -2011,10 +2014,10 @@ - + Describes the horizontal center coordinate of the position of the element. - + Describes the vertical center coordinate of the position of the element. @@ -2179,8 +2182,8 @@ - - Allocate a shared background image all graphic elements within a container. + + Deprecated. Use 'isolation' property instead when support allows. Specifies how the accumulation of the background image is managed. If the ancestor container element has a property of new, then all graphics elements within the current container are rendered both on the parent's background image and onto the target. @@ -2193,21 +2196,41 @@ Specifies a fallback counter style to be used when the current counter style can’t create a representation for a given counter value. - + Paints the interior of the given graphical element. - - + + A reference to the last child paint server element of the element being painted. + + + A reference to the nth child paint server element of the element being painted. + + + The computed value of the ‘fill’ property of the context element of the element being painted. + + + The computed value of the ‘stroke’ property of the context element of the element being painted. + + + A URL reference to a paint server element, which is an element that defines a paint server: ‘hatch’, ‘linearGradient’, ‘mesh’, ‘pattern’, ‘radialGradient’ and ‘solidcolor’. + + + No paint is applied in this layer. + - - 'fill-opacity' specifies the opacity of the painting operation used to paint the interior the current object. + + Specifies the opacity of the painting operation used to paint the interior the current object. - - The 'fill-rule' property indicates the algorithm which is to be used to determine what parts of the canvas are included inside the shape. + + Indicates the algorithm (or winding rule) which is to be used to determine what parts of the canvas are included inside the shape. - - + + Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses. + + + Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray. + @@ -2826,11 +2849,11 @@ - - Sets or retrieves a value that alters the orientation of a sequence of characters relative to an inline-progression-direction of horizontal. + + Controls glyph orientation when the inline-progression-direction is horizontal. - - Sets or retrieves a value that alters the orientation of a sequence of characters relative to an inline-progression-direction of vertical. + + Controls glyph orientation when the inline-progression-direction is vertical. Sets the orientation based on the fullwidth or non-fullwidth characters and the most common orientation. @@ -3520,25 +3543,46 @@ - + Specifies the marker symbol that shall be used for all points on the sets the value for all vertices on the given ‘path’ element or basic shape. - - + + Indicates that no marker symbol will be drawn at the given vertex or vertices. + + + Indicates that the last child <marker> element of the element where the property is specified will be used. + + + Indicates that the <marker> element referenced will be used. + - - Defines the arrowhead or polymarker that shall be drawn at the final vertex. + + Specifies the marker that will be drawn at the last vertices of the given markable element. - - + + Indicates that no marker symbol will be drawn at the given vertex or vertices. + + + Indicates that the last child <marker> element of the element where the property is specified will be used. + + + Indicates that the <marker> element referenced will be used. + - - Defines the arrowhead or polymarker that shall be drawn at every other vertex. + + Specifies the marker that will be drawn at all vertices except the first and last. - - + + Indicates that no marker symbol will be drawn at the given vertex or vertices. + + + Indicates that the last child <marker> element of the element where the property is specified will be used. + + + Indicates that the <marker> element referenced will be used. + @@ -3548,11 +3592,18 @@ - - Defines the arrowhead or polymarker that shall be drawn at the first vertex of the given ‘path’ element or basic shape. + + Specifies the marker that will be drawn at the first vertices of the given markable element. - - + + Indicates that no marker symbol will be drawn at the given vertex or vertices. + + + Indicates that the last child <marker> element of the element where the property is specified will be used. + + + Indicates that the <marker> element referenced will be used. + @@ -6376,13 +6427,15 @@ - + Controls the order that the three paint operations that shapes and text are rendered with: their fill, their stroke and any markers they might have. - - - - + + + + The element is painted with the standard order of painting operations: the 'fill' is painted first, then its 'stroke' and finally its markers. + + @@ -6465,18 +6518,36 @@ Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element. - - Allows authors to control under what circumstances (if any) a particular graphic element can become the target of mouse events. + + Specifies under what circumstances a given element can be the target element for a pointer event. - - - - - - - - - + + The given element can be the target element for pointer events whenever the pointer is over either the interior or the perimeter of the element. + + + The given element can be the target element for pointer events whenever the pointer is over the interior of the element. + + + The given element does not receive pointer events. + + + The given element can be the target element for pointer events when the pointer is over a "painted" area. + + + The given element can be the target element for pointer events whenever the pointer is over the perimeter of the element. + + + The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and the pointer is over either the interior or the perimete of the element. + + + The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over the interior of the element. + + + The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over a ‘painted’ area. + + + The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over the perimeter of the element. + @@ -6521,7 +6592,7 @@ - + Describes the radius of the ‘circle’ element. @@ -6730,10 +6801,10 @@ - + Describes the horizontal radius of the ‘ellipse’ element, and the curve radius of the 'rect' element. - + Describes the vertical radius of the ‘ellipse’ element, and the curve radius of the 'rect' element. @@ -6856,14 +6927,21 @@ Adds padding to a 'shape-inside'. - - The creator of SVG content might want to provide a hint to the implementation about what tradeoffs to make as it renders vector graphics elements such as ‘path’ elements and basic shapes such as circles and rectangles. + + Provides hints about what tradeoffs to make as it renders vector graphics elements such as <path> elements and basic shapes such as circles and rectangles. - - - - - + + Suppresses aural rendering. + + + Emphasize the contrast between clean edges of artwork over rendering speed and geometric precision. + + + Emphasize geometric precision over speed and crisp edges. + + + Emphasize rendering speed over geometric precision and crisp edges. + @@ -6915,52 +6993,88 @@ - + Indicates what color to use at that gradient stop. - - The 'stop-opacity' property defines the opacity of a given gradient stop. + + Defines the opacity of a given gradient stop. - - The 'stroke' property paints along the outline of the given graphical element. + + Paints along the outline of the given graphical element. - - + + A reference to the last child paint server element of the element being painted. + + + A reference to the nth child paint server element of the element being painted. + + + The computed value of the ‘fill’ property of the context element of the element being painted. + + + The computed value of the ‘stroke’ property of the context element of the element being painted. + + + A URL reference to a paint server element, which is an element that defines a paint server: ‘hatch’, ‘linearGradient’, ‘mesh’, ‘pattern’, ‘radialGradient’ and ‘solidcolor’. + + + No paint is applied in this layer. + - + Controls the pattern of dashes and gaps used to stroke paths. - + + Indicates that no dashing is used. + - + Specifies the distance into the dash pattern to start the dash. - + Specifies the shape to be used at the end of open subpaths when they are stroked. - - - + + Indicates that the stroke for each subpath does not extend beyond its two endpoints. + + + Indicates that at each end of each subpath, the shape representing the stroke will be extended by a half circle with a radius equal to the stroke width. + + + Indicates that at the end of each subpath, the shape representing the stroke will be extended by a rectangle with the same width as the stroke width and whose length is half of the stroke width. + - - specifies the shape to be used at the corners of paths or basic shapes when they are stroked. + + Specifies the shape to be used at the corners of paths or basic shapes when they are stroked. - - - + + Indicates that an arcs corner is to be used to join path segments. + + + Indicates that a bevelled corner is to be used to join path segments. + + + Indicates that a sharp corner is to be used to join path segments. + + + Same as miter but if the ‘stroke-miterlimit’ is exceeded, the miter is clipped at a miter length equal to the ‘stroke-miterlimit’ value multiplied by the stroke width. + + + Indicates that a round corner is to be used to join path segments. + - + When two line segments meet at a sharp angle and miter joins have been specified for 'stroke-linejoin', it is possible for the miter to extend far beyond the thickness of the line stroking the path. - + Specifies the opacity of the painting operation used to stroke the current object. - - This property specifies the width of the stroke on the current object. + + Specifies the width of the stroke on the current object. Specifies a <symbol> that is appended to the marker representation. @@ -7060,12 +7174,18 @@ - + Used to align (start-, middle- or end-alignment) a string of text relative to a given point. - - - + + The rendered characters are aligned such that the end of the resulting rendered text is at the initial current text position. + + + The rendered characters are aligned such that the geometric middle of the resulting rendered text is at the initial current text position. + + + The rendered characters are aligned such that the start of the resulting rendered text is at the initial current text position. + @@ -7331,13 +7451,19 @@ - + The creator of SVG content might want to provide a hint to the implementation about what tradeoffs to make as it renders text. The ‘text-rendering’ property provides these hints. - - - + + Indicates that the user agent shall emphasize geometric precision over legibility and rendering speed. + + + Indicates that the user agent shall emphasize legibility over rendering speed and geometric precision. + + + Indicates that the user agent shall emphasize rendering speed over legibility and geometric precision. + @@ -7742,6 +7868,32 @@ + + + Affects the vertical positioning of the inline boxes generated by an inline-level element inside a line box. + + + The placement of local coordinate system is fixed in spite of change of CTMs from a host coordinate space. + + + Specifies that no vector effect shall be applied. + + + The rotation and skew of the local coordinate system is suppressd in spite of change of CTMs from a host coordinate space. + + + The scale of the local coordinate system do not change in spite of change of CTMs from a host coordinate space. + + + Modifies the way an object is stroked. Stroke outline shall be calculated in the “host” coordinate space instead of local coordinate system. + + + Specifies the coordinate system of content which is under the immediate control of the user agent. + + + Specifies immediate viewport coordinate system as the host coordinate space. + + Affects the vertical positioning of the inline boxes generated by an inline-level element inside a line box. @@ -9207,10 +9359,10 @@ - + Describes the horizontal coordinate of the position of the element. - + Describes the vertical coordinate of the position of the element. diff --git a/src/vs/languages/css/common/services/browsers.js b/src/vs/languages/css/common/services/browsers.js index fbc64f2b3f8..30365ce61e0 100644 --- a/src/vs/languages/css/common/services/browsers.js +++ b/src/vs/languages/css/common/services/browsers.js @@ -1869,15 +1869,14 @@ exports.data ={ { "name": "clip-rule", "desc": "Indicates the algorithm which is to be used to determine what parts of the canvas are included inside the shape.", + "browsers": "E,C5,FF3,IE10,O9,S6", "restriction": "enum", "values": [ { - "name": "evenodd", - "desc": "Determines the 'insideness' of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses." + "name": "evenodd" }, { - "name": "nonzero", - "desc": "Determines the 'insideness' of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray." + "name": "nonzero" } ] }, @@ -2393,7 +2392,7 @@ exports.data ={ }, { "name": "enable-background", - "desc": "Allocate a shared background image all graphic elements within a container.", + "desc": "Deprecated. Use 'isolation' property instead when support allows. Specifies how the accumulation of the background image is managed.", "restriction": "integer, length, percentage, enum", "values": [ { @@ -2416,18 +2415,19 @@ exports.data ={ "restriction": "color, enum, url", "values": [ { - "name": "url()" + "name": "url()", + "desc": "A URL reference to a paint server element, which is an element that defines a paint server: ‘hatch’, ‘linearGradient’, ‘mesh’, ‘pattern’, ‘radialGradient’ and ‘solidcolor’." } ] }, { "name": "fill-opacity", - "desc": "'fill-opacity' specifies the opacity of the painting operation used to paint the interior the current object.", + "desc": "Specifies the opacity of the painting operation used to paint the interior the current object.", "restriction": "number(0-1)" }, { "name": "fill-rule", - "desc": "The 'fill-rule' property indicates the algorithm which is to be used to determine what parts of the canvas are included inside the shape.", + "desc": "Indicates the algorithm (or winding rule) which is to be used to determine what parts of the canvas are included inside the shape.", "restriction": "enum", "values": [ { @@ -3265,13 +3265,13 @@ exports.data ={ }, { "name": "glyph-orientation-horizontal", - "desc": "Sets or retrieves a value that alters the orientation of a sequence of characters relative to an inline-progression-direction of horizontal.", - "restriction": "angle" + "desc": "Controls glyph orientation when the inline-progression-direction is horizontal.", + "restriction": "angle, number" }, { "name": "glyph-orientation-vertical", - "desc": "Sets or retrieves a value that alters the orientation of a sequence of characters relative to an inline-progression-direction of vertical.", - "restriction": "angle, enum", + "desc": "Controls glyph orientation when the inline-progression-direction is vertical.", + "restriction": "angle, number, enum", "values": [] }, { @@ -3654,49 +3654,57 @@ exports.data ={ "restriction": "url", "values": [ { - "name": "none" + "name": "none", + "desc": "Indicates that no marker symbol will be drawn at the given vertex or vertices." }, { - "name": "url()" + "name": "url()", + "desc": "Indicates that the element referenced will be used." } ] }, { "name": "marker-end", - "desc": "Defines the arrowhead or polymarker that shall be drawn at the final vertex.", + "desc": "Specifies the marker that will be drawn at the last vertices of the given markable element.", "restriction": "url", "values": [ { - "name": "none" + "name": "none", + "desc": "Indicates that no marker symbol will be drawn at the given vertex or vertices." }, { - "name": "url()" + "name": "url()", + "desc": "Indicates that the element referenced will be used." } ] }, { "name": "marker-mid", - "desc": "Defines the arrowhead or polymarker that shall be drawn at every other vertex.", + "desc": "Specifies the marker that will be drawn at all vertices except the first and last.", "restriction": "url", "values": [ { - "name": "none" + "name": "none", + "desc": "Indicates that no marker symbol will be drawn at the given vertex or vertices." }, { - "name": "url()" + "name": "url()", + "desc": "Indicates that the element referenced will be used." } ] }, { "name": "marker-start", - "desc": "Defines the arrowhead or polymarker that shall be drawn at the first vertex of the given ‘path’ element or basic shape.", + "desc": "Specifies the marker that will be drawn at the first vertices of the given markable element.", "restriction": "url", "values": [ { - "name": "none" + "name": "none", + "desc": "Indicates that no marker symbol will be drawn at the given vertex or vertices." }, { - "name": "url()" + "name": "url()", + "desc": "Indicates that the element referenced will be used." } ] }, @@ -7350,6 +7358,7 @@ exports.data ={ { "name": "paint-order", "desc": "Controls the order that the three paint operations that shapes and text are rendered with: their fill, their stroke and any markers they might have.", + "browsers": "C35,FF31,O22,S7.1", "restriction": "enum", "values": [ { @@ -7359,7 +7368,8 @@ exports.data ={ "name": "markers" }, { - "name": "normal" + "name": "normal", + "desc": "The element is painted with the standard order of painting operations: the 'fill' is painted first, then its 'stroke' and finally its markers." }, { "name": "stroke" @@ -7381,26 +7391,31 @@ exports.data ={ }, { "name": "pointer-events", - "desc": "Allows authors to control under what circumstances (if any) a particular graphic element can become the target of mouse events.", + "desc": "Specifies under what circumstances a given element can be the target element for a pointer event.", "restriction": "enum", "values": [ { - "name": "all" + "name": "all", + "desc": "The given element can be the target element for pointer events whenever the pointer is over either the interior or the perimeter of the element." }, { - "name": "fill" + "name": "fill", + "desc": "The given element can be the target element for pointer events whenever the pointer is over the interior of the element." }, { - "name": "none" + "name": "none", + "desc": "The given element does not receive pointer events." }, { "name": "painted" }, { - "name": "stroke" + "name": "stroke", + "desc": "The given element can be the target element for pointer events whenever the pointer is over the perimeter of the element." }, { - "name": "visible" + "name": "visible", + "desc": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and the pointer is over either the interior or the perimete of the element." }, { "name": "visibleFill" @@ -7801,29 +7816,30 @@ exports.data ={ }, { "name": "stop-opacity", - "desc": "The 'stop-opacity' property defines the opacity of a given gradient stop.", + "desc": "Defines the opacity of a given gradient stop.", "restriction": "number(0-1)" }, { "name": "stroke", - "desc": "The 'stroke' property paints along the outline of the given graphical element.", + "desc": "Paints along the outline of the given graphical element.", "restriction": "color, enum, url", "values": [ { - "name": "url()" + "name": "url()", + "desc": "A URL reference to a paint server element, which is an element that defines a paint server: ‘hatch’, ‘linearGradient’, ‘mesh’, ‘pattern’, ‘radialGradient’ and ‘solidcolor’." } ] }, { "name": "stroke-dasharray", "desc": "Controls the pattern of dashes and gaps used to stroke paths.", - "restriction": "length, percentage, enum", + "restriction": "length, percentage, number, enum", "values": [] }, { "name": "stroke-dashoffset", "desc": "Specifies the distance into the dash pattern to start the dash.", - "restriction": "percentage, length, integer" + "restriction": "percentage, length" }, { "name": "stroke-linecap", @@ -7834,16 +7850,18 @@ exports.data ={ "name": "butt" }, { - "name": "round" + "name": "round", + "desc": "Indicates that at each end of each subpath, the shape representing the stroke will be extended by a half circle with a radius equal to the stroke width." }, { - "name": "square" + "name": "square", + "desc": "Indicates that at the end of each subpath, the shape representing the stroke will be extended by a rectangle with the same width as the stroke width and whose length is half of the stroke width." } ] }, { "name": "stroke-linejoin", - "desc": "specifies the shape to be used at the corners of paths or basic shapes when they are stroked.", + "desc": "Specifies the shape to be used at the corners of paths or basic shapes when they are stroked.", "restriction": "enum", "values": [ { @@ -7853,7 +7871,8 @@ exports.data ={ "name": "miter" }, { - "name": "round" + "name": "round", + "desc": "Indicates that a round corner is to be used to join path segments." } ] }, @@ -7869,8 +7888,8 @@ exports.data ={ }, { "name": "stroke-width", - "desc": "This property specifies the width of the stroke on the current object.", - "restriction": "percentage, length, integer" + "desc": "Specifies the width of the stroke on the current object.", + "restriction": "percentage, length" }, { "name": "suffix", @@ -8003,13 +8022,16 @@ exports.data ={ "restriction": "enum", "values": [ { - "name": "end" + "name": "end", + "desc": "The rendered characters are aligned such that the end of the resulting rendered text is at the initial current text position." }, { - "name": "middle" + "name": "middle", + "desc": "The rendered characters are aligned such that the geometric middle of the resulting rendered text is at the initial current text position." }, { - "name": "start" + "name": "start", + "desc": "The rendered characters are aligned such that the start of the resulting rendered text is at the initial current text position." } ] }, @@ -8181,7 +8203,8 @@ exports.data ={ "name": "optimizeLegibility" }, { - "name": "optimizeSpeed" + "name": "optimizeSpeed", + "desc": "Indicates that the user agent shall emphasize rendering speed over legibility and geometric precision." } ] }, @@ -10307,6 +10330,8 @@ exports.descriptions = { "border-box": "The specified width and height (and respective min/max properties) on this element determine the border box of the element.", "content-box": "Behavior of width and height as specified by CSS2.1. The specified width and height (and respective min/max properties) apply to the width and height respectively of the content box of the element.", "rect()": "Specifies offsets from the edges of the border box.", + "evenodd": "Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses.", + "nonzero": "Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray.", "linearRGB": "Color operations should occur in the linearized RGB color space.", "sRGB": "Color operations should occur in the sRGB color space.", "balance": "Balance content equally between columns, if possible.", @@ -10526,6 +10551,10 @@ exports.descriptions = { "root": "Indicates that the user agent should target the full window.", "invert": "Performs a color inversion on the pixels on the screen.", "-moz-hidden-unscrollable": "Same as the standardized 'clip', except doesn’t establish a block formatting context.", + "painted": "The given element can be the target element for pointer events when the pointer is over a \"painted\" area. ", + "visibleFill": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over the interior of the element.", + "visiblePainted": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over a ‘painted’ area.", + "visibleStroke": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over the perimeter of the element.", "absolute": "The box's position (and possibly size) is specified with the 'top', 'right', 'bottom', and 'left' properties. These properties specify offsets with respect to the box's 'containing block'.", "-ms-page": "The box's position is calculated according to the 'absolute' model.", "relative": "The box's position is calculated according to the normal flow (this is called the position in normal flow). Then the box is offset relative to its normal position.", @@ -10542,6 +10571,9 @@ exports.descriptions = { "margin-box": "The background is painted within (clipped to) the margin box.", "format()": "Optional hint describing the format of the font resource.", "local()": "Format-specific string that identifies a locally available copy of a given font.", + "butt": "Indicates that the stroke for each subpath does not extend beyond its two endpoints.", + "bevel": "Indicates that a bevelled corner is to be used to join path segments.", + "miter": "Indicates that a sharp corner is to be used to join path segments.", "additive": "Represents “sign-value” numbering systems, which, rather than using reusing digits in different positions to change their value, define additional digits with much larger values, so that the value of the number can be obtained by adding all the digits together.", "cyclic": "Cycles repeatedly through its provided symbols, looping back to the beginning when it reaches the end of the list.", "extends": "Use the algorithm of another counter style, but alter other aspects.", @@ -10550,6 +10582,8 @@ exports.descriptions = { "sideways": "This value is equivalent to 'sideways-right' in 'vertical-rl' writing mode and equivalent to 'sideways-left' in 'vertical-lr' writing mode.", "sideways-right": "In vertical writing modes, this causes text to be set as if in a horizontal layout, but rotated 90° clockwise.", "upright": "In vertical writing modes, characters from horizontal-only scripts are rendered upright, i.e. in their standard horizontal orientation.", + "geometricPrecision": "Indicates that the user agent shall emphasize geometric precision over legibility and rendering speed.", + "optimizeLegibility": "Indicates that the user agent shall emphasize legibility over rendering speed and geometric precision.", "capitalize": "Puts the first typographic letter unit of each word in titlecase.", "lowercase": "Puts all letters in lowercase.", "uppercase": "Puts all letters in uppercase.",