summaryrefslogtreecommitdiff
path: root/mk/tools
diff options
context:
space:
mode:
authorjoerg <joerg@pkgsrc.org>2009-03-20 16:13:02 +0000
committerjoerg <joerg@pkgsrc.org>2009-03-20 16:13:02 +0000
commit5f72a77f4ad612097645f263b41438b105c52536 (patch)
tree95eca6c8a3b7faa4e3ae0cd6e71d69dcc4ac4041 /mk/tools
parent543cd10f9f12274db7f2f2b714ad7fd9c4edaf73 (diff)
downloadpkgsrc-5f72a77f4ad612097645f263b41438b105c52536.tar.gz
Refactor msgfmt.sh script to conditionally strip the msgid_plural for
old NetBSD versions and to strip msgctx if requested by the package. This allows to replace the use of msgfmtstrip in various packages by setting MSGFMT_STRIP_MSGCTX.
Diffstat (limited to 'mk/tools')
-rw-r--r--mk/tools/gettext.mk31
-rw-r--r--mk/tools/msgfmt-msgctxt.awk19
-rw-r--r--mk/tools/msgfmt-msgid_plural.awk262
-rwxr-xr-xmk/tools/msgfmt.sh271
4 files changed, 315 insertions, 268 deletions
diff --git a/mk/tools/gettext.mk b/mk/tools/gettext.mk
index 357b5536e22..bdab8da7e96 100644
--- a/mk/tools/gettext.mk
+++ b/mk/tools/gettext.mk
@@ -1,4 +1,4 @@
-# $NetBSD: gettext.mk,v 1.8 2007/06/15 17:11:33 joerg Exp $
+# $NetBSD: gettext.mk,v 1.9 2009/03/20 16:13:02 joerg Exp $
#
# Copyright (c) 2006 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -59,6 +59,9 @@ MAKEFLAGS+= TOOLS_IGNORE.msgfmt=
. if defined(TOOLS_PLATFORM.msgfmt) && !empty(TOOLS_PLATFORM.msgfmt)
_TOOLS_USE_PKGSRC.msgfmt?= no
#
+# MSGFMT_STRIP_MSGID_PLURAL: Yes for msgfmt < 0.10.36
+# MSGFMT_STRIP_MSGCTX: To be set by packages
+#
# Determine if the platform-supplied msgfmt is new enough to support
# the msgid_plural statement. We need at least 0.10.36 for GNU msgfmt.
#
@@ -68,14 +71,23 @@ _TOOLS_USE_PKGSRC.msgfmt?= no
. if !defined(_TOOLS_USE_MSGFMT_SH)
_TOOLS_VERSION.msgfmt!= ${TOOLS_PLATFORM.msgfmt} --version | \
${AWK} '{ print $$4; exit }'
-_TOOLS_USE_MSGFMT_SH!= \
+. if !defined(MSGFMT_STRIP_MSGID_PLURAL)
+MSGFMT_STRIP_MSGID_PLURAL!= \
if ${PKG_ADMIN} pmatch "gettext>0.10.35" \
gettext-${_TOOLS_VERSION.msgfmt:Q}; then \
${ECHO} no; \
else \
${ECHO} yes; \
fi
+. endif
. endif
+MSGFMT_STRIP_MSGID_PLURAL?= no
+MSGFMT_STRIP_MSGCTX?= no
+.if ${MSGFMT_STRIP_MSGID_PLURAL} == "yes" || ${MSGFMT_STRIP_MSGCTX} == "yes"
+_TOOLS_USE_MSGFMT_SH= yes
+.else
+_TOOLS_USE_MSGFMT_SH= no
+.endif
MAKEVARS+= _TOOLS_USE_MSGFMT_SH
. else
_TOOLS_USE_PKGSRC.msgfmt= yes
@@ -91,18 +103,21 @@ CHECK_BUILTIN.gettext:= no
_TOOLS_USE_PKGSRC.msgfmt= yes
. endif
-. if !empty(_TOOLS_USE_PKGSRC.msgfmt:M[yY][eE][sS])
-TOOLS_CREATE+= msgfmt
-TOOLS_DEPENDS.msgfmt?= ${_TOOLS_DEP.gettext-tools}:../../devel/gettext-tools
-TOOLS_FIND_PREFIX+= TOOLS_PREFIX.msgfmt=${TOOLS_DEPENDS.msgfmt:C/:.*//}
-TOOLS_PATH.msgfmt= ${TOOLS_PREFIX.msgfmt}/bin/msgfmt
-. elif defined(_TOOLS_USE_MSGFMT_SH) && \
+. if defined(_TOOLS_USE_MSGFMT_SH) && \
!empty(_TOOLS_USE_MSGFMT_SH:M[yY][eE][sS])
USE_TOOLS+= awk sh
TOOLS_PATH.msgfmt= ${PKGSRCDIR}/mk/tools/msgfmt.sh
TOOLS_SCRIPT.msgfmt= AWK=${TOOLS_AWK:Q} CAT=${TOOLS_CAT:Q} \
MSGFMT=${TOOLS_PLATFORM.msgfmt:Q} \
+ PKGSRCDIR=${PKGSRCDIR:Q} \
+ MSGFMT_STRIP_MSGID_PLURAL=${MSGFMT_STRIP_MSGID_PLURAL} \
+ MSGFMT_STRIP_MSGCTX=${MSGFMT_STRIP_MSGCTX} \
${TOOLS_SH} ${TOOLS_PATH.msgfmt} "$$@"
+. elif !empty(_TOOLS_USE_PKGSRC.msgfmt:M[yY][eE][sS])
+TOOLS_CREATE+= msgfmt
+TOOLS_DEPENDS.msgfmt?= ${_TOOLS_DEP.gettext-tools}:../../devel/gettext-tools
+TOOLS_FIND_PREFIX+= TOOLS_PREFIX.msgfmt=${TOOLS_DEPENDS.msgfmt:C/:.*//}
+TOOLS_PATH.msgfmt= ${TOOLS_PREFIX.msgfmt}/bin/msgfmt
. endif
. endif
.endif
diff --git a/mk/tools/msgfmt-msgctxt.awk b/mk/tools/msgfmt-msgctxt.awk
new file mode 100644
index 00000000000..271e6642972
--- /dev/null
+++ b/mk/tools/msgfmt-msgctxt.awk
@@ -0,0 +1,19 @@
+# $NetBSD: msgfmt-msgctxt.awk,v 1.1 2009/03/20 16:13:02 joerg Exp $
+#
+# Simple awk script to strip out .po entries with "msgctxt" or "#~|", so the
+# resultant file can be handled by the msgfmt 0.14.x.
+{
+if (/^$/) { entry_end(); }
+else if ($1 == "msgctxt" || $2 == "msgctxt") { skip = 1; }
+else if ($1 == "#~|") { skip = 1; }
+else { entry = entry $0 "\n" }
+}
+
+END { entry_end(); }
+
+function entry_end() {
+ if (!skip)
+ print entry;
+ entry = "";
+ skip = 0;
+}
diff --git a/mk/tools/msgfmt-msgid_plural.awk b/mk/tools/msgfmt-msgid_plural.awk
new file mode 100644
index 00000000000..866d9568f5a
--- /dev/null
+++ b/mk/tools/msgfmt-msgid_plural.awk
@@ -0,0 +1,262 @@
+# $NetBSD: msgfmt-msgid_plural.awk,v 1.1 2009/03/20 16:13:02 joerg Exp $
+#
+# Strip msgid_plural which is not understood by msgfmt before 0.10.36.
+#
+
+#
+# strip_bad_ctrl_sequences(string)
+# If we see \c, where c is anything but a legal character as
+# defined by msgfmt-0.10.35, then replace the backslash with a
+# '?'. Yes, this is a hack, but it works around a bug in the
+# way that older msgfmt mis-identifies some "control" sequences.
+#
+function strip_bad_ctrl_sequences(string, left, right) {
+ left = ""
+ right = string
+ while (match(right, /\\/) > 0) {
+ if (substr(right, RSTART + 1, 1) ~ /[bfnrtxX0-7"\\]/) {
+ left = left substr(right, 1, RSTART + 1)
+ right = substr(right, RSTART + 2)
+ } else {
+ left = left substr(right, 1, RSTART - 1) "?"
+ right = substr(right, RSTART + 1)
+ }
+ }
+ return left right
+}
+
+BEGIN {
+ EMPTY = "^$"
+ SPACE = "[ ]*"
+ KEYWORD_SEP = "([ ]+|[ ]*\"|$)"
+ OBSOLETE = "#~ "
+ OBSOLETE_RE = "^(#~[ ]+)?[ ]*"
+ OBSOLETE_RE_MATCH = "^#~[ ]+"
+ MSG_CONTINUATION_RE = OBSOLETE_RE "\""
+
+ result = getline
+ if (result < 1) exit result
+
+ s = 0
+ p = 0
+ obsolete = ""
+
+ while (result == 1) {
+
+ # Buffer any "msgid" statements into the singular array.
+ # Strip all trailing empty strings that have no effect on
+ # the output.
+ #
+ MSGID_RE = OBSOLETE_RE "msgid"
+ if ($0 ~ MSGID_RE KEYWORD_SEP) {
+ obsolete = ""
+ if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
+ sub(MSGID_RE SPACE, "");
+ s = 0
+ if ($0 ~ EMPTY) $0 = "\"\""
+ $0 = strip_bad_ctrl_sequences($0)
+ singular[s++] = $0
+ while (result = getline) {
+ if ($0 ~ OBSOLETE_RE "$") continue
+ if ($0 !~ MSG_CONTINUATION_RE) break
+ sub(OBSOLETE_RE , "")
+ $0 = strip_bad_ctrl_sequences($0)
+ singular[s++] = $0
+ }
+ if (result < 0) break
+ while ((s > 1) && (singular[s-1] ~ /^""$/)) s--
+ continue
+ }
+
+ # Buffer any "msgid_plural" statements into the plural
+ # array. Strip all trailing empty strings that have no
+ # effect on the output.
+ #
+ MSGID_PLURAL_RE = OBSOLETE_RE "msgid_plural"
+ if ($0 ~ MSGID_PLURAL_RE KEYWORD_SEP) {
+ obsolete = ""
+ if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
+ sub(MSGID_PLURAL_RE SPACE, "");
+ p = 0
+ if ($0 ~ EMPTY) $0 = "\"\""
+ $0 = strip_bad_ctrl_sequences($0)
+ plural[p++] = $0
+ while (result = getline) {
+ if ($0 ~ OBSOLETE_RE "$") continue
+ if ($0 !~ MSG_CONTINUATION_RE) break
+ sub(OBSOLETE_RE, "")
+ $0 = strip_bad_ctrl_sequences($0)
+ plural[p++] = $0
+ }
+ if (result < 0) break
+ while ((p > 1) && (plural[p-1] ~ /^""$/)) p--
+ continue
+ }
+
+ # If we see "msgstr", then we are outputting the
+ # translation of a singular form of a message, so dump
+ # the contents of the singular array and output the
+ # "msgstr" translation. Strip all trailing empty strings
+ # that have no effect on the output, and handle "\n"
+ # pickiness between msgid and msgstr.
+ #
+ MSGSTR_RE = OBSOLETE_RE "msgstr"
+ if ($0 ~ MSGSTR_RE KEYWORD_SEP) {
+ if (s > 0) {
+ print obsolete "msgid " singular[0]
+ for (i = 1; i < s; i++)
+ print obsolete singular[i]
+ }
+ if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
+ sub(MSGSTR_RE SPACE, "")
+ t = 0
+ if ($0 ~ EMPTY) $0 = "\"\""
+ $0 = strip_bad_ctrl_sequences($0)
+ translation[t++] = $0
+ while (result = getline) {
+ if ($0 !~ MSG_CONTINUATION_RE) break
+ sub(OBSOLETE_RE, "")
+ $0 = strip_bad_ctrl_sequences($0)
+ translation[t++] = $0
+ }
+ if (result < 0) break
+ while ((t > 1) && (translation[t-1] ~ /^""$/)) t--
+ if ((singular[s-1] ~ /\\n"$/) &&
+ (translation[t-1] !~ /\\n"$/)) {
+ if (translation[t-1] !~ /""/)
+ sub("\"$", "\\n\"", translation[t-1])
+ }
+ if (t > 0) {
+ print obsolete "msgstr " translation[0]
+ for (i = 1; i < t; i++)
+ print obsolete translation[i]
+ }
+ continue
+ }
+
+ # If we see "msgstr[0]", then we are outputting the
+ # translation of a singular form of a message, so dump
+ # the contents of the singular array and output the
+ # "msgstr[0]" translation. Strip all trailing empty
+ # strings that have no effect on the output, and handle
+ # "\n" pickiness between msgid and msgstr.
+ #
+ MSGSTR0_RE = OBSOLETE_RE "msgstr[[]0[]]"
+ if ($0 ~ MSGSTR0_RE KEYWORD_SEP) {
+ if (s > 0) {
+ print obsolete "msgid " singular[0]
+ for (i = 1; i < s; i++)
+ print obsolete singular[i]
+ }
+ if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
+ sub(MSGSTR0_RE SPACE, "");
+ t = 0
+ if ($0 ~ EMPTY) $0 = "\"\""
+ $0 = strip_bad_ctrl_sequences($0)
+ translation[t++] = $0
+ while (result = getline) {
+ if ($0 !~ MSG_CONTINUATION_RE) break
+ sub(OBSOLETE_RE, "")
+ $0 = strip_bad_ctrl_sequences($0)
+ translation[t++] = $0
+ }
+ if (result < 0) break
+ while ((t > 1) && (translation[t-1] ~ /^""$/)) t--
+ if ((singular[s-1] ~ /\\n"$/) &&
+ (translation[t-1] !~ /\\n"$/)) {
+ if (translation[t-1] !~ /""/)
+ sub("\"$", "\\n\"", translation[t-1])
+ }
+ if (t > 0) {
+ print obsolete "msgstr " translation[0]
+ for (i = 1; i < t; i++)
+ print obsolete translation[i]
+ }
+ continue
+ }
+
+ # If we see "msgstr[1]", then we are outputting the
+ # translation of a plural form of a message, so dump
+ # the contents of the plural array and output the
+ # "msgstr[1]" translation. Strip all trailing empty
+ # strings that have no effect on the output, and handle
+ # "\n" pickiness between msgid and msgstr.
+ #
+ MSGSTR1_RE = OBSOLETE_RE "msgstr[[]1[]]"
+ if ($0 ~ MSGSTR1_RE KEYWORD_SEP) {
+ #
+ # Check if the singular and plural arrays are equal.
+ # If they are, then we do not need to output an
+ # additional plural translation at all since the
+ # "singular" form is already correct.
+ #
+ equal = 0
+ if (s == p) {
+ equal = 1;
+ for (i = 0; i < s; i++) {
+ if (singular[i] != plural[i]) {
+ equal = 0; break
+ }
+ }
+ }
+ if (equal == 1) {
+ while (result = getline) {
+ if ($0 !~ MSG_CONTINUATION_RE) break
+ }
+ if (result < 0) break
+ s = 0; p = 0
+ continue
+ }
+
+ if (p > 0) {
+ print obsolete "msgid " plural[0]
+ for (i = 1; i < p; i++)
+ print obsolete plural[i]
+ }
+ if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
+ sub(MSGSTR1_RE SPACE, "");
+ t = 0
+ if ($0 ~ EMPTY) $0 = "\"\""
+ $0 = strip_bad_ctrl_sequences($0)
+ translation[t++] = $0
+ while (result = getline) {
+ if ($0 !~ MSG_CONTINUATION_RE) break
+ sub(OBSOLETE_RE, "")
+ $0 = strip_bad_ctrl_sequences($0)
+ translation[t++] = $0
+ }
+ if (result < 0) break
+ while ((t > 1) && (translation[t-1] ~ /^""$/)) t--
+ if ((plural[p-1] ~ /\\n"$/) &&
+ (translation[t-1] !~ /\\n"$/)) {
+ if (translation[t-1] !~ /""/)
+ sub("\"$", "\\n\"", translation[t-1])
+ }
+ if (t > 0) {
+ print obsolete "msgstr " translation[0]
+ for (i = 1; i < t; i++)
+ print obsolete translation[i]
+ }
+ continue
+ }
+
+ # We drop all other "msgstr[N]" translations since the
+ # old format only supported a single translation per
+ # plural form.
+ #
+ MSGSTRN_RE = OBSOLETE_RE "msgstr[[][0-9]+[]]"
+ if ($0 ~ MSGSTRN_RE KEYWORD_SEP) {
+ while (result = getline) {
+ if ($0 !~ MSG_CONTINUATION_RE) break
+ print $0
+ }
+ if (result < 0) break
+ continue
+ }
+
+ # Pass everything else verbatim.
+ print $0
+ result = getline
+ if (result < 0) break
+ }
+}
diff --git a/mk/tools/msgfmt.sh b/mk/tools/msgfmt.sh
index 585736993b7..cf122d54b8c 100755
--- a/mk/tools/msgfmt.sh
+++ b/mk/tools/msgfmt.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $NetBSD: msgfmt.sh,v 1.29 2007/09/25 10:32:17 hira Exp $
+# $NetBSD: msgfmt.sh,v 1.30 2009/03/20 16:13:02 joerg Exp $
#
# Copyright (c) 2006 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -158,262 +158,13 @@ if test "$pofile" != "-" -a ! -e "$pofile"; then
pofile="$popofile"
fi
-${CAT} $pofile | ${AWK} '
-#
-# strip_bad_ctrl_sequences(string)
-# If we see \c, where c is anything but a legal character as
-# defined by msgfmt-0.10.35, then replace the backslash with a
-# '?'. Yes, this is a hack, but it works around a bug in the
-# way that older msgfmt mis-identifies some "control" sequences.
-#
-function strip_bad_ctrl_sequences(string, left, right) {
- left = ""
- right = string
- while (match(right, /\\/) > 0) {
- if (substr(right, RSTART + 1, 1) ~ /[bfnrtxX0-7"\\]/) {
- left = left substr(right, 1, RSTART + 1)
- right = substr(right, RSTART + 2)
- } else {
- left = left substr(right, 1, RSTART - 1) "?"
- right = substr(right, RSTART + 1)
- }
- }
- return left right
-}
-
-BEGIN {
- EMPTY = "^$"
- SPACE = "[ ]*"
- KEYWORD_SEP = "([ ]+|[ ]*\"|$)"
- OBSOLETE = "#~ "
- OBSOLETE_RE = "^(#~[ ]+)?[ ]*"
- OBSOLETE_RE_MATCH = "^#~[ ]+"
- MSG_CONTINUATION_RE = OBSOLETE_RE "\""
-
- result = getline
- if (result < 1) exit result
-
- s = 0
- p = 0
- obsolete = ""
-
- while (result == 1) {
-
- # Buffer any "msgid" statements into the singular array.
- # Strip all trailing empty strings that have no effect on
- # the output.
- #
- MSGID_RE = OBSOLETE_RE "msgid"
- if ($0 ~ MSGID_RE KEYWORD_SEP) {
- obsolete = ""
- if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
- sub(MSGID_RE SPACE, "");
- s = 0
- if ($0 ~ EMPTY) $0 = "\"\""
- $0 = strip_bad_ctrl_sequences($0)
- singular[s++] = $0
- while (result = getline) {
- if ($0 ~ OBSOLETE_RE "$") continue
- if ($0 !~ MSG_CONTINUATION_RE) break
- sub(OBSOLETE_RE , "")
- $0 = strip_bad_ctrl_sequences($0)
- singular[s++] = $0
- }
- if (result < 0) break
- while ((s > 1) && (singular[s-1] ~ /^""$/)) s--
- continue
- }
-
- # Buffer any "msgid_plural" statements into the plural
- # array. Strip all trailing empty strings that have no
- # effect on the output.
- #
- MSGID_PLURAL_RE = OBSOLETE_RE "msgid_plural"
- if ($0 ~ MSGID_PLURAL_RE KEYWORD_SEP) {
- obsolete = ""
- if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
- sub(MSGID_PLURAL_RE SPACE, "");
- p = 0
- if ($0 ~ EMPTY) $0 = "\"\""
- $0 = strip_bad_ctrl_sequences($0)
- plural[p++] = $0
- while (result = getline) {
- if ($0 ~ OBSOLETE_RE "$") continue
- if ($0 !~ MSG_CONTINUATION_RE) break
- sub(OBSOLETE_RE, "")
- $0 = strip_bad_ctrl_sequences($0)
- plural[p++] = $0
- }
- if (result < 0) break
- while ((p > 1) && (plural[p-1] ~ /^""$/)) p--
- continue
- }
-
- # If we see "msgstr", then we are outputting the
- # translation of a singular form of a message, so dump
- # the contents of the singular array and output the
- # "msgstr" translation. Strip all trailing empty strings
- # that have no effect on the output, and handle "\n"
- # pickiness between msgid and msgstr.
- #
- MSGSTR_RE = OBSOLETE_RE "msgstr"
- if ($0 ~ MSGSTR_RE KEYWORD_SEP) {
- if (s > 0) {
- print obsolete "msgid " singular[0]
- for (i = 1; i < s; i++)
- print obsolete singular[i]
- }
- if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
- sub(MSGSTR_RE SPACE, "")
- t = 0
- if ($0 ~ EMPTY) $0 = "\"\""
- $0 = strip_bad_ctrl_sequences($0)
- translation[t++] = $0
- while (result = getline) {
- if ($0 !~ MSG_CONTINUATION_RE) break
- sub(OBSOLETE_RE, "")
- $0 = strip_bad_ctrl_sequences($0)
- translation[t++] = $0
- }
- if (result < 0) break
- while ((t > 1) && (translation[t-1] ~ /^""$/)) t--
- if ((singular[s-1] ~ /\\n"$/) &&
- (translation[t-1] !~ /\\n"$/)) {
- if (translation[t-1] !~ /""/)
- sub("\"$", "\\n\"", translation[t-1])
- }
- if (t > 0) {
- print obsolete "msgstr " translation[0]
- for (i = 1; i < t; i++)
- print obsolete translation[i]
- }
- continue
- }
-
- # If we see "msgstr[0]", then we are outputting the
- # translation of a singular form of a message, so dump
- # the contents of the singular array and output the
- # "msgstr[0]" translation. Strip all trailing empty
- # strings that have no effect on the output, and handle
- # "\n" pickiness between msgid and msgstr.
- #
- MSGSTR0_RE = OBSOLETE_RE "msgstr[[]0[]]"
- if ($0 ~ MSGSTR0_RE KEYWORD_SEP) {
- if (s > 0) {
- print obsolete "msgid " singular[0]
- for (i = 1; i < s; i++)
- print obsolete singular[i]
- }
- if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
- sub(MSGSTR0_RE SPACE, "");
- t = 0
- if ($0 ~ EMPTY) $0 = "\"\""
- $0 = strip_bad_ctrl_sequences($0)
- translation[t++] = $0
- while (result = getline) {
- if ($0 !~ MSG_CONTINUATION_RE) break
- sub(OBSOLETE_RE, "")
- $0 = strip_bad_ctrl_sequences($0)
- translation[t++] = $0
- }
- if (result < 0) break
- while ((t > 1) && (translation[t-1] ~ /^""$/)) t--
- if ((singular[s-1] ~ /\\n"$/) &&
- (translation[t-1] !~ /\\n"$/)) {
- if (translation[t-1] !~ /""/)
- sub("\"$", "\\n\"", translation[t-1])
- }
- if (t > 0) {
- print obsolete "msgstr " translation[0]
- for (i = 1; i < t; i++)
- print obsolete translation[i]
- }
- continue
- }
-
- # If we see "msgstr[1]", then we are outputting the
- # translation of a plural form of a message, so dump
- # the contents of the plural array and output the
- # "msgstr[1]" translation. Strip all trailing empty
- # strings that have no effect on the output, and handle
- # "\n" pickiness between msgid and msgstr.
- #
- MSGSTR1_RE = OBSOLETE_RE "msgstr[[]1[]]"
- if ($0 ~ MSGSTR1_RE KEYWORD_SEP) {
- #
- # Check if the singular and plural arrays are equal.
- # If they are, then we do not need to output an
- # additional plural translation at all since the
- # "singular" form is already correct.
- #
- equal = 0
- if (s == p) {
- equal = 1;
- for (i = 0; i < s; i++) {
- if (singular[i] != plural[i]) {
- equal = 0; break
- }
- }
- }
- if (equal == 1) {
- while (result = getline) {
- if ($0 !~ MSG_CONTINUATION_RE) break
- }
- if (result < 0) break
- s = 0; p = 0
- continue
- }
-
- if (p > 0) {
- print obsolete "msgid " plural[0]
- for (i = 1; i < p; i++)
- print obsolete plural[i]
- }
- if ($0 ~ OBSOLETE_RE_MATCH) obsolete = OBSOLETE
- sub(MSGSTR1_RE SPACE, "");
- t = 0
- if ($0 ~ EMPTY) $0 = "\"\""
- $0 = strip_bad_ctrl_sequences($0)
- translation[t++] = $0
- while (result = getline) {
- if ($0 !~ MSG_CONTINUATION_RE) break
- sub(OBSOLETE_RE, "")
- $0 = strip_bad_ctrl_sequences($0)
- translation[t++] = $0
- }
- if (result < 0) break
- while ((t > 1) && (translation[t-1] ~ /^""$/)) t--
- if ((plural[p-1] ~ /\\n"$/) &&
- (translation[t-1] !~ /\\n"$/)) {
- if (translation[t-1] !~ /""/)
- sub("\"$", "\\n\"", translation[t-1])
- }
- if (t > 0) {
- print obsolete "msgstr " translation[0]
- for (i = 1; i < t; i++)
- print obsolete translation[i]
- }
- continue
- }
-
- # We drop all other "msgstr[N]" translations since the
- # old format only supported a single translation per
- # plural form.
- #
- MSGSTRN_RE = OBSOLETE_RE "msgstr[[][0-9]+[]]"
- if ($0 ~ MSGSTRN_RE KEYWORD_SEP) {
- while (result = getline) {
- if ($0 !~ MSG_CONTINUATION_RE) break
- print $0
- }
- if (result < 0) break
- continue
- }
-
- # Pass everything else verbatim.
- print $0
- result = getline
- if (result < 0) break
- }
-}
-' | $debug | $cmd
+${CAT} $pofile | \
+if test "${MSGFMT_STRIP_MSGCTX}" = "yes"; then
+ ${AWK} -f ${PKGSRCDIR}/mk/tools/msgfmt-msgctx.awk
+else
+ ${CAT}
+fi | if test "$MSGFMT_STRIP_MSGID_PLURAL" = "yes"; then
+ ${AWK} -f ${PKGSRCDIR}/mk/tools/msgfmt-msgid_plural.awk
+else
+ ${CAT}
+fi | $debug | $cmd