core_types.lua
local harfbuzz = require('harfbuzz')
local serpent = require('serpent')
print("Harfbuzz API version", harfbuzz.version())
print("Shapers:", serpent.line({ harfbuzz.shapers() }, {comment = false}))
local face = harfbuzz.Face.new('fonts/notonastaliq.ttf')
print('\nFace upem = '..face:get_upem())
local font = harfbuzz.Font.new(face)
local xs, xy = font:get_scale()
print("\nDefault font scale = X: "..xs..", Y: "..xy)
local text = "یہ" local buf = harfbuzz.Buffer.new()
buf:add_utf8(text)
print("\nShaping '"..text.."' set with Noto Nastaliq Urdu")
harfbuzz.shape(font, buf, { language = "urd", script = "Arab", direction = "rtl" })
local glyphs = buf:get_glyph_infos_and_positions()
print("No. of glyphs", #glyphs)
print(serpent.line(glyphs, {comment = false}))
local opts = { language = "eng", script = "Latn", direction = "ltr" }
local amiri_face = harfbuzz.Face.new('fonts/amiri-regular.ttf')
local amiri_font = harfbuzz.Font.new(amiri_face)
print("\nShaping '123' set with Amiri Regular and no features")
buf= harfbuzz.Buffer.new()
buf:add_utf8("123")
harfbuzz.shape(amiri_font, buf, opts)
glyphs = buf:get_glyph_infos_and_positions()
print(serpent.line(glyphs, {comment = false}))
print("\nShaping '123' set with Amiri Regular with 'numr' feature turned on")
buf= harfbuzz.Buffer.new()
buf:add_utf8("123")
opts.features = "+numr"
harfbuzz.shape(amiri_font, buf, opts)
glyphs = buf:get_glyph_infos_and_positions()
print(serpent.line(glyphs, {comment = false}))