ether-code 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli/ether.js CHANGED
@@ -6,7 +6,7 @@ const http = require('http')
6
6
  const { EtherCompiler } = require('./compiler')
7
7
  const { Watcher } = require('./watcher')
8
8
 
9
- const VERSION = '0.4.1'
9
+ const VERSION = '0.4.3'
10
10
 
11
11
  const COLORS = {
12
12
  reset: '\x1b[0m',
package/ether-parser.js CHANGED
@@ -81,7 +81,7 @@ class EtherParser {
81
81
  expect(type) {
82
82
  const token = this.current()
83
83
  if (!token || token.type !== type) {
84
- throw new Error(`Attendu ${type}, reçu ${token ? token.type : 'EOF'}`)
84
+ throw new Error(`Attendu ${type}, reçu ${token ? token.type : 'EOF'}`)
85
85
  }
86
86
  return this.advance()
87
87
  }
@@ -306,7 +306,14 @@ class EtherParser {
306
306
  break
307
307
  }
308
308
 
309
- if (token.type === TokenType.COLON) {
309
+ if (token.type === TokenType.DOUBLE_COLON) {
310
+ this.advance()
311
+ const pseudoName = this.current()
312
+ if (pseudoName && pseudoName.type === TokenType.IDENTIFIER) {
313
+ parts.push('::' + pseudoName.value)
314
+ this.advance()
315
+ }
316
+ } else if (token.type === TokenType.COLON) {
310
317
  this.advance()
311
318
  const next = this.current()
312
319
  if (next && next.type === TokenType.COLON) {
@@ -70,6 +70,11 @@ class CSSGenerator {
70
70
  addToMap(this.propertyMap, this.i18n.zIndex)
71
71
  addToMap(this.propertyMap, this.i18n.boxShadow)
72
72
  addToMap(this.propertyMap, this.i18n.textShadow)
73
+ addToMap(this.propertyMap, this.i18n.synonymes)
74
+ addToMap(this.propertyMap, this.i18n.aliases)
75
+ addToMap(this.propertyMap, this.i18n.padding)
76
+ addToMap(this.propertyMap, this.i18n.margin)
77
+ addToMap(this.propertyMap, this.i18n.border)
73
78
 
74
79
  addToMap(this.valueMap, this.i18n.alignment)
75
80
  addToMap(this.valueMap, this.i18n.direction)
@@ -127,11 +132,11 @@ class CSSGenerator {
127
132
  return `var(--${varName})`
128
133
  })
129
134
 
130
- result = result.replace(/dégradé linéaire:\s*/gi, 'linear-gradient(')
135
+ result = result.replace(/dégradé linéaire:\s*/gi, 'linear-gradient(')
131
136
  result = result.replace(/degrade lineaire:\s*/gi, 'linear-gradient(')
132
- result = result.replace(/dégradé radial:\s*/gi, 'radial-gradient(')
137
+ result = result.replace(/dégradé radial:\s*/gi, 'radial-gradient(')
133
138
  result = result.replace(/degrade radial:\s*/gi, 'radial-gradient(')
134
- result = result.replace(/dégradé conique:\s*/gi, 'conic-gradient(')
139
+ result = result.replace(/dégradé conique:\s*/gi, 'conic-gradient(')
135
140
  result = result.replace(/degrade conique:\s*/gi, 'conic-gradient(')
136
141
 
137
142
  result = result.replace(/rgba:\s*(\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)/gi, 'rgba($1, $2, $3, $4)')
@@ -140,30 +145,30 @@ class CSSGenerator {
140
145
  result = result.replace(/hsla:\s*(\d+),\s*([\d.]+%?),\s*([\d.]+%?),\s*([\d.]+)/gi, 'hsla($1, $2, $3, $4)')
141
146
 
142
147
  result = result.replace(/flou:\s*([\d.]+\w*)/gi, 'blur($1)')
143
- result = result.replace(/luminosité:\s*([\d.]+%?)/gi, 'brightness($1)')
148
+ result = result.replace(/luminosité:\s*([\d.]+%?)/gi, 'brightness($1)')
144
149
  result = result.replace(/luminosite:\s*([\d.]+%?)/gi, 'brightness($1)')
145
150
  result = result.replace(/contraste:\s*([\d.]+%?)/gi, 'contrast($1)')
146
151
  result = result.replace(/niveaux-gris:\s*([\d.]+%?)/gi, 'grayscale($1)')
147
152
  result = result.replace(/niveaux gris:\s*([\d.]+%?)/gi, 'grayscale($1)')
148
153
  result = result.replace(/inverser:\s*([\d.]+%?)/gi, 'invert($1)')
149
154
  result = result.replace(/saturation:\s*([\d.]+%?)/gi, 'saturate($1)')
150
- result = result.replace(/sépia:\s*([\d.]+%?)/gi, 'sepia($1)')
155
+ result = result.replace(/sépia:\s*([\d.]+%?)/gi, 'sepia($1)')
151
156
  result = result.replace(/sepia:\s*([\d.]+%?)/gi, 'sepia($1)')
152
157
  result = result.replace(/teinte:\s*([\d.]+\w*)/gi, 'hue-rotate($1)')
153
158
 
154
- result = result.replace(/déplacer-y:\s*([\d.\-]+\w*)/gi, 'translateY($1)')
159
+ result = result.replace(/déplacer-y:\s*([\d.\-]+\w*)/gi, 'translateY($1)')
155
160
  result = result.replace(/deplacer-y:\s*([\d.\-]+\w*)/gi, 'translateY($1)')
156
- result = result.replace(/déplacer-x:\s*([\d.\-]+\w*)/gi, 'translateX($1)')
161
+ result = result.replace(/déplacer-x:\s*([\d.\-]+\w*)/gi, 'translateX($1)')
157
162
  result = result.replace(/deplacer-x:\s*([\d.\-]+\w*)/gi, 'translateX($1)')
158
- result = result.replace(/déplacer:\s*([\d.\-]+\w*),?\s*([\d.\-]+\w*)?/gi, (match, x, y) => {
163
+ result = result.replace(/déplacer:\s*([\d.\-]+\w*),?\s*([\d.\-]+\w*)?/gi, (match, x, y) => {
159
164
  if (y) return `translate(${x}, ${y})`
160
165
  return `translate(${x})`
161
166
  })
162
167
  result = result.replace(/rotation:\s*([\d.\-]+\w*)/gi, 'rotate($1)')
163
- result = result.replace(chelle:\s*([\d.]+)/gi, 'scale($1)')
168
+ result = result.replace(/échelle:\s*([\d.]+)/gi, 'scale($1)')
164
169
  result = result.replace(/echelle:\s*([\d.]+)/gi, 'scale($1)')
165
170
 
166
- result = result.replace(/répéter:\s*([^,]+),\s*minmax:\s*([^,]+),\s*([^\s\)]+)/gi, 'repeat($1, minmax($2, $3))')
171
+ result = result.replace(/répéter:\s*([^,]+),\s*minmax:\s*([^,]+),\s*([^\s\)]+)/gi, 'repeat($1, minmax($2, $3))')
167
172
  result = result.replace(/repeter:\s*([^,]+),\s*minmax:\s*([^,]+),\s*([^\s\)]+)/gi, 'repeat($1, minmax($2, $3))')
168
173
  result = result.replace(/minmax:\s*([^,]+),\s*([^\s\)]+)/gi, 'minmax($1, $2)')
169
174
 
@@ -226,16 +231,16 @@ class CSSGenerator {
226
231
  'aucun': 'none',
227
232
  'aucune': 'none',
228
233
  'auto': 'auto',
229
- 'hériter': 'inherit',
234
+ 'hériter': 'inherit',
230
235
  'heriter': 'inherit',
231
236
  'initial': 'initial',
232
- 'caché': 'hidden',
237
+ 'caché': 'hidden',
233
238
  'cache': 'hidden',
234
239
  'visible': 'visible',
235
- 'défiler': 'scroll',
240
+ 'défiler': 'scroll',
236
241
  'defiler': 'scroll',
237
242
  'fixe': 'fixed',
238
- 'fixée': 'fixed',
243
+ 'fixée': 'fixed',
239
244
  'fixee': 'fixed',
240
245
  'absolue': 'absolute',
241
246
  'absolu': 'absolute',
@@ -245,17 +250,17 @@ class CSSGenerator {
245
250
  'collant': 'sticky',
246
251
  'collante': 'sticky',
247
252
  'centre': 'center',
248
- 'centré': 'center',
249
- 'début': 'flex-start',
253
+ 'centré': 'center',
254
+ 'début': 'flex-start',
250
255
  'debut': 'flex-start',
251
256
  'fin': 'flex-end',
252
257
  'espace-entre': 'space-between',
253
258
  'espace entre': 'space-between',
254
259
  'espace-autour': 'space-around',
255
260
  'espace autour': 'space-around',
256
- 'espacegal': 'space-evenly',
261
+ 'espace-égal': 'space-evenly',
257
262
  'espace egal': 'space-evenly',
258
- 'étirer': 'stretch',
263
+ 'étirer': 'stretch',
259
264
  'etirer': 'stretch',
260
265
  'ligne': 'row',
261
266
  'colonne': 'column',
@@ -269,9 +274,9 @@ class CSSGenerator {
269
274
  'gras': 'bold',
270
275
  'normal': 'normal',
271
276
  'italique': 'italic',
272
- 'souligné': 'underline',
277
+ 'souligné': 'underline',
273
278
  'souligne': 'underline',
274
- 'barré': 'line-through',
279
+ 'barré': 'line-through',
275
280
  'barre': 'line-through',
276
281
  'majuscules': 'uppercase',
277
282
  'minuscules': 'lowercase',
@@ -292,14 +297,14 @@ class CSSGenerator {
292
297
  'grille': 'grid',
293
298
  'grille-en-ligne': 'inline-grid',
294
299
  'grille en ligne': 'inline-grid',
295
- 'préservé': 'pre',
300
+ 'préservé': 'pre',
296
301
  'preserve': 'pre',
297
- 'pré-ligne': 'pre-line',
302
+ 'pré-ligne': 'pre-line',
298
303
  'pre-ligne': 'pre-line',
299
- 'pré-enveloppe': 'pre-wrap',
304
+ 'pré-enveloppe': 'pre-wrap',
300
305
  'pre-enveloppe': 'pre-wrap',
301
306
  'solide': 'solid',
302
- 'pointillée': 'dotted',
307
+ 'pointillée': 'dotted',
303
308
  'pointillee': 'dotted',
304
309
  'tirets': 'dashed',
305
310
  'double': 'double',
@@ -308,7 +313,7 @@ class CSSGenerator {
308
313
  'ease-in': 'ease-in',
309
314
  'ease-out': 'ease-out',
310
315
  'ease-in-out': 'ease-in-out',
311
- 'linéaire': 'linear',
316
+ 'linéaire': 'linear',
312
317
  'lineaire': 'linear'
313
318
  }
314
319
 
@@ -354,8 +359,8 @@ class CSSGenerator {
354
359
  'espacement lettres': 'letter-spacing',
355
360
  'alignement-texte': 'text-align',
356
361
  'alignement texte': 'text-align',
357
- 'décoration-texte': 'text-decoration',
358
- 'décoration texte': 'text-decoration',
362
+ 'décoration-texte': 'text-decoration',
363
+ 'décoration texte': 'text-decoration',
359
364
  'decoration-texte': 'text-decoration',
360
365
  'decoration texte': 'text-decoration',
361
366
  'transformation-texte': 'text-transform',
@@ -411,13 +416,13 @@ class CSSGenerator {
411
416
  'droite': 'right',
412
417
  'index-z': 'z-index',
413
418
  'z-index': 'z-index',
414
- 'débordement': 'overflow',
419
+ 'débordement': 'overflow',
415
420
  'debordement': 'overflow',
416
- 'débordement-x': 'overflow-x',
421
+ 'débordement-x': 'overflow-x',
417
422
  'debordement-x': 'overflow-x',
418
- 'débordement-y': 'overflow-y',
423
+ 'débordement-y': 'overflow-y',
419
424
  'debordement-y': 'overflow-y',
420
- 'opacité': 'opacity',
425
+ 'opacité': 'opacity',
421
426
  'opacite': 'opacity',
422
427
  'curseur': 'cursor',
423
428
  'transition': 'transition',
@@ -426,13 +431,13 @@ class CSSGenerator {
426
431
  'filtre': 'filter',
427
432
  'filtre-fond': 'backdrop-filter',
428
433
  'filtre fond': 'backdrop-filter',
429
- 'ombre-boîte': 'box-shadow',
434
+ 'ombre-boîte': 'box-shadow',
430
435
  'ombre-boite': 'box-shadow',
431
- 'ombre boîte': 'box-shadow',
436
+ 'ombre boîte': 'box-shadow',
432
437
  'ombre boite': 'box-shadow',
433
- 'modèle-boîte': 'box-sizing',
438
+ 'modèle-boîte': 'box-sizing',
434
439
  'modele-boite': 'box-sizing',
435
- 'modèle boîte': 'box-sizing',
440
+ 'modèle boîte': 'box-sizing',
436
441
  'modele boite': 'box-sizing',
437
442
  'espace': 'gap',
438
443
  'espace ligne': 'row-gap',
@@ -441,9 +446,9 @@ class CSSGenerator {
441
446
  'espace-colonne': 'column-gap',
442
447
  'justifier-contenu': 'justify-content',
443
448
  'justifier contenu': 'justify-content',
444
- 'aligner-éléments': 'align-items',
449
+ 'aligner-éléments': 'align-items',
445
450
  'aligner-elements': 'align-items',
446
- 'aligner éléments': 'align-items',
451
+ 'aligner éléments': 'align-items',
447
452
  'aligner elements': 'align-items',
448
453
  'aligner-contenu': 'align-content',
449
454
  'aligner contenu': 'align-content',
@@ -460,13 +465,13 @@ class CSSGenerator {
460
465
  'style-liste': 'list-style',
461
466
  'style liste': 'list-style',
462
467
  'contenu': 'content',
463
- 'évènements-pointeur': 'pointer-events',
468
+ 'évènements-pointeur': 'pointer-events',
464
469
  'evenements-pointeur': 'pointer-events',
465
- 'évènements pointeur': 'pointer-events',
470
+ 'évènements pointeur': 'pointer-events',
466
471
  'evenements pointeur': 'pointer-events',
467
- 'découpe-fond': 'background-clip',
472
+ 'découpe-fond': 'background-clip',
468
473
  'decoupe-fond': 'background-clip',
469
- 'découpe fond': 'background-clip',
474
+ 'découpe fond': 'background-clip',
470
475
  'decoupe fond': 'background-clip',
471
476
  'couleur-remplissage-texte': '-webkit-text-fill-color',
472
477
  'couleur remplissage texte': '-webkit-text-fill-color',
@@ -484,7 +489,7 @@ class CSSGenerator {
484
489
  'justifier': 'justify-content',
485
490
  'aligner': 'align-items',
486
491
  'visibilite': 'visibility',
487
- 'visibilité': 'visibility',
492
+ 'visibilité': 'visibility',
488
493
  'redimensionnement': 'resize',
489
494
  'apparence': 'appearance',
490
495
  'contour': 'outline'
@@ -499,31 +504,31 @@ class CSSGenerator {
499
504
 
500
505
  result = result.replace(/:racine\b/gi, ':root')
501
506
  result = result.replace(/::avant\b/gi, '::before')
502
- result = result.replace(/::après\b/gi, '::after')
507
+ result = result.replace(/::après\b/gi, '::after')
503
508
  result = result.replace(/::apres\b/gi, '::after')
504
- result = result.replace(/::première-lettre\b/gi, '::first-letter')
509
+ result = result.replace(/::première-lettre\b/gi, '::first-letter')
505
510
  result = result.replace(/::premiere-lettre\b/gi, '::first-letter')
506
- result = result.replace(/::première-ligne\b/gi, '::first-line')
511
+ result = result.replace(/::première-ligne\b/gi, '::first-line')
507
512
  result = result.replace(/::premiere-ligne\b/gi, '::first-line')
508
- result = result.replace(/::sélection\b/gi, '::selection')
513
+ result = result.replace(/::sélection\b/gi, '::selection')
509
514
  result = result.replace(/::selection\b/gi, '::selection')
510
515
  result = result.replace(/::marqueur\b/gi, '::marker')
511
516
 
512
517
  result = result.replace(/\bau survol\b/gi, ':hover')
513
- result = result.replace(/\bquand survolé\b/gi, ':hover')
518
+ result = result.replace(/\bquand survolé\b/gi, ':hover')
514
519
  result = result.replace(/\bquand survole\b/gi, ':hover')
515
520
  result = result.replace(/\ben survol\b/gi, ':hover')
516
521
  result = result.replace(/\bau clic\b/gi, ':active')
517
- result = result.replace(/\bquand cliqué\b/gi, ':active')
522
+ result = result.replace(/\bquand cliqué\b/gi, ':active')
518
523
  result = result.replace(/\bquand clique\b/gi, ':active')
519
524
  result = result.replace(/\ben clic\b/gi, ':active')
520
525
  result = result.replace(/\bactif\b/gi, ':active')
521
526
  result = result.replace(/\bau focus\b/gi, ':focus')
522
- result = result.replace(/\bquand focalisé\b/gi, ':focus')
527
+ result = result.replace(/\bquand focalisé\b/gi, ':focus')
523
528
  result = result.replace(/\bquand focalise\b/gi, ':focus')
524
529
  result = result.replace(/\ben focus\b/gi, ':focus')
525
530
  result = result.replace(/\bau focus dans\b/gi, ':focus-within')
526
- result = result.replace(/\bvisité\b/gi, ':visited')
531
+ result = result.replace(/\bvisité\b/gi, ':visited')
527
532
  result = result.replace(/\bvisite\b/gi, ':visited')
528
533
 
529
534
  result = result.replace(/\s+(:hover|:active|:focus|:focus-within|:visited|:checked|:disabled|:enabled|:required|:optional|:valid|:invalid|:empty|:target)/gi, '$1')
@@ -537,18 +542,18 @@ class CSSGenerator {
537
542
  result = result.replace(/\bunique de type\b/gi, ':only-of-type')
538
543
  result = result.replace(/\bvide\b/gi, ':empty')
539
544
  result = result.replace(/\bcible\b/gi, ':target')
540
- result = result.replace(/\bcoché\b/gi, ':checked')
545
+ result = result.replace(/\bcoché\b/gi, ':checked')
541
546
  result = result.replace(/\bcoche\b/gi, ':checked')
542
- result = result.replace(/\bdésactivé\b/gi, ':disabled')
547
+ result = result.replace(/\bdésactivé\b/gi, ':disabled')
543
548
  result = result.replace(/\bdesactive\b/gi, ':disabled')
544
- result = result.replace(/\bactivé\b/gi, ':enabled')
549
+ result = result.replace(/\bactivé\b/gi, ':enabled')
545
550
  result = result.replace(/\brequis\b/gi, ':required')
546
551
  result = result.replace(/\boptionnel\b/gi, ':optional')
547
552
  result = result.replace(/\bvalide\b/gi, ':valid')
548
553
  result = result.replace(/\binvalide\b/gi, ':invalid')
549
554
 
550
555
  result = result.replace(/\bcorps\b/gi, 'body')
551
- result = result.replace(/\btête\b/gi, 'head')
556
+ result = result.replace(/\btête\b/gi, 'head')
552
557
  result = result.replace(/\btete\b/gi, 'head')
553
558
  result = result.replace(/\btitre1\b/gi, 'h1')
554
559
  result = result.replace(/\btitre2\b/gi, 'h2')
@@ -563,24 +568,24 @@ class CSSGenerator {
563
568
  result = result.replace(/\bformulaire\b/gi, 'form')
564
569
  result = result.replace(/\bchamp\b/gi, 'input')
565
570
  result = result.replace(/\bliste\b/gi, 'ul')
566
- result = result.replace(/\bliste-ordonnée\b/gi, 'ol')
571
+ result = result.replace(/\bliste-ordonnée\b/gi, 'ol')
567
572
  result = result.replace(/\bliste-ordonnee\b/gi, 'ol')
568
- result = result.replace(/\bélément-liste\b/gi, 'li')
573
+ result = result.replace(/\bélément-liste\b/gi, 'li')
569
574
  result = result.replace(/\belement-liste\b/gi, 'li')
570
575
  result = result.replace(/\btableau\b/gi, 'table')
571
576
  result = result.replace(/\bligne-tableau\b/gi, 'tr')
572
577
  result = result.replace(/\bcellule\b/gi, 'td')
573
- result = result.replace(/\bentête\b/gi, 'header')
578
+ result = result.replace(/\bentête\b/gi, 'header')
574
579
  result = result.replace(/\bentete\b/gi, 'header')
575
580
  result = result.replace(/\bpied\b/gi, 'footer')
576
581
  result = result.replace(/\bnavigation\b/gi, 'nav')
577
582
  result = result.replace(/\bsection\b/gi, 'section')
578
583
  result = result.replace(/\barticle\b/gi, 'article')
579
- result = result.replace(/\bcôté\b/gi, 'aside')
584
+ result = result.replace(/\bcôté\b/gi, 'aside')
580
585
  result = result.replace(/\bcote\b/gi, 'aside')
581
586
  result = result.replace(/\bprincipal\b/gi, 'main')
582
587
  result = result.replace(/\bdivision\b/gi, 'div')
583
- result = result.replace(/\bportée\b/gi, 'span')
588
+ result = result.replace(/\bportée\b/gi, 'span')
584
589
  result = result.replace(/\bportee\b/gi, 'span')
585
590
 
586
591
  return result
@@ -839,7 +844,7 @@ class CSSGenerator {
839
844
  translateMediaQuery(query) {
840
845
  let result = query
841
846
 
842
- result = result.replace(cran/gi, 'screen')
847
+ result = result.replace(/écran/gi, 'screen')
843
848
  result = result.replace(/ecran/gi, 'screen')
844
849
  result = result.replace(/imprimante/gi, 'print')
845
850
  result = result.replace(/tous/gi, 'all')
@@ -871,9 +876,9 @@ class CSSGenerator {
871
876
 
872
877
  const plusPetitMatch = condition.match(/plus petit que\s+([\d.]+\w*)/i)
873
878
  const plusGrandMatch = condition.match(/plus grand que\s+([\d.]+\w*)/i)
874
- const inferieurMatch = condition.match(/inférieur[e]?\s+à\s+([\d.]+\w*)/i) || condition.match(/inferieur[e]?\s+a\s+([\d.]+\w*)/i)
875
- const superieurMatch = condition.match(/supérieur[e]?\s+à\s+([\d.]+\w*)/i) || condition.match(/superieur[e]?\s+a\s+([\d.]+\w*)/i)
876
- const egalMatch = condition.match(gal[e]?\s+à\s+([\d.]+\w*)/i) || condition.match(/egal[e]?\s+a\s+([\d.]+\w*)/i)
879
+ const inferieurMatch = condition.match(/inférieur[e]?\s+à\s+([\d.]+\w*)/i) || condition.match(/inferieur[e]?\s+a\s+([\d.]+\w*)/i)
880
+ const superieurMatch = condition.match(/supérieur[e]?\s+à\s+([\d.]+\w*)/i) || condition.match(/superieur[e]?\s+a\s+([\d.]+\w*)/i)
881
+ const egalMatch = condition.match(/égal[e]?\s+à\s+([\d.]+\w*)/i) || condition.match(/egal[e]?\s+a\s+([\d.]+\w*)/i)
877
882
  const simpleInfMatch = condition.match(/<\s*([\d.]+\w*)/i)
878
883
  const simpleSupMatch = condition.match(/>\s*([\d.]+\w*)/i)
879
884