Comment analyser le format abrégé de police CSS

Je dois analyser le format abrégé de police CSS dans les composants séparés (police-famille, taille de police, police-poids, …). Ce format abrégé est assez compliqué. Voici deux exemples:

10px sans-serif bold italic small-caps 1em/1.5em verdana,sans-serif 

Avant de commencer à écrire un analyseur pour cela, y at-il un analyseur déjà existant là-bas que je pourrais utiliser (de préférence écrit en JavaScript)?

Voici un "élément DOM temporaire et utilisant la fonction css () de jquery"):

http://jsfiddle.net/thirtydot/tpSsE/2/

 var $test = $('<span />'); $test.css('font', 'bold italic small-caps 1em/1.5em verdana,sans-serif'); alert($test.css('fontWeight')); alert($test.css('fontStyle')); alert($test.css('fontVariant')); alert($test.css('fontSize')); alert($test.css('lineHeight')); alert($test.css('fontFamily')); 

Voici ma propre tentative humble d'une fonction d'analyseur de police que je viens de créer. Mais je ne suis pas sûr de savoir si cela fonctionne avec toutes les spécialités du format de la police à court terme.

 function parseFont(font) { var fontFamily = null, fontSize = null, fontStyle = "normal", fontWeight = "normal", fontVariant = "normal", lineHeight = "normal"; var elements = font.split(/\s+/); outer: while (element = elements.shift()) { switch (element) { case "normal": break; case "italic": case "oblique": fontStyle = element; break; case "small-caps": fontVariant = element; break; case "bold": case "bolder": case "lighter": case "100": case "200": case "300": case "400": case "500": case "600": case "700": case "800": case "900": fontWeight = element; break; default: if (!fontSize) { var parts = element.split("/"); fontSize = parts[0]; if (parts.length > 1) lineHeight = parts[1]; break; } fontFamily = element; if (elements.length) fontFamily += " " + elements.join(" "); break outer; } } return { "fontStyle": fontStyle, "fontVariant": fontVariant, "fontWeight": fontWeight, "fontSize": fontSize, "lineHeight": lineHeight, "fontFamily": fontFamily } } 

Les règles d'analyse sont décrites dans la spécification qui contient également un guide pour lire la langue utilisée pour exprimer les règles de valeur .

Version pure et gratuite de Javascript:

 var parsedStyleForCSS = function(cssString){ var el = document.createElement("span"); el.setAttribute("style", cssString); return el.style; // CSSStyleDeclaration object }; var parsedStyle = parsedStyleForCSS("font: bold italic small-caps 1em/1.5em verdana,sans-serif"); console.log(parsedStyle["fontWeight"]); // bold console.log(parsedStyle["fontStyle"]); // italic console.log(parsedStyle["fontVariant"]); // small-caps console.log(parsedStyle["fontSize"]); // 1em console.log(parsedStyle["lineHeight"]); // 1.5em console.log(parsedStyle["fontFamily"]); // verdana, sans-serif 

Si vous cherchez à faire quelque chose de similaire avec les feuilles de style complètes, voir cette réponse: Analyse de CSS dans JavaScript / jQuery