Запись маркера синтаксиса

Вы должны использовать проекции звезд только в том случае, если вы не знаете конкретный параметр типа для универсального типа. Когда вы используете их, компилятор не позволит вам делать небезопасные действия с параметризованным типом. Например, вы видели, что не можете передать какой-либо параметр в onSuccess, так как вы по существу сказали компилятору, что не знаете, каким должен быть его тип.

Тогда исправление заключается в том, чтобы вместо функции createRequest задать параметр типа, и сделать как Observable того же типа, так и обратный вызов, который вы хотите вызвать:

fun  createRequest(source: Observable, callback: ResponseCallback) {
    ...
    callback.onSuccess(it) // works, since you're passing in a T to a method that requires a T
    ...
}

21
задан Alan Moore 1 May 2009 в 15:25
поделиться

5 ответов

Подсветки синтаксиса могут работать двумя очень общими способами. Первый реализует полный лексер и анализатор для выделенного языка (языков), точно идентифицируя тип каждого токена (ключевое слово, имя класса, имя экземпляра, тип переменной, директива препроцессора ...). Это предоставляет всю информацию, необходимую для точного выделения кода в соответствии с какой-либо спецификацией (ключевые слова красным цветом, названия классов синим цветом, что у вас есть).

Второй способ - это что-то вроде Google Code Prettify использует, где вместо реализации одного лексера / синтаксического анализатора на язык используется пара очень общих синтаксических анализаторов, которые могут выполнять приличную работу в большинстве синтаксисов. Этот маркер, например, сможет достаточно хорошо анализировать и выделять любой C-подобный язык, потому что его лексер / парсер может идентифицировать общие компоненты этих типов языков.

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

21
ответ дан 29 November 2019 в 20:35
поделиться

В подкасте StackOverflow № 50 Стив Йегге немного рассказывает о своем проекте по созданию какого-то общего механизма подсветки. Не готовый продукт и, возможно, более сложный, чем вы ищете, но может быть что-то интересное.

4
ответ дан 29 November 2019 в 20:35
поделиться

Это может помочь, если вы объясните, для чего предназначен этот подсветчик синтаксиса. Если вы пишете это в ActionScript, ваша идея - иметь текстовое поле во флэш-фильме и выделить синтаксис после нажатия кнопки отправки? Или вы хотите прочитать текст из какого-либо веб-сервиса и затем отобразить выделенный синтаксис? ... мне трудно помочь, потому что мне трудно представить, что вы делаете

Однако подсветка синтаксиса читает текст, а затем сравнивает строки кода с некоторыми регулярными выражениями, которые помогают подсвечивателю синтаксиса выяснить что означают слова Например, он может прочитать слово «function» или «int» как зарезервированные слова и заменить их текстом html:

<span class="reserved">function</span>, <span class="reserved"></span>

, если у вас есть css и вы хотите зарезервированные слова красным,

3
ответ дан 29 November 2019 в 20:35
поделиться

К сожалению, я никогда не использовал Actionscript, поэтому не могу помочь с этой частью.

Но кроме этого, хорошим началом написания подсветки синтаксиса было бы посмотреть на существующие. Например, vim имеет файлы синтаксиса в виде обычных текстовых файлов, так что вы можете посмотреть их для начала. Там есть куча регулярных выражений (регулярные выражения бывают разных видов, но они не так уж отличаются ...), так что в этой части вы можете взглянуть на какую-то книгу.

Лично я нашел Начало регулярных выражений хорошим. Овладение регулярными выражениями также подходит для более продвинутых предметов. Справочник карманных выражений , с другой стороны, удобен для определения различий в вышеупомянутых ароматах,

2
ответ дан 29 November 2019 в 20:35
поделиться

Я опубликовал инструмент раскраски кода SQL в моем блоге некоторое время назад: http://gruchalski.com/2009/04/26/flex-textrange-performance-issue-on-linux/

You can find a link to sqlcodecoloring.zip with the source. It is implemented using tokenizer and a TextRange class.

Another link, sql code coloring as part of the prototype app: http://github.com/radekg/mysqlinterface/tree/master

1
ответ дан 29 November 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: