- Timestamp:
- 02/21/12 04:42:22 (15 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
packages/extractor/branches/ufo3/Lib/extractor/formats/woff.py
r1137 r1138 1 from xml.sax.saxutils import quoteattr 2 from extractor.tools import RelaxedInfo 1 3 from opentype import extractOpenTypeInfo, extractOpenTypeGlyphs, extractOpenTypeKerning 2 4 … … 35 37 36 38 def extractWOFFInfo(source, destination): 39 info = RelaxedInfo(destination.info) 40 info.woffMajorVersion = source.majorVersion 41 info.woffMinorVersion = source.minorVersion 42 _extractWOFFMetadata(source, info) 37 43 return extractOpenTypeInfo(source, destination) 38 44 … … 42 48 def extractWOFFKerning(source, destination): 43 49 return extractOpenTypeKerning(source, destination) 50 51 # -------- 52 # Metadata 53 # -------- 54 55 def _extractWOFFMetadata(source, destination): 56 metadata = source.metadata 57 if metadata is None: 58 return 59 for element in metadata: 60 if element.tag == "uniqueid": 61 _extractWOFFMetadataUniqueID(element, destination) 62 elif element.tag == "vendor": 63 _extractWOFFMetadataVendor(element, destination) 64 elif element.tag == "credits": 65 _extractWOFFMetadataCredits(element, destination) 66 elif element.tag == "description": 67 _extractWOFFMetadataDescription(element, destination) 68 elif element.tag == "license": 69 _extractWOFFMetadataLicense(element, destination) 70 elif element.tag == "copyright": 71 _extractWOFFMetadataCopyright(element, destination) 72 elif element.tag == "trademark": 73 _extractWOFFMetadataTrademark(element, destination) 74 elif element.tag == "licensee": 75 _extractWOFFMetadataLicensee(element, destination) 76 elif element.tag == "extension": 77 _extractWOFFMetadataExtension(element, destination) 78 79 def _extractWOFFMetadataUniqueID(element, destination): 80 destination.woffMetadataUniqueID = _extractWOFFMetadataDict(element, ("id",)) 81 82 def _extractWOFFMetadataVendor(element, destination): 83 attributes = ("name", "url", "dir", "class") 84 record = _extractWOFFMetadataDict(element, attributes) 85 destination.woffMetadataVendor = record 86 87 def _extractWOFFMetadataCredits(element, destination): 88 attributes = ("name", "url", "role", "dir", "class") 89 credits = [] 90 for subElement in element: 91 if subElement.tag == "credit": 92 record = _extractWOFFMetadataDict(subElement, attributes) 93 credits.append(record) 94 destination.woffMetadataCredits = dict(credits=credits) 95 96 def _extractWOFFMetadataDescription(element, destination): 97 description = _extractWOFFMetadataDict(element, ("url",)) 98 textRecords = _extractWOFFMetadataText(element) 99 if textRecords: 100 description["text"] = textRecords 101 destination.woffMetadataDescription = description 102 103 def _extractWOFFMetadataLicense(element, destination): 104 license = _extractWOFFMetadataDict(element, ("url", "id")) 105 textRecords = _extractWOFFMetadataText(element) 106 if textRecords: 107 license["text"] = textRecords 108 destination.woffMetadataLicense = license 109 110 def _extractWOFFMetadataCopyright(element, destination): 111 copyright = {} 112 textRecords = _extractWOFFMetadataText(element) 113 if textRecords: 114 copyright["text"] = textRecords 115 destination.woffMetadataCopyright = copyright 116 117 def _extractWOFFMetadataTrademark(element, destination): 118 trademark = {} 119 textRecords = _extractWOFFMetadataText(element) 120 if textRecords: 121 trademark["text"] = textRecords 122 destination.woffMetadataTrademark = trademark 123 124 def _extractWOFFMetadataLicensee(element, destination): 125 destination.woffMetadataLicensee = _extractWOFFMetadataDict(element, ("name", "dir", "class")) 126 127 def _extractWOFFMetadataExtension(element, destination): 128 extension = _extractWOFFMetadataDict(element, ("id",)) 129 for subElement in element: 130 if subElement.tag == "name": 131 if "names" not in extension: 132 extension["names"] = [] 133 name = _extractWOFFMetadataExtensionName(subElement) 134 extension["names"].append(name) 135 elif subElement.tag == "item": 136 if "items" not in extension: 137 extension["items"] = [] 138 item = _extractWOFFMetadataExtensionItem(subElement) 139 extension["items"].append(item) 140 extensions = [] 141 if destination.woffMetadataExtensions: 142 extensions.update(destination.woffMetadataExtensions) 143 e = extensions + [extension] 144 destination.woffMetadataExtensions = extensions + [extension] 145 146 def _extractWOFFMetadataExtensionItem(element): 147 item = _extractWOFFMetadataDict(element, ("id",)) 148 for subElement in element: 149 if subElement.tag == "name": 150 if "names" not in item: 151 item["names"] = [] 152 name = _extractWOFFMetadataExtensionName(subElement) 153 item["names"].append(name) 154 elif subElement.tag == "value": 155 if "values" not in item: 156 item["values"] = [] 157 name = _extractWOFFMetadataExtensionValue(subElement) 158 item["values"].append(name) 159 return item 160 161 def _extractWOFFMetadataExtensionName(element): 162 name = _extractWOFFMetadataDict(element, ("dir", "class")) 163 language = _extractWOFFMetadataLanguage(element) 164 if language is not None: 165 name["language"] = language 166 name["text"] = _flattenWOFFMetadataString(element) 167 return name 168 169 def _extractWOFFMetadataExtensionValue(element): 170 return _extractWOFFMetadataExtensionName(element) 171 172 # support 173 174 def _extractWOFFMetadataDict(element, attributes): 175 record = {} 176 for attribute in attributes: 177 value = element.attrib.get(attribute) 178 if value is not None: 179 record[attribute] = value 180 return record 181 182 def _extractWOFFMetadataText(element): 183 records = [] 184 attributes = ("dir", "class") 185 for subElement in element: 186 record = _extractWOFFMetadataDict(subElement, attributes) 187 # text 188 record["text"] = _flattenWOFFMetadataString(subElement) 189 # language 190 language = _extractWOFFMetadataLanguage(subElement) 191 if language is not None: 192 record["language"] = language 193 records.append(record) 194 return records 195 196 def _extractWOFFMetadataLanguage(element): 197 language = element.attrib.get("{http://www.w3.org/XML/1998/namespace}lang") 198 if language is None: 199 language = element.attrib.get("lang") 200 return language 201 202 def _flattenWOFFMetadataString(element, sub=False): 203 text = element.text.strip() 204 for subElement in element: 205 text += _flattenWOFFMetadataString(subElement, sub=True) 206 if element.tail: 207 text += element.tail.strip() 208 if sub: 209 attrib = ["%s=%s" % (key, quoteattr(value)) for key, value in element.attrib.items()] 210 attrib = " ".join(attrib) 211 start = "<%s %s>" % (element.tag, attrib) 212 end = "</%s>" % (element.tag) 213 text = start + text + end 214 return text
Note: See TracChangeset
for help on using the changeset viewer.
