summaryrefslogtreecommitdiff
path: root/scripts/mark_untranslated.awk
blob: 63608197f6eeac24dcfe4593cc0cbd60ca9a8a25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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
}