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 +1 -1
- package/ether-parser.js +2 -1
- package/generators/css-generator.js +49 -28
- package/lexer/ether-lexer.js +24 -4
- package/package.json +1 -1
package/cli/ether.js
CHANGED
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
|
-
|
|
1406
|
-
|
|
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
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1429
|
+
if (node.children) {
|
|
1430
|
+
for (const child of node.children) {
|
|
1431
|
+
this.generateNode(child)
|
|
1432
|
+
}
|
|
1412
1433
|
}
|
|
1413
|
-
}
|
|
1414
1434
|
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
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) {
|
package/lexer/ether-lexer.js
CHANGED
|
@@ -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
|
}
|