Skip to content

Commit

Permalink
gitk: Fix the Makefile to cope with systems lacking msgfmt
Browse files Browse the repository at this point in the history
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 <charles@hashpling.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Charles Bailey authored and Junio C Hamano committed Jan 11, 2008
1 parent f0c8426 commit 66e15a6
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 1 deletion.
7 changes: 6 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))

## po-file creation rules
XGETTEXT ?= xgettext
MSGFMT ?= msgfmt
ifdef NO_MSGFMT
MSGFMT ?= $(TCL_PATH) po/po2msg.sh
else
MSGFMT ?= msgfmt
endif

PO_TEMPLATE = po/gitk.pot
ALL_POFILES = $(wildcard po/*.po)
ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES))
Expand Down
1 change: 1 addition & 0 deletions po/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.msg
133 changes: 133 additions & 0 deletions po/po2msg.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec tclsh "$0" -- "$@"

# This is a really stupid program, which serves as an alternative to
# msgfmt. It _only_ translates to Tcl mode, does _not_ validate the
# input, and does _not_ output any statistics.

proc u2a {s} {
set res ""
foreach i [split $s ""] {
scan $i %c c
if {$c<128} {
# escape '[', '\' and ']'
if {$c == 0x5b || $c == 0x5d} {
append res "\\"
}
append res $i
} else {
append res \\u[format %04.4x $c]
}
}
return $res
}

set output_directory "."
set lang "dummy"
set files [list]
set show_statistics 0

# parse options
for {set i 0} {$i < $argc} {incr i} {
set arg [lindex $argv $i]
if {$arg == "--statistics"} {
incr show_statistics
continue
}
if {$arg == "--tcl"} {
# we know
continue
}
if {$arg == "-l"} {
incr i
set lang [lindex $argv $i]
continue
}
if {$arg == "-d"} {
incr i
set tmp [lindex $argv $i]
regsub "\[^/\]$" $tmp "&/" output_directory
continue
}
lappend files $arg
}

proc flush_msg {} {
global msgid msgstr mode lang out fuzzy
global translated_count fuzzy_count not_translated_count

if {![info exists msgid] || $mode == ""} {
return
}
set mode ""
if {$fuzzy == 1} {
incr fuzzy_count
set fuzzy 0
return
}

if {$msgid == ""} {
set prefix "set ::msgcat::header"
} else {
if {$msgstr == ""} {
incr not_translated_count
return
}
set prefix "::msgcat::mcset $lang \"[u2a $msgid]\""
incr translated_count
}

puts $out "$prefix \"[u2a $msgstr]\""
}

set fuzzy 0
set translated_count 0
set fuzzy_count 0
set not_translated_count 0
foreach file $files {
regsub "^.*/\(\[^/\]*\)\.po$" $file "$output_directory\\1.msg" outfile
set in [open $file "r"]
fconfigure $in -encoding utf-8
set out [open $outfile "w"]

set mode ""
while {[gets $in line] >= 0} {
if {[regexp "^#" $line]} {
if {[regexp ", fuzzy" $line]} {
set fuzzy 1
} else {
flush_msg
}
continue
} elseif {[regexp "^msgid \"(.*)\"$" $line dummy match]} {
flush_msg
set msgid $match
set mode "msgid"
} elseif {[regexp "^msgstr \"(.*)\"$" $line dummy match]} {
set msgstr $match
set mode "msgstr"
} elseif {$line == ""} {
flush_msg
} elseif {[regexp "^\"(.*)\"$" $line dummy match]} {
if {$mode == "msgid"} {
append msgid $match
} elseif {$mode == "msgstr"} {
append msgstr $match
} else {
puts stderr "I do not know what to do: $match"
}
} else {
puts stderr "Cannot handle $line"
}
}
flush_msg
close $in
close $out
}

if {$show_statistics} {
puts [concat "$translated_count translated messages, " \
"$fuzzy_count fuzzy ones, " \
"$not_translated_count untranslated ones."]
}

0 comments on commit 66e15a6

Please sign in to comment.