diff -r 7685cec9fd3c -r f2ddfa555b0f doc/api/python/localisation-pysrc.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/api/python/localisation-pysrc.html Fri Sep 11 11:54:49 2009 +0100 @@ -0,0 +1,568 @@ + + + + + localisation + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Module localisation + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Module localisation

+
+  1  #============================================================================  
+  2  #Name        : localisation.py  
+  3  #Part of     : Helium  
+  4   
+  5  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+  6  #All rights reserved. 
+  7  #This component and the accompanying materials are made available 
+  8  #under the terms of the License "Eclipse Public License v1.0" 
+  9  #which accompanies this distribution, and is available 
+ 10  #at the URL "http://www.eclipse.org/legal/epl-v10.html". 
+ 11  # 
+ 12  #Initial Contributors: 
+ 13  #Nokia Corporation - initial contribution. 
+ 14  # 
+ 15  #Contributors: 
+ 16  # 
+ 17  #Description: 
+ 18  #=============================================================================== 
+ 19   
+ 20  """ Localisation related function.  
+ 21          * Parsing of languages.xml 
+ 22  """ 
+ 23  import re 
+ 24  import amara 
+ 25  import os 
+ 26  import bsf 
+ 27  import os.path 
+ 28   
+
29 -class Languages: +
30 """ Languages.xml file parser. """ + 31 +
32 - def __init__(self, filename): +
33 self.__filename = filename + 34 self.__xml = amara.parse(open(filename,"r")) +
35 +
36 - def get_language_ids(self): +
37 """ returns languages id list """ + 38 result = [] + 39 for language in self.__xml.xml_xpath("/languages/language"): + 40 result.append(language.id.strip()) + 41 return result +
42 + 43 +
44 - def get_name(self, lid): +
45 """ returns languages id list """ + 46 for language in self.__xml.xml_xpath("/languages/language[@id='%s']" % lid): + 47 return language.name.strip() +
48 +
49 - def get_attribute(self, lid, name, default=None): +
50 """ returns the value for a specific language attribute name. It returns default if not found. """ + 51 for language in self.__xml.xml_xpath("/languages/language[@id='%s']/%s" % (lid, name)): + 52 return language.xml_child_text.strip() + 53 return default +
54 + 55 +
56 - def get_fallbacks(self, lid): +
57 """ Return the list of available fallbacks + 58 None if not any. + 59 """ + 60 string = self.get_attribute(lid, 'fallbacks') + 61 if (string != None): + 62 return string.split(',') + 63 return None +
64 +
65 - def find_first_fallback(self, lid, exists): +
66 """ Find recursively the first reasonable alternative + 67 lid the language id + 68 exists an existance function that takes a language id + 69 as parameter and return a boolean + 70 """ + 71 + 72 if (exists(lid)): + 73 return lid + 74 + 75 # get fallback list + 76 fallbacks = self.get_fallbacks(lid) + 77 if fallbacks == None: + 78 return None + 79 + 80 for fallback in fallbacks: + 81 if exists(fallback): + 82 return fallback + 83 + 84 for fallback in fallbacks: + 85 ffallback = self.find_first_fallback(fallback) + 86 if ffallback != None: + 87 return ffallback + 88 + 89 return None +
90 + 91 + 92 +
93 -def get_all_variations(languages_xml): +
94 """ Returns a list of all regional variations supported by platform. """ + 95 variations = {'western':1} + 96 xml = Languages(languages_xml) + 97 for lid in xml.get_language_ids(): + 98 variations[xml.get_attribute(lid, 'core', 'western')] = 1 + 99 return variations.keys() +
100 +
101 -def get_languages_for_variation(languages_xml, variation='western'): +
102 """ Returns alist of all supported languages for a specific region. """ +103 xml = Languages(languages_xml) +104 result = [] +105 for lid in xml.get_language_ids(): +106 if (xml.get_attribute(lid, 'core', 'western') == variation): +107 result.append(lid) +108 return result +
109 +110 +
111 -def _apply_override(overrides, line): +
112 res = re.match(r'\s*(data|file)=\s*(\S+)\s+(\S+)', line) +113 if res != None and overrides.has_key(res.group(3).lower()): +114 print "OVERRIDE: %s => %s" % (res.group(2), overrides[res.group(3).lower()]) +115 return "%s=%s %s" % (res.group(1), overrides[res.group(3).lower()], res.group(3)) +116 return line +
117 +118 +
119 -def create_locales_iby(product, lid, flags=None, prefix='', suffix=''): +
120 """ Function that generates locales_xx.iby into rom product folder. +121 """ +122 if flags is None: +123 flags = [] +124 bsfs = bsf.read_all() +125 if not bsfs.has_key(product): +126 raise Exception("Product not defined, could not find %s.bsf" % product) +127 +128 variantpath = bsfs[product].get_path() +129 if lid == "sc": +130 return +131 outputfile = "/epoc32/rom/%s/locales_%s.iby" % (variantpath, lid) +132 +133 print ("Generating %s..." % outputfile) +134 +135 +136 output = open (outputfile, "w+") +137 output.write("#ifndef __LOCALES_%s_IBY__\n" % lid) +138 output.write("#define __LOCALES_%s_IBY__\n" % lid) +139 +140 args = '' +141 configs = bsfs[product].get_path_as_array() +142 configs.reverse() +143 for customisation in configs: +144 args += "-I \"./%s\" " % bsfs[customisation].get_path() +145 args += "-I \"../include/%s\" " % bsfs[customisation].get_path() +146 +147 args += "-I ..\\include\\oem" +148 for flag in flags: +149 args = args + " -D%s" % flag +150 +151 cdir = os.curdir +152 os.chdir ("/epoc32/rom") +153 cmd = "cpp -nostdinc -u %s %s include\\locales_sc.iby -include .\\include\\header.iby %s" % (prefix, args, suffix) +154 print ("Calling %s\n" % cmd) +155 stdin, stdout, stderr = os.popen3(cmd) +156 stdin.close() +157 result = stdout.read() +158 errors = stderr.read() +159 stderr.close() +160 status = stdout.close() or 0 +161 +162 print errors +163 +164 # parsing overrides first +165 overrides = {} +166 for line in result.splitlines(): +167 res = re.match(r'^\s*(?:ROM_IMAGE\[\d+\]\s+)?data-override\s*=\s*(\S+)\s+(\S+)', line) +168 if res != None: +169 print "Found override directive %s -> %s" % (res.group(2).lower(), res.group(1)) +170 overrides[res.group(2).lower()] = res.group(1) +171 +172 for line in result.splitlines(): +173 if re.match(r'^\s*(ROM_IMAGE\[\d+\]\s+)?data-override\s*=\s*(\S+)\s+(\S+)', line): +174 pass +175 else: +176 line = _apply_override(overrides, line) +177 if re.match("^\\s*data\\s*=\\s*MULTI_LINGUIFY", line): +178 res = re.search(r"MULTI_LINGUIFY\s*\(\s*(\S+)\s+(\S+)\s+(\S+)\s*\)", line) +179 if res.group(1).lower() == "rsc": +180 ext = "r%s" % lid +181 output.write("data=%s.%s %s.%s\n" % (res.group(2), res.group(1), res.group(3), ext)) +182 else: +183 print "WARNING: Cannot extract '%s'" % line +184 +185 elif re.search(r"\.rsc", line, re.I) != None: +186 output.write(re.sub(r"\.[rR][sS][cC]", r".r%s" % lid, line) + "\n") +187 elif re.search(r"\.dbz", line, re.I): +188 output.write(re.sub(r"\.[dD][bB][zZ]", r".d%s" % lid, line) + "\n") +189 elif re.search(r"\.hlp", line, re.I): +190 output.write(re.sub(r"\.[hH][lL][pP]", r".h%s" % lid, line) + "\n") +191 elif re.search(r"Content\\01", line, re.I): +192 #rename Content\01 to Content\xx (where xx is language id). This is for handlng DTD files +193 output.write(re.sub(r"Content\\01", r"Content\\%s" % lid, line) + "\n") +194 elif re.search(r"\.o0001", line, re.I): +195 lang = lid +196 while (len(lang)<4): +197 lang = "0%s" % lang +198 output.write(re.sub(r"\.[oO]\d+", ".o%s" % lang, line) + "\n") +199 elif re.search(r"elocl\.dll", line, re.I): +200 output.write(re.sub(r"\.[lL][oO][cC]|\.[dD][lL][lL]", ".%s" % lid, line) + "\n") +201 elif re.search(r"^\s*(data|file)=", line, re.I): +202 print ("WARNING: This should not be included in resource.iby '%s'\nThis file should be included using an 'applicationnameVariant.iby' file.\n" % line) +203 output.write("#endif\n") +204 output.close() +205 os.chdir(cdir) +206 return status +
207 +208 +209 +210 VARIANT_ID_KEY = 'variant.id' +211 VARIATION_DIR_KEY = 'variation.dir' +212 +
213 -def find_variant_path(config, key=VARIANT_ID_KEY): +
214 """ This function helps to find the variant directory +215 using variant configuration +216 """ +217 if config.has_key(VARIATION_DIR_KEY) and os.path.exists(config[VARIATION_DIR_KEY]): +218 for directory in os.listdir(config[VARIATION_DIR_KEY]): +219 if (config.has_key(key) and re.match(r".*_%s$" % config[key], directory) != None): +220 return os.path.join(config[VARIATION_DIR_KEY], directory) +221 return None +
222 +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +