def releasify(fp, **kw): with Reset(fp): rdf = XML(fp.read()) node = rdf.getElementsByTagNameNS(NS_EM, "id")[0].childNodes[0] node.data = RELEASE_ID io = BytesIO() with Reset(io): print >> io, rdf.toxml(encoding="utf-8") rdf.unlink() return io
def devrdf(fp, **kw): """ Preprocesses install.rdf for default mode """ rdf = XML(fp.read()) node = rdf.getElementsByTagNameNS(NS_EM, 'name')[0].childNodes[0] node.data += " *unofficial developer build*" io = BytesIO() with Reset(io): print >> io, rdf.toxml(encoding="utf-8") rdf.unlink() return io
def releasify(fp, **kw): """ Decorator: Transform into release version """ kw = kw with Reset(fp): rdf = XML(fp.read()) node = rdf.getElementsByTagNameNS(NS_EM, "id")[0].childNodes[0] node.data = RELEASE_ID io = BytesIO() with Reset(io): io.write(rdf.toxml(encoding="utf-8")) io.truncate() rdf.unlink() return io
def nightlyrdf(fp, **kw): """ Preprocesses install.rdf for nightly mode """ rdf = XML(fp.read()) # update the version node = rdf.getElementsByTagNameNS(NS_EM, 'version')[0].childNodes[0] node.data += strftime(".%Y%m%d.%Hh%Mm%Ss") # a new name node = rdf.getElementsByTagNameNS(NS_EM, 'name')[0].childNodes[0] node.data += " *nightly*" io = BytesIO() with Reset(io): print >> io, rdf.toxml(encoding="utf-8") rdf.unlink() return set_uurl(io, **kw)
def set_uurl(fp, **kw): """ Set the updateURL """ with Reset(fp): rdf = XML(fp.read()) node = rdf.getElementsByTagNameNS(NS_EM, 'aboutURL')[0] u = rdf.createElementNS(NS_EM, 'em:updateURL') u.appendChild(rdf.createTextNode(kw.get("updateurl"))) node.parentNode.insertBefore(u, node) node.parentNode.insertBefore(rdf.createTextNode('\n\t\t'), node) io = BytesIO() with Reset(io): print >> io, rdf.toxml(encoding="utf-8") rdf.unlink() return io
def localize(fp, **kw): """ Generate em:localized """ kw = kw def sort(f): if "en-US" in f["locale"]: return 0, f["locale"] return 1, f["locale"] def get_locale_strings(): locales = list() for f in sorted(files("chrome/locale/*/description.properties")): locale = dict(locale=(f.split("/", 3)[2],)) with open(f, "r", encoding="utf-8") as lp: for l in lp: l = l.strip() if not l or l.startswith("#"): continue k, v = l.split("=", 1) k = k.split(".") k = k[-2] if len(k[-1]) < 3 else k[-1] if not k or not v: continue if k not in locale: locale[k] = list() locale[k] += v, locales += locale, return locales locales = get_locale_strings() with Reset(fp): rdf = XML(fp.read()) # kill old localized for e in rdf.getElementsByTagNameNS(NS_EM, "localized"): e.parentNode.removeChild(e) def mapkey(k): v = list() for e in rdf.getElementsByTagNameNS(NS_EM, k): v += e.firstChild.data, return k, v keys = ("locale", "name", "description", "creator", "homepageURL", "developer", "translator", "contributor") baseprops = dict(mapkey(k) for k in keys) def add_props(): parent = rdf.getElementsByTagNameNS(NS_EM, "id")[0].parentNode for props in sorted(locales, key=sort): node = rdf.createElementNS(NS_EM, "em:localized") desc = rdf.createElementNS(NS_RDF, "Description") for k in keys: vals = props.get(k, baseprops.get(k, list())) for v in vals: n = rdf.createElementNS(NS_EM, "em:" + k) n.appendChild(rdf.createTextNode(v)) desc.appendChild(n) parent.appendChild(rdf.createTextNode("\n\t\t")) node.appendChild(desc) parent.appendChild(node) parent.appendChild(rdf.createTextNode("\n\t")) add_props() io = BytesIO() with Reset(io): io.write(rdf.toxml(encoding="utf-8")) io.truncate() rdf.unlink() return io
def getFiles(): for f in glob('*/*/*/description.properties'): yield f for f in glob('*/*/*/localized.properties'): yield f for f in getFiles(): locale = basename(dirname(f)) props = parseProps(f) if not props: continue props.add('locale', locale) props.mergene(baseprops) print props localized = document.createElement('em:localized') desc = document.createElement('Description') localized.appendChild(desc) for k,vv in props.items(): for v in vv: n = document.createElement('em:' + k) n.appendChild(document.createTextNode(v)) desc.appendChild(n) document.documentElement.appendChild(localized) document.documentElement.appendChild(document.createTextNode('\n')) with copen('localized.xml', 'wb', 'utf-8') as op: op.write(document.toxml())
def localize(fp, **kw): """ Generate em:localized """ def sort(f): if "en-US" in f["locale"]: return 0, f["locale"] return 1, f["locale"] locales = list() for f in sorted(files("chrome/locale/*/description.properties")): locale = dict(locale=(f.split("/", 3)[2], )) with open(f, "rb") as lp: for l in lp: l = unicode(l, "utf-8").strip() if not l or l.startswith("#"): continue k, v = l.split("=", 1) k = k.split(".") k = k[-2] if len(k[-1]) < 3 else k[-1] if not k or not v: continue if k not in locale: locale[k] = list() locale[k] += v, locales += locale, with Reset(fp): rdf = XML(fp.read()) # kill old localized for e in rdf.getElementsByTagNameNS(NS_EM, "localized"): e.parentNode.removeChild(e) def mapkey(k): v = list() for e in rdf.getElementsByTagNameNS(NS_EM, k): v += e.firstChild.data, return k, v keys = ("locale", "name", "description", "creator", "homepageURL", "developer", "translator", "contributor") baseprops = dict(mapkey(k) for k in keys) parent = rdf.getElementsByTagNameNS(NS_EM, "id")[0].parentNode for props in sorted(locales, key=sort): node = rdf.createElementNS(NS_EM, "em:localized") desc = rdf.createElementNS(NS_RDF, "Description") for k in keys: vals = props.get(k, baseprops.get(k, list())) for v in vals: n = rdf.createElementNS(NS_EM, "em:" + k) n.appendChild(rdf.createTextNode(v)) desc.appendChild(n) parent.appendChild(rdf.createTextNode("\n\t\t")) node.appendChild(desc) parent.appendChild(node) parent.appendChild(rdf.createTextNode("\n\t")) io = BytesIO() with Reset(io): print >> io, rdf.toxml(encoding="utf-8") rdf.unlink() return io