/* @flow */ "use strict" const keywordSets = require("../reference/keywordSets") const getUnitFromValueNode = require("./getUnitFromValueNode") const isStandardSyntaxValue = require("./isStandardSyntaxValue") const isVariable = require("./isVariable") 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 }