diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luaharfbuzz/src/harfbuzz.lua')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/luaharfbuzz/src/harfbuzz.lua | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luaharfbuzz/src/harfbuzz.lua b/Build/source/texk/web2c/luatexdir/luaharfbuzz/src/harfbuzz.lua new file mode 100644 index 00000000000..b7b0d7ff88c --- /dev/null +++ b/Build/source/texk/web2c/luatexdir/luaharfbuzz/src/harfbuzz.lua @@ -0,0 +1,84 @@ +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 |