summaryrefslogtreecommitdiff
path: root/scripts/mark_untranslated.awk
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/mark_untranslated.awk')
-rw-r--r--scripts/mark_untranslated.awk114
1 files changed, 114 insertions, 0 deletions
diff --git a/scripts/mark_untranslated.awk b/scripts/mark_untranslated.awk
new file mode 100644
index 000000000..63608197f
--- /dev/null
+++ b/scripts/mark_untranslated.awk
@@ -0,0 +1,114 @@
+BEGIN {
+ STRLINE = ""
+ TRANS_STATUS = 9
+
+ if (RANGE != "") {
+ # Check input range
+ if (match(RANGE, /^[0-9]+(:[0-9]+)?$/) == 1) {
+ TPOS = index(RANGE, ":")
+ if (TPOS > 0) {
+ RANGE_START = strtonum(substr(RANGE, 1, TPOS - 1))
+ RANGE_END = strtonum(substr(RANGE, TPOS + 1, length(RANGE)))
+ } else {
+ RANGE_START = strtonum(RANGE)
+ RANGE_END = strtonum(RANGE)
+ }
+ print "** Untranslating messages in range from " RANGE_START " to " RANGE_END "." >"/dev/stderr"
+ } else {
+ print "Range should be in format '<number>' or '<start>:<end>'." >"/dev/stderr"
+ exit 1
+ }
+ }
+}
+
+/^#: / {
+ line = $0
+ gsub(/^#: [^:]*:/, "", line)
+ TPOS = index(line, ", ")
+ if (STRLINE == "") {
+ STRLINE_FIRST = line
+ }
+ STRLINE_PREV = STRLINE
+ if (TPOS == 0) {
+ STRLINE = line
+ } else {
+ STRLINE = substr(line, 1, TPOS - 1)
+ }
+}
+
+/^msgid / {
+ line = $0
+ gsub(/^msgid /, "", line)
+ MSGID = line
+}
+
+/^msgstr / {
+ line = $0
+ gsub(/^msgstr /, "", line)
+ MSGSTR = line
+
+ if (STRLINE != "") {
+ if (MSGID == MSGSTR) {
+ IS_TRANSLATED = 0
+ } else {
+ IS_TRANSLATED = 1
+ }
+
+ if (RANGE != "" && STRLINE >= RANGE_START && STRLINE <= RANGE_END) {
+ if (IS_TRANSLATED == 1) {
+ print "** String " STRLINE " looks translated, leaving unchanged!" >"/dev/stderr"
+ } else {
+ untranslate()
+ }
+ }
+
+ if (TRANS_STATUS == 9) {
+ TRANS_STATUS = IS_TRANSLATED
+ if (IS_TRANSLATED == 0) {
+ UNTRANS_START = STRLINE
+ }
+ } else {
+ if (TRANS_STATUS == 0 && IS_TRANSLATED == 1) {
+ # The previous strings were untranslated but this one is
+ if (STRLINE_PREV == UNTRANS_START) {
+ print "** String looks untranslated: " STRLINE_PREV >"/dev/stderr"
+ } else {
+ print "** Strings look untranslated: " UNTRANS_START " - " STRLINE_PREV >"/dev/stderr"
+ }
+ TRANS_STATUS = IS_TRANSLATED
+ }
+ if (TRANS_STATUS == 1 && IS_TRANSLATED == 0) {
+ TRANS_STATUS = IS_TRANSLATED
+ UNTRANS_START = STRLINE
+ }
+ }
+ }
+}
+
+{
+ # For all lines: if untranslating, write line to $filename.untrans
+ if (RANGE != "") {
+ print $0
+ }
+}
+
+END {
+ if (TRANS_STATUS == 0) {
+ if (UNTRANS_START == STRLINE_FIRST) {
+ print "** File looks untranslated (" UNTRANS_START " - " STRLINE ")" >"/dev/stderr"
+ } else {
+ print "** Strings look untranslated: " UNTRANS_START " - " STRLINE >"/dev/stderr"
+ }
+ }
+}
+
+function untranslate() {
+ print "** Untranslating string " STRLINE >"/dev/stderr"
+ print "msgstr \"\""
+ getline
+ # Skip other lines belonging to this msgstr
+ while (match($0, /^[[:space:]]*"/) > 0) {
+ getline
+ }
+ IS_TRANSLATED = 1
+}