Подсветка синтаксиса в Javascript - PullRequest
1 голос
/ 26 июля 2011

В настоящее время я работаю над подсветкой синтаксиса в Javascript.

Для сопоставления строк я бы использовал что-то вроде этого:
code = code.replace(/("([^"\\]*(\\.[^"\\]*)*)")/gm, "<span class=\"string\">$1</span>"); // string

Это будет соответствовать целому числу:
code = code.replace(/(\d+)/gm, "<span class=\"number\">$1</span>");

Теперь моя проблема в том, что целое число в строке тоже будет соответствовать. Это не проблема выделения, а производительности, так как я мог бы использовать
code > span.number вместо code span.number.
Любые предложения по предотвращению такого поведения?


Я также прочитал Языковые грамматики TextMate , которые кажутся мне очень мощными Однако я понятия не имею, как я мог бы реализовать это в Javascript.
Некоторая помощь будет очень признательна.


Я знаю, что есть много хорошего синтаксиса, выделяющего вещи, но ни один из них не обеспечивает действительно хорошую поддержку Objective-C.

Ответы [ 2 ]

5 голосов
/ 26 июля 2011

Если вы хотите написать режим объективного C для Google Code Prettify Я был бы рад включить его.

Пример режима для языков стиля OCAML / SML можно посмотреть наhttp://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-ml.js

Строки, подобные

[PR['PR_STRING'],
 /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/, null, '"\'']

, говорят, что это правило подсветки для строки, и строка соответствует регулярному выражению, приведенному выше (последовательность не-кавычек или escape-последовательностей внутри doubleкавычки или последовательность не-одиночных кавычек или escape-последовательностей внутри одинарных кавычек).

Это правило

[PR['PR_LITERAL'],
 /^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],

соответствует числовым литералам.Числовой литерал - необязательный знак, за которым следует один из шестнадцатеричного литерала, точка, за которой следует дробь, или целая часть, за которой следует дробь, а последние два могут иметь необязательный показатель степени в конце.

Движок prettify кода заботится о том, чтобы строки считались строками, а вещи, которые выглядят как числа внутри строк, не принимаются за числа.

0 голосов
/ 26 июля 2011

Может быть, вы захотите взглянуть на SyntaxHighlighter Алекса Горбачева . В настоящее время нет модуля для Objective C, но он предоставляет руководство для разработки "пользовательских кистей".

...