All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] gitk: Fix the Makefile to cope with systems lacking msgfmt
@ 2008-01-09 14:31 Charles Bailey
  0 siblings, 0 replies; only message in thread
From: Charles Bailey @ 2008-01-09 14:31 UTC (permalink / raw)
  To: git

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>
---
 Makefile      |    7 +++-
 po/.gitignore |    2 +
 po/po2msg.sh  |  133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 141 insertions(+), 1 deletions(-)
 create mode 100644 po/.gitignore
 create mode 100644 po/po2msg.sh

diff --git a/Makefile b/Makefile
index 6158504..ae2b80b 100644
--- a/Makefile
+++ b/Makefile
@@ -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))
diff --git a/po/.gitignore b/po/.gitignore
new file mode 100644
index 0000000..a89cf44
--- /dev/null
+++ b/po/.gitignore
@@ -0,0 +1,2 @@
+*.msg
+*~
diff --git a/po/po2msg.sh b/po/po2msg.sh
new file mode 100644
index 0000000..c63248e
--- /dev/null
+++ b/po/po2msg.sh
@@ -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."]
+}
-- 
1.5.4.rc2.60.gb2e62

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2008-01-09 14:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-09 14:31 [PATCH] gitk: Fix the Makefile to cope with systems lacking msgfmt Charles Bailey

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.