85 lines
3.0 KiB
Lua
85 lines
3.0 KiB
Lua
local hb = require("luaharfbuzz")
|
|
|
|
-- special tags
|
|
hb.Tag.NONE = hb.Tag.new()
|
|
|
|
-- special script codes (ISO 15924)
|
|
hb.Script.COMMON = hb.Script.new("Zyyy")
|
|
hb.Script.INHERITED = hb.Script.new("Zinh")
|
|
hb.Script.UNKNOWN = hb.Script.new("Zzzz")
|
|
hb.Script.INVALID = hb.Script.from_iso15924_tag(hb.Tag.NONE)
|
|
|
|
-- directions
|
|
hb.Direction.INVALID = hb.Direction.new("invalid")
|
|
hb.Direction.LTR = hb.Direction.new("ltr")
|
|
hb.Direction.RTL = hb.Direction.new("rtl")
|
|
hb.Direction.TTB = hb.Direction.new("ttb")
|
|
hb.Direction.BTT = hb.Direction.new("btt")
|
|
|
|
-- special languages
|
|
hb.Language.INVALID = hb.Language.new()
|
|
|
|
hb.shape = function(font, buf, options)
|
|
options = options or { }
|
|
|
|
-- Apply options to buffer if they are set.
|
|
if options.language then buf:set_language(options.language) end
|
|
if options.script then buf:set_script(options.script) end
|
|
if options.direction then buf:set_direction(options.direction) end
|
|
|
|
-- Guess segment properties, in case all steps above have failed
|
|
-- to set the right properties.
|
|
buf:guess_segment_properties()
|
|
|
|
local features = {}
|
|
|
|
-- Parse features
|
|
if type(options.features) == "string" then
|
|
for fs in string.gmatch(options.features, '([^,]+)') do
|
|
local feature = hb.Feature.new(fs)
|
|
if feature then
|
|
table.insert(features, hb.Feature.new(fs))
|
|
else
|
|
error(string.format("Invalid feature string: '%s'", fs))
|
|
end
|
|
end
|
|
elseif type(options.features) == "table" then
|
|
features = options.features
|
|
elseif options.features then -- non-nil but not a string or table
|
|
error("Invalid features option")
|
|
end
|
|
|
|
return hb.shape_full(font,buf,features,options.shapers or {})
|
|
end
|
|
|
|
-- For backward compatibility
|
|
hb.Buffer.HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES = hb.Buffer.CLUSTER_LEVEL_MONOTONE_GRAPHEMES
|
|
hb.Buffer.HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS = hb.Buffer.CLUSTER_LEVEL_MONOTONE_CHARACTERS
|
|
hb.Buffer.HB_BUFFER_CLUSTER_LEVEL_CHARACTERS = hb.Buffer.CLUSTER_LEVEL_CHARACTERS
|
|
hb.Buffer.HB_BUFFER_CLUSTER_LEVEL_DEFAULT = hb.Buffer.CLUSTER_LEVEL_DEFAULT
|
|
|
|
hb.Tag.HB_TAG_NONE = hb.Tag.NONE
|
|
|
|
hb.Script.HB_SCRIPT_COMMON = hb.Script.COMMON
|
|
hb.Script.HB_SCRIPT_INHERITED = hb.Script.INHERITED
|
|
hb.Script.HB_SCRIPT_UNKNOWN = hb.Script.UNKNOWN
|
|
hb.Script.HB_SCRIPT_INVALID = hb.Script.INVALID
|
|
|
|
hb.Language.HB_LANGUAGE_INVALID = hb.Language.INVALID
|
|
|
|
hb.Direction.HB_DIRECTION_INVALID = hb.Direction.INVALID
|
|
hb.Direction.HB_DIRECTION_LTR = hb.Direction.LTR
|
|
hb.Direction.HB_DIRECTION_RTL = hb.Direction.RTL
|
|
hb.Direction.HB_DIRECTION_TTB = hb.Direction.TTB
|
|
hb.Direction.HB_DIRECTION_BTT = hb.Direction.BTT
|
|
|
|
hb.Direction.HB_DIRECTION_IS_VALID = hb.Direction.is_valid
|
|
hb.Direction.HB_DIRECTION_IS_HORIZONTAL = hb.Direction.is_horizontal
|
|
hb.Direction.HB_DIRECTION_IS_VERTICAL = hb.Direction.is_vertical
|
|
hb.Direction.HB_DIRECTION_IS_FORWARD = hb.Direction.is_forward
|
|
hb.Direction.HB_DIRECTION_IS_BACKWARD = hb.Direction.is_backward
|
|
|
|
hb.Buffer.get_glyph_infos_and_positions = hb.Buffer.get_glyphs
|
|
|
|
return hb
|