///|
fn pdf_text_push_tounicode_bfchar_entry(
  entries : Array[(Int, @core.PdfBytes)],
  source : @core.PdfBytes,
  unicode : @core.PdfBytes,
) -> Unit {
  match pdf_text_bytes_to_int(source) {
    Some(code) => entries.push((code, unicode))
    None => ()
  }
}

///|
fn pdf_text_append_tounicode_bfchar_entries(
  entries : Array[(Int, @core.PdfBytes)],
  pending_source : @core.PdfBytes?,
  line : BytesView,
) -> @core.PdfBytes? {
  let mut pending = pending_source
  match pdf_text_parse_cmap_hex_groups(line) {
    Some(groups) => {
      let mut index = 0
      match pending {
        Some(source) =>
          if groups.length() > 0 {
            pdf_text_push_tounicode_bfchar_entry(entries, source, groups[0])
            pending = None
            index = 1
          }
        None => ()
      }
      while index + 1 < groups.length() {
        pdf_text_push_tounicode_bfchar_entry(
          entries,
          groups[index],
          groups[index + 1],
        )
        index += 2
      }
      if index < groups.length() {
        pending = Some(groups[index])
      }
      pending
    }
    None => pending
  }
}