blob: 71a8d438ae6c9b8084a48bb8712a680768ab7493 [file] [log] [blame]
/* @flow */
"use strict";
const isStandardSyntaxValue = require("./isStandardSyntaxValue");
const isVariable = require("./isVariable");
const keywordSets = require("../reference/keywordSets");
const postcssValueParser = require("postcss-value-parser");
/**
* Get the list-style-type within a `list-style` shorthand property value.
*/
module.exports = function findListStyleType(
value /*: string*/
) /*: Array<Object>*/ {
const listStyleTypes = [];
const valueNodes = postcssValueParser(value);
// Handle `inherit`, `initial` and etc
if (
valueNodes.nodes.length === 1 &&
keywordSets.listStyleTypeKeywords.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.listStylePositionKeywords.has(valueLowerCase) ||
keywordSets.listStyleImageKeywords.has(valueLowerCase)
) {
return;
}
listStyleTypes.push(valueNode);
});
return listStyleTypes;
};