Module: HarfBuzz::OT::Name

Defined in:
lib/harfbuzz/ot/name.rb

Overview

OpenType Name table API

Class Method Summary collapse

Class Method Details

.get_utf16(face, name_id, language = nil) ⇒ String?

Returns a name as a UTF-16 encoded string

Parameters:

  • face (Face)

    Font face

  • name_id (Integer)

    Name ID

  • language (FFI::Pointer, nil) (defaults to: nil)

    Language pointer (nil = default)

Returns:

  • (String, nil)

    UTF-16LE encoded string or nil if not found



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/harfbuzz/ot/name.rb', line 45

def get_utf16(face, name_id, language = nil)
  lang = language || C.hb_language_get_default
  buf_size = FFI::MemoryPointer.new(:uint)
  buf_size.write_uint(0)
  C.hb_ot_name_get_utf16(face.ptr, name_id, lang, buf_size, nil)
  size = buf_size.read_uint
  return nil if size.zero?

  buf = FFI::MemoryPointer.new(:uint16, size + 1)
  buf_size.write_uint(size + 1)
  C.hb_ot_name_get_utf16(face.ptr, name_id, lang, buf_size, buf)
  actual = buf_size.read_uint
  buf.read_bytes(actual * 2).force_encoding("UTF-16LE")
end

.get_utf32(face, name_id, language = nil) ⇒ String?

Returns a name as a UTF-32 encoded string

Parameters:

  • face (Face)

    Font face

  • name_id (Integer)

    Name ID

  • language (FFI::Pointer, nil) (defaults to: nil)

    Language pointer (nil = default)

Returns:

  • (String, nil)

    UTF-32LE encoded string or nil if not found



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/harfbuzz/ot/name.rb', line 65

def get_utf32(face, name_id, language = nil)
  lang = language || C.hb_language_get_default
  buf_size = FFI::MemoryPointer.new(:uint)
  buf_size.write_uint(0)
  C.hb_ot_name_get_utf32(face.ptr, name_id, lang, buf_size, nil)
  size = buf_size.read_uint
  return nil if size.zero?

  buf = FFI::MemoryPointer.new(:uint32, size + 1)
  buf_size.write_uint(size + 1)
  C.hb_ot_name_get_utf32(face.ptr, name_id, lang, buf_size, buf)
  actual = buf_size.read_uint
  buf.read_bytes(actual * 4).force_encoding("UTF-32LE")
end

.get_utf8(face, name_id, language = nil) ⇒ String?

Returns a name as a UTF-8 string

Parameters:

  • face (Face)

    Font face

  • name_id (Integer)

    Name ID

  • language (FFI::Pointer, nil) (defaults to: nil)

    Language pointer (nil = default)

Returns:

  • (String, nil)

    Name string or nil if not found



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/harfbuzz/ot/name.rb', line 26

def get_utf8(face, name_id, language = nil)
  lang = language || C.hb_language_get_default
  buf_size = FFI::MemoryPointer.new(:uint)
  buf_size.write_uint(0)
  C.hb_ot_name_get_utf8(face.ptr, name_id, lang, buf_size, nil)
  size = buf_size.read_uint
  return nil if size.zero?

  buf = FFI::MemoryPointer.new(:char, size + 1)
  buf_size.write_uint(size + 1)
  C.hb_ot_name_get_utf8(face.ptr, name_id, lang, buf_size, buf)
  buf.read_string(size)
end

.list(face) ⇒ Array<C::HbOtNameEntryT>

Returns all name entries from the name table

Parameters:

  • face (Face)

    Font face

Returns:



12
13
14
15
16
17
18
19
# File 'lib/harfbuzz/ot/name.rb', line 12

def list(face)
  count_ptr = FFI::MemoryPointer.new(:uint)
  entries_ptr = C.hb_ot_name_list_names(face.ptr, count_ptr)
  count = count_ptr.read_uint
  return [] if count.zero? || entries_ptr.null?

  count.times.map { |i| C::HbOtNameEntryT.new(entries_ptr + i * C::HbOtNameEntryT.size) }
end