Skip to content

Commit 5c3fdbd

Browse files
authored
css-tokenizer : latest specification (#972)
1 parent f981641 commit 5c3fdbd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1166
-234
lines changed

package-lock.json

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/css-calc/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changes to CSS Calc
22

3+
### Unreleased (patch)
4+
5+
- Correctly serialize negative zero `-0` values as `calc(-1 * 0px)`
6+
37
### 1.1.2
48

59
_July 3, 2023_

packages/css-calc/dist/index.cjs

+1-1
Large diffs are not rendered by default.

packages/css-calc/dist/index.mjs

+1-1
Large diffs are not rendered by default.

packages/css-calc/src/util/minus-zero.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ export function patchMinusZero(x: TokenNode | FunctionNode | -1): TokenNode | Fu
2828
return x;
2929
}
3030

31-
token[1] = '-0';
31+
token[1] = `calc(-1 * ${token[1]})`;
3232
return x;
3333
}

packages/css-calc/test/additional/mod-rem-infinity.mjs

+9-9
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ assert.strictEqual(
2727
);
2828

2929
assert.strictEqual(
30-
calc('mod(-0, infinity)'),
30+
calc('mod(calc(-1 * 0), infinity)'),
3131
'calc(NaN)',
3232
);
3333

@@ -37,8 +37,8 @@ assert.strictEqual(
3737
);
3838

3939
assert.strictEqual(
40-
calc('mod(-0, -infinity)'),
41-
'-0',
40+
calc('mod(calc(-1 * 0), -infinity)'),
41+
'calc(-1 * 0)',
4242
);
4343

4444
assert.strictEqual(
@@ -87,8 +87,8 @@ assert.strictEqual(
8787
);
8888

8989
assert.strictEqual(
90-
calc('rem(-0, infinity)'),
91-
'-0',
90+
calc('rem(calc(-1 * 0), infinity)'),
91+
'calc(-1 * 0)',
9292
);
9393

9494
assert.strictEqual(
@@ -97,8 +97,8 @@ assert.strictEqual(
9797
);
9898

9999
assert.strictEqual(
100-
calc('rem(-0, -infinity)'),
101-
'-0',
100+
calc('rem(calc(-1 * 0), -infinity)'),
101+
'calc(-1 * 0)',
102102
);
103103

104104
assert.strictEqual(
@@ -112,11 +112,11 @@ assert.strictEqual(
112112
);
113113

114114
assert.strictEqual(
115-
calc('rem(-infinity, -0)'),
115+
calc('rem(-infinity, calc(-1 * 0))'),
116116
'calc(NaN)',
117117
);
118118

119119
assert.strictEqual(
120-
calc('rem(infinity, -0)'),
120+
calc('rem(infinity, calc(-1 * 0))'),
121121
'calc(NaN)',
122122
);

packages/css-calc/test/postcss-calc/tests.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ assert.strictEqual(
213213
);
214214

215215
assert.strictEqual(
216-
calc('calc(500px/-0)'),
216+
calc('calc(500px/calc(-1 * 0))'),
217217
'calc(-infinity * 1px)',
218218
);
219219

packages/css-calc/test/wpt/round-function.mjs

+12-7
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,12 @@ assert.strictEqual(
252252

253253
assert.strictEqual(
254254
calc('round(-5, infinity)'),
255-
'-0',
255+
'calc(-1 * 0)',
256256
);
257257

258258
assert.strictEqual(
259259
calc('round(-5, -infinity)'),
260-
'-0',
260+
'calc(-1 * 0)',
261261
);
262262

263263
assert.strictEqual(
@@ -272,12 +272,12 @@ assert.strictEqual(
272272

273273
assert.strictEqual(
274274
calc('round(to-zero, -5, infinity)'),
275-
'-0',
275+
'calc(-1 * 0)',
276276
);
277277

278278
assert.strictEqual(
279279
calc('round(to-zero, -5, -infinity)'),
280-
'-0',
280+
'calc(-1 * 0)',
281281
);
282282

283283
// 'up': pos goes to +inf, 0+ goes to 0+, else 0-
@@ -293,12 +293,12 @@ assert.strictEqual(
293293

294294
assert.strictEqual(
295295
calc('round(up, -1 * 0, infinity)'),
296-
'-0',
296+
'calc(-1 * 0)',
297297
);
298298

299299
assert.strictEqual(
300300
calc('round(up, -1, infinity)'),
301-
'-0',
301+
'calc(-1 * 0)',
302302
);
303303

304304
// 'down': neg goes to -inf, -0 goes to -0, else 0+
@@ -309,7 +309,12 @@ assert.strictEqual(
309309

310310
assert.strictEqual(
311311
calc('round(down, -1 * 0, infinity)'),
312-
'-0',
312+
'calc(-1 * 0)',
313+
);
314+
315+
assert.strictEqual(
316+
calc('round(down, -1 * 0px, calc(1px * infinity))'),
317+
'calc(-1 * 0px)',
313318
);
314319

315320
assert.strictEqual(

packages/css-calc/test/wpt/signs-abs-computed.mjs

+40-40
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ assert.strictEqual(
7777
);
7878

7979
assert.strictEqual(
80-
calc('calc(sign(-0))'),
81-
'-0',
80+
calc('calc(sign(calc(-1 * 0)))'),
81+
'calc(-1 * 0)',
8282
);
8383

8484
assert.strictEqual(
@@ -372,78 +372,78 @@ assert.strictEqual(
372372
);
373373

374374
assert.strictEqual(
375-
calc('sign(-0px)'),
376-
'-0',
375+
calc('sign(calc(-1 * 0px))'),
376+
'calc(-1 * 0)',
377377
);
378378

379379
assert.strictEqual(
380-
calc('sign(-0cm)'),
381-
'-0',
380+
calc('sign(calc(-1 * 0cm))'),
381+
'calc(-1 * 0)',
382382
);
383383

384384
assert.strictEqual(
385-
calc('sign(-0mm)'),
386-
'-0',
385+
calc('sign(calc(-1 * 0mm))'),
386+
'calc(-1 * 0)',
387387
);
388388

389389
assert.strictEqual(
390-
calc('sign(-0Q)'),
391-
'-0',
390+
calc('sign(calc(-1 * 0Q))'),
391+
'calc(-1 * 0)',
392392
);
393393

394394
assert.strictEqual(
395-
calc('sign(-0in)'),
396-
'-0',
395+
calc('sign(calc(-1 * 0in))'),
396+
'calc(-1 * 0)',
397397
);
398398

399399
assert.strictEqual(
400-
calc('sign(-0pc)'),
401-
'-0',
400+
calc('sign(calc(-1 * 0pc))'),
401+
'calc(-1 * 0)',
402402
);
403403

404404
assert.strictEqual(
405-
calc('sign(-0pt)'),
406-
'-0',
405+
calc('sign(calc(-1 * 0pt))'),
406+
'calc(-1 * 0)',
407407
);
408408

409409
assert.strictEqual(
410-
calc('sign(-0em)'),
411-
'-0',
410+
calc('sign(calc(-1 * 0em))'),
411+
'calc(-1 * 0)',
412412
);
413413

414414
assert.strictEqual(
415-
calc('sign(-0ex)'),
416-
'-0',
415+
calc('sign(calc(-1 * 0ex))'),
416+
'calc(-1 * 0)',
417417
);
418418

419419
assert.strictEqual(
420-
calc('sign(-0ch)'),
421-
'-0',
420+
calc('sign(calc(-1 * 0ch))'),
421+
'calc(-1 * 0)',
422422
);
423423

424424
assert.strictEqual(
425-
calc('sign(-0rem)'),
426-
'-0',
425+
calc('sign(calc(-1 * 0rem))'),
426+
'calc(-1 * 0)',
427427
);
428428

429429
assert.strictEqual(
430-
calc('sign(-0vh)'),
431-
'-0',
430+
calc('sign(calc(-1 * 0vh))'),
431+
'calc(-1 * 0)',
432432
);
433433

434434
assert.strictEqual(
435-
calc('sign(-0vw)'),
436-
'-0',
435+
calc('sign(calc(-1 * 0vw))'),
436+
'calc(-1 * 0)',
437437
);
438438

439439
assert.strictEqual(
440-
calc('sign(-0vmin)'),
441-
'-0',
440+
calc('sign(calc(-1 * 0vmin))'),
441+
'calc(-1 * 0)',
442442
);
443443

444444
assert.strictEqual(
445-
calc('sign(-0vmax)'),
446-
'-0',
445+
calc('sign(calc(-1 * 0vmax))'),
446+
'calc(-1 * 0)',
447447
);
448448

449449
assert.strictEqual(
@@ -477,23 +477,23 @@ assert.strictEqual(
477477
);
478478

479479
assert.strictEqual(
480-
calc('sign(-0deg)'),
481-
'-0',
480+
calc('sign(calc(-1 * 0deg))'),
481+
'calc(-1 * 0)',
482482
);
483483

484484
assert.strictEqual(
485-
calc('sign(-0grad)'),
486-
'-0',
485+
calc('sign(calc(-1 * 0grad))'),
486+
'calc(-1 * 0)',
487487
);
488488

489489
assert.strictEqual(
490-
calc('sign(-0rad)'),
491-
'-0',
490+
calc('sign(calc(-1 * 0rad))'),
491+
'calc(-1 * 0)',
492492
);
493493

494494
assert.strictEqual(
495-
calc('sign(-0turn)'),
496-
'-0',
495+
calc('sign(calc(-1 * 0turn))'),
496+
'calc(-1 * 0)',
497497
);
498498

499499
assert.strictEqual(

packages/css-tokenizer/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changes to CSS Tokenizer
22

3+
### Unreleased (minor)
4+
5+
- Add support for `unicode-range-token`
6+
- Add `signCharacter` to `DimensionToken`, `NumberToken` and `PercentageToken`
7+
- Correctly tokenize negative zero `-0`
8+
39
### 2.1.1
410

511
_April 10, 2023_
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { CodePointReader } from '../interfaces/code-point-reader';
2+
import { Context } from '../interfaces/context';
3+
export declare function checkIfThreeCodePointsWouldStartAUnicodeRange(ctx: Context, reader: CodePointReader): boolean;

packages/css-tokenizer/dist/code-points/code-points.d.ts

+18
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,21 @@ export declare const SHIFT_OUT = 14;
7676
export declare const SOLIDUS = 47;
7777
/** \u20 */
7878
export declare const SPACE = 32;
79+
/** u */
80+
export declare const LATIN_SMALL_LETTER_U = 117;
81+
/** U */
82+
export declare const LATIN_CAPITAL_LETTER_U = 85;
83+
/** r */
84+
export declare const LATIN_SMALL_LETTER_R = 114;
85+
/** R */
86+
export declare const LATIN_CAPITAL_LETTER_R = 82;
87+
/** l */
88+
export declare const LATIN_SMALL_LETTER_L = 108;
89+
/** L */
90+
export declare const LATIN_CAPITAL_LETTER_L = 76;
91+
/** ? */
92+
export declare const QUESTION_MARK = 63;
93+
/** 0 */
94+
export declare const DIGIT_ZERO = 48;
95+
/** F */
96+
export declare const LATIN_CAPITAL_LETTER_F = 70;

packages/css-tokenizer/dist/code-points/ranges.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export declare function isLetterCodePoint(search: number): boolean;
66
export declare function isNonASCIICodePoint(search: number): boolean;
77
export declare function isIdentStartCodePoint(search: number): boolean;
88
export declare function isIdentCodePoint(search: number): boolean;
9+
export declare function isNonASCII_IdentCodePoint(search: number): boolean;
910
export declare function isNonPrintableCodePoint(search: number): boolean;
1011
export declare function isNewLine(search: number): boolean;
1112
export declare function isWhitespace(search: number): boolean;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { CodePointReader } from '../interfaces/code-point-reader';
2+
import { Context } from '../interfaces/context';
3+
import { TokenUnicodeRange } from '../interfaces/token';
4+
export declare function consumeUnicodeRangeToken(ctx: Context, reader: CodePointReader): TokenUnicodeRange;

packages/css-tokenizer/dist/index.cjs

+1-1
Large diffs are not rendered by default.

packages/css-tokenizer/dist/index.mjs

+1-1
Large diffs are not rendered by default.

packages/css-tokenizer/dist/interfaces/code-point-reader.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ export type CodePointReader = {
33
representationEnd: number;
44
cursor: number;
55
codePointSource: Array<number>;
6+
representationIndices: Array<number>;
67
source: string;
78
advanceCodePoint(n?: number): void;
89
readCodePoint(n?: number): number | false;
910
unreadCodePoint(n?: number): void;
11+
resetRepresentation(): void;
1012
};

0 commit comments

Comments
 (0)