--- /dev/null
+/* @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<Object>*/ {
+ 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;
+};