ether-code 0.5.7 → 0.5.9

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.5.7'
9
+ const VERSION = '0.5.9'
10
10
 
11
11
  const COLORS = {
12
12
  reset: '\x1b[0m',
package/ether-parser.js CHANGED
@@ -719,7 +719,8 @@ class EtherParser {
719
719
  'filtre': ['fond'],
720
720
  'decoupe': ['fond'],
721
721
  'découpe': ['fond'],
722
- 'origine': ['transformation', 'perspective']
722
+ 'origine': ['transformation', 'perspective'],
723
+ 'liste': ['style', 'ordonnee', 'description']
723
724
  }
724
725
 
725
726
  let property = token.value
@@ -112,6 +112,13 @@ class CSSGenerator {
112
112
  const priorityMap = {
113
113
  'contenu': 'content',
114
114
  'contenus': 'content',
115
+ 'transformer': 'transform',
116
+ 'decalage-contour': 'outline-offset',
117
+ 'décalage-contour': 'outline-offset',
118
+ 'decalage contour': 'outline-offset',
119
+ 'décalage contour': 'outline-offset',
120
+ 'contour-decalage': 'outline-offset',
121
+ 'contour-décalage': 'outline-offset',
115
122
  'famille-police': 'font-family',
116
123
  'famille police': 'font-family',
117
124
  'police-famille': 'font-family',
@@ -1166,6 +1173,12 @@ class CSSGenerator {
1166
1173
 
1167
1174
  translateSelector(selector) {
1168
1175
  let result = selector
1176
+
1177
+ const preserved = []
1178
+ result = result.replace(/([.#][a-zA-Z_\u00C0-\u024F][a-zA-Z0-9_\u00C0-\u024F-]*)/g, (match) => {
1179
+ preserved.push(match)
1180
+ return `__PRESERVED_${preserved.length - 1}__`
1181
+ })
1169
1182
 
1170
1183
  result = result.replace(/:racine\b/gi, ':root')
1171
1184
  result = result.replace(/::avant\b/gi, '::before')
@@ -1217,21 +1230,6 @@ class CSSGenerator {
1217
1230
  result = result.replace(/\bvalide\b/gi, ':valid')
1218
1231
  result = result.replace(/\binvalide\b/gi, ':invalid')
1219
1232
 
1220
- result = result.replace(/\bcorps\b/gi, 'body')
1221
- result = result.replace(/\btête\b/gi, 'head')
1222
- result = result.replace(/\btete\b/gi, 'head')
1223
- result = result.replace(/\btitre1\b/gi, 'h1')
1224
- result = result.replace(/\btitre2\b/gi, 'h2')
1225
- result = result.replace(/\btitre3\b/gi, 'h3')
1226
- result = result.replace(/\btitre4\b/gi, 'h4')
1227
- result = result.replace(/\btitre5\b/gi, 'h5')
1228
- result = result.replace(/\btitre6\b/gi, 'h6')
1229
- result = result.replace(/\bparagraphe\b/gi, 'p')
1230
- result = result.replace(/\blien\b/gi, 'a')
1231
- result = result.replace(/\bimage\b/gi, 'img')
1232
- result = result.replace(/\bbouton\b/gi, 'button')
1233
- result = result.replace(/\bformulaire\b/gi, 'form')
1234
- result = result.replace(/\bchamp\b/gi, 'input')
1235
1233
  result = result.replace(/\bliste ordonnée\b/gi, 'ol')
1236
1234
  result = result.replace(/\bliste ordonnee\b/gi, 'ol')
1237
1235
  result = result.replace(/\bliste description\b/gi, 'dl')
@@ -1249,6 +1247,22 @@ class CSSGenerator {
1249
1247
  result = result.replace(/\bpied tableau\b/gi, 'tfoot')
1250
1248
  result = result.replace(/\blégende figure\b/gi, 'figcaption')
1251
1249
  result = result.replace(/\blegende figure\b/gi, 'figcaption')
1250
+
1251
+ result = result.replace(/\bcorps\b/gi, 'body')
1252
+ result = result.replace(/\btête\b/gi, 'head')
1253
+ result = result.replace(/\btete\b/gi, 'head')
1254
+ result = result.replace(/\btitre1\b/gi, 'h1')
1255
+ result = result.replace(/\btitre2\b/gi, 'h2')
1256
+ result = result.replace(/\btitre3\b/gi, 'h3')
1257
+ result = result.replace(/\btitre4\b/gi, 'h4')
1258
+ result = result.replace(/\btitre5\b/gi, 'h5')
1259
+ result = result.replace(/\btitre6\b/gi, 'h6')
1260
+ result = result.replace(/\bparagraphe\b/gi, 'p')
1261
+ result = result.replace(/\blien\b/gi, 'a')
1262
+ result = result.replace(/\bimage\b/gi, 'img')
1263
+ result = result.replace(/\bbouton\b/gi, 'button')
1264
+ result = result.replace(/\bformulaire\b/gi, 'form')
1265
+ result = result.replace(/\bchamp\b/gi, 'input')
1252
1266
  result = result.replace(/\bliste\b/gi, 'ul')
1253
1267
  result = result.replace(/\bliste-ordonnée\b/gi, 'ol')
1254
1268
  result = result.replace(/\bliste-ordonnee\b/gi, 'ol')
@@ -1287,6 +1301,10 @@ class CSSGenerator {
1287
1301
  result = result.replace(/\bfigure\b/gi, 'figure')
1288
1302
  result = result.replace(/\bligne\b/gi, 'tr')
1289
1303
 
1304
+ for (let i = 0; i < preserved.length; i++) {
1305
+ result = result.replace(`__PRESERVED_${i}__`, preserved[i])
1306
+ }
1307
+
1290
1308
  return result
1291
1309
  }
1292
1310
 
@@ -1398,23 +1416,26 @@ class CSSGenerator {
1398
1416
  const translatedSelectors = selectors.map(s => this.translateSelector(s))
1399
1417
  const isRoot = translatedSelectors.some(s => s === ':root')
1400
1418
 
1401
- this.writeLine(`${translatedSelectors.join(', ')} {`)
1402
- this.indent++
1403
-
1404
1419
  const declarations = node.declarations || node.properties || []
1405
- for (const decl of declarations) {
1406
- this.generateDeclaration(decl, isRoot)
1407
- }
1420
+
1421
+ if (declarations.length > 0 || node.children) {
1422
+ this.writeLine(`${translatedSelectors.join(', ')} {`)
1423
+ this.indent++
1424
+
1425
+ for (const decl of declarations) {
1426
+ this.generateDeclaration(decl, isRoot)
1427
+ }
1408
1428
 
1409
- if (node.children) {
1410
- for (const child of node.children) {
1411
- this.generateNode(child)
1429
+ if (node.children) {
1430
+ for (const child of node.children) {
1431
+ this.generateNode(child)
1432
+ }
1412
1433
  }
1413
- }
1414
1434
 
1415
- this.indent--
1416
- this.writeLine('}')
1417
- this.writeLine('')
1435
+ this.indent--
1436
+ this.writeLine('}')
1437
+ this.writeLine('')
1438
+ }
1418
1439
 
1419
1440
  if (node.nestedRules) {
1420
1441
  for (const nested of node.nestedRules) {
@@ -688,7 +688,7 @@ class EtherLexer {
688
688
  const normalized = this.normalizeAccents(phrase)
689
689
  const compounds = [
690
690
  'en ligne', 'hors ligne', 'au survol', 'au clic', 'au focus',
691
- 'au double clic', 'au changement', 'a la soumission',
691
+ 'au double clic', 'au changement', 'a la soumission',
692
692
  'retour a la ligne', 'lecture seule', 'zone texte',
693
693
  'case a cocher', 'bouton radio', 'premiere lettre',
694
694
  'premiere ligne', 'inferieur ou egal',
@@ -698,12 +698,32 @@ class EtherLexer {
698
698
  'droite a gauche',
699
699
  'definir defaut', 'mettre a jour',
700
700
  'cle primaire', 'cle etrangere',
701
- 'non nul', 'par defaut',
701
+ 'non nul', 'par defaut',
702
702
  'au focus dans', 'pointeur bas', 'pointeur haut',
703
703
  'obtenir contenu', 'erreur type', 'erreur syntaxe',
704
704
  'nettoyer gauche', 'nettoyer droite', 'vers date',
705
- 'si null', 'creer role',
706
- 'a la reinitialisation'
705
+ 'si null', 'creer role',
706
+ 'a la reinitialisation',
707
+ 'liste ordonnee', 'liste description',
708
+ 'ligne horizontale', 'citation bloc',
709
+ 'groupe champs', 'cellule entete',
710
+ 'entete tableau', 'corps tableau', 'pied tableau',
711
+ 'legende figure', 'decalage contour',
712
+ 'ombre boite', 'ombre texte',
713
+ 'bordure rayon', 'largeur max', 'largeur min',
714
+ 'hauteur max', 'hauteur min',
715
+ 'taille police', 'poids police', 'style police',
716
+ 'famille police', 'hauteur ligne',
717
+ 'alignement texte', 'decoration texte', 'transformation texte',
718
+ 'direction flex', 'enveloppe flex',
719
+ 'justifier contenu', 'aligner elements',
720
+ 'colonnes grille', 'lignes grille',
721
+ 'style liste', 'type liste',
722
+ 'couleur fond', 'image fond', 'position fond', 'taille fond',
723
+ 'couleur bordure', 'style bordure', 'largeur bordure',
724
+ 'espacement lettres', 'espacement mots',
725
+ 'espace blanc', 'debordement texte',
726
+ 'flou fond', 'filtre fond'
707
727
  ]
708
728
  return compounds.includes(normalized)
709
729
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ether-code",
3
- "version": "0.5.7",
3
+ "version": "0.5.9",
4
4
  "description": "Ether - Le langage intentionnel",
5
5
  "main": "cli/compiler.js",
6
6
  "bin": {