Question

La Mathematica.se est actuellement en version bêta privée et s'ouvrira au public dans quelques jours. Le débordement de pile et les sites connexes utilisent Prettify.js, Cependant, Mathematica n'est pas une langue soutenue. Ce serait assez génial 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 telles qu'il capture la plupart des fonctionnalités du schéma de mise en évidence par défaut de Mathematica (ignorer les choses que seul l'analyseur interne connaît). J'ai également nommé les couleurs génériquement - les codes de couleur hexadécimaux peuvent être choisis parmi les captures d'écran que j'ai fournies (plus ci-dessous). J'ai également ajouté des échantillons de code pour accompagner les captures d'écran afin que les gens puissent le tester.

Exigences de base

  1. commentaires
    Ceux-ci sont entrés comme (* comment *). Donc, tout ce qui est entre ceux-ci doit être mis en évidence en gris.

  2. Cordes
    Ceux-ci sont entrés comme "string"(Les citations simples ne sont pas prises en charge) et doivent être mises en évidence en rose.

  3. Opérateurs / Notations à main courte
    En dehors de la norme +, -, *, /, ^, ==, etc., Mathematica a plusieurs autres opérateurs et notations de courtes main. Les plus couramment rencontrés sont:

    @, @@, @@@, /@, //@, //, ~, /., //., ->, :>, /:, /;, :=, :^=, =., 
    &, |, ||, &&, _, __, ___, ;;, [[, ]], <<, >>, ~~, <>
    

    Ceux-ci et les parenthèses, les crochets et les accolades doivent tous être mis en évidence en noir.

  4. Modèles objets et machines à sous
    Les objets de motif commencent par une lettre et ont soit _ ou __ ou ___ attaché, comme par exemple, x_, x__ et x___. Ceux-ci peuvent également avoir des lettres supplémentaires après le soulignement, comme x_abc, etc. Tous ces éléments doivent être mis en évidence en vert.

    Les machines à sous sont # et ## et peut également être suivi d'un entier comme #1, ##4, etc., et devrait également être en vert.

    Ces deux (objets de motif et emplacements) sont généralement terminés par un opérateur / support / short forme du point 3 ci-dessus.

  5. Fonctions / variables
    Les fonctions et les variables sont ici une terminologie assez lâche, mais sert aux fins de cet article. Tout ce qui ne tombe pas dans les 4 ci-dessus peut être mis en évidence en noir. Mathematica utilise souvent des backtincs ` dans le code et doit être considéré comme une partie du nom de fonction / variable. Par exemple, abcd`defg. Signes en dollars $ Partout dans un nom variable, il faut traiter comme une lettre (c'est-à-dire rien de spécial).

Pour tout ce qui précède, s'ils apparaissent à l'intérieur des cordes, ils doivent être traités comme tels, c'est-à-dire "@~# devrait être mis en évidence en rose.

Supplémentaire sympa à des nantis:

  1. Dans le motif, les objets du point 3 ci-dessus, si le ou les traits de soulignement sont suivis d'un ? puis quelques lettres, puis la partie suivant la _ devrait être en noir. Par exemple, dans x__?abc, la x__ la partie doit être en vert et le ?abc en noir.
  2. Si une fonction / variable commence par une lettre majuscule, elle est mise en évidence en noir. S'il commence par une petite lettre, il est mis en évidence en bleu. En interne, cela différencie les fonctions intégrées par rapport aux fonctions définies par l'utilisateur. Cependant, la communauté Mathematica (à peu près partout) s'en tient assez bien à cette convention de dénomination, donc distinguer les deux servirait un objectif.

Captures d'écran et échantillons de code:

1. Exemples simples

Voici un petit exemple de jeu, avec une capture d'écran à la fin montrant à quoi il ressemble 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 @@@ # &

enter image description here

2. Un exemple du monde réel

Voici un exemple de ma réponse à moi Cela indique également mon point 2 dans la section "supplémentaire sympa à nantis", c'est-à-dire des trucs minuscules mis en évidence en bleu.

En outre, vous remarquerez peut-être certaines des variables mises en évidence en orange - je n'ai pas délibérément inclus cela comme une exigence, car je pense que cela va être beaucoup plus difficile à faire sans l'analyseur 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]

enter image description here

Est-ce possible? Trop? Trop dur? Impossible?

Franchement, je ne connais pas la réponse à aucun de ces éléments. Je viens de répertorier des fonctionnalités de base que tout le monde sur Mathematica.se aimerait avoir et des choses supplémentaires qui seraient une cerise sur le dessus. Cependant, faites-moi savoir si ceux-ci sont trop difficiles à mettre en œuvre. Nous pouvons déterminer un plus petit sous-ensemble de fonctionnalités.

En reconnaissance de cette aide, vous avez tous la gratitude éternelle de la communauté Mathematica et en outre, Je vais attribuer une prime de 500 à chaque personne qui contribue de manière significative (Si cela se fait en partie par différentes personnes) - Je compterai sur vos votes / commentaires / sortie sur les réponses pour décider de ce qui est important (peut-être plus d'une prime à une personne s'ils font tout le travail). La mise en œuvre de la "Nice to Haves" supplémentaire "obtient un +500 automatique, quelles que soient les primes précédentes, afin que vous puissiez également s'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 des utilisateurs qui n'ont peut-être pas vu cette question, donc si vous gagnez ces primes, ils s'ajouteront à la "prime pour récompenser une réponse existante" qui sera décidé vers la fin .

Enfin, je ne suis pas pressé. Veuillez donc prendre votre temps avec 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 satisfont complètement aux exigences). Idéalement, j'espère que cela a mis en œuvre 2/3rs de notre chemin dans la version bêta, qui est dans 2 mois.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top