summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--changes2
-rw-r--r--library/msgcat/msgcat.tcl67
-rw-r--r--library/msgcat/pkgIndex.tcl2
-rw-r--r--unix/Makefile.in4
-rw-r--r--win/Makefile.in4
6 files changed, 69 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 9a17845..8ba37af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-09-19 Harald Oehlmann <oehhar@users.sf.net>
+
+ IMPLEMENTATION OF TIP#399.
+
+ * library/msgcat/msgcat.tcl: [FRQ 3544988]: New commands [mcconfig]
+ * library/msgcat/pkgIndex.tcl: to set additional mcload search pattern.
+ * unix/Makefile.in: Bump to 1.6.0.
+ * win/Makefile.in:
+
2012-09-19 Jan Nijtmans <nijtmans@users.sf.net>
* generic/tcl.h: make Tcl_Interp a fully opaque structure
diff --git a/changes b/changes
index b902445..f4c501d 100644
--- a/changes
+++ b/changes
@@ -8116,3 +8116,5 @@ Many revisions to better support a Cygwin environment (nijtmans)
Dropped support for OS X versions less than 10.4 (Tiger) (fellows)
--- Released 8.6b3, September 18, 2012 --- See ChangeLog for details ---
+
+2012-09-19 (TIP399) New msgcat command [mcconfig] (oehlmann)
diff --git a/library/msgcat/msgcat.tcl b/library/msgcat/msgcat.tcl
index 112507a..42c8f20 100644
--- a/library/msgcat/msgcat.tcl
+++ b/library/msgcat/msgcat.tcl
@@ -13,11 +13,11 @@
package require Tcl 8.5
# When the version number changes, be sure to update the pkgIndex.tcl file,
# and the installation directory in the Makefiles.
-package provide msgcat 1.5.0
+package provide msgcat 1.6.0
namespace eval msgcat {
namespace export mc mcload mclocale mcmax mcmset mcpreferences mcset \
- mcunknown mcflset mcflmset
+ mcunknown mcflset mcflmset mcconfig
# Records the current locale as passed to mclocale
variable Locale ""
@@ -28,6 +28,9 @@ namespace eval msgcat {
# Records the locale of the currently sourced message catalogue file
variable FileLocale
+ # List of file pattern to load in addition to Loclist.
+ variable Patternlist {}
+
# Records the mapping between source strings and translated strings. The
# dict key is of the form "<locale> <namespace> <src>", where locale and
# namespace should be themselves dict values and the value is
@@ -166,6 +169,39 @@ namespace eval msgcat {
}
}
+# msgcat::mcconfig option ?value? ?option? ?value?
+#
+# Get or set a package option.
+# To set options, one may specify multiple option-value pairs.
+# To read an option value, one may specify a single option.
+# Available options are:
+# -pattern
+# List of file pattern to load in addition to mcpreferences
+#
+# Arguments:
+# option The name of the option
+# value The new value of the option
+#
+# Results:
+# The value if options are read
+
+proc msgcat::mcconfig {args} {
+ variable Patternlist
+ variable MCFileLocale
+ if {1 == [llength $args]} {
+ switch -exact -- [lindex $args] {
+ -pattern { return $Patternlist}
+ default { return -code error "Unknown option" }
+ }
+ }
+ dict for {option value} $args {
+ switch -exact -- $option {
+ -pattern { set Patternlist $value }
+ default { return -code error "Unknown option" }
+ }
+ }
+}
+
# msgcat::mc --
#
# Find the translation for the given string based on the current
@@ -280,26 +316,29 @@ proc msgcat::mcpreferences {} {
# Returns the number of message catalogs that were loaded.
proc msgcat::mcload {langdir} {
+ variable Patternlist
variable FileLocale
# Save the file locale if we are recursively called
if {[info exists FileLocale]} {
set nestedFileLocale $FileLocale
}
set x 0
- foreach p [mcpreferences] {
- if { $p eq {} } {
- set p ROOT
+ set filelist {}
+ foreach pattern [lsort -unique [concat [mcpreferences] $Patternlist]] {
+ if { $pattern eq {} } {
+ set pattern ROOT
}
- set langfile [file join $langdir $p.msg]
- if {[file exists $langfile]} {
- incr x
- set FileLocale [string tolower [file tail [file rootname $langfile]]]
- if {"root" eq $FileLocale} {
- set FileLocale ""
- }
- uplevel 1 [list ::source -encoding utf-8 $langfile]
- unset FileLocale
+ lappend filelist {*}[glob -directory $langdir -nocomplain -types {f r}\
+ -- $pattern.msg]
+ }
+ foreach langfile [lsort -unique $filelist] {
+ incr x
+ set FileLocale [string tolower [file tail [file rootname $langfile]]]
+ if {"root" eq $FileLocale} {
+ set FileLocale ""
}
+ uplevel 1 [list ::source -encoding utf-8 $langfile]
+ unset FileLocale
}
if {[info exists nestedFileLocale]} {
set FileLocale $nestedFileLocale
diff --git a/library/msgcat/pkgIndex.tcl b/library/msgcat/pkgIndex.tcl
index 832bf81..7399c92 100644
--- a/library/msgcat/pkgIndex.tcl
+++ b/library/msgcat/pkgIndex.tcl
@@ -1,2 +1,2 @@
if {![package vsatisfies [package provide Tcl] 8.5]} {return}
-package ifneeded msgcat 1.5.0 [list source [file join $dir msgcat.tcl]]
+package ifneeded msgcat 1.6.0 [list source [file join $dir msgcat.tcl]]
diff --git a/unix/Makefile.in b/unix/Makefile.in
index 9ac84f7..aa1820e 100644
--- a/unix/Makefile.in
+++ b/unix/Makefile.in
@@ -846,8 +846,8 @@ install-libraries: libraries
do \
$(INSTALL_DATA) $$i "$(SCRIPT_INSTALL_DIR)"/opt0.4; \
done;
- @echo "Installing package msgcat 1.5.0 as a Tcl Module";
- @$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/msgcat-1.5.0.tm;
+ @echo "Installing package msgcat 1.6.0 as a Tcl Module";
+ @$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/msgcat-1.6.0.tm;
@echo "Installing package tcltest 2.3.4 as a Tcl Module";
@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/tcltest-2.3.4.tm;
diff --git a/win/Makefile.in b/win/Makefile.in
index bef71c0..8ea4f0a 100644
--- a/win/Makefile.in
+++ b/win/Makefile.in
@@ -647,8 +647,8 @@ install-libraries: libraries install-tzdata install-msgs
do \
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/opt0.4"; \
done;
- @echo "Installing package msgcat 1.5.0 as a Tcl Module";
- @$(COPY) $(ROOT_DIR)/library/msgcat/msgcat.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/msgcat-1.5.0.tm;
+ @echo "Installing package msgcat 1.6.0 as a Tcl Module";
+ @$(COPY) $(ROOT_DIR)/library/msgcat/msgcat.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/msgcat-1.6.0.tm;
@echo "Installing package tcltest 2.3.4 as a Tcl Module";
@$(COPY) $(ROOT_DIR)/library/tcltest/tcltest.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/tcltest-2.3.4.tm;
@echo "Installing package platform 1.0.10 as a Tcl Module";