# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
# Copyright (C) 1995 Free Software Foundation, Inc.
# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#
1 {
  i\
/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot.  */\
\
#if HAVE_CONFIG_H\
# include <config.h>\
#endif\
\
#include "libgettext.h"\
\
const struct _msg_ent _msg_tbl[] = {
  h
  s/.*/0/
  x
}
#
# Write msgid entries in C array form.
#
/^msgid/ {
  s/msgid[ 	]*\(".*"\)/  {\1/
  tb
# Append the next line
  :b
  N
# Look whether second part is continuation line.
  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
# Yes, then branch.
  ta
# Because we assume that the input file correctly formed the line
# just read cannot be again be a msgid line.  So it's safe to ignore
# it.
  s/\(.*\)\n.*/\1/
  bc
# We found a continuation line.  But before printing insert '\'.
  :a
  s/\(.*\)\(\n.*\)/\1\\\2/
  P
# We cannot use D here.
  s/.*\n\(.*\)/\1/
# Some buggy seds do not clear the `successful substitution since last ``t'''
# flag on `N', so we do a `t' here to clear it.
  tb
# Not reached
  :c
  x
# The following nice solution is by
# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
  td
# Increment a decimal number in pattern space.
# First hide trailing `9' digits.
  :d
  s/9\(_*\)$/_\1/
  td
# Assure at least one digit is available.
  s/^\(_*\)$/0\1/
# Increment the last digit.
  s/8\(_*\)$/9\1/
  s/7\(_*\)$/8\1/
  s/6\(_*\)$/7\1/
  s/5\(_*\)$/6\1/
  s/4\(_*\)$/5\1/
  s/3\(_*\)$/4\1/
  s/2\(_*\)$/3\1/
  s/1\(_*\)$/2\1/
  s/0\(_*\)$/1\1/
# Convert the hidden `9' digits to `0's.
  s/_/0/g
  x
  G
  s/\(.*\)\n\([0-9]*\)/\1, \2},/
  s/\(.*\)"$/\1/
  p
}
#
# Last line.
#
$ {
  i\
};\

  g
  s/0*\(.*\)/int _msg_tbl_length = \1;/p
}
d
