humalis 1.3.0 → 1.4.0

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.
@@ -0,0 +1,15 @@
1
+ import { readFileSync } from 'node:fs';
2
+ /** La version du paquet, lue dans son package.json (deux dossiers au-dessus de src/outils/ comme de dist/outils/). */
3
+ export function versionHumalis() {
4
+ return JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version;
5
+ }
6
+ /** « humalis --version » ou « humalis --aide » : le texte à afficher, ou undefined pour une autre commande. */
7
+ export function reponseSimple(arguments_, aide) {
8
+ if (arguments_.length !== 1)
9
+ return undefined;
10
+ if (['--version', '-v', 'version'].includes(arguments_[0]))
11
+ return `humalis ${versionHumalis()}`;
12
+ if (['--aide', '--help', '-h', 'aide'].includes(arguments_[0]))
13
+ return aide;
14
+ return undefined;
15
+ }
@@ -2,7 +2,8 @@
2
2
  * L'analyse syntaxique des langues (plan 2026-10-30-qualite-publication,
3
3
  * partie 1, décisions Q1 à Q4) :
4
4
  *
5
- * - le bloc « langues : » en haut du fichier, une langue par ligne ;
5
+ * - le bloc « langues : » en haut du fichier, une langue par ligne, ou sur la
6
+ * même ligne séparées par des virgules : « langues : francais, anglais » ;
6
7
  * - le bloc « traductions anglais : », des lignes « "texte" : "version" » ;
7
8
  * - la version écrite à côté d'un texte : « "Bienvenue" en anglais "Welcome" » ;
8
9
  * - l'élément « selecteur de langue », en tête de ligne.
@@ -39,13 +40,40 @@ export function analyserLangues(flux) {
39
40
  const debut = flux.avancer();
40
41
  flux.avancer();
41
42
  const langues = { type: 'Langues', langues: [], ligne: debut.ligne };
43
+ const ajouter = (jeton) => langues.langues.push({ mot: normaliser(jeton.original ?? jeton.valeur), ligne: jeton.ligne });
44
+ // « langues : francais, anglais » : sur la ligne même, séparées par des virgules.
45
+ if (!flux.verifier('FIN_LIGNE') && !flux.estFini()) {
46
+ for (;;) {
47
+ const jeton = flux.actuel();
48
+ if (!estMot(jeton)) {
49
+ throw new ErreurSyntaxique(`après « langues : », on attend le nom d'une langue, par exemple « francais » ou « anglais » : à la place, on trouve « ${jeton.valeur || jeton.type} »`, jeton.ligne);
50
+ }
51
+ flux.avancer();
52
+ ajouter(jeton);
53
+ if (flux.verifier('FIN_LIGNE') || flux.estFini())
54
+ break;
55
+ if (flux.actuel().type === 'PONCTUATION' && flux.actuel().valeur === ',') {
56
+ flux.avancer();
57
+ if (flux.verifier('FIN_LIGNE') || flux.estFini()) {
58
+ throw new ErreurSyntaxique(`après la virgule, il manque le nom d'une langue : « langues : francais, anglais »`, jeton.ligne);
59
+ }
60
+ continue;
61
+ }
62
+ throw new ErreurSyntaxique(`séparez les langues par des virgules : « langues : francais, anglais ». À la place de la virgule, on trouve « ${flux.actuel().valeur || flux.actuel().type} »`, jeton.ligne);
63
+ }
64
+ flux.sauterFinsDeLigne();
65
+ if (flux.verifier('INDENT')) {
66
+ throw new ErreurSyntaxique(`les langues s'écrivent soit sur la ligne, soit en dessous, une par ligne, pas les deux à la fois`, flux.actuel().ligne);
67
+ }
68
+ return langues;
69
+ }
42
70
  lignesDuBloc(flux, () => {
43
71
  const jeton = flux.actuel();
44
72
  if (!estMot(jeton)) {
45
73
  throw new ErreurSyntaxique(`une ligne du bloc « langues » est le nom d'une langue, par exemple « francais » ou « anglais » : à la place, on trouve « ${jeton.valeur || jeton.type} »`, jeton.ligne);
46
74
  }
47
75
  flux.avancer();
48
- langues.langues.push({ mot: normaliser(jeton.original ?? jeton.valeur), ligne: jeton.ligne });
76
+ ajouter(jeton);
49
77
  });
50
78
  return langues;
51
79
  }
@@ -42,7 +42,7 @@ export const ENTREES_LANGUES = [
42
42
  contextes: ['declaration'],
43
43
  cibles: ecran('src/humalis/langue.tsx : LANGUES, t(), useLangue(), <html lang>', 'humalis/langue.tsx : la langue du téléphone par expo-localization, le choix gardé par AsyncStorage', 'humalis.js : t(), langue(), changerLangue() ; le HTML de départ dans la première langue'),
44
44
  couvre: ['html:lang', 'i18n', 'navigator.languages', 'expo-localization'],
45
- description: 'Le bloc « langues : » en haut du fichier déclare les langues du site, une par ligne. La première est celle des textes écrits tels quels ; les autres s’ajoutent après un texte (« en anglais "…" ») ou dans un bloc « traductions ». La personne voit d’abord la langue de son navigateur (ou de son téléphone), si le site la parle.',
45
+ description: 'Le bloc « langues : » en haut du fichier déclare les langues du site, une par ligne, ou sur la même ligne séparées par des virgules (« langues : francais, anglais »). La première est celle des textes écrits tels quels ; les autres s’ajoutent après un texte (« en anglais "…" ») ou dans un bloc « traductions ». La personne voit d’abord la langue de son navigateur (ou de son téléphone), si le site la parle.',
46
46
  exemple: `${LANGUES}page "accueil" :\n selecteur de langue\n titre "Bienvenue" en anglais "Welcome"`,
47
47
  statut: 'supporte',
48
48
  etape: 9,
package/docs/guide.en.md CHANGED
@@ -228,11 +228,14 @@ page "guide" :
228
228
 
229
229
  ### Code within a sentence
230
230
 
231
- In text, `{code "…"}` displays a short piece of code in a monospace font.
231
+ In text, a piece of code goes between backticks, as in every documentation:
232
+ it shows in a monospace font, as written, quotes and braces included.
233
+ `{code "…"}` does the same.
232
234
 
233
235
  ```humalis
234
236
  page "guide" :
235
- texte "Write {code "titre"} to add a heading."
237
+ texte "Write `titre` to add a heading."
238
+ texte "A text: `texte "Hello {firstname}"`."
236
239
  ```
237
240
 
238
241
  ### Code block
@@ -747,6 +750,10 @@ A variable (`variable`) holds a number, a text, `vrai` (true) or `faux`
747
750
  the French way: `12,50`. Inside a text, `{firstname}` shows the variable's
748
751
  value.
749
752
 
753
+ A name cannot be one of the small French words Humalis skips so the code reads
754
+ like a sentence: `le`, `la`, `les`, `un`, `une`, `des`, `de`, `du`, `a`, `au`,
755
+ `aux`, `se`. Write `variable total = 0`, not `variable a = 0`.
756
+
750
757
  ### Changing a variable
751
758
 
752
759
  ```humalis
@@ -1824,7 +1831,8 @@ page "catalogue" :
1824
1831
  lien "Back to home" en francais "Retour à l'accueil" vers "home"
1825
1832
  ```
1826
1833
 
1827
- - `langues :` lists the languages (`francais`, `anglais`…).
1834
+ - `langues :` lists the languages (`francais`, `anglais`…), one per line or
1835
+ on the same line separated by commas: `langues : anglais, francais`.
1828
1836
  - `en francais "…"` gives another language's version of a text.
1829
1837
  - `sans traduction` ("without translation") keeps the same text in every
1830
1838
  language, for a proper noun: `lien "GitHub" sans traduction vers "https://github.com"`.
@@ -1959,6 +1967,7 @@ texte "…" est absent` (a text is not shown).
1959
1967
  | Command | Role |
1960
1968
  |---|---|
1961
1969
  | `humalis nouveau <name>` | creates a project |
1970
+ | `humalis --version` | shows the installed version (`humalis --help`: the usage) |
1962
1971
  | `humalis developper` | runs the site and recompiles it on every save |
1963
1972
  | `humalis compile <file> --cible <target> --sortie <folder>` | generates a target's project |
1964
1973
  | `humalis compile <file> --cible web --composants <folder>` | generates React components to import elsewhere |
package/docs/guide.md CHANGED
@@ -218,11 +218,14 @@ page "guide" :
218
218
 
219
219
  ### Code dans une phrase
220
220
 
221
- Dans un texte, `{code "…"}` affiche un court morceau de code à chasse fixe.
221
+ Dans un texte, un morceau de code s'écrit entre accents graves, comme dans
222
+ toutes les documentations : il s'affiche à chasse fixe, tel quel, guillemets et
223
+ accolades compris. `{code "…"}` fait la même chose.
222
224
 
223
225
  ```humalis
224
226
  page "guide" :
225
- texte "Écris {code "titre"} pour donner un titre."
227
+ texte "Écris `titre` pour donner un titre."
228
+ texte "Un texte : `texte "Bonjour {prenom}"`."
226
229
  ```
227
230
 
228
231
  ### Bloc de code
@@ -707,6 +710,10 @@ Une variable contient un nombre, un texte, `vrai` ou `faux`, une liste, une
707
710
  fiche, ou `rien`. Les nombres à virgule s'écrivent à la française : `12,50`.
708
711
  Dans un texte, `{prenom}` affiche la valeur de la variable.
709
712
 
713
+ Un nom ne peut pas être un des petits mots que Humalis ignore pour se lire
714
+ comme une phrase : `le`, `la`, `les`, `un`, `une`, `des`, `de`, `du`, `a`, `au`,
715
+ `aux`, `se`. Écris `variable total = 0`, pas `variable a = 0`.
716
+
710
717
  ### Changer une variable
711
718
 
712
719
  ```humalis
@@ -1741,6 +1748,8 @@ page "catalogue" :
1741
1748
  lien "Retour à l'accueil" en anglais "Back to home" vers "accueil"
1742
1749
  ```
1743
1750
 
1751
+ - Les langues tiennent aussi sur une ligne, séparées par des virgules :
1752
+ `langues : francais, anglais` revient au même que le bloc.
1744
1753
  - `en anglais "…"` donne la version d'un texte.
1745
1754
  - `sans traduction` garde le même texte dans toutes les langues, pour un nom
1746
1755
  propre : `lien "GitHub" sans traduction vers "https://github.com"`.
@@ -1871,6 +1880,7 @@ Les autres étapes : `remplir champ "email" avec "…"`, `aller vers "panier"`,
1871
1880
  | Commande | Rôle |
1872
1881
  |---|---|
1873
1882
  | `humalis nouveau <nom>` | crée un projet |
1883
+ | `humalis --version` | affiche la version installée (`humalis --aide` : le mode d'emploi) |
1874
1884
  | `humalis developper` | lance le site et le recompile à chaque enregistrement |
1875
1885
  | `humalis compile <fichier> --cible <cible> --sortie <dossier>` | produit le projet d'une cible |
1876
1886
  | `humalis compile <fichier> --cible web --composants <dossier>` | produit des composants React à importer ailleurs |
package/llms.txt CHANGED
@@ -422,6 +422,10 @@ page "accueil" :
422
422
  - Deux blocs « langues » : un seul bloc « langues »
423
423
  - Le bloc « langues » après les pages : le bloc « langues » s'écrit en haut du fichier
424
424
  - Une langue entre guillemets : une ligne du bloc « langues » est le nom d'une langue
425
+ - Une langue entre guillemets sur la ligne « langues : » : après « langues : », on attend le nom d'une langue
426
+ - Deux langues sans virgule : séparez les langues par des virgules
427
+ - Une virgule en fin de ligne des langues : après la virgule, il manque le nom d'une langue
428
+ - Des langues sur la ligne et en dessous : soit sur la ligne, soit en dessous
425
429
  - Une langue que Humalis ne connaît pas : n'est pas une langue connue de Humalis
426
430
  - Une langue pas encore disponible : n'est pas encore disponible
427
431
  - Une langue écrite deux fois : est déjà dans le bloc « langues »
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humalis",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Un seul langage, en français, pour créer une application complète : web, mobile, desktop et serveur",
5
5
  "type": "module",
6
6
  "bin": {