diff options
Diffstat (limited to 'tools/loadICU.tcl')
-rwxr-xr-x | tools/loadICU.tcl | 622 |
1 files changed, 622 insertions, 0 deletions
diff --git a/tools/loadICU.tcl b/tools/loadICU.tcl new file mode 100755 index 0000000..a41a8dc --- /dev/null +++ b/tools/loadICU.tcl @@ -0,0 +1,622 @@ +#---------------------------------------------------------------------- +# +# loadICU,tcl -- +# +# Extracts locale strings from a distribution of ICU +# (http://oss.software.ibm.com/developerworks/opensource/icu/project/) +# and makes Tcl message catalogs for the 'clock' command. +# +# Usage: +# loadICU.tcl sourceDir destDir +# +# Parameters: +# sourceDir -- Path name of the 'data' directory of your ICU4C +# distribution. +# destDir -- Directory into which the Tcl message catalogs should go. +# +# Results: +# None. +# +# Side effects: +# Creates the message catalogs. +# +#---------------------------------------------------------------------- +# +# Copyright (c) 2004 by Kevin B. Kenny. All rights reserved. +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# RCS: @(#) $Id: loadICU.tcl,v 1.1 2004/08/18 19:59:09 kennykb Exp $ +# +#---------------------------------------------------------------------- + +# Calculate the Chinese numerals from zero to ninety-nine. + +set zhDigits [list {} \u4e00 \u4e8c \u4e09 \u56db \ + \u4e94 \u516d \u4e03 \u516b \u4e5d] +set t 0 +foreach zt $zhDigits { + if { $t == 0 } { + set zt {} + } elseif { $t == 10 } { + set zt \u5341 + } else { + append zt \u5341 + } + set d 0 + foreach zd $zhDigits { + if { $t == 0 && $d == 0 } { + set zd \u3007 + } elseif { $t == 20 && $d != 0 } { + set zt \u5eff + } elseif { $t == 30 && $d != 0 } { + set zt \u5345 + } + lappend zhNumbers $zt$zd + incr d + } + incr t 10 +} + +# Set format overrides for various locales. + +set format(zh,LOCALE_NUMERALS) $zhNumbers +set format(ja,LOCALE_NUMERALS) $zhNumbers +set format(ja,LOCALE_ERAS) [list \ + [list -9223372036854775808 \u897f\u66a6 0 ] \ + [list -3060979200 \u660e\u6cbb 1867] \ + [list -1812153600 \u5927\u6b63 1911] \ + [list -1357603200 \u662d\u548c 1925] \ + [list 568512000 \u5e73\u6210 1987]] +set format(zh,LOCALE_DATE_FORMAT) "\u516c\u5143%Y\u5e74%B%Od\u65E5" +set format(ja,LOCALE_DATE_FORMAT) "%EY\u5e74%B%Od\u65E5" +set format(ko,LOCALE_DATE_FORMAT) "%Y\ub144%B%Od\uc77c" +set format(zh,LOCALE_TIME_FORMAT) "%OH\u65f6%OM\u5206%OS\u79d2" +set format(ja,LOCALE_TIME_FORMAT) "%OH\u6642%OM\u5206%OS\u79d2" +set format(ko,LOCALE_TIME_FORMAT) "%H\uc2dc%M\ubd84%S\ucd08" +set format(zh,LOCALE_DATE_TIME_FORMAT) "%A %Y\u5e74%B%Od\u65E5%OH\u65f6%OM\u5206%OS\u79d2 %z" +set format(ja,LOCALE_DATE_TIME_FORMAT) "%A %EY\u5e74%B%Od\u65E5%OH\u6642%OM\u5206%OS\u79d2 %z" +set format(ko,LOCALE_DATE_TIME_FORMAT) "%A %Y\ub144%B%Od\uc77c%H\uc2dc%M\ubd84%S\ucd08 %z" + +# The next set of format overrides were obtained from the glibc +# localization strings. + +set format(cs_CZ,DATE_FORMAT) %d.%m.%Y +set format(cs_CZ,DATE_TIME_FORMAT) {%a %e. %B %Y, %H:%M:%S %z} +set format(cs_CZ,TIME_FORMAT) %H:%M:%S +set format(cs_CZ,TIME_FORMAT_12) %I:%M:%S +set format(da_DK,DATE_FORMAT) %d-%m-%Y +set format(da_DK,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(da_DK,TIME_FORMAT) %T +set format(da_DK,TIME_FORMAT_12) %T +set format(de_AT,DATE_FORMAT) %Y-%m-%d +set format(de_AT,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(de_AT,TIME_FORMAT) %T +set format(de_AT,TIME_FORMAT_12) %T +set format(de_BE,DATE_FORMAT) %Y-%m-%d +set format(de_BE,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(de_BE,TIME_FORMAT) %T +set format(de_BE,TIME_FORMAT_12) %T +set format(de_CH,DATE_FORMAT) %Y-%m-%d +set format(de_CH,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(de_CH,TIME_FORMAT) %T +set format(de_CH,TIME_FORMAT_12) %T +set format(de_DE,DATE_FORMAT) %Y-%m-%d +set format(de_DE,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(de_DE,TIME_FORMAT) %T +set format(de_DE,TIME_FORMAT_12) %T +set format(de_LU,DATE_FORMAT) %Y-%m-%d +set format(de_LU,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(de_LU,TIME_FORMAT) %T +set format(de_LU,TIME_FORMAT_12) %T +set format(en_CA,DATE_FORMAT) %d/%m/%y +set format(en_CA,DATE_TIME_FORMAT) {%a %d %b %Y %r %z} +set format(en_CA,TIME_FORMAT) %r +set format(en_CA,TIME_FORMAT_12) {%I:%M:%S %p} +set format(en_DK,DATE_FORMAT) %Y-%m-%d +set format(en_DK,DATE_TIME_FORMAT) {%Y-%m-%dT%T %z} +set format(en_DK,TIME_FORMAT) %T +set format(en_DK,TIME_FORMAT_12) %T +set format(en_GB,DATE_FORMAT) %d/%m/%y +set format(en_GB,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(en_GB,TIME_FORMAT) %T +set format(en_GB,TIME_FORMAT_12) %T +set format(en_IE,DATE_FORMAT) %d/%m/%y +set format(en_IE,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(en_IE,TIME_FORMAT) %T +set format(en_IE,TIME_FORMAT_12) %T +set format(en_US,DATE_FORMAT) %m/%d/%y +set format(en_US,DATE_TIME_FORMAT) {%a %d %b %Y %r %z} +set format(en_US,TIME_FORMAT) %r +set format(en_US,TIME_FORMAT_12) {%I:%M:%S %p} +set format(es_ES,DATE_FORMAT) %d/%m/%y +set format(es_ES,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(es_ES,TIME_FORMAT) %T +set format(es_ES,TIME_FORMAT_12) %T +set format(et_EE,DATE_FORMAT) %d.%m.%Y +set format(et_EE,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(et_EE,TIME_FORMAT) %T +set format(et_EE,TIME_FORMAT_12) %T +set format(eu_ES,DATE_FORMAT) {%a, %Yeko %bren %da} +set format(eu_ES,DATE_TIME_FORMAT) {%y-%m-%d %T %z} +set format(eu_ES,TIME_FORMAT) %T +set format(eu_ES,TIME_FORMAT_12) %T +set format(fi_FI,DATE_FORMAT) %d.%m.%Y +set format(fi_FI,DATE_TIME_FORMAT) {%a %e %B %Y %T} +set format(fi_FI,TIME_FORMAT) %T +set format(fi_FI,TIME_FORMAT_12) %T +set format(fo_FO,DATE_FORMAT) %d/%m-%Y +set format(fo_FO,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(fo_FO,TIME_FORMAT) %T +set format(fo_FO,TIME_FORMAT_12) %T +set format(fr_BE,DATE_FORMAT) %d/%m/%y +set format(fr_BE,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(fr_BE,TIME_FORMAT) %T +set format(fr_BE,TIME_FORMAT_12) %T +set format(fr_CA,DATE_FORMAT) %Y-%m-%d +set format(fr_CA,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(fr_CA,TIME_FORMAT) %T +set format(fr_CA,TIME_FORMAT_12) %T +set format(fr_CH,DATE_FORMAT) {%d. %m. %y} +set format(fr_CH,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(fr_CH,TIME_FORMAT) %T +set format(fr_CH,TIME_FORMAT_12) %T +set format(fr_FR,DATE_FORMAT) %d.%m.%Y +set format(fr_FR,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(fr_FR,TIME_FORMAT) %T +set format(fr_FR,TIME_FORMAT_12) %T +set format(fr_LU,DATE_FORMAT) %d.%m.%Y +set format(fr_LU,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(fr_LU,TIME_FORMAT) %T +set format(fr_LU,TIME_FORMAT_12) %T +set format(ga_IE,DATE_FORMAT) %d.%m.%y +set format(ga_IE,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(ga_IE,TIME_FORMAT) %T +set format(ga_IE,TIME_FORMAT_12) %T +set format(gr_GR,DATE_FORMAT) %d/%m/%Y +set format(gr_GR,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(gr_GR,TIME_FORMAT) %T +set format(gr_GR,TIME_FORMAT_12) %T +set format(hr_HR,DATE_FORMAT) %d.%m.%y +set format(hr_HR,DATE_TIME_FORMAT) {%a %d %b %Y %T} +set format(hr_HR,TIME_FORMAT) %T +set format(hr_HR,TIME_FORMAT_12) %T +set format(hu_HU,DATE_FORMAT) %Y-%m-%d +set format(hu_HU,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(hu_HU,TIME_FORMAT) %T +set format(hu_HU,TIME_FORMAT_12) %T +set format(is_IS,DATE_FORMAT) {%a %e.%b %Y} +set format(is_IS,DATE_TIME_FORMAT) {%a %e.%b %Y, %T %z} +set format(is_IS,TIME_FORMAT) %T +set format(is_IS,TIME_FORMAT_12) %T +set format(it_IT,DATE_FORMAT) %d/%m/%Y +set format(it_IT,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(it_IT,TIME_FORMAT) %T +set format(it_IT,TIME_FORMAT_12) %T +set format(iw_IL,DATE_FORMAT) %d/%m/%y +set format(iw_IL,DATE_TIME_FORMAT) {%z %H:%M:%S %Y %b %d %a} +set format(iw_IL,TIME_FORMAT) %H:%M:%S +set format(iw_IL,TIME_FORMAT_12) {%I:%M:%S %P} +set format(kl_GL,DATE_FORMAT) {%d %b %Y} +set format(kl_GL,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(kl_GL,TIME_FORMAT) %T +set format(kl_GL,TIME_FORMAT_12) %T +set format(lt_LT,DATE_FORMAT) %Y.%m.%d +set format(lt_LT,DATE_TIME_FORMAT) {%Y m. %B %d d. %T} +set format(lt_LT,TIME_FORMAT) %T +set format(lt_LT,TIME_FORMAT_12) %T +set format(lv_LV,DATE_FORMAT) %Y.%m.%d. +set format(lv_LV,DATE_TIME_FORMAT) {%A, %Y. gada %e. %B, plkst. %H un %M} +set format(lv_LV,TIME_FORMAT) %T +set format(lv_LV,TIME_FORMAT_12) %T +set format(nl_BE,DATE_FORMAT) %d-%m-%y +set format(nl_BE,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(nl_BE,TIME_FORMAT) %T +set format(nl_BE,TIME_FORMAT_12) %T +set format(nl_NL,DATE_FORMAT) %d-%m-%y +set format(nl_NL,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(nl_NL,TIME_FORMAT) %T +set format(nl_NL,TIME_FORMAT_12) %T +set format(no_NO,DATE_FORMAT) %d-%m-%Y +set format(no_NO,DATE_TIME_FORMAT) {%a %d-%m-%Y %T %z} +set format(no_NO,TIME_FORMAT) %T +set format(no_NO,TIME_FORMAT_12) %T +set format(pl_PL,DATE_FORMAT) %Y-%m-%d +set format(pl_PL,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(pl_PL,TIME_FORMAT) %T +set format(pl_PL,TIME_FORMAT_12) %T +set format(pt_BR,DATE_FORMAT) %d-%m-%Y +set format(pt_BR,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(pt_BR,TIME_FORMAT) %T +set format(pt_BR,TIME_FORMAT_12) %T +set format(pt_PT,DATE_FORMAT) %d-%m-%Y +set format(pt_PT,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(pt_PT,TIME_FORMAT) %T +set format(pt_PT,TIME_FORMAT_12) %T +set format(ro_RO,DATE_FORMAT) %Y-%m-%d +set format(ro_RO,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(ro_RO,TIME_FORMAT) %T +set format(ro_RO,TIME_FORMAT_12) %T +set format(ru_RU,DATE_FORMAT) %d.%m.%Y +set format(ru_RU,DATE_TIME_FORMAT) {%a %d %b %Y %T} +set format(ru_RU,TIME_FORMAT) %T +set format(ru_RU,TIME_FORMAT_12) %T +set format(sl_SI,DATE_FORMAT) %d.%m.%Y +set format(sl_SI,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(sl_SI,TIME_FORMAT) %T +set format(sl_SI,TIME_FORMAT_12) %T +set format(sv_FI,DATE_FORMAT) %Y-%m-%d +set format(sv_FI,DATE_TIME_FORMAT) {%a %e %b %Y %H.%M.%S} +set format(sv_FI,TIME_FORMAT) %H.%M.%S +set format(sv_FI,TIME_FORMAT_12) %H.%M.%S +set format(sv_SE,DATE_FORMAT) %Y-%m-%d +set format(sv_SE,DATE_TIME_FORMAT) {%a %e %b %Y %H.%M.%S} +set format(sv_SE,TIME_FORMAT) %H.%M.%S +set format(sv_SE,TIME_FORMAT_12) %H.%M.%S +set format(tr_TR,DATE_FORMAT) %Y-%m-%d +set format(tr_TR,DATE_TIME_FORMAT) {%a %d %b %Y %T %z} +set format(tr_TR,TIME_FORMAT) %T +set format(tr_TR,TIME_FORMAT_12) %T + +#---------------------------------------------------------------------- +# +# handleLocaleFile -- +# +# Extracts strings from an ICU locale definition. +# +# Parameters: +# localeName - Name of the locale (e.g., de_AT_euro) +# fileName - Name of the file containing the data +# msgFileName - Name of the file containing the Tcl message catalog +# +# Results: +# None. +# +# Side effects: +# Writes the Tcl message catalog. +# +#---------------------------------------------------------------------- + +proc handleLocaleFile { localeName fileName msgFileName } { + variable format + + # Get the content of the ICU file + + set f [open $fileName r] + fconfigure $f -encoding utf-8 + set data [read $f] + close $f + + # Parse the ICU data + + set state {} + foreach line [split $data \n] { + switch -exact -- $state { + {} { + + # Look for the beginnings of data blocks + + switch -regexp -- $line { + {^[[:space:]]*AmPmMarkers[[:space:]]+[\{]} { + set state data + set key AmPmMarkers + } + {^[[:space:]]*DateTimePatterns[[:space:]]+[\{]} { + set state data + set key DateTimePatterns + } + {^[[:space:]]*DayAbbreviations[[:space:]]+[\{]} { + set state data + set key DayAbbreviations + } + {^[[:space:]]*DayNames[[:space:]]+[\{]} { + set state data + set key DayNames + } + {^[[:space:]]*Eras[[:space:]]+[\{]} { + set state data + set key Eras + } + {^[[:space:]]*MonthAbbreviations[[:space:]]+[\{]} { + set state data + set key MonthAbbreviations + } + {^[[:space:]]*MonthNames[[:space:]]+[\{]} { + set state data + set key MonthNames + } + } + } + data { + + + # Inside a data block, collect the strings, doing backslash + # expansion to pick up the Unicodes + + if { [regexp {"(.*)",} $line -> item] } { + lappend items($key) [subst -nocommands -novariables $item] + } elseif { [regexp {^[[:space:]]*[\}][[:space:]]*$} $line] } { + set state {} + } + } + } + } + + # Skip locales that don't change time strings. + + if {![array exists items]} return + + # Write the Tcl message catalog + + set f [open $msgFileName w] + + # Write a header + + puts $f "\# created by $::argv0 -- do not edit" + puts $f "namespace eval ::tcl::clock \{" + + # Do ordinary sets of strings (weekday and month names) + + foreach key { + DayAbbreviations DayNames MonthAbbreviations MonthNames + } tkey { + DAYS_OF_WEEK_ABBREV DAYS_OF_WEEK_FULL + MONTHS_ABBREV MONTHS_FULL + } { + if { [info exists items($key)] } { + set itemList $items($key) + set cmd1 " ::msgcat::mcset " + append cmd1 $localeName " " $tkey " \[list " + foreach item $itemList { + append cmd1 \\\n { } \" [backslashify $item] \" + } + append cmd1 \] + puts $f $cmd1 + } + } + + # Do the eras, B.C.E., and C.E. + + if { [info exists items(Eras)] } { + foreach { bce ce } $items(Eras) break + set cmd " ::msgcat::mcset " + append cmd $localeName " " BCE " \"" [backslashify $bce] \" + puts $f $cmd + set cmd " ::msgcat::mcset " + append cmd $localeName " " CE " \"" [backslashify $ce] \" + puts $f $cmd + } + + # Do the AM and PM markers + + if { [info exists items(AmPmMarkers)] } { + foreach { am pm } $items(AmPmMarkers) break + set cmd " ::msgcat::mcset " + append cmd $localeName " " AM " \"" [backslashify $am] \" + puts $f $cmd + set cmd " ::msgcat::mcset " + append cmd $localeName " " PM " \"" [backslashify $pm] \" + puts $f $cmd + } + + # Do the date/time patterns. First date... + + if { [info exists format($localeName,DATE_FORMAT)] + || [info exists items(DateTimePatterns)] } { + + # Find the shortest date format that includes a 4-digit year. + + if { ![info exists format($localeName,DATE_FORMAT)] } { + for { set i 7 } { $i >= 4 } { incr i -1 } { + if { [regexp yyyy [lindex $items(DateTimePatterns) $i]] } { + break + } + } + set fmt \ + [backslashify \ + [percentify [lindex $items(DateTimePatterns) $i]]] + set format($localeName,DATE_FORMAT) $fmt + } + + # Put it to the message catalog + + set cmd " ::msgcat::mcset " + append cmd $localeName " DATE_FORMAT \"" \ + $format($localeName,DATE_FORMAT) "\"" + puts $f $cmd + } + + # Time + + if { [info exists format($localeName,TIME_FORMAT)] + || [info exists items(DateTimePatterns)] } { + + # Find the shortest time pattern that includes the seconds + + if { ![info exists format($localeName,TIME_FORMAT)] } { + for { set i 3 } { $i >= 0 } { incr i -1 } { + if { [regexp H [lindex $items(DateTimePatterns) $i]] + && [regexp s [lindex $items(DateTimePatterns) $i]] } { + break + } + } + if { $i >= 0 } { + set fmt \ + [backslashify \ + [percentify [lindex $items(DateTimePatterns) $i]]] + regsub { %Z} $fmt {} format($localeName,TIME_FORMAT) + } + } + + # Put it to the message catalog + + if { [info exists format($localeName,TIME_FORMAT)] } { + set cmd " ::msgcat::mcset " + append cmd $localeName " TIME_FORMAT \"" \ + $format($localeName,TIME_FORMAT) "\"" + puts $f $cmd + } + } + + # 12-hour time... + + if { [info exists format($localeName,TIME_FORMAT_12)] + || [info exists items(DateTimePatterns)] } { + + # Shortest patterm with 12-hour time that includes seconds + + if { ![info exists format($localeName,TIME_FORMAT_12)] } { + for { set i 3 } { $i >= 0 } { incr i -1 } { + if { [regexp h [lindex $items(DateTimePatterns) $i]] + && [regexp s [lindex $items(DateTimePatterns) $i]] } { + break + } + } + if { $i >= 0 } { + set fmt \ + [backslashify \ + [percentify [lindex $items(DateTimePatterns) $i]]] + regsub { %Z} $fmt {} format($localeName,TIME_FORMAT_12) + } + } + + # Put it to the catalog + + if { [info exists format($localeName,TIME_FORMAT_12)] } { + set cmd " ::msgcat::mcset " + append cmd $localeName " TIME_FORMAT_12 \"" \ + $format($localeName,TIME_FORMAT_12) "\"" + puts $f $cmd + } + } + + # Date and time... Prefer 24-hour format to 12-hour format. + + if { ![info exists format($localeName,DATE_TIME_FORMAT)] + && [info exists format($localeName,DATE_FORMAT)] + && [info exists format($localeName,TIME_FORMAT)]} { + set format($localeName,DATE_TIME_FORMAT) \ + $format($localeName,DATE_FORMAT) + append format($localeName,DATE_TIME_FORMAT) \ + " " $format($localeName,TIME_FORMAT) " %z" + } + if { ![info exists format($localeName,DATE_TIME_FORMAT)] + && [info exists format($localeName,DATE_FORMAT)] + && [info exists format($localeName,TIME_FORMAT_12)]} { + set format($localeName,DATE_TIME_FORMAT) \ + $format($localeName,DATE_FORMAT) + append format($localeName,DATE_TIME_FORMAT) \ + " " $format($localeName,TIME_FORMAT_12) " %z" + } + + # Write date/time format to the file + + if { [info exists format($localeName,DATE_TIME_FORMAT)] } { + set cmd " ::msgcat::mcset " + append cmd $localeName " DATE_TIME_FORMAT \"" \ + $format($localeName,DATE_TIME_FORMAT) "\"" + puts $f $cmd + } + + # Write the string sets to the file. + + foreach key { + LOCALE_NUMERALS LOCALE_DATE_FORMAT LOCALE_TIME_FORMAT + LOCALE_DATE_TIME_FORMAT LOCALE_ERAS LOCALE_YEAR_FORMAT + } { + if { [info exists format($localeName,$key)] } { + set cmd " ::msgcat::mcset " + append cmd $localeName " " $key " \"" \ + [backslashify $format($localeName,$key)] "\"" + puts $f $cmd + } + } + + # Footer + + puts $f "\}" + close $f +} + +#---------------------------------------------------------------------- +# +# percentify -- +# +# Converts a Java/ICU-style time format to a C/Tcl style one. +# +# Parameters: +# string -- Format to convert +# +# Results: +# Returns the converted format. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc percentify { string } { + set retval {} + foreach { unquoted quoted } [split $string '] { + append retval [string map { + EEEE %A MMMM %B yyyy %Y + MMM %b EEE %a + dd %d hh %I HH %H mm %M MM %m ss %S yy %y + a %P d %e h %l H %k M %m z %z + } $unquoted] + append retval $quoted + } + return $retval +} + +#---------------------------------------------------------------------- +# +# backslashify -- +# +# Converts a UTF-8 string to a plain ASCII one with escapes. +# +# Parameters: +# string -- String to convert +# +# Results: +# Returns the converted string +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc backslashify { string } { + + set retval {} + foreach char [split $string {}] { + scan $char %c ccode + if { $ccode >= 0x0020 && $ccode < 0x007f + && $char ne "\{" && $char ne "\}" && $char ne "\[" + && $char ne "\]" && $char ne "\\" && $char ne "\$" } { + append retval $char + } else { + append retval \\u [format %04x $ccode] + } + } + return $retval +} + +#---------------------------------------------------------------------- +# +# MAIN PROGRAM +# +#---------------------------------------------------------------------- + +# Extract directories from command line + +foreach { icudir msgdir } $argv break + +# Walk the ICU files and create corresponding Tcl message catalogs + +foreach fileName [glob -directory $icudir *.txt] { + set n [file rootname [file tail $fileName]] + if { [regexp {^[a-z]{2,3}(_[A-Z]{2,3}(_.*)?)?$} $n] } { + handleLocaleFile $n $fileName [file join $msgdir ${n}.msg] + } +} |