import { Debug } from '@awayjs/core';
import { EventDispatcher } from '../events/EventDispatcher';
import { TextFormat } from './TextFormat';
/**
* The StyleSheet class lets you create a StyleSheet object that contains text
* formatting rules for font size, color, and other styles. You can then apply
* styles defined by a style sheet to a TextField object that contains HTML- or
* XML-formatted text. The text in the TextField object is automatically
* formatted according to the tag styles defined by the StyleSheet object.
* You can use text styles to define new formatting tags, redefine built-in HTML
* tags, or create style classes that you can apply to certain HTML tags.
*
*
To apply styles to a TextField object, assign the StyleSheet
* object to a TextField object's styleSheet property.
*
Note:
* A text field with a style sheet is not editable. In other words, a text field with the
* type property set to
* TextFieldType.INPUT
* applies the StyleSheet to the default text for the text field, but the content will no longer be editable
* by the user. Consider using the TextFormat class to assign styles to input text fields.
*
Flash Player supports a subset of properties in the original CSS1 specification
* (www.w3.org/TR/REC-CSS1).
* The following table shows the supported Cascading Style Sheet (CSS) properties and values,
* as well as their corresponding
* ActionScript property names. (Each ActionScript property name is derived from the corresponding
* CSS property name; if the name contains a hyphen, the hyphen is omitted and the subsequent character is capitalized.)
*
* CSS property
* ActionScript property
* Usage and supported values
*
* color
* color
* Only hexadecimal color values are supported. Named colors (such as blue
* )
* are not supported. Colors are written in the following format:
* #FF0000.
* display
* display
* Supported values are inline,
* block, and none.
*
* font-family
* fontFamily
* A comma-separated list of fonts to use, in descending order of desirability. Any font
* family name can be used. If you specify a generic font name, it is converted to an
* appropriate device font. The following font conversions are available:
* mono is
* converted to _typewriter,
* sans-serif is converted to
* _sans, and
* serif is converted to _serif.
*
* font-size
* fontSizeOnly the numeric part of the value is used.
* Units (px, pt) are not parsed; pixels and points
* are equivalent.
* font-style
* fontStyle
* Recognized values are
* normal and
* italic.
* font-weight
* fontWeight
* Recognized values are normal
* and bold.
* kerning
* kerning
* Recognized values are true
* and false.
* Kerning is supported for embedded fonts only. Certain fonts, such as Courier New, do not support kerning.
* The kerning property is only supported in SWF files created in Windows, not in SWF files created on the
* Macintosh. However, these SWF files can be played in non-Windows versions of Flash Player and the kerning
* still applies.
* leading
* leading
* The amount of space that is uniformly distributed between lines. The value specifies the
* number of pixels that are added after each line. A negative value condenses the space
* between lines. Only the numeric part of the value is used. Units (px, pt) are not parsed;
* pixels and points are equivalent.
* letter-spacing
* letterSpacing
* The amount of space that is uniformly distributed between characters.
* The value specifies the number of pixels that are added after each
* character. A negative value condenses the space between characters. Only the numeric part of the
* value is used. Units (px, pt) are not parsed; pixels and points are equivalent.
* margin-left
* marginLeft
* Only the numeric part of the value is used. Units (px, pt) are not parsed;
* pixels and points
* are equivalent.
* margin-right
* marginRight
* Only the numeric part of the value is used. Units (px, pt) are not parsed; pixels and
* points are equivalent.
* text-align
* textAlign
* Recognized values are left,
* center, right, and
* justify.
*
* text-decoration
* textDecoration
* Recognized values are none
* and underline.
* text-indent
* textIndent
* Only the numeric part of the value is used. Units (px, pt) are not parsed; pixels and
* points are equivalent.
* You can use the StyleSheet class to perform low-level text rendering.
* However, in Flex, you typically use the Label, Text, TextArea, and TextInput controls to process text.
*
*/
export class StyleSheet extends EventDispatcher {
/**
* Creates a new StyleSheet object.
*/
constructor () {
super();
}
/**
* An array that contains the names (as strings) of all of the styles registered
* in this style sheet.
*/
public get styleNames (): any[] {
// @todo
Debug.throwPIR('playerglobals/text/StyleSheet', 'get styleNames', '');
return [];
}
/**
* Removes all styles from the style sheet object.
*/
public clear () {
// @todo
Debug.throwPIR('playerglobals/text/StyleSheet', 'clear', '');
}
/**
* Returns a copy of the style object associated with the style named styleName.
* If there is no style object associated with styleName,
* null is returned.
* @param styleName A string that specifies the name of the style to retrieve.
* @return An object.
*/
public getStyle (styleName: string): any {
// @todo
Debug.throwPIR('playerglobals/text/StyleSheet', 'getStyle', '');
return null;
}
/**
* Parses the CSS in CSSText and loads the style sheet with it. If a style in
* CSSText is already in styleSheet, the properties in
* styleSheet are retained, and only the ones in CSSText
* are added or changed in styleSheet.
*
* To extend the native CSS parsing capability, you can override this method by creating a subclass
* of the StyleSheet class.
* @param CSSText The CSS text to parse (a string).
*/
public parseCSS (CSSText: string) {
// @todo
Debug.throwPIR('playerglobals/text/StyleSheet', 'parseCSS', '');
}
/**
* Adds a new style with the specified name to the style sheet object.
* If the named style does not already exist in the style sheet, it is added.
* If the named style already exists in the style sheet, it is replaced.
* If the styleObject parameter is null, the named style is removed.
*
* Flash Player creates a copy of the style object that you pass to this method.
* For a list of supported styles, see the table in the description for the StyleSheet class.
* @param styleName A string that specifies the name of the style to add to the style sheet.
* @param styleObject An object that describes the style, or null.
*/
public setStyle (styleName: string, styleObject: any) {
// @todo
Debug.throwPIR('playerglobals/text/StyleSheet', 'setStyle', '');
}
/**
* Extends the CSS parsing capability. Advanced developers can override this method by extending the
* StyleSheet class.
* @param formatObject An object that describes the style, containing style rules as properties of the object,
* or null.
* @return A TextFormat object containing the result of the mapping of CSS rules
* to text format properties.
*/
public transform (formatObject: any): TextFormat {
// @todo
Debug.throwPIR('playerglobals/text/StyleSheet', 'transform', '');
return null;
}
}