В настоящее время mathematica.SE находится в стадии частного бета-тестирования и будет открыт для публики через несколько дней. Stack Overflow и связанные с ним сайты используют prettify.js, однако система Mathematica не является поддерживаемым языком. Было бы очень здорово иметь собственный скрипт подсветки для нашего сайта, и я прошу помощи сообщества JavaScript и CSS в разработке такого скрипта и сопутствующего CSS.
Ниже я перечислил несколько основных требований, чтобы он передавал большинство возможностей схемы подсветки системы Mathematica по умолчанию (игнорируя то, что известно только внутреннему парсеру). Я также назвал цвета обобщенно - шестнадцатеричные коды цветов можно выбрать из предоставленных мною скриншотов (далее ниже). Я также добавил примеры кода к скриншотам, чтобы люди могли протестировать его.
Комментарии
Они вводятся как (* комментарий *)
. Поэтому все, что находится между ними, должно быть выделено серым цветом.
Строки
Они вводятся как "string"
(одинарные кавычки не поддерживаются), и должны быть выделены розовым цветом.
Операторы/короткие обозначения
Помимо стандартных +, -, *, /, ^, ==
и т.д., система Mathematica имеет несколько других операторов и коротких обозначений. Наиболее часто встречающиеся из них:
@, @@, @@@, /@, //@, //, ~, /., //., ->, :>, /:, /;, :=, :^=, =..,
&, |, ||, &&, _, __, ___, ;;, [[, ]], >, ~~,
Все они, а также скобки, скобки и скобки должны быть выделены черным цветом.
Объекты шаблонов и слоты
Объекты шаблонов начинаются с буквы и имеют либо _
, либо __
, либо ___
, как, например, x_
, x__
и x___
. Они также могут иметь дополнительные буквы после подчеркивания, как x_abc
и т.д. Все они должны быть выделены зеленым цветом.
Слоты - это #
и ##
, за ними также может следовать целое число, как #1
, ##4
и т.д., и также должны быть выделены зеленым цветом.
Оба эти понятия (объекты шаблона и слоты) обычно завершаются оператором/скобкой/короткой формой из пункта 3 выше.
Функции/переменные
Функции и переменные - это довольно свободная терминология, но для целей данного сообщения она подходит. Все, что не попадает в вышеуказанные 4 пункта, может быть выделено черным цветом. Система Mathematica часто использует обратные знаки `
в коде, и их следует считать частью имени функции/переменной. E.g., abcd`defg
. Знаки доллара $
в любом месте имени переменной должны рассматриваться как буквы (т.е. ничего особенного).
Для всех вышеперечисленных знаков, если они появляются внутри строк, они должны рассматриваться как таковые, т.е. "@~#
должен быть выделен розовым цветом.
?
и затем некоторые буквы, то часть, следующая за _
должна быть выделена черным цветом. Например, в x__?abc
часть x__
должна быть зеленого цвета, а ?abc
- черного. Вот небольшой набор примеров, со скриншотом в конце, показывающим, как это выглядит в системе 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 в разделе "Additional nice to haves", т.е. то, что строчные буквы выделяются синим цветом.
Также, вы можете заметить, что некоторые переменные выделены оранжевым цветом - я намеренно не включил это как требование, так как я думаю, что это будет намного сложнее сделать без парсера, который знает систему 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]
Честно говоря, я не знаю ответа ни на один из этих вопросов. Я просто перечислил некоторые основные возможности, которые все на mathematica.SE хотели бы иметь, и некоторые дополнительные, которые были бы вишенкой на вершине. Однако, дайте мне знать, если эти возможности слишком сложны для реализации. Мы можем разработать меньшее подмножество функций.
В знак признательности за эту помощь, вы все имеете вечную благодарность сообщества системы Mathematica и в дополнение к этому, Я назначу вознаграждение в размере 500 каждому, кто внесёт значительный вклад в это (если это будет сделано по частям разными людьми) - я буду полагаться на ваши голоса/комментарии/выводы по ответам, чтобы решить, что является значительным (возможно, более одного вознаграждения одному человеку, если он проделал всю работу). Выполнение "Дополнительных приятных мелочей" дает автоматические +500 независимо от предыдущих щедрот, так что вы также можете опираться на работу других, даже если вы не сделали первую половину. Я также могу периодически размещать меньшие щедроты, чтобы привлечь пользователей, которые, возможно, не видели этот вопрос, так что если вы заработаете эти щедроты, они будут в дополнение к "щедротам за существующий ответ", которые будут определены ближе к концу.
Наконец, я не тороплюсь. Поэтому, пожалуйста, не торопитесь с этим вопросом. Баунти - это всегда вариант, пока он не будет реализован SE (или если будет установлено, что существующие ответы полностью удовлетворяют требованиям). В идеале, я надеюсь, что это будет реализовано на 2/3 пути к бета-версии, то есть через 2 месяца.