Forums Casio - Vie communautaire

Index du Forum | Vie communautaire | Le langage de forum de la v5 - Lightscript (RFC)
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10645
Défis: 130
Message
Posté le 02/01/2018 14:50

Le langage de forum de la v5 - Lightscript (RFC) :

Salut à tous ! Je voudrais vous présenter le draft actuel du langage de forum de la v5 - nommé Lightscript, un gentil dérivé de Markdown conçu pour Planète Casio. J'ai noté RFC (Request For Comments) dans le titre, c'est une manière fun de dire que vous êtes invités à donner votre avis !

2018-02-06 : La spécification est freezée jusqu'à nouvel ordre ; j'implémente. Vous pouvez quand même faire des remarques ou proposer des extensions, elles sont bienvenues !

Ce langage servira à écrire tout ce qui existera sur la v5 ou presque : les messages sur le forum, les descriptions et commentaires de programmes, les tutoriels, les messages privés, etc etc. Les seules exceptions notables que je puisse déjà évoquer sont les tutoriels, que l'on pourra aussi écrire (au choix) en LaTeX, et l'IRC qui fait bien ce qui lui plaît.

Je tiens à préciser que je suis en train d'implémenter le programme de conversion (vers HTML), mais je débute encore. Rien n'est définitif, tout est discutable.

La description du langage est ci-dessous : vous pouvez réagir sur l'ensemble ou pointer des conflits de syntaxe, des oublis, des fonctionnalités manquantes qui vous sembleraient intéressantes. Il y a des choses que j'ai éliminées volontairement ; je les ai citées tout à la fin avec un argumentaire. N'hésitez pas à en discuter. Je compte sur vous !

Le modèle « théorique »

Sans rentrer dans les détails compliqués, un message en Lightscript c'est une suite de blocs : paragraphes, citations, listes à puces, titres par exemple. La fin d'un bloc est soit marquée explicitement par la syntaxe (comme les citations qui se terminent toutes par >>>), soit marquée par un retour à la ligne ou par une ligne vide. C'est important, donc soyez attentifs !

Beaucoup de blocs contiennent du texte interprété (par exemple les paragraphes ; mais pas les blocs de code, dont le contenu est recopié tel quel dans le HTML). Le texte interprété peut contenir des objets textuels, par exemple un passage de texte en gras, un lien hypertexte, ou une référence à un programme dans la base de données.

Passons maintenant aux réjouissances.

Détail des blocs

Les paragraphes sont exactement ce que vous pensez. Un paragraphe représente une unité de texte « par défaut », et se termine habituellement sur une ligne vide. Il peut contenir des retours à la ligne, qui sont alors fidèlement reproduits (ce qu'on fait actuellement dans la v42). Quand vous sautez une ligne, un nouveau paragraphe commence. Savoir si plusieurs lignes vides sont fusionnées en une seule n'est pas encore décidé !

Comme en Markdown, je vous propose deux styles de titre : soit avec des #, soit soulignés. Le premier type, c'est un ou plusieurs # suivis d'un paragraphe. Ça va donc jusqu'à la prochaine ligne vide. Le second type (décoratif), consiste en un paragraphe souligné par des = ou des -. La ligne qui souligne indique très naturellement la fin du bloc de titre.

# Titre de page

## Titre de catégorie. On a le droit de le
prolonger sur plusieurs lignes

...

###### Titre de niveau 6

Titre de page alternatif
========================

Titre de catégorie alternatif
-----------------------------

Les citations et les blocs de code ont une syntaxe commune : ils commencent par trois symboles ouvrants sur une ligne (avec des options facultatives) et se terminent par trois symboles fermants sur une ligne. Les symboles doivent être placés au tout début de la ligne, sinon ça fait un paragraphe !

>>> DarkStorm
Oui. Il suffit de la coder. :waza:
>>>

``` basic lines
Getkey→G
G=47⇒Goto 9
G=27⇒X-1→X
G=37⇒X+1→X
```

Niveau listes, je propose des listes à puces et des listes ordonnées. Pour les listes ordonnées, la numérotation commence par le nombre indiqué sur la première ligne puis incrémente les numéros en ignorant les valeurs suivantes (c'est classique) ; ça vous évite de tout renuméroter chaque fois que vous insérez un truc.

- Ceci est une liste à puces
* Elle continue même quand on change de puces
+ On peut y mettre du `code`, du *formatage*...

0. Real developers count from 0
1. No, real developers use butterflies!
2. Ah, yes, there's good ol' C-x M-c M-butterfly for that.
3. Damn, Emacs...

Il me reste les définitions de références. Parfois les liens de la forme [label](url) sont lourds à lire parce que l'URL est longue, parfois vous voulez utiliser plusieurs fois la même URL. Dans ce cas, vous pourrez écrire [label][ref-name] et définir plus loin la valeur de ref-name. C'est ce que j'appelle une définition de référence !

[ref_name]: http://www.example.com

Une définition de référence tient sur une unique ligne. Je reviendrai sur ces liens dans la section suivante !

Les objets textuels

C'est là qu'on s'amuse à mettre n'importe quoi dans nos phrases. Commençons par les options de formatage :

*emphasis*               (italique)
**strong**               (gras)
~striked~                (barré)
`code` ou `code`[lang]   (code inline)
$math$                   (formules KaTeX)

Je pense que tout est à peu près explicite. Le cas `code`[langage] permet de mettre du code coloré dans une phrase. Il ne faut pas d'espace entre la backtick fermante et le premier crochet !

Les liens sont toujours une question délicate. La détection automatique des URLs dans les messages (autolinking) est compliquée à écrire et à utiliser, donc je vous propose de simplifier votre vie (et la mienne !) en mettant des chevrons (<url>). De façon générale, prenez le temps de mettre des noms sur vos liens, ce sera toujours supérieur !

Des liens, il y en a plusieurs types : certains sans noms, d'autres avec. En spécifiant un # au début de l'URL, vous pouvez référencer une section de votre article/tutoriel, ça enverra vers le titre associé !

<http://example.org>
[lien externe](http://example.org)
[lien interne](#compilation-manuelle)

Vous pouvez également décider de spécifier l'URL plus tard, à l'aide d'une référence (rappelez-vous, le bloc de définition de référence sert à ça !). Vous pouvez aussi utiliser une ressource (voyez plus loin) comme cible, ou tout simple une page de Casio Universal Wiki.

[lien par référence][ref-name]
[lien vers ressource][:uLephenixnoir]
[lien vers le wiki][[Basic Fx-CG]]

Comme avant, il y aura des médias. La syntaxe pour les utiliser est assez générale :

[[image:http://url.png 640 480]]
[[video:youtube.com/watch?v=deadbeef]]
[[wiki:Fxlib.h]]

Je n'ai pas encore fixé le type de choses qu'on pourrait utiliser avec ; je vous invite à suggérer. Le comportement pourra être différent si cet objet est utilisé en plein milieu d'une phrase ou tout seul sur un paragraphe. Par exemple, on aura envie de centrer les images si elles sont toutes seules.

Viennent ensuite les spoilers. Les discussions ont été longues et compliquées. Pour tenter de concilier les partis, je vous propose un spoiler volontairement moins puissant que l'original. C'est un spoiler inline, et vous ne pouvez donc mettre que quelques phrases dedans. Vous pouvez le tester sur jsfiddle.net :


And then they (((all die)))!

Il reste les choses les plus fun. D'abord les notes de bas de page (pour l'humour dans les articles en page d'accueil ^-^ ), et ensuite les références aux objets de Planète Casio :

Oui, mais c'est impossible ! [^Sauf si P=NP.] (note de bas de page)
:m2451 (référence au message numéro 2451)
:f234 (topic numéro 234)
:t32 (tutoriel numéro 32)
:rLephe/gint (dépôt Gitlab `Lephe/gint`)
...

Toutes les références de Planète Casio utiliseront la syntaxe :[a-z][^ :]+ (c'est-à-dire, ":" suivi d'une lettre minuscule suivi d'un mot non vide qui ne contient ni espace ni ":") et elle leur est strictement réservée. Cela n'interfère pas avec nos smileys !

On peut aussi utiliser ces références dans des liens (quand c'est approprié). Par exemple :

[Profil de Ne0tux][:uNe0tux]

Vous avez aussi les mentions : de gens, ou de groupes. L'usage des mentions de groupe trop larges type @@all sera probablement réservé à l'équipe pour éviter des problèmes :

Je pense que @Cakeisalie5 connaît la solution à ce problème.
Topic à nettoyer (@@mod).
@<pseudo>
@@all @@admin @@mod @@redac etc.

Il me reste, finalement, les smileys. Vous les connaissez assez bien pour ne pas avoir besoin d'une description. Je ne vous cache pas que j'aimerais bien remplacer les grands par des choses de taille raisonnable, ou les supprimer. Dans tous les cas, il y auras probablement de légères retouches de design sur les smileys habituels (presque rien).

Subtilités de syntaxe

Si vous n'avez pas envie de vous casser la tête, sautez cette section. Si vous pensez que la syntaxe ne va pas tenir le coup, lisez-la ; vous aurez peut-être des réponses. Si non, prévenez-moi dans les commentaires !

Pour le formatage des objets textuels, vous pouvez avoir envie de mettre un backtick dans le code. Pour ça, doublez les backticks sur le côté. Tout ce qu'il faut c'est que le code intérieur ne contienne pas la marque de fin. S'il apparaît des backticks, mais pas en même nombre, ce n'est pas grave :

``$ cat `find -iname *.c` | grep MACRO``
`function(``args``);`
```function(``args``, `arg`);```
  -- ` et `` sont tous deux présents dans le code, donc on triple

Pour le gras et l'italique, c'est pareil, sauf qu'une fois tous les comptes terminés c'est la parité du nombre d'étoiles qui détermine le type de formatage que vous demandez (impair : emphasis, pair : strong). Ça marche aussi pour les citations imbriquées (et le code, comme vous vous en doutez) :

>>>> DarkStorm
>>> Eragon
Ok sinon il y a un moyen de tester la V5?
>>>
Oui. Il suffit de la coder. :waza:
>>>>

Je prévois que le bouton « Citer » calcule automatiquement un nombre satisfaisant de chevrons si le message à citer contient lui-même des citations. Faut pas déconner non plus !

Éléments à potentiellement ajouter

J'en ai déjà cité quelques-uns. Il me vient à l'esprit :

– De quoi centrer ou justifier le texte (paramètre du message)
– Des tableaux pour faire des statistiques *o*
– Les barres horizontales (facile à faire ça)

Éléments intentionnellement omis

Avec les discussions, j'ai mis à jour cette section. Voilà ce qui en reste ; les objets qui sont pour l'instant éliminés... avec explications.

Les spoilers ont été réduits à des objets inlines pour éviter qu'ils soient utilisés pour structurer les descriptions de programmes ou des grosses docs qui devraient être séparées en plusieurs pages. Le gameplay d'un jeu ne devrait pas être caché dans une boîte ! C'est le plus important. Les titres sont plus appropriés pour structurer et les grandes images seront redimensionnées automatiquement, donc cette restriction ne devrait pas gêner outre mesure. J'ai pu oublier des cas.

Le soulignement et le texte barré sont rarement utilisés. Le gras remplit efficacement le rôle de mise en avant prévu par le soulignement, et comme Lightscript ne précise pas ce que <strong> donne comme formatage, on peut aussi opter pour italique/soulignement sans gras. Le texte barré est difficile à lire. Honnêtement, j'ai surtout éliminé ces deux-là pour des raisons de syntaxe. J'ai eu trop de mal à trouver des moyens honnêtes de les introduire dans la définition du langage.

Les liens vers une page de profil et les barres de progression étaient compliqués à intégrer à la syntaxe, mais je peux réfléchir au premier avec la syntaxe réservée, par exemple :uLephenixnoir. Le second n'a à ma connaissance jamais été utilisé de façon productive, à part pour poster des commentaires de programmes qui balançaient un chiffre au lieu de donner des éléments intéressants sur l'état de développement des projets. On s'en passera sans peine, je pense.

Conclusion

C'est un très long post, je vous remercie de l'avoir lu jusque-là. Vous avez certainement des remarques à faire : j'y répondrai de mon mieux. Merci de votre aide !



Dark storm
En ligne
Administrateur
Niveau: Aucun
Points: 10042
Défis: 170
Message
Dernier message de la page précédente :Posté le 06/02/2018 19:39 |
J'ai ajouté ça à ton message du coup
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya



Pages: Précédente | 1, 2, 3, 4

Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10645
Défis: 130
Message
Citer : Posté le 06/02/2018 20:02 | #
Oh, merci.

Notez que je planifie que ces codes soient « transparents ». Pour le permalien, par exemple. Pour l'instant il est marqué d'un #, mais je pense normal qu'il rende ce numéro visible de base. Pareil quand on se balade sur un topic, à un endroit le numéro devra être visible par défaut (même en petit et en gris !).

Ajouté le 10/02/2018 à 22:31 :
Je sens que l'implémentation va être un peu galère, mon premier modèle inspiré des bons vieux parsers LR(1) étant en train de se faire jeter par la fenêtre par le langage.

L'inconvénient inarrangeable de ce langage est que le sens et le rôle des éléments n'est pas seulement déterminé par leur syntaxe mais aussi (et de façon incontournable, semble-t-il) par le contexte.

Va falloir que je réfléchisse un peu plus pour inventer une implémentation performante. Je tiendrai ce thread à jour et je tenterai de mettre une démo en ligne aussi vite que possible !

Ajouté le 19/02/2018 à 17:57 :
Bien, j'arrive maintenant à détecter et isoler proprement à peu près tous les blocs (c'est-à-dire tous sauf les définitions de références, que j'ai pas encore traitées).

J'ai un peu de parsing à faire pour isoler les éléments dans les listes et passer l'algorithme récursivement sur le contenu des quotes, et je pourrai mettre en ligne une démo. À ce stade, il ne me restera à faire « que » l'interprétation des éléments inline (pour laquelle j'ai pas encore d'algorithme robuste en cas d'erreurs de syntaxe).

Le programme possède deux niveaux de debug (log et verbose) et plus des erreurs qui sont émises quand des trucs sont mal faits. Mon objectif est de réussir à afficher du texte peu importe à quel point l'utilisateur a déconné dans la syntaxe, mais je ne me prononce par encore.
----------------------------------
Watch me, as I build my empire with my own hands.
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1843
Défis: 22
Message
Citer : Posté le 19/02/2018 19:25 | #
Aura-t-on des bugs avec les caractères indiens ?
----------------------------------
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1516
Défis: 8
Message
Citer : Posté le 19/02/2018 19:28 | #
C'est pas très gentil envers Apple ça Ninestars.
----------------------------------
Informatichien au poil. Je fais danser des bytes quand ça me chante.
Besoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1843
Défis: 22
Message
Citer : Posté le 19/02/2018 19:39 | #
Haha
----------------------------------
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10645
Défis: 130
Message
Citer : Posté le 19/02/2018 19:41 | #
Ninestars a écrit :
Aura-t-on des bugs avec les caractères indiens ?

Je garantis la compatibilité complète avec utf-8. C'est-à-dire que tant que vous me collez de l'utf-8 valide en entrée, je garantis que le programme ne va pas partir en live, et va ressortir le texte tel quel.

Ajouté le 21/02/2018 à 21:10 :
Bon voilà, c'est pas encore parfait, mais vous pouvez tester la version actuelle de Lightscript en ligne !

http://t0wer.ddns.net/lightscript

Pour l'instant ça montre la sortie du programme, mais dès qu'il y aura un rendu HTML, je le mettrai. Surtout, signalez-moi tout bug de l'interpréteur et/ou de la page web qui permet de tester, je ferai de mon mieux o/
----------------------------------
Watch me, as I build my empire with my own hands.
Dark storm
En ligne
Administrateur
Niveau: Aucun
Points: 10042
Défis: 170
Message
Citer : Posté le 21/02/2018 21:33 | #
Oh, very nice.
GG, le comportement est très propre.

Juste un petit détail, y'a moyen d'ajouter la syntaxe 1) 2) … pour les listes ordonnées ? C'est assez utilisé et intuitif pour que ce soit utile je pense.
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10645
Défis: 130
Message
Citer : Posté le 21/02/2018 21:34 | #
Ah, oui, malin ! J'ajouterai ça à mon prochain commit.

À l'inverse je crois que je vais retirer le + pour les listes à puces. Ça va faire planter tous les "+1". x)
----------------------------------
Watch me, as I build my empire with my own hands.

Pages: Précédente | 1, 2, 3, 4

Index du Forum | Vie communautaire | Le langage de forum de la v5 - Lightscript (RFC)

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2018 | Il y a 46 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Casio Education Casiopeia CodeWalrus

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd