Blame exgettext

Packit Service fdd496
#! /bin/sh
Packit Service fdd496
# Wrapper around gettext for programs using the msgid convention.
Packit Service fdd496
Packit Service fdd496
# Copyright (C) 1998, 2001, 2004, 2009-2013, 2015-2017 Free Software
Packit Service fdd496
# Foundation, Inc.
Packit Service fdd496
Packit Service fdd496
# Written by Paul Eggert <eggert@twinsun.com>.
Packit Service fdd496
Packit Service fdd496
# This program is free software: you can redistribute it and/or modify
Packit Service fdd496
# it under the terms of the GNU General Public License as published by
Packit Service fdd496
# the Free Software Foundation, either version 3 of the License, or
Packit Service fdd496
# (at your option) any later version.
Packit Service fdd496
Packit Service fdd496
# This program is distributed in the hope that it will be useful,
Packit Service fdd496
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fdd496
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service fdd496
# GNU General Public License for more details.
Packit Service fdd496
Packit Service fdd496
# You should have received a copy of the GNU General Public License
Packit Service fdd496
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service fdd496
Packit Service fdd496
# Always operate in the C locale.
Packit Service fdd496
LANG=C
Packit Service fdd496
LANGUAGE=C
Packit Service fdd496
LC_ALL=C
Packit Service fdd496
export LANG LANGUAGE LC_ALL
Packit Service fdd496
Packit Service fdd496
# Set AWK if environment has not already set it.
Packit Service fdd496
AWK=${AWK-awk}
Packit Service fdd496
Packit Service fdd496
# The argument to this wrapper is the xgettext command to be executed.
Packit Service fdd496
# Extract the xgettext program name from the rest of the command.
Packit Service fdd496
xgettext=${1?}
Packit Service fdd496
shift
Packit Service fdd496
Packit Service fdd496
# Save work if we're just wrapping a no-op.
Packit Service fdd496
case $xgettext in
Packit Service fdd496
:) exit;;
Packit Service fdd496
esac
Packit Service fdd496
Packit Service fdd496
# Find the files to be scanned, and the directory to scan them from.
Packit Service fdd496
directory=.
Packit Service fdd496
files=
Packit Service fdd496
for i
Packit Service fdd496
do
Packit Service fdd496
  case $i in
Packit Service fdd496
  --directory=*)
Packit Service fdd496
    directory=`expr " $i" : ' --directory=\(.*\)'`;;
Packit Service fdd496
  --files-from=*)
Packit Service fdd496
    files_from=`expr " $i" : ' --files-from=\(.*\)'`
Packit Service fdd496
    files=`$AWK '/^[^#]/ { print }' $files_from`;;
Packit Service fdd496
  esac
Packit Service fdd496
done
Packit Service fdd496
Packit Service fdd496
# Generate keyword options for xgettext,
Packit Service fdd496
# by scanning for declarations of functions
Packit Service fdd496
# whose parameter names end in "msgid".
Packit Service fdd496
generate_keyword_options='
Packit Service fdd496
  /^[A-Z_a-z].*\(.*msgid[,)]/ {
Packit Service fdd496
Packit Service fdd496
    paren_index = index($0, "(")
Packit Service fdd496
Packit Service fdd496
    name = substr($0, 1, paren_index - 1)
Packit Service fdd496
    sub(/[^0-9A-Z_a-z]*$/, "", name)
Packit Service fdd496
    sub(/[	 ]+PARAMS/, "", name)
Packit Service fdd496
    sub(/[	 ]+VPARAMS/, "", name)
Packit Service fdd496
    sub(/.*[^0-9A-Z_a-z]/, "", name)
Packit Service fdd496
Packit Service fdd496
    args = substr($0, paren_index)
Packit Service fdd496
    sub(/msgid[,)].*/, "", args)
Packit Service fdd496
    for (n = 1; sub(/^[^,]*,/, "", args); n++) {
Packit Service fdd496
      continue;
Packit Service fdd496
    }
Packit Service fdd496
Packit Service fdd496
    if (n == 1) {
Packit Service fdd496
      keyword = name
Packit Service fdd496
    } else {
Packit Service fdd496
      keyword = name ":" n
Packit Service fdd496
    }
Packit Service fdd496
Packit Service fdd496
    if (! keyword_seen[keyword]++) {
Packit Service fdd496
      print "--keyword=" keyword
Packit Service fdd496
    }
Packit Service fdd496
  }
Packit Service fdd496
'
Packit Service fdd496
keyword_options=`(
Packit Service fdd496
  cd $directory &&
Packit Service fdd496
  $AWK "$generate_keyword_options" $files < /dev/null
Packit Service fdd496
)` || exit
Packit Service fdd496
Packit Service fdd496
# Run the xgettext command, with extra input containing the extra
Packit Service fdd496
# msgids that it wouldn't normally find.
Packit Service fdd496
generate_emsgids='
Packit Service fdd496
  /%e.*}/ {
Packit Service fdd496
    line = $0
Packit Service fdd496
    while ((percent_index = index(line, "%e")) != 0) {
Packit Service fdd496
      line = substr(line, percent_index + 2)
Packit Service fdd496
      bracket_index = index(line, "}")
Packit Service fdd496
      if (bracket_index == 0) {
Packit Service fdd496
	continue
Packit Service fdd496
      }
Packit Service fdd496
      msgid = substr(line, 1, bracket_index - 1)
Packit Service fdd496
      if (index(msgid, "%") != 0) {
Packit Service fdd496
        continue
Packit Service fdd496
      }
Packit Service fdd496
      printf "#line %d \"%s\"\n", FNR, FILENAME
Packit Service fdd496
      printf "_(\"%s\")\n", msgid
Packit Service fdd496
      line = substr(line, bracket_index + 1)
Packit Service fdd496
    }
Packit Service fdd496
  }
Packit Service fdd496
'
Packit Service fdd496
(cd $directory &&
Packit Service fdd496
 $AWK "$generate_emsgids" $files < /dev/null
Packit Service fdd496
) | "$xgettext" $keyword_options ${1+"$@"} -