Skip to content

Commit 66e15a6

Browse files
hashplinggitster
authored andcommitted
gitk: Fix the Makefile to cope with systems lacking msgfmt
The po2msg.sh script and the .gitignore in the po directory have been shamelessly copied from the current git-gui. This enables the top level "make NO_MSGFMT" to work consistently for git across the git-gui and gitk sub-projects. This is the same effective patch that has previously been posted as a git.git patch which more succinctly described the copying of po/.gitignore and po/po2msg.sh from git-gui. Signed-off-by: Charles Bailey <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f0c8426 commit 66e15a6

File tree

3 files changed

+140
-1
lines changed

3 files changed

+140
-1
lines changed

Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1818

1919
## po-file creation rules
2020
XGETTEXT ?= xgettext
21-
MSGFMT ?= msgfmt
21+
ifdef NO_MSGFMT
22+
MSGFMT ?= $(TCL_PATH) po/po2msg.sh
23+
else
24+
MSGFMT ?= msgfmt
25+
endif
26+
2227
PO_TEMPLATE = po/gitk.pot
2328
ALL_POFILES = $(wildcard po/*.po)
2429
ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES))

po/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.msg

po/po2msg.sh

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
#!/bin/sh
2+
# Tcl ignores the next line -*- tcl -*- \
3+
exec tclsh "$0" -- "$@"
4+
5+
# This is a really stupid program, which serves as an alternative to
6+
# msgfmt. It _only_ translates to Tcl mode, does _not_ validate the
7+
# input, and does _not_ output any statistics.
8+
9+
proc u2a {s} {
10+
set res ""
11+
foreach i [split $s ""] {
12+
scan $i %c c
13+
if {$c<128} {
14+
# escape '[', '\' and ']'
15+
if {$c == 0x5b || $c == 0x5d} {
16+
append res "\\"
17+
}
18+
append res $i
19+
} else {
20+
append res \\u[format %04.4x $c]
21+
}
22+
}
23+
return $res
24+
}
25+
26+
set output_directory "."
27+
set lang "dummy"
28+
set files [list]
29+
set show_statistics 0
30+
31+
# parse options
32+
for {set i 0} {$i < $argc} {incr i} {
33+
set arg [lindex $argv $i]
34+
if {$arg == "--statistics"} {
35+
incr show_statistics
36+
continue
37+
}
38+
if {$arg == "--tcl"} {
39+
# we know
40+
continue
41+
}
42+
if {$arg == "-l"} {
43+
incr i
44+
set lang [lindex $argv $i]
45+
continue
46+
}
47+
if {$arg == "-d"} {
48+
incr i
49+
set tmp [lindex $argv $i]
50+
regsub "\[^/\]$" $tmp "&/" output_directory
51+
continue
52+
}
53+
lappend files $arg
54+
}
55+
56+
proc flush_msg {} {
57+
global msgid msgstr mode lang out fuzzy
58+
global translated_count fuzzy_count not_translated_count
59+
60+
if {![info exists msgid] || $mode == ""} {
61+
return
62+
}
63+
set mode ""
64+
if {$fuzzy == 1} {
65+
incr fuzzy_count
66+
set fuzzy 0
67+
return
68+
}
69+
70+
if {$msgid == ""} {
71+
set prefix "set ::msgcat::header"
72+
} else {
73+
if {$msgstr == ""} {
74+
incr not_translated_count
75+
return
76+
}
77+
set prefix "::msgcat::mcset $lang \"[u2a $msgid]\""
78+
incr translated_count
79+
}
80+
81+
puts $out "$prefix \"[u2a $msgstr]\""
82+
}
83+
84+
set fuzzy 0
85+
set translated_count 0
86+
set fuzzy_count 0
87+
set not_translated_count 0
88+
foreach file $files {
89+
regsub "^.*/\(\[^/\]*\)\.po$" $file "$output_directory\\1.msg" outfile
90+
set in [open $file "r"]
91+
fconfigure $in -encoding utf-8
92+
set out [open $outfile "w"]
93+
94+
set mode ""
95+
while {[gets $in line] >= 0} {
96+
if {[regexp "^#" $line]} {
97+
if {[regexp ", fuzzy" $line]} {
98+
set fuzzy 1
99+
} else {
100+
flush_msg
101+
}
102+
continue
103+
} elseif {[regexp "^msgid \"(.*)\"$" $line dummy match]} {
104+
flush_msg
105+
set msgid $match
106+
set mode "msgid"
107+
} elseif {[regexp "^msgstr \"(.*)\"$" $line dummy match]} {
108+
set msgstr $match
109+
set mode "msgstr"
110+
} elseif {$line == ""} {
111+
flush_msg
112+
} elseif {[regexp "^\"(.*)\"$" $line dummy match]} {
113+
if {$mode == "msgid"} {
114+
append msgid $match
115+
} elseif {$mode == "msgstr"} {
116+
append msgstr $match
117+
} else {
118+
puts stderr "I do not know what to do: $match"
119+
}
120+
} else {
121+
puts stderr "Cannot handle $line"
122+
}
123+
}
124+
flush_msg
125+
close $in
126+
close $out
127+
}
128+
129+
if {$show_statistics} {
130+
puts [concat "$translated_count translated messages, " \
131+
"$fuzzy_count fuzzy ones, " \
132+
"$not_translated_count untranslated ones."]
133+
}

0 commit comments

Comments
 (0)