OberonCore
https://forum.oberoncore.ru/

Разработка лексера Pygments для Оберона/КП
https://forum.oberoncore.ru/viewtopic.php?f=28&t=5113
Страница 1 из 2

Автор:  Роман М. [ Суббота, 17 Май, 2014 13:28 ]
Заголовок сообщения:  Разработка лексера Pygments для Оберона/КП

Предлагаю доработать готовый лексер Модулы-2 для Оберона/КП. Тогда GitHub, BitBucket и другие смогут подсвечивать плоский исходный текст.
Код:
class Modula2Lexer(RegexLexer):
    """
    For `Modula-2 <http://www.modula2.org/>`_ source code.

    Additional options that determine which keywords are highlighted:

    `pim`
        Select PIM Modula-2 dialect (default: True).
    `iso`
        Select ISO Modula-2 dialect (default: False).
    `objm2`
        Select Objective Modula-2 dialect (default: False).
    `gm2ext`
        Also highlight GNU extensions (default: False).

    .. versionadded:: 1.3
    """
    name = 'Modula-2'
    aliases = ['modula2', 'm2']
    filenames = ['*.def', '*.mod']
    mimetypes = ['text/x-modula2']

...
...
...


Вложения:
modula2lexer_pygments.py.txt [7.69 КБ]
Скачиваний: 324

Автор:  ilovb [ Суббота, 17 Май, 2014 14:51 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Я бы с удовольствием взялся, но слишком плохо ориентируюсь в питоне.

Автор:  Роман М. [ Суббота, 17 Май, 2014 15:29 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

ilovb писал(а):
Я бы с удовольствием взялся, но слишком плохо ориентируюсь в питоне.

Взгляни на прикреплённый исходник и ты увидишь что ничего сложного в нём нет.

Автор:  ilovb [ Суббота, 17 Май, 2014 16:34 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Да, вроде все просто.
Создал реп: https://github.com/Spirit-of-Oberon/cp-pygments
Let's do it!

Автор:  ilovb [ Суббота, 17 Май, 2014 17:13 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Сделал первое приближение: https://github.com/Spirit-of-Oberon/cp- ... ca969697f3

Автор:  ilovb [ Суббота, 17 Май, 2014 19:32 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

В общем нужно тестить: https://github.com/Spirit-of-Oberon/cp- ... tree/ilovb

Роман, не в курсе куда этот лексер можно воткнуть чтоб проверить?

Автор:  Роман М. [ Суббота, 17 Май, 2014 20:54 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Хранилище для разработки Pygments находится на BitBucket.
В частности, лексер для компилируемых языков добавляют в файл pygments/lexers/compiled.py

Задачей Linguist является анализ дерева исходников хранилища в Гитхабе на предмет процентного соотношения используемых языков прог-я, подсветки синтаксиса программ при помощи обёртки pygments.rb, и также других вещей.

Цитата:
The actual syntax highlighting is handled by our Pygments wrapper, pygments.rb.
https://github.com/tmm1/pygments.rb
pygments.rb - это обёртка Руби над питоновским Pygments.

Так что на первом этапе достаточно протестировать посветку синтаксиса в Pygments, который преобразует исходник в файл HTML.

Как только подсветка будет готова, дальнейший порядок действий такой же как и в этом случае:
Add APL language #1013

pchaigno писал(а):
pchaigno commented on Mar 24

I don't think the APL lexer is integrated in the Pygment's version used by linguist yet.
You need to wait for the next release.
When the APL lexer will be available, reopen your PR and I'll be glad to help :)

Автор:  ilovb [ Суббота, 17 Май, 2014 21:27 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Спасибо за разъяснения

Автор:  Роман М. [ Суббота, 17 Май, 2014 22:32 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Добавил правку:
missing identifiers added to cp_pervasives

Нюансы при проверке:
Если выполнять пошаговую проверку
Код:
make mapfiles

как написано в руководстве, то получаем ошибку
Цитата:
...
(cd pygments/formatters; python _mapping.py)
Traceback (most recent call last):
File "_mapping.py", line 19, in <module>
from pygments.formatters.bbcode import BBCodeFormatter
ImportError: No module named pygments.formatters.bbcode
make: *** [mapfiles] Error 1

Тогда нужно попроовать так:
Код:
PYTHONPATH=$PWD make mapfiles


Затем проверяем генерацию подсветки синтаксиса:
Код:
./pygmentize -O full -f html -o example.html example.cp

Примечание: по какой-то причине процесс зацикливается с загрузкой процессора 100%. Я его завершаю принудительно. Думаю, это ненормально.

Далее. Само по себе хранилище cp-pygments не имеет смысла. В любом случае, как я уже писал ранее, требуется сначала добавить класс ComponentPascalLexer в файл compiled.py хранилища pygments-main, предварительно создав его форк на BitBucket'е. Следующим шагом нужно отправить PR автору pygments-main. После того как он выпустит новую версию, править linguist и отправлять PR для добавления в Гитхаб.

Автор:  Роман М. [ Суббота, 17 Май, 2014 22:37 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Забыл указать что таки файл HTML генерируется с подстветкой. Модуль Kernel подсвечивается.

Автор:  ilovb [ Воскресенье, 18 Май, 2014 14:47 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Роман М. писал(а):
Примечание: по какой-то причине процесс зацикливается с загрузкой процессора 100%. Я его завершаю принудительно. Думаю, это ненормально.


example.cp в студию! :)

Цитата:
Само по себе хранилище cp-pygments не имеет смысла.

Ну это временно. Пока не отладим.

Автор:  ilovb [ Воскресенье, 18 Май, 2014 15:36 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Цитата:
class CppLexer(CFamilyLexer):
"""
For C++ source code with preprocessor directives.
"""
name = 'C++'
aliases = ['cpp', 'c++']
filenames = ['*.cpp', '*.hpp', '*.c++', '*.h++',
'*.cc', '*.hh', '*.cxx', '*.hxx',
'*.C', '*.H', '*.cp', '*.CPP']
mimetypes = ['text/x-c++hdr', 'text/x-c++src']
priority = 0.1


Не в этом ли проблема?

Автор:  Роман М. [ Воскресенье, 18 Май, 2014 15:45 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

ilovb писал(а):
Роман М. писал(а):
Примечание: по какой-то причине процесс зацикливается с загрузкой процессора 100%. Я его завершаю принудительно. Думаю, это ненормально.


example.cp в студию! :)

Цитата:
Само по себе хранилище cp-pygments не имеет смысла.

Ну это временно. Пока не отладим.

Кажется, то был файл конвертера в XHTML.

Автор:  ilovb [ Воскресенье, 18 Май, 2014 18:37 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Роман, что то у меня не проходит make mapfiles
Вернее проходит, но Component Pascal в _mapping.py не попадает. И ничего соответственно не работает. А html генерится по плюсовому лексеру...

Автор:  Роман М. [ Воскресенье, 18 Май, 2014 20:08 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Примени этот патч к чистому хранилищу

затем
Код:
PYTHONPATH=$PWD make mapfiles


Вложения:
cp.patch.txt [5.74 КБ]
Скачиваний: 324

Автор:  ilovb [ Воскресенье, 18 Май, 2014 20:09 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Разобрался. В общем сделал форк: https://bitbucket.org/boris_ilov/pygmen ... c5a802742f

Последовательность действий в венде такая:
1. Ставим питона 2.7
2. Клонируем реп
3. Копируем папку pygments из репа в C:\Python27\Lib (ну или где он у вас там)
4. Запускаем msys (у меня установлен вместе с mingw)
делаем так:
cd /c/hg/pygments-main
make mapfiles
5. Копируем папку pygments из репа в C:\Python27\Lib (ога, опять)
6. делаем python.exe pygmentize -O full -f html -o Kernel.html Kernel.cp
7. срубаем процесс когда надоест смотреть на зависшее окно
Профит! :lol:

Автор:  Роман М. [ Воскресенье, 18 Май, 2014 20:16 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

А.. ну а Линуксе попроще будет. Питон и так стоит. :)

Не понял зачем нужен 5-й пункт.

Автор:  ilovb [ Воскресенье, 18 Май, 2014 20:22 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

Починил! https://bitbucket.org/boris_ilov/pygmen ... eff8be0d60

Во я нуб... :D

Самое забавное, что ошибка найдена благодаря подсветке питона в ST3. Кто там говорил, что подсветка зло? :lol:

Автор:  Роман М. [ Воскресенье, 18 Май, 2014 20:22 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

ilovb писал(а):
Цитата:
class CppLexer(CFamilyLexer):
"""
For C++ source code with preprocessor directives.
"""
name = 'C++'
aliases = ['cpp', 'c++']
filenames = ['*.cpp', '*.hpp', '*.c++', '*.h++',
'*.cc', '*.hh', '*.cxx', '*.hxx',
'*.C', '*.H', '*.cp', '*.CPP']
mimetypes = ['text/x-c++hdr', 'text/x-c++src']
priority = 0.1


Не в этом ли проблема?

Отобрал это расширение у плюсов. Проблема с зацикливанием осталась. Значит, расширение не виновато.

Автор:  Роман М. [ Воскресенье, 18 Май, 2014 20:24 ]
Заголовок сообщения:  Re: Разработка лексера Pygments для Оберона/КП

ilovb писал(а):
Починил! https://bitbucket.org/boris_ilov/pygmen ... eff8be0d60

Во я нуб... :D

Самое забавное, что ошибка найдена благодаря подсветке питона в ST3. Кто там говорил, что подсветка зло? :lol:

Точно! :) Теперь работает без зависаний.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/