X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ea5449ae514c2eba0dae9828cbed53b902b52d89..aca310e5cc45db153540efe2df577d8f985ccfc1:/wxPython/samples/ide/activegrid/util/utillang.py diff --git a/wxPython/samples/ide/activegrid/util/utillang.py b/wxPython/samples/ide/activegrid/util/utillang.py new file mode 100644 index 0000000000..fad7e20678 --- /dev/null +++ b/wxPython/samples/ide/activegrid/util/utillang.py @@ -0,0 +1,146 @@ +#---------------------------------------------------------------------------- +# Name: utillang.py +# Purpose: Provide language specific utilities +# +# Author: Joel Hare +# +# Created: 8/23/05 +# CVS-ID: $Id$ +# Copyright: (c) 2004-2005 ActiveGrid, Inc. +# License: wxWindows License +#---------------------------------------------------------------------------- + +import os +import sys +import UserDict +import tempfile +import xml.sax.saxutils as saxutils + +import activegrid.util.parser as parser + +PY2WEB_codepages = { + 'cp1251' : 'CP-1251', + 'koi8_r' : 'KOI8-R', +} + +def evalXPath(xpath, data, specialEntries=None): + codeStr = parser.xpathToCode(xpath) + return evalCode(codeStr, data, specialEntries) + +def evalCode(codeStr, data, specialEntries=None): + if isinstance(data, ObjAsDict): + namespace = data + elif isinstance(data, dict): + namespace = dict(data) + else: + namespace = ObjAsDict(data) + if specialEntries: + for key, value in specialEntries.items(): + namespace.addSpecialEntry(key, value) + return eval(codeStr, {}, namespace) + +def deriveCharset(): + charset = None + encodingString = sys.getdefaultencoding() + if encodingString != 'ascii': + charset = PY2WEB_codepages.get(encodingString.lower()) + if charset == None: + charset = encodingString + return charset + +def toUTF8(value): + """ + Converts all unicode and non-string values to utf-8. + This assumes string instances are already encoded in utf-8. + Note that us-ascii is a subset of utf-8. + """ + if isinstance(value, unicode): + return value.encode('utf-8') + return str(value) + +def toUnicode(value): + """ + Converts all strings non-string values to unicode. + This assumes string instances are encoded in utf-8. + Note that us-ascii is a subset of utf-8. + """ + if not isinstance(value, unicode): + if not isinstance(value, str): + return unicode(value) + return unicode(value, 'utf-8') + return value + + +def getSystemTempDir(): + return tempfile.gettempdir() + +def getEnvVar(name, defaultVal=None): + if os.environ.has_key(name): + return os.environ[name] + return defaultVal + +class ObjAsDict(UserDict.DictMixin): + """ + Passing this to eval as the local variables dictionary allows the + evaluated code to access properties in the wrapped object + """ + def __init__(self, obj): + self.obj = obj + self.specialEntries = {} + + def __getitem__(self, key): + try: + return getattr(self.obj, key) + except AttributeError, e: + if self.specialEntries.has_key(key): + return self.specialEntries[key] + raise KeyError(e.args) + def __setitem__(self, key, item): setattr(self.obj, key, item) + def __delitem__(self, key): delattr(self.obj, key) + def keys(self): + ret=[] + for i in list(dir(self.obj)+self.specialEntries.keys()): + if i=="__doc__" or i=="__module__": + pass + elif i not in ret: + ret.append(i) + return ret + + def addSpecialEntry(self, key, value): + self.specialEntries[key] = value + +global saxXMLescapeDoubleQuote +saxXMLescapeDoubleQuote = {'"':'"'} + +global saxXMLescapesAllQuotes +# IE doesn't support ' but it doesn't seem like we should need this escaped at all so I took it out. +saxXMLescapesAllQuotes = {'"':'"', "'":"'"} + +global saxXMLunescapes +saxXMLunescapes = {'"':'"', "'":"'"} + +def escape(data, extraEscapes=None): + """Escape ', ", &, <, and > in a string of data. + + Basically, everything that saxutils.escape does (and this calls that, at + least for now), but with " and ' added as well. + + TODO: make this faster; saxutils.escape() is really slow + """ + + global saxXMLescapeDoubleQuote + if (extraEscapes == None): + extraEscapes = saxXMLescapeDoubleQuote + return saxutils.escape(data, extraEscapes) + +def unescape(data): + """Unescape ', ", &, <, and > in a string of data. + + Basically, everything that saxutils.unescape does (and this calls that, at + least for now), but with " and ' added as well. + + TODO: make this faster; saxutils.unescape() is really slow + """ + + global saxXMLunescapes + return saxutils.unescape(data, saxXMLunescapes)