ether-code 0.6.1 → 0.6.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 +1 -1
- package/ether-parser.js +112 -50
- package/generators/html-generator.js +498 -234
- package/i18n/i18n-html.json +399 -0
- package/lexer/ether-lexer.js +15 -10
- package/package.json +1 -1
package/i18n/i18n-html.json
CHANGED
|
@@ -2406,5 +2406,404 @@
|
|
|
2406
2406
|
"nouvelleFenetreNat": { "fr": "nouvelle fenêtre", "en": "new window", "es": "nueva ventana", "ru": "новое окно", "zh": "新窗口", "ja": "新しいウィンドウ" },
|
|
2407
2407
|
"champTexte": { "fr": "champ texte", "en": "text field", "es": "campo texto", "ru": "текстовое поле", "zh": "文本字段", "ja": "テキストフィールド" },
|
|
2408
2408
|
"page": { "fr": "page", "en": "page", "es": "página", "ru": "страница", "zh": "页面", "ja": "ページ" }
|
|
2409
|
+
},
|
|
2410
|
+
"metaAttributes": {
|
|
2411
|
+
"charset": {
|
|
2412
|
+
"fr": "jeu caractères",
|
|
2413
|
+
"en": "charset",
|
|
2414
|
+
"es": "juego caracteres",
|
|
2415
|
+
"ru": "кодировка",
|
|
2416
|
+
"zh": "字符集",
|
|
2417
|
+
"ja": "文字セット",
|
|
2418
|
+
"html": "charset"
|
|
2419
|
+
},
|
|
2420
|
+
"contenu": {
|
|
2421
|
+
"fr": "contenu",
|
|
2422
|
+
"en": "content",
|
|
2423
|
+
"es": "contenido",
|
|
2424
|
+
"ru": "содержимое",
|
|
2425
|
+
"zh": "内容",
|
|
2426
|
+
"ja": "コンテンツ",
|
|
2427
|
+
"html": "content"
|
|
2428
|
+
},
|
|
2429
|
+
"httpEquiv": {
|
|
2430
|
+
"fr": "équivalent http",
|
|
2431
|
+
"en": "http-equiv",
|
|
2432
|
+
"es": "equivalente http",
|
|
2433
|
+
"ru": "http-equiv",
|
|
2434
|
+
"zh": "http等效",
|
|
2435
|
+
"ja": "http-equiv",
|
|
2436
|
+
"html": "http-equiv"
|
|
2437
|
+
},
|
|
2438
|
+
"nomMeta": {
|
|
2439
|
+
"fr": "nom",
|
|
2440
|
+
"en": "name",
|
|
2441
|
+
"es": "nombre",
|
|
2442
|
+
"ru": "имя",
|
|
2443
|
+
"zh": "名称",
|
|
2444
|
+
"ja": "名前",
|
|
2445
|
+
"html": "name"
|
|
2446
|
+
}
|
|
2447
|
+
},
|
|
2448
|
+
"scriptAttributes": {
|
|
2449
|
+
"differe": {
|
|
2450
|
+
"fr": "différé",
|
|
2451
|
+
"en": "defer",
|
|
2452
|
+
"es": "diferido",
|
|
2453
|
+
"ru": "отложенный",
|
|
2454
|
+
"zh": "延迟",
|
|
2455
|
+
"ja": "遅延",
|
|
2456
|
+
"html": "defer"
|
|
2457
|
+
},
|
|
2458
|
+
"asynchrone": {
|
|
2459
|
+
"fr": "asynchrone",
|
|
2460
|
+
"en": "async",
|
|
2461
|
+
"es": "asíncrono",
|
|
2462
|
+
"ru": "асинхронный",
|
|
2463
|
+
"zh": "异步",
|
|
2464
|
+
"ja": "非同期",
|
|
2465
|
+
"html": "async"
|
|
2466
|
+
},
|
|
2467
|
+
"srcScript": {
|
|
2468
|
+
"fr": "source",
|
|
2469
|
+
"en": "src",
|
|
2470
|
+
"es": "fuente",
|
|
2471
|
+
"ru": "источник",
|
|
2472
|
+
"zh": "源",
|
|
2473
|
+
"ja": "ソース",
|
|
2474
|
+
"html": "src"
|
|
2475
|
+
},
|
|
2476
|
+
"typeScript": {
|
|
2477
|
+
"fr": "type",
|
|
2478
|
+
"en": "type",
|
|
2479
|
+
"es": "tipo",
|
|
2480
|
+
"ru": "тип",
|
|
2481
|
+
"zh": "类型",
|
|
2482
|
+
"ja": "タイプ",
|
|
2483
|
+
"html": "type"
|
|
2484
|
+
},
|
|
2485
|
+
"module": {
|
|
2486
|
+
"fr": "module",
|
|
2487
|
+
"en": "module",
|
|
2488
|
+
"es": "módulo",
|
|
2489
|
+
"ru": "модуль",
|
|
2490
|
+
"zh": "模块",
|
|
2491
|
+
"ja": "モジュール",
|
|
2492
|
+
"html": "module"
|
|
2493
|
+
},
|
|
2494
|
+
"nomodule": {
|
|
2495
|
+
"fr": "sans module",
|
|
2496
|
+
"en": "nomodule",
|
|
2497
|
+
"es": "sin módulo",
|
|
2498
|
+
"ru": "без модуля",
|
|
2499
|
+
"zh": "无模块",
|
|
2500
|
+
"ja": "モジュールなし",
|
|
2501
|
+
"html": "nomodule"
|
|
2502
|
+
},
|
|
2503
|
+
"integrite": {
|
|
2504
|
+
"fr": "intégrité",
|
|
2505
|
+
"en": "integrity",
|
|
2506
|
+
"es": "integridad",
|
|
2507
|
+
"ru": "целостность",
|
|
2508
|
+
"zh": "完整性",
|
|
2509
|
+
"ja": "整合性",
|
|
2510
|
+
"html": "integrity"
|
|
2511
|
+
},
|
|
2512
|
+
"crossorigin": {
|
|
2513
|
+
"fr": "origine croisée",
|
|
2514
|
+
"en": "crossorigin",
|
|
2515
|
+
"es": "origen cruzado",
|
|
2516
|
+
"ru": "кросс-домен",
|
|
2517
|
+
"zh": "跨域",
|
|
2518
|
+
"ja": "クロスオリジン",
|
|
2519
|
+
"html": "crossorigin"
|
|
2520
|
+
}
|
|
2521
|
+
},
|
|
2522
|
+
"tableAttributes": {
|
|
2523
|
+
"portee": {
|
|
2524
|
+
"fr": "portée",
|
|
2525
|
+
"en": "scope",
|
|
2526
|
+
"es": "ámbito",
|
|
2527
|
+
"ru": "область",
|
|
2528
|
+
"zh": "范围",
|
|
2529
|
+
"ja": "スコープ",
|
|
2530
|
+
"html": "scope"
|
|
2531
|
+
},
|
|
2532
|
+
"porteeCol": {
|
|
2533
|
+
"fr": "col",
|
|
2534
|
+
"en": "col",
|
|
2535
|
+
"es": "col",
|
|
2536
|
+
"ru": "col",
|
|
2537
|
+
"zh": "col",
|
|
2538
|
+
"ja": "col",
|
|
2539
|
+
"html": "col"
|
|
2540
|
+
},
|
|
2541
|
+
"porteeRow": {
|
|
2542
|
+
"fr": "ligne",
|
|
2543
|
+
"en": "row",
|
|
2544
|
+
"es": "fila",
|
|
2545
|
+
"ru": "строка",
|
|
2546
|
+
"zh": "行",
|
|
2547
|
+
"ja": "行",
|
|
2548
|
+
"html": "row"
|
|
2549
|
+
},
|
|
2550
|
+
"porteeColgroup": {
|
|
2551
|
+
"fr": "groupe colonnes",
|
|
2552
|
+
"en": "colgroup",
|
|
2553
|
+
"es": "grupo columnas",
|
|
2554
|
+
"ru": "группа колонок",
|
|
2555
|
+
"zh": "列组",
|
|
2556
|
+
"ja": "列グループ",
|
|
2557
|
+
"html": "colgroup"
|
|
2558
|
+
},
|
|
2559
|
+
"porteeRowgroup": {
|
|
2560
|
+
"fr": "groupe lignes",
|
|
2561
|
+
"en": "rowgroup",
|
|
2562
|
+
"es": "grupo filas",
|
|
2563
|
+
"ru": "группа строк",
|
|
2564
|
+
"zh": "行组",
|
|
2565
|
+
"ja": "行グループ",
|
|
2566
|
+
"html": "rowgroup"
|
|
2567
|
+
},
|
|
2568
|
+
"fusionColonnes": {
|
|
2569
|
+
"fr": "fusion colonnes",
|
|
2570
|
+
"en": "colspan",
|
|
2571
|
+
"es": "fusión columnas",
|
|
2572
|
+
"ru": "объединение колонок",
|
|
2573
|
+
"zh": "跨列",
|
|
2574
|
+
"ja": "列の結合",
|
|
2575
|
+
"html": "colspan"
|
|
2576
|
+
},
|
|
2577
|
+
"fusionLignes": {
|
|
2578
|
+
"fr": "fusion lignes",
|
|
2579
|
+
"en": "rowspan",
|
|
2580
|
+
"es": "fusión filas",
|
|
2581
|
+
"ru": "объединение строк",
|
|
2582
|
+
"zh": "跨行",
|
|
2583
|
+
"ja": "行の結合",
|
|
2584
|
+
"html": "rowspan"
|
|
2585
|
+
},
|
|
2586
|
+
"etendueCol": {
|
|
2587
|
+
"fr": "étendue",
|
|
2588
|
+
"en": "span",
|
|
2589
|
+
"es": "extensión",
|
|
2590
|
+
"ru": "охват",
|
|
2591
|
+
"zh": "跨度",
|
|
2592
|
+
"ja": "スパン",
|
|
2593
|
+
"html": "span"
|
|
2594
|
+
},
|
|
2595
|
+
"headers": {
|
|
2596
|
+
"fr": "entêtes",
|
|
2597
|
+
"en": "headers",
|
|
2598
|
+
"es": "encabezados",
|
|
2599
|
+
"ru": "заголовки",
|
|
2600
|
+
"zh": "标题",
|
|
2601
|
+
"ja": "ヘッダー",
|
|
2602
|
+
"html": "headers"
|
|
2603
|
+
}
|
|
2604
|
+
},
|
|
2605
|
+
"iframeAttributes": {
|
|
2606
|
+
"srcIframe": {
|
|
2607
|
+
"fr": "source",
|
|
2608
|
+
"en": "src",
|
|
2609
|
+
"es": "fuente",
|
|
2610
|
+
"ru": "источник",
|
|
2611
|
+
"zh": "源",
|
|
2612
|
+
"ja": "ソース",
|
|
2613
|
+
"html": "src"
|
|
2614
|
+
},
|
|
2615
|
+
"allow": {
|
|
2616
|
+
"fr": "autoriser",
|
|
2617
|
+
"en": "allow",
|
|
2618
|
+
"es": "permitir",
|
|
2619
|
+
"ru": "разрешить",
|
|
2620
|
+
"zh": "允许",
|
|
2621
|
+
"ja": "許可",
|
|
2622
|
+
"html": "allow"
|
|
2623
|
+
},
|
|
2624
|
+
"allowfullscreen": {
|
|
2625
|
+
"fr": "plein écran",
|
|
2626
|
+
"en": "allowfullscreen",
|
|
2627
|
+
"es": "pantalla completa",
|
|
2628
|
+
"ru": "полный экран",
|
|
2629
|
+
"zh": "全屏",
|
|
2630
|
+
"ja": "フルスクリーン",
|
|
2631
|
+
"html": "allowfullscreen"
|
|
2632
|
+
},
|
|
2633
|
+
"sandbox": {
|
|
2634
|
+
"fr": "bac à sable",
|
|
2635
|
+
"en": "sandbox",
|
|
2636
|
+
"es": "sandbox",
|
|
2637
|
+
"ru": "песочница",
|
|
2638
|
+
"zh": "沙盒",
|
|
2639
|
+
"ja": "サンドボックス",
|
|
2640
|
+
"html": "sandbox"
|
|
2641
|
+
},
|
|
2642
|
+
"loading": {
|
|
2643
|
+
"fr": "chargement",
|
|
2644
|
+
"en": "loading",
|
|
2645
|
+
"es": "carga",
|
|
2646
|
+
"ru": "загрузка",
|
|
2647
|
+
"zh": "加载",
|
|
2648
|
+
"ja": "ロード",
|
|
2649
|
+
"html": "loading"
|
|
2650
|
+
},
|
|
2651
|
+
"name": {
|
|
2652
|
+
"fr": "nom",
|
|
2653
|
+
"en": "name",
|
|
2654
|
+
"es": "nombre",
|
|
2655
|
+
"ru": "имя",
|
|
2656
|
+
"zh": "名称",
|
|
2657
|
+
"ja": "名前",
|
|
2658
|
+
"html": "name"
|
|
2659
|
+
},
|
|
2660
|
+
"referrerpolicy": {
|
|
2661
|
+
"fr": "politique référent",
|
|
2662
|
+
"en": "referrerpolicy",
|
|
2663
|
+
"es": "política referente",
|
|
2664
|
+
"ru": "политика реферера",
|
|
2665
|
+
"zh": "引荐策略",
|
|
2666
|
+
"ja": "リファラーポリシー",
|
|
2667
|
+
"html": "referrerpolicy"
|
|
2668
|
+
},
|
|
2669
|
+
"srcdoc": {
|
|
2670
|
+
"fr": "document source",
|
|
2671
|
+
"en": "srcdoc",
|
|
2672
|
+
"es": "documento fuente",
|
|
2673
|
+
"ru": "исходный документ",
|
|
2674
|
+
"zh": "源文档",
|
|
2675
|
+
"ja": "ソースドキュメント",
|
|
2676
|
+
"html": "srcdoc"
|
|
2677
|
+
}
|
|
2678
|
+
},
|
|
2679
|
+
"objectAttributes": {
|
|
2680
|
+
"donneesObjet": {
|
|
2681
|
+
"fr": "données",
|
|
2682
|
+
"en": "data",
|
|
2683
|
+
"es": "datos",
|
|
2684
|
+
"ru": "данные",
|
|
2685
|
+
"zh": "数据",
|
|
2686
|
+
"ja": "データ",
|
|
2687
|
+
"html": "data"
|
|
2688
|
+
},
|
|
2689
|
+
"typeObjet": {
|
|
2690
|
+
"fr": "type",
|
|
2691
|
+
"en": "type",
|
|
2692
|
+
"es": "tipo",
|
|
2693
|
+
"ru": "тип",
|
|
2694
|
+
"zh": "类型",
|
|
2695
|
+
"ja": "タイプ",
|
|
2696
|
+
"html": "type"
|
|
2697
|
+
},
|
|
2698
|
+
"nomObjet": {
|
|
2699
|
+
"fr": "nom",
|
|
2700
|
+
"en": "name",
|
|
2701
|
+
"es": "nombre",
|
|
2702
|
+
"ru": "имя",
|
|
2703
|
+
"zh": "名称",
|
|
2704
|
+
"ja": "名前",
|
|
2705
|
+
"html": "name"
|
|
2706
|
+
},
|
|
2707
|
+
"usemap": {
|
|
2708
|
+
"fr": "carte",
|
|
2709
|
+
"en": "usemap",
|
|
2710
|
+
"es": "mapa",
|
|
2711
|
+
"ru": "карта",
|
|
2712
|
+
"zh": "地图",
|
|
2713
|
+
"ja": "マップ",
|
|
2714
|
+
"html": "usemap"
|
|
2715
|
+
},
|
|
2716
|
+
"form": {
|
|
2717
|
+
"fr": "formulaire",
|
|
2718
|
+
"en": "form",
|
|
2719
|
+
"es": "formulario",
|
|
2720
|
+
"ru": "форма",
|
|
2721
|
+
"zh": "表单",
|
|
2722
|
+
"ja": "フォーム",
|
|
2723
|
+
"html": "form"
|
|
2724
|
+
}
|
|
2725
|
+
},
|
|
2726
|
+
"areaAttributes": {
|
|
2727
|
+
"forme": {
|
|
2728
|
+
"fr": "forme",
|
|
2729
|
+
"en": "shape",
|
|
2730
|
+
"es": "forma",
|
|
2731
|
+
"ru": "форма",
|
|
2732
|
+
"zh": "形状",
|
|
2733
|
+
"ja": "形状",
|
|
2734
|
+
"html": "shape"
|
|
2735
|
+
},
|
|
2736
|
+
"rect": {
|
|
2737
|
+
"fr": "rectangle",
|
|
2738
|
+
"en": "rect",
|
|
2739
|
+
"es": "rectángulo",
|
|
2740
|
+
"ru": "прямоугольник",
|
|
2741
|
+
"zh": "矩形",
|
|
2742
|
+
"ja": "長方形",
|
|
2743
|
+
"html": "rect"
|
|
2744
|
+
},
|
|
2745
|
+
"circle": {
|
|
2746
|
+
"fr": "cercle",
|
|
2747
|
+
"en": "circle",
|
|
2748
|
+
"es": "círculo",
|
|
2749
|
+
"ru": "круг",
|
|
2750
|
+
"zh": "圆形",
|
|
2751
|
+
"ja": "円",
|
|
2752
|
+
"html": "circle"
|
|
2753
|
+
},
|
|
2754
|
+
"poly": {
|
|
2755
|
+
"fr": "polygone",
|
|
2756
|
+
"en": "poly",
|
|
2757
|
+
"es": "polígono",
|
|
2758
|
+
"ru": "многоугольник",
|
|
2759
|
+
"zh": "多边形",
|
|
2760
|
+
"ja": "ポリゴン",
|
|
2761
|
+
"html": "poly"
|
|
2762
|
+
},
|
|
2763
|
+
"coordonnees": {
|
|
2764
|
+
"fr": "coordonnées",
|
|
2765
|
+
"en": "coords",
|
|
2766
|
+
"es": "coordenadas",
|
|
2767
|
+
"ru": "координаты",
|
|
2768
|
+
"zh": "坐标",
|
|
2769
|
+
"ja": "座標",
|
|
2770
|
+
"html": "coords"
|
|
2771
|
+
},
|
|
2772
|
+
"alternativeArea": {
|
|
2773
|
+
"fr": "alternative",
|
|
2774
|
+
"en": "alt",
|
|
2775
|
+
"es": "alternativo",
|
|
2776
|
+
"ru": "альтернатива",
|
|
2777
|
+
"zh": "替代文本",
|
|
2778
|
+
"ja": "代替テキスト",
|
|
2779
|
+
"html": "alt"
|
|
2780
|
+
},
|
|
2781
|
+
"hrefArea": {
|
|
2782
|
+
"fr": "adresse",
|
|
2783
|
+
"en": "href",
|
|
2784
|
+
"es": "enlace",
|
|
2785
|
+
"ru": "ссылка",
|
|
2786
|
+
"zh": "链接",
|
|
2787
|
+
"ja": "リンク",
|
|
2788
|
+
"html": "href"
|
|
2789
|
+
},
|
|
2790
|
+
"targetArea": {
|
|
2791
|
+
"fr": "cible",
|
|
2792
|
+
"en": "target",
|
|
2793
|
+
"es": "destino",
|
|
2794
|
+
"ru": "цель",
|
|
2795
|
+
"zh": "目标",
|
|
2796
|
+
"ja": "ターゲット",
|
|
2797
|
+
"html": "target"
|
|
2798
|
+
},
|
|
2799
|
+
"downloadArea": {
|
|
2800
|
+
"fr": "téléchargement",
|
|
2801
|
+
"en": "download",
|
|
2802
|
+
"es": "descargar",
|
|
2803
|
+
"ru": "скачать",
|
|
2804
|
+
"zh": "下载",
|
|
2805
|
+
"ja": "ダウンロード",
|
|
2806
|
+
"html": "download"
|
|
2409
2807
|
}
|
|
2808
|
+
}
|
|
2410
2809
|
}
|
package/lexer/ether-lexer.js
CHANGED
|
@@ -75,6 +75,7 @@ const TokenType = {
|
|
|
75
75
|
|
|
76
76
|
COMMENT: 'COMMENT',
|
|
77
77
|
BLOCK_COMMENT: 'BLOCK_COMMENT',
|
|
78
|
+
SEMICOLON: 'SEMICOLON',
|
|
78
79
|
|
|
79
80
|
EOF: 'EOF',
|
|
80
81
|
ERROR: 'ERROR'
|
|
@@ -306,7 +307,7 @@ class EtherLexer {
|
|
|
306
307
|
this.tokens.push(new Token(TokenType.DEDENT, '', this.line, 1, indent))
|
|
307
308
|
}
|
|
308
309
|
if (this.indentStack[this.indentStack.length - 1] !== indent) {
|
|
309
|
-
this.tokens.push(new Token(TokenType.ERROR, 'Indentation
|
|
310
|
+
this.tokens.push(new Token(TokenType.ERROR, 'Indentation incohérente', this.line, 1, indent))
|
|
310
311
|
}
|
|
311
312
|
}
|
|
312
313
|
}
|
|
@@ -418,7 +419,7 @@ class EtherLexer {
|
|
|
418
419
|
break
|
|
419
420
|
}
|
|
420
421
|
if (this.peek() === '\n') {
|
|
421
|
-
this.tokens.push(new Token(TokenType.ERROR, '
|
|
422
|
+
this.tokens.push(new Token(TokenType.ERROR, 'Chaîne non terminée', startLine, startCol, this.currentIndent))
|
|
422
423
|
return
|
|
423
424
|
}
|
|
424
425
|
}
|
|
@@ -674,12 +675,12 @@ class EtherLexer {
|
|
|
674
675
|
|
|
675
676
|
normalizeAccents(str) {
|
|
676
677
|
const accentsMap = {
|
|
677
|
-
'
|
|
678
|
-
'
|
|
679
|
-
'
|
|
680
|
-
'
|
|
681
|
-
'
|
|
682
|
-
'
|
|
678
|
+
'à': 'a', 'â': 'a', 'ä': 'a', 'á': 'a',
|
|
679
|
+
'è': 'e', 'ê': 'e', 'ë': 'e', 'é': 'e',
|
|
680
|
+
'ì': 'i', 'î': 'i', 'ï': 'i', 'í': 'i',
|
|
681
|
+
'ò': 'o', 'ô': 'o', 'ö': 'o', 'ó': 'o',
|
|
682
|
+
'ù': 'u', 'û': 'u', 'ü': 'u', 'ú': 'u',
|
|
683
|
+
'ç': 'c', 'ñ': 'n'
|
|
683
684
|
}
|
|
684
685
|
return str.toLowerCase().split('').map(c => accentsMap[c] || c).join('')
|
|
685
686
|
}
|
|
@@ -718,7 +719,10 @@ class EtherLexer {
|
|
|
718
719
|
'direction flex', 'enveloppe flex',
|
|
719
720
|
'justifier contenu', 'aligner elements',
|
|
720
721
|
'colonnes grille', 'lignes grille',
|
|
721
|
-
'style
|
|
722
|
+
'liste style', 'style liste',
|
|
723
|
+
'liste type', 'type liste',
|
|
724
|
+
'liste position', 'position liste',
|
|
725
|
+
'liste image', 'image liste',
|
|
722
726
|
'couleur fond', 'image fond', 'position fond', 'taille fond',
|
|
723
727
|
'couleur bordure', 'style bordure', 'largeur bordure',
|
|
724
728
|
'espacement lettres', 'espacement mots',
|
|
@@ -960,10 +964,11 @@ class EtherLexer {
|
|
|
960
964
|
break
|
|
961
965
|
|
|
962
966
|
case ';':
|
|
967
|
+
this.tokens.push(new Token(TokenType.SEMICOLON, ';', startLine, startCol, this.currentIndent))
|
|
963
968
|
break
|
|
964
969
|
|
|
965
970
|
default:
|
|
966
|
-
this.tokens.push(new Token(TokenType.ERROR, `
|
|
971
|
+
this.tokens.push(new Token(TokenType.ERROR, `Caractère inattendu: ${char}`, startLine, startCol, this.currentIndent))
|
|
967
972
|
}
|
|
968
973
|
}
|
|
969
974
|
|