----------- -- Lua bindings to Harfbuzz. -- * [Wiki](http://github.com/ufytex/luaharfbuzz/wiki) -- * [Source on Github](https://github.com/ufytex/luaharfbuzz) -- * [API Coverage Status](https://github.com/ufytex/luaharfbuzz/blob/master/status/done.txt) -- -- @author Deepak Jois <> -- @copyright 2016 -- @license MIT -- @module harfbuzz --- Wraps `hb_version` -- @function version --- Wraps `hb_shape`. -- @param font `Font` to use for shaping -- -- @param buffer `Buffer` to shape -- -- @param[opt] options table containing one or more supported options: -- -- * `direction`: A `Direction` object representing the object. -- * `script`: A `Script` object representing the script. -- * `language`: A `Language` object representing the language. -- * `features`: features to enable, specified as either of the following. -- - comma-separated list of features. See [feature string syntax reference](https://github.com/ufytex/luaharfbuzz/wiki/Feature-Strings) -- - table of `Feature` objects -- @function shape --- Lua wrapper for `hb_blob_t` type -- @type Blob --- Wraps `hb_blob_create`. -- Initializes a new `hb_blob_t`. -- @param data lua string containing binary or character data. -- @function Blob.new --- Wraps `hb_blob_create_from_file`. -- Initializes a new `hb_blob_t`. -- @param filename lua string. -- @function Blob.new_from_file --- Wraps `hb_blob_get_length`. -- @function Blob:get_length --- Wraps `hb_blob_get_data`. -- @function Blob:get_data --- Lua wrapper for `hb_face_t` type -- @type Face --- Wraps `hb_face_create`. -- Initializes a new `hb_face_t` from a `Blob` object. -- @param blob `Blob` to read the font from. -- @param[opt=0] font_index index of font to read. -- @function Face.new_from_blob --- Create a new `Face` from a file. -- Makes a call to `Face:new_from_blob` after creating a `Blob` from the -- file contents. -- @param file path to font file. -- @param[opt=0] font_index index of font to read. -- @function Face.new --- Wraps `hb_face_collect_unicodes`. -- @return table of codepoints supported by the face. -- @function Face:collect_unicodes --- Wraps `hb_face_get_glyph_count`. -- @function Face:get_glyph_count --- Wraps `hb_face_reference_table`. -- @param tag `Tag` object of the table. -- @return `Blob` object for the face table of `tag`. -- @function Face:get_table --- Wraps `hb_face_get_table_tags`. -- @return table of `Tag`s representing face table tags. -- @function Face:get_table_tags --- Wraps `hb_face_get_upem`. -- @function Face:get_upem --- Wraps `hb_ot_color_has_palettes`. -- @function Face:ot_color_has_palettes --- Wraps `hb_ot_color_palette_get_count`. -- @function Face:ot_color_palette_get_count --- Wraps `hb_ot_color_palette_get_colors`. -- @function Face:ot_color_palette_get_colors --- Wraps `hb_ot_color_has_layers`. -- @function Face:ot_color_has_layers --- Wraps `hb_ot_color_glyph_get_layers`. -- @function Face:ot_color_glyph_get_layers --- Wraps `hb_ot_color_has_png`. -- @function Face:ot_color_has_png --- Wraps `hb_ot_layout_table_get_script_tags`. -- @function Face:ot_layout_get_script_tags --- Wraps `hb_ot_layout_script_get_language_tags`. -- @function Face:ot_layout_get_language_tags --- Wraps `hb_ot_layout_language_get_feature_tags`. -- @function Face:ot_layout_get_feature_tags --- Wraps `hb_ot_layout_table_find_script`. -- @function Face:ot_layout_find_script --- Wraps `hb_ot_layout_script_find_language`. -- @function Face:ot_layout_find_language --- Wraps `hb_ot_layout_language_find_feature`. -- @function Face:ot_layout_find_feature --- Lua wrapper for `hb_font_t` type -- @type Font --- Wraps `hb_font_create`, and sets up some defaults for scale and shaping functions. -- Initializes a new `hb_font_t` from a `Face` object. Sets the default scale -- to the face’s upem value, and sets the font shaping functions by -- calling `hb_ot_font_set_funcs` on it. -- @param face `Face` object. -- @function Font.new --- Wraps `hb_font_get_scale`. -- @return two values for the x-scale and y-scale of the font. -- @function Font:get_scale --- Wraps `hb_font_set_scale`. -- @param x_scale desired x-scale of font. -- @param y_scale desired y-scale of font. -- @function Font:set_scale --- Wraps `hb_font_get_h_extents`. -- @return font extents table for horizontal direction, contains the following -- or `nil` if HarfBuzz fails to load font extents: -- -- * `ascender`: typographic ascender. -- * `descender`: typographic descender. -- * `line_gap`: line spacing gap. -- @function Font:get_h_extents --- Wraps `hb_font_get_v_extents`. -- @return font extents table for vertical direction, similar to -- `Font:get_h_extents`, or `nil` if HarfBuzz fails to load font extents: -- @function Font:get_v_extents --- Wraps `hb_font_get_glyph_extents`. -- @param glyph index inside the font. -- @return extents table contains the following or `nil` if HarfBuzz fails to -- load glyph extents: -- -- * `x_bearing`: left side of glyph from origin. -- * `y_bearing`: top side of glyph from origin. -- * `width`: distance from left to right side. -- * `height`: distance from top to bottom side. -- @function Font:get_glyph_extents --- Wraps `hb_font_get_glyph_name`. -- @param glyph index inside the font. -- @return name of the glyph or nil. -- @function Font:get_glyph_name --- Wraps `hb_font_get_glyph_from_name`. -- @param name of the glyph. -- @return glyph index inside the font or nil. -- @function Font:get_glyph_from_name --- Wraps `hb_font_get_glyph_h_advance`. -- @param glyph index inside the font. -- @return advance glyph advance of the glyph in horizontal direction. -- @function Font:get_glyph_h_advance --- Wraps `hb_font_get_glyph_v_advance`. -- @param glyph index inside the font. -- @return advance glyph advance of the glyph in vertical direction. -- @function Font:get_glyph_v_advance --- Wraps `hb_font_get_nominal_glyph`. -- @param codepoint. -- @return glyph index or `nil` if `codepoint` is not supported by the font. -- @function Font:get_nominal_glyph --- Wraps `hb_ot_color_glyph_get_png`. -- @function Font:ot_color_glyph_get_png --- Lua wrapper for `hb_buffer_t` type. -- @type Buffer --- Wraps `hb_buffer_create`. -- @function Buffer.new --- Wraps `hb_buffer_add_utf8`. -- @param text UTF8 encoded string. -- @param[opt=0] item_offset 0-indexed offset in `text`, from where to start adding. -- @param[opt=-1] item_length length to add from `item_offset`. `-1` adds till end of `text`. -- @function Buffer:add_utf8 --- Wraps `hb_buffer_add_codepoints`. -- @param text table with codepoints as lua numbers. -- @param[opt=0] item_offset 0-indexed offset in `text`, from where to start adding. -- @param[opt=-1] item_length length to add from `item_offset`. `-1` adds till end of `text`. -- @function Buffer:add_codepoints --- Wraps `hb_buffer_set_direction`. -- @param dir A `Direction` object. -- @function Buffer:set_direction --- Wraps `hb_buffer_get_direction`. -- @return A `Direction` object. -- @function Buffer:get_direction --- Wraps `hb_buffer_set_script`. -- @param script A `Script` object. -- @function Buffer:set_script --- Wraps `hb_buffer_get_script`. -- @return A `Script` object. -- @function Buffer:get_script --- Wraps `hb_buffer_set_language`. -- @param lang A `Language` object -- @function Buffer:set_language --- Wraps `hb_buffer_get_language`. -- @return A `Language` object -- @function Buffer:get_language --- Wraps `hb_buffer_reverse`. -- @function Buffer:reverse --- Wraps `hb_buffer_get_length`. -- @function Buffer:get_length --- Wraps `hb_buffer_get_cluster_level`. -- @return see [Cluster Levels](#Cluster_Levels) -- @function Buffer:get_cluster_level --- Wraps `hb_buffer_set_cluster_level`. -- @param level see [Cluster Levels](#Cluster_Levels) -- @function Buffer:set_cluster_level --- Wraps `hb_buffer_guess_segment_properties`. -- @function Buffer:guess_segment_properties --- Helper method to get shaped glyph data. -- Calls `hb_buffer_get_glyph_infos`, `hb_buffer_get_glyph_positions` and -- `hb_glyph_info_get_glyph_flags`, and assembles the data into a Lua table. -- @return table containing data for each glyph, in a nested table. Each nested -- table contains the following: -- -- * `x_advance`: horizontal advance. -- * `y_advance`: vertical advance. -- * `x_offset`: horizontal displacement. -- * `y_offset`: vertical displacement. -- * `cluster`: glyph cluster index within input. -- * `codepoint`: glyph index inside the font _(this field name is a bit misleading, but that’s what Harfbuzz uses)_. -- * `flags`: glyph flags -- @function Buffer:get_glyphs --- Cluster Levels. -- See [Harfbuzz docs](http://behdad.github.io/harfbuzz/clusters.html) for more details -- about what each of these levels mean. -- @section --- Wraps `HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES`. -- @field Buffer.CLUSTER_LEVEL_MONOTONE_GRAPHEMES --- Wraps `HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS`. -- @field Buffer.CLUSTER_LEVEL_MONOTONE_CHARACTERS --- Wraps `HB_BUFFER_CLUSTER_LEVEL_CHARACTERS`. -- @field Buffer.CLUSTER_LEVEL_CHARACTERS --- Wraps `HB_BUFFER_CLUSTER_LEVEL_DEFAULT`. -- @field Buffer.CLUSTER_LEVEL_DEFAULT --- Wraps `HB_GLYPH_FLAG_UNSAFE_TO_BREAK`. -- @field Buffer.GLYPH_FLAG_UNSAFE_TO_BREAK --- Wraps `HB_GLYPH_FLAG_DEFINED`. -- @field Buffer.GLYPH_FLAG_DEFINED --- Lua wrapper for `hb_feature_t` type -- @type Feature --- Wraps `hb_feature_from_string` -- @param feature_string See [feature string syntax reference](https://github.com/ufytex/luaharfbuzz/wiki/Feature-Strings) -- @function Feature.new --- Wraps `hb_feature_to_string`. -- Enables nice output with `tostring(…)`. -- @function Feature:__tostring --- Lua wrapper for `hb_tag_t` type. -- @type Tag --- Wraps `hb_tag_from_string`. -- @param string to be converted to a `Tag` object. -- @return a `Tag` object. -- @function Tag.new --- Wraps `hb_tag_to_string`. Enable nice output with `tostring(…)`. -- @return Returns a string representation for the tag object. -- @function Tag:__to_string --- Enables equality comparisions with `==` between two tags. -- @return `true` or `false` depending on whether the two tags are equal. -- @function Tag:__eq --- Lua wrapper for `hb_script_t` type. -- @type Script --- Wraps `hb_script_from_string`. -- @param script 4-letter script code according to the [ISO 15924 standard](http://www.unicode.org/iso15924/iso15924-num.html). -- @return a `Script` object. -- @function Script.new --- Wraps `hb_script_from_iso15924_tag` -- @param tag a `Tag` object representing a [ISO 15924 script](http://www.unicode.org/iso15924/iso15924-num.html). -- @function Script.from_iso15924_tag --- Wraps `hb_script_to_iso15924_tag`. -- @return a `Tag` object representing the script. -- @function Script:to_iso15924_tag --- Enable nice output with `tostring(…)` -- @return Returns a 4-letter [ISO 15924 script code](http://www.unicode.org/iso15924/iso15924-num.html) for the script object. -- @function Script:__to_string --- Enables equality comparisions with `==` between two scripts. -- @return `true` or `false` depending on whether the two scripts are equal. -- @function Script:__eq --- Predefined Script Codes. -- Predefined directions that correspond to their original definitions in Harfbuzz. -- @section --- Wraps `HB_SCRIPT_COMMON`. -- @field Script.COMMON --- Wraps `HB_SCRIPT_INHERITED`. -- @field Script.INHERITED --- Wraps `HB_SCRIPT_UNKNOWN`. -- @field Script.UNKNOWN --- Wraps `HB_SCRIPT_INVALID`. -- @field Script.INVALID --- Lua wrapper for `hb_direction_t` type. -- @type Direction --- Wraps `hb_direction_from_string`. -- @param dir can be one of `ltr`, `rtl`, `ttb`, `btt` or `invalid`. -- @return a `Direction` object. -- @function Direction.new --- Wraps `hb_direction_to_string`. Enable nice output with `tostring(…)`. -- @return Returns a string representation for direction. -- @function Direction:__to_string --- Enables equality comparisions with `==` between two directions. -- @return `true` or `false` depending on whether the two tags are equal. -- @function Direction:__eq --- Wraps `HB_DIRECTION_IS_VALID`. -- @return a boolean value -- @function Direction:is_valid --- Wraps `HB_DIRECTION_IS_HORIZONTAL`. -- @return a boolean value -- @function Direction:is_horizontal --- Wraps `HB_DIRECTION_IS_VERTICAL`. -- @return a boolean value -- @function Direction:is_vertical --- Wraps `HB_DIRECTION_IS_FORWARD`. -- @return a boolean value -- @function Direction:is_forward --- Wraps `HB_DIRECTION_IS_BACKWARD`. -- @return a boolean value -- @function Direction:is_backward --- Predefined directions. -- Predefined directions that correspond to their original definitions in Harfbuzz. -- @section --- Wraps `HB_DIRECTION_LTR`. -- @field Direction.LTR --- Wraps `HB_DIRECTION_RTL`. -- @field Direction.RTL --- Wraps `HB_DIRECTION_TTB`. -- @field Direction.TTB --- Wraps `HB_DIRECTION_LTR`. -- @field Direction.BTT --- Lua wrapper for `hb_language_t` type. -- @type Language --- Wraps `hb_language_from_string`. -- @param lang [three-letter language tag](http://www.microsoft.com/typography/otspec/languagetags.htm) to be converted to a `Language` object. -- @return a `Language` object. -- @function Language.new --- Wraps `hb_language_to_string`. Enable nice output with `tostring(…)`. -- @return Returns a string representation for the language object. -- @function Language:__to_string --- Enables equality comparisions with `==` between two languages. -- @return `true` or `false` depending on whether the two languages are equal. -- @function Language:__eq --- Predefined languages. -- Predefined languages that correspond to their original definitions in Harfbuzz. -- @section --- Wraps `HB_LANGUAGE_INVALID`. -- @field Language.INVALID --- Unicode functions. -- @section --- Wraps `hb_unicode_script` -- @param char Unicode codepoint -- @return a `Script` object. -- @function unicode.script --- Predefined Name IDs. -- Predefined OpenType 'name' table name identifier. -- @section --- Wraps `HB_OT_NAME_ID_COPYRIGHT` -- @field ot.NAME_ID_COPYRIGHT --- Wraps `HB_OT_NAME_ID_FONT_FAMILY` -- @field ot.NAME_ID_FONT_FAMILY --- Wraps `HB_OT_NAME_ID_FONT_SUBFAMILY` -- @field ot.NAME_ID_FONT_SUBFAMILY --- Wraps `HB_OT_NAME_ID_UNIQUE_ID` -- @field ot.NAME_ID_UNIQUE_ID --- Wraps `HB_OT_NAME_ID_FULL_NAME` -- @field ot.NAME_ID_FULL_NAME --- Wraps `HB_OT_NAME_ID_VERSION_STRING` -- @field ot.NAME_ID_VERSION_STRING --- Wraps `HB_OT_NAME_ID_POSTSCRIPT_NAME` -- @field ot.NAME_ID_POSTSCRIPT_NAME --- Wraps `HB_OT_NAME_ID_TRADEMARK` -- @field ot.NAME_ID_TRADEMARK --- Wraps `HB_OT_NAME_ID_MANUFACTURER` -- @field ot.NAME_ID_MANUFACTURER --- Wraps `HB_OT_NAME_ID_DESIGNER` -- @field ot.NAME_ID_DESIGNER --- Wraps `HB_OT_NAME_ID_DESCRIPTION` -- @field ot.NAME_ID_DESCRIPTION --- Wraps `HB_OT_NAME_ID_VENDOR_URL` -- @field ot.NAME_ID_VENDOR_URL --- Wraps `HB_OT_NAME_ID_DESIGNER_URL` -- @field ot.NAME_ID_DESIGNER_URL --- Wraps `HB_OT_NAME_ID_LICENSE` -- @field ot.NAME_ID_LICENSE --- Wraps `HB_OT_NAME_ID_LICENSE_URL` -- @field ot.NAME_ID_LICENSE_URL --- Wraps `HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY` -- @field ot.NAME_ID_TYPOGRAPHIC_FAMILY --- Wraps `HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY` -- @field ot.NAME_ID_TYPOGRAPHIC_SUBFAMILY --- Wraps `HB_OT_NAME_ID_MAC_FULL_NAME` -- @field ot.NAME_ID_MAC_FULL_NAME --- Wraps `HB_OT_NAME_ID_SAMPLE_TEXT` -- @field ot.NAME_ID_SAMPLE_TEXT --- Wraps `HB_OT_NAME_ID_CID_FINDFONT_NAME` -- @field ot.NAME_ID_CID_FINDFONT_NAME --- Wraps `HB_OT_NAME_ID_WWS_FAMILY` -- @field ot.NAME_ID_WWS_FAMILY --- Wraps `HB_OT_NAME_ID_WWS_SUBFAMILY` -- @field ot.NAME_ID_WWS_SUBFAMILY --- Wraps `HB_OT_NAME_ID_LIGHT_BACKGROUND` -- @field ot.NAME_ID_LIGHT_BACKGROUND --- Wraps `HB_OT_NAME_ID_DARK_BACKGROUND` -- @field ot.NAME_ID_DARK_BACKGROUND --- Wraps `HB_OT_NAME_ID_VARIATIONS_PS_PREFIX` -- @field ot.NAME_ID_VARIATIONS_PS_PREFIX --- Wraps `HB_OT_NAME_ID_INVALID` -- @field ot.NAME_ID_INVALID --- Wraps `HB_OT_LAYOUT_NO_SCRIPT_INDEX` -- @field ot.LAYOUT_NO_SCRIPT_INDEX --- Wraps `HB_OT_LAYOUT_NO_FEATURE_INDEX` -- @field ot.LAYOUT_NO_FEATURE_INDEX --- Wraps `HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX` -- @field ot.LAYOUT_DEFAULT_LANGUAGE_INDEX --- Wraps `HB_OT_LAYOUT_NO_VARIATIONS_INDEX` -- @field ot.LAYOUT_NO_VARIATIONS_INDEX