| /* @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; |
| }; |