#!/usr/bin/perl -w
open F, "cat C-translit.h.in | gcc -E - |" || die "Cannot preprocess input file";


sub cstrlen {
  my($str) = @_;
  my($len) = length($str);
  my($cnt);
  my($res) = 0;

  for ($cnt = 0; $cnt < $len; ++$cnt) {
    if (substr($str, $cnt, 1) eq '\\') {
      # Recognize the escape sequence.
      if (substr($str, $cnt + 1, 1) eq 'x') {
	my($inner);
	for ($inner = $cnt + 2; $inner < $len && $inner < $cnt + 10; ++$inner) {
	  my($ch) = substr($str, $inner, 1);
	  next if (($ch ge '0' && $ch le '9')
		   || ($ch ge 'a' && $ch le 'f')
		   || ($ch ge 'A' && $ch le 'F'));
	  last;
	}
	$cnt = $inner;
	++$res;
      } else {
	die "invalid input" if ($cnt + 1 >= $len);
	++$res;
	++$cnt;
      }
    } else {
      ++$res;
    }
  }

  return $res;
}

while (<F>) {
  next if (/^#/);
  next if (/^[ 	]*$/);
  chop;

  if (/"([^\"]*)"[ 	]*"(.*)"/) {
    my($from) = $1;
    my($to) = $2;
    my($fromlen) = cstrlen($from);
    my($tolen) = cstrlen($to);

    push(@froms, $from);
    push(@fromlens, $fromlen);
    push(@tos, $to);
    push(@tolens, $tolen);
  }
}

printf "#include <stdint.h>\n";

printf "#define NTRANSLIT %d\n", $#froms + 1;

printf "static const uint32_t translit_from_idx[] =\n{\n  ";
$col = 2;
$total = 0;
for ($cnt = 0; $cnt <= $#fromlens; ++$cnt) {
  if ($cnt != 0) {
    if ($col + 7 >= 79) {
      printf(",\n  ");
      $col = 2;
    } else {
      printf(", ");
      $col += 2;
    }
  }
  printf("%4d", $total);
  $total += $fromlens[$cnt] + 1;
  $col += 4;
}
printf("\n};\n");

printf "static const wchar_t translit_from_tbl[] =\n ";
$col = 1;
for ($cnt = 0; $cnt <= $#froms; ++$cnt) {
  if ($cnt != 0) {
    if ($col + 6 >= 79) {
      printf("\n ");
      $col = 1;
    }
    printf(" L\"\\0\"");
    $col += 6;
  }
  if ($col > 2 && $col + length($froms[$cnt]) + 4 >= 79) {
    printf("\n  ");
    $col = 2;
  } else {
    printf(" ");
    ++$col;
  }
  printf("L\"$froms[$cnt]\"");
  $col += length($froms[$cnt]) + 3;
}
printf(";\n");

printf "static const uint32_t translit_to_idx[] =\n{\n  ";
$col = 2;
$total = 0;
for ($cnt = 0; $cnt <= $#tolens; ++$cnt) {
  if ($cnt != 0) {
    if ($col + 7 >= 79) {
      printf(",\n  ");
      $col = 2;
    } else {
      printf(", ");
      $col += 2;
    }
  }
  printf("%4d", $total);
  $total += $tolens[$cnt] + 2;
  $col += 4;
}
printf("\n};\n");

printf "static const wchar_t translit_to_tbl[] =\n ";
$col = 1;
for ($cnt = 0; $cnt <= $#tos; ++$cnt) {
  if ($cnt != 0) {
    if ($col + 6 >= 79) {
      printf("\n ");
      $col = 1;
    }
    printf(" L\"\\0\"");
    $col += 6;
  }
  if ($col > 2 && $col + length($tos[$cnt]) + 6 >= 79) {
    printf("\n  ");
    $col = 2;
  } else {
    printf(" ");
    ++$col;
  }
  printf("%s", "L\"$tos[$cnt]\\0\"");
  $col += length($tos[$cnt]) + 5;
}
printf(";\n");

exit 0;
