делаем режим для Активного Оберона для Visual Studio Code

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

делаем режим для Активного Оберона для Visual Studio Code

Сообщение БудДен » 29.10.18 00:37

Здесь упоминается blackboxcomponentbuilder, но работы по нему закрыты и на самом деле всё это предназначено для ЯОС.
1. Клонировать репозиторий https://tvoygit.ru/budden/vscode-langua ... entbuilder - пока релизов нет. Если вам повезёт, то что-нибудь заработает.
2. В директории склонированного репозитория - другая директория. Скопировать эту директорию в %USERPROFILE%\.vscode\extensions
3. Файл settings.json (Ctrl-Shift-P / Параметры: Открыть параметры (JSON)
и вставляем в объект самого верхнего уровня новое поле:

Код: Выделить всё

    "editor.tokenColorCustomizations": {
        "textMateRules": [
            { "scope": "keyword.blackboxcomponentbuilder",
              "settings": { "foreground": "#909090" } 
            },
            { "scope": "storage.support.type.blackboxcomponentbuilder",
              "settings": { "foreground": "#909090" }
            },
            { "scope": "constant.language.blackboxcomponentbuilder",
                "settings": { "foreground": "#909090" }
              },
            { "scope": "keyword.control.blackboxcomponentbuilder",
                "settings": { "foreground": "#FF9000" }
              }
         ]
    }
4. Перезапустить VS Code
5. Файлы .Mod понимаются автоматически. Для раскраски файлов .ярм, нужно
увидеть в строке состояния "Простой текст", нажать там и выбрать BlackBoxComponentBuilder .

====================================================================
Как собирать для отладки?

Код: Выделить всё

1. git clone https://github.com/budden/vscode-language-blackboxcomponentbuilder
2. Заходим в корень репозитория
3. npm install
4. npm run vscode:prepublish (или npm run compile)
5. Заходим в студию и открываем (Су-K Cу-О) корень репозитория.
6. В settings.json студии нужно вписать то, что вписано!)
7. F5. Открывается доп. окно. 
8. В доп окне раскраска должна работать. 
======================================================================

Это пока сохраняю, но скоро сотру.
Файл c:\Users\<ИмяПользователя>\.vscode\extensions\alefragnani.pascal-6.4.0\syntaxes\pascal.tmLanguage

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>fileTypes</key>
	<array>
		<string>kp</string>
		<string>cp</string>
		<string>mod</string>
	</array>
	<key>keyEquivalent</key>
	<string>^~P</string>
	<key>name</key>
	<string>Pascal</string>
	<key>patterns</key>
	<array>
		<dict>
			<key>match</key>
			<string>\b(ABSTRACT|ARRAY|BEGIN|BY|CASE|CLOSE|CONST|DIV|ELSE|ELSIF|EMPTY|END|EXIT|EXTENSIBLE|IF|IMPORT|IN|IS|LIMITED|LOOP|MOD|MODULE|NIL|OF|OR|OUT|POINTER|PROCEDURE|RECORD|THEN|TO|TYPE|UNTIL|VAR|WITH)\b</string>
			<key>name</key>
			<string>keyword.pascal</string>
		</dict>
		<dict>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>storage.type.prototype.pascal</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>entity.name.function.prototype.pascal</string>
				</dict>
			</dict>
			<key>match</key>
			<string>\b(?i:(function|procedure|constructor|destructor))\b\s+(\w+(\.\w+)?)(\(.*?\))?;\s*(?=(?i:attribute|forward|external))</string>
			<key>name</key>
			<string>meta.function.prototype.pascal</string>
		</dict>
		<dict>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>storage.type.function.pascal</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>entity.name.function.pascal</string>
				</dict>
			</dict>
			<key>match</key>
			<string>\b(?i:(function|procedure|constructor|destructor|property|read|write))\b\s+(\w+(\.\w+)?)</string>
			<key>name</key>
			<string>meta.function.pascal</string>
		</dict>
			<dict>
			<key>match</key>
			<string>\b(?i:(self|result))\b</string>
			<key>name</key>			
			<string>token.variable</string>
		</dict>	
		<dict>
			<key>match</key>
			<string>\b(?i:(and|or))\b</string>
			<key>name</key>			
			<string>keyword.operator.pascal</string>
		</dict>	
		<dict>
			<key>match</key>
			<string>\b(WHILE|REPEAT|RETURN|DO|FOR)\b</string>
			<key>name</key>			
			<string>keyword.control.pascal</string>
		</dict>	

		<dict>
			<key>begin</key>
			<string>\{\$</string>
			<key>captures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>string.regexp</string>
				</dict>
			</dict>
			<key>end</key>
			<string>\}</string>
			<key>name</key>
			<string>string.regexp</string>
		</dict>	

		<dict>
			<key>match</key>
			<string>\b(?i:(ansichar|ansistring|boolean|byte|cardinal|char|chajj|comp|currency|double|dword|extended|file|integer|int64|longint|longword|nativeint|nativeuint|olevariant|pansichar|pchar|pwidechar|pointer|real|shortint|shortstring|single|smallint|string|uint64|variant|widechar|widestring|word|wordbool))\b</string>
			<key>name</key>			
			<string>storage.support.type.pascal</string>
		</dict>	
		<dict>
			<key>match</key>
			<string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b</string>
			<key>name</key>
			<string>constant.numeric.pascal</string>
		</dict>
		<dict>
			<key>match</key>
			<string>\$[0-9a-fA-F]{1,16}\b</string>
			<key>name</key>
			<string>constant.numeric.pascal</string>
		</dict>
		<dict>
			<key>match</key>
			<string>\b(?i:(true|false|nil))\b</string>
			<key>name</key>
			<string>constant.language.pascal</string>
		</dict>
	
		<dict>
			<key>include</key>
			<string>#multilinecomment</string>
		</dict>
	
		<dict>
			<key>applyEndPatternLast</key>
			<integer>1</integer>
			<key>begin</key>
			<string>'</string>
			<key>beginCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.begin.pascal</string>
				</dict>
			</dict>
			<key>end</key>
			<string>'</string>
			<key>endCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.end.pascal</string>
				</dict>
			</dict>
			<key>name</key>
			<string>string.quoted.single.pascal</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>''</string>
					<key>name</key>
					<string>constant.character.escape.apostrophe.pascal</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>applyEndPatternLast</key>
			<integer>1</integer>
			<key>begin</key>
			<string>"</string>
			<key>beginCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.begin.pascal</string>
				</dict>
			</dict>
			<key>end</key>
			<string>"</string>
			<key>endCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.end.pascal</string>
				</dict>
			</dict>
			<key>name</key>
			<string>string.quoted.single.pascal</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>""</string>
					<key>name</key>
					<string>constant.character.escape.apostrophe.pascal</string>
				</dict>
			</array>
		</dict>
	</array>
	<key>repository</key>
	<dict>
		<key>multilinecomment</key>
		<dict>
			<key>begin</key>
			<string>\(\*</string>
			<key>contentName</key>
			<string>comment</string>
			<key>end</key>
			<string>\*\)</string>
			<key>name</key>
			<string>comment</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>include</key>
					<string>#multilinecomment</string>
					<key>name</key>
					<string>comment</string>
				</dict>
			</array>
		</dict>
	</dict>	
	<key>scopeName</key>
	<string>source.pascal</string>
	<key>uuid</key>
	<string>F42FA544-6B1C-11D9-9517-000D93589AF6</string>
</dict>
</plist>
Файл settings.json (Ctrl-Shift-P / Параметры: Открыть параметры (JSON)
и вставляем в объект самого верхнего уровня новое поле:

Код: Выделить всё

    "editor.tokenColorCustomizations": {
        "textMateRules": [
            { "scope": "keyword.pascal",
              "settings": { "foreground": "#909090" } 
            },
            { "scope": "storage.support.type.pascal",
              "settings": { "foreground": "#909090" }
            },
            { "scope": "constant.language.pascal",
                "settings": { "foreground": "#909090" }
              },
            { "scope": "keyword.control.pascal",
                "settings": { "foreground": "#FF9000" }
              }
  
        ]
    }
Получается уныло, но сносно. Ключевые слова сделаны серыми, чтобы они меньше загромождали текст.
Вложения
раскраска-компонентного-паскаля.png
раскраска-компонентного-паскаля.png (79.02 КБ) 906 просмотров
Последний раз редактировалось БудДен 30.05.23 12:49, всего редактировалось 7 раз.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: делаем режим для компонентного Паскаля для Visual Studio Code

Сообщение БудДен » 23.12.18 18:24

Теперь надо сделать обмен строковыми сообщениями. Подсматриваем в Яр/clcon, файл c:\yar\lp\clcon\swank-io.tcl, процедура ::tkcon::SwankReadMessageFromStream - может быть, оттуда взять и формат сообщений, да и вообще взять clcon вместо vscode?

Пример сервера на ББ - c:\ob\nkp\k\Comm\Docu\ObxStreamsServer.tdc
Пример работы с фрагментами, нарезанными в пакеты - c:\ob\nkp\k\Comm\Mod\ObxHttp.kp

atz
Сообщения: 139
Зарегистрирован: 21.12.18 22:45

Re: делаем режим для компонентного Паскаля для Visual Studio Code

Сообщение atz » 23.12.18 20:15

БудДен писал(а):
23.12.18 18:24
clcon вместо vscode?
И лисп вместо оберона... Кстати почему произошёл отказ от sbcl? (я пропустил этот момент)

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: делаем режим для Оберона КП для Visual Studio Code

Сообщение БудДен » 23.12.18 20:46

Там целый ряд причин, я про них писал уже где-то. Достаточная причина вот какая: России нужна защищённая ОС, и SBCL не может служить фундаментом для её построения ввиду своей высокой сложности. ББЦБ (если брать компилятор) гораздо проще. А простота критична для ИБ.
Последний раз редактировалось БудДен 02.01.19 11:57, всего редактировалось 1 раз.

atz
Сообщения: 139
Зарегистрирован: 21.12.18 22:45

Re: делаем режим для компонентного Паскаля для Visual Studio Code

Сообщение atz » 23.12.18 21:20

Хорошо. Удачи в делах :)

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: делаем режим для Оберона КП для Visual Studio Code

Сообщение БудДен » 28.07.19 13:58

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

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: делаем режим для Активного Оберона для Visual Studio Code

Сообщение БудДен » 29.07.19 01:47

Режим для Паскаля убогий. Удалось запустить связку между universal-ctags и global (gtags), по инструкции.

https://www.gnu.org/software/global/glo ... lug_002din

Global скачивал в официальном месте:

https://www.gnu.org/software/global/download.html

Понадобилось создавать свой конфиг для gtags, он теперь выглядит так:

Код: Выделить всё

#
# Copyright (c) 1998, 1999, 2000, 2001, 2002, 2003, 2010, 2011, 2013,
#	2015, 2016, 2017
#	Tama Communications Corporation
#
# This file is part of GNU GLOBAL.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# *
# Configuration file for GNU GLOBAL source code tagging system.
#
# Basically, GLOBAL doesn't need this configuration file ('gtags.conf'),
# because it has default values in itself. If you have this file as
# '/etc/gtags.conf' or "$HOME/.globalrc" then GLOBAL overwrite the default
# values with values in the file.
# Configuration file is also necessary to use plug-in parsers.
#
# The format is similar to termcap(5). You can specify a target with
# GTAGSLABEL environment variable. Default target is 'default'.
#
# If you want to have default values for yourself, it is recommended to
# use the following method:
#
# default:\
#	:tc=default@~/.globalrc:\	<= includes default values from ~/.globalrc.
#	:tc=native:
#
# Please refer to gtags.conf(5) for details.
#
default:\
	:tc=native:
native:\
	:tc=gtags:tc=htags:
user:\
	:tc=user-custom:tc=htags:
ctags:\
	:tc=exuberant-ctags:tc=htags:
new-ctags:\
	:tc=universal-ctags:tc=htags:
pygments:\
	:tc=pygments-parser:tc=htags:
#
# [How to merge two or more parsers?]
#
# Rule: The first matched langmap is adopted.
#
# ":tc=builtin-parser:tc=pygments-parser:" means:
#	If built-in parser exists for the target, it is used.
#	Else if pygments parser exists it is used.
#
native-pygments:\
	:tc=builtin-parser:tc=pygments-parser:tc=htags:
#---------------------------------------------------------------------
# Configuration for gtags(1)
# See gtags(1).
#---------------------------------------------------------------------
common:\
	:skip=HTML/,HTML.pub/,tags,TAGS,ID,y.tab.c,y.tab.h,gtags.files,cscope.files,cscope.out,cscope.po.out,cscope.in.out,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,autom4te.cache/,*.orig,*.rej,*.bak,*~,#*#,*.swp,*.tmp,*_flymake.*,*_flymake,*.o,*.a,*.so,*.lo,*.zip,*.gz,*.bz2,*.xz,*.lzh,*.Z,*.tgz,*.min.js,*min.css:
#
# Built-in parsers.
#
gtags:\
	:tc=common:\
	:tc=builtin-parser:
builtin-parser:\
	:langmap=c\:.c.h,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.hh.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml:
#
# skeleton for user's custom parser.
#
user-custom|User custom plugin parser:\
	:tc=common:\
	:langmap=c\:.c.h:\
	:gtags_parser=c\:$libdir/gtags/user-custom.la:
#
# Plug-in parser to use Universal Ctags.
#
# Most of the following definitions were automatically generated by this command line:
# $ perl maps2conf.pl /usr/local/bin/ctags '$libdir/gtags/universal-ctags.la'
# ('/user/local/bin/ctags' should be replaced with the path of Universal Ctags.)
#
universal-ctags|setting to use Universal Ctags plug-in parser:\
	:tc=common:\
	:ctagscom=/usr/local/bin/ctags:\
	:ctagslib=$libdir/gtags/universal-ctags.la:\
	:langmap=Pascal\:.p.pas.mod:\
	:gtags_parser=Ada\:$ctagslib:\
	:gtags_parser=Ant\:$ctagslib:\
	:gtags_parser=Asm\:$ctagslib:\
	:gtags_parser=Asp\:$ctagslib:\
	:gtags_parser=Autoconf\:$ctagslib:\
	:gtags_parser=Automake\:$ctagslib:\
	:gtags_parser=Awk\:$ctagslib:\
	:gtags_parser=Basic\:$ctagslib:\
	:gtags_parser=BETA\:$ctagslib:\
	:gtags_parser=Clojure\:$ctagslib:\
	:gtags_parser=C\:$ctagslib:\
	:gtags_parser=C++\:$ctagslib:\
	:gtags_parser=CSS\:$ctagslib:\
	:gtags_parser=C#\:$ctagslib:\
	:gtags_parser=ctags\:$ctagslib:\
	:gtags_parser=Cobol\:$ctagslib:\
	:gtags_parser=CUDA\:$ctagslib:\
	:gtags_parser=D\:$ctagslib:\
	:gtags_parser=Diff\:$ctagslib:\
	:gtags_parser=DTD\:$ctagslib:\
	:gtags_parser=DTS\:$ctagslib:\
	:gtags_parser=DosBatch\:$ctagslib:\
	:gtags_parser=Eiffel\:$ctagslib:\
	:gtags_parser=elm\:$ctagslib:\
	:gtags_parser=Erlang\:$ctagslib:\
	:gtags_parser=Falcon\:$ctagslib:\
	:gtags_parser=Flex\:$ctagslib:\
	:gtags_parser=Fortran\:$ctagslib:\
	:gtags_parser=gdbinit\:$ctagslib:\
	:gtags_parser=Go\:$ctagslib:\
	:gtags_parser=HTML\:$ctagslib:\
	:gtags_parser=Iniconf\:$ctagslib:\
	:gtags_parser=ITcl\:$ctagslib:\
	:gtags_parser=Java\:$ctagslib:\
	:gtags_parser=JavaProperties\:$ctagslib:\
	:gtags_parser=JavaScript\:$ctagslib:\
	:gtags_parser=JSON\:$ctagslib:\
	:gtags_parser=LdScript\:$ctagslib:\
	:gtags_parser=Lisp\:$ctagslib:\
	:gtags_parser=Lua\:$ctagslib:\
	:gtags_parser=M4\:$ctagslib:\
	:gtags_parser=man\:$ctagslib:\
	:gtags_parser=Make\:$ctagslib:\
	:gtags_parser=MatLab\:$ctagslib:\
	:gtags_parser=Myrddin\:$ctagslib:\
	:gtags_parser=ObjectiveC\:$ctagslib:\
	:gtags_parser=OldC++\:$ctagslib:\
	:gtags_parser=OldC\:$ctagslib:\
	:gtags_parser=OCaml\:$ctagslib:\
	:gtags_parser=passwd\:$ctagslib:\
	:gtags_parser=Pascal\:$ctagslib:\
	:gtags_parser=Perl\:$ctagslib:\
	:gtags_parser=Perl6\:$ctagslib:\
	:gtags_parser=PHP\:$ctagslib:\
	:gtags_parser=pod\:$ctagslib:\
	:gtags_parser=Protobuf\:$ctagslib:\
	:gtags_parser=puppetManifest\:$ctagslib:\
	:gtags_parser=Python\:$ctagslib:\
	:gtags_parser=QemuHX\:$ctagslib:\
	:gtags_parser=R\:$ctagslib:\
	:gtags_parser=REXX\:$ctagslib:\
	:gtags_parser=Robot\:$ctagslib:\
	:gtags_parser=RpmSpec\:$ctagslib:\
	:gtags_parser=reStructuredText\:$ctagslib:\
	:gtags_parser=Ruby\:$ctagslib:\
	:gtags_parser=Rust\:$ctagslib:\
	:gtags_parser=Scheme\:$ctagslib:\
	:gtags_parser=Sh\:$ctagslib:\
	:gtags_parser=SLang\:$ctagslib:\
	:gtags_parser=SML\:$ctagslib:\
	:gtags_parser=SQL\:$ctagslib:\
	:gtags_parser=SystemdUnit\:$ctagslib:\
	:gtags_parser=Tcl\:$ctagslib:\
	:gtags_parser=Tex\:$ctagslib:\
	:gtags_parser=TTCN\:$ctagslib:\
	:gtags_parser=Vera\:$ctagslib:\
	:gtags_parser=Verilog\:$ctagslib:\
	:gtags_parser=SystemVerilog\:$ctagslib:\
	:gtags_parser=VHDL\:$ctagslib:\
	:gtags_parser=Vim\:$ctagslib:\
	:gtags_parser=WindRes\:$ctagslib:\
	:gtags_parser=YACC\:$ctagslib:\
	:gtags_parser=YumRepo\:$ctagslib:\
	:gtags_parser=Zephir\:$ctagslib:\
	:gtags_parser=DBusIntrospect\:$ctagslib:\
	:gtags_parser=Glade\:$ctagslib:\
	:gtags_parser=Maven2\:$ctagslib:\
	:gtags_parser=PlistXML\:$ctagslib:\
	:gtags_parser=RelaxNG\:$ctagslib:\
	:gtags_parser=SVG\:$ctagslib:\
	:gtags_parser=XSLT\:$ctagslib:
#
# Plug-in parser to use Pygments.
#
pygments-parser|Pygments plug-in parser:\
	:tc=common:\
	:ctagscom=/usr/local/bin/ctags:\
	:pygmentslib=$libdir/gtags/pygments-parser.la:\
	:langmap=ABAP\:.abap:\
	:langmap=ANTLR\:.G.g:\
	:langmap=ActionScript3\:.as:\
	:langmap=Ada\:.adb.ads.ada:\
	:langmap=AppleScript\:.applescript:\
	:langmap=AspectJ\:.aj:\
	:langmap=Aspx-cs\:.aspx.asax.ascx.ashx.asmx.axd:\
	:langmap=Asymptote\:.asy:\
	:langmap=AutoIt\:.au3:\
	:langmap=Awk\:.awk.gawk.mawk:\
	:langmap=BUGS\:.bug:\
	:langmap=Bash\:.sh.ksh.bash.ebuild.eclass:\
	:langmap=Bat\:.bat.cmd:\
	:langmap=BlitzMax\:.bmx:\
	:langmap=Boo\:.boo:\
	:langmap=Bro\:.bro:\
	:langmap=C#\:.cs:\
	:langmap=C++\:.c++.cc.cp.cpp.cxx.h.h++.hh.hp.hpp.hxx.C.H:\
	:langmap=COBOLFree\:.cbl.CBL:\
	:langmap=COBOL\:.cob.COB.cpy.CPY:\
	:langmap=CUDA\:.cu.cuh:\
	:langmap=C\:.c.h:\
	:langmap=Ceylon\:.ceylon:\
	:langmap=Cfm\:.cfm.cfml.cfc:\
	:langmap=Clojure\:.clj:\
	:langmap=CoffeeScript\:.coffee:\
	:langmap=Common-Lisp\:.cl.lisp.el:\
	:langmap=Coq\:.v:\
	:langmap=Croc\:.croc:\
	:langmap=Csh\:.tcsh.csh:\
	:langmap=Cython\:.pyx.pxd.pxi:\
	:langmap=Dart\:.dart:\
	:langmap=Dg\:.dg:\
	:langmap=Duel\:.duel.jbst:\
	:langmap=Dylan\:.dylan.dyl.intr:\
	:langmap=ECL\:.ecl:\
	:langmap=EC\:.ec.eh:\
	:langmap=ERB\:.erb:\
	:langmap=Elixir\:.ex.exs:\
	:langmap=Erlang\:.erl.hrl.es.escript:\
	:langmap=Evoque\:.evoque:\
	:langmap=FSharp\:.fs.fsi:\
	:langmap=Factor\:.factor:\
	:langmap=Fancy\:.fy.fancypack:\
	:langmap=Fantom\:.fan:\
	:langmap=Felix\:.flx.flxh:\
	:langmap=Fortran\:.f.f90.F.F90:\
	:langmap=GAS\:.s.S:\
	:langmap=GLSL\:.vert.frag.geo:\
	:langmap=Genshi\:.kid:\
	:langmap=Gherkin\:.feature:\
	:langmap=Gnuplot\:.plot.plt:\
	:langmap=Go\:.go:\
	:langmap=GoodData-CL\:.gdc:\
	:langmap=Gosu\:.gs.gsx.gsp.vark:\
	:langmap=Groovy\:.groovy:\
	:langmap=Gst\:.gst:\
	:langmap=HaXe\:.hx:\
	:langmap=Haml\:.haml:\
	:langmap=Haskell\:.hs:\
	:langmap=Hxml\:.hxml:\
	:langmap=Hybris\:.hy.hyb:\
	:langmap=IDL\:.pro:\
	:langmap=Io\:.io:\
	:langmap=Ioke\:.ik:\
	:langmap=JAGS\:.jag.bug:\
	:langmap=Jade\:.jade:\
	:langmap=JavaScript\:.js:\
	:langmap=Java\:.java:\
	:langmap=Jsp\:.jsp:\
	:langmap=Julia\:.jl:\
	:langmap=Koka\:.kk.kki:\
	:langmap=Kotlin\:.kt:\
	:langmap=LLVM\:.ll:\
	:langmap=Lasso\:.lasso:\
	:langmap=Literate-Haskell\:.lhs:\
	:langmap=LiveScript\:.ls:\
	:langmap=Logos\:.x.xi.xm.xmi:\
	:langmap=Logtalk\:.lgt:\
	:langmap=Lua\:.lua.wlua:\
	:langmap=MOOCode\:.moo:\
	:langmap=MXML\:.mxml:\
	:langmap=Mako\:.mao:\
	:langmap=Mason\:.m.mhtml.mc.mi:\
	:langmap=Matlab\:.m:\
	:langmap=Modelica\:.mo:\
	:langmap=Modula2\:.mod:\
	:langmap=Monkey\:.monkey:\
	:langmap=MoonScript\:.moon:\
	:langmap=MuPAD\:.mu:\
	:langmap=Myghty\:.myt:\
	:langmap=NASM\:.asm.ASM:\
	:langmap=NSIS\:.nsi.nsh:\
	:langmap=Nemerle\:.n:\
	:langmap=NewLisp\:.lsp.nl:\
	:langmap=Newspeak\:.ns2:\
	:langmap=Nimrod\:.nim.nimrod:\
	:langmap=OCaml\:.ml.mli.mll.mly:\
	:langmap=Objective-C++\:.mm.hh:\
	:langmap=Objective-C\:.m.h:\
	:langmap=Objective-J\:.j:\
	:langmap=Octave\:.m:\
	:langmap=Ooc\:.ooc:\
	:langmap=Opa\:.opa:\
	:langmap=OpenEdge\:.p.cls:\
	:langmap=PHP\:.php.php3.phtml:\
	:langmap=Pascal\:.pas:\
	:langmap=Perl\:.pl.pm:\
	:langmap=PostScript\:.ps.eps:\
	:langmap=PowerShell\:.ps1:\
	:langmap=Prolog\:.prolog.pro.pl:\
	:langmap=Python\:.py.pyw.sc.tac.sage:\
	:langmap=QML\:.qml:\
	:langmap=REBOL\:.r.r3:\
	:langmap=RHTML\:.rhtml:\
	:langmap=Racket\:.rkt.rktl:\
	:langmap=Ragel\:.rl:\
	:langmap=Redcode\:.cw:\
	:langmap=RobotFramework\:.robot:\
	:langmap=Ruby\:.rb.rbw.rake.gemspec.rbx.duby:\
	:langmap=Rust\:.rs.rc:\
	:langmap=S\:.S.R:\
	:langmap=Scala\:.scala:\
	:langmap=Scaml\:.scaml:\
	:langmap=Scheme\:.scm.ss:\
	:langmap=Scilab\:.sci.sce.tst:\
	:langmap=Smalltalk\:.st:\
	:langmap=Smarty\:.tpl:\
	:langmap=Sml\:.sml.sig.fun:\
	:langmap=Snobol\:.snobol:\
	:langmap=SourcePawn\:.sp:\
	:langmap=Spitfire\:.spt:\
	:langmap=Ssp\:.ssp:\
	:langmap=Stan\:.stan:\
	:langmap=SystemVerilog\:.sv.svh:\
	:langmap=Tcl\:.tcl:\
	:langmap=TeX\:.tex.aux.toc:\
	:langmap=Tea\:.tea:\
	:langmap=Treetop\:.treetop.tt:\
	:langmap=TypeScript\:.ts:\
	:langmap=UrbiScript\:.u:\
	:langmap=VB.net\:.vb.bas:\
	:langmap=VGL\:.rpf:\
	:langmap=Vala\:.vala.vapi:\
	:langmap=Velocity\:.vm.fhtml:\
	:langmap=Verilog\:.v:\
	:langmap=Vhdl\:.vhdl.vhd:\
	:langmap=Vim\:.vim:\
	:langmap=XBase\:.PRG.prg:\
	:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
	:langmap=XSLT\:.xsl.xslt.xpl:\
	:langmap=Xtend\:.xtend:\
	:gtags_parser=ABAP\:$pygmentslib:\
	:gtags_parser=ANTLR\:$pygmentslib:\
	:gtags_parser=ActionScript3\:$pygmentslib:\
	:gtags_parser=Ada\:$pygmentslib:\
	:gtags_parser=AppleScript\:$pygmentslib:\
	:gtags_parser=AspectJ\:$pygmentslib:\
	:gtags_parser=Aspx-cs\:$pygmentslib:\
	:gtags_parser=Asymptote\:$pygmentslib:\
	:gtags_parser=AutoIt\:$pygmentslib:\
	:gtags_parser=Awk\:$pygmentslib:\
	:gtags_parser=BUGS\:$pygmentslib:\
	:gtags_parser=Bash\:$pygmentslib:\
	:gtags_parser=Bat\:$pygmentslib:\
	:gtags_parser=BlitzMax\:$pygmentslib:\
	:gtags_parser=Boo\:$pygmentslib:\
	:gtags_parser=Bro\:$pygmentslib:\
	:gtags_parser=C#\:$pygmentslib:\
	:gtags_parser=C++\:$pygmentslib:\
	:gtags_parser=COBOLFree\:$pygmentslib:\
	:gtags_parser=COBOL\:$pygmentslib:\
	:gtags_parser=CUDA\:$pygmentslib:\
	:gtags_parser=C\:$pygmentslib:\
	:gtags_parser=Ceylon\:$pygmentslib:\
	:gtags_parser=Cfm\:$pygmentslib:\
	:gtags_parser=Clojure\:$pygmentslib:\
	:gtags_parser=CoffeeScript\:$pygmentslib:\
	:gtags_parser=Common-Lisp\:$pygmentslib:\
	:gtags_parser=Coq\:$pygmentslib:\
	:gtags_parser=Croc\:$pygmentslib:\
	:gtags_parser=Csh\:$pygmentslib:\
	:gtags_parser=Cython\:$pygmentslib:\
	:gtags_parser=Dart\:$pygmentslib:\
	:gtags_parser=Dg\:$pygmentslib:\
	:gtags_parser=Duel\:$pygmentslib:\
	:gtags_parser=Dylan\:$pygmentslib:\
	:gtags_parser=ECL\:$pygmentslib:\
	:gtags_parser=EC\:$pygmentslib:\
	:gtags_parser=ERB\:$pygmentslib:\
	:gtags_parser=Elixir\:$pygmentslib:\
	:gtags_parser=Erlang\:$pygmentslib:\
	:gtags_parser=Evoque\:$pygmentslib:\
	:gtags_parser=FSharp\:$pygmentslib:\
	:gtags_parser=Factor\:$pygmentslib:\
	:gtags_parser=Fancy\:$pygmentslib:\
	:gtags_parser=Fantom\:$pygmentslib:\
	:gtags_parser=Felix\:$pygmentslib:\
	:gtags_parser=Fortran\:$pygmentslib:\
	:gtags_parser=GAS\:$pygmentslib:\
	:gtags_parser=GLSL\:$pygmentslib:\
	:gtags_parser=Genshi\:$pygmentslib:\
	:gtags_parser=Gherkin\:$pygmentslib:\
	:gtags_parser=Gnuplot\:$pygmentslib:\
	:gtags_parser=Go\:$pygmentslib:\
	:gtags_parser=GoodData-CL\:$pygmentslib:\
	:gtags_parser=Gosu\:$pygmentslib:\
	:gtags_parser=Groovy\:$pygmentslib:\
	:gtags_parser=Gst\:$pygmentslib:\
	:gtags_parser=HaXe\:$pygmentslib:\
	:gtags_parser=Haml\:$pygmentslib:\
	:gtags_parser=Haskell\:$pygmentslib:\
	:gtags_parser=Hxml\:$pygmentslib:\
	:gtags_parser=Hybris\:$pygmentslib:\
	:gtags_parser=IDL\:$pygmentslib:\
	:gtags_parser=Io\:$pygmentslib:\
	:gtags_parser=Ioke\:$pygmentslib:\
	:gtags_parser=JAGS\:$pygmentslib:\
	:gtags_parser=Jade\:$pygmentslib:\
	:gtags_parser=JavaScript\:$pygmentslib:\
	:gtags_parser=Java\:$pygmentslib:\
	:gtags_parser=Jsp\:$pygmentslib:\
	:gtags_parser=Julia\:$pygmentslib:\
	:gtags_parser=Koka\:$pygmentslib:\
	:gtags_parser=Kotlin\:$pygmentslib:\
	:gtags_parser=LLVM\:$pygmentslib:\
	:gtags_parser=Lasso\:$pygmentslib:\
	:gtags_parser=Literate-Haskell\:$pygmentslib:\
	:gtags_parser=LiveScript\:$pygmentslib:\
	:gtags_parser=Logos\:$pygmentslib:\
	:gtags_parser=Logtalk\:$pygmentslib:\
	:gtags_parser=Lua\:$pygmentslib:\
	:gtags_parser=MAQL\:$pygmentslib:\
	:gtags_parser=MOOCode\:$pygmentslib:\
	:gtags_parser=MXML\:$pygmentslib:\
	:gtags_parser=Mako\:$pygmentslib:\
	:gtags_parser=Mason\:$pygmentslib:\
	:gtags_parser=Matlab\:$pygmentslib:\
	:gtags_parser=MiniD\:$pygmentslib:\
	:gtags_parser=Modelica\:$pygmentslib:\
	:gtags_parser=Modula2\:$pygmentslib:\
	:gtags_parser=Monkey\:$pygmentslib:\
	:gtags_parser=MoonScript\:$pygmentslib:\
	:gtags_parser=MuPAD\:$pygmentslib:\
	:gtags_parser=Myghty\:$pygmentslib:\
	:gtags_parser=NASM\:$pygmentslib:\
	:gtags_parser=NSIS\:$pygmentslib:\
	:gtags_parser=Nemerle\:$pygmentslib:\
	:gtags_parser=NewLisp\:$pygmentslib:\
	:gtags_parser=Newspeak\:$pygmentslib:\
	:gtags_parser=Nimrod\:$pygmentslib:\
	:gtags_parser=OCaml\:$pygmentslib:\
	:gtags_parser=Objective-C++\:$pygmentslib:\
	:gtags_parser=Objective-C\:$pygmentslib:\
	:gtags_parser=Objective-J\:$pygmentslib:\
	:gtags_parser=Octave\:$pygmentslib:\
	:gtags_parser=Ooc\:$pygmentslib:\
	:gtags_parser=Opa\:$pygmentslib:\
	:gtags_parser=OpenEdge\:$pygmentslib:\
	:gtags_parser=PHP\:$pygmentslib:\
	:gtags_parser=Pascal\:$pygmentslib:\
	:gtags_parser=Perl\:$pygmentslib:\
	:gtags_parser=PostScript\:$pygmentslib:\
	:gtags_parser=PowerShell\:$pygmentslib:\
	:gtags_parser=Prolog\:$pygmentslib:\
	:gtags_parser=Python\:$pygmentslib:\
	:gtags_parser=QML\:$pygmentslib:\
	:gtags_parser=REBOL\:$pygmentslib:\
	:gtags_parser=RHTML\:$pygmentslib:\
	:gtags_parser=Racket\:$pygmentslib:\
	:gtags_parser=Ragel\:$pygmentslib:\
	:gtags_parser=Redcode\:$pygmentslib:\
	:gtags_parser=RobotFramework\:$pygmentslib:\
	:gtags_parser=Ruby\:$pygmentslib:\
	:gtags_parser=Rust\:$pygmentslib:\
	:gtags_parser=S\:$pygmentslib:\
	:gtags_parser=Scala\:$pygmentslib:\
	:gtags_parser=Scaml\:$pygmentslib:\
	:gtags_parser=Scheme\:$pygmentslib:\
	:gtags_parser=Scilab\:$pygmentslib:\
	:gtags_parser=Smalltalk\:$pygmentslib:\
	:gtags_parser=Smarty\:$pygmentslib:\
	:gtags_parser=Sml\:$pygmentslib:\
	:gtags_parser=Snobol\:$pygmentslib:\
	:gtags_parser=SourcePawn\:$pygmentslib:\
	:gtags_parser=Spitfire\:$pygmentslib:\
	:gtags_parser=Ssp\:$pygmentslib:\
	:gtags_parser=Stan\:$pygmentslib:\
	:gtags_parser=SystemVerilog\:$pygmentslib:\
	:gtags_parser=Tcl\:$pygmentslib:\
	:gtags_parser=TeX\:$pygmentslib:\
	:gtags_parser=Tea\:$pygmentslib:\
	:gtags_parser=Treetop\:$pygmentslib:\
	:gtags_parser=TypeScript\:$pygmentslib:\
	:gtags_parser=UrbiScript\:$pygmentslib:\
	:gtags_parser=VB.net\:$pygmentslib:\
	:gtags_parser=VGL\:$pygmentslib:\
	:gtags_parser=Vala\:$pygmentslib:\
	:gtags_parser=Velocity\:$pygmentslib:\
	:gtags_parser=Verilog\:$pygmentslib:\
	:gtags_parser=Vhdl\:$pygmentslib:\
	:gtags_parser=Vim\:$pygmentslib:\
	:gtags_parser=XBase\:$pygmentslib:\
	:gtags_parser=XQuery\:$pygmentslib:\
	:gtags_parser=XSLT\:$pygmentslib:\
	:gtags_parser=Xtend\:$pygmentslib:
#
# Drupal configuration.
#
drupal|Drupal content management platform:\
	:tc=common:\
	:langmap=php\:.php.module.inc.profile.install.test:
#---------------------------------------------------------------------
# Configuration for htags(1)
#---------------------------------------------------------------------
htags:\
	::
Вероятно, тут почти всё можно выкинуть.
Парсер паскаля находится в universal-ctags, но он не может почти ничего. Однако плагин для Паскаля использует именно global, и global работает лучше в случае, когда определения больше одного - по кнопке f12 сразу предлагает выбрать нужное определение.

Дальнейший шаг - вероятно, нужно взять парсер от php и переделывать его. Поскольку там учитываются классы и прочая.

Ответить