Le site mathematica.SE est actuellement en version bêta privée et sera ouvert au public dans quelques jours. Stack Overflow et les sites connexes utilisent prettify.js mais Mathematica n'est pas un langage supporté. Il serait assez impressionnant d'avoir un script de mise en évidence personnalisé pour notre site, et je demande l'aide de la communauté JavaScript et CSS pour développer un tel script et le CSS qui l'accompagne.
J'ai énuméré ci-dessous quelques exigences de base, de manière à ce qu'il capture la plupart des caractéristiques du système de surlignage par défaut de Mathematica (en ignorant les éléments que seul l'analyseur interne connaît). J'ai également nommé les couleurs de manière générique - les codes de couleur hexadécimaux peuvent être choisis à partir des captures d'écran que j'ai fournies (plus loin). J'ai également ajouté des exemples de code pour accompagner les captures d'écran afin que les gens puissent le tester.
Exigences de base
-
Commentaires
Ceux-ci sont saisis comme(* comment *)
. Tout ce qui se situe entre les deux doit donc être mis en évidence en gris. -
Cordes
Ceux-ci sont saisis comme"string"
(les guillemets simples ne sont pas pris en charge), et doivent être mis en évidence en rose. -
Opérateurs/notations abrégées
Outre la norme+, -, *, /, ^, ==
Mathematica possède plusieurs autres opérateurs et notations abrégées. Les plus couramment rencontrés sont :@, @@, @@@, /@, //@, //, ~, /., //., ->, :>, /:, /;, :=, :^=, =., &, |, ||, &&, _, __, ___, ;;, [[, ]], <<, >>, ~~, <>
Ces derniers, ainsi que les parenthèses, les crochets et les accolades, doivent tous être mis en évidence en noir.
-
Modèles d'objets et de créneaux
Les objets de type Pattern commencent par une lettre et ont soit_
o__
o___
attaché, comme par exemple,x_
,x__
yx___
. Ces derniers peuvent également comporter des lettres supplémentaires après le trait de soulignement, par exemplex_abc
etc. Tous ces éléments doivent être mis en évidence en vert.Les machines à sous sont
#
y##
et peut également être suivi d'un nombre entier comme#1
,##4
etc., et devraient également être en vert.Ces deux éléments (objets de motif et slots) sont généralement terminés par un opérateur/une parenthèse/une forme courte du point 3 ci-dessus.
-
Fonctions/variables
Fonctions et variables est une terminologie plutôt vague ici, mais elle sert aux fins de cet article. Tout ce qui n'entre pas dans les 4 catégories ci-dessus peut être surligné en noir. Mathematica utilise souvent des backticks`
dans le code et doivent être considérés comme faisant partie du nom de la fonction/variable. Par exemple,abcd`defg
. Les signes du dollar$
n'importe où dans un nom de variable doit être traité comme une lettre (c'est-à-dire, rien de spécial).
Pour tous les éléments ci-dessus, s'ils apparaissent à l'intérieur de chaînes de caractères, ils doivent être traités comme tels, à savoir "@~#
doivent être mis en évidence en rose.
Autres avantages :
- Dans les objets du modèle du point 3 ci-dessus, si le(s) trait(s) de soulignement est(sont) suivi(s) d'un
?
et ensuite quelques lettres, puis la partie qui suit le_
devrait être en noir. Par exemple, enx__?abc
Elx__
doit être en vert et la partie?abc
en noir. - si une fonction/variable commence par une majuscule, elle est mise en évidence en noir. Si elle commence par une lettre minuscule, elle est mise en évidence en bleu. En interne, cela permet de distinguer les fonctions intégrées des fonctions définies par l'utilisateur. Cependant, la communauté mathematica (à peu près partout) s'en tient assez bien à cette convention de dénomination, de sorte qu'il serait utile de distinguer les deux.
Captures d'écran et échantillons de code :
1. Des exemples simples
Voici un petit ensemble d'exemples, avec une capture d'écran à la fin montrant comment cela se présente dans Mathematica :
(*simple pattern objects & operators*)
f[x_, y__] := x Times @@ y
(*pattern objects with chars at the end and strings*)
f[x_String] := x <> "hello@world"
(*pattern objects with ?xxx at the end*)
f[x_?MatrixQ] := x + Transpose@x
<< Combinatorica` (*example with backticks and inline comment*)
(*Slightly more complicated example with a mix of stuff*)
Developer`PartitionMap[Total, Range@1000, 3][[3 ;; -3]]~Partition~2 //
Times @@@ # &
2. Un exemple concret
Voici un exemple tiré de cette réponse de ma part cela indique également mon point 2 dans la section "Additional nice to haves", c'est-à-dire que les choses en minuscules sont surlignées en bleu.
Vous remarquerez également que certaines variables sont surlignées en orange. Je n'ai volontairement pas inclus cette exigence, car je pense que cela sera beaucoup plus difficile à réaliser sans un analyseur syntaxique qui connaît Mathematica.
prob = MapIndexed[#1/#2 &,
Accumulate[
EuclideanDistance[{0, 0}, #] < 1 & /@ arrows // Boole]]~N~4;
Manipulate[
Graphics[{White, Rectangle[{-5, -5}, {5, 5}], Red, Disk[{0, 0}, 1],
Black, Point[arrows[[;; i]]],
Text[Style[First@prob[[i]], Bold, 18, "Helvetica"], {-4.5, 4.5}]},
ImageSize -> 200], {i, Range[2, 20000, 1]},
ControlType -> Manipulator, SaveDefinitions -> True]
Est-ce faisable ? C'est trop ? Trop difficile ? Impossible ?
Très franchement, je ne connais pas la réponse à aucune de ces questions. J'ai juste listé quelques fonctionnalités de base que tout le monde sur mathematica.SE aimerait avoir et quelques trucs supplémentaires qui seraient une cerise sur le gâteau. Cependant, faites-moi savoir si elles sont trop difficiles à mettre en œuvre. Nous pourrons alors travailler sur un sous-ensemble plus restreint de fonctionnalités.
En reconnaissance de cette aide, vous avez tous la gratitude éternelle de la communauté Mathematica et en plus, J'attribuerai une prime de 500 à chaque personne qui contribuera de manière significative à ce projet. (si c'est fait en plusieurs parties par différentes personnes) - je compterai sur vos votes/commentaires/sorties sur les réponses pour décider ce qui est significatif (peut-être plus d'une prime à une personne si elle fait tout le travail). La mise en œuvre de l'option "Autres avantages" donne droit à un bonus automatique de 500 euros, indépendamment des primes précédentes. Vous pouvez donc vous appuyer sur le travail des autres, même si vous ne faites pas la première moitié. Je pourrais également placer périodiquement des primes plus petites pour attirer les utilisateurs qui n'auraient pas vu cette question, donc si vous gagnez ces primes, elles s'ajouteront à la "prime pour récompenser une réponse existante" qui sera décidée vers la fin.
Enfin, je ne suis pas pressé. Veuillez donc prendre votre temps pour répondre à cette question. La prime est toujours une option jusqu'à ce qu'elle soit mise en œuvre par SE (ou s'il a été déterminé que les réponses existantes répondent complètement aux exigences). Idéalement, j'espère que cela sera mis en œuvre aux deux tiers du chemin vers la bêta, c'est-à-dire dans deux mois.