Index: /trunk/utils/msgfmt.py
===================================================================
--- /trunk/utils/msgfmt.py (revision 3176)
+++ /trunk/utils/msgfmt.py (revision 3176)
@@ -0,0 +1,219 @@
+#! /usr/bin/env python
+# -*- coding: iso-8859-1 -*-
+# Written by Martin v. L� <loewis@informatik.hu-berlin.de>
+#
+# Changelog: (Guilherme Polo)
+#   2008-04-11
+#    - Support for files with BOM UTF8 mark.
+#
+#   2008-04-10
+#    - Support for fuzzy strings in output.
+#    - Bumped to version 1.1.1
+
+"""Generate binary message catalog from textual translation description.
+
+This program converts a textual Uniforum-style message catalog (.po file) into
+a binary GNU catalog (.mo file).  This is essentially the same function as the
+GNU msgfmt program, however, it is a simpler implementation.
+
+Usage: msgfmt.py [OPTIONS] filename.po
+
+Options:
+    -o file
+    --output-file=file
+        Specify the output file to write to.  If omitted, output will go to a
+        file named filename.mo (based off the input file name).
+
+    -f
+    --use-fuzzy
+        Use fuzzy entries in output
+
+    -h
+    --help
+        Print this message and exit.
+
+    -V
+    --version
+        Display version information and exit.
+
+Before using the -f (fuzzy) option, read this:
+    http://www.finesheer.com:8457/cgi-bin/info2html?(gettext)Fuzzy%20Entries&lang=en
+"""
+
+import sys
+import os
+import getopt
+import struct
+import array
+import codecs
+
+__version__ = "1.1.1"
+
+MESSAGES = {}
+
+
+def usage(code, msg=''):
+    print >> sys.stderr, __doc__
+    if msg:
+        print >> sys.stderr, msg
+    sys.exit(code)
+
+
+def add(id, str, fuzzy, use_fuzzy):
+    "Add a translation to the dictionary."
+    global MESSAGES
+    if (not fuzzy or use_fuzzy) and str:
+        MESSAGES[id] = str
+
+
+def generate():
+    "Return the generated output."
+    global MESSAGES
+    keys = MESSAGES.keys()
+    # the keys are sorted in the .mo file
+    keys.sort()
+    offsets = []
+    ids = strs = ''
+    for id in keys:
+        # For each string, we need size and file offset.  Each string is NUL
+        # terminated; the NUL does not count into the size.
+        offsets.append((len(ids), len(id), len(strs), len(MESSAGES[id])))
+        ids += id + '\0'
+        strs += MESSAGES[id] + '\0'
+    output = ''
+    # The header is 7 32-bit unsigned integers.  We don't use hash tables, so
+    # the keys start right after the index tables.
+    # translated string.
+    keystart = 7*4+16*len(keys)
+    # and the values start after the keys
+    valuestart = keystart + len(ids)
+    koffsets = []
+    voffsets = []
+    # The string table first has the list of keys, then the list of values.
+    # Each entry has first the size of the string, then the file offset.
+    for o1, l1, o2, l2 in offsets:
+        koffsets += [l1, o1+keystart]
+        voffsets += [l2, o2+valuestart]
+    offsets = koffsets + voffsets
+    output = struct.pack("Iiiiiii",
+                         0x950412deL,       # Magic
+                         0,                 # Version
+                         len(keys),         # # of entries
+                         7*4,               # start of key index
+                         7*4+len(keys)*8,   # start of value index
+                         0, 0)              # size and offset of hash table
+    output += array.array("i", offsets).tostring()
+    output += ids
+    output += strs
+    return output
+
+
+def make(filename, outfile, use_fuzzy):
+    ID = 1
+    STR = 2
+
+    # Compute .mo name from .po name and arguments
+    if filename.endswith('.po'):
+        infile = filename
+    else:
+        infile = filename + '.po'
+    if outfile is None:
+        outfile = os.path.splitext(infile)[0] + '.mo'
+
+    try:
+        lines = open(infile).readlines()
+        if lines[0].startswith(codecs.BOM_UTF8):
+            lines[0] = lines[0][len(codecs.BOM_UTF8):]
+    except IOError, msg:
+        print >> sys.stderr, msg
+        sys.exit(1)
+
+    section = None
+    fuzzy = 0
+
+    # Parse the catalog
+    lno = 0
+    for l in lines:
+        lno += 1
+        # If we get a comment line after a msgstr, this is a new entry
+        if l[0] == '#' and section == STR:
+            add(msgid, msgstr, fuzzy, use_fuzzy)
+            section = None
+            fuzzy = 0
+        # Record a fuzzy mark
+        if l[:2] == '#,' and 'fuzzy' in l:
+            fuzzy = 1
+        # Skip comments
+        if l[0] == '#':
+            continue
+        # Now we are in a msgid section, output previous section
+        if l.startswith('msgid'):
+            if section == STR:
+                add(msgid, msgstr, fuzzy, use_fuzzy)
+            section = ID
+            l = l[5:]
+            msgid = msgstr = ''
+        # Now we are in a msgstr section
+        elif l.startswith('msgstr'):
+            section = STR
+            l = l[6:]
+        # Skip empty lines
+        l = l.strip()
+        if not l:
+            continue
+        # XXX: Does this always follow Python escape semantics?
+        l = eval(l)
+        if section == ID:
+            msgid += l
+        elif section == STR:
+            msgstr += l
+        else:
+            print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \
+                  'before:'
+            print >> sys.stderr, l
+            sys.exit(1)
+    # Add last entry
+    if section == STR:
+        add(msgid, msgstr, fuzzy, use_fuzzy)
+
+    # Compute output
+    output = generate()
+
+    try:
+        open(outfile,"wb").write(output)
+    except IOError,msg:
+        print >> sys.stderr, msg
+
+
+def main():
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'hVo:f',
+            ['help', 'version', 'output-file=', 'use-fuzzy'])
+    except getopt.error, msg:
+        usage(1, msg)
+
+    outfile = None
+    use_fuzzy = False
+    # parse options
+    for opt, arg in opts:
+        if opt in ('-h', '--help'):
+            usage(0)
+        elif opt in ('-V', '--version'):
+            print >> sys.stderr, "msgfmt.py", __version__
+            sys.exit(0)
+        elif opt in ('-f', '--use-fuzzy'):
+            use_fuzzy = True
+        elif opt in ('-o', '--output-file'):
+            outfile = arg
+    # do it
+    if not args:
+        print >> sys.stderr, 'No input file given'
+        print >> sys.stderr, "Try `msgfmt --help' for more information."
+        return
+
+    for filename in args:
+        make(filename, outfile, use_fuzzy)
+
+
+if __name__ == '__main__':
+    main()
Index: /trunk/share/pixmaps/umit/umit-menu.xpm
===================================================================
--- /trunk/share/pixmaps/umit/umit-menu.xpm (revision 3176)
+++ /trunk/share/pixmaps/umit/umit-menu.xpm (revision 3176)
@@ -0,0 +1,432 @@
+/* XPM */
+static char * umit_menu_xpm[] = {
+"32 32 397 2",
+"  	c None",
+". 	c #870000",
+"+ 	c #8B0000",
+"@ 	c #8F0000",
+"# 	c #930000",
+"$ 	c #960000",
+"% 	c #980000",
+"& 	c #9A0000",
+"* 	c #9C0000",
+"= 	c #7C0000",
+"- 	c #810000",
+"; 	c #8D0000",
+"> 	c #970808",
+", 	c #AA2020",
+"' 	c #B93636",
+") 	c #C44545",
+"! 	c #C94D4D",
+"~ 	c #C74747",
+"{ 	c #BC3232",
+"] 	c #AB1010",
+"^ 	c #A30000",
+"/ 	c #A20000",
+"( 	c #740000",
+"_ 	c #7A0000",
+": 	c #8A0303",
+"< 	c #A62222",
+"[ 	c #C44949",
+"} 	c #D86464",
+"| 	c #DD6B6B",
+"1 	c #DF6D6D",
+"2 	c #E17070",
+"3 	c #E37272",
+"4 	c #E47474",
+"5 	c #E57777",
+"6 	c #E47676",
+"7 	c #D35454",
+"8 	c #B41717",
+"9 	c #A60000",
+"0 	c #A40000",
+"a 	c #710000",
+"b 	c #780000",
+"c 	c #800101",
+"d 	c #A12020",
+"e 	c #C84C4C",
+"f 	c #D45959",
+"g 	c #D75B5B",
+"h 	c #DA5D5D",
+"i 	c #DD6060",
+"j 	c #DF6262",
+"k 	c #E16464",
+"l 	c #E36666",
+"m 	c #E46868",
+"n 	c #E56B6B",
+"o 	c #E66D6D",
+"p 	c #E66F6F",
+"q 	c #E46F6F",
+"r 	c #CA3B3B",
+"s 	c #AC0202",
+"t 	c #6D0000",
+"u 	c #840808",
+"v 	c #B53737",
+"w 	c #CA4B4B",
+"x 	c #CF4D4D",
+"y 	c #D34F4F",
+"z 	c #D65151",
+"A 	c #DA5353",
+"B 	c #DD5555",
+"C 	c #E05757",
+"D 	c #E25959",
+"E 	c #E45B5B",
+"F 	c #E55D5D",
+"G 	c #E65F5F",
+"H 	c #E76161",
+"I 	c #E66363",
+"J 	c #E66666",
+"K 	c #E56868",
+"L 	c #D54B4B",
+"M 	c #AF0505",
+"N 	c #A70000",
+"O 	c #6C0000",
+"P 	c #700000",
+"Q 	c #933131",
+"R 	c #E0AEAE",
+"S 	c #EBBFBF",
+"T 	c #EDBFBF",
+"U 	c #EEC0C0",
+"V 	c #F0C1C1",
+"W 	c #F0BDBD",
+"X 	c #DB5151",
+"Y 	c #DD4B4B",
+"Z 	c #E04D4D",
+"` 	c #E34F4F",
+" .	c #E55151",
+"..	c #E75252",
+"+.	c #E85454",
+"@.	c #E85757",
+"#.	c #E85959",
+"$.	c #E75B5B",
+"%.	c #E65D5D",
+"&.	c #E45F5F",
+"*.	c #D44444",
+"=.	c #AF0202",
+"-.	c #811818",
+";.	c #F5ECEC",
+">.	c #FFFFFF",
+",.	c #FEF8F8",
+"'.	c #DC4C4C",
+").	c #DE4141",
+"!.	c #E14343",
+"~.	c #E44545",
+"{.	c #E74747",
+"].	c #E94949",
+"^.	c #EA4A4A",
+"/.	c #EA4C4C",
+"(.	c #EA4E4E",
+"_.	c #E85050",
+":.	c #E45454",
+"<.	c #E25656",
+"[.	c #CA2E2E",
+"}.	c #AC0000",
+"|.	c #6E0000",
+"1.	c #B15E5E",
+"2.	c #DD4545",
+"3.	c #DE3838",
+"4.	c #E33A3A",
+"5.	c #E63B3B",
+"6.	c #E93D3D",
+"7.	c #EC3F3F",
+"8.	c #ED4141",
+"9.	c #ED4242",
+"0.	c #EC4444",
+"a.	c #EA4646",
+"b.	c #E84848",
+"c.	c #E54A4A",
+"d.	c #E24C4C",
+"e.	c #DE4C4C",
+"f.	c #B91010",
+"g.	c #A80000",
+"h.	c #A10000",
+"i.	c #720202",
+"j.	c #B54444",
+"k.	c #D78F8F",
+"l.	c #DA9090",
+"m.	c #EABCBC",
+"n.	c #DD3F3F",
+"o.	c #DF3030",
+"p.	c #E43232",
+"q.	c #E83333",
+"r.	c #EC3535",
+"s.	c #EF3636",
+"t.	c #F03838",
+"u.	c #F13A3A",
+"v.	c #EF3B3B",
+"w.	c #EC3D3D",
+"x.	c #E93E3E",
+"y.	c #E64040",
+"z.	c #E24242",
+"A.	c #DF4444",
+"B.	c #D03232",
+"C.	c #AB0000",
+"D.	c #790505",
+"E.	c #A61D1D",
+"F.	c #AD1E1E",
+"G.	c #B41F1F",
+"H.	c #D57979",
+"I.	c #FEF9F9",
+"J.	c #DD3939",
+"K.	c #DF2929",
+"L.	c #E52A2A",
+"M.	c #EA2B2B",
+"N.	c #EF2D2D",
+"O.	c #F22E2E",
+"P.	c #F75F5F",
+"Q.	c #FCCBCB",
+"R.	c #FBC9C9",
+"S.	c #F9B7B7",
+"T.	c #EE5858",
+"U.	c #E63838",
+"V.	c #E23939",
+"W.	c #DE3B3B",
+"X.	c #DA3C3C",
+"Y.	c #B40A0A",
+"Z.	c #A50000",
+"`.	c #9D0000",
+" +	c #780404",
+".+	c #A21717",
+"++	c #AA1818",
+"@+	c #B11919",
+"#+	c #D37575",
+"$+	c #DC3434",
+"%+	c #DF2222",
+"&+	c #E52323",
+"*+	c #EB2424",
+"=+	c #F02626",
+"-+	c #F52727",
+";+	c #FA6969",
+">+	c #FCE5E5",
+",+	c #E73737",
+"'+	c #E23131",
+")+	c #DD3333",
+"!+	c #D83434",
+"~+	c #C11A1A",
+"{+	c #730101",
+"]+	c #9B1111",
+"^+	c #A51313",
+"/+	c #AD1414",
+"(+	c #D17272",
+"_+	c #DB2F2F",
+":+	c #DD1B1B",
+"<+	c #E31A1A",
+"[+	c #E91B1B",
+"}+	c #F01D1D",
+"|+	c #F62020",
+"1+	c #FC6565",
+"2+	c #EA4F4F",
+"3+	c #E02929",
+"4+	c #DB2B2B",
+"5+	c #D62C2C",
+"6+	c #C82222",
+"7+	c #860606",
+"8+	c #A00E0E",
+"9+	c #A90F0F",
+"0+	c #CF6F6F",
+"a+	c #CD1D1D",
+"b+	c #CE0202",
+"c+	c #D60101",
+"d+	c #DE0000",
+"e+	c #E70101",
+"f+	c #F00707",
+"g+	c #F85A5A",
+"h+	c #DE2222",
+"i+	c #D82424",
+"j+	c #D32525",
+"k+	c #CB2222",
+"l+	c #A60101",
+"m+	c #950000",
+"n+	c #790000",
+"o+	c #850101",
+"p+	c #920303",
+"q+	c #C16767",
+"r+	c #FEFAFA",
+"s+	c #C81919",
+"t+	c #CA0000",
+"u+	c #D20000",
+"v+	c #DA0000",
+"w+	c #E20000",
+"x+	c #E80000",
+"y+	c #F14D4D",
+"z+	c #E64B4B",
+"A+	c #DA1C1C",
+"B+	c #D51D1D",
+"C+	c #D01E1E",
+"D+	c #C91F1F",
+"E+	c #A50101",
+"F+	c #9B0000",
+"G+	c #6F0000",
+"H+	c #8A0000",
+"I+	c #BD6666",
+"J+	c #C51A1A",
+"K+	c #C60000",
+"L+	c #CE0000",
+"M+	c #D50000",
+"N+	c #DB0000",
+"O+	c #E00000",
+"P+	c #EB4D4D",
+"Q+	c #E24646",
+"R+	c #D51616",
+"S+	c #D01717",
+"T+	c #CB1818",
+"U+	c #C51919",
+"V+	c #A30101",
+"W+	c #990000",
+"X+	c #910000",
+"Y+	c #750000",
+"Z+	c #7E0000",
+"`+	c #BB6666",
+" @	c #FEFBFB",
+".@	c #C11B1B",
+"+@	c #C10000",
+"@@	c #C80000",
+"#@	c #D30000",
+"$@	c #D70000",
+"%@	c #E54D4D",
+"&@	c #DD4242",
+"*@	c #D01111",
+"=@	c #CA1212",
+"-@	c #C51313",
+";@	c #BE1313",
+">@	c #9F0000",
+",@	c #8E0000",
+"'@	c #730000",
+")@	c #7B0000",
+"!@	c #840000",
+"~@	c #B96666",
+"{@	c #BD1D1D",
+"]@	c #BB0000",
+"^@	c #C70000",
+"/@	c #CB0000",
+"(@	c #DE4D4D",
+"_@	c #D63E3E",
+":@	c #C90D0D",
+"<@	c #C40E0E",
+"[@	c #BF0F0F",
+"}@	c #B60D0D",
+"|@	c #800000",
+"1@	c #B76666",
+"2@	c #FEFCFC",
+"3@	c #B71D1D",
+"4@	c #B40000",
+"5@	c #BA0000",
+"6@	c #BF0000",
+"7@	c #C30000",
+"8@	c #D84D4D",
+"9@	c #C83636",
+"0@	c #BD0707",
+"a@	c #BD0A0A",
+"b@	c #B70B0B",
+"c@	c #AA0707",
+"d@	c #860000",
+"e@	c #B46666",
+"f@	c #FEFDFD",
+"g@	c #B21F1F",
+"h@	c #AD0000",
+"i@	c #B20000",
+"j@	c #B70000",
+"k@	c #BC0000",
+"l@	c #D14D4D",
+"m@	c #C13535",
+"n@	c #AB0303",
+"o@	c #A90505",
+"p@	c #9A0101",
+"q@	c #830000",
+"r@	c #770000",
+"s@	c #AF6262",
+"t@	c #AC1F1F",
+"u@	c #AA0000",
+"v@	c #AE0000",
+"w@	c #B10000",
+"x@	c #CB4D4D",
+"y@	c #BA3232",
+"z@	c #920000",
+"A@	c #8C0000",
+"B@	c #720000",
+"C@	c #A65656",
+"D@	c #FFFEFE",
+"E@	c #A82424",
+"F@	c #9E0000",
+"G@	c #A90000",
+"H@	c #C75454",
+"I@	c #AF2727",
+"J@	c #850000",
+"K@	c #7F0000",
+"L@	c #933C3C",
+"M@	c #B24B4B",
+"N@	c #A00000",
+"O@	c #CF7B7B",
+"P@	c #FCF8F8",
+"Q@	c #A01212",
+"R@	c #900000",
+"S@	c #791515",
+"T@	c #FBF7F7",
+"U@	c #E0BABA",
+"V@	c #900404",
+"W@	c #940000",
+"X@	c #970000",
+"Y@	c #A01313",
+"Z@	c #F2DFDF",
+"`@	c #EFDBDB",
+" #	c #880000",
+".#	c #6C0101",
+"+#	c #DDC4C4",
+"@#	c #E0BBBB",
+"##	c #B15555",
+"$#	c #A93E3E",
+"%#	c #BA6262",
+"&#	c #EDD5D5",
+"*#	c #CD9292",
+"=#	c #9E5757",
+"-#	c #972B2B",
+";#	c #6D0202",
+">#	c #CEABAB",
+",#	c #B97A7A",
+"'#	c #710808",
+")#	c #BD8D8D",
+"!#	c #FAF6F6",
+"~#	c #F4ECEC",
+"{#	c #AD6B6B",
+"]#	c #730202",
+"^#	c #7D1D1D",
+"/#	c #A86767",
+"(#	c #C59A9A",
+"_#	c #D4B4B4",
+":#	c #D8BBBB",
+"<#	c #D2B1B1",
+"[#	c #C09292",
+"}#	c #A05A5A",
+"|#	c #761111",
+"                        . + @ # $ % & *                         ",
+"                  = - . ; > , ' ) ! ~ { ] ^ /                   ",
+"              ( _ - : < [ } | 1 2 3 4 5 6 7 8 9 0               ",
+"            a b c d e f g h i j k l m n o p q r s 9             ",
+"          t ( u v w x y z A B C D E F G H I J K L M N           ",
+"        O P Q R S T U V W X Y Z `  ...+.@.#.$.%.&.*.=.N         ",
+"      O O -.;.>.>.>.>.>.,.'.).!.~.{.].^./.(._...:.<.[.}.0       ",
+"    O O |.1.>.>.>.>.>.>.,.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.    ",
+"    O O i.j.k.l.m.>.>.>.,.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.^     ",
+"  O O O D.E.F.G.H.>.>.>.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`.  ",
+"  O O O  +.+++@+#+>.>.>.I.$+%+&+*+=+-+;+>.>.>.>+,+'+)+!+~+9 `.  ",
+"  O O O {+]+^+/+(+>.>.>.I._+:+<+[+}+|+1+>.>.>.>.2+3+4+5+6+N `.  ",
+"O O O O a 7+8+9+0+>.>.>.I.a+b+c+d+e+f+g+>.>.>.>._.h+i+j+k+l+`.m+",
+"O O O O P n+o+p+q+>.>.>.r+s+t+u+v+w+x+y+>.>.>.>.z+A+B+C+D+E+F+# ",
+"O O O O G+b - H+I+>.>.>.r+J+K+L+M+N+O+P+>.>.>.>.Q+R+S+T+U+V+W+X+",
+"O O O O |.Y+Z+. `+>.>.>. @.@+@@@L+#@$@%@>.>.>.>.&@*@=@-@;@>@$ ,@",
+"O O O O O '@)@!@~@>.>.>. @{@]@+@^@/@L+(@>.>.>.>._@:@<@[@}@F+# H+",
+"O O O O O G+b |@1@>.>.>.2@3@4@5@6@7@K+8@>.>.>.>.9@0@a@b@c@$ @ d@",
+"O O O O O t ( = e@>.>.>.f@g@h@i@j@5@k@l@>.>.>.>.m@}.n@o@p@X+H+q@",
+"O O O O O O G+r@s@>.>.>.f@t@9 u@v@w@4@x@>.>.>.>.y@0 >@W+z@A@!@Z+",
+"  O O O O O O B@C@>.>.>.D@E@F@/ 9 G@u@H@>.>.>.D@I@`.% z@A@J@K@  ",
+"  O O O O O O t L@>.>.>.>.M@$ & `.N@h.O@>.>.>.P@Q@m+R@+ J@K@n+  ",
+"  O O O O O O O S@T@>.>.>.U@V@X+W@X@Y@Z@>.>.>.`@X+;  #q@Z+b (   ",
+"    O O O O O O .#+#>.>.>.>.@###$#%#&#>.>.>.>.*# #!@|@= r@a     ",
+"    O O O O O O O =#>.>.>.>.>.>.>.>.>.>.>.>.P@-#K@= b ( G+O     ",
+"      O O O O O O ;#>#>.>.>.>.>.>.>.>.>.>.>.,#n+r@( P t O       ",
+"        O O O O O O '#)#!#>.>.>.>.>.>.>.~#{#]#P |.t O O         ",
+"          O O O O O O O ^#/#(#_#:#<#[#}#|#t O O O O O           ",
+"            O O O O O O O O O O O O O O O O O O O O             ",
+"              O O O O O O O O O O O O O O O O O O               ",
+"                  O O O O O O O O O O O O O O                   ",
+"                        O O O O O O O O                         "};
Index: /trunk/share/pixmaps/umit/umit_ico_48px.svg
===================================================================
--- /trunk/share/pixmaps/umit/umit_ico_48px.svg (revision 3176)
+++ /trunk/share/pixmaps/umit/umit_ico_48px.svg (revision 3176)
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="151.00925"
+   height="151.00925"
+   id="svg2924"
+   sodipodi:version="0.32"
+   inkscape:version="0.44"
+   version="1.0"
+   sodipodi:docbase="/dados/Design/DiliDesign/GlobalRed/icones"
+   sodipodi:docname="icone_ate_48px.svg">
+  <defs
+     id="defs2926">
+    <linearGradient
+       id="linearGradient2764">
+      <stop
+         style="stop-color:red;stop-opacity:1;"
+         offset="0"
+         id="stop2766" />
+      <stop
+         style="stop-color:#6c0000;stop-opacity:1;"
+         offset="1"
+         id="stop2768" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2764"
+       id="radialGradient3817"
+       gradientUnits="userSpaceOnUse"
+       cx="595.4079"
+       cy="886.47461"
+       fx="595.4079"
+       fy="886.47461"
+       r="75.504623" />
+    <linearGradient
+       id="linearGradient2776">
+      <stop
+         id="stop2778"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop2780"
+         offset="1"
+         style="stop-color:red;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2776"
+       id="linearGradient3819"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-342.7853,-477.1426)"
+       x1="606.19427"
+       y1="808.65576"
+       x2="581.37836"
+       y2="936.85651" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="51.428571"
+     inkscape:cy="67.857143"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="914"
+     inkscape:window-height="624"
+     inkscape:window-x="5"
+     inkscape:window-y="50" />
+  <metadata
+     id="metadata2929">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-158.7811,-359.7147)">
+    <path
+       inkscape:export-ydpi="28.610001"
+       inkscape:export-xdpi="28.610001"
+       inkscape:export-filename="/dados/Design/DiliDesign/GlobalRed/48.png"
+       transform="translate(-342.7853,-472.828)"
+       d="M 652.57567 908.04736 A 75.504623 75.504623 0 1 1  501.56642,908.04736 A 75.504623 75.504623 0 1 1  652.57567 908.04736 z"
+       sodipodi:ry="75.504623"
+       sodipodi:rx="75.504623"
+       sodipodi:cy="908.04736"
+       sodipodi:cx="577.07104"
+       id="path3811"
+       style="opacity:1;fill:url(#radialGradient3817);fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       inkscape:export-ydpi="28.610001"
+       inkscape:export-xdpi="28.610001"
+       inkscape:export-filename="/dados/Design/DiliDesign/GlobalRed/48.png"
+       sodipodi:nodetypes="csssc"
+       id="path3813"
+       d="M 294.68941,438.99454 C 288.21758,468.19973 263.71957,415.80384 237.52162,415.80384 C 211.32367,415.80384 181.43247,435.8406 181.43247,405.55678 C 181.43247,383.90205 215.63822,366.18652 241.83617,366.18652 C 268.03412,366.18652 302.23987,395.76707 294.68941,438.99454 z "
+       style="fill:url(#linearGradient3819);fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+    <path
+       style="font-size:20.35268593px;font-style:normal;font-weight:normal;line-height:100%;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       d="M 195.83607,384.87721 C 190.11333,384.87721 185.47794,389.88903 185.47794,395.61178 L 185.60742,399.755 L 199.39668,399.755 L 199.39668,449.96808 C 199.39673,464.17994 202.31697,474.52627 208.13639,480.97773 C 214.00375,487.42919 223.32693,490.62374 236.16807,490.62374 C 249.05716,490.6237 258.38038,487.42918 264.19977,480.97773 C 270.01904,474.5263 273.00409,464.17996 273.00419,449.96808 L 273.00419,413.52171 L 272.80993,413.78065 C 272.80993,408.05794 268.17457,403.42253 262.45183,403.42253 L 251.70524,403.40595 L 251.70524,455.14713 C 251.70524,460.38318 250.30329,464.52023 247.56202,467.51215 C 244.82061,470.45742 241.02547,471.91438 236.16807,471.91438 C 231.31059,471.91438 227.51541,470.45745 224.77412,467.51215 C 222.0327,464.52021 220.69558,460.38317 220.69561,455.14713 L 220.24245,384.91687 L 195.83607,384.87721 z "
+       id="path2871"
+       sodipodi:nodetypes="ccccccsscccccccscccc"
+       inkscape:export-filename="/dados/Design/DiliDesign/GlobalRed/48.png"
+       inkscape:export-xdpi="28.610001"
+       inkscape:export-ydpi="28.610001" />
+  </g>
+</svg>
Index: /trunk/umitCore/Email.py
===================================================================
--- /trunk/umitCore/Email.py (revision 2975)
+++ /trunk/umitCore/Email.py (revision 3176)
@@ -1,2 +1,5 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
 # Copyright (C) 2005-2006 Insecure.Com LLC.
 # Copyright (C) 2007-2008 Adriano Monteiro Marques
Index: /unk/umitCore/msgfmt.py
===================================================================
--- /trunk/umitCore/msgfmt.py (revision 3174)
+++  (revision )
@@ -1,219 +1,0 @@
-#! /usr/bin/env python
-# -*- coding: iso-8859-1 -*-
-# Written by Martin v. L� <loewis@informatik.hu-berlin.de>
-#
-# Changelog: (Guilherme Polo)
-#   2008-04-11
-#    - Support for files with BOM UTF8 mark.
-#
-#   2008-04-10
-#    - Support for fuzzy strings in output.
-#    - Bumped to version 1.1.1
-
-"""Generate binary message catalog from textual translation description.
-
-This program converts a textual Uniforum-style message catalog (.po file) into
-a binary GNU catalog (.mo file).  This is essentially the same function as the
-GNU msgfmt program, however, it is a simpler implementation.
-
-Usage: msgfmt.py [OPTIONS] filename.po
-
-Options:
-    -o file
-    --output-file=file
-        Specify the output file to write to.  If omitted, output will go to a
-        file named filename.mo (based off the input file name).
-
-    -f
-    --use-fuzzy
-        Use fuzzy entries in output
-
-    -h
-    --help
-        Print this message and exit.
-
-    -V
-    --version
-        Display version information and exit.
-
-Before using the -f (fuzzy) option, read this:
-    http://www.finesheer.com:8457/cgi-bin/info2html?(gettext)Fuzzy%20Entries&lang=en
-"""
-
-import sys
-import os
-import getopt
-import struct
-import array
-import codecs
-
-__version__ = "1.1.1"
-
-MESSAGES = {}
-
-
-def usage(code, msg=''):
-    print >> sys.stderr, __doc__
-    if msg:
-        print >> sys.stderr, msg
-    sys.exit(code)
-
-
-def add(id, str, fuzzy, use_fuzzy):
-    "Add a translation to the dictionary."
-    global MESSAGES
-    if (not fuzzy or use_fuzzy) and str:
-        MESSAGES[id] = str
-
-
-def generate():
-    "Return the generated output."
-    global MESSAGES
-    keys = MESSAGES.keys()
-    # the keys are sorted in the .mo file
-    keys.sort()
-    offsets = []
-    ids = strs = ''
-    for id in keys:
-        # For each string, we need size and file offset.  Each string is NUL
-        # terminated; the NUL does not count into the size.
-        offsets.append((len(ids), len(id), len(strs), len(MESSAGES[id])))
-        ids += id + '\0'
-        strs += MESSAGES[id] + '\0'
-    output = ''
-    # The header is 7 32-bit unsigned integers.  We don't use hash tables, so
-    # the keys start right after the index tables.
-    # translated string.
-    keystart = 7*4+16*len(keys)
-    # and the values start after the keys
-    valuestart = keystart + len(ids)
-    koffsets = []
-    voffsets = []
-    # The string table first has the list of keys, then the list of values.
-    # Each entry has first the size of the string, then the file offset.
-    for o1, l1, o2, l2 in offsets:
-        koffsets += [l1, o1+keystart]
-        voffsets += [l2, o2+valuestart]
-    offsets = koffsets + voffsets
-    output = struct.pack("Iiiiiii",
-                         0x950412deL,       # Magic
-                         0,                 # Version
-                         len(keys),         # # of entries
-                         7*4,               # start of key index
-                         7*4+len(keys)*8,   # start of value index
-                         0, 0)              # size and offset of hash table
-    output += array.array("i", offsets).tostring()
-    output += ids
-    output += strs
-    return output
-
-
-def make(filename, outfile, use_fuzzy):
-    ID = 1
-    STR = 2
-
-    # Compute .mo name from .po name and arguments
-    if filename.endswith('.po'):
-        infile = filename
-    else:
-        infile = filename + '.po'
-    if outfile is None:
-        outfile = os.path.splitext(infile)[0] + '.mo'
-
-    try:
-        lines = open(infile).readlines()
-        if lines[0].startswith(codecs.BOM_UTF8):
-            lines[0] = lines[0][len(codecs.BOM_UTF8):]
-    except IOError, msg:
-        print >> sys.stderr, msg
-        sys.exit(1)
-
-    section = None
-    fuzzy = 0
-
-    # Parse the catalog
-    lno = 0
-    for l in lines:
-        lno += 1
-        # If we get a comment line after a msgstr, this is a new entry
-        if l[0] == '#' and section == STR:
-            add(msgid, msgstr, fuzzy, use_fuzzy)
-            section = None
-            fuzzy = 0
-        # Record a fuzzy mark
-        if l[:2] == '#,' and 'fuzzy' in l:
-            fuzzy = 1
-        # Skip comments
-        if l[0] == '#':
-            continue
-        # Now we are in a msgid section, output previous section
-        if l.startswith('msgid'):
-            if section == STR:
-                add(msgid, msgstr, fuzzy, use_fuzzy)
-            section = ID
-            l = l[5:]
-            msgid = msgstr = ''
-        # Now we are in a msgstr section
-        elif l.startswith('msgstr'):
-            section = STR
-            l = l[6:]
-        # Skip empty lines
-        l = l.strip()
-        if not l:
-            continue
-        # XXX: Does this always follow Python escape semantics?
-        l = eval(l)
-        if section == ID:
-            msgid += l
-        elif section == STR:
-            msgstr += l
-        else:
-            print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \
-                  'before:'
-            print >> sys.stderr, l
-            sys.exit(1)
-    # Add last entry
-    if section == STR:
-        add(msgid, msgstr, fuzzy, use_fuzzy)
-
-    # Compute output
-    output = generate()
-
-    try:
-        open(outfile,"wb").write(output)
-    except IOError,msg:
-        print >> sys.stderr, msg
-
-
-def main():
-    try:
-        opts, args = getopt.getopt(sys.argv[1:], 'hVo:f',
-            ['help', 'version', 'output-file=', 'use-fuzzy'])
-    except getopt.error, msg:
-        usage(1, msg)
-
-    outfile = None
-    use_fuzzy = False
-    # parse options
-    for opt, arg in opts:
-        if opt in ('-h', '--help'):
-            usage(0)
-        elif opt in ('-V', '--version'):
-            print >> sys.stderr, "msgfmt.py", __version__
-            sys.exit(0)
-        elif opt in ('-f', '--use-fuzzy'):
-            use_fuzzy = True
-        elif opt in ('-o', '--output-file'):
-            outfile = arg
-    # do it
-    if not args:
-        print >> sys.stderr, 'No input file given'
-        print >> sys.stderr, "Try `msgfmt --help' for more information."
-        return
-
-    for filename in args:
-        make(filename, outfile, use_fuzzy)
-
-
-if __name__ == '__main__':
-    main()
Index: /trunk/MANIFEST.in
===================================================================
--- /trunk/MANIFEST.in (revision 3174)
+++ /trunk/MANIFEST.in (revision 3176)
@@ -1,4 +1,4 @@
 include umit README COPYING COPYING_HIGWIDGETS
-recursive-include share/pixmaps/umit *.png *.svg umit.opf umit.opt
+recursive-include share/pixmaps/umit *.png *.svg *.xpm umit.opf umit.opt
 recursive-include share/icons/umit *.ico
 recursive-include share/locale/id/LC_MESSAGES/ *.mo
@@ -28,2 +28,3 @@
 recursive-include umitGUI *.py
 recursive-include higwidgets *.py
+recursive-include utils *.py
