# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
# Copyright 1995, 2002 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.
#
#
# The first directive in the .msg should be the definition of the
# message set number.  We use always set number 1.
#
1 {
  i\
$set 1 # Automatically created by po2msg.sed
  h
  s/.*/0/
  x
}
#
# Mitch's old catalog format does not allow comments.
#
# We copy the original message as a comment into the .msg file.
#
/^msgid/ {
  s/msgid[ 	]*"//
#
# This does not work now with the new format.
# /"$/! {
#   s/\\$//
#   s/$/ ... (more lines following)"/
# }
  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]*\)/$ #\2 Original Message:(\1)/p
}
#
# The .msg file contains, other than the .po file, only the translations
# but each given a unique ID.  Starting from 1 and incrementing by 1 for
# each message we assign them to the messages.
# It is important that the .po file used to generate the cat-id-tbl.c file
# (with po-to-tbl) is the same as the one used here.  (At least the order
# of declarations must not be changed.)
#
/^msgstr/ {
  s/msgstr[ 	]*"\(.*\)"/# \1/
# Clear substitution flag.
  tb
# Append the next line.
  :b
  N
# Look whether second part is continuation line.
  s/\(.*\n\)"\(.*\)"/\1\2/
# Yes, then branch.
  ta
  P
  D
# Note that D includes a jump to the start!!
# We found a continuation line.  But before printing insert '\'.
  :a
  s/\(.*\)\(\n.*\)/\1\\\2/
  P
# We cannot use D here.
  s/.*\n\(.*\)/\1/
  tb
}
d
