|
2 | 2 | fromsiximportwith_metaclass |
3 | 3 |
|
4 | 4 | importtypes |
| 5 | +fromcollectionsimportOrderedDict |
5 | 6 |
|
6 | 7 | from .importinputstream |
7 | 8 | from .importtokenizer |
|
17 | 18 | namespaces, |
18 | 19 | htmlIntegrationPointElements,mathmlTextIntegrationPointElements, |
19 | 20 | adjustForeignAttributesasadjustForeignAttributesMap, |
| 21 | +adjustMathMLAttributes,adjustSVGAttributes, |
20 | 22 | E, |
21 | 23 | ReparseException |
22 | 24 | ) |
@@ -263,96 +265,18 @@ def normalizeToken(self, token): |
263 | 265 | """ HTML5 specific normalizations to the token stream """ |
264 | 266 |
|
265 | 267 | iftoken["type"]==tokenTypes["StartTag"]: |
266 | | -token["data"]=dict(token["data"][::-1]) |
| 268 | +token["data"]=OrderedDict(token['data']) |
267 | 269 |
|
268 | 270 | returntoken |
269 | 271 |
|
270 | 272 | defadjustMathMLAttributes(self,token): |
271 | | -replacements= {"definitionurl":"definitionURL"} |
272 | | -fork,vinreplacements.items(): |
273 | | -ifkintoken["data"]: |
274 | | -token["data"][v]=token["data"][k] |
275 | | -deltoken["data"][k] |
| 273 | +adjust_attributes(token,adjustMathMLAttributes) |
276 | 274 |
|
277 | 275 | defadjustSVGAttributes(self,token): |
278 | | -replacements= { |
279 | | -"attributename":"attributeName", |
280 | | -"attributetype":"attributeType", |
281 | | -"basefrequency":"baseFrequency", |
282 | | -"baseprofile":"baseProfile", |
283 | | -"calcmode":"calcMode", |
284 | | -"clippathunits":"clipPathUnits", |
285 | | -"contentscripttype":"contentScriptType", |
286 | | -"contentstyletype":"contentStyleType", |
287 | | -"diffuseconstant":"diffuseConstant", |
288 | | -"edgemode":"edgeMode", |
289 | | -"externalresourcesrequired":"externalResourcesRequired", |
290 | | -"filterres":"filterRes", |
291 | | -"filterunits":"filterUnits", |
292 | | -"glyphref":"glyphRef", |
293 | | -"gradienttransform":"gradientTransform", |
294 | | -"gradientunits":"gradientUnits", |
295 | | -"kernelmatrix":"kernelMatrix", |
296 | | -"kernelunitlength":"kernelUnitLength", |
297 | | -"keypoints":"keyPoints", |
298 | | -"keysplines":"keySplines", |
299 | | -"keytimes":"keyTimes", |
300 | | -"lengthadjust":"lengthAdjust", |
301 | | -"limitingconeangle":"limitingConeAngle", |
302 | | -"markerheight":"markerHeight", |
303 | | -"markerunits":"markerUnits", |
304 | | -"markerwidth":"markerWidth", |
305 | | -"maskcontentunits":"maskContentUnits", |
306 | | -"maskunits":"maskUnits", |
307 | | -"numoctaves":"numOctaves", |
308 | | -"pathlength":"pathLength", |
309 | | -"patterncontentunits":"patternContentUnits", |
310 | | -"patterntransform":"patternTransform", |
311 | | -"patternunits":"patternUnits", |
312 | | -"pointsatx":"pointsAtX", |
313 | | -"pointsaty":"pointsAtY", |
314 | | -"pointsatz":"pointsAtZ", |
315 | | -"preservealpha":"preserveAlpha", |
316 | | -"preserveaspectratio":"preserveAspectRatio", |
317 | | -"primitiveunits":"primitiveUnits", |
318 | | -"refx":"refX", |
319 | | -"refy":"refY", |
320 | | -"repeatcount":"repeatCount", |
321 | | -"repeatdur":"repeatDur", |
322 | | -"requiredextensions":"requiredExtensions", |
323 | | -"requiredfeatures":"requiredFeatures", |
324 | | -"specularconstant":"specularConstant", |
325 | | -"specularexponent":"specularExponent", |
326 | | -"spreadmethod":"spreadMethod", |
327 | | -"startoffset":"startOffset", |
328 | | -"stddeviation":"stdDeviation", |
329 | | -"stitchtiles":"stitchTiles", |
330 | | -"surfacescale":"surfaceScale", |
331 | | -"systemlanguage":"systemLanguage", |
332 | | -"tablevalues":"tableValues", |
333 | | -"targetx":"targetX", |
334 | | -"targety":"targetY", |
335 | | -"textlength":"textLength", |
336 | | -"viewbox":"viewBox", |
337 | | -"viewtarget":"viewTarget", |
338 | | -"xchannelselector":"xChannelSelector", |
339 | | -"ychannelselector":"yChannelSelector", |
340 | | -"zoomandpan":"zoomAndPan" |
341 | | - } |
342 | | -fororiginalNameinlist(token["data"].keys()): |
343 | | -iforiginalNameinreplacements: |
344 | | -svgName=replacements[originalName] |
345 | | -token["data"][svgName]=token["data"][originalName] |
346 | | -deltoken["data"][originalName] |
| 276 | +adjust_attributes(token,adjustSVGAttributes) |
347 | 277 |
|
348 | 278 | defadjustForeignAttributes(self,token): |
349 | | -replacements=adjustForeignAttributesMap |
350 | | - |
351 | | -fororiginalNameintoken["data"].keys(): |
352 | | -iforiginalNameinreplacements: |
353 | | -foreignName=replacements[originalName] |
354 | | -token["data"][foreignName]=token["data"][originalName] |
355 | | -deltoken["data"][originalName] |
| 279 | +adjust_attributes(token,adjustForeignAttributesMap) |
356 | 280 |
|
357 | 281 | defreparseTokenNormal(self,token): |
358 | 282 | self.parser.phase() |
@@ -2702,6 +2626,12 @@ def processEndTag(self, token): |
2702 | 2626 | } |
2703 | 2627 |
|
2704 | 2628 |
|
| 2629 | +defadjust_attributes(token,replacements): |
| 2630 | +iffrozenset(token['data'])&frozenset(replacements): |
| 2631 | +token['data']=OrderedDict( |
| 2632 | + (replacements.get(k,k),v)fork,vintoken['data'].iteritems()) |
| 2633 | + |
| 2634 | + |
2705 | 2635 | defimpliedTagToken(name,type="EndTag",attributes=None, |
2706 | 2636 | selfClosing=False): |
2707 | 2637 | ifattributesisNone: |
|