File: __init__.py

package info (click to toggle)
libnumbertext 1.0.11-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,380 kB
  • sloc: python: 439; cpp: 395; java: 244; javascript: 108; makefile: 101; xml: 84; sh: 40
file content (130 lines) | stat: -rw-r--r-- 5,572 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import uno
import unohelper
import re

from org.numbertext import XNumberText
from com.sun.star.lang import Locale

from org.Numbertext import Soros
from org.Numbertext.locales import locales
from org.Numbertext.places import places

# constant
MINUS = "[-\u2212]"  # ASCII hyphen/minus or Unicode minus sign

langname = {}
# loaded patterns
patterns = {}


class NUMBERTEXT( unohelper.Base, XNumberText):

        def __init__(self, ctx):
                sLocaleData = "com.sun.star.i18n.LocaleData"
                self.LocaleData = ctx.ServiceManager.createInstance(sLocaleData)
                sProvider = "com.sun.star.configuration.ConfigurationProvider"
                sAccess   = "com.sun.star.configuration.ConfigurationAccess"
                aConfigProvider = ctx.ServiceManager.createInstance(sProvider)
                prop = uno.createUnoStruct('com.sun.star.beans.PropertyValue')
                prop.Name = "nodepath"
                prop.Value = "/org.openoffice.Setup/L10N"
                self.aSettings = aConfigProvider.createInstanceWithArguments(sAccess,(prop,))
                self.uilocale = self.aSettings.getByName("ooLocale")
                self.locale = Locale("en", "US", "")
                self.func = ctx.ServiceManager.createInstance('com.sun.star.sheet.FunctionAccess')
                for i in locales:
                    langname[i.split("_")[0]] = i

        def queryLocale(self, prop, loc):
                if loc != None:
                        a = loc.split("-")
                        if len(a) == 1:
                                return Locale(a[0], "", "")
                        if len(a) == 2:
                                return Locale(a[0], a[1], "")
                        else:
                                return Locale(a[0], a[1], a[2])
                locale = prop.getPropertyValue("CharLocale")
                if locale != None and locale.Language != "zxx":
                        return locale
                return Locale("en", "US", "")

        # set module name for importing locale data
        def getModule(self, Language, Country, Variant):
                global patterns
                if Country == "":
                    module = Language
                if Variant == "":
                    module = Language + "_" + Country
                else:
                    module = Language + "_" + Country + "_" + Variant
                    if not module in locales:
                        module = Language + "_" + Country
                if not module in locales:
                        module = Language
                        if not module in locales:
                            try:
                                module = langname[Language]
                            except:
                                module = "en_US"
                if not module in patterns:
                        try:
                                d = __import__("numbertext_" + module)
                        except:
                            try:
                                d = __import__("numbertext_" + Language)
                            except:
                                return "Error: missing language data (" + module + ")"
                        patterns[module] = Soros.compile(d.__doc__, module.replace("_", "-"))
                return module

        def getCurrency(self, locale):
                allcurr = self.LocaleData.getAllCurrencies(locale)
                if allcurr != None:
                        struct = uno.createUnoStruct("com.sun.star.i18n.Currency")
                        for struct in allcurr:
                                if struct.Default:
                                        return struct
                return None

        # XNumberText method implementations
        def moneytext(self, prop, num, curr, loc):
                global patterns
                num = num.strip()
                # query document language
                locale = self.queryLocale(prop, loc)
                mod = self.getModule(locale.Language, locale.Country, locale.Variant)
                decimalplaces = 2;
                if curr == None:
                        currency = self.getCurrency(locale)
                        decimalplaces = currency.DecimalPlaces
                        outcurr = currency.ID + " "
                else:
                        outcurr = curr + " "
                        if curr in places:
                                decimalplaces = places[curr]
                if num.rfind(".") > -1 or num.rfind(",") > -1:
                        num = float(num.replace(",","."))
                        if (type(decimalplaces) == type(0.1)):
                                pl = 10**decimalplaces;
                                num = str(round(num * pl) / pl)
                        else:
                                num = str(self.func.callFunction("round", (num, decimalplaces)))
                return get_numbertext(outcurr + num, patterns[mod])

        def numbertext(self, prop, num, loc):
                global patterns
                # query document language
                loc = self.queryLocale(prop, loc)
                mod = self.getModule(loc.Language, loc.Country, loc.Variant)
                return get_numbertext(num.strip(), patterns[mod])

def get_numbertext(num, conv):
        try:
                n = conv.run(num)
                n = n[0].upper() + n[1:]
        except:
                return "Conversion error"
        if n == "":
                return num
        return n