Comments (4)
I think that the issue is on this line: https://github.com/shellscape/postcss-values-parser/blob/master/lib/parser.js#L265-L271 it requires a stack instead of a single value.
from postcss-values-parser.
With this patch it gets it correct but for the outermost one:
--- a/lib/parser.js
+++ b/lib/parser.js
@@ -29,6 +29,7 @@ module.exports = class Parser {
constructor (input, options) {
const defaults = { loose: false };
+ this.stack = [];
this.input = input;
this.options = Object.assign({}, defaults, options);
this.position = 0;
@@ -266,7 +267,7 @@ module.exports = class Parser {
if (last && last.type === 'func' && last.unbalanced < 0) {
last.unbalanced = 0; // ok we're ready to add parens now
- this.cache = this.current;
+ this.stack.push(this.current);
this.current = last;
}
@@ -355,9 +356,8 @@ module.exports = class Parser {
this.error('Expected opening parenthesis', token);
}
- if (!this.current.unbalanced && this.cache) {
- this.current = this.cache;
- this.cache = null;
+ if (!this.current.unbalanced && this.stack.length) {
+ this.current = this.stack.pop();
}
}
Root {
type: 'root',
nodes:
[ Value {
type: 'value',
nodes:
[ FunctionNode {
type: 'func',
value: 'a',
nodes:
[ Parenthesis { type: 'paren', value: '(' },
FunctionNode {
type: 'func',
value: 'b',
nodes:
[ Parenthesis { type: 'paren', value: '(' },
FunctionNode {
type: 'func',
value: 'c',
nodes:
[ Parenthesis { type: 'paren', value: '(' },
FunctionNode {
type: 'func',
value: 'd',
nodes:
[ Parenthesis { type: 'paren', value: '(' },
Parenthesis { type: 'paren', value: ')' } ] },
Parenthesis { type: 'paren', value: ')' } ] },
Parenthesis { type: 'paren', value: ')' },
Parenthesis { type: 'paren', value: ')' } ] } ] } ] } ] }
from postcss-values-parser.
Thank you for your work looking into this, but please note that Issue Templates are not optional. Please fill in the missing info.
We have a pending fix here: https://github.com/shellscape/postcss-values-parser/tree/fix-nested-funcs please test that branch against your test case.
from postcss-values-parser.
Fixed in f4a7896
from postcss-values-parser.
Related Issues (20)
- Exception thrown on float angle values HOT 4
- Options for initial line/column values HOT 1
- Sass forward prefixes parsing as a word and operator instead of just a word HOT 8
- postcss-values-parser hangs indefinitely HOT 5
- License Change: from MPL-2.0 to MIT to be aligned with postcss pkgs HOT 1
- Can't parse `++(1)` HOT 2
- URL parameters are being parsed into functional groups, when they should be ignored. HOT 2
- Replace url-regex and is-url-superb with custom implementation HOT 6
- Can't parse font property font-size/line-height syntax HOT 7
- cannot parse grid values 1/-1 HOT 5
- Postcss 8 support HOT 1
- Depends on package `url-regex` with high severity vulnerability HOT 3
- No comment in property value HOT 2
- Cannot parse proprietary IE functions HOT 3
- css clamp() syntax error HOT 4
- Cannot parse calculations without spaces around the * operator HOT 5
- Cannot parse `url()` with unquoted data url HOT 1
- Unable to clone value with quotes characters
- Multiple versions of this library can't coexist HOT 2
- v7 Information HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from postcss-values-parser.