/* @flow */ "use strict"; const getUnitFromValueNode = require("./getUnitFromValueNode"); const isStandardSyntaxValue = require("./isStandardSyntaxValue"); const isVariable = require("./isVariable"); const keywordSets = require("../reference/keywordSets"); const postcssValueParser = require("postcss-value-parser"); /** * Get the font-families within a `font` shorthand property value. */ module.exports = function findAnimationName( value /*: string*/ ) /*: Array*/ { const animationNames = []; const valueNodes = postcssValueParser(value); // Handle `inherit`, `initial` and etc if ( valueNodes.nodes.length === 1 && keywordSets.basicKeywords.has(valueNodes.nodes[0].value.toLowerCase()) ) { return [valueNodes.nodes[0]]; } valueNodes.walk(valueNode => { if (valueNode.type === "function") { return false; } if (valueNode.type !== "word") { return; } const valueLowerCase = valueNode.value.toLowerCase(); // Ignore non standard syntax if (!isStandardSyntaxValue(valueLowerCase)) { return; } // Ignore variables if (isVariable(valueLowerCase)) { return; } // Ignore keywords for other font parts if (keywordSets.animationShorthandKeywords.has(valueLowerCase)) { return; } // Ignore numbers with units const unit = getUnitFromValueNode(valueNode); if (unit || unit === "") { return; } animationNames.push(valueNode); }); return animationNames; };