SixLabors.Fonts A helper type for avoiding allocations while building arrays. The type of item contained in the array. Initializes a new instance of the struct. The intitial capacity of the array. Gets or sets the number of items in the array. Returns a reference to specified element of the array. The index of the element to return. The . Thrown when index less than 0 or index greater than or equal to . Adds the given item to the array. The item to add. Appends a given number of empty items to the array returning the items as a slice. The number of items in the slice. Whether to clear the new slice, Defaults to . The . Appends the slice to the array copying the data across. The array slice. The . Clears the array. Allocated memory is left intact for future usage. Returns the current state of the array as a slice. The . Returns the current state of the array as a slice. The number of items in the slice. The . Returns the current state of the array as a slice. The index at which to begin the slice. The number of items in the slice. The . ArraySlice represents a contiguous region of arbitrary memory similar to and though constrained to arrays. Unlike , it is not a byref-like type. The type of item contained in the slice. Initializes a new instance of the struct. The underlying data buffer. Initializes a new instance of the struct. The underlying data buffer. The offset position in the underlying buffer this slice was created from. The number of items in the slice. Gets an empty Gets the offset position in the underlying buffer this slice was created from. Gets the number of items in the slice. Gets a representing this slice. Returns a reference to specified element of the slice. The index of the element to return. The . Thrown when index less than 0 or index greater than or equal to . Defines an implicit conversion of a to a Defines an implicit conversion of an array to a Copies the contents of this slice into destination span. If the source and destinations overlap, this method behaves as if the original values in a temporary location before the destination is overwritten. The slice to copy items into. Thrown when the destination slice is shorter than the source Span. Fills the contents of this slice with the given value. Forms a slice out of the given slice, beginning at 'start', of given length The index at which to begin this slice. The desired length for the slice (exclusive). Thrown when the specified or end index is not in range (<0 or >Length). BinaryReader using big-endian encoding. Buffer used for temporary storage before conversion into primitives Initializes a new instance of the class. Constructs a new binary reader with the given bit converter, reading to the given stream, using the given encoding. Stream to read data from if set to true [leave open]. Gets the underlying stream of the EndianBinaryReader. Seeks within the stream. Offset to seek to. Origin of seek operation. If SeekOrigin.Begin, the offset will be set to the start of stream position. Reads a single byte from the stream. The byte read Reads a single signed byte from the stream. The byte read Reads a 16-bit signed integer from the stream, using the bit converter for this reader. 2 bytes are read. The 16-bit integer read Reads a fixed 32-bit value from the stream. 4 bytes are read. The 32-bit value read. Reads a 32-bit signed integer from the stream, using the bit converter for this reader. 4 bytes are read. The 32-bit integer read Reads a 64-bit signed integer from the stream. 8 bytes are read. The 64-bit integer read. Reads a 16-bit unsigned integer from the stream. 2 bytes are read. The 16-bit unsigned integer read. Reads a 16-bit unsigned integer from the stream representing an offset position. 2 bytes are read. The 16-bit unsigned integer read. Reads array of 16-bit unsigned integers from the stream. The length. The 16-bit unsigned integer read. Reads array of 16-bit unsigned integers from the stream to the buffer. The buffer to read to. Reads array or 32-bit unsigned integers from the stream. The length. The 32-bit unsigned integer read. Reads array of 16-bit unsigned integers from the stream. The length. The 16-bit signed integer read. Reads an array of 16-bit signed integers from the stream to the buffer. The buffer to read to. Reads a 8-bit unsigned integer from the stream, using the bit converter for this reader. 1 bytes are read. The 8-bit unsigned integer read. Reads a 24-bit unsigned integer from the stream, using the bit converter for this reader. 3 bytes are read. The 24-bit unsigned integer read. Reads a 32-bit unsigned integer from the stream, using the bit converter for this reader. 4 bytes are read. The 32-bit unsigned integer read. Reads a 32-bit unsigned integer from the stream representing an offset position. 4 bytes are read. The 32-bit unsigned integer read. Reads the specified number of bytes, returning them in a new byte array. If not enough bytes are available before the end of the stream, this method will return what is available. The number of bytes to read. The bytes read. Reads a string of a specific length, which specifies the number of bytes to read from the stream. These bytes are then converted into a string with the encoding for this reader. The bytes to read. The encoding. The string read from the stream. Reads the uint32 string. a 4 character long UTF8 encoded string. Reads an offset consuming the given nuber of bytes. The offset size in bytes. The 32-bit signed integer representing the offset. Size is not in range. Reads the given number of bytes from the stream, throwing an exception if they can't all be read. Buffer to read into. Number of bytes to read. An disposable buffer that is backed by an array pool. The type of buffer element. A custom that can wrap of instances and cast them to be for any arbitrary unmanaged value type. The value type to use when casting the wrapped instance. The wrapped of instance. Initializes a new instance of the class. The of instance to wrap. Options for enabling color font support during layout and rendering. Don't try rendering color glyphs at all Render using glyphs accessed via Microsoft's COLR/CPAL table extensions to OpenType Base class for exceptions thrown by this library. Initializes a new instance of the class. The message that describes the error. Exception for detailing missing font families. Initializes a new instance of the class. The name of the missing font family. Initializes a new instance of the class. The name of the missing font family. The collection of directories that were searched for the font family. Pass an empty collection if font families were not searched in directories. Gets the name of the font family that was not found. Gets the collection of directories that were unsuccessfully searched for the font family. If the exception did not originate from the then this property will be empty. Helper methods to throw exceptions Throws an . Throws an . Exception for detailing missing font families. Initializes a new instance of the class. The code point for the glyph we where unable to find. Exception font loading can throw if it encounters invalid data during font loading. Initializes a new instance of the class. The message that describes the error. Exception font loading can throw if it encounters invalid data during font loading. Initializes a new instance of the class. The message that describes the error. The table. Gets the table where the error originated. Exception font loading can throw if it finds a required table is missing during font loading. Initializes a new instance of the class. The message that describes the error. The table. Gets the table where the error originated. Represents a font face with metrics, which is a set of glyphs with a specific style (regular, italic, bold etc). The font source is a filesystem path. Gets the filesystem path to the font face source. Reads a from the specified stream. The file path. a . Defines a particular format for text, including font face, size, and style attributes. This class cannot be inherited. Initializes a new instance of the class. The font family. The size of the font in PT units. Initializes a new instance of the class. The font family. The size of the font in PT units. The font style. Initializes a new instance of the class. The prototype. The font style. Initializes a new instance of the class. The prototype. The size of the font in PT units. The font style. Initializes a new instance of the class. The prototype. The size of the font in PT units. Gets the family. Gets the name. Gets the size of the font in PT units. Gets the font metrics. Gets a value indicating whether this is bold. Gets a value indicating whether this is italic. Gets the requested style. Gets the filesystem path to the font family source. When this method returns, contains the filesystem path to the font family source, if the path exists; otherwise, the default value for the type of the path parameter. This parameter is passed uninitialized. if the was created via a filesystem path; otherwise, . Gets the glyphs for the given codepoint. The code point of the character. When this method returns, contains the glyphs for the given codepoint if the glyphs are found; otherwise the default value. This parameter is passed uninitialized. if the face contains glyphs for the specified codepoint; otherwise, . Gets the glyphs for the given codepoint. The code point of the character. Options for enabling color font support during layout and rendering. When this method returns, contains the glyphs for the given codepoint and color support if the glyphs are found; otherwise the default value. This parameter is passed uninitialized. if the face contains glyphs for the specified codepoint; otherwise, . Gets the glyphs for the given codepoint. The code point of the character. The text attributes to apply to the glyphs. Options for enabling color font support during layout and rendering. When this method returns, contains the glyphs for the given codepoint, attributes, and color support if the glyphs are found; otherwise the default value. This parameter is passed uninitialized. if the face contains glyphs for the specified codepoint; otherwise, . Gets the glyphs for the given codepoint. The code point of the character. The text attributes to apply to the glyphs. The layout mode to apply to thte glyphs. Options for enabling color font support during layout and rendering. When this method returns, contains the glyphs for the given codepoint, attributes, and color support if the glyphs are found; otherwise the default value. This parameter is passed uninitialized. if the face contains glyphs for the specified codepoint; otherwise, . Gets the glyphs for the given codepoint. The code point of the character. The text attributes to apply to the glyphs. The text decorations to apply to the glyphs. The layout mode to apply to thte glyphs. Options for enabling color font support during layout and rendering. When this method returns, contains the glyphs for the given codepoint, attributes, and color support if the glyphs are found; otherwise the default value. This parameter is passed uninitialized. if the face contains glyphs for the specified codepoint; otherwise, . Gets the amount, in px units, the glyph should be offset if it is proceeded by the glyph. The previous glyph. The current glyph. The DPI (Dots Per Inch) to render/measure the kerning offset at. When this method returns, contains the offset, in font units, that should be applied to the glyph, if the offset is found; otherwise the default vector value. This parameter is passed uninitialized. if the face contains and offset for the glyph combination; otherwise, . Represents a collection of font families. Initializes a new instance of the class. Initializes a new instance of the class. The collection of directories used to search for font families. Use this constructor instead of the parameterless constructor if the fonts added to that collection are actually added after searching inside physical file system directories. The message of the will include the searched directories. Extension methods for . Adds the fonts from the collection to this . The font collection. The containing the system fonts. Adds the fonts from the collection to this . The font collection. The delegate that defines the conditions of to add into the font collection. The containing the system fonts. Provides basic descriptive metadata for the font. Initializes a new instance of the class. The name table. The os2 table. The head table. Gets the style. Gets the name of the font in the invariant culture. Gets the name of the font family in the invariant culture. Gets the font sub family in the invariant culture. Gets the name of the font. The culture to load metadata in. The font name. Gets the name of the font family. The culture to load metadata in. The font family name. Gets the font sub family. The culture to load metadata in. The font sub family name. Gets the name matching the given culture and id. If is passed this method will return the first name matching the id. The culture to load metadata in. The name id to match. The name. Reads a from the specified stream. The file path. a . Reads a from the specified stream. The stream. a . Reads a from the specified stream. The reader. a . Reads all the s from the file at the specified path (typically a .ttc file like simsun.ttc). The file path. a . Reads all the s from the specified stream (typically a .ttc file like simsun.ttc). The stream to read the font collection from. a . Defines a group of type faces having a similar basic design and certain variations in styles. Initializes a new instance of the struct. The name. The collection. The culture the family was extracted against Gets the name. Gets the culture this instance was extracted against. Compares two objects for equality. The on the left side of the operand. The on the right side of the operand. if the current left is equal to the parameter; otherwise, . Compares two objects for inequality. The on the left side of the operand. The on the right side of the operand. if the current left is unequal to the parameter; otherwise, . Create a new instance of the for the named font family with regular styling. The size of the font in PT units. The new . Create a new instance of the for the named font family. The size of the font in PT units. The font style. The new . Gets the collection of that are currently available. The . Gets the collection of filesystem paths to the font family sources. When this method returns, contains the filesystem paths to the font family sources, if the path exists; otherwise, an empty value for the type of the paths parameter. This parameter is passed uninitialized. if the was created via filesystem paths; otherwise, . Gets the specified font metrics matching the given font style. The font style to use when searching for a match. When this method returns, contains the metrics associated with the specified name, if the name is found; otherwise, the default value for the type of the metrics parameter. This parameter is passed uninitialized. if the contains font metrics with the specified name; otherwise, . Represents a font face with metrics, which is a set of glyphs with a specific style (regular, italic, bold etc). Gets the basic description of the face. Gets the number of font units per EM square for this face. Gets the scale factor that is applied to all glyphs in this face. Calculated as 72 * so that 1pt = 1px. Gets the metrics specific to horizontal text. Gets the metrics specific to vertical text. Gets the recommended horizontal size in font design units for subscripts for this font. Gets the recommended vertical size in font design units for subscripts for this font. Gets the recommended horizontal offset in font design units for subscripts for this font. Gets the recommended vertical offset in font design units for subscripts for this font. Gets the recommended horizontal size in font design units for superscripts for this font. Gets the recommended vertical size in font design units for superscripts for this font. Gets the recommended horizontal offset in font design units for superscripts for this font. Gets the recommended vertical offset in font design units for superscripts for this font. Gets thickness of the strikeout stroke in font design units. Gets the position of the top of the strikeout stroke relative to the baseline in font design units. Gets the suggested distance of the top of the underline from the baseline (negative values indicate below baseline). Gets the suggested values for the underline thickness. In general, the underline thickness should match the thickness of the underscore character (U+005F LOW LINE), and should also match the strikeout thickness, which is specified in the OS/2 table. Gets the italic angle in counter-clockwise degrees from the vertical. Zero for upright text, negative for text that leans to the right (forward). Gets the specified glyph id matching the codepoint. The codepoint. When this method returns, contains the glyph id associated with the specified codepoint, if the codepoint is found; otherwise, 0. This parameter is passed uninitialized. if the face contains a glyph for the specified codepoint; otherwise, . Gets the specified glyph id matching the codepoint pair. The codepoint. The next codepoint. Can be null. When this method returns, contains the glyph id associated with the specified codepoint, if the codepoint is found; otherwise, 0. This parameter is passed uninitialized. When this method return, contains a value indicating whether the next codepoint should be skipped. if the face contains a glyph for the specified codepoint; otherwise, . Tries to get the glyph class for a given glyph id. The font needs to have a GDEF table defined. The glyph identifier. The glyph class. true, if the glyph class could be retrieved. Tries to get the mark attachment class for a given glyph id. The font needs to have a GDEF table defined. The glyph identifier. The mark attachment class. true, if the mark attachment class could be retrieved. Gets the glyph metrics for a given code point. The Unicode code point to get the glyph for. The text attributes applied to the glyph. The text decorations applied to the glyph. The layout mode applied to the glyph. Options for enabling color font support during layout and rendering. When this method returns, contains the metrics for the given codepoint and color support if the metrics are found; otherwise the default value. This parameter is passed uninitialized. if the face contains glyph metrics for the specified codepoint; otherwise, . Gets the unicode codepoints for which a glyph exists in the font. The . Gets the glyph metrics for a given code point and glyph id. The Unicode codepoint. The previously matched or substituted glyph id for the codepoint in the face. If this value equals 0 the default fallback metrics are returned. The text attributes applied to the glyph. The text decorations applied to the glyph. The layout mode applied to the glyph. Options for enabling color font support during layout and rendering. The . Tries to get the GSUB table. The GSUB table. true, if the glyph class could be retrieved. Applies any available substitutions to the collection of glyphs. The glyph substitution collection. Gets the amount, in font units, the glyph should be offset if it is proceeded by the glyph. The previous glyph id. The current glyph id. When this method returns, contains the offset, in font units, that should be applied to the glyph, if the offset is found; otherwise the default vector value. This parameter is passed uninitialized. if the face contains and offset for the glyph combination; otherwise, . Applies any available positioning updates to the collection of glyphs. The glyph positioning collection. Stores a set of four single precision floating points that represent the location and size of a rectangle. Represents a that has X, Y, Width, and Height values set to zero. Initializes a new instance of the struct. The horizontal position of the rectangle. The vertical position of the rectangle. The width of the rectangle. The height of the rectangle. Initializes a new instance of the struct. The which specifies the rectangles point in a two-dimensional plane. The which specifies the rectangles height and width. Gets the x-coordinate of this . Gets the y-coordinate of this . Gets the width of this . Gets the height of this . Gets the coordinates of the upper-left corner of the rectangular region represented by this . Gets the size of this . Gets a value indicating whether this is empty. Gets the y-coordinate of the top edge of this . Gets the x-coordinate of the right edge of this . Gets the y-coordinate of the bottom edge of this . Gets the x-coordinate of the left edge of this . Compares two objects for equality. The on the left side of the operand. The on the right side of the operand. True if the current left is equal to the parameter; otherwise, false. Compares two objects for inequality. The on the left side of the operand. The on the right side of the operand. True if the current left is unequal to the parameter; otherwise, false. Creates a new with the specified location and size. The left coordinate of the rectangle. The top coordinate of the rectangle. The right coordinate of the rectangle. The bottom coordinate of the rectangle. The . Returns the center point of the given . The rectangle. The . Creates a rectangle that represents the intersection between and . If there is no intersection, an empty rectangle is returned. The first rectangle. The second rectangle. The . Creates a new from the given that is inflated by the specified amount. The rectangle. The amount to inflate the width by. The amount to inflate the height by. A new . Creates a new by transforming the given rectangle by the given matrix. The source rectangle. The transformation matrix. A transformed . Creates a rectangle that represents the union between and . The first rectangle. The second rectangle. The . Deconstructs this rectangle into four floats. The out value for X. The out value for Y. The out value for the width. The out value for the height. Creates a FontRectangle that represents the intersection between this FontRectangle and the . The rectangle. New representing the intersections between the two rectangles. Creates a new inflated by the specified amount. The width. The height. New representing the inflated rectangle Creates a new inflated by the specified amount. The size. New representing the inflated rectangle Determines if the specified point is contained within the rectangular region defined by this . The x-coordinate of the given point. The y-coordinate of the given point. The . Determines if the specified point is contained within the rectangular region defined by this . The point. The . Determines if the rectangular region represented by is entirely contained within the rectangular region represented by this . The rectangle. The . Determines if the specified intersects the rectangular region defined by this . The other rectangle. The . Adjusts the location of this rectangle by the specified amount. The point. New representing the offset rectangle. Adjusts the location of this rectangle by the specified amount. The amount to offset the x-coordinate. The amount to offset the y-coordinate. New representing the inflated rectangle. The font styles Regular Bold Italic Bold and Italic A glyph from a particular font face. Gets the glyph metrics. Calculates the bounding box. The glyph layout mode to measure using. The location to calculate from. The DPI (Dots Per Inch) to measure the glyph at. The bounding box Renders the glyph to the render surface relative to a top left origin. The surface. The location to render the glyph at. The offset of the glyph vector relative to the top-left position of the glyph advance. The glyph layout mode to render using. The options to render using. Represents the bounds of a for a given . Initializes a new instance of the struct. The Unicode codepoint for the glyph. The glyph bounds. Gets the Unicode codepoint of the glyph. Gets the glyph bounds. A glyphs layout and location Gets the glyph. Gets the codepoint represented by this glyph. Gets the location of the glyph box. Gets the location to render the glyph at. Gets the offset of the glyph vector relative to the top-left position of the glyph advance. For horizontal layout this will always be . Gets the width. Gets the height. Gets the glyph layout mode. Gets a value indicating whether this glyph is the first glyph on a new line. Gets a value indicating whether the glyph represents a whitespace character. The . Provides enumeration for the various layout mode of an individual glyph within a body of text. Horizontal. Vertical. Rotated 90 degrees clockwise. Represents a glyph metric from a particular font face. Gets the font metrics. Gets the Unicode codepoint of the glyph. Gets the advance width for horizontal layout, expressed in font units. Gets the advance height for vertical layout, expressed in font units. Gets the left side bearing for horizontal layout, expressed in font units. Gets the right side bearing for horizontal layout, expressed in font units. Gets the top side bearing for vertical layout, expressed in font units. Gets the bottom side bearing for vertical layout, expressed in font units. Gets the bounds, expressed in font units. Gets the width, expressed in font units. Gets the height, expressed in font units. Gets the glyph type. Gets the color of this glyph when the is Gets the id of the glyph within the font tables. Gets the scale factor that is applied to all glyphs in this face. Normally calculated as 72 * so that 1pt = 1px unless the glyph has that apply scaling adjustment. Gets or sets the offset in font design units. Gets the text run that the glyph belongs to. Gets the text attributes applied to the glyph. Gets the text decorations applied to the glyph. Performs a semi-deep clone (FontMetrics are not cloned) for rendering This allows caching the original in the font metrics. The current text run this glyph belongs to. The new . Apply an offset to the glyph. The x-offset. The y-offset. Applies an advance to the glyph. The x-advance. The y-advance. Sets a new advance width. The x-advance. Sets a new advance height. The y-advance. Renders the glyph to the render surface in font units relative to a bottom left origin at (0,0) The surface renderer. The location representing offset of the glyph outer bounds relative to the origin. The offset of the glyph vector relative to the top-left position of the glyph advance. The glyph layout mode to render using. The options used to influence the rendering of this glyph. Gets a value indicating whether the specified code point should be skipped when rendering. The code point. The . Gets a value indicating whether the specified code point should be rendered as a white space only. The code point. The . Returns the size to render/measure the glyph based on the given size and resolution in px units. The font size in pt units. The DPI (Dots Per Inch) to render/measure the glyph at The . Gets the rotation matrix for the glyph based on the layout mode. The glyph layout mode. The. Represents a collection of glyph metrics that are mapped to input codepoints. Contains a map the index of a map within the collection, non-sequential codepoint offsets, and their glyph ids, point size, and mtrics. Initializes a new instance of the class. The text options. Gets the glyph metrics at the given codepoint offset. The zero-based index within the input codepoint collection. The font size in PT units of the font containing this glyph. Whether the glyph is the result of a decomposition substitution. When this method returns, contains the glyph metrics associated with the specified offset, if the value is found; otherwise, the default value for the type of the metrics parameter. This parameter is passed uninitialized. The metrics. Updates the collection of glyph ids to the metrics collection to overwrite any glyphs that have been previously identified as fallbacks. The font face with metrics. The glyph substitution collection. if the metrics collection does not contain any fallbacks; otherwise . Adds the collection of glyph ids to the metrics collection. identified as fallbacks. The font face with metrics. The glyph substitution collection. if the metrics collection does not contain any fallbacks; otherwise . Updates the position of the glyph at the specified index. The font metrics. The zero-based index of the element. Updates the advanced metrics of the glyphs at the given index and id, adding dx and dy to the current advance. The font face with metrics. The zero-based index of the element. The id of the glyph to offset. The delta x-advance. The delta y-advance. Returns a value indicating whether the element at the given index should be processed. The font face with metrics. The zero-based index of the elements to position. if the element should be processed; otherwise, . The combined set of properties that uniquely identify the glyph that is to be rendered at a particular size and dpi. Gets the name of the Font this glyph belongs to. Gets the color details of this glyph. Gets the type of this glyph. Gets the style of the font this glyph belongs to. Gets the id of the glyph within the font tables. Gets the codepoint represented by this glyph. Gets the rendered point size. Gets the dots-per-inch the glyph is to be rendered at. Gets the layout mode applied to the glyph. Gets the text run that this glyph belongs to. Compares two objects for equality. The on the left side of the operand. The on the right side of the operand. True if the current left is equal to the parameter; otherwise, false. Compares two objects for inequality. The on the left side of the operand. The on the right side of the operand. True if the current left is unequal to the parameter; otherwise, false. Represents the shaped bounds of a glyph. Uses a class over a struct for ease of use. Contains supplementary data that allows the shaping of glyphs. Initializes a new instance of the class. Initializes a new instance of the class. The data to copy properties from. Whether to clear features. Gets or sets the glyph id. Gets or sets the leading codepoint. Gets or sets the codepoint count represented by this glyph. Gets or sets the text direction. Gets or sets the text run this glyph belongs to. Gets or sets the id of any ligature this glyph is a member of. Gets or sets a value indicating whether the glyph is ligated. Gets or sets the ligature component index of the glyph. Gets or sets the index of any mark attachment. Gets or sets the index of any cursive attachment. Gets or sets the collection of features. Gets or sets the shaping bounds. Gets or sets a value indicating whether this glyph is the result of a substitution. Gets or sets a value indicating whether this glyph is the result of a decomposition substitution Gets or sets the universal shaping information. Gets or sets the Indic shaping information. Represents information required for universal shaping. Represents a collection of glyph indices that are mapped to input codepoints. Contains a map the index of a map within the collection, non-sequential codepoint offsets, and their glyph ids. Initializes a new instance of the class. The text options. Gets the number of glyphs ids contained in the collection. This may be more or less than original input codepoint count (due to substitution process). Gets or sets the running id of any ligature glyphs contained withing this collection are a member of. Gets the shaping data at the specified position. The zero-based index of the elements to get. The zero-based index within the input codepoint collection. The . Adds a clone of the glyph shaping data to the collection at the specified offset. The data. The zero-based index within the input codepoint collection. Adds the glyph id and the codepoint it represents to the collection. The id of the glyph to add. The codepoint the glyph represents. The resolved text direction for the codepoint. The text run this glyph belongs to. The zero-based index within the input codepoint collection. Moves the specified glyph to the specified position. The index to move from. The index to move to. Performs a stable sort of the glyphs by the comparison delegate starting at the specified index. The start index. The end index. The comparison delegate. Removes all elements from the collection. Gets the specified glyph ids matching the given codepoint offset. The zero-based index within the input codepoint collection. When this method returns, contains the shaping data associated with the specified offset, if the value is found; otherwise, the default value for the type of the data parameter. This parameter is passed uninitialized. if the contains glyph ids for the specified offset; otherwise, . Performs a 1:1 replacement of a glyph id at the given position. The zero-based index of the element to replace. The replacement glyph id. Performs a 1:1 replacement of a glyph id at the given position while removing a series of glyph ids at the given positions within the sequence. The zero-based index of the element to replace. The indices at which to remove elements. The replacement glyph id. The ligature id. Performs a 1:1 replacement of a glyph id at the given position while removing a series of glyph ids. The zero-based index of the element to replace. The number of glyphs to remove. The replacement glyph id. Replaces a single glyph id with a collection of glyph ids. The zero-based index of the element to replace. The collection of replacement glyph ids. Represents the various versions of a glyph records. This is a fall back glyph due to a missing code point. This is a standard glyph to be drawn in the style the user defines. This is a single layer of the multi-layer colored glyph (emoji). Defines modes to determine how to apply hinting. The use of mathematical instructions to adjust the display of an outline font so that it lines up with a rasterized grid. Do not hint the glyphs. Hint the glyph using standard configuration. Horizontal alignment modes. Aligns text from the left. Aligns text from the right. Aligns text from the center. Represent the metrics of a font face specific to horizontal text. A surface that can have a glyph rendered to it as a series of actions, where the engine support colored glyphs (emoji). Sets the color to use for the current glyph. The color to override the renders brush with. Provides access to the color details for the current glyph. Gets the blue component Gets the green component Gets the red component Gets the alpha component Compares two objects for equality. The on the left side of the operand. The on the right side of the operand. True if the current left is equal to the parameter; otherwise, false. Compares two objects for inequality. The on the left side of the operand. The on the right side of the operand. True if the current left is unequal to the parameter; otherwise, false. Compares the for equality to this color. The other to compare to. True if the current color is equal to the parameter; otherwise, false. A readable and writable collection of fonts. Adds a font to the collection. The filesystem path to the font file. The new . Adds a font to the collection. The filesystem path to the font file. The description of the added font. The new . Adds a font to the collection. The font stream. The new . Adds a font to the collection. The font stream. The description of the added font. The new . Adds a true type font collection (.ttc). The font collection path. The new . Adds a true type font collection (.ttc). The font collection path. The descriptions of the added fonts. The new . Adds a true type font collection (.ttc). The font stream. The new . Adds a true type font collection (.ttc). The font stream. The descriptions of the added fonts. The new . Adds a font to the collection. The filesystem path to the font file. The culture of the font to add. The new . Adds a font to the collection. The filesystem path to the font file. The culture of the font to add. The description of the added font. The new . Adds a font to the collection. The font stream. The culture of the font to add. The new . Adds a font to the collection. The font stream. The culture of the font to add. The description of the added font. The new . Adds a true type font collection (.ttc). The font collection path. The culture of the fonts to add. The new . Adds a true type font collection (.ttc). The font collection path. The culture of the fonts to add. The descriptions of the added fonts. The new . Adds a true type font collection (.ttc). The font stream. The culture of the fonts to add. The new . Adds a true type font collection (.ttc). The font stream. The culture of the fonts to add. The descriptions of the added fonts. The new . Represents a collection of Adds the font metrics and culture to the . The font metrics to add. The culture of the font metrics to add. The new . Adds the font metrics to the . The font metrics to add. A surface that can have a glyph rendered to it as a series of actions. Begins the figure. Sets a new start point to draw lines from. The point. Draw a quadratic bezier curve connecting the previous point to . The second control point. The point. Draw a cubic bezier curve connecting the previous point to . The second control point. The third control point. The point. Draw a straight line connecting the previous point to . The point. Ends the figure. Ends the glyph. Begins the glyph. The bounds the glyph will be rendered at and at what size. The set of parameters that uniquely represents a version of a glyph in at particular font size, font family, font style and DPI. Returns true if the glyph should be rendered otherwise it returns false. Called once all glyphs have completed rendering. Called before any glyphs have been rendered. The rectangle within the text will be rendered. Provides a callback to enable custom logic to request decoration details. A custom might use alternative triggers to determine what decorations it needs access to. The text decorations the render wants render info for. Provides the positions required for drawing text decorations onto the The type of decoration these details correspond to. The start position from where to draw the decorations from. The end position from where to draw the decorations to. The thickness to draw the decoration. A surface that can have a glyph rendered to it as a series of actions. Renders the text. The target renderer surface. The text. The options. Returns the original Defines the contract for glyph shaping collections. Gets the collection count. Gets the text options used by this collection. Gets the glyph shaping data at the specified index. The zero-based index of the elements to get. The . Adds the shaping feature to the collection which should be applied to the glyph at a specified index. The zero-based index of the element. The feature to apply. Enables a previously added shaping feature. The zero-based index of the element. The feature to enable. Disables a previously added shaping feature. The zero-based index of the element. The feature to disable. Defines the contract for the metrics header of a font face. Gets the typographic ascender of the face, expressed in font units. Gets the typographic descender of the face, expressed in font units. Gets the typographic line gap of the face, expressed in font units. This field should be combined with the and values to determine default line spacing. Gets the typographic line spacing of the face, expressed in font units. Gets the maximum advance width, in font units, for all glyphs in this face. Gets the maximum advance height, in font units, for all glyphs in this face.This is only relevant for vertical layouts, and is set to for fonts that do not provide vertical metrics. The raw stream containing the uncompressed image data. A value indicating whether this instance of the given entity has been disposed. if this instance has been disposed; otherwise, . If the entity is disposed, it must not be disposed a second time. The isDisposed field is set the first time the entity is disposed. If the isDisposed field is true, then the Dispose() method will not dispose again. This help not to prolong the entity's life in the Garbage Collector. The read crc data. The stream responsible for decompressing the input stream. Initializes a new instance of the class. The stream. Thrown if the compression method is incorrect. Represents a readonly collection of fonts. Gets the collection of in this using the invariant culture. Gets the specified font family matching the invariant culture and font family name. The font family name. The first matching the given name. is The collection contains no matches. Gets the specified font family matching the invariant culture and font family name. The font family name. When this method returns, contains the family associated with the specified name, if the name is found; otherwise, the default value for the type of the family parameter. This parameter is passed uninitialized. if the contains a family with the specified name; otherwise, . is Gets the collection of in this using the given culture. The culture of the families to return. The . Gets the specified font family matching the given culture and font family name. The font family name. The culture to use when searching for a match. The first matching the given name. is The collection contains no matches. Gets the specified font family matching the given culture and font family name. The font family name. The culture to use when searching for a match. When this method returns, contains the family associated with the specified name, if the name is found; otherwise, the default value for the type of the family parameter. This parameter is passed uninitialized. if the contains a family with the specified name; otherwise, . is Represents a readonly collection of font metrics. The interface uses compiler pattern matching to provide enumeration capabilities. Gets the specified font metrics matching the given culture and font family name. The font family name. The culture to use when searching for a match. The font style to use when searching for a match. When this method returns, contains the metrics associated with the specified name, if the name is found; otherwise, the default value for the type of the family parameter. This parameter is passed uninitialized. if the contains font metrics with the specified name; otherwise, . is Gets the collection of available font metrics for a given culture and font family name. The font family name. The culture to use when searching for a match. The . is Gets the collection of available font styles for a given culture and font family name. The font family name. The culture to use when searching for a match. The . is Represents a readonly collection of Operating System fonts. Gets the collection of Operating System directories that were searched for font families. Kerning is the contextual adjustment of inter-glyph spacing. This property controls metric kerning, kerning that utilizes adjustment data contained in the font. Specifies that kerning is applied. Specifies that kerning is not applied. Specifies that kerning is applied at the discretion of the layout engine. Defines modes to determine the layout direction of text. Text is laid out horizontally from top to bottom. Text is laid out horizontally from bottom to top. Text is laid out vertically from left to right. Text is laid out vertically from right to left. Text is laid out vertically from left to right. Horizontal glyphs are rotated 90 degrees clockwise. Text is laid out vertically from right to left. Horizontal glyphs are rotated 90 degrees clockwise. Extensions to . Gets a value indicating whether the layout mode is horizontal. The layout mode. The . Gets a value indicating whether the layout mode is vertical. The layout mode. The . Gets a value indicating whether the layout mode is vertical-mixed only. The layout mode. The . Provides a mapped view of an underlying slice, selecting arbitrary indices from the source array. The type of item contained in the underlying array. Initializes a new instance of the struct. The data slice. The map slice. Gets the number of items in the map. Returns a reference to specified element of the slice. The index of the element to return. The . Thrown when index less than 0 or index greater than or equal to . An integer type for constants used to specify supported string encodings in various CFString functions. An encoding constant that identifies the UTF 8 encoding. An encoding constant that identifies kTextEncodingUnicodeDefault + kUnicodeUTF16LEFormat encoding. This constant specifies little-endian byte order. Options you can use to determine how CFURL functions parse a file system path name. Indicates a POSIX style path name. Components are slash delimited. A leading slash indicates an absolute path; a trailing slash is not significant. Returns the number of values currently in an array. The array to examine. The number of values in . Returns the type identifier for the CFArray opaque type. The type identifier for the CFArray opaque type. CFMutableArray objects have the same type identifier as CFArray objects. Retrieves a value at a given index. The array to examine. The index of the value to retrieve. If the index is outside the index space of (0 to N-1 inclusive where N is the count of ), the behavior is undefined. The value at the index in . If the return value is a Core Foundation Object, ownership follows The Get Rule. Returns the unique identifier of an opaque type to which a Core Foundation object belongs. The CFType object to examine. A value of type CFTypeID that identifies the opaque type of . This function returns a value that uniquely identifies the opaque type of any Core Foundation object. You can compare this value with the known CFTypeID identifier obtained with a “GetTypeID” function specific to a type, for example CFDateGetTypeID. These values might change from release to release or platform to platform. Returns the number (in terms of UTF-16 code pairs) of Unicode characters in a string. The string to examine. The number (in terms of UTF-16 code pairs) of characters stored in . Copies the character contents of a string to a local C string buffer after converting the characters to a given encoding. The string whose contents you wish to access. The C string buffer into which to copy the string. On return, the buffer contains the converted characters. If there is an error in conversion, the buffer contains only partial results. The buffer must be large enough to contain the converted characters and a NUL terminator. For example, if the string is Toby, the buffer must be at least 5 bytes long. The length of in bytes. The string encoding to which the character contents of should be converted. The encoding must specify an 8-bit encoding. upon success or if the conversion fails or the provided buffer is too small. This function is useful when you need your own copy of a string’s character data as a C string. You also typically call it as a “backup” when a prior call to the function fails. Quickly obtains a pointer to a C-string buffer containing the characters of a string in a given encoding. The string whose contents you wish to access. The string encoding to which the character contents of should be converted. The encoding must specify an 8-bit encoding. A pointer to a C string or NULL if the internal storage of does not allow this to be returned efficiently. This function either returns the requested pointer immediately, with no memory allocations and no copying, in constant time, or returns NULL. If the latter is the result, call an alternative function such as the function to extract the characters. Whether or not this function returns a valid pointer or NULL depends on many factors, all of which depend on how the string was created and its properties. In addition, the function result might change between different releases and on different platforms. So do not count on receiving a non-NULL result from this function under any circumstances. Releases a Core Foundation object. A CFType object to release. This value must not be NULL. Returns the path portion of a given URL. The CFURL object whose path you want to obtain. The operating system path style to be used to create the path. See for a list of possible values. The URL's path in the format specified by . Ownership follows the create rule. See The Create Rule. This function returns the URL's path as a file system path for a given path style. Returns the type identifier for the CFURL opaque type. The type identifier for the CFURL opaque type. Returns an array of font URLs. This function returns a retained reference to a CFArray of CFURLRef objects representing the URLs of the available fonts, or NULL on error. The caller is responsible for releasing the array. An enumerator that enumerates over available macOS system fonts. The enumerated strings are the absolute paths to the font files. Internally, it calls the native CoreText's method to retrieve the list of fonts so using this class must be guarded by RuntimeInformation.IsOSPlatform(OSPlatform.OSX). ReadOnlyArraySlice represents a contiguous region of arbitrary memory similar to and though constrained to arrays. Unlike , it is not a byref-like type. The type of item contained in the slice. Initializes a new instance of the struct. The underlying data buffer. Initializes a new instance of the struct. The underlying data buffer. The offset position in the underlying buffer this slice was created from. The number of items in the slice. Gets an empty Gets the offset position in the underlying buffer this slice was created from. Gets the number of items in the slice. Gets a representing this slice. Returns a reference to specified element of the slice. The index of the element to return. The . Thrown when index less than 0 or index greater than or equal to . Defines an implicit conversion of an array to a Copies the contents of this slice into destination span. If the source and destinations overlap, this method behaves as if the original values in a temporary location before the destination is overwritten. The slice to copy items into. Thrown when the destination slice is shorter than the source Span. Forms a slice out of the given slice, beginning at 'start', of given length The index at which to begin this slice. The desired length for the slice (exclusive). Thrown when the specified or end index is not in range (<0 or >Length). Provides a readonly mapped view of an underlying slice, selecting arbitrary indices from the source array. The type of item contained in the underlying array. Initializes a new instance of the struct. The data slice. The map slice. Gets the number of items in the map. Returns a reference to specified element of the slice. The index of the element to return. The . Thrown when index less than 0 or index greater than or equal to . Extension methods for the type. Contains CFF specific methods. Represents a font face with metrics, which is a set of glyphs with a specific style (regular, italic, bold etc). The font source is a stream. Contains TrueType specific methods. Initializes a new instance of the class. The True Type font tables. Initializes a new instance of the class. The Compact Font tables. Reads a from the specified stream. The file path. a . Reads a from the specified stream. The file path. Position in the stream to read the font from. a . Reads a from the specified stream. The stream. a . Reads a from the specified stream. The file path. a . Reads a from the specified stream. The stream. a . Provides a collection of fonts. Gets the default set of locations we probe for System Fonts. Provides a collection of fonts. Gets the collection containing the globally installed system fonts. Gets the collection of s installed on current system. Create a new instance of the for the named font family with regular styling. The font family name. The size of the font in PT units. The new . Create a new instance of the for the named font family. The font family name. The size of the font in PT units. The font style. The new . Create a new instance of the for the named font family with regular styling. The font family name. The font culture. The size of the font in PT units. The new . Create a new instance of the for the named font family. The font family name. The font culture. The size of the font in PT units. The font style. The new . Gets a value indicating whether the glyph represented by the codepoint should be interpreted vertically. The codepoint represented by the glyph. The layout mode. The . Gets the sequence lookup records. The seqLookupRecords array lists the sequence lookup records that specify actions to be taken on glyphs at various positions within the input sequence. These do not have to be ordered in sequence position order; they are ordered according to the desired result. All of the sequence lookup records are processed in order, and each applies to the results of the actions indicated by the preceding record. In OpenType Layout, index values identify glyphs. For efficiency and ease of representation, a font developer can group glyph indices to form glyph classes. Class assignments vary in meaning from one lookup subtable to another. For example, in the GSUB and GPOS tables, classes are used to describe glyph contexts. GDEF tables also use the idea of glyph classes. Gets the class id for the given glyph id. Any glyph not included in the range of covered glyph IDs automatically belongs to Class 0. The glyph identifier. The class id. Loads the class sequence rule set table. The big endian binary reader. Offset from beginning of the ClassSequenceRuleSet table. A class sequence rule set table. Each subtable (except an Extension LookupType subtable) in a lookup references a Coverage table (Coverage), which specifies all the glyphs affected by a substitution or positioning operation described in the subtable. The GSUB, GPOS, and GDEF tables rely on this notion of coverage. If a glyph does not appear in a Coverage table, the client can skip that subtable and move immediately to the next subtable. Features provide information about how to use the glyphs in a font to render a script or language. For example, an Arabic font might have a feature for substituting initial glyph forms, and a Kanji font might have a feature for positioning glyphs vertically. All OpenType Layout features define data for glyph substitution, glyph positioning, or both. Provides enumeration for the different font features. Access All Alternates. Shortcode: aalt. This feature makes all variations of a selected character accessible. This serves several purposes: An application may not support the feature by which the desired glyph would normally be accessed; the user may need a glyph outside the context supported by the normal substitution, or the user may not know what feature produces the desired glyph. Since many-to-one substitutions are not covered, ligatures would not appear in this table unless they were variant forms of another ligature. Above-base Forms. Shortcode: abvf. Substitutes the above-base form of a vowel. Above-base Mark Positioning. Shortcode: abvm. Positions marks above base glyphs. Above-base Substitutions. Shortcode: abvs. Substitutes a ligature for a base glyph and mark that’s above it. Alternative Fractions. Shortccde: afrc. Replaces figures separated by a slash with an alternative form. Akhand. Shortcode: akhn. Preferentially substitutes a sequence of characters with a ligature. This substitution is done irrespective of any characters that may precede or follow the sequence. Below-base Forms. Shortcode: blwf. Substitutes the below-base form of a consonant in conjuncts. Below-base Mark Positioning. Shortcode: blwm. Positions marks below base glyphs. Below-base Substitutions. Shortcode: blws. Produces ligatures that comprise of base glyph and below-base forms. Contextual Alternates. Shortcode: calt. In specified situations, replaces default glyphs with alternate forms which provide better joining behavior. Used in script typefaces which are designed to have some or all of their glyphs join. Case-Sensitive Forms. Shortcode: case. Shifts various punctuation marks up to a position that works better with all-capital sequences or sets of lining figures; also changes oldstyle figures to lining figures. By default, glyphs in a text face are designed to work with lowercase characters. Some characters should be shifted vertically to fit the higher visual center of all-capital or lining text. Also, lining figures are the same height (or close to it) as capitals, and fit much better with all-capital text. Glyph Composition/Decomposition. Shortcode: ccmp. To minimize the number of glyph alternates, it is sometimes desirable to decompose the default glyph for a character into two or more glyphs. Additionally, it may be preferable to compose default glyphs for two or more characters into a single glyph for better glyph processing. This feature permits such composition/decomposition. The feature should be processed as the first feature processed, and should be processed only when it is called. Conjunct Form After Ro. Shortcode: cfar. Substitutes alternate below-base or post-base forms in Khmer script when occurring after conjoined Ro (“Coeng Ra”). Conjunct Forms. Shortcode: cjct. Produces conjunct forms of consonants in Indic scripts. This is similar to the Akhands feature, but is applied at a different sequential point in the process of shaping an Indic syllable. Contextual Ligatures. Shortcode: clig. Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. Unlike other ligature features, 'clig' specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures. Centered CJK Punctuation. Shortcode: cpct. Centers specific punctuation marks for those fonts that do not include centered and non-centered forms. Capital Spacing. Shortcode: cpsp. Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons. Contextual Swash. Shortcode: cswh. This feature replaces default character glyphs with corresponding swash glyphs in a specified context. Note that there may be more than one swash alternate for a given character. Cursive Positioning. Shortcode: curs. In cursive scripts like Arabic, this feature cursively positions adjacent glyphs. Petite Capitals From Capitals. Shortcode: c2pc. This feature turns capital characters into petite capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in petite-cap form to avoid disrupting the flow of text. See the 'pcap' feature description for notes on the relationship of caps, smallcaps and petite caps. Small Capitals From Capitals. Shortcode: c2sc. This feature turns capital characters into small capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in small-cap form to avoid disrupting the flow of text. Distances. Shortcode: dist. Provides a means to control distance between glyphs. Discretionary Ligatures. Shortcode: dlig. Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures which may be used for special effect, at the user’s preference. Denominators. Shortcode: dnom. Replaces selected figures which follow a slash with denominator figures. Dotless Forms. Shortcode: dtls. This feature provides dotless forms for Math Alphanumeric characters, such as U+1D422 MATHEMATICAL BOLD SMALL I, U+1D423 MATHEMATICAL BOLD SMALL J, U+1D456 U+MATHEMATICAL ITALIC SMALL I, U+1D457 MATHEMATICAL ITALIC SMALL J, and so on. The dotless forms are to be used as base forms for placing mathematical accents over them. Expert Forms. Shortcode: expt. Like the JIS78 Forms feature, this feature replaces standard forms in Japanese fonts with corresponding forms preferred by typographers. Although most of the JIS78 substitutions are included, the expert substitution goes on to handle many more characters. Final Glyph on Line Alternates. Shortcode: falt. Replaces line final glyphs with alternate forms specifically designed for this purpose (they would have less or more advance width as need may be), to help justification of text. Terminal Form #2. Shortcode: fin2. Replaces the Alaph glyph at the end of Syriac words with its appropriate form, when the preceding base character cannot be joined to, and that preceding base character is not a Dalath, Rish, or dotless Dalath-Rish. Terminal Form #3. Shortcode: fin3. Replaces Alaph glyphs at the end of Syriac words when the preceding base character is a Dalath, Rish, or dotless Dalath-Rish. Terminal Forms. Shortcode: fina. Replaces glyphs for characters that have applicable joining properties with an alternate form when occurring in a final context. Flattened ascent forms. Shortcode: flac. This feature provides flattened forms of accents to be used over high-rise bases such as capitals. This feature should only change the shape of the accent and should not move it in the vertical or horizontal direction. Moving of the accents is done by the math handling client. Accents are flattened by the Math engine if their base is higher than MATH.MathConstants.FlattenedAccentBaseHeight. Fractions. Shortcode: frac. Replaces figures separated by a slash with “common” (diagonal) fractions. Full Widths. Shortcode: fwid. Replaces glyphs set on other widths with glyphs set on full (usually em) widths. In a CJKV font, this may include “lower ASCII” Latin characters and various symbols. In a European font, this feature replaces proportionally-spaced glyphs with monospaced glyphs, which are generally set on widths of 0.6 em. Half Forms. Shortcode: half. Produces the half forms of consonants in Indic scripts. Halant Forms. Shortcode: haln. Produces the halant forms of consonants in Indic scripts. Alternate Half Widths. Shortcode: halt. Respaces glyphs designed to be set on full-em widths, fitting them onto half-em widths. This differs from 'hwid' in that it does not substitute new glyphs. Historical Forms. Shortcode: hist. Some letterforms were in common use in the past, but appear anachronistic today. The best-known example is the long form of s; others would include the old Fraktur k. Some fonts include the historical forms as alternates, so they can be used for a “period” effect. This feature replaces the default (current) forms with the historical alternates. While some ligatures are also used for historical effect, this feature deals only with single characters. Horizontal Kana Alternates. Shortcode: hkna. Replaces standard kana with forms that have been specially designed for only horizontal writing. This is a typographic optimization for improved fit and more even color. Also see 'vkna'. Historical Ligatures. Shortcode: hlig. Some ligatures were in common use in the past, but appear anachronistic today. Some fonts include the historical forms as alternates, so they can be used for a “period” effect. This feature replaces the default (current) forms with the historical alternates. Hangul. Shortcode: hngl. Replaces hanja (Chinese-style) Korean characters with the corresponding hangul (syllabic) characters. This effectively reverses the standard input method, in which hangul are entered and replaced by hanja. Many of these substitutions are one-to-one (GSUB lookup type 1), but hanja substitution often requires the user to choose from several possible hangul characters (GSUB lookup type 3). Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms). Shortcode: hojo. The JIS X 0212-1990 (aka, “Hojo Kanji”) and JIS X 0213:2004 character sets overlap significantly. In some cases their prototypical glyphs differ. When building fonts that support both JIS X 0212-1990 and JIS X 0213:2004 (such as those supporting the Adobe-Japan 1-6 character collection), it is recommended that JIS X 0213:2004 forms be preferred as the encoded form. The 'hojo' feature is used to access the JIS X 0212-1990 glyphs for the cases when the JIS X 0213:2004 form is encoded. Half Widths. Shortcode: hwid. Replaces glyphs on proportional widths, or fixed widths other than half an em, with glyphs on half-em (en) widths. Many CJKV fonts have glyphs which are set on multiple widths; this feature selects the half-em version. There are various contexts in which this is the preferred behavior, including compatibility with older desktop documents. Initial Forms. Shortcode: init. Replaces glyphs for characters that have applicable joining properties with an alternate form when occurring in an initial context. Isolated Forms. Shortcode: isol. Replaces glyphs for characters that have applicable joining properties with an alternate form when occurring in a isolate (non-joining) context. Italics. Shortcode: ital. Some fonts (such as Adobe’s Pro Japanese fonts) will have both Roman and Italic forms of some characters in a single font. This feature replaces the Roman glyphs with the corresponding Italic glyphs. Justification Alternates. Shortcode: jalt. Improves justification of text by replacing glyphs with alternate forms specifically designed for this purpose (they would have less or more advance width as need may be). JIS78 Forms. Shortcode: jp78. This feature replaces default (JIS90) Japanese glyphs with the corresponding forms from the JIS C 6226-1978 (JIS78) specification. JIS83 Forms. Shortcode: jp83. This feature replaces default (JIS90) Japanese glyphs with the corresponding forms from the JIS X 0208-1983 (JIS83) specification. JIS90 Forms. Shortcode: jp90. This feature replaces Japanese glyphs from the JIS78 or JIS83 specifications with the corresponding forms from the JIS X 0208-1990 (JIS90) specification. JIS2004 Forms. Shortcode: jp04. The National Language Council (NLC) of Japan has defined new glyph shapes for a number of JIS characters, which were incorporated into JIS X 0213:2004 as new prototypical forms. The 'jp04' feature is a subset of the 'nlck' feature, and is used to access these prototypical glyphs in a manner that maintains the integrity of JIS X 0213:2004. Kerning. Shortcode: kern. Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the horizontal direction, this feature can supply size-dependent kerning data via device tables, “cross-stream” kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature does not apply to text set vertically. Left Bounds. Shortcode: lfbd. Aligns glyphs by their apparent left extents at the left ends of horizontal lines of text, replacing the default behavior of aligning glyphs by their origins. This feature is called by the Optical Bounds ('opbd') feature. Standard Ligatures. Shortcode: liga. Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers the ligatures which the designer/manufacturer judges should be used in normal conditions. Leading Jamo Forms. Shortcode: ljmo. Substitutes the leading jamo form of a cluster. Lining Figures. Shortcode: lnum. This feature changes selected non-lining figures to lining figures. Localized Forms. Shortcode: locl. Many scripts used to write multiple languages over wide geographical areas have developed localized variant forms of specific letters, which are used by individual literary communities. For example, a number of letters in the Bulgarian and Serbian alphabets have forms distinct from their Russian counterparts and from each other. In some cases the localized form differs only subtly from the script “norm”, in others the forms are radically distinct. This feature enables localized forms of glyphs to be substituted for default forms. Left-to-right glyph alternates. Shortcode: ltra. This feature applies glyphic variants (other than mirrored forms) appropriate for left-to-right text (for mirrored forms, see 'ltrm'). Left-to-right mirrored forms. Shortcode: ltrm. This feature applies mirrored forms appropriate for left-to-right text. (For left-to-right glyph alternates, see 'ltra'). Mark Positioning. Shortcode: mark. Positions mark glyphs with respect to base glyphs. Medial Forms #2. Shortcode: med2. Replaces Alaph glyphs in the middle of Syriac words when the preceding base character can be joined to. Medial Forms. Shortcode: medi Replaces glyphs for characters that have applicable joining properties with an alternate form when occurring in a medial context. This applies to characters that have the Unicode Joining_Type property value Dual_Joining. Mathematical Greek. Shortcode: mgrk. Replaces standard typographic forms of Greek glyphs with corresponding forms commonly used in mathematical notation (which are a subset of the Greek alphabet). Mark to Mark Positioning. Shortcode: mkmk. Positions marks with respect to other marks. Required in various non-Latin scripts like Arabic. Shortcode: mset. Positions Arabic combining marks in fonts for Windows 95 using glyph substitution. Alternate Annotation Forms. Shortcode: nalt. Replaces default glyphs with various notational forms (e.g. glyphs placed in open or solid circles, squares, parentheses, diamonds or rounded boxes). In some cases an annotation form may already be present, but the user may want a different one. NLC Kanji Forms. Shortcode: nlck. The National Language Council (NLC) of Japan has defined new glyph shapes for a number of JIS characters in 2000. The 'nlck' feature is used to access those glyphs. Nukta Forms. Shortcode: nukt. Produces Nukta forms in Indic scripts. Numerators. Shortcode: numr. Replaces selected figures which precede a slash with numerator figures, and replaces the typographic slash with the fraction slash. Oldstyle Figures. Shortcode: onum. This feature changes selected figures from the default or lining style to oldstyle form. Optical Bounds. Shortcode: opbd. Aligns glyphs by their apparent left or right extents in horizontal setting, or apparent top or bottom extents in vertical setting, replacing the default behavior of aligning glyphs by their origins. Another name for this behavior would be visual justification. The optical edge of a given glyph is only indirectly related to its advance width or bounding box; this feature provides a means for getting true visual alignment. Ordinals. Shortcode: ordn. Replaces default alphabetic glyphs with the corresponding ordinal forms for use after figures. One exception to the follows-a-figure rule is the numero character (U+2116), which is actually a ligature substitution, but is best accessed through this feature. Ornaments. Shortcode: ornm. This is a dual-function feature, which uses two input methods to give the user access to ornament glyphs (e.g. fleurons, dingbats and border elements) in the font. One method replaces the bullet character with a selection from the full set of available ornaments; the other replaces specific “lower ASCII” characters with ornaments assigned to them. The first approach supports the general or browsing user; the second supports the power user. Proportional Alternate Widths. Shortcode: palt. Respaces glyphs designed to be set on full-em widths, fitting them onto individual (more or less proportional) horizontal widths. This differs from 'pwid' in that it does not substitute new glyphs (GPOS, not GSUB feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit and not rotated in vertical setting (Latin forms designed for proportional spacing would be rotated). Petite Capitals. Shortcode: pcap. Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and whimsically referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps (for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia). This feature turns lowercase characters into petite capitals. Forms related to petite capitals, such as specially designed figures, may be included. Proportional Kana. Shortcode: pkna. Replaces glyphs, kana and kana-related, set on uniform widths (half or full-width) with proportional glyphs. Proportional Figures. Shortcode: pnum. Replaces figure glyphs set on uniform (tabular) widths with corresponding glyphs set on glyph-specific (proportional) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs. Pre-base Forms. Shortcode: pref. Substitutes the pre-base form of a consonant. Pre-base Substitutions. Shortcode: pres. Produces the pre-base forms of conjuncts in Indic scripts. It can also be used to substitute the appropriate glyph variant for pre-base vowel signs. Post-base Forms. Shortcode: pstf. Substitutes the post-base form of a consonant. Post-base Substitutions. Shortcode: psts. Substitutes a sequence of a base glyph and post-base glyph, with its ligaturised form. Proportional Widths. Shortcode: pwid. Replaces glyphs set on uniform widths (typically full or half-em) with proportionally spaced glyphs. The proportional variants are often used for the Latin characters in CJKV fonts, but may also be used for Kana in Japanese fonts. Quarter Widths. Shortcode: qwid. Replaces glyphs on other widths with glyphs set on widths of one quarter of an em (half an en). The characters involved are normally figures and some forms of punctuation. Randomize. Shortcode: rand. In order to emulate the irregularity and variety of handwritten text, this feature allows multiple alternate forms to be used. Required Contextual Alternates. Shortcode: rclt. In specified situations, replaces default glyphs with alternate forms which provide for better joining behavior or other glyph relationships. Especially important in script typefaces which are designed to have some or all of their glyphs join, but applicable also to e.g. variants to improve spacing. This feature is similar to 'calt', but with the difference that it should not be possible to turn off 'rclt' substitutions: they are considered essential to correct layout of the font. Required Ligatures. Shortcode: rlig. Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures, which the script determines as required to be used in normal conditions. This feature is important for some scripts to insure correct glyph formation. Rakar Forms. Shortcode: rkrf. Produces conjoined forms for consonants with rakar in Devanagari and Gujarati scripts. Reph Form. Shortcode: rphf. Substitutes the Reph form for a consonant and halant sequence. Right Bounds. Shortcode: rtbd. Aligns glyphs by their apparent right extents at the right ends of horizontal lines of text, replacing the default behavior of aligning glyphs by their origins. This feature is called by the Optical Bounds ('opbd') feature. Right-to-left alternates. Shortcode: rtla. This feature applies glyphic variants (other than mirrored forms) appropriate for right-to-left text. (For mirrored forms, see 'rtlm'.) Right-to-left mirrored forms. Shortcode: rtlm. This feature applies mirrored forms appropriate for right-to-left text other than for those characters that would be covered by the character-level mirroring step performed by an OpenType layout engine. (For right-to-left glyph alternates, see 'rtla'.) Ruby Notation Forms. Shortcode: ruby. Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader. These are called “ruby”, from the old typesetting term for four-point-sized type. This feature identifies glyphs in the font which have been designed for this use, substituting them for the default designs. Required Variation Alternates. Shortcode: rvrn. his feature is used in fonts that support OpenType Font Variations in order to select alternate glyphs for particular variation instances. Stylistic Alternates. Shortcode: salt. Many fonts contain alternate glyph designs for a purely esthetic effect; these don’t always fit into a clear category like swash or historical. As in the case of swash glyphs, there may be more than one alternate form. This feature replaces the default forms with the stylistic alternates. Scientific Inferiors. Shortcode: sinf. Replaces lining or oldstyle figures with inferior figures (smaller glyphs which sit lower than the standard baseline, primarily for chemical or mathematical notation). May also replace lowercase characters with alphabetic inferiors. Optical size. Shortcode: size. This feature stores two kinds of information about the optical size of the font: design size (the point size for which the font is optimized) and size range (the range of point sizes which the font can serve well), as well as other information which helps applications use the size range. The design size is useful for determining proper tracking behavior. The size range is useful in families which have fonts covering several ranges. Additional values serve to identify the set of fonts which share related size ranges, and to identify their shared name. Note that sizes refer to nominal final output size, and are independent of viewing magnification or resolution. Small Capitals. Shortcode: smcp. This feature turns lowercase characters into small capitals. This corresponds to the common SC font layout. It is generally used for display lines set in Large and small caps, such as titles. Forms related to small capitals, such as oldstyle figures, may be included. Simplified Forms. Shortcode: smpl. Replaces “traditional” Chinese or Japanese forms with the corresponding “simplified” forms. Math script style alternates. Shortcode: ssty. This feature provides glyph variants adjusted to be more suitable for use in subscripts and superscripts. Stretching Glyph Decomposition. Shortcode: stch. Unicode characters, such as the Syriac Abbreviation Mark (U+070F), that enclose other characters need to be able to stretch in order to dynamically adapt to the width of the enclosed text. This feature defines a decomposition set consisting of an odd number of glyphs which describe the stretching glyph. The odd numbered glyphs in the decomposition are fixed reference points which are distributed evenly from the start to the end of the enclosed text. The even numbered glyphs may be repeated as necessary to fill the space between the fixed glyphs. The first and last glyphs may either be simple glyphs with width at the baseline, or mark glyphs. All other decomposition glyphs should have width, but must be defined as mark glyphs. Subscript. Shortcode: subs. The 'subs' feature may replace a default glyph with a subscript glyph, or it may combine a glyph substitution with positioning adjustments for proper placement. Superscript. Shortcode: sups. Replaces lining or oldstyle figures with superior figures (primarily for footnote indication), and replaces lowercase letters with superior letters (primarily for abbreviated French titles). Swash. Shortcode: swsh. This feature replaces default character glyphs with corresponding swash glyphs. Note that there may be more than one swash alternate for a given character. Titling. Shortcode: titl. This feature replaces the default glyphs with corresponding forms designed specifically for titling. These may be all-capital and/or larger on the body, and adjusted for viewing at larger sizes. Trailing Jamo Forms. Shortcode: tjmo. Substitutes the trailing jamo form of a cluster. Traditional Name Forms. Shortcode: tnam. Replaces “simplified” Japanese kanji forms with the corresponding “traditional” forms. This is equivalent to the Traditional Forms feature, but explicitly limited to the traditional forms considered proper for use in personal names (as many as 205 glyphs in some fonts). Tabular Figures. Shortcode: tnum. Replaces figure glyphs set on proportional widths with corresponding glyphs set on uniform (tabular) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs. Traditional Forms. Shortcode: trad. Replaces 'simplified' Chinese hanzi or Japanese kanji forms with the corresponding 'traditional' forms. Third Widths. Shortcode: twid. Replaces glyphs on other widths with glyphs set on widths of one third of an em. The characters involved are normally figures and some forms of punctuation. Unicase. Shortcode: unic. This feature maps upper- and lowercase letters to a mixed set of lowercase and small capital forms, resulting in a single case alphabet (for an example of unicase, see the Emigre type family Filosofia). The letters substituted may vary from font to font, as appropriate to the design. If aligning to the x-height, smallcap glyphs may be substituted, or specially designed unicase forms might be used. Substitutions might also include specially designed figures. Alternate Vertical Metrics. Shortcode: valt. Repositions glyphs to visually center them within full-height metrics, for use in vertical setting. Typically applies to full-width Latin glyphs, which are aligned on a common horizontal baseline and not rotated when set vertically in CJKV fonts. Vattu Variants. Shortcode: vatu. In an Indic consonant conjunct, substitutes a ligature glyph for a base consonant and a following vattu (below-base) form of a conjoining consonant, or for a half form of a consonant and a following vattu form. Vertical Alternates. Shortcode: vert. Transforms default glyphs into glyphs that are appropriate for upright presentation in vertical writing mode.While the glyphs for most characters in East Asian writing systems remain upright when set in vertical writing mode, some must be transformed — usually by rotation, shifting, or different component ordering — for vertical writing mode. Alternate Vertical Half Metrics. Shortcode: vhal. Respaces glyphs designed to be set on full-em heights, fitting them onto half-em heights. Vowel Jamo Forms. Shortcode: vjmo. Substitutes the vowel jamo form of a cluster. Vertical Kana Alternates. Shortcode: vkna. Replaces standard kana with forms that have been specially designed for only vertical writing. This is a typographic optimization for improved fit and more even color. Also see 'hkna'. Vertical Kerning. Shortcode: vkrn Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the vertical direction, this feature can supply size-dependent kerning data via device tables, “cross-stream” kerning in the X text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature applies only to text set vertically. Proportional Alternate Vertical Metrics. Shortcode: vpal. Respaces glyphs designed to be set on full-em heights, fitting them onto individual (more or less proportional) vertical heights. This differs from 'valt' in that it does not substitute new glyphs (GPOS, not GSUB feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit. Vertical Alternates and Rotation. Shortcode: vrt2. Replaces some fixed-width (half-, third- or quarter-width) or proportional-width glyphs (mostly Latin or katakana) with forms suitable for vertical writing (that is, rotated 90 degrees clockwise). Note that these are a superset of the glyphs covered in the 'vert' table. Vertical Alternates for Rotation. Shortcode: vrtr. Transforms default glyphs into glyphs that are appropriate for sideways presentation in vertical writing mode. While the glyphs for most characters in East Asian writing systems remain upright when set in vertical writing mode, glyphs for other characters — such as those of other scripts or for particular Western-style punctuation — are expected to be presented sideways in vertical writing. Slashed Zero. Shortcode: zero. Some fonts contain both a default form of zero, and an alternative form which uses a diagonal slash through the counter. Especially in condensed designs, it can be difficult to distinguish between 0 and O (zero and capital O) in any situation where capitals and lining figures may be arbitrarily mixed. This feature allows the user to change from the default 0 to a slashed form. The GSUB and GPOS tables use the Glyph Class Definition table (GlyphClassDef) to identify which glyph classes to adjust with lookups. Base glyph (single character, spacing glyph). Ligature glyph (multiple character, spacing glyph). Mark glyph (non-spacing combining glyph). Component glyph (part of single character, spacing glyph). The GDEF table contains three kinds of information in subtables: 1. glyph class definitions that classify different types of glyphs in a font; 2. attachment point lists that identify glyph positioning attachments for each glyph; and 3. ligature caret lists that provide information for caret positioning and text selection involving ligatures. Initializes a new instance of the class. The horizontal value, in design units. The vertical value, in design units. Gets the horizontal value, in design units. Gets the vertical value, in design units. Loads the anchor table. The big endian binary reader. The offset to the beginning of the anchor table. The anchor table. Represents the anchor coordinates for a given table. Gets the horizontal value, in design units. Gets the vertical value, in design units. Initializes a new instance of the class. The big endian binary reader. The offset to the beginning of the base array table. The class count. Gets the base records. Initializes a new instance of the struct. The big endian binary reader. The class count. Offset to the from beginning of BaseArray table. Gets the base anchor tables. Class2Record used in Pair Adjustment Positioning Format 2. A Class2Record consists of two ValueRecords, one for the first glyph in a class pair (valueRecord1) and one for the second glyph (valueRecord2). Note that both fields of a Class2Record are optional: If the PairPos subtable has a value of zero (0) for valueFormat1 or valueFormat2, then the corresponding record (valueRecord1 or valueRecord2) will be empty — that is, not present. Initializes a new instance of the struct. The big endian binary reader. The value format for value record 1. The value format for value record 2. Gets the positioning for the first glyph. Gets the positioning for second glyph. In a ComponentRecord, the zero-based ligatureAnchorOffsets array lists offsets to Anchor tables by mark class. If a component does not define an attachment point for a particular class of marks, then the offset to the corresponding Anchor table will be NULL. Example 8 at the end of this chapter shows a MarkLigPosFormat1 subtable used to attach mark accents to a ligature glyph in the Arabic script. Initializes a new instance of the class. The big endian binary reader. Number of defined mark classes. Offset from beginning of LigatureAttach table. Initializes a new instance of the class. The big endian binary reader. The offset to exitAnchor table, from beginning of CursivePos subtable. Offsets to entry and exit Anchor table, from beginning of CursivePos subtable. Gets the entry anchor table. Gets the exit anchor table. EntryExitRecord sued in Cursive Attachment Positioning Format1. Each EntryExitRecord consists of two offsets: one to an Anchor table that identifies the entry point on the glyph (entryAnchorOffset), and an offset to an Anchor table that identifies the exit point on the glyph (exitAnchorOffset). Initializes a new instance of the struct. The big endian binary reader. The offset to exitAnchor table, from beginning of CursivePos subtable. Gets the offset to entryAnchor table, from beginning of CursivePos subtable. Gets the offset to exitAnchor table, from beginning of CursivePos subtable. The LigatureArray table contains a count (ligatureCount) and an array of offsets (ligatureAttachOffsets) to LigatureAttach tables. The ligatureAttachOffsets array lists the offsets to LigatureAttach tables, one for each ligature glyph listed in the ligatureCoverage table, in the same order as the ligatureCoverage index. Initializes a new instance of the class. The big endian binary reader. The offset to the start of the ligature array table. Number of defined mark classes. Each LigatureAttach table consists of an array (componentRecords) and count (componentCount) of the component glyphs in a ligature. The array stores the ComponentRecords in the same order as the components in the ligature. The order of the records also corresponds to the writing direction — that is, the logical direction — of the text. For text written left to right, the first component is on the left; for text written right to left, the first component is on the right. Initializes a new instance of the class. The big endian binary reader. Number of defined mark classes. Offset from beginning of LigatureAttach table. The headers of the GSUB and GPOS tables contain offsets to Lookup List tables (LookupList) for glyph substitution (GSUB table) and glyph positioning (GPOS table). The LookupList table contains an array of offsets to Lookup tables (lookupOffsets). A Lookup table (Lookup) defines the specific conditions, type, and results of a substitution or positioning action that is used to implement a feature. For example, a substitution operation requires a list of target glyph indices to be replaced, a list of replacement glyph indices, and a description of the type of substitution action. A single adjustment positioning subtable (SinglePos) is used to adjust the placement or advance of a single glyph, such as a subscript or superscript. In addition, a SinglePos subtable is commonly used to implement lookup data for contextual positioning. A SinglePos subtable will have one of two formats: one that applies the same adjustment to a series of glyphs(Format 1), and one that applies a different adjustment for each unique glyph(Format 2). A pair adjustment positioning subtable (PairPos) is used to adjust the placement or advances of two glyphs in relation to one another — for instance, to specify kerning data for pairs of glyphs. Compared to a typical kerning table, however, a PairPos subtable offers more flexibility and precise control over glyph positioning. The PairPos subtable can adjust each glyph in a pair independently in both the X and Y directions, and it can explicitly describe the particular type of adjustment applied to each glyph. PairPos subtables can be either of two formats: one that identifies glyphs individually by index(Format 1), and one that identifies glyphs by class (Format 2). Cursive Attachment Positioning Subtable. Some cursive fonts are designed so that adjacent glyphs join when rendered with their default positioning. However, if positioning adjustments are needed to join the glyphs, a cursive attachment positioning (CursivePos) subtable can describe how to connect the glyphs by aligning two anchor points: the designated exit point of a glyph, and the designated entry point of the following glyph. Mark-to-Base Attachment Positioning Subtable. The MarkToBase attachment (MarkBasePos) subtable is used to position combining mark glyphs with respect to base glyphs. For example, the Arabic, Hebrew, and Thai scripts combine vowels, diacritical marks, and tone marks with base glyphs. Mark-to-Ligature Attachment Positioning Subtable. The MarkToLigature attachment (MarkLigPos) subtable is used to position combining mark glyphs with respect to ligature base glyphs. With MarkToBase attachment, described previously, each base glyph has an attachment point defined for each class of marks. MarkToLigature attachment is similar, except that each ligature glyph is defined to have multiple components (in a virtual sense — not actual glyphs), and each component has a separate set of attachment points defined for the different mark classes. Lookup Type 6: Mark-to-Mark Attachment Positioning Subtable. The MarkToMark attachment (MarkMarkPos) subtable is identical in form to the MarkToBase attachment subtable, although its function is different. MarkToMark attachment defines the position of one mark relative to another mark as when, for example, positioning tone marks with respect to vowel diacritical marks in Vietnamese. Lookup Type 7: Contextual Positioning Subtables. A Contextual Positioning subtable describes glyph positioning in context so a text-processing client can adjust the position of one or more glyphs within a certain pattern of glyphs. LookupType 8: Chained Contexts Positioning Subtable. A Chained Contexts Positioning subtable describes glyph positioning in context with an ability to look back and/or look ahead in the sequence of glyphs. The design of the Chained Contexts Positioning subtable is parallel to that of the Contextual Positioning subtable, including the availability of three formats. Each format can describe one or more chained backtrack, input, and lookahead sequence combinations, and one or more positioning adjustments for glyphs in each input sequence. This lookup provides a mechanism whereby any other lookup type’s subtables are stored at a 32-bit offset location in the GPOS table. This is needed if the total size of the subtables exceeds the 16-bit limits of the various other offsets in the GPOS table. In this specification, the subtable stored at the 32-bit offset location is termed the “extension” subtable. Initializes a new instance of the class. The big endian binary reader. The number of mark classes. The offset to the start of the mark array table. A Mark2Record declares one Anchor table for each mark class (including Class 0) identified in the MarkRecords of the MarkArray. Each Anchor table specifies one mark2 attachment point used to attach all the mark1 glyphs in a particular class to the mark2 glyph. Initializes a new instance of the class. The big endian binary reader. The Number of Mark2 records. Offset to the beginning of MarkArray table. Gets the mark anchor table. The MarkArray table defines the class and the anchor point for a mark glyph. Three GPOS subtable types — MarkToBase attachment, MarkToLigature attachment, and MarkToMark attachment — use the MarkArray table to specify data for attaching marks. The MarkArray table contains a count of the number of MarkRecords(markCount) and an array of those records(markRecords). Each mark record defines the class of the mark and an offset to the Anchor table that contains data for the mark. Initializes a new instance of the class. The big endian binary reader. The offset to the start of the mark array table. Gets the mark records. Defines a mark record used in a mark array table: Initializes a new instance of the struct. The big endian binary reader. Offset to the beginning of MarkArray table. Gets the class defined for the associated mark. Gets the mark anchor table. PairValueRecords are used in pair adjustment positioning subtables to adjust the placement or advances of two glyphs in relation to one another. Initializes a new instance of the struct. The big endian binary reader. The types of data in valueRecord1 — for the first glyph in the pair (may be zero). The types of data in valueRecord2 — for the first glyph in the pair (may be zero). Gets the second glyph ID. Gets the Positioning data for the first glyph in the pair. Gets the Positioning data for the second glyph in the pair. A ValueFormat flags field defines the types of positioning adjustment data that ValueRecords specify. GPOS subtables use ValueRecords to describe all the variables and values used to adjust the position of a glyph or set of glyphs. A ValueRecord may define any combination of X and Y values (in design units) to add to (positive values) or subtract from (negative values) the placement and advance values provided in the font. Initializes a new instance of the struct. The big endian binary reader. Defines the types of data in the ValueRecord. The Glyph Positioning table (GPOS) provides precise control over glyph placement for sophisticated text layout and rendering in each script and language system that a font supports. The headers of the GSUB and GPOS tables contain offsets to Lookup List tables (LookupList) for glyph substitution (GSUB table) and glyph positioning (GPOS table). The LookupList table contains an array of offsets to Lookup tables (lookupOffsets). A Lookup table (Lookup) defines the specific conditions, type, and results of a substitution or positioning action that is used to implement a feature. For example, a substitution operation requires a list of target glyph indices to be replaced, a list of replacement glyph indices, and a description of the type of substitution action. Single substitution (SingleSubst) subtables tell a client to replace a single glyph with another glyph. The subtables can be either of two formats. Both formats require two distinct sets of glyph indices: one that defines input glyphs (specified in the Coverage table), and one that defines the output glyphs. Format 1 requires less space than Format 2, but it is less flexible. A Multiple Substitution (MultipleSubst) subtable replaces a single glyph with more than one glyph, as when multiple glyphs replace a single ligature. The subtable has a single format: MultipleSubstFormat1. An Alternate Substitution (AlternateSubst) subtable identifies any number of aesthetic alternatives from which a user can choose a glyph variant to replace the input glyph. A Ligature Substitution (LigatureSubst) subtable identifies ligature substitutions where a single glyph replaces multiple glyphs. One LigatureSubst subtable can specify any number of ligature substitutions. The subtable has one format: LigatureSubstFormat1. A Contextual Substitution subtable describes glyph substitutions in context that replace one or more glyphs within a certain pattern of glyphs. A Chained Contexts Substitution subtable describes glyph substitutions in context with an ability to look back and/or look ahead in the sequence of glyphs. This lookup provides a mechanism whereby any other lookup type’s subtables are stored at a 32-bit offset location in the GSUB table. This is needed if the total size of the subtables exceeds the 16-bit limits of the various other offsets in the GSUB table. In this specification, the subtable stored at the 32-bit offset location is termed the "extension" subtable. An Alternate Substitution (AlternateSubst) subtable identifies any number of aesthetic alternatives from which a user can choose a glyph variant to replace the input glyph. The Glyph Substitution (GSUB) table provides data for substitution of glyphs for appropriate rendering of scripts, such as cursively-connecting forms in Arabic script, or for advanced typographic effects, such as ligatures. LookupFlag bit enumeration, see: https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#lookup-table This bit relates only to the correct processing of the cursive attachment lookup type (GPOS lookup type 3). When this bit is set, the last glyph in a given sequence to which the cursive attachment lookup is applied, will be positioned on the baseline. If set, skips over base glyphs. If set, skips over ligatures. If set, skips over all combining marks. If set, indicates that the lookup table structure is followed by a MarkFilteringSet field. The layout engine skips over all mark glyphs not in the mark filtering set indicated. For future use (Set to zero). If not zero, skips over all marks of attachment type different from specified. Provides enumeration determining when to zero mark advances. OpenType Layout fonts may contain one or more groups of glyphs used to render various scripts, which are enumerated in a ScriptList table. Both the GSUB and GPOS tables define Script List tables (ScriptList): For all formats for both contextual and chained contextual lookups, a common record format is used to specify an action—a nested lookup—to be applied to a glyph at a particular sequence position within the input sequence. This is a shaper for Arabic, and other cursive scripts. The shaping state machine was ported from fontkit. Assigns the features to each glyph within the collection. The glyph shaping collection. The zero-based index of the elements to assign. The number of elements to assign. Assigns the features to each glyph within the collection. The glyph shaping collection. The zero-based index of the elements to assign. The number of elements to assign. Assigns the preprocessing features to each glyph within the collection. The glyph shaping collection. The zero-based index of the elements to assign. The number of elements to assign. Assigns the postprocessing features to each glyph within the collection. The glyph shaping collection. The zero-based index of the elements to assign. The number of elements to assign. Assigns the shaper specific substitution features to each glyph within the collection. The glyph shaping collection. The zero-based index of the elements to assign. The number of elements to assign. Default shaper, which will be applied to all glyphs. Based on fontkit: This is a shaper for the Hangul script, used by the Korean language. The shaping state machine was ported from fontkit. The IndicShaper supports Indic scripts e.g. Devanagari, Kannada, etc. Creates a Shaper based on the given script language. The script language. The unicode script tag found in the font matching the script. The text options. A shaper for the given script. An individual shaping stage. Each stage must have a feature tag but can also contain pre and post feature processing operations. For comparison purposes we only care about the feature tag as we want to avoid duplication. This shaper is an implementation of the Universal Shaping Engine, which uses Unicode data to shape a number of scripts without a dedicated shaping engine. . Data type for tag identifiers. Tags are four byte integers, each byte representing a character. Tags are used to identify tables, design-variation axes, scripts, languages, font features, and baselines with human-readable names. Initializes a new instance of the struct. The tag value. Gets the Tag value as 32 bit unsigned integer. Converts the string representation of a number to its Tag equivalent. A string containing a tag to convert. The . Provides a map from Unicode to OTF . Prevents a default instance of the class from being created. Decodes the commands and numbers making up a Type 2 CharString. A Type 2 CharString extends on the Type 1 CharString format. Compared to the Type 1 format, the Type 2 encoding offers smaller size and an opportunity for better rendering quality and performance. The Type 2 charstring operators are (with one exception) a superset of the Type 1 operators. A Type 2 charstring program is a sequence of unsigned 8-bit bytes that encode numbers and operators. The byte value specifies a operator, a number, or subsequent bytes that are to be interpreted in a specific manner Represents a glyph metric from a particular Compact Font Face. The starting offset The length Parses a Compact Font Format (CFF) font program as described in The Compact Font Format specification (Adobe Technical Note #5176). A CFF font may contain multiple fonts and achieves compression by sharing details between fonts in the set. Latin 1 Encoding: ISO 8859-1 is a single-byte encoding that can represent the first 256 Unicode characters. Appendix A: Standard Strings Gets or sets the fd select map, which maps glyph # to font #. Represents an element in an font dictionary array. Gets the first glyph index in range Gets the font dictionary index for all glyphs in range Defines a common interface for CFF1 and CFF2 tables. Gets the number of glyphs in the table. Gets the glyph data at the given index. The glyph index. The . A ref struct stack implementation that uses a pooled span to store the data. The type of elements in the stack. Adds an item to the stack. The item to add. Removes the first element of the stack. The element. Removes the last element of the stack. The element. Clears the current stack. Used to apply a transform against any glyphs rendered by the engine. Subtable format 14 specifies the Unicode Variation Sequences (UVSes) supported by the font. A Variation Sequence, according to the Unicode Standard, comprises a base character followed by a variation selector. For example, <U+82A6, U+E0101>. Gets the unicode codepoints for which a glyph exists in the font. The . Gets the name of the font. The name of the font. Gets the name of the font. The name of the font. Gets the name of the font. The name of the font. Gets the name of the font. The name of the font. Defines the contract for shared font tables woff font table format. woff2 font table format. otf font table format. Represents a true type glyph control point. Gets or sets the position of the point. Gets or sets a value indicating whether the point is on a curve. Initializes a new instance of the struct. The position. Whether the point is on a curve. Represents the raw glyph outlines for a given glyph comprised of a collection of glyph table entries. The type is mutable by design to reduce copying during transformation. Transforms a glyph vector by a specified 3x2 matrix. The glyph vector to transform. The transformation matrix. Applies True Type hinting to the specified glyph vector. The hinting mode. The glyph vector to hint. The True Type interpreter. The first phantom point. The second phantom point. The third phantom point. The fourth phantom point. Creates a new glyph vector that is a deep copy of the specified instance. The source glyph vector to copy. The cloned . Returns a value indicating whether the current instance is empty. The indicating the result. Code adapted from For further information Represents a glyph metric from a particular TrueType font face. Gets the outline for the current glyph. The . Represents a font collection header (for .ttc font collections). A font collection contains one or more fonts where typically the glyf table is shared by multiple fonts to save space, but other tables are not. Each font in the collection has its own set of tables. Gets the tag, should be "ttcf". Gets the array of offsets to the OffsetTable of each font. Use for each font. Reads the UIntBase128 Data Type. The binary reader using big endian encoding. The result as uint. true, if succeeded. Reads the UIntBase255 Data Type. The binary reader using big endian encoding. The UIntBase255 result. Text alignment modes. Aligns text from the left or top when the text direction is and from the right or bottom when the text direction is . Aligns text from the right or bottom when the text direction is and from the left or top when the text direction is . Aligns text from the center. Provides enumeration of various text attributes. No attributes are applied The text set slightly below the normal line of type. The text set slightly above the normal line of type. Provides enumeration of various text decorations. No attributes are applied The text is underlined The text contains a horizontal line through the center. The text contains a horizontal line above it Specifies the writing direction for text. Left to right. Right to left. Automatically determined. Text justification modes. No justification The text is justified by adding space between words (effectively varying word-spacing), which is most appropriate for languages that separate words using spaces, like English or Korean. The text is justified by adding space between characters (effectively varying letter-spacing), which is most appropriate for languages like Japanese. Encapsulated logic or laying out text. Reorders a series of runs from logical to visual order, returning the left most run. The ordered bidi run. The . Encapsulated logic for laying out and then measuring text properties. Measures the advance (line-height and horizontal/vertical advance) of the text in pixel units. The text. The text shaping options. The advance of the text if it was to be rendered. Measures the advance (line-height and horizontal/vertical advance) of the text in pixel units. The text. The text shaping options. The advance of the text if it was to be rendered. Measures the minimum size required, in pixel units, to render the text. The text. The text shaping options. The size of the text if it was to be rendered. Measures the minimum size required, in pixel units, to render the text. The text. The text shaping options. The size of the text if it was to be rendered. Measures the text bounds in sub-pixel units. The text. The text shaping options. The bounds of the text if it was to be rendered. Measures the text bounds in sub-pixel units. The text. The text shaping options. The bounds of the text if it was to be rendered. Measures the advance (line-height and horizontal/vertical advance) of each character of the text in pixel units. The text. The text shaping options. The list of character advances of the text if it was to be rendered. Whether any of the characters had non-empty advances. Measures the advance (line-height and horizontal/vertical advance) of each character of the text in pixel units. The text. The text shaping options. The list of character advances of the text if it was to be rendered. Whether any of the characters had non-empty advances. Measures the minimum size required, in pixel units, to render each character in the text. The text. The text shaping options. The list of character dimensions of the text if it was to be rendered. Whether any of the characters had non-empty dimensions. Measures the minimum size required, in pixel units, to render each character in the text. The text. The text shaping options. The list of character dimensions of the text if it was to be rendered. Whether any of the characters had non-empty dimensions. Measures the character bounds of the text in sub-pixel units. The text. The text shaping options. The list of character bounds of the text if it was to be rendered. Whether any of the characters had non-empty bounds. Measures the character bounds of the text in sub-pixel units. The text. The text shaping options. The list of character bounds of the text if it was to be rendered. Whether any of the characters had non-empty bounds. Gets the number of lines contained within the text. The text. The text shaping options. The line count. Gets the number of lines contained within the text. The text. The text shaping options. The line count. Provides configuration options for rendering and shaping text. Initializes a new instance of the class. The font. Initializes a new instance of the class from properties copied from the given instance. The options whose properties are copied into this instance. Gets or sets the font. Gets or sets the collection of fallback font families to use when a specific glyph is missing from . Gets or sets the DPI (Dots Per Inch) to render/measure the text at. Defaults to 72. Gets or sets the width of the tab. Measured as the distance in spaces (U+0020). If value is -1 then the font default tab width is used. Gets or sets a value indicating whether to apply hinting - The use of mathematical instructions to adjust the display of an outline font so that it lines up with a rasterized grid. Gets or sets the line spacing. Applied as a multiple of the line height. Defaults to 1. Gets or sets the rendering origin. Gets or sets the length in pixel units (px) at which text will automatically wrap onto a new line. This property also affects the width or height (depending on the ) of the text box for alignment of text. If value is -1 then wrapping is disabled. Gets or sets the word breaking mode to use when wrapping text. Gets or sets the text direction. Gets or sets the text alignment of the text within the box. Gets or sets the justification of the text within the box. Gets or sets the horizontal alignment of the text box. Gets or sets the vertical alignment of the text box. Gets or sets the layout mode for the text lines. Gets or sets the kerning mode indicating whether to apply kerning (character spacing adjustments) to the glyph positions from information found within the font. Gets or sets a value indicating whether to enable various color font formats. Gets or sets the collection of additional feature tags to apply during glyph shaping. Gets or sets an optional collection of text runs to apply to the body of text. Encapsulated logic for laying out and then rendering text to a surface. Initializes a new instance of the class. The renderer. Renders the text to the . The target renderer. The text to render. The text options. Renders the text to the . The target renderer. The text to render. The text option. Renders the text to the default renderer. The text to render. The text options. Renders the text to the default renderer. The text to render. The style. Represents a run of text spanning a series of graphemes within a string. Gets or sets the inclusive start index of the first grapheme in this . Gets or sets the exclusive end index of the last grapheme in this . Gets or sets the font for this run. Gets or sets the text attributes applied to this run. Gets or sets the text decorations applied to this run. Returns the slice of the given text representing this . The text to slice. The . Represents the Unicode Arabic Joining value of a given . Initializes a new instance of the struct. The codepoint. Gets the Unicode joining type. Gets the Unicode joining group. Unicode Arabic Joining Groups . African_Feh African_Noon African_Qaf Ain Alaph Alef Beh Beth Burushaski_Yeh_Barree Dal Dalath_Rish E Farsi_Yeh Fe Feh Final_Semkath Gaf Gamal Hah Hanifi_Rohingya_Kinna_Ya Hanifi_Rohingya_Pa He Heh Heh_Goal Heth Kaf Kaph Khaph Knotted_Heh Lam Lamadh Malayalam_Bha Malayalam_Ja Malayalam_Lla Malayalam_Llla Malayalam_Nga Malayalam_Nna Malayalam_Nnna Malayalam_Nya Malayalam_Ra Malayalam_Ssa Malayalam_Tta Manichaean_Aleph Manichaean_Ayin Manichaean_Beth Manichaean_Daleth Manichaean_Dhamedh Manichaean_Five Manichaean_Gimel Manichaean_Heth Manichaean_Hundred Manichaean_Kaph Manichaean_Lamedh Manichaean_Mem Manichaean_Nun Manichaean_One Manichaean_Pe Manichaean_Qoph Manichaean_Resh Manichaean_Sadhe Manichaean_Samekh Manichaean_Taw Manichaean_Ten Manichaean_Teth Manichaean_Thamedh Manichaean_Twenty Manichaean_Waw Manichaean_Yodh Manichaean_Zayin Meem Mim No_Joining_Group Noon Nun Nya Pe Qaf Qaph Reh Reversed_Pe Rohingya_Yeh Sad Sadhe Seen Semkath Shin Straight_Waw Swash_Kaf Syriac_Waw Tah Taw Teh_Marbuta Hamza_On_Heh_Goal Teth Thin_Yeh Vertical_Tail Waw Yeh Yeh_Barree Yeh_With_Tail Yudh Yudh_He Zain Zhain Unicode Arabic Joining Types Table 9-3. Right Joining (R) Left Joining (L) Dual Joining (D) Join Causing (C) Non Joining (U) Transparent (T) Implementation of Unicode Bidirection Algorithm (UAX #9) https://unicode.org/reports/tr9/ The Bidi algorithm uses a number of memory arrays for resolved types, level information, bracket types, x9 removal maps and more... This implementation of the Bidi algorithm has been designed to reduce memory pressure on the GC by re-using the same work buffers, so instances of this class should be re-used as much as possible. The original BidiCharacterType types as provided by the caller Paired bracket types as provided by caller Paired bracket values as provided by caller Try if the incoming data is known to contain brackets True if the incoming data is known to contain embedding runs True if the incoming data is known to contain isolating runs Two directional mapping of isolate start/end pairs The forward mapping maps the start index to the end index. The reverse mapping maps the end index to the start index. The working BidiCharacterType types The buffer underlying _workingTypes The buffer underlying resolvedLevels The resolve paragraph embedding level The status stack used during resolution of explicit embedding and isolating runs Mapping used to virtually remove characters for rule X9 Re-usable list of level runs Mapping for the current isolating sequence, built by joining level runs from the x9 map. A stack of pending isolate openings used by FindIsolatePairs() The level of the isolating run currently being processed The direction of the isolating run currently being processed The length of the isolating run currently being processed A mapped slice of the resolved types for the isolating run currently being processed A mapped slice of the original types for the isolating run currently being processed A mapped slice of the run levels for the isolating run currently being processed A mapped slice of the paired bracket types of the isolating run currently being processed A mapped slice of the paired bracket values of the isolating run currently being processed Maximum pairing depth for paired brackets Reusable list of pending opening brackets used by the LocatePairedBrackets method Resolved list of paired brackets Initializes a new instance of the class. Gets a per-thread instance that can be re-used as often as necessary. Gets the resolved levels. Gets the resolved paragraph embedding level Process data from a BidiData instance The Bidi Unicode data. Processes Bidi Data Resolve the paragraph embedding level if not explicitly passed by the caller. Also used by rule X5c for FSI isolating sequences. The data to be evaluated The resolved embedding level Build a list of matching isolates for a directionality slice Implements BD9 Resolve the explicit embedding levels from the original data. Implements rules X1 to X8. Build a map to the original data positions that excludes all the types defined by rule X9 Find the original character index for an entry in the X9 map Index in the x9 removal map Index to the original data Add a new level run This method resolves the sos and eos values for the run and adds the run to the list /// The index of the start of the run (in x9 removed units) The length of the run (in x9 removed units) The level of the run Find all runs of the same level, populating the _levelRuns collection Given a character index, find the level run that starts at that position The index into the original (unmapped) data The index of the run that starts at that index Determine and the process all isolated run sequences Process a single isolated run sequence, where the character sequence mapping is currently held in _isolatedRunMapping. Locate all pair brackets in the current isolating run A sorted list of BracketPairs Inspect a paired bracket set and determine its strong direction The paired bracket to be inspected The direction of the bracket set content Look for a strong type before a paired bracket The paired bracket set to be inspected The sos in case nothing found before the bracket The strong direction before the brackets Sets the direction of a bracket pair, including setting the direction of NSM's inside the brackets and following. The paired brackets The resolved direction for the bracket pair Resets whitespace levels. Implements rule L1 Assign levels to any characters that would be have been removed by rule X9. The idea is to keep level runs together that would otherwise be broken by an interfering isolate/embedding control character. Check if a directionality type represents whitespace Convert a level to a direction where odd is RTL and even is LTR The level to convert A directionality Helper to check if a directionality is removed by rule X9 The bidi type to check True if rule X9 would remove this character; otherwise false Check if a a directionality is neutral for rules N1 and N2 Maps a direction to a strong type for rule N0 The direction to map A strong direction - R, L or ON Hold the start and end index of a pair of brackets Initializes a new instance of the struct. Index of the opening bracket Index of the closing bracket Gets the index of the opening bracket Gets the index of the closing bracket Status stack entry used while resolving explicit embedding levels Provides information about a level run - a continuous sequence of equal levels. Provides enumeration for the Unicode Bidirectional character types. . Left-to-right. Right-to-left. Arabic Letter. European Number European Separator European Terminator Arabic Number. Common Separator Nonspacing Mark. Boundary Neutral. Paragraph Separator Segment Separator White Space. Other Neutral. Left-to-right Embedding. Left-to-right Override Right-to-left Embedding Right-to-left Override. Pop Directional Format Left-to-right Isolate Right-to-left Isolate. First Strong Isolate Pop Directional Isolate. Represents the Unicode Bidi value of a given . Initializes a new instance of the struct. The codepoint. Gets the Unicode Bidirectional character type. Gets the Unicode Bidirectional paired bracket type. Gets the codepoint representing the bracket pairing for this instance. When this method returns, contains the codepoint representing the bracket pairing for this instance; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. . if this instance has a bracket pairing; otherwise, Represents a unicode string and all associated attributes for each character required for the Bidi algorithm Gets the length of the data held by the BidiData Gets the bidi character type of each code point Gets the paired bracket type for each code point Gets the paired bracket value for code point The paired bracket values are the code points of each character where the opening code point is replaced with the closing code point for easier matching. Also, bracket code points are mapped to their canonical equivalents Initialize with a text value. The text to process. The paragraph embedding level Save the Types and PairedBracketTypes of this bididata This is used when processing embedded style runs with BidiCharacterType overrides. TextLayout saves the data, overrides the style runs to neutral, processes the bidi data for the entire paragraph and then restores this data before processing the embedded runs. Restore the data saved by SaveTypes Gets a temporary level buffer. Used by TextLayout when resolving style runs with different BidiCharacterType. Length of the required ExpandableBuffer An uninitialized level ExpandableBuffer A simple bi-directional dictionary. Key type Value type Provides enumeration for classifying characters into opening and closing paired brackets for the purposes of the Unicode Bidirectional Algorithm. . None. Open. Close. Represents a Unicode value ([ U+0000..U+10FFFF ], inclusive). This type's constructors and conversion operators validate the input, so consumers can call the APIs assuming that the underlying instance is well-formed. Initializes a new instance of the struct. The char representing the UTF-16 code unit If represents a UTF-16 surrogate code point U+D800..U+DFFF, inclusive. Initializes a new instance of the struct. A char representing a UTF-16 high surrogate code unit. A char representing a UTF-16 low surrogate code unit. If does not represent a UTF-16 high surrogate code unit or does not represent a UTF-16 low surrogate code unit. Initializes a new instance of the struct. The value to create the codepoint. If does not represent a value Unicode scalar value. Initializes a new instance of the struct. The value to create the codepoint. If does not represent a value Unicode scalar value. Gets a value indicating whether this value is ASCII ([ U+0000..U+007F ]) and therefore representable by a single UTF-8 code unit. Gets a value indicating whether this value is within the BMP ([ U+0000..U+FFFF ]) and therefore representable by a single UTF-16 code unit. Gets the Unicode plane (0 to 16, inclusive) which contains this scalar. Gets the Unicode value as an integer. Gets the length in code units () of the UTF-16 sequence required to represent this scalar value. The return value will be 1 or 2. Gets the length in code units of the UTF-8 sequence required to represent this scalar value. The return value will be 1 through 4, inclusive. Gets a instance that represents the Unicode replacement character U+FFFD. Returns if is a valid Unicode code point, i.e., is in [ U+0000..U+10FFFF ], inclusive. The value to evaluate. if represents a valid codepoint; otherwise, Returns if is a valid Unicode code point, i.e., is in [ U+0000..U+10FFFF ], inclusive. The value to evaluate. if represents a valid codepoint; otherwise, Gets a value indicating whether the given codepoint is white space. The codepoint to evaluate. if is a whitespace character; otherwise, Gets a value indicating whether the given codepoint is a non-breaking space. The codepoint to evaluate. if is a non-breaking space character; otherwise, Gets a value indicating whether the given codepoint is a zero-width-non-joiner. The codepoint to evaluate. if is a zero-width-non-joiner character; otherwise, Gets a value indicating whether the given codepoint is a zero-width-joiner. The codepoint to evaluate. if is a zero-width-joiner character; otherwise, Gets a value indicating whether the given codepoint is a variation selector. The codepoint to evaluate. if is a variation selector character; otherwise, Gets a value indicating whether the given codepoint is a control character. The codepoint to evaluate. if is a control character; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a decimal digit. The codepoint to evaluate. if is a decimal digit; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a letter. The codepoint to evaluate. if is a letter; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a letter or decimal digit. The codepoint to evaluate. if is a letter or decimal digit; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a lowercase letter. The codepoint to evaluate. if is a lowercase letter; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a number. The codepoint to evaluate. if is a number; otherwise, Returns a value that indicates whether the specified codepoint is categorized as punctuation. The codepoint to evaluate. if is punctuation; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a separator. The codepoint to evaluate. if is a separator; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a symbol. The codepoint to evaluate. if is a symbol; otherwise, Returns a value that indicates whether the specified codepoint is categorized as a mark. The codepoint to evaluate. if is a symbol; otherwise, Returns a value that indicates whether the specified codepoint is categorized as an uppercase letter. The codepoint to evaluate. if is a uppercase letter; otherwise, Gets a value indicating whether the given codepoint is a tabulation indicator. The codepoint to evaluate. if is a tabulation indicator; otherwise, Gets a value indicating whether the given codepoint is a new line indicator. The codepoint to evaluate. if is a new line indicator; otherwise, Returns the number of codepoints in a given string buffer. The source buffer to parse. The count. Gets the canonical representation of a given codepoint. The code point to be mapped. The mapped canonical code point, or the passed . Gets the for the given codepoint. The codepoint to evaluate. The . Gets the codepoint representing the bidi mirror for this instance. The code point to be mapped. When this method returns, contains the codepoint representing the bidi mirror for this instance; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. . if this instance has a mirror; otherwise, Gets the codepoint representing the vertical mirror for this instance. The code point to be mapped. When this method returns, contains the codepoint representing the vertical mirror for this instance; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. . if this instance has a mirror; otherwise, Gets the for the given codepoint. The codepoint to evaluate. The . Gets the for the given codepoint. The codepoint to evaluate. The . Gets the for the given codepoint. The codepoint to evaluate. The . Gets the for the given codepoint. The codepoint to evaluate. The . Gets the for the given codepoint. The codepoint to evaluate. The . Gets the for the given codepoint. The codepoint to evaluate. The . Gets the for the given codepoint. The codepoint to evaluate. The . Gets the for the given codepoint. The codepoint to evaluate. The . Reads the at specified position. The text to read from. The index to read at. The count of chars consumed reading the buffer. The . Decodes the from the provided UTF-16 source buffer at the specified position. The buffer to read from. The index to read at. The . Decodes the from the provided UTF-16 source buffer at the specified position. The buffer to read from. The index to read at. The count of chars consumed reading the buffer. The . Returns this instance displayed as "'<char>' (U+XXXX)"; e.g., "'e' (U+0065)" The . Unicode Grapheme Cluster classes. This is not a property value; it is used in the rules to represent any code point. U+000D CARRIAGE RETURN (CR) U+000A LINE FEED (LF) General_Category = Line_Separator, or
General_Category = Paragraph_Separator, or
General_Category = Control, or
General_Category = Unassigned and Default_Ignorable_Code_Point, or
General_Category = Format
and not U+000D CARRIAGE RETURN
and not U+000A LINE FEED
and not U+200C ZERO WIDTH NON-JOINER (ZWNJ)
and not U+200D ZERO WIDTH JOINER (ZWJ)
and not Prepended_Concatenation_Mark = Yes
Grapheme_Extend = Yes, or
Emoji_Modifier = Yes
This includes:
General_Category = Nonspacing_Mark
General_Category = Enclosing_Mark
U+200C ZERO WIDTH NON-JOINER
plus a few General_Category = Spacing_Mark needed for canonical equivalence.
Regional_Indicator = Yes
This consists of the range:
U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A ..U+1F1FF REGIONAL INDICATOR SYMBOL LETTER Z
Indic_Syllabic_Category = Consonant_Preceding_Repha, or
Indic_Syllabic_Category = Consonant_Prefixed, or
Prepended_Concatenation_Mark = Yes
Grapheme_Cluster_Break ≠ Extend, and
General_Category = Spacing_Mark, or
any of the following (which have General_Category = Other_Letter):
U+0E33 ( ำ ) THAI CHARACTER SARA AM
U+0EB3 ( ຳ ) LAO VOWEL SIGN AM
Hangul_Syllable_Type = L, such as:
U+1100 ( ᄀ ) HANGUL CHOSEONG KIYEOK
U+115F ( ᅟ ) HANGUL CHOSEONG FILLER
U+A960 ( ꥠ ) HANGUL CHOSEONG TIKEUT-MIEUM
U+A97C ( ꥼ ) HANGUL CHOSEONG SSANGYEORINHIEUH
Hangul_Syllable_Type=V, such as:
U+1160 ( ᅠ ) HANGUL JUNGSEONG FILLER
U+11A2 ( ᆢ ) HANGUL JUNGSEONG SSANGARAEA
U+D7B0 ( ힰ ) HANGUL JUNGSEONG O-YEO
U+D7C6 ( ퟆ ) HANGUL JUNGSEONG ARAEA-E
Hangul_Syllable_Type = T, such as:
U+11A8 ( ᆨ ) HANGUL JONGSEONG KIYEOK
U+11F9 ( ᇹ ) HANGUL JONGSEONG YEORINHIEUH
U+D7CB ( ퟋ ) HANGUL JONGSEONG NIEUN-RIEUL
U+D7FB ( ퟻ ) HANGUL JONGSEONG PHIEUPH-THIEUTH
Hangul_Syllable_Type=LV, that is:
U+AC00 ( 가 ) HANGUL SYLLABLE GA
U+AC1C ( 개 ) HANGUL SYLLABLE GAE
U+AC38 ( 갸 ) HANGUL SYLLABLE GYA
Hangul_Syllable_Type=LVT, that is:
U+AC01 ( 각 ) HANGUL SYLLABLE GAG
U+AC02 ( 갂 ) HANGUL SYLLABLE GAGG
U+AC03 ( 갃 ) HANGUL SYLLABLE GAGS
U+AC04 ( 간 ) HANGUL SYLLABLE GAN
Extended Pictographic U+200D ZERO WIDTH JOINER Unicode Indic Positional Categories. Bottom Bottom_And_Left Bottom_And_Right Left Left_And_Right NA Overstruck Right Top Top_And_Bottom Top_And_Bottom_And_Left Top_And_Bottom_And_Right Top_And_Left Top_And_Left_And_Right Top_And_Right Visual_Order_Left Unicode Indic Syllabic Categories. Avagraha. Bindu. Brahmi_Joining_Number. Cantillation_Mark. Consonant Consonant_Dead Consonant_Final Consonant_Head_Letter Consonant_Initial_Postfixed Consonant_Killer Consonant_Medial Consonant_Placeholder Consonant_Preceding_Repha Consonant_Prefixed Consonant_Subjoined Consonant_Succeeding_Repha Consonant_With_Stacker Gemination_Mark Invisible_Stacker Joiner Modifying_Letter Non_Joiner Nukta Number Number_Joiner Other Pure_Killer Register_Shifter Syllable_Modifier Tone_Letter Tone_Mark Virama Visarga Vowel Vowel_Dependent Vowel_Independent Information about a potential line break position. Initializes a new instance of the struct. The code point index to measure to The code point index to actually break the line at True if this is a required line break; otherwise false Gets the break position, before any trailing whitespace. This doesn't include trailing whitespace. Gets the break position, after any trailing whitespace. This includes trailing whitespace. Gets a value indicating whether there should be a forced line break here. Unicode line break classes. Open punctuation Closing punctuation Closing parenthesis Ambiguous quotation Glue Non-starters Exclamation/Interrogation Symbols allowing break after Infix separator Prefix Postfix Numeric Alphabetic Hebrew Letter Ideographic Inseparable characters Hyphen Break after Break before Break on either side (but not pair) Zero-width space Combining marks Word joiner Hangul LV Hangul LVT Hangul L Jamo Hangul V Jamo Hangul T Jamo Regional Indicator Emoji Base Emoji Modifier Zero Width Joiner Contingent break Ambiguous (Alphabetic or Ideograph) Break (mandatory) Conditional Japanese Starter Carriage return Line feed Next line South-East Asian Surrogates Space Unknown Supports a simple iteration over a linebreak collection. Implementation of the Unicode Line Break Algorithm. UAX:14 Methods are pattern-matched by compiler to allow using foreach pattern. Returns an enumerator that iterates through the collection. An enumerator that iterates through the collection. Advances the enumerator to the next element of the collection. if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the collection. Direct break opportunity Indirect break opportunity Indirect break opportunity for combining marks Prohibited break for combining marks Prohibited break Contains extensions methods for memory types. Returns an enumeration of from the provided span. The readonly span of char elements representing the text to enumerate. Invalid sequences will be represented in the enumeration by . The . Returns an enumeration of from the provided span. The span of char elements representing the text to enumerate. Invalid sequences will be represented in the enumeration by . The . Returns the number of code points in the provided text. The text to enumerate. The count. Returns the number of code points in the provided span. The readonly span of char elements representing the text to enumerate. The count. Returns the number of code points in the provided span. The span of char elements representing the text to enumerate. The count. Returns an enumeration of Grapheme instances from the provided span. The readonly span of char elements representing the text to enumerate. Invalid sequences will be represented in the enumeration by . The . Returns an enumeration of Grapheme instances from the provided span. The span of char elements representing the text to enumerate. Invalid sequences will be represented in the enumeration by . The . Returns the number of graphemes in the provided text. The text to enumerate. The count. Returns the number of graphemes in the provided span. The readonly span of char elements representing the text to enumerate. The count. Returns the number of graphemes in the provided span. The span of char elements representing the text to enumerate. The count. Reph formed out of initial Ra,H sequence. Reph formed out of initial Ra,H,ZWJ sequence. Encoded Repha character, no reordering needed. Encoded Repha character, needs reordering. Below-forms feature applied to pre-base and post-base. Below-forms feature applied to post-base only. Unicode Script classes Shortcode: Zzzz Shortcode: Zyyy Shortcode: Zinh, Qaai Shortcode: Adlm Shortcode: Aghb Shortcode: Ahom Shortcode: Arab Shortcode: Armi Shortcode: Armn Shortcode: Avst Shortcode: Bali Shortcode: Bamu Shortcode: Bass Shortcode: Batk Shortcode: Beng Shortcode: Bhks Shortcode: Bopo Shortcode: Brah Shortcode: Brai Shortcode: Bugi Shortcode: Buhd Shortcode: Cakm Shortcode: Cans Shortcode: Cari Shortcode: Cham Shortcode: Cher Shortcode: Chrs Shortcode: Copt, Qaac Shortcode: Cpmn Shortcode: Cprt Shortcode: Cyrl Shortcode: Deva Shortcode: Diak Shortcode: Dogr Shortcode: Dsrt Shortcode: Dupl Shortcode: Egyp Shortcode: Elba Shortcode: Elym Shortcode: Ethi Shortcode: Geor Shortcode: Glag Shortcode: Gong Shortcode: Gonm Shortcode: Goth Shortcode: Gran Shortcode: Grek Shortcode: Gujr Shortcode: Guru Shortcode: Hang Shortcode: Hani Shortcode: Hano Shortcode: Hatr Shortcode: Hebr Shortcode: Hira Shortcode: Hluw Shortcode: Hmng Shortcode: Hmnp Shortcode: Hrkt Shortcode: Hung Shortcode: Ital Shortcode: Java Shortcode: Kali Shortcode: Kana Shortcode: Khar Shortcode: Khmr Shortcode: Khoj Shortcode: Kits Shortcode: Knda Shortcode: Kthi Shortcode: Lana Shortcode: Laoo Shortcode: Latn Shortcode: Lepc Shortcode: Limb Shortcode: Lina Shortcode: Linb Shortcode: Lisu Shortcode: Lyci Shortcode: Lydi Shortcode: Mahj Shortcode: Maka Shortcode: Mand Shortcode: Mani Shortcode: Marc Shortcode: Medf Shortcode: Mend Shortcode: Merc Shortcode: Mero Shortcode: Mlym Shortcode: Modi Shortcode: Mong Shortcode: Mroo Shortcode: Mtei Shortcode: Mult Shortcode: Mymr Shortcode: Nand Shortcode: Narb Shortcode: Nbat Shortcode: Newa Shortcode: Nkoo Shortcode: Nshu Shortcode: Ogam Shortcode: Olck Shortcode: Orkh Shortcode: Orya Shortcode: Osge Shortcode: Osma Shortcode: Ougr Shortcode: Palm Shortcode: Pauc Shortcode: Perm Shortcode: Phag Shortcode: Phli Shortcode: Phlp Shortcode: Phnx Shortcode: Plrd Shortcode: Prti Shortcode: Rjng Shortcode: Rohg Shortcode: Runr Shortcode: Samr Shortcode: Sarb Shortcode: Saur Shortcode: Sgnw Shortcode: Shaw Shortcode: Shrd Shortcode: Sidd Shortcode: Sind Shortcode: Sinh Shortcode: Sogd Shortcode: Sogo Shortcode: Sora Shortcode: Soyo Shortcode: Sund Shortcode: Sylo Shortcode: Syrc Shortcode: Tagb Shortcode: Takr Shortcode: Tale Shortcode: Talu Shortcode: Taml Shortcode: Tang Shortcode: Tavt Shortcode: Telu Shortcode: Tfng Shortcode: Tglg Shortcode: Thaa Shortcode: Thai Shortcode: Tibt Shortcode: Tirh Shortcode: Tnsa Shortcode: Toto Shortcode: Ugar Shortcode: Vaii Shortcode: Vith Shortcode: Wara Shortcode: Wcho Shortcode: Xpeo Shortcode: Xsux Shortcode: Yezi Shortcode: Yiii Shortcode: Zanb An enumerator for retrieving instances from a . Methods are pattern-matched by compiler to allow using foreach pattern. Initializes a new instance of the struct. The buffer to read from. Gets the element in the collection at the current position of the enumerator. Returns an enumerator that iterates through the collection. An enumerator that iterates through the collection. Advances the enumerator to the next element of the collection. if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the collection. An enumerator for retrieving Grapheme instances from a .
Implements the Unicode Grapheme Cluster Algorithm. UAX:29
Methods are pattern-matched by compiler to allow using foreach pattern.
Initializes a new instance of the struct. The buffer to read from. Gets the element in the collection at the current position of the enumerator. Returns an enumerator that iterates through the collection. An enumerator that iterates through the collection. Advances the enumerator to the next element of the collection. if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the collection. A read-only Trie, holding 32 bit data values. A UnicodeTrie is a highly optimized data structure for mapping from Unicode code points(values ranging from 0 to 0x10ffff) to a 32 bit value. Initializes a new instance of the class. The stream containing the compressed data. Initializes a new instance of the class. The uncompressed trie data. The start of the last range which ends at U+10ffff. The value for out-of-range code points and illegal UTF-8. Get the value for a code point as stored in the trie. The code point. The value. Saves the to the stream in a compressed format. The output stream. Builder class to manipulate and generate a trie. This is useful for ICU data in primitive types. Provides a compact way to store information that is indexed by Unicode values, such as character properties, types, keyboard values, etc. This is very useful when you have a block of Unicode data that contains significant values while the rest of the Unicode data is unused in the application or when you have a lot of redundance, such as where all 21,000 Han ideographs have the same value. However, lookup is much faster than a hash table. A trie of any primitive data type serves two purposes:
  • Fast access of the indexed values.
  • Smaller memory footprint.
Initializes a new instance of the class. The initial value that is set for all code points. The value for out-of-range code points and illegal UTF-8. Gets the value for a code point as stored in the trie. The code point. The value. Sets a value for a given code point. The code point. The value. Set a value in a range of code points [start..end]. All code points c with start <= c <= end will get the value if is or if the old value is the initial value. The first code point to get the value. The last code point to get the value (inclusive). The value. Whether old non-initial values are to be overwritten. Compacts the data and populates an optimized readonly Trie. The . Is this code point a lead surrogate (U+d800..U+dbff)? The code point. The . Returns if is an ASCII character ([ U+0000..U+007F ]). Per http://www.unicode.org/glossary/#ASCII, ASCII is only U+0000..U+007F. Returns if is in the Basic Multilingual Plane (BMP). Gets the codepoint value representing the vertical mirror for this instance.

The representing the mirror or 0u if not found.
Returns if is a Chinese/Japanese/Korean (CJK) character. Returns if is a Default Ignorable Code Point. Returns the Unicode plane (0 through 16, inclusive) which contains this code point. Given a Unicode scalar value, gets the number of UTF-16 code units required to represent this value. Given a Unicode scalar value, gets the number of UTF-8 code units required to represent this value. Returns if is a valid Unicode code point, i.e., is in [ U+0000..U+10FFFF ], inclusive. Returns if is a UTF-16 high surrogate code point, i.e., is in [ U+D800..U+DBFF ], inclusive. Returns if is a UTF-16 low surrogate code point, i.e., is in [ U+DC00..U+DFFF ], inclusive. Returns if is a UTF-16 surrogate code point, i.e., is in [ U+D800..U+DFFF ], inclusive. Returns if is between and , inclusive. Returns a Unicode scalar value from two code points representing a UTF-16 surrogate pair. Decomposes an astral Unicode code point into UTF-16 high and low surrogate code units. Formats a code point as the hex string "U+XXXX". The input value doesn't have to be a real code point in the Unicode codespace. It can be any integer. Unicode Vertical Orientation types. Characters which are displayed upright, with the same orientation that appears in the code charts. Characters which are displayed sideways, rotated 90 degrees clockwise compared to the code charts. Characters which are not just upright or sideways, but generally require a different glyph than in the code charts when used in vertical texts. In addition, as a fallback, the character can be displayed with the code chart glyph upright. Same as except that, as a fallback, the character can be displayed with the code chart glyph rotated 90 degrees clockwise. Converts encoding ID to TextEncoding Converts encoding ID to TextEncoding The identifier. the encoding for this encoding ID Vertical alignment modes. Aligns downward from the top. Aligns text up and down from the middle. Aligns text upwards from the bottom Represent the metrics of a font face specific to vertical text. Gets or sets a value indicating whether the metrics have been synthesized. Encoding IDS Unicode 1.0 semantics Unicode 1.1 semantics ISO/IEC 10646 semantics Unicode 2.0 and onwards semantics, Unicode BMP only (cmap subtable formats 0, 4, 6). Unicode 2.0 and onwards semantics, Unicode full repertoire (cmap subtable formats 0, 4, 6, 10, 12). Unicode Variation Sequences (cmap subtable format 14). Unicode full repertoire (cmap subtable formats 0, 4, 6, 10, 12, 13) Provides enumeration of common name ids The copyright notice The font family name; Up to four fonts can share the Font Family name, forming a font style linking group (regular, italic, bold, bold italic — as defined by OS/2.fsSelection bit settings). The font subfamily name; The Font Subfamily name distinguishes the font in a group with the same Font Family name (name ID 1). This is assumed to address style (italic, oblique) and weight (light, bold, black, etc.). A font with no particular differences in weight or style (e.g. medium weight, not italic and fsSelection bit 6 set) should have the string "Regular" stored in this position. The unique font identifier The full font name; a combination of strings 1 and 2, or a similar human-readable variant. If string 2 is "Regular", it is sometimes omitted from name ID 4. Version string. Should begin with the syntax 'Version <number>.<number>' (upper case, lower case, or mixed, with a space between "Version" and the number). The string must contain a version number of the following form: one or more digits (0-9) of value less than 65,535, followed by a period, followed by one or more digits of value less than 65,535. Any character other than a digit will terminate the minor number. A character such as ";" is helpful to separate different pieces of version information. The first such match in the string can be used by installation software to compare font versions. Note that some installers may require the string to start with "Version ", followed by a version number as above. Postscript name for the font; Name ID 6 specifies a string which is used to invoke a PostScript language font that corresponds to this OpenType font. When translated to ASCII, the name string must be no longer than 63 characters and restricted to the printable ASCII subset, codes 33 to 126, except for the 10 characters '[', ']', '(', ')', '{', '}', '<', '>', '/', '%'. In a CFF OpenType font, there is no requirement that this name be the same as the font name in the CFF’s Name INDEX. Thus, the same CFF may be shared among multiple font components in a Font Collection. See the 'name' table section of Recommendations for OpenType fonts "" for additional information. Trademark; this is used to save any trademark notice/information for this font. Such information should be based on legal advice. This is distinctly separate from the copyright. The manufacturer Designer; name of the designer of the typeface. Description; description of the typeface. Can contain revision information, usage recommendations, history, features, etc. URL Vendor; URL of font vendor (with protocol, e.g., http://, ftp://). If a unique serial number is embedded in the URL, it can be used to register the font. URL Designer; URL of typeface designer (with protocol, e.g., http://, ftp://). License Description; description of how the font may be legally used, or different example scenarios for licensed use. This field should be written in plain language, not legalese. License Info URL; URL where additional licensing information can be found. Typographic Family name: The typographic family grouping doesn't impose any constraints on the number of faces within it, in contrast with the 4-style family grouping (ID 1), which is present both for historical reasons and to express style linking groups. If name ID 16 is absent, then name ID 1 is considered to be the typographic family name. (In earlier versions of the specification, name ID 16 was known as "Preferred Family".) Typographic Subfamily name: This allows font designers to specify a subfamily name within the typographic family grouping. This string must be unique within a particular typographic family. If it is absent, then name ID 2 is considered to be the typographic subfamily name. (In earlier versions of the specification, name ID 17 was known as "Preferred Subfamily".) Sample text; This can be the font name, or any other text that the designer thinks is the best sample to display the font in. platforms ids Unicode platform Script manager code [deprecated] ISO encoding Window encoding Custom platform Defines modes to determine when line breaks should appear when words overflow their content box. Use the default line break rule. To prevent overflow, word breaks should be inserted between any two characters (excluding Chinese/Japanese/Korean text). Word breaks should not be used for Chinese/Japanese/Korean (CJK) text. Non-CJK text behavior is the same as for Uses a combination of and rules in that order. Provides methods to protect against invalid parameters for a DEBUG build. Ensures that the value is not null. The target object, which cannot be null. The name of the parameter that is to be checked. The type of the value. is null. Ensures that the target value is not null, empty, or whitespace. The target string, which should be checked against being null or empty. Name of the parameter. is null. is empty or contains only blanks. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. The type of the value. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. The type of the value. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. The type of the value. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. The type of the value. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. The type of the value. is less than the minimum value of greater than the maximum value. Verifies, that the method parameter with specified target value is true and throws an exception if it is found to be so. The target value, which cannot be false. The name of the parameter that is to be checked. The error message, if any to add to the exception. is false. Verifies, that the method parameter with specified target value is false and throws an exception if it is found to be so. The target value, which cannot be true. The name of the parameter that is to be checked. The error message, if any to add to the exception. is true. Verifies, that the `source` span has the length of 'minLength', or longer. The element type of the spans. The source span. The minimum length. The name of the parameter that is to be checked. has less than items. Verifies, that the `source` span has the length of 'minLength', or longer. The element type of the spans. The target span. The minimum length. The name of the parameter that is to be checked. has less than items. Verifies that the 'destination' span is not shorter than 'source'. The source element type. The destination element type. The source span. The destination span. The name of the argument for 'destination'. Verifies that the 'destination' span is not shorter than 'source'. The source element type. The destination element type. The source span. The destination span. The name of the argument for 'destination'. Provides methods to protect against invalid parameters. Provides methods to protect against invalid parameters. Ensures that the value is not null. The target object, which cannot be null. The name of the parameter that is to be checked. The type of the value. is null. Ensures that the target value is not null, empty, or whitespace. The target string, which should be checked against being null or empty. Name of the parameter. is null. is empty or contains only blanks. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. The type of the value. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. The type of the value. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. The type of the value. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. The type of the value. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. The type of the value. is less than the minimum value of greater than the maximum value. Verifies, that the method parameter with specified target value is true and throws an exception if it is found to be so. The target value, which cannot be false. The name of the parameter that is to be checked. The error message, if any to add to the exception. is false. Verifies, that the method parameter with specified target value is false and throws an exception if it is found to be so. The target value, which cannot be true. The name of the parameter that is to be checked. The error message, if any to add to the exception. is true. Verifies, that the `source` span has the length of 'minLength', or longer. The element type of the spans. The source span. The minimum length. The name of the parameter that is to be checked. has less than items. Verifies, that the `source` span has the length of 'minLength', or longer. The element type of the spans. The target span. The minimum length. The name of the parameter that is to be checked. has less than items. Verifies that the 'destination' span is not shorter than 'source'. The source element type. The destination element type. The source span. The destination span. The name of the argument for 'destination'. Verifies that the 'destination' span is not shorter than 'source'. The source element type. The destination element type. The source span. The destination span. The name of the argument for 'destination'. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Ensures that the specified value is less than a maximum value. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The maximum value. The name of the parameter that is to be checked. is greater than the maximum value. Verifies that the specified value is greater than a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The name of the parameter that is to be checked. is less than the minimum value. Verifies that the specified value is greater than or equal to a minimum value and less than or equal to a maximum value and throws an exception if it is not. The target value, which should be validated. The minimum value. The maximum value. The name of the parameter that is to be checked. is less than the minimum value of greater than the maximum value. Helper methods to throw exceptions Throws an when fails. Throws an when fails. Throws an when fails. Throws an when fails. Throws an when fails. Throws an when fails. Throws an when fails. Throws an when fails. Throws a new . The message to include in the exception. The argument name. Thrown with and . Throws a new . The argument name. The message to include in the exception. Thrown with and . Throws a new . The argument name. The message to include in the exception. Thrown with and . Initializes a new instance of the class. The state table. The accepting states. The tags. Gets the state table. Gets the accepting states. Gets the tags. Returns an iterable object that yields pattern matches over the input sequence. The input sequence. The . For each match over the input sequence, action functions matching the tag definitions in the input pattern are called with the startIndex, length, and the sequence to be sliced. The input sequence. The collection of actions. Defines an AST node. Gets the following position. Gets a value indicating whether this node is nullable. Gets the number of child nodes in this node. Gets or sets the node at the given position. The index of the node. The node at the given position. Calculates the follow position for this instance. Returns a copy of the node. The . Defines a logical AST node. Gets the collection of nodes as the first position. Gets the collection of nodes at the last position. The base AST node. Represents a variable reference. Represents a comment. Represents an assignment statement. e.g. `variable = expression;` Represents an alternation. e.g. `a | b` Represents a concatenation, or chain. e.g. `a b c` Represents a repetition. e.g. `a+`, `b*`, or `c?` Base class for leaf nodes. Represents a literal value, e.g. a number. Marks the end of an expression. Represents a tag e.g. `a:(a b)`. Builds a repetition of the given expression. The expression to repeat. The minimum value to repeat. The maximum number to repeat. THe . Thrown if is out of range. Concatenates two nodes. The first node. The second node. The combined . Creates a union of two node sequences. The first node sequence. The second node sequence. The . Adds all the elements from set to . The first node sequence. The second node sequence. Determines whether two sets are equal. The first node sequence. The second node sequence. The