Автор Тема: Sublime Text 2  (Прочитано 125026 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #225 : Ноябрь 11, 2013, 06:09:28 pm »
Сделал подстветку Oberon rev 2013 для Sublime. Брать тут: https://github.com/vladfolts/oberonjs/blob/master/Oberon.tmLanguage

Все полезняшки думаю будем в один репозиторий постепенно сгребать. Чтобы не терялось, и чтобы скачавший получил сразу готовый набор инструментов. В том числе и биндинги/либы тоже будут туда же добавляться.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #226 : Ноябрь 11, 2013, 06:10:12 pm »
Да, выглядит это как-то так:
http://cdn.imghack.se/images/a87b67aac36075aaf3102992c1b40b4d.png
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Sublime Text 2
« Ответ #227 : Ноябрь 11, 2013, 06:24:42 pm »
Круть!  :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #228 : Ноябрь 11, 2013, 11:45:11 pm »
Написал плагин для Sublime который автоматом ключевые слова и предопределенные идентификаторы делает КАПСОМ.

Пример работы: http://youtu.be/p_MG5yX1z0g (и да, там виден в одном месте баг)

Осталось еще сделать автоотступы.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #229 : Ноябрь 11, 2013, 11:47:35 pm »
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #230 : Ноябрь 12, 2013, 09:38:48 am »
Грамматика и плагин немного переместились внутри репозитория. Теперь оно тут: https://github.com/vladfolts/oberonjs/tree/master/Sublime%20Text
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #231 : Ноябрь 12, 2013, 09:52:07 am »
Специфики Оберона эта расцветка не учитывает. Режет глаз разноцветный RECORD END и POINTER TO

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #232 : Ноябрь 12, 2013, 10:00:05 am »
Специфики Оберона эта расцветка не учитывает. Режет глаз разноцветный RECORD END и POINTER TO
А лексера не достаточно для полноценной расцветки любого языка.

В принципе не проблема загнать все ключевые слова в один класс, тогда они будут одного цвета. В общем, с классификацией еще поиграюсь.

Если есть идеи как именно оная расцветка должна смотреться, то мысли эти лучше изложить. Я посмотрю что можно сделать.

PS. Собственно расцветку (тему) можно вертеть как угодно, оно языконезависимо - едина и для плюсов и для Оберона и брейнфака, можно убрать вовсе. А вот этот классификатор лексем убирать нельзя. Ибо результатами его трудов например OberonAssistant пользуется.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #233 : Ноябрь 12, 2013, 10:21:47 am »
Да, я прикинул, с POINTER TO и RECORD .. END можно пофиксить. Займусь как только более актуальные вещи для Sublime доделаю (автоотступы, навигацию по модулю и багофикс в OberonAssistant'e того самого бага что на виде виден).
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #234 : Ноябрь 12, 2013, 11:50:23 am »
Мне достаточно подсветки закомментированного кода. Не подскажите, как это просто сделать для Оберона, не затрагивая расцветки для других языков?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #235 : Ноябрь 12, 2013, 03:38:53 pm »
Мне достаточно подсветки закомментированного кода. Не подскажите, как это просто сделать для Оберона, не затрагивая расцветки для других языков?

Если хочется только комментарии, то вычистить из Oberon.tmLanguage все, кроме распознавания комментариев.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #236 : Ноябрь 12, 2013, 05:20:41 pm »
Мне достаточно подсветки закомментированного кода. Не подскажите, как это просто сделать для Оберона, не затрагивая расцветки для других языков?

Если хочется только комментарии, то вычистить из Oberon.tmLanguage все, кроме распознавания комментариев.
Тогда автокапс будет работать и в строковых литералах.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #237 : Ноябрь 12, 2013, 05:35:28 pm »
На самом деле, видимо, есть более элегантное и простое решение. Доберусь до работы как - попробую.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #238 : Ноябрь 13, 2013, 05:21:41 pm »
Мне достаточно подсветки закомментированного кода. Не подскажите, как это просто сделать для Оберона, не затрагивая расцветки для других языков?

Итак, хотя я все еще не понимаю зачем в этом случае подсветка других языков (скажем С++ она еще менее нужна нежели Оберону, особенно лексерная подсветка), задача вполне легко решаема.

Для начала результат:


Теперь путь достижения - менять правила классификатора лексем для Оберона естественно не будем. Будем менять правила раскраски отклассифицированных лексем конкретно для Оберона в конкретной теме оформления.

Открываем тему оформления для которой хотим это дело поменять, и добавляем правила для каждого из классов лексем Оберона. В json виде это будет добавление вот таких вот строчек:
{ name = 'keyword.control.oberon';
scope = 'keyword.control.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'keyword.operator.oberon';
scope = 'keyword.operator.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'keyword.other.oberon';
scope = 'keyword.other.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'storage.type.oberon';
scope = 'storage.type.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'storage.type.oberon';
scope = 'storage.type.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'constant.language.oberon';
scope = 'constant.language.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'support.function.oberon';
scope = 'support.function.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'support.type.oberon';
scope = 'support.type.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'constant.numeric.oberon';
scope = 'constant.numeric.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'string.quoted.oberon';
scope = 'string.quoted.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
},
{ name = 'string.other.oberon';
scope = 'string.other.oberon';
settings = {
fontStyle = '';
foreground = '#F8F8F2';
};
}

А в xml-виде (в котором оно сохраняется) это будет что-то вроде:
<dict>
<key>name</key>
<string>keyword.control.oberon</string>
<key>scope</key>
<string>keyword.control.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.operator.oberon</string>
<key>scope</key>
<string>keyword.operator.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.other.oberon</string>
<key>scope</key>
<string>keyword.other.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type.oberon</string>
<key>scope</key>
<string>storage.type.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type.oberon</string>
<key>scope</key>
<string>storage.type.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>constant.language.oberon</string>
<key>scope</key>
<string>constant.language.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.function.oberon</string>
<key>scope</key>
<string>support.function.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.type.oberon</string>
<key>scope</key>
<string>support.type.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>constant.numeric.oberon</string>
<key>scope</key>
<string>constant.numeric.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.quoted.oberon</string>
<key>scope</key>
<string>string.quoted.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.other.oberon</string>
<key>scope</key>
<string>string.other.oberon</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F2</string>
</dict>
</dict>

Ну собственно и всё. Теперь имеем конкретные правила для данной темы оформления конкретно для Оберона.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Sublime Text 2
« Ответ #239 : Ноябрь 13, 2013, 07:46:48 pm »
Спасибо, буду пробовать.
Раскраска для Си мне помогает отличить ключевые слова от идентификаторов. Также легче разобраться в многострочных строках и однострочных комментариях и макросах (звучит как нелепость, но факт), да и просто в строках с ошибочно экранированными кавычками, что у меня случается.
В Обероне предопределенные имена и ключевые слова как кирпичи - ни с чем не спутаешь. Строки - действительно строки, экранированных символов нет, тип не спутаешь с именем переменной. В последнем случае лексерная раскраска конечно не поможет.