// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/struct.TabArray.html).
pub type TabArray

///|
pub(open) trait ITabArray {
  fn as_tab_array(Self) -> TabArray
  fn get_decimal_point(Self, Int) -> UInt = _
  fn get_positions_in_pixels(Self) -> Bool = _
  fn get_size(Self) -> Int = _
  fn get_tab(Self, Int) -> (TabAlign, Int) = _
  fn get_tabs(Self) -> (Array[TabAlign], Array[Int]) = _
  fn resize(Self, Int) -> Unit = _
  fn set_decimal_point(Self, Int, UInt) -> Unit = _
  fn set_positions_in_pixels(Self, Bool) -> Unit = _
  fn set_tab(Self, Int, TabAlign, Int) -> Unit = _
  fn sort(Self) -> Unit = _
  fn to_string(Self) -> String = _
}

///|
pub impl ITabArray for TabArray with fn as_tab_array(self) {
  self
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/ctor.TabArray.new.html).
pub extern "c" fn TabArray::new(
  initial_size : Int,
  positions_in_pixels : Bool,
) -> TabArray = "moonbit_pango_tab_array_new"

///|
#borrow(text)
extern "c" fn moonbit_pango_tab_array_from_string(
  text : Bytes,
) -> @glib.Nullable[TabArray] = "moonbit_pango_tab_array_from_string"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/type_func.TabArray.from_string.html).
pub fn TabArray::from_string(text : String) -> TabArray? {
  let raw_result = moonbit_pango_tab_array_from_string(
    @encoding/utf8.encode(text),
  )
  raw_result.to_option()
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.TabArray.get_decimal_point.html).
#borrow(self)
pub extern "c" fn TabArray::get_decimal_point(
  self : TabArray,
  tab_index : Int,
) -> UInt = "moonbit_pango_tab_array_get_decimal_point"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.TabArray.get_positions_in_pixels.html).
#borrow(self)
pub extern "c" fn TabArray::get_positions_in_pixels(self : TabArray) -> Bool = "moonbit_pango_tab_array_get_positions_in_pixels"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.TabArray.get_size.html).
#borrow(self)
pub extern "c" fn TabArray::get_size(self : TabArray) -> Int = "moonbit_pango_tab_array_get_size"

///|
#borrow(self_, alignment, location)
extern "c" fn moonbit_pango_tab_array_get_tab(
  self_ : TabArray,
  tab_index : Int,
  alignment : Ref[TabAlign],
  location : Ref[Int],
) = "moonbit_pango_tab_array_get_tab"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.TabArray.get_tab.html).
pub fn TabArray::get_tab(self : TabArray, tab_index : Int) -> (TabAlign, Int) {
  let alignment = Ref(TabAlign::Left)
  let location = Ref(0)
  moonbit_pango_tab_array_get_tab(self, tab_index, alignment, location)
  (alignment.val, location.val)
}

///|
#borrow(self_, alignments, locations)
extern "c" fn moonbit_pango_tab_array_get_tabs(
  self_ : TabArray,
  alignments : Ref[FixedArray[TabAlign]],
  locations : Ref[FixedArray[Int]],
) = "moonbit_pango_tab_array_get_tabs"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.TabArray.get_tabs.html).
pub fn TabArray::get_tabs(self : TabArray) -> (Array[TabAlign], Array[Int]) {
  let alignments : Ref[FixedArray[TabAlign]] = Ref([])
  let locations : Ref[FixedArray[Int]] = Ref([])
  moonbit_pango_tab_array_get_tabs(self, alignments, locations)
  let result : Array[TabAlign] = Array::new(capacity=alignments.val.length())
  for i in 0.. Bytes = "moonbit_pango_tab_array_to_string"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/pango/Pango/method.TabArray.to_string.html).
pub fn TabArray::to_string(self : TabArray) -> String {
  @encoding/utf8.decode_lossy(moonbit_pango_tab_array_to_string(self))
}

///|
impl ITabArray with fn get_decimal_point(self, tab_index) -> UInt {
  self.as_tab_array().get_decimal_point(tab_index)
}

///|
impl ITabArray with fn get_positions_in_pixels(self) -> Bool {
  self.as_tab_array().get_positions_in_pixels()
}

///|
impl ITabArray with fn get_size(self) -> Int {
  self.as_tab_array().get_size()
}

///|
impl ITabArray with fn get_tab(self, tab_index) -> (TabAlign, Int) {
  self.as_tab_array().get_tab(tab_index)
}

///|
impl ITabArray with fn get_tabs(self) -> (Array[TabAlign], Array[Int]) {
  self.as_tab_array().get_tabs()
}

///|
impl ITabArray with fn resize(self, new_size) -> Unit {
  self.as_tab_array().resize(new_size)
}

///|
impl ITabArray with fn set_decimal_point(self, tab_index, decimal_point) -> Unit {
  self.as_tab_array().set_decimal_point(tab_index, decimal_point)
}

///|
impl ITabArray with fn set_positions_in_pixels(self, positions_in_pixels) -> Unit {
  self.as_tab_array().set_positions_in_pixels(positions_in_pixels)
}

///|
impl ITabArray with fn set_tab(self, tab_index, alignment, location) -> Unit {
  self.as_tab_array().set_tab(tab_index, alignment, location)
}

///|
impl ITabArray with fn sort(self) -> Unit {
  self.as_tab_array().sort()
}

///|
impl ITabArray with fn to_string(self) -> String {
  self.as_tab_array().to_string()
}