postcss
Version:
Tool for transforming styles with JS plugins
80 lines (69 loc) • 1.75 kB
JavaScript
let list = {
comma(string) {
return list.split(string, [','], true)
},
space(string) {
let spaces = [' ', '\n', '\t']
return list.split(string, spaces)
},
split(string, separators, last) {
if (typeof string !== 'string') return []
let array = []
let current = ''
let split = false
let func = 0
let inQuote = false
let prevQuote = ''
let escape = false
let inComment = false
for (let i = 0; i < string.length; i++) {
let letter = string[i]
if (inComment) {
current += letter
if (letter === '*' && string[i + 1] === '/') {
current += '/'
i += 1
inComment = false
}
continue
}
if (escape) {
escape = false
} else if (letter === '\\') {
escape = true
} else if (inQuote) {
if (letter === prevQuote) {
inQuote = false
}
} else if (letter === '"' || letter === "'") {
inQuote = true
prevQuote = letter
} else if (letter === '/' && string[i + 1] === '*') {
current += '/*'
i += 1
inComment = true
continue
} else if (letter === '(') {
func += 1
} else if (letter === ')') {
if (func > 0) func -= 1
} else if (func === 0) {
if (separators.includes(letter)) split = true
}
if (split) {
let value = current.trim()
if (last || value !== '') array.push(value)
current = ''
split = false
} else {
current += letter
}
}
let value = current.trim()
if (last || value !== '') array.push(value)
return array
}
}
module.exports = list
list.default = list